cleanup for odoo 17.0
This commit is contained in:
parent
4d7e7e5f19
commit
0481669327
6
.env
6
.env
|
|
@ -1,7 +1,7 @@
|
||||||
ODOO_VERSION=13.0
|
ODOO_VERSION=17.0
|
||||||
CONTAINER_NAME_EXTENSION=13_dev
|
CONTAINER_NAME_EXTENSION=17_dev
|
||||||
ODOO_PORT=9013
|
ODOO_PORT=9013
|
||||||
DB_HOST=hobbyhimmel_odoo_13_dev_db
|
DB_HOST=hobbyhimmel_odoo_17_dev_db
|
||||||
DB_PORT=5432
|
DB_PORT=5432
|
||||||
DB_USER=odoo
|
DB_USER=odoo
|
||||||
DB_PASSWORD=odoo
|
DB_PASSWORD=odoo
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
from . import models
|
from . import models
|
||||||
from . import controllers
|
from . import controllers
|
||||||
from . import post_init_hook
|
|
||||||
# damit run_migration sichtbar ist:
|
|
||||||
run_migration = post_init_hook.run_migration
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
'name': 'POS Open Workshop',
|
'name': 'POS Open Workshop',
|
||||||
'license': 'AGPL-3',
|
'license': 'AGPL-3',
|
||||||
'version': '13.0.1.0.0',
|
'version': '17.0.1.0.0',
|
||||||
'summary': 'Erstellt Maschinenfreigaben basierend auf POS-Einweisungsprodukten',
|
'summary': 'Erstellt Maschinenfreigaben basierend auf POS-Einweisungsprodukten',
|
||||||
'depends': ['base','product','sale','contacts','point_of_sale'],
|
'depends': ['base','product','sale','contacts','point_of_sale'],
|
||||||
'author': 'matthias.lotz',
|
'author': 'matthias.lotz',
|
||||||
|
|
@ -30,9 +30,8 @@
|
||||||
'static/src/css/pos.css',
|
'static/src/css/pos.css',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'post_init_hook': 'run_migration',
|
|
||||||
'description': """
|
'description': """
|
||||||
Diese App erstellt Maschinenfreigaben basierend auf POS-Einweisungsprodukten.
|
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.
|
||||||
""",
|
""",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
/opt/odoo/odoo/odoo-bin shell -d hobbyhimmel < /home/odoo/custom_addons/open_workshop/demo/export_partner.py
|
|
||||||
|
|
||||||
|
|
@ -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,
|
|
||||||
])
|
|
||||||
|
|
@ -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)
|
|
||||||
|
|
@ -1,177 +0,0 @@
|
||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<odoo>
|
|
||||||
<record id="cat_einweisungen" model="product.category">
|
|
||||||
<field name="name">Einweisungen</field>
|
|
||||||
</record>
|
|
||||||
<record id="cat_maschinennutzung" model="product.category">
|
|
||||||
<field name="name">Maschinennutzung</field>
|
|
||||||
</record>
|
|
||||||
<record id="prod_3d_druck_30_minuten" model="product.product">
|
|
||||||
<field name="name">3D Druck (30 Minuten)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.25</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_bandschleifer_1_minute" model="product.product">
|
|
||||||
<field name="name">Bandschleifer (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_bandsäge_1_minute" model="product.product">
|
|
||||||
<field name="name">Bandsäge (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_cnc_fräse_1_minute" model="product.product">
|
|
||||||
<field name="name">CNC Fräse (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_cnc_sicherheitseinweisung" model="product.product">
|
|
||||||
<field name="name">CNC Sicherheitseinweisung</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">25.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_drehbank_1_minute" model="product.product">
|
|
||||||
<field name="name">Drehbank (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_3d_drucker_delta" model="product.product">
|
|
||||||
<field name="name">Einweisung 3D Drucker Delta</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">15.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_3d_drucker_prusa" model="product.product">
|
|
||||||
<field name="name">Einweisung 3D Drucker Prusa</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">20.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_bandsäge" model="product.product">
|
|
||||||
<field name="name">Einweisung Bandsäge</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">15.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_drehbank" model="product.product">
|
|
||||||
<field name="name">Einweisung Drehbank</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">20.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_fks" model="product.product">
|
|
||||||
<field name="name">Einweisung FKS</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">20.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_hobel" model="product.product">
|
|
||||||
<field name="name">Einweisung Hobel</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">15.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_laser" model="product.product">
|
|
||||||
<field name="name">Einweisung Laser</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">15.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_metallfräse" model="product.product">
|
|
||||||
<field name="name">Einweisung Metallfräse</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">20.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_schweißgerät" model="product.product">
|
|
||||||
<field name="name">Einweisung Schweißgerät</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">10.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_einweisung_in_maschinelle_holzverbindungen" model="product.product">
|
|
||||||
<field name="name">Einweisung in maschinelle Holzverbindungen</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">15.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_einweisungen" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_formatkreissäge_1_minute" model="product.product">
|
|
||||||
<field name="name">Formatkreissäge (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_fräse___deckel_1_minute" model="product.product">
|
|
||||||
<field name="name">Fräse - Deckel (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_hobel_1_minute" model="product.product">
|
|
||||||
<field name="name">Hobel (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_laser_aktivminute" model="product.product">
|
|
||||||
<field name="name">Laser (Aktivminute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.7000000000000001</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_sandstrahlbox_1_minute" model="product.product">
|
|
||||||
<field name="name">Sandstrahlbox (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.2</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_schweißgerät_1_minute" model="product.product">
|
|
||||||
<field name="name">Schweißgerät (1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.2</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_schweißkabine_eigenes_schweißgerät___1_minute" model="product.product">
|
|
||||||
<field name="name">Schweißkabine (eigenes Schweißgerät - 1 Minute)</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">0.1</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
<record id="prod_sonstige_dienstleistungen_nutzung" model="product.product">
|
|
||||||
<field name="name">Sonstige Dienstleistungen/Nutzung</field>
|
|
||||||
<field name="default_code" />
|
|
||||||
<field name="list_price">1.0</field>
|
|
||||||
<field name="available_in_pos">True</field>
|
|
||||||
<field ref="cat_maschinennutzung" name="categ_id" />
|
|
||||||
</record>
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
/opt/odoo/odoo/odoo-bin shell -d hobbyhimmel < /home/odoo/custom_addons/open_workshop/data/export_products_and_categories.py
|
|
||||||
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
# /opt/odoo/odoo/odoo-bin shell -d <alte datebase> < 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)
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
# /opt/odoo/odoo/odoo-bin shell -d <alte datebase> < 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'
|
|
||||||
])
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# /opt/odoo/odoo/odoo-bin shell -d <alte datebase> < 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)
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/opt/odoo/odoo/odoo-bin -d hobbyhimmel13_dev -i open_workshop --stop-after-init
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
<odoo>
|
|
||||||
<record id="machine_prusa_training_prod_einweisung_3d_drucker_prusa" model="ows.machine.training">
|
|
||||||
<field name="machine_id" ref="machine_prusa"/>
|
|
||||||
<field name="training_id" ref="prod_einweisung_3d_drucker_prusa"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_formatkreissaege_usage_prod_formatkreissäge_1_minute" model="ows.machine.product">
|
|
||||||
<field name="machine_id" ref="machine_formatkreissaege"/>
|
|
||||||
<field name="product_id" ref="prod_formatkreissäge_1_minute"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_bandsaege_holz_usage_prod_bandsäge_1_minute" model="ows.machine.product">
|
|
||||||
<field name="machine_id" ref="machine_bandsaege_holz"/>
|
|
||||||
<field name="product_id" ref="prod_bandsäge_1_minute"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_bandsaege_holz_training_prod_einweisung_bandsäge" model="ows.machine.training">
|
|
||||||
<field name="machine_id" ref="machine_bandsaege_holz"/>
|
|
||||||
<field name="training_id" ref="prod_einweisung_bandsäge"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_kreissaege_metall_usage_prod_formatkreissäge_1_minute" model="ows.machine.product">
|
|
||||||
<field name="machine_id" ref="machine_kreissaege_metall"/>
|
|
||||||
<field name="product_id" ref="prod_formatkreissäge_1_minute"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_bandsaege_metall_usage_prod_bandsäge_1_minute" model="ows.machine.product">
|
|
||||||
<field name="machine_id" ref="machine_bandsaege_metall"/>
|
|
||||||
<field name="product_id" ref="prod_bandsäge_1_minute"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_bandsaege_metall_training_prod_einweisung_bandsäge" model="ows.machine.training">
|
|
||||||
<field name="machine_id" ref="machine_bandsaege_metall"/>
|
|
||||||
<field name="training_id" ref="prod_einweisung_bandsäge"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_drehbank_usage_prod_drehbank_1_minute" model="ows.machine.product">
|
|
||||||
<field name="machine_id" ref="machine_drehbank"/>
|
|
||||||
<field name="product_id" ref="prod_drehbank_1_minute"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_drehbank_training_prod_einweisung_drehbank" model="ows.machine.training">
|
|
||||||
<field name="machine_id" ref="machine_drehbank"/>
|
|
||||||
<field name="training_id" ref="prod_einweisung_drehbank"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_fraese_usage_prod_cnc_fräse_1_minute" model="ows.machine.product">
|
|
||||||
<field name="machine_id" ref="machine_fraese"/>
|
|
||||||
<field name="product_id" ref="prod_cnc_fräse_1_minute"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_fraese_usage_prod_fräse___deckel_1_minute" model="ows.machine.product">
|
|
||||||
<field name="machine_id" ref="machine_fraese"/>
|
|
||||||
<field name="product_id" ref="prod_fräse___deckel_1_minute"/>
|
|
||||||
</record>
|
|
||||||
<record id="machine_fraese_training_prod_einweisung_metallfräse" model="ows.machine.training">
|
|
||||||
<field name="machine_id" ref="machine_fraese"/>
|
|
||||||
<field name="training_id" ref="prod_einweisung_metallfräse"/>
|
|
||||||
</record>
|
|
||||||
</odoo>
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
/opt/odoo/odoo/odoo-bin -d hobbyhimmel --update=open_workshop --dev=all --stop-after-init
|
|
||||||
|
|
@ -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}")
|
|
||||||
'''
|
|
||||||
|
|
@ -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()
|
|
||||||
|
|
@ -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)
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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} <<EOF
|
|
||||||
get ${BACKUP_NAME}.gpg
|
|
||||||
get ${BACKUP_NAME}
|
|
||||||
EOF
|
|
||||||
# Prüft, ob der vorherige Befehl erfolgreich war, sonst bricht das Skript ab.
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
report_failure "SFTP transfer"
|
|
||||||
fi
|
|
||||||
cd /root
|
|
||||||
|
|
||||||
# Backup entschlüsseln -> 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"
|
|
||||||
|
|
@ -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.")
|
|
||||||
Loading…
Reference in New Issue
Block a user