# -*- 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 decouple_dmi_module(self): """DMI: Einträge auf 'no update' setzen""" domain = [('module', '=', 'dp_dmi')] data_ids = self.odoo.env['ir.model.data'].search(domain) vals = {'noupdate': True, 'module':'dp_dmi_decoupled'} 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