diff --git a/dev/odoo-server-dev-br.conf b/dev/odoo-server-dev-br.conf new file mode 100644 index 00000000..89126ca0 --- /dev/null +++ b/dev/odoo-server-dev-br.conf @@ -0,0 +1,17 @@ +[options] + +xmlrpc_port = 8080 +; This is the password that allows database operations: +; admin_passwd = admin +db_host = False +db_port = 5432 +db_user = False +db_password = False + +addons_path = ext/odoo/addons,ext/custom-addons,dmi/run1 +; For enterprise use the addons path bellow +; addons_path = ext/enterprise-addons,ext/odoo/addons,ext/3rd-party-addons,ext/custom-addons,dmi/run1 +timezone = Europe/Vienna + +#dbfilter_test = ['.*',] +show_debug = 1 diff --git a/ext/__init__.py b/ext/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ext/custom-addons/__init__.py b/ext/custom-addons/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/dmi/run1/dp_dmi/__init__.py b/ext/custom-addons/dp_dmi/__init__.py similarity index 100% rename from dmi/run1/dp_dmi/__init__.py rename to ext/custom-addons/dp_dmi/__init__.py diff --git a/dmi/run1/dp_dmi/__openerp__.py b/ext/custom-addons/dp_dmi/__manifest__.py similarity index 92% rename from dmi/run1/dp_dmi/__openerp__.py rename to ext/custom-addons/dp_dmi/__manifest__.py index e642b311..c146e1a6 100755 --- a/dmi/run1/dp_dmi/__openerp__.py +++ b/ext/custom-addons/dp_dmi/__manifest__.py @@ -25,9 +25,9 @@ 'category': 'Custom', 'version': '1.0', 'description': """Datenübernahme""", - 'author': 'camadeus GmbH', - 'website': 'http://www.camadeus.at', - 'depends': ['mail','cam_reports'], + 'author': 'datenpol GmbH', + 'website': 'http://www.datenpol.at', + 'depends': [], 'data': [ 'res.users.csv', ], diff --git a/dmi/run1/dp_dmi/res.users.csv b/ext/custom-addons/dp_dmi/res.users.csv similarity index 100% rename from dmi/run1/dp_dmi/res.users.csv rename to ext/custom-addons/dp_dmi/res.users.csv diff --git a/dmi/run1/dp_dmi/static/description/icon.png b/ext/custom-addons/dp_dmi/static/description/icon.png similarity index 100% rename from dmi/run1/dp_dmi/static/description/icon.png rename to ext/custom-addons/dp_dmi/static/description/icon.png diff --git a/setup/lib/cli.py b/setup/lib/cli.py index b496afe9..e21c98cd 100755 --- a/setup/lib/cli.py +++ b/setup/lib/cli.py @@ -83,52 +83,47 @@ def main(): methods = [ 'create_db', 'login', - 'install_module_sale', - 'set_admin_rights', ] - if cmd == 'create_dump': + if cmd == 'dump': methods = [ 'create_dump', ] - if cmd == 'create_from_dump': + if cmd == 'restore': methods = [ 'create_db_from_dump', ] + if cmd == 'drop': + methods = [ + 'drop_db', + ] + setup_methods = [ 'login', 'install_modules', + 'set_default_settings', #'set_warehouse', - #'base_config', - #'sale_config', - #'finance_config', - #'hr_config', - #'stock_config', - #'mrp_config', #'stock_set_cost_method', #'set_incoterms', - #'purchase_config', - 'set_date_format', 'set_company', #'set_taxes', - #'set_uom', - #'set_steuerzuordnung', + 'set_uom', + #'set_fiscal_position', #'setup_journals', - 'set_currencies', 'set_decimal_price', - #'set_default_values', + 'set_default_values', #'set_translations', #'set_default_removal_strategy', #'default_set_order_policy', - #'delete_mail_server', - #'update_values', + 'update_values', #'update_special_values', 'set_sys_params', #'setup_reports', 'consume_tours', 'disable_planners', + 'set_admin_rights', ] if cmd == 'setup': @@ -137,7 +132,7 @@ def main(): if cmd == 'rollout': methods = [ 'login', - #'set_dokumentennummern', + #'set_sequences', #'set_dmi_noupdate', #'dmi_confirm_inventory', #'import_users', @@ -226,7 +221,7 @@ def main(): env.pwd = input('Passwort: ') - if cmd in ['create','create_dump','create_from_dump']: + if cmd in ['create','dump','restore']: env.super_admin_pw = input('Super-Admin-Passwort: ') print() diff --git a/setup/lib/config_at.py b/setup/lib/config_at.py index 1db4d4c8..81a17993 100644 --- a/setup/lib/config_at.py +++ b/setup/lib/config_at.py @@ -20,18 +20,15 @@ class Config(): 'city': 'Spannberg', 'zip': '2244', 'phone': '+43 2538/8628 – 0', - 'fax': '+43 2538/8628 – 400', 'email': 'office@tzaustria.com', 'website': 'https://www.tzaustria.com/', 'company_registry': 'FN 224119m', 'country_id': 'at', # 'de' für Deutschland 'vat': 'ATU 54619104', - 'rml_header1': False, 'vat_check_vies': True, - 'tax_calculation_rounding_method': 'round_globally', 'logo': '../ext/custom-addons/dp_custom/static/src/img/logo.png', - 'favicon_backend': '../ext/custom-addons/dp_custom/static/src/img/favicon.ico', - 'favicon_backend_mimetype': 'image/x-icon' + #'favicon_backend': '../ext/custom-addons/dp_custom/static/src/img/favicon.ico', + #'favicon_backend_mimetype': 'image/x-icon' } self.mail_server = { @@ -72,82 +69,69 @@ class Config(): 'Kunde EU Unternehmen (mit USt-ID)', ] - # Aktive Währungen - self.valid_currencies = [ - 'EUR', - ] + self.settings = { + # Einstellungen Allgemein + 'auth_signup_reset_passwort': True, + 'group_multi_company': True, - # Allgemeine Einstellungen - self.base_config = { - 'module_portal': False, # Kundenportal - 'alias_domain': False, # False: keine Domainbezogenen E-Mails (wie z. B. Reply-To zur Alias-Adresse) + # Einstellungen Verkauf + 'group_product_variant': False, # Produkte können mehrere Attribute haben, die Varianten definieren + 'group_uom': True, # Verwende Mengeneinheiten + 'group_discount_per_so_line': True, # Rabatt auf Verkaufszeilen + 'multi_sales_price': True, + 'module_sale_margin': False, + 'use_sale_note': True, + 'group_sale_layout': False, + 'group_proforma_sales': True, + 'group_sale_delivery_address': True, # Verschiedene Adressen für Rechnung und Lieferung + 'group_warning_sale': False, + 'auto_done_setting': False, + 'module_delivery': False, + 'group_display_incoterm': True, + 'module_sale_order_dates': False, + 'group_route_so_lines': False, + + # Einstellungen Lager + 'group_warning_stock': False, + 'group_stock_production_lot': True, # Verfolgen Sie Los- und Seriennummern + 'default_picking_policy': 'direct', + 'group_stock_multi_locations': False, + 'group_stock_multi_warehouses': False, + 'group_stock_adv_location': False, # Advanced routing of products using rules + 'use_security_lead': False, + 'security_lead': 0, + + # Einstellungen Finanzen + 'tax_calculation_rounding_method': 'round_per_line', + 'vat_check_vies': True, + 'group_multi_currency': True, # Multiwährungsfunktion aktivieren + 'module_account_reports_followup': False, + 'group_warning_account': False, + + # Einstellungen Fertigung + 'module_mrp_repair': False, + 'module_mrp_byproduct': False, + 'use_manufacturing_lead': False, + 'manufacturing_lead': 0, } - # Einstellungen Verkauf - self.sale_config = { - 'group_sale_delivery_address': 0, # Verschiedene Adressen für Rechnung und Lieferung - 'sale_pricelist_setting': 'fixed', # Verkaufspreis: [fixed], [percentage], [formula] - 'group_discount_per_so_line': 0, # Rabatt auf Verkaufszeilen - 'group_uom': 0, # Verwende Mengeneinheiten - 'default_invoice_policy': 'order' # Standardabrechnung: [order], [delivery] - } - self.order_policy = 'picking' # Erzeuge Rechnung: [manual], [picking], [prepaid] - - # Einstellungen Einkauf - self.purchase_config = { - 'group_purchase_pricelist': True, # Preislisten verwenden - 'default_invoice_method': 'manual', # [picking] - Rechnung von Lieferscheinen - # [manual] - von Bestellpositionen - # [order] - Vorabrechnungsentwurf durch Bestellung - 'group_costing_method': True, # Benutzen Sie 'Einkaufs-' oder 'Durchschnittspreis' zur Bestandsbewertung - } - - # Einstellungen Finanzen - self.finance_config = { - 'group_multi_currency': False, # Multiwährungsfunktion aktivieren - 'default_sale_tax_id': 'XML:l10n_at.1_tax_at_mwst_10', # Standardsteuer Verkauf - } - - # Einstellungen Personal - self.hr_config = { - 'module_hr_expense': True, # Spesen der Mitarbeiter verwalten - 'module_hr_timesheet': False, # Verwalten Sie Ihre Studenzettel - 'group_hr_attendance': True, # Zuweisung der Berechtigung zur Arbeitszeiteingabe für alle Benutzer - } - - # Einstellungen Lager - self.stock_config = { - 'warehouse_and_location_usage_level': 0, # Warehouses and Locations usage level - 'group_stock_tracking_lot': 0, # Verpackungsgrößen bei der Verpackung: Paletten, Kisten, Behälter... - 'group_stock_production_lot': 0, # Verfolgen Sie Los- und Seriennummern - 'group_stock_packaging': 0, # Manage available packaging options per products - 'group_stock_adv_location': 0, # Advanced routing of products using rules - 'group_product_variant': 0, # Produkte können mehrere Attribute haben, die Varianten definieren - } - - # Einstellungen Fertigung - self.mrp_config = { - 'group_mrp_routings': True, # Verwalte Arbeitspläne und Arbeitsaufträge - 'module_mrp_operations': True, # Detaillierte Planung von Arbeitsaufträgen vornehmen - 'group_mrp_properties': False, # Ermögliche Merkmale für verschiedene Stücklisten eines Produkts - } - - #self.removal_strategy = 'fefo' #[fifo], [lifo], [fefo] - - self.stock_cost_method = 'average' # [standard], [average], [real] + self.removal_strategy = 'fifo' #[fifo], [lifo], [fefo] + self.stock_cost_method = 'standard' # [standard], [average], [real] self.sequences = { 'sale.order': { # 'number_next_actual': 1, 'prefix': '%(y)s', 'padding': 4, - 'use_date_range': True + 'use_date_range': True, + 'monthly_date_range': False }, 'account.invoice': { # 'number_next_actual': 0001, 'prefix': '%(y)s%(month)s', 'padding': 4, - 'use_date_range': True + 'use_date_range': True, + 'monthly_date_range': False }, # Wenn 'account.invoice_refund' auskommentiert ist, dann wird # für die Gutschrift der selbe Nummernkreis verwendet @@ -157,13 +141,14 @@ class Config(): 'implementation': 'no_gap', 'prefix': '%(y)s', 'padding': 4, - 'use_date_range': True + 'use_date_range': True, + 'monthly_date_range': False }, - #'picking.out': { + # 'picking.out': { # # 'number_next_actual': 1, # 'prefix': 'LS-', # 'padding': 5, - #}, + # }, # 'picking.in': { # #'number_next_actual': 1, # 'prefix': 'LS/IN/', @@ -183,13 +168,13 @@ class Config(): self.active_uoms = { 'product.product_uom_unit': 'Stk.', - #'product.product_uom_meter': 'lfm', - #'product.product_uom_litre': 'l', - #'product.product_uom_hour': 'h', - #'product.product_uom_kgm': 'kg', + 'product.product_uom_kgm': 'kg', + 'product.product_uom_meter': 'm', + # 'product.product_uom_litre': 'l', + # 'product.product_uom_hour': 'h',, } - #Lieferbedingungen + # Lieferbedingungen self.incoterms = { ('Ab Werk', 'ABW'), ('Botendienst', 'BOT'), @@ -201,40 +186,26 @@ class Config(): self.modules = [ 'base_iban', + 'base_vat', 'document', - 'knowledge', # not found 'auth_crypt', - # 'auth_admin_passkey', - # 'auth_brute_force', - # 'auth_session_timeout', - # 'disable_odoo_online', - # 'mass_editing', - # 'password_security', - # 'res_config_settings_enterprise_remove', - # 'scheduler_error_mailer', - # 'web_dialog_size', - # 'web_environment_ribbon', - # 'web_favicon', - # 'web_responsive', - # 'web_searchbar_full_width', - # 'web_sheet_full_width', - # 'web_shortcut', - # 'web_translate_dialog', - # 'web_tree_many2one_clickable', - #'website_no_crawler', - #'website_odoo_debranding', + 'sale_management', + 'l10n_at', 'dp_custom', - # 'dp_reports_account', + 'dp_custom_reports_sale', + 'dp_custom_reports_account', # 'dp_reports_purchase', - # 'dp_reports_sale', # 'dp_reports_stock', 'account_cancel', + 'stock', ] - # Setze das Feld "Attachment" im Report (wenn gesetzt wird das PDF in den Anhängen gespeichert) +# Setze das Feld "Attachment" im Report (wenn gesetzt wird das PDF in den Anhängen gespeichert) timestamp = " + '_' + time.strftime('%Y-%m-%d-%H%M') + '.pdf')" self.reports = { - 'sale.report_saleorder': "((object.state in ('draft','sent') and 'KV_' or 'AB_') + object.name" + timestamp, + 'sale.action_report_saleorder': "((object.state in ('draft','sent') and 'KV_' or 'AB_') + object.name" + timestamp, + 'stock.action_report_delivery': "LS- + object.name" + timestamp, + 'account.account_invoices': "(object.state in ('open', 'paid')) and ('INV' + (object.number or '').replace('/', ''))" + timestamp } self.users_file = 'res.users.csv' @@ -247,10 +218,12 @@ class Config(): ] self.default_values = [ # ir.values + # ('product.template', 'type', 'product'), #('product.template', 'type', 'service'), - #('product.template', 'type', 'XML:xmlid'), #mit prefix "XML:" kann eine XML ID übergeben werden ] + self.order_policy = 'order' + self.data_updates = { #'mrp.route_warehouse0_manufacture': {'name': 'Produzieren'}, #'purchase.route_warehouse0_buy': {'name': 'Einkaufen'}, diff --git a/setup/lib/functions.py b/setup/lib/functions.py index e483d470..fe877c10 100644 --- a/setup/lib/functions.py +++ b/setup/lib/functions.py @@ -1,88 +1,69 @@ # -*- coding: utf-8 -*- import base64 -import json -import pprint import sys -from xmlrpc import client as xmlrpclib - -import requests -import ssl +import odoorpc +from urllib.parse import urlparse class DatenpolFunctions: 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""" - params = { - 'master_pwd': self.env.super_admin_pw, - 'name': self.env.dbname, - 'login': self.env.username, - 'password': self.env.pwd, - 'lang': self.config.lang, - 'country_code': self.config.company_data.get('country_id', 'at'), - } - if self.env.demo: - params.update(demo=1) - - base_url = '%s:%s/web/database/create' % (self.env.host, self.env.port) - res = requests.post(base_url, params=params, verify=False, stream=True) - if not res.ok: - return False + 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""" - base_url = '%s:%s/web/database/backup' % (self.env.host, self.env.port) - params = { - 'backup_db': self.env.dbname, - 'backup_format': 'zip', - 'backup_pwd': self.env.super_admin_pw, - 'token': 'x', - } - res = requests.post(base_url, params=params, verify=False, stream=True) - - if res.headers['Content-Type'].startswith('application/octet-stream'): - with open(self.config.dump_file, 'wb') as fh: - chunk_size = 100000 - for chunk in res.iter_content(chunk_size): - fh.write(chunk) + 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""" - fh = open(self.config.dump_file, 'rb') - files = { - 'db_file': ('db_file', fh.read(), 'application/octet-stream'), - } - url = '%s:%s/web/database/restore?restore_pwd=%s&new_db=%s&mode=restore' - url %= (self.env.host, self.env.port, self.env.super_admin_pw, self.env.dbname) - print('Request: ' + url) - res = requests.post(url, files=files, verify=False) - if (res.status_code != 200): - return False - print("\nACHTUNG: Nicht vergessen './cam [env] anonym' auszuführen, sodass es zu keiner Kommunikation mit dem Produktivsystem kommt") + 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""" - # Get the uid - sock_common = xmlrpclib.ServerProxy('%s:%s/xmlrpc/common' % (self.env.host, self.env.port), context=ssl._create_unverified_context()) - self.uid = sock_common.login(self.env.dbname, self.env.username, self.env.pwd) - if not self.uid: - raise Exception('Authentication Error') - self.sock = xmlrpclib.ServerProxy('%s:%s/xmlrpc/object' % (self.env.host, self.env.port), context=ssl._create_unverified_context()) + self.odoo.login(self.env.dbname, self.env.username, self.env.pwd) return True - def _execute(self, *args): - return self.sock.execute(self.env.dbname, self.uid, self.env.pwd, *args) + def set_default_settings(self): + """Systemeinstellungen konfigurieren""" + + res_settings = self.odoo.env['res.config.settings'] + vals = res_settings.default_get([]) + vals.update(self.config.settings) + wizard_id = res_settings.create(vals) + return res_settings.execute(wizard_id) def _readAndReturnFile(self, filename, encode=''): fi = open(filename, 'rb') @@ -97,31 +78,11 @@ class DatenpolFunctions: fi.close() return content - def resolve_xml_id(self, value): - # In case the value starts with 'XML:' then take the remaining string - # as an XML-Id, resolve it and return that. Otherwise return value - # unchanged. - if type(value) != str or value[:4] != 'XML:': - return value - - xml_id = value[4:] - res_id = self._execute('ir.model.data', 'xmlid_to_res_id', xml_id) - if not res_id: - raise Exception('XML-Id "%s" nicht vorhanden!' % xml_id) - return res_id - - def resolve_xml_ids(self, data): - # Resolve all XML-Ids in the dict data - # Note: This happens in-place, the original dict is returned - for k, v in data.iteritems(): - data[k] = self.resolve_xml_id(v) - return data - def set_company(self): """Setze Unternehmensdaten (Allgemein, RML, Logo)""" vals = self.config.company_data - dummy, country_id = self._execute('ir.model.data', 'get_object_reference', 'base', vals['country_id']) + country_id = self.odoo.env.ref('base.' + vals['country_id']).id if vals.get('logo', False): vals['logo'] = self._readAndReturnFile(vals['logo'], encode='base64') @@ -129,161 +90,75 @@ class DatenpolFunctions: vals['favicon_backend'] = self._readAndReturnFile(vals['favicon_backend'], encode='base64') vals['country_id'] = country_id - c_ids = self._execute('res.company', 'search', []) - return self._execute('res.company', 'write', c_ids, vals) + c_ids = self.odoo.env['res.company'].search([]) + return self.odoo.env['res.company'].write(c_ids, vals) def set_taxes(self): """Setze nicht benötigte Steuern auf inaktiv""" - tax_ids = self._execute('account.tax', 'search', [('description', 'not in', self.config.valid_taxes)]) - return self._execute('account.tax', 'write', tax_ids, {'active': False}) - - def set_date_format(self): - """Setzen des Datumsformats """ - - lang_ids = self._execute('res.lang', 'search', [('code', '=', self.config.lang)]) - if lang_ids: - vals = { - 'date_format': '%d.%m.%Y', - 'time_format': '%H:%M:%S', - 'grouping': '[3,3]', - 'thousands_sep': '.', - 'decimal_point': ',', - } - self._execute('res.lang', 'write', lang_ids, vals) - else: - return False - - lang_ids = self._execute('res.lang', 'search', [('code', '=', 'en_US')]) - if lang_ids: - vals = { - 'grouping': '[3,3]', - } - self._execute('res.lang', 'write', lang_ids, vals) - - return True - - def purchase_config(self): - """Basiskonfiguration für Einkauf laden""" - - if hasattr(self.config, 'purchase_config'): - vals = self._execute('purchase.config.settings', 'default_get', []) - vals.update(self.config.purchase_config) - wizard_id = self._execute('purchase.config.settings', 'create', vals) - return self._execute('purchase.config.settings', 'execute', [wizard_id]) - return True - - def sale_config(self): - """Basiskonfiguration für Verkauf laden""" - - vals = self._execute('sale.config.settings', 'default_get', []) - vals.update(self.config.sale_config) - wizard_id = self._execute('sale.config.settings', 'create', vals) - return self._execute('sale.config.settings', 'execute', [wizard_id]) - - def stock_config(self): - """Basiskonfiguration für Lager laden""" - - if hasattr(self.config, 'stock_config'): - vals = self._execute('stock.config.settings', 'default_get', []) - vals.update(self.config.stock_config) - wizard_id = self._execute('stock.config.settings', 'create', vals) - return self._execute('stock.config.settings', 'execute', [wizard_id]) - return True - - def mrp_config(self): - """Basiskonfiguration für Fertigung laden""" - - if hasattr(self.config, 'mrp_config'): - vals = {} - vals.update(self.config.mrp_config) - wizard_id = self._execute('mrp.config.settings', 'create', vals) - return self._execute('mrp.config.settings', 'execute', [wizard_id]) - return True - - def hr_config(self): - """Basiskonfiguration für Personal Laden""" - - if hasattr(self.config, 'hr_config'): - vals = self._execute('hr.config.settings', 'default_get', []) - vals.update(self.config.hr_config) - wizard_id = self._execute('hr.config.settings', 'create', vals) - return self._execute('hr.config.settings', 'execute', [wizard_id]) - return True + tax_ids = self.odoo.env['account.tax'].search([('description', 'not in', self.config.valid_taxes)]) + return self.odoo.env['account.tax'].write(tax_ids, {'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 = self._execute('stock.incoterms', 'search', - ['|', ('active', '=', True), ('active', '=', False), ('code', '=', code)]) + existing_ids = stock_incoterms.search( + ['|', ('active', '=', True), ('active', '=', False), ('code', '=', code)] + ) if existing_ids: vals = { 'active': True, 'name': name, } - self._execute('stock.incoterms', 'write', existing_ids, vals) + stock_incoterms.write(existing_ids, vals) else: vals = { 'name': name, 'code': code, } - self._execute('stock.incoterms', 'create', vals) + stock_incoterms.create(vals) codes = [code for name, code in terms] - inactive_ids = self._execute('stock.incoterms', 'search', [('code', 'not in', codes)]) - self._execute('stock.incoterms', 'write', inactive_ids, {'active': False}) + inactive_ids = stock_incoterms.search([('code', 'not in', codes)]) + stock_incoterms.write(inactive_ids, {'active': False}) return True - def base_config(self): - """Allgemeine Konfiguration laden""" - - vals = self._execute('base.config.settings', 'default_get', []) - vals.update(self.config.base_config) - wizard_id = self._execute('base.config.settings', 'create', vals) - return self._execute('base.config.settings', 'execute', [wizard_id]) - - def install_module_sale(self): - """Modul 'Sale' installieren""" - - modules_to_install = self._execute('ir.module.module', 'search', - [('name', '=', 'sale'), ('state', '!=', 'installed')]) - self._execute('ir.module.module', 'button_install', modules_to_install) - self._execute('base.module.upgrade', 'upgrade_module', modules_to_install) - return True - - def install_modules(self): + def install_modules(self, module=False, raise_exception=False): """Module installieren""" - modules_to_install = self._execute('ir.module.module', 'search', - [('name', 'in', self.config.modules), ('state', '!=', 'installed')]) - self._execute('ir.module.module', 'button_install', modules_to_install) - self._execute('base.module.upgrade', 'upgrade_module', modules_to_install) + 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_install(mod_ids) + self.odoo.env['base.module.upgrade'].upgrade_module(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._execute('stock.picking.type', 'search', [('code', '=', code)], 0, 1, 'id')[0] - picking_type = self._execute('stock.picking.type', 'read', picking_type_id, ['sequence_id']) + 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._execute('ir.sequence', 'write', s_id, seq_dict.get(value)): + 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._execute('stock.picking.type', 'search', [('code', '=', code)]) - if not self._execute('stock.picking.type', 'write', picking_type_ids, {'sequence_id': s_id}): + 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_dokumentennummern(self): + 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): @@ -295,38 +170,38 @@ class DatenpolFunctions: # Angebot if seq_dict.get('sale.order', False): - s_ids = self._execute('ir.sequence', 'search', [('code', '=', 'sale.order')]) + s_ids = ir_seq.search([('code', '=', 'sale.order')]) if len(s_ids) != 1: return False - if not self._execute('ir.sequence', 'write', s_ids, seq_dict.get('sale.order')): + if not ir_seq.write(s_ids, seq_dict.get('sale.order')): return False # Arbeitsschein if seq_dict.get('work.order', False): - s_ids = self._execute('ir.sequence', 'search', [('code', '=', 'work.order')]) + s_ids = ir_seq.search([('code', '=', 'work.order')]) if len(s_ids) != 1: return False - if not self._execute('ir.sequence', 'write', s_ids, seq_dict.get('work.order')): + if not ir_seq.write(s_ids, seq_dict.get('work.order')): return False # EK-Angebot if seq_dict.get('purchase.order', False): - s_ids = self._execute('ir.sequence', 'search', [('code', '=', 'purchase.order')]) + s_ids = ir_seq.search([('code', '=', 'purchase.order')]) if len(s_ids) != 1: return False - if not self._execute('ir.sequence', 'write', s_ids, seq_dict.get('purchase.order')): + if not ir_seq.write(s_ids, seq_dict.get('purchase.order')): return False # Hole Journal für Ausgangsrechnungen - j_ids = self._execute('account.journal', 'search', [('code', '=', 'Re.:')]) + j_ids = self.odoo.env['account.journal'].search([('code', '=', 'Re.:')]) if len(j_ids) != 1: return False - journals = self._execute('account.journal', 'read', j_ids, ['refund_sequence', 'sequence_id', 'refund_sequence_id']) + journals = self.odoo.env['account.journal'].read(j_ids, ['refund_sequence', 'sequence_id', 'refund_sequence_id']) - # Rechnungsnummer + # Rechnungsnummer if seq_dict.get('account.invoice', False): s_id = journals[0]['sequence_id'][0] - if not self._execute('ir.sequence', 'write', [s_id], seq_dict.get('account.invoice')): + if not ir_seq.write([s_id], seq_dict.get('account.invoice')): return False # Gutschriftennummer @@ -334,140 +209,119 @@ class DatenpolFunctions: 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 = self._execute('ir.sequence', 'create', ref_seq_data) + s_id = ir_seq.create(ref_seq_data) else: - self._execute('ir.sequence', 'write', [s_id], ref_seq_data) + 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._execute('account.journal', 'write', j_ids, vals) + self.odoo.env['account.journal'].write(j_ids, vals) else: vals = { 'refund_sequence': False } - self._execute('account.journal', 'write', j_ids, vals) + self.odoo.env['account.journal'].write(j_ids, vals) return True def set_admin_rights(self): """Setze Administrator Rechte""" - dummy, user_id = self._execute('ir.model.data', 'get_object_reference', 'base', 'user_root') groups = [] + user_id = self.odoo.env.ref('base.user_root').id # Technische Eigenschaften - dummy, group_id = self._execute('ir.model.data', 'get_object_reference', 'base', 'group_no_one') - groups.append((4, group_id)) + groups.append((4, self.odoo.env.ref('base.group_no_one').id)) # Finanzmanager - dummy, group_id = self._execute('ir.model.data', 'get_object_reference', 'account', 'group_account_manager') - groups.append((4, group_id)) + groups.append((4, self.odoo.env.ref('account.group_account_manager').id)) vals = { 'groups_id': groups, 'tz': 'Europe/Vienna', } - - return self._execute('res.users', 'write', [user_id], vals) + return self.odoo.env['res.users'].write([user_id], vals) def setup_accounting(self): """Konfiguration Kontenplan""" c = self.config - sales_tax_ids = self._execute('account.tax.template', 'search', + sales_tax_ids = self.odoo.env['account.tax.template'].search( [('description', '=', c.sales_tax), ('parent_id', '=', False)]) if not sales_tax_ids: return False - purchase_tax_ids = self._execute('account.tax.template', 'search', + purchase_tax_ids = self.odoo.env['account.tax.template'].search( [('description', '=', c.purchase_tax), ('parent_id', '=', False)]) if not purchase_tax_ids: return False # Set Your Accounting Options - dummy, currency_id = self._execute('ir.model.data', 'get_object_reference', 'base', 'EUR') + currency_id = self.odoo.env.ref('base.EUR').id vals = {} vals['chart_template_id'] = c.chart_template_id vals['sale_tax'] = sales_tax_ids[0] vals['purchase_tax'] = purchase_tax_ids[0] vals['company_id'] = 1 # Default vals['currency_id'] = currency_id - wizard_id = self._execute('wizard.multi.charts.accounts', 'create', vals) - self._execute('wizard.multi.charts.accounts', 'action_next', [wizard_id]) - return True - - def set_currencies(self): - """Währungen setzen""" - - c = self.config - - # Set all currencies to active - ids = self._execute('res.currency', 'search', ['|', ('active', '=', True), ('active', '=', False)]) - res = self._execute('res.currency', 'write', ids, {'active': True}) - if not res: - return False - - # Set all other UOMs to inactive - inactive_ids = self._execute('res.currency', 'search', [('name', 'not in', c.valid_currencies)]) - res = self._execute('res.currency', 'write', inactive_ids, {'active': False}) - if not res: - return False - + wizard_id = self.odoo.env['wizard.multi.charts.accounts'].create(vals) + self.odoo.env['wizard.multi.charts.accounts'].action_next([wizard_id]) return True def set_uom(self): """Mengeneinheiten setzen""" - context = {'lang': self.config.lang} + 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._execute('ir.model.data', 'xmlid_to_res_id', uom_xml_id) + uom_id = self.odoo.env.ref(uom_xml_id).id active_ids.append(uom_id) # Set all UOMs to active - ids = self._execute('product.uom', 'search', ['|', ('active', '=', True), ('active', '=', False)]) - res = self._execute('product.uom', 'write', ids, {'active': True}) + 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 = self._execute('product.uom', 'search', [('id', 'not in', active_ids)]) - res = self._execute('product.uom', 'write', inactive_ids, {'active': False}) + 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._execute('ir.model.data', 'xmlid_to_res_id', uom_xml_id) - res = self._execute('product.uom', 'write', [uom_id], {'name': name}, context) + 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_steuerzuordnung(self): + def set_fiscal_position(self): """Steuerzuordnungen setzen""" c = self.config # Ungültige Steuerzuordnungen auf inaktiv setzen - invalid_ids = self._execute('account.fiscal.position', 'search', [('name', 'not in', c.valid_fiscal_positions)]) - self._execute('account.fiscal.position', 'write', invalid_ids, {'active': False}) + 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._execute('account.fiscal.position', 'search', + valid_position_ids = self.odoo.env['account.fiscal.position'].search( [('name', 'in', c.valid_fiscal_positions)]) - valid_tax_ids = self._execute('account.tax', 'search', [('parent_id', '=', False)]) + valid_tax_ids = self.odoo.env['account.tax'].search([('parent_id', '=', False)]) - position_tax_line_ids = self._execute('account.fiscal.position.tax', 'search', + 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._execute('account.fiscal.position.tax', 'write', position_tax_line_ids, vals) + return self.odoo.env['account.fiscal.position.tax'].write(position_tax_line_ids, vals) def update_module(self): """Aktualisiere Modul""" @@ -475,88 +329,83 @@ class DatenpolFunctions: module_names = self.config.module_name mod_ids = [] for module_name in module_names: - mod_id = self._execute('ir.module.module', 'search', [('name', '=', module_name), ('state', '=', 'installed')]) + 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._execute('ir.module.module', 'button_upgrade', mod_ids) - self._execute('base.module.upgrade', 'upgrade_module', []) + 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""" - module_name = self.config.module_name - mod_ids = self._execute('ir.module.module', 'search', - [('name', '=', module_name), ('state', '=', 'uninstalled')]) - if not len(mod_ids) == 1: - raise Exception('Module "%s" not found or is not in state "uninstalled".' % module_name) - - self._execute('ir.module.module', 'button_install', mod_ids) - self._execute('base.module.upgrade', 'upgrade_module', []) + self.install_modules(self.config.module_name, raise_exception=True) return True def update_modules(self): """Verfügbare Module updaten""" - wizard_id = self._execute('base.module.update', 'create', {}) - vals = self._execute('base.module.update', 'update_module', [wizard_id]) + 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._execute('ir.module.module', 'search', [('name', '=', module_name), ('state', '=', 'installed')]) + 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._execute('ir.module.module', 'button_uninstall', mod_ids) - self._execute('base.module.upgrade', 'upgrade_module', []) + 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._execute('ir.module.module', 'search', + 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._execute('ir.module.module', 'button_upgrade_cancel', mod_ids) + 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._execute('account.journal', 'search', [('code', 'in', ['VK', 'GSV', 'SAJ', 'SCNJ'])]) + 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 } - if not self._execute('account.journal', 'write', j_ids, vals): - return False - return True + 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._execute('ir.module.module', 'search', + 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._execute('ir.module.module', 'button_upgrade', mod_ids) + self.odoo.env['ir.module.module'].button_upgrade(mod_ids) - self._execute('base.module.upgrade', 'upgrade_module', []) + self.odoo.env['base.module.upgrade'].upgrade_module([]) return True def set_warehouse(self): """Name des Zentrallagers setzen""" - is_installed = self._execute('ir.module.module', 'search', + is_installed = self.odoo.env['ir.module.module'].search( [('name', '=', 'stock'), ('state', '=', 'installed')]) if is_installed: vals = { @@ -565,8 +414,8 @@ class DatenpolFunctions: } if self.config.warehouse_code: vals.update({'code': self.config.warehouse_code}) - warehouse_ids = self._execute('stock.warehouse', 'search', [('id', '=', 1)]) - return self._execute('stock.warehouse', 'write', warehouse_ids, vals) + warehouse_ids = self.odoo.env['stock.warehouse'].search([('id', '=', 1)]) + return self.odoo.env['stock.warehouse'].write(warehouse_ids, vals) else: return True @@ -574,69 +423,70 @@ class DatenpolFunctions: """DMI: Einträge auf 'no update' setzen""" domain = [('module', '=', 'dp_dmi'), ('noupdate', '=', False)] - data_ids = self._execute('ir.model.data', 'search', domain) + data_ids = self.odoo.env['ir.model.data'].search(domain) vals = {'noupdate': True} - return self._execute('ir.model.data', 'write', data_ids, vals) + return self.odoo.env['ir.model.data'].write(data_ids, vals) def dmi_confirm_inventory(self): """DMI: Lagerstand einbuchen""" - dummy, inventory_id = self._execute('ir.model.data', 'get_object_reference', 'dp_dmi', 'inv_init') + dummy, inventory_id = self.odoo.env.ref('dp_dmi.inv_init') - inventory = self._execute('stock.inventory', 'read', inventory_id, ['state']) + inventory = self.odoo.env['stock.inventory'].read(inventory_id, ['state']) if inventory.get('state', '') == 'confirm': - return self._execute('stock.inventory', 'action_done', [inventory_id]) + 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._execute('ir.model.data', 'xmlid_to_res_id', 'product.decimal_product_uom') - res = self._execute('decimal.precision', 'write', [decimal_id], {'digits': self.config.uom_decimals}) + 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._execute('ir.model.data', 'xmlid_to_res_id', 'product.decimal_product_uos') - res = self._execute('decimal.precision', 'write', [decimal_id], {'digits': self.config.uom_decimals}) + # # 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 - decimal_id = self._execute('ir.model.data', 'xmlid_to_res_id', 'product.decimal_price') - res = self._execute('decimal.precision', 'write', [decimal_id], {'digits': self.config.price_decimals}) + ids = decimal_precision.search([('name', '=', 'Product Price')]) + res = decimal_precision.write(ids, {'digits': self.config.price_decimals}) if not res: return False - - # Product Price - ids = self._execute('decimal.precision', 'search', [('name', '=', 'Product Price')]) - res = self._execute('decimal.precision', 'write', ids, {'digits': self.config.price_decimals}) - if not res: - return False - return True - def delete_mail_server(self): + def setup_email(self): """Mailserver einrichten""" - server_ids = self._execute('ir.mail_server', 'search', []) + mail_server = self.odoo.env['ir.mail_server'] + server_ids = mail_server.search([]) if server_ids: - return self._execute('ir.mail_server', 'unlink', server_ids) - - return True + 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'): - method = self.config.stock_cost_method - self._execute('ir.values', 'set_default', 'product.template', 'cost_method', method) - return True - + self.odoo.env['ir.default'].set('product.category', 'property_cost_method', self.config.stock_cost_method) return True def import_users(self): @@ -650,9 +500,9 @@ class DatenpolFunctions: u'function'] options = {u'headers': True, u'quoting': u'"', u'separator': u',', u'encoding': u'utf-8'} - wizard_id = self._execute('base_import.import', 'create', vals) + wizard_id = self.odoo.env['base_import.import'].create(vals) if wizard_id: - messages = self._execute('base_import.import', 'do', wizard_id, fields, options) + messages = self.odoo.env['base_import.import'].do(wizard_id, fields, options) if messages: print(messages) return False @@ -672,8 +522,8 @@ class DatenpolFunctions: 'data': data, 'overwrite': True, } - wizard_id = self._execute('base.language.import', 'create', vals) - self._execute('base.language.import', 'import_lang', [wizard_id]) + wizard_id = self.odoo.env['base.language.import'].create(vals) + self.odoo.env['base.language.import'].import_lang([wizard_id]) return True return True @@ -681,92 +531,59 @@ class DatenpolFunctions: """Setze Rechnung von Lieferschein""" if hasattr(self.config, 'order_policy'): - method = self.config.order_policy - self._execute('ir.values', 'set_default', 'sale.order', 'order_policy', method) - return True + 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._execute('product.removal', 'search', [('method', '=', method)]) + strategy_ids = self.odoo.env['product.removal'].search([('method', '=', method)]) if not strategy_ids: return False - stock_id = self._execute('ir.model.data', 'xmlid_to_res_id', 'stock.stock_location_stock') + stock_id = self.odoo.env.ref('stock.stock_location_stock').id if not stock_id: return False - return self._execute('stock.location', 'write', stock_id, {'removal_strategy_id': strategy_ids[0]}) + 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: - value = self.resolve_xml_id(value) - vals = { - 'name': field, - 'model': model, - 'value_unpickle': value, - 'key': 'default', - 'key2': False, - } - domain = [('name', '=', field), ('model', '=', model)] - val_ids = self._execute('ir.values', 'search', domain) - if val_ids: - self._execute('ir.values', 'write', val_ids, vals) - else: - self._execute('ir.values', 'create', vals) + self.odoo.env['ir.default'].set(model, field, value) return True def update_special_values(self): """Spezialwerte setzen""" - - # Z. B.: - ## Lösche alle Anreden außer Herr und Frau - # data_deletes = [ - # 'base.res_partner_title_doctor', - # 'base.res_partner_title_miss', - # 'base.res_partner_title_prof', - # 'base.res_partner_title_sir', - # 'base.res_partner_title_pvt_ltd', - # 'base.res_partner_title_ltd', - # 'sale.email_template_edi_sale', - # 'account.email_template_edi_invoice', - # ] - # for xml_id in data_deletes: - # try: - # dummy,model,res_id = self._execute('ir.model.data', 'xmlid_lookup', xml_id) - # self._execute(model, 'unlink', [res_id]) - # except: - # pass - return True def update_values(self): """Existierende Daten aktualisieren""" for xml_id, vals in self.config.data_updates.items(): - dummy, model, res_id = self._execute('ir.model.data', 'xmlid_lookup', xml_id) - self._execute(model, 'write', [res_id], vals) - + 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._execute('ir.config_parameter', 'search', [('key', '=', key)]) + param_ids = self.odoo.env['ir.config_parameter'].search([('key', '=', key)]) vals = { 'key': key, 'value': value, } if param_ids: - self._execute('ir.config_parameter', 'write', param_ids, vals) + self.odoo.env['ir.config_parameter'].write(param_ids, vals) else: - self._execute('ir.config_parameter', 'create', vals) + self.odoo.env['ir.config_parameter'].create(vals) return True def remove_sys_params(self): @@ -774,19 +591,19 @@ class DatenpolFunctions: for key, value in self.config.system_parameters_remove_on_rollout.items(): print(key) - param_ids = self._execute('ir.config_parameter', 'search', [('key', '=', key)]) + param_ids = self.odoo.env['ir.config_parameter'].search([('key', '=', key)]) print(param_ids) if param_ids: - self._execute('ir.config_parameter', 'unlink', 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._execute('ir.actions.report.xml', 'search', [('report_name', '=', report)]) + r_ids = self.odoo.env.ref(report) if r_ids: - self._execute('ir.actions.report.xml', 'write', r_ids, {'attachment': attachment}) + self.odoo.env['ir.actions.report'].write(r_ids.id, {'attachment': attachment}) else: return False return True @@ -795,22 +612,13 @@ class DatenpolFunctions: """In E-Mail-Adressen @ durch # ersetzen, um unbeabsichtigen E-Mail-Versand zu vermeiden""" # E-Mail adressen von res_partner: @ -> # - p_ids = self._execute('res.partner', 'search', [('email', 'ilike', '%@%')]) - partner = self._execute('res.partner', 'read', p_ids, ['email']) + 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._execute('res.partner', 'write', [id], {'email': new_email}) - - def finance_config(self): - """Basiskonfiguration für Finanzen laden""" - - if hasattr(self.config, 'finance_config'): - vals = self._execute('account.config.settings', 'default_get', []) - vals.update(self.resolve_xml_ids(self.config.finance_config)) - wizard_id = self._execute('account.config.settings', 'create', vals) - return self._execute('account.config.settings', 'execute', [wizard_id]) + self.odoo.env['res.partner'].write([id], {'email': new_email}) return True def make_anonymous(self): @@ -837,64 +645,64 @@ class DatenpolFunctions: return True def make_anonymous_partner(self): - ids = self._execute('res.partner', 'search', []) + ids = self.odoo.env['res.partner'].search([]) for id in ids: vals = { 'name': 'Partner %s' % id, 'street': '----', 'email': 'test@example.com', } - self._execute('res.partner', 'write', [id], vals) + self.odoo.env['res.partner'].write([id], vals) def make_anonymous_project(self): - if (self._execute('ir.module.module', 'search', [('name', '=', 'project'), ('state', '=', 'installed')])): - ids = self._execute('project.project', 'search', []) + 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._execute('project.project', 'write', [id], vals) + self.odoo.env['project.project'].write([id], vals) # Tasks - ids = self._execute('project.task', 'search', []) + ids = self.odoo.env['project.task'].search([]) for id in ids: vals = { 'name': 'Aufgabe %s' % id, } - self._execute('project.task', 'write', [id], vals) + self.odoo.env['project.task'].write([id], vals) def make_anonymous_employee(self): - if (self._execute('ir.module.module', 'search', [('name', '=', 'hr'), ('state', '=', 'installed')])): - ids = self._execute('hr.employee', 'search', []) + 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._execute('hr.employee', 'write', [id], vals) + self.odoo.env['hr.employee'].write([id], vals) def make_anonymous_leads(self): - if (self._execute('ir.module.module', 'search', [('name', '=', 'crm'), ('state', '=', 'installed')])): - ids = self._execute('crm.lead', 'search', []) + 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._execute('crm.lead', 'write', [id], vals) + ids = self.odoo.env['crm.lead'].write([id], vals) def make_anonymous_mailserver(self): - server_ids = self._execute('ir.mail_server', 'search', []) - self._execute('ir.mail_server', 'write', server_ids, {'active': False}) + server_ids = self.odoo.env['ir.mail_server'].search([]) + self.odoo.env['ir.mail_server'].write(server_ids, {'active': False}) - server_ids = self._execute('fetchmail.server', 'search', []) - self._execute('fetchmail.server', 'unlink', server_ids) + server_ids = self.odoo.env['fetchmail.server'].search([]) + self.odoo.env['fetchmail.server'].unlink(server_ids) def make_anonymous_cron(self): - cron_ids = self._execute('ir.cron', 'search', []) + cron_ids = self.odoo.env['ir.cron'].search([]) if cron_ids: - self._execute('ir.cron', 'write', cron_ids, {'active': False}) + self.odoo.env['ir.cron'].write(cron_ids, {'active': False}) def set_ext_ids(self): """ExtIDs für Accounts und Types""" @@ -934,13 +742,13 @@ class DatenpolFunctions: 'event', ] - for uid in self._execute('res.users', 'search', []): + for uid in self.odoo.env['res.users'].search([]): for t in tours: vals = { 'name': t, 'user_id': uid, } - self._execute('web_tour.tour', 'create', vals) + self.odoo.env['web_tour.tour'].create(vals) return True @@ -950,22 +758,15 @@ class DatenpolFunctions: # The dashboard widget itself remains. It can be removed in the # module web_settings_dashboard in dashboard.xml and dashboard.js. - planner_ids = self._execute('web.planner', 'search', []) - return self._execute('web.planner', 'write', planner_ids, {'active': False}) + 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 = [] - - res_ids += self._execute('ir.translation', 'search', - [('name', '=', 'stock.location,name'), - ('src', '=', 'Stock'), - ('value', '=', 'Lager')]) - - res = True + res_ids = self.odoo.env['ir.translation'].search( + [('name', '=', 'stock.location,name'), ('src', '=', 'Stock'), ('value', '=', 'Lager')]) if res_ids: - res = self._execute('ir.translation', 'unlink', res_ids) - - return res + return self.odoo.env['ir.translation'].unlink(res_ids) + return True