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 + + + + + + + + +