diff --git a/__init__.py b/__init__.py index 0650744..369f620 100644 --- a/__init__.py +++ b/__init__.py @@ -1 +1,2 @@ from . import models +from . import controllers # <- hinzufügen \ No newline at end of file diff --git a/__manifest__.py b/__manifest__.py index cde85c1..a149498 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -10,12 +10,20 @@ 'security/ir.model.access.csv', 'views/menu_views.xml', 'views/machine_area_views.xml', - 'views/machine_views.xml', # <--- diese Zeile hinzufügen + 'views/machine_views.xml', 'views/res_partner_view.xml', - - ], - 'demo': [ - 'demo/demo_data.xml', # <--- DEMO-DATEN HINZUGEFÜGT + 'views/assets.xml', + 'data/demo_data.xml', + ], + 'qweb': [ + 'static/src/xml/partner_access_popup.xml', ], 'installable': True, + 'assets': { + 'point_of_sale.assets': [ + 'static/src/js/partner_access_popup.js', + 'static/src/js/debug.js', + ], + }, + } diff --git a/controllers/__init__.py b/controllers/__init__.py new file mode 100644 index 0000000..4dc11d1 --- /dev/null +++ b/controllers/__init__.py @@ -0,0 +1,3 @@ +# Datei: open_workshop/controllers/__init__.py + +from . import pos_access diff --git a/controllers/pos_access.py b/controllers/pos_access.py new file mode 100644 index 0000000..b185398 --- /dev/null +++ b/controllers/pos_access.py @@ -0,0 +1,11 @@ +# Datei: controllers/pos_access.py + +from odoo import http +from odoo.http import request + +class OpenWorkshopPOSController(http.Controller): + + @http.route('/open_workshop/partner_access', type='json', auth='user') + def get_partner_machine_access(self, partner_id): + Machine = request.env['ows.machine'].sudo() + return Machine.get_access_list_grouped(partner_id) diff --git a/data/demo_data.xml b/data/demo_data.xml index 3821d0e..0f65c8b 100644 --- a/data/demo_data.xml +++ b/data/demo_data.xml @@ -1,4 +1,4 @@ - + diff --git a/models/ows_models.py b/models/ows_models.py index 06e17cb..abfdfe2 100644 --- a/models/ows_models.py +++ b/models/ows_models.py @@ -1,4 +1,7 @@ -from odoo import models, fields +from odoo import models, fields, api +import logging +_logger = logging.getLogger(__name__) +_logger.info("✅ ows_models.py geladen") class OwsMachineArea(models.Model): _name = 'ows.machine.area' @@ -29,6 +32,27 @@ class OwsMachine(models.Model): def name_get(self): return [(rec.id, f"{rec.name} ({rec.code})") for rec in self] + @api.model + def get_access_list_grouped(self, partner_id): + areas = self.env['ows.machine.area'].search([], order="name") + _logger.info("🔍 Maschinenbereiche: %s", areas.mapped('name')) + _logger.info("🔍 Partner_id: %s", partner_id) + res = [] + for area in areas: + machines = self.search([('area_id', '=', area.id)], order="name") + machine_list = [] + for machine in machines: + has_access = bool(self.env['ows.machine.access'].search([ + ('partner_id', '=', partner_id), + ('machine_id', '=', machine.id), + ], limit=1)) + machine_list.append({ + 'name': machine.name, + 'has_access': has_access, + }) + res.append({'area': area.name, 'machines': machine_list}) + return res + class OwsMachineAccess(models.Model): _name = 'ows.machine.access' diff --git a/static/src/js/debug.js b/static/src/js/debug.js new file mode 100644 index 0000000..63133b5 --- /dev/null +++ b/static/src/js/debug.js @@ -0,0 +1,32 @@ +odoo.define('open_workshop.debug', function (require) { + "use strict"; + var models = require('point_of_sale.models'); + var screens = require('point_of_sale.screens'); + + // Laden der zusätzlichen Felder + models.load_fields('res.partner', [ + 'vvow_document_id' + ]); + + // Erweiterung von ClientListScreenWidget, um die Kundendetails anzuzeigen + screens.ClientListScreenWidget.include({ + display_client_details: function(partner, clickpos) { + this._super(partner, clickpos); + console.log('ClientListScreenWidget Partner Daten:', partner); + if (partner.vvow_document_id) { + console.log('vvow_document_id:', partner.vvow_document_id); + } + }, + }); + + // Erweiterung von ClientDetailsWidget, um die Kundendetails anzuzeigen + screens.ClientDetailsWidget.include({ + show: function() { + this._super(); + console.log('ClientDetailsWidget Showing client details:', this.partner); + if (this.partner && this.partner.vvow_document_id) { + console.log('vvow_document_id:', this.partner.vvow_document_id); + } + } + }); +}); diff --git a/static/src/js/partner_access_popup.js b/static/src/js/partner_access_popup.js new file mode 100644 index 0000000..ee5b25d --- /dev/null +++ b/static/src/js/partner_access_popup.js @@ -0,0 +1,39 @@ + + +odoo.define('open_workshop.partner_access_popup', function (require) { + "use strict"; + + var screens = require('point_of_sale.screens'); + var rpc = require('web.rpc'); + var core = require('web.core'); + var QWeb = core.qweb; + console.log("✅ partner_access_popup.js wurde geladen"); + + + screens.ClientListScreenWidget.include({ + renderElement: function () { + this._super(); + var self = this; + var client = this.pos.get_order().get_client(); + + if (!client) { + console.log("⚠️ Kein Kunde ausgewählt"); + return; + } + console.log("👤 client Objekt:", client); + console.log("🆔 client.id:", client && client.id); + rpc.query({ + model: 'ows.machine', + method: 'get_access_list_grouped', + args: [client.id], + }).then(function (result) { + console.log("✅ Maschinenfreigaben vom Server:", result); + + const html = QWeb.render('PartnerMachineAccessList', { + areas: result || [], + }); + self.$('.client-details-right').append(html); + }); + }, + }); +}); diff --git a/static/src/xml/partner_access_popup.xml b/static/src/xml/partner_access_popup.xml new file mode 100644 index 0000000..40cc348 --- /dev/null +++ b/static/src/xml/partner_access_popup.xml @@ -0,0 +1,21 @@ + + +
+

Maschinenfreigaben

+ +
+ +
    + +
  • + + + +
  • +
    +
+
+
+
+
+
diff --git a/views/assets.xml b/views/assets.xml new file mode 100644 index 0000000..908193e --- /dev/null +++ b/views/assets.xml @@ -0,0 +1,10 @@ + +