diff --git a/.env b/.env index 5dd5229..e8c72ef 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ -ODOO_VERSION=13.0 -CONTAINER_NAME_EXTENSION=13_dev +ODOO_VERSION=17.0 +CONTAINER_NAME_EXTENSION=17_dev ODOO_PORT=9013 -DB_HOST=hobbyhimmel_odoo_13_dev_db +DB_HOST=hobbyhimmel_odoo_17_dev_db DB_PORT=5432 DB_USER=odoo DB_PASSWORD=odoo diff --git a/__init__.py b/__init__.py index 6a137ce..d7af4f2 100644 --- a/__init__.py +++ b/__init__.py @@ -1,5 +1,3 @@ from . import models from . import controllers -from . import post_init_hook -# damit run_migration sichtbar ist: -run_migration = post_init_hook.run_migration \ No newline at end of file + diff --git a/__manifest__.py b/__manifest__.py index ca9ccfa..b2c6239 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,7 +1,7 @@ { 'name': 'POS Open Workshop', 'license': 'AGPL-3', - 'version': '13.0.1.0.0', + 'version': '17.0.1.0.0', 'summary': 'Erstellt Maschinenfreigaben basierend auf POS-Einweisungsprodukten', 'depends': ['base','product','sale','contacts','point_of_sale'], 'author': 'matthias.lotz', @@ -30,9 +30,8 @@ 'static/src/css/pos.css', ], }, - 'post_init_hook': 'run_migration', 'description': """ Diese App erstellt Maschinenfreigaben basierend auf POS-Einweisungsprodukten. - Die App ist für den Einsatz in der Odoo-Version 13.0 konzipiert. + Die App ist für den Einsatz in der Odoo-Version 17.0 konzipiert. """, } diff --git a/demo/demo_partners.csv b/demo/demo_partners.csv deleted file mode 100644 index 546340c..0000000 --- a/demo/demo_partners.csv +++ /dev/null @@ -1,51 +0,0 @@ -id,name,street,zip,city,phone,email,company_type,customer_rank,supplier_rank -res_partner_demo_1, AAAA Max Mustermann,Musterstraße 1,,,,,person,15,0 -res_partner_demo_2, Benjamin Winter,,,,,,person,1,0 -res_partner_demo_3, Martin Berthelon,Fabrikstr. 3,73728,Esslingen,,martin.berthelon@hotmail.fr,person,15,0 -res_partner_demo_4,Aaron Christ,Hohewartstraße 46,70469,Stuttgart,,christ.aaron@web.de,person,14,0 -res_partner_demo_5,Aaron Dörr,Riegeläckerstr. 60,71229,Leonberg,,aaron_doerr@web.de,person,33,0 -res_partner_demo_6,Aaron Gale,Chopinstr. 20,70195,Stuttgart,015172165290,aarongale1@live.com,person,4,0 -res_partner_demo_7,Aaron Zimmermann,Heinrichstr. 15,38106 ,Braunschweig,016091647469,,person,1,0 -res_partner_demo_8,Abalrahman Alsadi,Bachstr. 29,70563,Stuttgart,,abdulrahman.m.saadi@gmail.com,person,1,0 -res_partner_demo_9,Abdullah Zengin,Engelbertstr. 124,70499,Stuttgart,,,person,3,0 -res_partner_demo_10,Abdussamed Korkmaz,Bertha-von-Suttner-Straße 1,74366,Kirchheim Am Neckar,,korkmaz.abdussamed@gmail.com,person,1,0 -res_partner_demo_11,Achim Brendle,Oberwiesenstraße 45,70619,Stuttgart,7114797505,achim.brendle@web.de,person,2,0 -res_partner_demo_12,Achim Jatkowski,Hummelstr. 38,70569,Stuttgart,017621512316,achim.jatkowski@gmail.com,person,1,0 -res_partner_demo_13,Achim Jung,Kurt Tucholsky Str. 6,71254,Ditzingen,07156174013,acjung@web.de,person,1,0 -res_partner_demo_14,Achim Kelbel,Vivaldiweg 6,70195,Stuttgart,,a.kelbel@t-online.de,person,2,0 -res_partner_demo_15,Achim Kramer,Reinsburger 172,70197,Stuttgart,,achim@zibra.de,person,1,0 -res_partner_demo_16,Adalbert Zeisl,Bachstr. 20,71364,Winnenden,07195-2092884,betz1000@gmx.de,person,2,0 -res_partner_demo_17,Adalina Schäfer,Sancenbacherstr. 26,74538,Rosengarten,015778855550,lina_max_schaefer@gmx.de,person,1,0 -res_partner_demo_18,Adam Riegel,Marabustr. 35 / 84,70378,Stuttgart,0711 532082,,person,1,0 -res_partner_demo_19,Adam Swais,Obertürkheimerstr. 54,73733,Esslingen,,adamswais@web.de,person,1,0 -res_partner_demo_20,Adela Spulber,Obere Bismarck Str. 97,70197,Stuttgart,,,person,1,0 -res_partner_demo_21,Adem Uzun,Liesel-Bach-Str. 54,71034,Böblingen,015251690873,adem.uzun2@gmail.com,person,1,0 -res_partner_demo_22,Adnan Djekic,Vesoulerstr. 33,70839,Gerlingen,01724227468,adnandjekic@alice-dsl.net,person,1,0 -res_partner_demo_23,Adrian Berres,Bärgstadter Str. 90,63928,Gehenbühl,,a.berres@gmx.de,person,1,0 -res_partner_demo_24,Adrian Lanksweirt,Heidestraße 6,70469,Stuttgart,,adrian.lanksweirt@gmail.com,person,1,0 -res_partner_demo_25,Adrian Popov,Hallerstr. 42,90419,Nürnberg,+4915114305751,adrinuernberg@gmail.com,person,2,0 -res_partner_demo_26,Agnes Krettek,Seyfferstr. 62,70187,Stuttgart,,agneskrettek@gmail.com,person,1,0 -res_partner_demo_27,Ahmad Taijan,Rümelinstr 69,70191,Stuttgart,,,person,2,0 -res_partner_demo_28,Aileen Becker,Eichendorffstr. 4,73630,Remshalden,015780645637,aileen.becker@gmx.de,person,87,0 -res_partner_demo_29,Ailey Simpson,Eierstraße 44 A,70199,Stuttgart,,aileywsimpson@gmail.com,person,1,0 -res_partner_demo_30,Akira Mitsu,Fritz-Ulrich-Weg 5,70567,Stuttgart,,mitsuakira0914@gmail.com,person,5,0 -res_partner_demo_31,Aksel Özdemir,Rotebühlstraße 53,70178,Stuttgart,,aksel.oezdemir@gmx.de,person,2,0 -res_partner_demo_32,Albert Ebenbichler,Am Backhaus 9,73666,Boltmannsweiler,01726101655,info@albert-ebenbichler.com,person,1,0 -res_partner_demo_33,Albert Kaupp,Waldäckerstr. 10,70435,Stuttgart,0711 8263232,albert.kaupp@online.de,person,2,0 -res_partner_demo_34,Albrecht Barth,Klopstockstr. 39,70193,Stuttgart,,albrecht.barth@web.de,person,3,0 -res_partner_demo_35,Albrecht Schlayer,Im Netzbrunnen 17,70825,K-Münchingen,,aws1308@gmail.com,person,1,0 -res_partner_demo_36,Alec Dobler,Kräherwald 251,70193,Stuttgart,,,person,1,0 -res_partner_demo_37,Alejandro Cano Perez,Burgstallstraße 66,70199,Stuttgart,,cano.perez@gmx.de,person,2,0 -res_partner_demo_38,Alejandro Rodriguez,Im Hirschwinkel 1,76297,Stutensee,015771409317,ralexei95@yahoo.de,person,1,0 -res_partner_demo_39,Alejandro Zarza Aguado,Reinsburgstr. 152,70197,Stuttgart,017628401435,11alex96@gmail.com,person,1,0 -res_partner_demo_40,Aleksandar Vasić,Lothringer Str. 5,70435,Stuttgart,,aleksvasic@web.de,person,3,0 -res_partner_demo_41,Alen Minasyan,Kastanienallee 41/1,71638,Ludwigsburg,,bidilik@gmx.de,person,1,0 -res_partner_demo_42,Alex Olenberg,Theodor-Rottschildstr. 25,73760,Stuttgart,,,person,26,0 -res_partner_demo_43,Alex Schaut,Braunenbergweg 9,70806,Kornwestheim,07154 16530,aschaut@gmx.de,person,3,0 -res_partner_demo_44,Alexander Adloff,Charlottenstraße 2,74074,Heilbronn,,alexadloff@gmx.de,person,3,0 -res_partner_demo_45,Alexander Bauer,Im Himmel 20,70569,Stuttgart,071172237601,ab.312@icloud.com,person,1,0 -res_partner_demo_46,Alexander Blendl,Neckarstr. 8,70736,Fellbach,,blendl.alex@gmail.com,person,4,0 -res_partner_demo_47,Alexander Borshov,Schellingstraße 24,71277,Rutesheim,,aborshov@gmail.com,person,1,0 -res_partner_demo_48,Alexander Bosch,Osterwiesenstr. 37,70794,Filderstadt,,bosch-alexander@web.de,person,1,0 -res_partner_demo_49,Alexander Braig,Holzgrund Str. 25,70806,Kornwestheim,,a.braig84@gmx.de,person,17,0 -res_partner_demo_50,Alexander Carolus,Kornbergstr. 23,70176,Stuttgart,,alexander.carolus,person,1,0 diff --git a/demo/export.py b/demo/export.py deleted file mode 100644 index d36c615..0000000 --- a/demo/export.py +++ /dev/null @@ -1,2 +0,0 @@ -/opt/odoo/odoo/odoo-bin shell -d hobbyhimmel < /home/odoo/custom_addons/open_workshop/demo/export_partner.py - diff --git a/demo/export_partner.py b/demo/export_partner.py deleted file mode 100644 index 5d3424e..0000000 --- a/demo/export_partner.py +++ /dev/null @@ -1,38 +0,0 @@ -import csv -import random - -# Beispielsweise 50 Kunden mit Namen und E-Mail -partners = env['res.partner'].search( - [('customer_rank', '>', 0), ('is_company', '=', False)], - limit=50 -) - -with open('/home/odoo/custom_addons/open_workshop/demo/demo_partners.csv', 'w', newline='') as f: - writer = csv.writer(f) - writer.writerow([ - 'id', - 'name', - 'street', - 'zip', - 'city', - 'phone', - 'email', - 'company_type', - 'customer_rank', - 'supplier_rank' - ]) - - for idx, partner in enumerate(partners, start=1): - partner_id = f'res_partner_demo_{idx}' - writer.writerow([ - partner_id, - partner.name or '', - partner.street or '', - partner.zip or '', - partner.city or '', - partner.phone or '', - partner.email or '', - partner.company_type or 'person', - partner.customer_rank, - partner.supplier_rank, - ]) diff --git a/fix_missing_partners.py b/fix_missing_partners.py deleted file mode 100644 index 6c55728..0000000 --- a/fix_missing_partners.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -from odoo import SUPERUSER_ID -from odoo.api import Environment -import logging - -_logger = logging.getLogger(__name__) - -MISSING_PARTNERS = [ - 6534, 1594, 4700, 6557, 5392, 4960, 5226, 6535, 4666 -] - -def insert_missing_partners(cr, registry): - env = Environment(cr, SUPERUSER_ID, {}) - - for partner_id in MISSING_PARTNERS: - cr.execute(""" - INSERT INTO res_partner ( - id, name, customer_rank, create_uid, create_date, write_uid, write_date - ) - VALUES (%s, %s, 1, %s, now(), %s, now()) - ON CONFLICT (id) DO NOTHING; - """, (partner_id, f"Fehlender Partner {partner_id}", SUPERUSER_ID, SUPERUSER_ID)) - - cr.execute("SELECT setval('res_partner_id_seq', (SELECT MAX(id) FROM res_partner));") - - _logger.info(f"[OWS Repair] {len(MISSING_PARTNERS)} fehlende Partner hinzugefügt.") - cr.commit() - -# Automatischer Start in odoo-bin shell -if 'env' in globals(): - insert_missing_partners(env.cr, env.registry) \ No newline at end of file diff --git a/helper/data_product_and_categories.xml b/helper/data_product_and_categories.xml deleted file mode 100644 index dd3566c..0000000 --- a/helper/data_product_and_categories.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - - Einweisungen - - - Maschinennutzung - - - 3D Druck (30 Minuten) - - 0.25 - True - - - - Bandschleifer (1 Minute) - - 0.1 - True - - - - Bandsäge (1 Minute) - - 0.1 - True - - - - CNC Fräse (1 Minute) - - 0.1 - True - - - - CNC Sicherheitseinweisung - - 25.0 - True - - - - Drehbank (1 Minute) - - 0.1 - True - - - - Einweisung 3D Drucker Delta - - 15.0 - True - - - - Einweisung 3D Drucker Prusa - - 20.0 - True - - - - Einweisung Bandsäge - - 15.0 - True - - - - Einweisung Drehbank - - 20.0 - True - - - - Einweisung FKS - - 20.0 - True - - - - Einweisung Hobel - - 15.0 - True - - - - Einweisung Laser - - 15.0 - True - - - - Einweisung Metallfräse - - 20.0 - True - - - - Einweisung Schweißgerät - - 10.0 - True - - - - Einweisung in maschinelle Holzverbindungen - - 15.0 - True - - - - Formatkreissäge (1 Minute) - - 0.1 - True - - - - Fräse - Deckel (1 Minute) - - 0.1 - True - - - - Hobel (1 Minute) - - 0.1 - True - - - - Laser (Aktivminute) - - 0.7000000000000001 - True - - - - Sandstrahlbox (1 Minute) - - 0.2 - True - - - - Schweißgerät (1 Minute) - - 0.2 - True - - - - Schweißkabine (eigenes Schweißgerät - 1 Minute) - - 0.1 - True - - - - Sonstige Dienstleistungen/Nutzung - - 1.0 - True - - - \ No newline at end of file diff --git a/helper/export.sh b/helper/export.sh deleted file mode 100755 index 24f8fbd..0000000 --- a/helper/export.sh +++ /dev/null @@ -1,2 +0,0 @@ -/opt/odoo/odoo/odoo-bin shell -d hobbyhimmel < /home/odoo/custom_addons/open_workshop/data/export_products_and_categories.py - diff --git a/helper/export_categories.py b/helper/export_categories.py deleted file mode 100644 index 1c1dec8..0000000 --- a/helper/export_categories.py +++ /dev/null @@ -1,20 +0,0 @@ -# /opt/odoo/odoo/odoo-bin shell -d < export_categories.py -import csv -from odoo import api, SUPERUSER_ID -import os - - -categories = env['product.category'].search([('name', 'in', ['Einweisungen', 'Maschinennutzung'])]) -file_path = os.path.join(os.getcwd(), 'product_category.csv') - -with open(file_path, 'w', newline='') as csvfile: - writer = csv.writer(csvfile) - writer.writerow(['id', 'name', 'parent_id/id']) - for cat in categories: - xml_id = f"open_workshop.cat_{cat.name.lower().replace(' ', '_')}" - parent_id = cat.parent_id and f"base.{cat.parent_id.xml_id}" or '' - writer.writerow([xml_id, cat.name, parent_id]) - -# Aufruf in odoo shell z. B.: -# env = odoo.api.Environment(cr, SUPERUSER_ID, {}) -# export_categories(env) diff --git a/helper/export_products.py b/helper/export_products.py deleted file mode 100644 index f3aa4b2..0000000 --- a/helper/export_products.py +++ /dev/null @@ -1,26 +0,0 @@ -# /opt/odoo/odoo/odoo-bin shell -d < export_products.py -import csv -from odoo import api, SUPERUSER_ID -import os - -# Kategorien suchen -category_names = ['Einweisungen', 'Maschinennutzung'] -categories = env['product.category'].search([('name', 'in', category_names)]) -products = env['product.product'].search([('categ_id', 'in', categories.ids)]) - -file_path = os.path.join(os.getcwd(), 'product_product.csv') - -with open(file_path, 'w', newline='') as csvfile: - writer = csv.writer(csvfile) - writer.writerow(['id', 'name', 'default_code', 'list_price', 'categ_id/id', 'available_in_pos']) - for prod in products: - cat_xml_id = f"open_workshop.cat_{prod.categ_id.name.lower().replace(' ', '_')}" - xml_id = f"open_workshop.prod_{prod.default_code or prod.name.lower().replace(' ', '_')}" - writer.writerow([ - xml_id, - prod.name, - prod.default_code or '', - prod.list_price, - cat_xml_id, - '1' if prod.available_in_pos else '0' - ]) diff --git a/helper/export_products_and_categories.py b/helper/export_products_and_categories.py deleted file mode 100644 index c583527..0000000 --- a/helper/export_products_and_categories.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -# /opt/odoo/odoo/odoo-bin shell -d < export_products_and_categories.py - -import xml.etree.ElementTree as ET - -def xml_safe_id(name): - return name.lower().replace(' ', '_').replace('/', '_').replace('(', '').replace(')', '').replace('-', '_') - -def export_categories_and_products(env): - root = ET.Element("odoo") - - # Export Kategorien - categories = env['product.category'].search([ - ('name', 'in', ['Einweisungen', 'Maschinennutzung']) - ]) - for cat in categories: - record = ET.SubElement(root, "record", { - "id": f"cat_{xml_safe_id(cat.name)}", - "model": "product.category" - }) - ET.SubElement(record, "field", name="name").text = cat.name - if cat.parent_id: - ET.SubElement(record, "field", name="parent_id", attrib={"ref": f"cat_{xml_safe_id(cat.parent_id.name)}"}) - - # Export Produkte - products = env['product.product'].search([ - ('categ_id.name', 'in', ['Einweisungen', 'Maschinennutzung']) - ]) - for product in products: - record = ET.SubElement(root, "record", { - "id": f"prod_{xml_safe_id(product.name)}", - "model": "product.product" - }) - ET.SubElement(record, "field", name="name").text = product.name or '' - ET.SubElement(record, "field", name="default_code").text = product.default_code or '' - ET.SubElement(record, "field", name="list_price").text = str(product.list_price or 0.0) - ET.SubElement(record, "field", name="available_in_pos").text = "True" - if product.categ_id: - ET.SubElement(record, "field", name="categ_id", attrib={"ref": f"cat_{xml_safe_id(product.categ_id.name)}"}) - - tree = ET.ElementTree(root) - tree.write("data_product_and_categories.xml", encoding="utf-8", xml_declaration=True) - print("✅ XML export saved to data_product_and_categories.xml") - -# Automatischer Start in odoo-bin shell -if 'env' in globals(): - export_categories_and_products(env) diff --git a/helper/install.sh b/helper/install.sh deleted file mode 100755 index c67d878..0000000 --- a/helper/install.sh +++ /dev/null @@ -1 +0,0 @@ -/opt/odoo/odoo/odoo-bin -d hobbyhimmel13_dev -i open_workshop --stop-after-init diff --git a/helper/machine_product_links.xml b/helper/machine_product_links.xml deleted file mode 100644 index be99f67..0000000 --- a/helper/machine_product_links.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/helper/update.sh b/helper/update.sh deleted file mode 100755 index bb99953..0000000 --- a/helper/update.sh +++ /dev/null @@ -1 +0,0 @@ -/opt/odoo/odoo/odoo-bin -d hobbyhimmel --update=open_workshop --dev=all --stop-after-init diff --git a/post_init_hook.py b/post_init_hook.py deleted file mode 100644 index 56e9eb4..0000000 --- a/post_init_hook.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from odoo import SUPERUSER_ID -from odoo.api import Environment -#from . import import_machine_products -import logging - -_logger = logging.getLogger(__name__) - -def run_migration(cr, registry): - """ - Wird nach der Modulinstallation automatisch ausgeführt. - Migriert vorhandene res.partner-Einträge zu ows.user. - """ - env = Environment(cr, SUPERUSER_ID, {}) - - _logger.info("[OWS] Starte automatische Partner-Migration bei Modulinstallation...") - try: - env['res.partner'].migrate_existing_partners() - _logger.info("[OWS] Automatische Partner-Migration abgeschlossen.") - except Exception as e: - _logger.error(f"[OWS] Fehler bei automatischer Partner-Migration: {e}") - - - try: - env['res.partner'].migrate_machine_access_from_old_fields() - _logger.info("[OWS] Automatische Felder-Migration für Maschinenfreigaben in res.partner.") - - except Exception as e: - _logger.error(f"[OWS] Fehler bei automatischer Felder-Migration: {e}") - - - # Testsystem-Anpassungen (Admin umbenennen + andere archivieren) - try: - env['hr.employee'].anonymize_for_testsystem() - _logger.info("[OWS] Testsystem-Anpassung der Mitarbeiter abgeschlossen.") - except Exception as e: - _logger.error(f"[OWS] Fehler bei Testsystem-Anpassung der Mitarbeiter: {e}") - - # Archivierung aller Kontakte die keinen User Account haben - try: - env['res.partner'].archive_partners_without_users() - _logger.info("[OWS] Testsystem-Anpassung der Kontakte abgeschlossen.") - except Exception as e: - _logger.error(f"[OWS] Fehler bei Testsystem-Anpassung der Kontakte: {e}") - - - #import_machine_products.run_import(cr, registry) - - -''' Funktioniert nicht: - try: - module = env['ir.module.module'].search([('name', '=', 'vvow_einweisungen')], limit=1) - if module and module.state != 'uninstalled': - _logger.info("[OWS] Deinstalliere altes Modul vvow_einweisungen...") - module.button_immediate_uninstall() - except Exception as e: - _logger.error(f"[OWS] Fehler bei deinstallieren von vvow_einweisungen: {e}") -''' \ No newline at end of file diff --git a/scripts/fix_missing_pos_partner.py b/scripts/fix_missing_pos_partner.py deleted file mode 100644 index 7e95648..0000000 --- a/scripts/fix_missing_pos_partner.py +++ /dev/null @@ -1,41 +0,0 @@ -from odoo import SUPERUSER_ID - -def fix_missing_pos_order_partners(cr, registry): - """ - Findet POS-Bestellungen mit fehlendem Partner und fügt Dummy-Partner - direkt per SQL mit der passenden ID ein. - """ - cr.execute(""" - SELECT DISTINCT partner_id FROM pos_order - WHERE partner_id IS NOT NULL - AND partner_id NOT IN (SELECT id FROM res_partner) - """) - missing_ids = [row[0] for row in cr.fetchall()] - print(f"Superuser: {SUPERUSER_ID}") - if not missing_ids: - print("✅ Keine fehlenden Partner gefunden.") - return - - print(f"🚧 Fehlende Partner-IDs: {missing_ids}") - - # Direkter SQL-Insert für res_partner - for pid in missing_ids: - print(f"➕ Erzeuge Dummy-Partner mit ID {pid}") - cr.execute(""" - INSERT INTO res_partner (id, name, customer_rank, create_uid, create_date, write_uid, write_date) - VALUES (%s, %s, %s, %s, now(), %s, now()) - ON CONFLICT (id) DO NOTHING - """, (pid, f"Fehlender Partner {pid}", 1, SUPERUSER_ID, SUPERUSER_ID)) - - # Sequenz zurücksetzen, um ID-Kollision zu verhindern - cr.execute(""" - SELECT setval('res_partner_id_seq', (SELECT MAX(id) FROM res_partner)) - """) - print("✅ Alle fehlenden Partner ergänzt.") - - - -# Automatischer Start in odoo-bin shell -if 'env' in globals(): - fix_missing_pos_order_partners(env.cr, env.registry) - env.cr.commit() \ No newline at end of file diff --git a/scripts/import_machine_products.py b/scripts/import_machine_products.py deleted file mode 100644 index 9bd402f..0000000 --- a/scripts/import_machine_products.py +++ /dev/null @@ -1,79 +0,0 @@ -# import_machine_products.py -# odoo-bin shell -d deine_datenbank < import_machine_products.py -import logging -from odoo import api, SUPERUSER_ID - -_logger = logging.getLogger(__name__) - -# Mapping von product_id > machine_id -TRAINING_MAPPING = { - '16':'1', - '11':'2', - '10':'4', - '117':'5', - '14':'6', - '12':'7', - '15':'8', - '118':'10', - '118':'11', - '118':'12', - '18':'15', - '18':'16', - '13':'18', - '17':'19', -} - -# Mapping von product_id > machine_id -USAGE_MAPPING = { - '50':'1', - '49':'2', - '49':'3', - '49':'4', - '53':'5', - '52':'7', - '55':'8', - '59':'15', - '60':'15', - '59':'16', - '60':'16', - '57':'18', - '58':'19', -} - -def run_import(cr, registry): - env = api.Environment(cr, SUPERUSER_ID, {}) - - machine_model = env['ows.machine'] - product_model = env['product.product'] - training_model = env['ows.machine.training'] - usage_model = env['ows.machine.product'] - - created_training = 0 - created_usage = 0 - - for product_id, machine_id in TRAINING_MAPPING.items(): - machine = machine_model.search([('id', '=', machine_id)], limit=1) - product = product_model.search([('id', '=', product_id)], limit=1) - if machine and product: - training_model.create({ - 'machine_id': machine.id, - 'training_id': product.id, - }) - created_training += 1 - - for product_id, machine_id in USAGE_MAPPING.items(): - machine = machine_model.search([('id', '=', machine_id)], limit=1) - product = product_model.search([('id', '=', product_id)], limit=1) - if machine and product: - usage_model.create({ - 'machine_id': machine.id, - 'product_id': product.id, - }) - created_usage += 1 - - _logger.info(f"[OWS Import] ✅ Trainings-Zuordnungen erstellt: {created_training}, Nutzungs-Zuordnungen erstellt: {created_usage}") - env.cr.commit() - -# Automatischer Start in odoo-bin shell -if 'env' in globals(): - run_import(env.cr, env.registry) \ No newline at end of file diff --git a/scripts/install-odoo.sh b/scripts/install-odoo.sh deleted file mode 100755 index 8ec438c..0000000 --- a/scripts/install-odoo.sh +++ /dev/null @@ -1 +0,0 @@ -/opt/odoo/odoo/odoo-bin -d hobbyhimmel13_dev -i base,sale,pos_time_based_products,wk_coupons,pos_coupons,open_workshop --stop-after-init --load-language=de_DE \ No newline at end of file diff --git a/scripts/odoo-restore.sh b/scripts/odoo-restore.sh deleted file mode 100644 index 65a2b4d..0000000 --- a/scripts/odoo-restore.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -BACKUP_DIR=/root # Verzeichnis, in dem das Backup temporär gespeichert wird. -#MONITOR_URL='https://cronitor.link/p/c6debfe4e00f46fe9eb430ab9d2b2588/7PPIpd' # Cronitor-URL zur Überwachung des Skriptstatus. -ODOO_DATABASE=hobbyhimmel # Der Name der Odoo-Datenbank, die wiederhergestellt werden soll. -DEFAULT_URL="http://hobbybackend2.fritz.box:9013" # Standard-URL für die Odoo-Datenbank-Backup-API. -URL="${1:-$DEFAULT_URL}" # Falls ein Argument übergeben wird, wird es als URL genutzt, sonst bleibt die Standard-URL. -BACKUP_NAME=${ODOO_DATABASE}.latest.zip # Der Name der Backup-Datei, wobei das aktuelle Datum an den Namen angehängt wird. -remote_directory=/www/htdocs/${sftp_user}/odoo # Das Verzeichnis auf dem Remote-SFTP-Server, in dem die Backups gespeichert werden. - -# Function to report failure to Cronitor with step -# Diese Funktion meldet einen Fehler an Cronitor und beendet das Skript. -# Parameter: $1 - Der Schrittname, der beim Fehlschlag gemeldet wird. -report_failure() { - local step=$1 # Schrittname wird als erster Parameter übergeben. - echo "Error during $step" # Meldet den Fehler. - #curl "$MONITOR_URL?state=fail&message=$step" # Meldet den Fehlerstatus an Cronitor. - exit 1 # Beendet das Skript mit Exit-Code 1 (Fehler). -} - -echo "Restoring Odoo database from backup..." # Meldet den Beginn der Wiederherstellung der Odoo-Datenbank. -echo "Verbindungsdaten: ${sftp_password}, ssh-${sftp_user}, ${sftp_host}" - -cd /root # Wechselt in das Home-Verzeichnis des Benutzers. -# Holt die verschlüsselte Backup-Datei vom Remote-SFTP-Server in das lokale Verzeichnis. -sshpass -p "${sftp_password}" sftp -i ~/.ssh/id_rsa ssh-${sftp_user}@${sftp_host}:${remote_directory} < Funktioniert nicht, weil im Passwort ein ´ enthalten ist -#rm ${BACKUP_NAME} -#gpg --batch --yes --passphrase "{$gpg_password}" --output "${BACKUP_DIR}/${BACKUP_NAME}" --decrypt "${BACKUP_DIR}/${BACKUP_NAME}.gpg" - -echo "Admin password: ${ADMIN_PASSWORD}" # Meldet das Admin-Passwort. -echo "Database name: ${ODOO_DATABASE}" # Meldet den Namen der Odoo-Datenbank. -echo "Backup name: ${BACKUP_NAME}" # Meldet den Namen der Backup-Datei. -echo "URL: ${URL}" # Meldet die URL der Odoo-Datenbank-Backup-API. -echo "Backup directory: ${BACKUP_DIR}" # Meldet das Verzeichnis, in dem das Backup gespeichert wird. -echo "Delete database: ${ODOO_DATABASE}" # Meldet, dass die Datenbank gelöscht wird. -curl -X POST -s \ - -F "master_pwd=${ADMIN_PASSWORD}" \ - -F "name=${ODOO_DATABASE}" \ - ${URL}/web/database/drop || report_failure "Database deletion" - -echo "Restoring database..." # Meldet den Beginn der Wiederherstellung der Datenbank. -curl \ - -F "master_pwd=${ADMIN_PASSWORD}" \ - -F "name=${ODOO_DATABASE}" \ - -F "backup_file=@${BACKUP_DIR}/${BACKUP_NAME}" \ - -F "backup_format=zip" \ - -F "copy=true" \ - ${URL}/web/database/restore || report_failure "Database restoration" - -# If everything was successful, report completion -# Meldet den erfolgreichen Abschluss des Skripts an Cronitor. -#curl "$MONITOR_URL?state=complete" diff --git a/scripts/uninstall_rpc.py b/scripts/uninstall_rpc.py deleted file mode 100755 index 7dd53b4..0000000 --- a/scripts/uninstall_rpc.py +++ /dev/null @@ -1,59 +0,0 @@ -import sys -import os -import xmlrpc.client - -# ---------------------- -# KONFIGURATION AUS UMGEBUNG -# ---------------------- -url = os.getenv("ODOO_URL", "http://localhost:8069") -db = os.getenv("ODOO_DB", "hobbyhimmel") -username = os.getenv("ODOO_USERNAME") -password = os.getenv("ODOO_PASSWORD") - -# ---------------------- -# PRÜFUNG DER KONFIGURATION -# ---------------------- -if not all([url, db, username, password]): - print("❌ Fehler: ODOO_URL, ODOO_DB, ODOO_USERNAME und ODOO_PASSWORD müssen als Umgebungsvariablen gesetzt sein.") - sys.exit(1) - -# ---------------------- -# PARAMETER PRÜFEN -# ---------------------- -if len(sys.argv) != 2: - print("❌ Fehler: Modulname muss als Parameter übergeben werden.") - print("👉 Beispiel: python3 uninstall_rpc.py vvow_einweisungen") - sys.exit(1) - -module_name = sys.argv[1] - -# ---------------------- -# AUTHENTIFIZIERUNG -# ---------------------- -common = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/common") -uid = common.authenticate(db, username, password, {}) - -if not uid: - print("❌ Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen.") - sys.exit(1) - -# ---------------------- -# MODUL SUCHEN & DEINSTALLIEREN -# ---------------------- -models = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/object") - -ids = models.execute_kw(db, uid, password, - 'ir.module.module', 'search', - [[['name', '=', module_name], ['state', '=', 'installed']]], - {'limit': 1} -) - -if ids: - print(f"📦 Deinstalliere Modul: {module_name}") - models.execute_kw(db, uid, password, - 'ir.module.module', 'button_immediate_uninstall', - [ids] - ) - print("✅ Deinstallation abgeschlossen.") -else: - print(f"ℹ️ Modul '{module_name}' ist nicht installiert oder nicht vorhanden.")