diff --git a/__manifest__.py b/__manifest__.py
index 405cd1a..24740e0 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -3,7 +3,7 @@
'license': 'AGPL-3',
'version': '13.0.1.0.0',
'summary': 'Erstellt Maschinenfreigaben basierend auf POS-Einweisungsprodukten',
- 'depends': ['point_of_sale'],
+ 'depends': ['contacts','point_of_sale'],
'author': 'matthias.lotz',
'category': 'Point of Sale',
'data': [
diff --git a/install-odoo.sh b/install-odoo.sh
new file mode 100755
index 0000000..7d1c748
--- /dev/null
+++ b/install-odoo.sh
@@ -0,0 +1 @@
+/opt/odoo/odoo/odoo-bin -d hobbyhimmel13_dev -i 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/install.sh b/install.sh
new file mode 100755
index 0000000..c67d878
--- /dev/null
+++ b/install.sh
@@ -0,0 +1 @@
+/opt/odoo/odoo/odoo-bin -d hobbyhimmel13_dev -i open_workshop --stop-after-init
diff --git a/models/ows_models.py b/models/ows_models.py
index 4b5e1ae..05305aa 100644
--- a/models/ows_models.py
+++ b/models/ows_models.py
@@ -9,13 +9,43 @@ _logger.info("✅ ows_models.py geladen")
class ResPartner(models.Model):
_inherit = 'res.partner'
+ _logger.info("✅ ows ResPartner geladen")
+ ows_user_id = fields.Many2one(
+ 'ows.user',
+ string='OWS Benutzerdaten',
+ compute='_compute_ows_user',
+ inverse='_inverse_ows_user',
+ store=True,
+ )
+
+ # ✳️ Related-Felder zur Verwendung im Formular
+ birthday = fields.Date(related='ows_user_id.birthday', readonly=False)
+ rfid_card = fields.Text(related='ows_user_id.rfid_card', readonly=False)
+ security_briefing = fields.Boolean(related='ows_user_id.security_briefing', readonly=False)
+ security_id = fields.Text(related='ows_user_id.security_id', readonly=False)
+ def _compute_ows_user(self):
+ for partner in self:
+ partner.ows_user_id = self.env['ows.user'].search(
+ [('partner_id', '=', partner.id)],
+ limit=1
+ )
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ partners = super().create(vals_list)
+ for partner in partners:
+ self.env['ows.user'].create({'partner_id': partner.id})
+ return partners
+
+
machine_access_ids = fields.One2many(
'ows.machine.access',
'partner_id',
string='Maschinenfreigaben'
)
+
machine_access_html = fields.Html(
string="Maschinenfreigaben",
compute="_compute_machine_access_html",
@@ -64,6 +94,71 @@ class ResPartner(models.Model):
html += ""
partner.machine_access_html = html
+
+ @api.model
+ def migrate_existing_partners(self):
+ """
+ Erstellt für alle vorhandenen res.partner einen ows.user,
+ wenn noch keiner existiert, und übernimmt alte vvow_* Felder.
+ odoo-bin shell -d deine_datenbank
+ env['res.partner'].migrate_existing_partners()
+ """
+ migrated = 0
+ skipped = 0
+
+ partners = self.env['res.partner'].search([])
+ for partner in partners:
+ if partner.ows_user_id:
+ skipped += 1
+ continue
+
+ # Werte lesen (werden evtl. durch _inherit hinzugefügt)
+ vals = {
+ 'partner_id': partner.id,
+ 'birthday': getattr(partner, 'vvow_birthday', False),
+ 'rfid_card': getattr(partner, 'vvow_rfid_card', False),
+ 'security_briefing': getattr(partner, 'vvow_security_briefing', False),
+ 'security_id': getattr(partner, 'vvow_security_id', False),
+ }
+ self.env['ows.user'].create(vals)
+ migrated += 1
+
+ _logger = self.env['ir.logging']
+ _logger.info(f"[OWS Migration] ✅ Migriert: {migrated}, ❌ Übersprungen: {skipped}")
+
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'title': "Migration abgeschlossen",
+ 'message': f"{migrated} Partner migriert, {skipped} übersprungen.",
+ 'sticky': False,
+ }
+ }
+
+class OwsUser(models.Model):
+ _name = 'ows.user'
+ _description = 'OWS: Benutzerdaten'
+ _table = 'ows_user'
+ _logger.info("✅ ows_user geladen")
+
+ partner_id = fields.Many2one(
+ 'res.partner',
+ required=True,
+ ondelete='cascade',
+ string='Kontakt'
+ )
+
+ birthday = fields.Date('Geburtstag')
+ rfid_card = fields.Text('RFID Card ID')
+ security_briefing = fields.Boolean('Haftungsausschluss', default=False)
+ security_id = fields.Text('Haftungsausschluss ID')
+
+ _sql_constraints = [
+ ('partner_unique', 'unique(partner_id)', 'Jeder Partner darf nur einen OWS-Datensatz haben.')
+ ]
+
+
class OwsMachineArea(models.Model):
_name = 'ows.machine.area'
_table = "ows_machine_area"
@@ -88,8 +183,9 @@ class OwsMachine(models.Model):
area_id = fields.Many2one('ows.machine.area', string='Bereich')
product_ids = fields.One2many('ows.machine.product', 'machine_id', string="Einweisungsprodukte")
-
product_names = fields.Char(string="Einweisungsprodukte", compute="_compute_product_names", store=False,)
+ machine_product = fields.Many2one('product.product', string="Nutzungsprodukt", domain="[('available_in_pos', '=', True)]")
+ #machine_product = fields.Many2one('product.product', string="Nutzungsprodukt")
@api.depends('product_ids.product_id.name')
def _compute_product_names(self):
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 7fb6e76..d8bc1dc 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -3,3 +3,4 @@ access_ows_machine_access_user,ows.machine.access,model_ows_machine_access,base.
access_ows_machine_user,ows.machine,model_ows_machine,base.group_user,1,1,1,1
access_ows_machine_product_user,ows.machine.product,model_ows_machine_product,base.group_user,1,1,1,1
access_ows_machine_area,ows.machine.area,model_ows_machine_area,base.group_user,1,1,1,1
+access_ows_user,ows.user,model_ows_machine_area,base.group_user,1,1,1,1
diff --git a/update.sh b/update.sh
new file mode 100755
index 0000000..f2506d1
--- /dev/null
+++ b/update.sh
@@ -0,0 +1 @@
+/opt/odoo/odoo/odoo-bin -d hobbyhimmel13_dev --update=open_workshop --stop-after-init
diff --git a/views/machine_views.xml b/views/machine_views.xml
index af23447..45a9b3e 100644
--- a/views/machine_views.xml
+++ b/views/machine_views.xml
@@ -9,6 +9,7 @@
+
@@ -26,8 +27,9 @@
-
-
+
+
+
diff --git a/views/res_partner_view.xml b/views/res_partner_view.xml
index 2d191a3..5bb7308 100644
--- a/views/res_partner_view.xml
+++ b/views/res_partner_view.xml
@@ -1,5 +1,6 @@
+
res.partner.form.ows.machine.access
res.partner
@@ -19,4 +20,52 @@
+
+
+
+ res.partner.form.ows.user
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tree,kanban,form,activity
+
+
+
+
+
+
+
+
+