odoo/setup/lib/functions.py

1052 lines
40 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import print_function
import base64
import sys
import ssl
import odoorpc
ssl._create_default_https_context = ssl._create_unverified_context
try:
from urllib.parse import urlparse
except ImportError:
from urlparse import urlparse
class DatenpolFunctions(object):
def __init__(self, environment, config):
self.env = environment
self.config = config
self._init_OdooRPC()
def _init_OdooRPC(self):
protocol = 'jsonrpc'
if urlparse(self.env.host).scheme == 'https':
protocol += '+ssl'
host = urlparse(self.env.host).netloc
self.odoo = odoorpc.ODOO(host, protocol=protocol, port=self.env.port)
def create_db(self):
"""Neue Datenbank erstellen"""
self.odoo.db.create(self.env.super_admin_pw, self.env.dbname, self.env.demo, self.config.lang, self.env.pwd)
return True
def create_dump(self):
""" Erstelle Odoo-Dump"""
dump = self.odoo.db.dump(self.env.super_admin_pw, self.env.dbname, 'zip')
with open(self.config.dump_file, 'wb') as dump_file:
dump_file.write(dump.read())
return True
def create_db_from_dump(self):
""" Neue Datenbank von Dump erstellen"""
try:
with open(self.config.dump_file, 'rb') as dump_file:
self.odoo.db.restore(self.env.super_admin_pw, self.env.dbname, dump_file, True)
except Exception:
raise Exception(
"Wiederherstellen der Datenbank fehlgeschlagen. Eventuell wurde './dp [env] dump' nicht ausgeführt.")
print(
"\nACHTUNG: Nicht vergessen './dp [env] anonym' auszuführen, sodass es zu keiner Kommunikation mit dem Produktivsystem kommt")
return True
def drop_db(self):
""" Datenbank löschen"""
self.odoo.db.drop(self.env.super_admin_pw, self.env.dbname)
return True
def login(self):
"""Login"""
self.odoo.login(self.env.dbname, self.env.username, self.env.pwd)
self.company_id = self.odoo.env.user.company_id
return True
def set_default_settings(self):
"""Systemeinstellungen konfigurieren"""
res_settings = self.odoo.env['res.config.settings']
vals = res_settings.default_get([])
if self.config.settings.get('multi_sales_price', False):
if self.config.settings.get('multi_sales_price_method', False) and self.config.settings.get(
'multi_sales_price_method', False) == 'percentage':
self.config.settings.update({
"group_sale_pricelist": True,
"group_product_pricelist": False,
"group_pricelist_item": True,
"sale_pricelist_setting": "formula",
})
if self.config.settings.get('multi_sales_price_method', False) and self.config.settings.get(
'multi_sales_price_method', False) == 'formula':
self.config.settings.update({
"group_sale_pricelist": True,
"group_product_pricelist": True,
"group_pricelist_item": False,
"sale_pricelist_setting": "percentage",
})
vals.update(self.config.settings)
wizard_id = res_settings.create(vals)
return res_settings.execute(wizard_id)
def set_default_tax_settings(self):
"""Set default tax"""
res_settings = self.odoo.env['res.config.settings']
vals = res_settings.default_get([])
if self.config.tax_settings.get('default_sale_tax_id', False):
sales_tax_ids = self.odoo.env['account.tax'].search(
[
('name', '=', self.config.tax_settings.get('default_sale_tax_id')),
('company_id', '=', self.company_id.id)
])
self.config.tax_settings.update({
"default_sale_tax_id": sales_tax_ids,
})
if self.config.tax_settings.get('default_purchase_tax_id', False):
purchase_tax_ids = self.odoo.env['account.tax'].search(
[
('name', '=', self.config.tax_settings.get('default_purchase_tax_id')),
('company_id', '=', self.company_id.id)
])
self.config.tax_settings.update({
"default_purchase_tax_id": purchase_tax_ids,
})
vals.update(self.config.tax_settings)
wizard_id = res_settings.create(vals)
return res_settings.execute(wizard_id)
def _readAndReturnFile(self, filename, encode=''):
fi = open(filename, 'rb')
content = ''
if encode == '':
content = fi.read()
elif encode == 'base64':
content = base64.b64encode(fi.read())
content = content.decode()
else:
sys.exit(-1)
fi.close()
return content
def set_company(self):
"""Setze Unternehmensdaten (Allgemein, RML, Logo)"""
vals = self.config.company_data
country_id = self.odoo.env.ref('base.' + vals['country_id']).id
if vals.get('logo', False):
vals['logo'] = self._readAndReturnFile(vals['logo'], encode='base64')
if vals.get('favicon_backend', False):
vals['favicon_backend'] = self._readAndReturnFile(vals['favicon_backend'], encode='base64')
vals['country_id'] = country_id
return self.odoo.env.ref(self.config.company_xmlid).write(vals)
def enable_res_config_for_company(self):
"""Setze beim portal_template_user die Company als zulässiges Unternehmen"""
portal_template_user = self.odoo.env.ref('auth_signup.default_template_user')
vals = {}
companies = self.odoo.env['res.company'].search([])
vals_company = []
for company in companies:
if company not in portal_template_user.company_ids.ids:
vals_company.append((4, company))
vals = {'company_ids': vals_company}
return portal_template_user.write(vals)
def set_multicompany_data(self):
"""Multicompany Systemeinstellungen konfigurieren"""
if hasattr(self.config, 'multi_company_settings'):
res_settings = self.odoo.env['res.config.settings']
vals = res_settings.default_get([])
newvals = {}
for key, value in self.config.multi_company_settings.items():
if isinstance(value, tuple):
if value[0] == 'xmlid':
newvals.update({key: self.odoo.env.ref(value[1]).id})
else:
newvals.update({key: value})
vals.update(newvals)
wizard_id = res_settings.create(vals)
return res_settings.browse(wizard_id).execute()
return True
def load_languages(self):
"""Lade zusätzliche Sprachen"""
languages = self.config.load_languages
language_install_obj = self.odoo.env['base.language.install']
for language in languages:
already_installed = False
for installed in self.odoo.env['res.lang'].get_installed():
if language == installed[0]:
already_installed = True
break
if not already_installed:
for lang in self.odoo.env['res.lang'].get_available():
if lang[0] == language:
lang_id = language_install_obj.create({'lang': language})
lang_id = language_install_obj.browse(lang_id)
lang_id.lang_install()
return True
def set_taxes(self):
"""Setze Standard-Steuersätze"""
c = self.config
# Standard Sales Tax
sales_tax_ids = self.odoo.env['account.tax'].search(
[('name', '=', c.default_sales_tax)])
self.odoo.env['ir.default'].set('product.template', 'taxes_id', sales_tax_ids, company_id=self.company_id.id)
# Standard Purchase Tax
# supplier_tax_ids = self.odoo.env['account.tax'].search(
# [('name', '=', c.default_supplier_tax)])
# self.odoo.env['ir.default'].set('product.template', 'supplier_taxes_id', supplier_tax_ids,
# company_id=self.company_id.id)
# return True
tax_ids = self.odoo.env['account.tax'].search([('description', 'not in', self.config.valid_taxes)])
return self.odoo.env['account.tax'].browse(tax_ids).write({'active': False})
def set_incoterms(self):
"""Lieferbedingungen setzen"""
if hasattr(self.config, 'incoterms'):
terms = self.config.incoterms
stock_incoterms = self.odoo.env['stock.incoterms']
for name, code in terms:
existing_ids = stock_incoterms.search(
['|', ('active', '=', True), ('active', '=', False), ('code', '=', code)]
)
if existing_ids:
vals = {
'active': True,
'name': name,
}
stock_incoterms.write(existing_ids, vals)
else:
vals = {
'name': name,
'code': code,
}
stock_incoterms.create(vals)
codes = [code for name, code in terms]
inactive_ids = stock_incoterms.search([('code', 'not in', codes)])
stock_incoterms.write(inactive_ids, {'active': False})
return True
def install_website_modules(self):
"""Website Module installieren"""
mod_ids = self.odoo.env['ir.module.module'].search(
[('name', 'in', self.config.multi_website_modules), ('state', '!=', 'installed')])
self.odoo.env['ir.module.module'].button_immediate_install(mod_ids)
return True
def setup_websites(self):
"""Setup Websites"""
ir_model_obj = self.odoo.env['ir.model.data']
crm_team_obj = self.odoo.env['crm.team']
# if not ir_model_obj.search([('module', '=', 'website_multi_theme'), ('name', '=', 'clarico_multi')]):
# # Create Theme
# clarico_theme = self.odoo.env['website.theme'].create({
# 'name': 'Multiwebsite Clarico Theme',
# 'converted_theme_addon': 'theme_clarico'
# })
#
# vals = {
# 'model': 'website.theme',
# 'module': 'website_multi_theme',
# 'name': 'clarico_multi',
# 'res_id': str(clarico_theme),
# 'noupdate': False,
# }
# ir_model_obj.create(vals)
#
# clarico_theme = self.odoo.env.ref('website_multi_theme.clarico_multi')
# self.odoo.env.ref('website.default_website').multi_theme_reload()
# create Salesteam for all websites
cr_team_ir_heizpaneel = crm_team_obj.search([('name', '=', 'IR Heizpaneele')])
if not cr_team_ir_heizpaneel:
crm_team_vals = {
'name': 'IR Heizpaneele',
'team_type': 'website',
'company_id': self.odoo.env.ref('base.main_company').id,
}
cr_team_ir_heizpaneel = crm_team_obj.browse([crm_team_obj.create(crm_team_vals)])
else:
cr_team_ir_heizpaneel = crm_team_obj.browse(cr_team_ir_heizpaneel)
cr_team_heizpaneel = crm_team_obj.search([('name', '=', 'Heizpaneele')])
if not cr_team_heizpaneel:
crm_team_vals = {
'name': 'Heizpaneele',
'team_type': 'website',
'company_id': self.odoo.env.ref('base.main_company').id,
}
cr_team_heizpaneel = crm_team_obj.browse([crm_team_obj.create(crm_team_vals)])
else:
cr_team_heizpaneel = crm_team_obj.browse(cr_team_heizpaneel)
# Create and configure Websites
default_website = self.odoo.env.ref('website.default_website')
default_website.write({
'name': 'IR Heizpaneele',
'domain': 'www.irheizpaneele.at',
'company_id': self.odoo.env.ref('base.main_company').id,
'salesteam_id': cr_team_ir_heizpaneel.id,
'multi_theme_id': self.odoo.env.ref('website_multi_theme.theme_default').id
})
heizpaneele_vals = {
'name': 'Heizpaneele',
'domain': 'www.heizpaneele.at',
'company_id': self.odoo.env.ref('base.main_company').id,
'salesteam_id': cr_team_heizpaneel.id,
'multi_theme_id': self.odoo.env.ref('website_multi_theme.theme_default').id
}
if not ir_model_obj.search([('module', '=', 'dp_website'), ('name', '=', 'tz_heizpaneele')]):
heizpaneele = self.odoo.env['website'].create(heizpaneele_vals)
vals = {
'model': 'website',
'module': 'dp_website',
'name': 'tz_heizpaneele',
'res_id': str(heizpaneele),
'noupdate': True,
}
ir_model_obj.create(vals)
else:
heizpaneele = self.odoo.env.ref('dp_website.tz_heizpaneele')
heizpaneele.write(heizpaneele_vals)
res_settings = self.odoo.env['res.config.settings']
vals = res_settings.default_get([])
# enable product attributes and variants
vals.update({
'group_product_variant': True,
'auth_signup_uninvited': 'b2c'
})
wizard_id = res_settings.create(vals)
res_settings.execute(wizard_id)
#
self.odoo.env['product.pricelist'].browse(self.odoo.env['product.pricelist'].search([])).write({
'selectable': False
})
# create Cart Menu
if not self.odoo.env['website.menu'].search([('name', '=', 'Cart')]):
self.odoo.env['website.menu'].create({
'website_id': False,
'name': 'Cart',
'url': '/shop/cart',
'parent_id': self.odoo.env.ref('website.main_menu').id,
})
# remove unnecessary menus
if ir_model_obj.search([('module', '=', 'clarico_layout'), ('name', '=', 'clarico_categories')]):
self.odoo.env.ref('clarico_layout.clarico_categories').unlink()
if ir_model_obj.search([('module', '=', 'clarico_layout'), ('name', '=', 'clarico_diningroom')]):
self.odoo.env.ref('clarico_layout.clarico_diningroom').unlink()
if ir_model_obj.search([('module', '=', 'clarico_layout'), ('name', '=', 'clarico_livingroom')]):
self.odoo.env.ref('clarico_layout.clarico_livingroom').unlink()
return True
def configure_payment_providers(self):
"""Zahlungsmethoden konfigurieren"""
vals = {
'website_ids': [(6, 0, [self.odoo.env.ref('dp_website.tz_heizpaneele').id,
self.odoo.env.ref('website.default_website').id])]
}
paypal = self.odoo.env.ref('payment.payment_acquirer_paypal')
paypal.write(vals)
stripe = self.odoo.env.ref('payment.payment_acquirer_stripe')
stripe.write(vals)
return True
def install_modules(self, module=False, raise_exception=False):
"""Module installieren"""
module_to_install = [module] if module else self.config.modules
mod_ids = self.odoo.env['ir.module.module'].search(
[('name', 'in', module_to_install), ('state', '!=', 'installed')])
if not len(mod_ids) == 1 and raise_exception:
raise Exception('Module %s not found or is not in state "uninstalled".' % module_to_install)
self.odoo.env['ir.module.module'].button_immediate_install(mod_ids)
return True
def _set_picking_sequence_prefix(self, code, value):
seq_dict = self.config.sequences
# Hauptsequenz des Picking Types mit diesem code anpassen
picking_type_id = self.odoo.env['stock.picking.type'].search([('code', '=', code)], 0, 1, 'id')[0]
picking_type = self.odoo.env['stock.picking.type'].read(picking_type_id, ['sequence_id'])
s_id = picking_type[0]['sequence_id'][0]
if not self.odoo.env['ir.sequence'].write(s_id, seq_dict.get(value)):
return False
# Allen Picking Types mit diesem code die Haupsequenz geben
picking_type_ids = self.odoo.env['stock.picking.type'].search([('code', '=', code)])
if not self.odoo.env['stock.picking.type'].write(picking_type_ids, {'sequence_id': s_id}):
return False
def set_sequences(self):
"""Dokumentennummern setzen"""
seq_dict = self.config.sequences
ir_seq = self.odoo.env['ir.sequence']
# Lieferschein
if seq_dict.get('picking.out', False):
self._set_picking_sequence_prefix('outgoing', 'picking.out')
if seq_dict.get('picking.in', False):
self._set_picking_sequence_prefix('incoming', 'picking.in')
if seq_dict.get('picking.int', False):
self._set_picking_sequence_prefix('internal', 'picking.int')
# Angebot
if seq_dict.get('sale.order', False):
s_ids = ir_seq.search([('code', '=', 'sale.order'), ('company_id', '=', self.company_id.id)])
if not s_ids:
s_ids = ir_seq.search([('code', '=', 'sale.order'), ('company_id', '=', False)])
if len(s_ids) != 1:
s_ids = ir_seq.search([('code', '=', 'sale.order')], limit=1)
if not s_ids:
return False
ir_seq_id = ir_seq.browse(s_ids)
if ir_seq_id.company_id and ir_seq_id.company_id.id != self.company_id.id:
seq_dict['sale.order']['company_id'] = self.company_id.id
s_ids = [ir_seq_id.copy()]
if not ir_seq_id.company_id:
seq_dict['sale.order']['company_id'] = self.company_id.id
if not ir_seq.write(s_ids, seq_dict.get('sale.order')):
return False
# Arbeitsschein
if seq_dict.get('work.order', False):
s_ids = ir_seq.search([('code', '=', 'work.order')])
if len(s_ids) != 1:
return False
if not ir_seq.write(s_ids, seq_dict.get('work.order')):
return False
# Partner Code
if seq_dict.get('res.partner', False):
s_ids = ir_seq.search([('code', '=', 'res.partner')])
if len(s_ids) != 1:
return False
if not ir_seq.write(s_ids, seq_dict.get('res.partner')):
return False
# EK-Angebot
if seq_dict.get('purchase.order', False):
s_ids = ir_seq.search([('code', '=', 'purchase.order')])
if len(s_ids) != 1:
return False
if not ir_seq.write(s_ids, seq_dict.get('purchase.order')):
return False
# Hole Journal für Ausgangsrechnungen
j_ids = self.odoo.env['account.journal'].search(
[('code', '=', 'Re.:'), ('company_id', '=', self.company_id.id)])
if not j_ids:
j_ids = self.odoo.env['account.journal'].search([('code', '=', 'Re.:')])
if len(j_ids) != 1:
return False
journals = self.odoo.env['account.journal'].read(j_ids,
['refund_sequence', 'sequence_id', 'refund_sequence_id'])
# Rechnungsnummer
if seq_dict.get('account.invoice', False):
s_id = journals[0]['sequence_id'][0]
if not ir_seq.write([s_id], seq_dict.get('account.invoice')):
return False
# Gutschriftennummer
ref_seq_data = seq_dict.get('account.invoice_refund', False)
if ref_seq_data:
s_id = journals[0]['refund_sequence_id'] and journals[0]['refund_sequence_id'][0] or False
if not s_id:
s_id = ir_seq.create(ref_seq_data)
else:
ir_seq.write([s_id], ref_seq_data)
# Wenn Checkbox nicht gesetzt ist, dann setzen
vals = {
'refund_sequence_id': s_id,
'refund_sequence': True
}
self.odoo.env['account.journal'].write(j_ids, vals)
else:
vals = {
'refund_sequence': False
}
self.odoo.env['account.journal'].write(j_ids, vals)
return True
def set_admin_rights(self):
"""Setze Administrator Rechte"""
groups = []
user_id = self.odoo.env._uid
# Technische Eigenschaften
groups.append((4, self.odoo.env.ref('base.group_no_one').id))
# Finanzmanager
groups.append((4, self.odoo.env.ref('account.group_account_manager').id))
vals = {
'groups_id': groups,
'tz': 'Europe/Vienna',
}
return self.odoo.env['res.users'].write([user_id], vals)
def set_uom(self):
"""Mengeneinheiten setzen"""
self.odoo.env.context['lang'] = self.config.lang
c = self.config
active_uoms = c.active_uoms.keys()
product_uom = self.odoo.env['product.uom']
active_ids = []
for uom_xml_id in active_uoms:
uom_id = self.odoo.env.ref(uom_xml_id).id
active_ids.append(uom_id)
# Set all UOMs to active
ids = product_uom.search(['|', ('active', '=', True), ('active', '=', False)])
res = product_uom.write(ids, {'active': True})
if not res:
return False
# Set all other UOMs to inactive
inactive_ids = product_uom.search([('id', 'not in', active_ids)])
res = product_uom.write(inactive_ids, {'active': False})
if not res:
return False
# Update names
for uom_xml_id, name in c.active_uoms.items():
uom_id = self.odoo.env.ref(uom_xml_id).id
res = product_uom.write([uom_id], {'name': name})
if not res:
return False
return True
def set_fiscal_position(self):
"""Steuerzuordnungen setzen"""
c = self.config
# Ungültige Steuerzuordnungen auf inaktiv setzen
invalid_ids = self.odoo.env['account.fiscal.position'].search([('name', 'not in', c.valid_fiscal_positions)])
self.odoo.env['account.fiscal.position'].write(invalid_ids, {'active': False})
# Mappings inaktiver Steuern löschen (also wenn rechte Seite eine inaktive Steuer ist, wie z. B "strf. i.g.L"))
# valid_position_ids = self.odoo.env['account.fiscal.position'].search(
# [('name', 'in', c.valid_fiscal_positions)])
# valid_tax_ids = self.odoo.env['account.tax'].search([('parent_id', '=', False)])
# position_tax_line_ids = self.odoo.env['account.fiscal.position.tax'].search(
# [('position_id', 'in', valid_position_ids),
# ('tax_dest_id', 'not in', valid_tax_ids)])
# vals = {'tax_dest_id': False}
# return self.odoo.env['account.fiscal.position.tax'].write(position_tax_line_ids, vals)
return True
def update_module(self):
"""Aktualisiere Modul"""
module_names = self.config.module_name
mod_ids = []
for module_name in module_names:
mod_id = self.odoo.env['ir.module.module'].search([('name', '=', module_name), ('state', '=', 'installed')])
if not len(mod_id) == 1:
raise Exception('Module "%s" not found or not installed.' % module_name)
mod_ids += mod_id
self.odoo.env['ir.module.module'].button_upgrade(mod_ids)
self.odoo.env['base.module.upgrade'].upgrade_module([])
return True
def install_module(self):
"""Installiere Modul"""
self.install_modules(self.config.module_name, raise_exception=True)
return True
def update_modules(self):
"""Verfügbare Module updaten"""
wizard_id = self.odoo.env['base.module.update'].create({})
self.odoo.env['base.module.update'].update_module([wizard_id])
return True
def uninstall_module(self):
"""Deinstalliere Modul"""
module_name = self.config.module_name
mod_ids = self.odoo.env['ir.module.module'].search([('name', '=', module_name), ('state', '=', 'installed')])
if not len(mod_ids) == 1:
raise Exception("Module '%s' not found or is not installed." % module_name)
self.odoo.env['ir.module.module'].button_uninstall(mod_ids)
self.odoo.env['base.module.upgrade'].upgrade_module([])
return True
def cancel_upgrade_module(self):
"""Modul Upgrade abbrechen"""
module_name = self.config.module_name
mod_ids = self.odoo.env['ir.module.module'].search(
[('name', '=', module_name), ('state', '=', 'to upgrade')])
if not len(mod_ids) == 1:
raise Exception("Module '%s' not found or is not installed." % module_name)
self.odoo.env['ir.module.module'].button_upgrade_cancel(mod_ids)
return True
def setup_journals(self):
"""Update journals"""
if self.config.allow_cancel_invoice:
self.install_modules('account_cancel')
# Verkauf- und Gutschriftenjournal
j_ids = self.odoo.env['account.journal'].search([('type', 'in', ['sale', 'purchase'])])
if len(j_ids) != 2:
return False
vals = {
'update_posted': self.config.allow_cancel_invoice
}
return self.odoo.env['account.journal'].write(j_ids, vals)
def update_all(self):
"""Aktualisiere Modul"""
for module_name in self.config.modules:
mod_ids = self.odoo.env['ir.module.module'].search(
[('name', '=', module_name), ('state', '=', 'installed')])
if not len(mod_ids) == 1:
raise Exception('Module "%s" not found or ist not installed.' % module_name)
self.odoo.env['ir.module.module'].button_upgrade(mod_ids)
self.odoo.env['base.module.upgrade'].upgrade_module([])
return True
def set_warehouse(self):
"""Name des Zentrallagers setzen"""
is_installed = self.odoo.env['ir.module.module'].search(
[('name', '=', 'stock'), ('state', '=', 'installed')])
if is_installed:
vals = {
'name': self.config.warehouse_name or self.config.company_data.get('name', 'Mein Unternehmen'),
'delivery_steps': self.config.delivery_steps,
}
if self.config.warehouse_code:
vals.update({'code': self.config.warehouse_code})
warehouse_ids = self.odoo.env['stock.warehouse'].search([('id', '=', 1)])
return self.odoo.env['stock.warehouse'].write(warehouse_ids, vals)
else:
return True
def set_dmi_noupdate(self):
"""DMI: Einträge auf 'no update' setzen"""
domain = [('module', '=', 'dp_dmi'), ('noupdate', '=', False)]
data_ids = self.odoo.env['ir.model.data'].search(domain)
vals = {'noupdate': True}
return self.odoo.env['ir.model.data'].write(data_ids, vals)
def dmi_confirm_inventory(self):
"""DMI: Lagerstand einbuchen"""
dummy, inventory_id = self.odoo.env.ref('dp_dmi.inv_init')
inventory = self.odoo.env['stock.inventory'].read(inventory_id, ['state'])
if inventory.get('state', '') == 'confirm':
return self.odoo.env['stock.inventory'].action_done([inventory_id])
return True
def set_decimal_price(self):
"""Dezimalstellen setzen"""
decimal_precision = self.odoo.env['decimal.precision']
ir_data = self.odoo.env['ir.model.data']
# UOM
decimal_id = self.odoo.env.ref('product.decimal_product_uom').id
res = decimal_precision.write([decimal_id], {'digits': self.config.uom_decimals})
if not res:
return False
# # UOS
# decimal_id = self.odoo.env.ref('product.decimal_product_uos').id
# res = decimal_precision.write([decimal_id], {'digits': self.config.uom_decimals})
# if not res:
# return False
# Product Price
decimal_id = self.odoo.env.ref('product.decimal_price').id
res = decimal_precision.write([decimal_id], {'digits': self.config.price_decimals})
if not res:
return False
# Product Price
ids = decimal_precision.search([('name', '=', 'Product Price')])
res = decimal_precision.write(ids, {'digits': self.config.price_decimals})
if not res:
return False
return True
def setup_email(self):
"""Mailserver einrichten"""
mail_server = self.odoo.env['ir.mail_server']
server_ids = mail_server.search([])
if server_ids:
mail_server.unlink(server_ids)
if mail_server.create(self.config.mail_server):
return True
return False
def stock_set_cost_method(self):
"""Kalkulationsverfahren für Lager setzen"""
if hasattr(self.config, 'stock_cost_method'):
self.odoo.env['ir.default'].set('product.category', 'property_cost_method', self.config.stock_cost_method)
return True
def import_users(self):
"""User importieren"""
if hasattr(self.config, 'users_file'):
vals = {}
vals['res_model'] = 'res.users'
vals['file'] = self._readAndReturnFile(self.config.users_file)
fields = [u'id', u'name', u'login', u'email', u'groups_id/id', False, u'tz', u'mobile', u'phone',
u'function']
options = {u'headers': True, u'quoting': u'"', u'separator': u',', u'encoding': u'utf-8'}
wizard_id = self.odoo.env['base_import.import'].create(vals)
if wizard_id:
messages = self.odoo.env['base_import.import'].do(wizard_id, fields, options)
if messages:
print(messages)
return False
return True
return False
def set_translations(self):
"""Übersetzungen aktualisieren """
if hasattr(self.config, 'translation_files') and self.config.lang != 'en_US':
for file in self.config.translation_files:
data = self._readAndReturnFile(file, encode='base64')
vals = {
'name': 'test',
'code': self.config.lang,
'data': data,
'overwrite': True,
}
wizard_id = self.odoo.env['base.language.import'].create(vals)
self.odoo.env['base.language.import'].import_lang([wizard_id])
return True
return True
def default_set_order_policy(self):
"""Setze Rechnung von Lieferschein"""
if hasattr(self.config, 'order_policy'):
self.odoo.env['ir.default'].set('sale.order', 'order_policy', self.config.order_policy)
return True
def set_default_removal_strategy(self):
"""Default Entnahmestrategie für Lager setzen"""
if hasattr(self.config, 'removal_strategy'):
method = self.config.removal_strategy
strategy_ids = self.odoo.env['product.removal'].search([('method', '=', method)])
if not strategy_ids:
return False
stock_id = self.odoo.env.ref('stock.stock_location_stock').id
if not stock_id:
return False
product_category_ids = self.odoo.env['product.category'].search([])
return self.odoo.env['product.category'].write(product_category_ids,
{'removal_strategy_id': strategy_ids[0]})
return True
def set_default_values(self):
"""Defaultwerte für Dokumente setzen"""
for model, field, value in self.config.default_values:
self.odoo.env['ir.default'].set(model, field, value)
return True
def update_special_values(self):
"""Spezialwerte setzen"""
return True
def set_password_for_admin_users(self):
"""Passwort für admin Users setzen"""
user_ids = self.odoo.env['res.users'].search([('login', 'ilike', 'admin'), ('id', '!=', 1)])
wizard_id = self.odoo.env['change.password.wizard'].create({})
change_ids = []
for user_id in user_ids:
change_id = self.odoo.env['change.password.user'].create(
{'wizard_id': wizard_id, 'user_id': user_id, 'new_passwd': self.env.pwd})
change_ids.append(change_id)
self.odoo.env['change.password.user'].browse(change_ids).change_password_button()
return True
def update_values(self):
"""Existierende Daten aktualisieren"""
for xml_id, vals in self.config.data_updates.items():
res = self.odoo.env.ref(xml_id)
model = res._name
self.odoo.env[model].write([res.id], vals)
return True
def set_sys_params(self):
"""Systemparameter setzen"""
for key, value in self.config.system_parameters.items():
param_ids = self.odoo.env['ir.config_parameter'].search([('key', '=', key)])
vals = {
'key': key,
'value': value,
}
if param_ids:
self.odoo.env['ir.config_parameter'].write(param_ids, vals)
else:
self.odoo.env['ir.config_parameter'].create(vals)
return True
def remove_sys_params(self):
"""Systemparameter entfernen"""
for key, value in self.config.system_parameters_remove_on_rollout.items():
print(key)
param_ids = self.odoo.env['ir.config_parameter'].search([('key', '=', key)])
print(param_ids)
if param_ids:
self.odoo.env['ir.config_parameter'].unlink(param_ids)
return True
def setup_reports(self):
"""Berichte konfigurieren"""
for report, attachment in self.config.reports.items():
r_ids = self.odoo.env.ref(report)
if r_ids:
self.odoo.env['ir.actions.report'].write(r_ids.id, {'attachment': attachment})
else:
return False
return True
def invalidate_email(self):
"""In E-Mail-Adressen @ durch # ersetzen, um unbeabsichtigen E-Mail-Versand zu vermeiden"""
# E-Mail adressen von res_partner: @ -> #
p_ids = self.odoo.env['res.partner'].search([('email', 'ilike', '%@%')])
partner = self.odoo.env['res.partner'].read(p_ids, ['email'])
for p in partner:
id = p['id']
email = p['email']
new_email = email.replace('@', '#')
self.odoo.env['res.partner'].write([id], {'email': new_email})
return True
def make_anonymous(self):
"""Anonymisieren der Daten"""
res = True
# res &= self.make_anonymous_one('make_anonymous_partner')
# res &= self.make_anonymous_one('make_anonymous_project')
# res &= self.make_anonymous_one('make_anonymous_employee')
# res &= self.make_anonymous_one('make_anonymous_leads')
res &= self.make_anonymous_one('make_anonymous_mailserver')
res &= self.make_anonymous_one('make_anonymous_cron')
return res
def make_anonymous_one(self, func_name):
"""Anonymisieren der Daten ein Schritt"""
try:
getattr(self, func_name)()
print('.............. ' + func_name + ': OK')
except:
print('.............. ' + func_name + ': ERROR!!!')
return False
return True
def make_anonymous_partner(self):
ids = self.odoo.env['res.partner'].search([])
for id in ids:
vals = {
'name': 'Partner %s' % id,
'street': '----',
'email': 'test@example.com',
}
self.odoo.env['res.partner'].write([id], vals)
def make_anonymous_project(self):
if self.odoo.env['ir.module.module'].search([('name', '=', 'project'), ('state', '=', 'installed')]):
ids = self.odoo.env['project.project'].search([])
for id in ids:
vals = {
'name': 'Projekt %s' % id,
}
self.odoo.env['project.project'].write([id], vals)
# Tasks
ids = self.odoo.env['project.task'].search([])
for id in ids:
vals = {
'name': 'Aufgabe %s' % id,
}
self.odoo.env['project.task'].write([id], vals)
def make_anonymous_employee(self):
if self.odoo.env['ir.module.module'].search([('name', '=', 'hr'), ('state', '=', 'installed')]):
ids = self.odoo.env['hr.employee'].search([])
for id in ids:
vals = {
'name': 'Mitarbeiter %s' % id,
'work_email': 'test@example.com',
}
self.odoo.env['hr.employee'].write([id], vals)
def make_anonymous_leads(self):
if self.odoo.env['ir.module.module'].search([('name', '=', 'crm'), ('state', '=', 'installed')]):
ids = self.odoo.env['crm.lead'].search([])
for id in ids:
vals = {
'name': 'Lead %s' % id,
'email_from': 'test@example.com',
'description': '',
}
ids = self.odoo.env['crm.lead'].write([id], vals)
def make_anonymous_mailserver(self):
server_ids = self.odoo.env['ir.mail_server'].search([])
self.odoo.env['ir.mail_server'].write(server_ids, {'active': False})
server_ids = self.odoo.env['fetchmail.server'].search([])
self.odoo.env['fetchmail.server'].unlink(server_ids)
def make_anonymous_cron(self):
cron_ids = self.odoo.env['ir.cron'].search([])
if cron_ids:
self.odoo.env['ir.cron'].write(cron_ids, {'active': False})
def set_ext_ids(self):
"""ExtIDs für Accounts und Types"""
# # Konten Ext IDs
# lst_accs = ['200000', '330000', '250000', '350000'] # odoo 9 nummern
# for acc in lst_accs:
# res_id = self._execute('account.account', 'search', [('code', '=', acc)])
# # print "---------------------------------------------"
# # print acc
# # print res_id
# vals = {
# 'name': 'cust_account_mapp_' + acc,
# 'module': 'account',
# 'model': 'account.account',
# 'res_id': res_id[0],
# }
# try:
# self._execute('ir.model.data', 'create', vals)
# except:
# print "Fehler Anlage ExtID " + 'cust_account_mapp_' + acc
return True
def consume_tours(self):
"""Odoo-Touren auf konsumiert setzen"""
web_tour_obj = self.odoo.env['web_tour.tour']
tours = [
'crm_tour',
'mail_tour',
'sale_tour',
'rte',
'rte_inline',
'rte_translator',
'account_accountant_tour',
'banner',
'event',
]
already_set_tours = []
for uid in self.odoo.env['res.users'].search([]):
user_webtours = web_tour_obj.browse(web_tour_obj.search([('name', 'in', tours), ('user_id', '=', uid)]))
for user_webtour in user_webtours:
if user_webtour.name in tours:
already_set_tours.append(user_webtour.name)
for t in tours:
if t not in already_set_tours:
vals = {
'name': t,
'user_id': uid,
}
web_tour_obj.create(vals)
already_set_tours = []
return True
def disable_planners(self):
"""Implementierungsplaner deaktivieren"""
# The dashboard widget itself remains. It can be removed in the
# module web_settings_dashboard in dashboard.xml and dashboard.js.
planner_ids = self.odoo.env['web.planner'].search([])
return self.odoo.env['web.planner'].write(planner_ids, {'active': False})
def remove_standard_translations(self):
"""entferne standard odoo ueberseztungen"""
res_ids = self.odoo.env['ir.translation'].search(
[('name', '=', 'stock.location,name'), ('src', '=', 'Stock'), ('value', '=', 'Lager')])
if res_ids:
return self.odoo.env['ir.translation'].unlink(res_ids)
return True