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.")