working pos again
This commit is contained in:
parent
a317315bb2
commit
312dffdad0
|
|
@ -28,7 +28,7 @@
|
||||||
'assets': {
|
'assets': {
|
||||||
'point_of_sale.assets': [
|
'point_of_sale.assets': [
|
||||||
'static/src/js/partner_access_popup.js',
|
'static/src/js/partner_access_popup.js',
|
||||||
'static/src/js/debug.js',
|
#'static/src/js/debug.js',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,26 +10,32 @@ _logger.info("✅ ows_models.py geladen")
|
||||||
class ResPartner(models.Model):
|
class ResPartner(models.Model):
|
||||||
_inherit = 'res.partner'
|
_inherit = 'res.partner'
|
||||||
_logger.info("✅ ows ResPartner geladen")
|
_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
|
ows_user_id = fields.One2many('ows.user', 'partner_id', string="OWS Benutzerdaten")
|
||||||
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):
|
# ✳️ Zugriff auf Felder aus ows.user per compute + inverse (statt related)
|
||||||
|
birthday = fields.Date(compute='_compute_ows_user_fields', inverse='_inverse_ows_user_fields', store=False)
|
||||||
|
rfid_card = fields.Text(compute='_compute_ows_user_fields', inverse='_inverse_ows_user_fields', store=False)
|
||||||
|
security_briefing = fields.Boolean(compute='_compute_ows_user_fields', inverse='_inverse_ows_user_fields', store=False)
|
||||||
|
security_id = fields.Text(compute='_compute_ows_user_fields', inverse='_inverse_ows_user_fields', store=False)
|
||||||
|
|
||||||
|
@api.depends('ows_user_id')
|
||||||
|
def _compute_ows_user_fields(self):
|
||||||
for partner in self:
|
for partner in self:
|
||||||
partner.ows_user_id = self.env['ows.user'].search(
|
user = partner.ows_user_id[0] if partner.ows_user_id else False
|
||||||
[('partner_id', '=', partner.id)],
|
partner.birthday = user.birthday if user else False
|
||||||
limit=1
|
partner.rfid_card = user.rfid_card if user else False
|
||||||
)
|
partner.security_briefing = user.security_briefing if user else False
|
||||||
|
partner.security_id = user.security_id if user else False
|
||||||
|
|
||||||
|
def _inverse_ows_user_fields(self):
|
||||||
|
for partner in self:
|
||||||
|
user = partner.ows_user_id[0] if partner.ows_user_id else False
|
||||||
|
if user:
|
||||||
|
user.birthday = partner.birthday
|
||||||
|
user.rfid_card = partner.rfid_card
|
||||||
|
user.security_briefing = partner.security_briefing
|
||||||
|
user.security_id = partner.security_id
|
||||||
|
|
||||||
@api.model_create_multi
|
@api.model_create_multi
|
||||||
def create(self, vals_list):
|
def create(self, vals_list):
|
||||||
|
|
@ -38,13 +44,11 @@ class ResPartner(models.Model):
|
||||||
self.env['ows.user'].create({'partner_id': partner.id})
|
self.env['ows.user'].create({'partner_id': partner.id})
|
||||||
return partners
|
return partners
|
||||||
|
|
||||||
|
|
||||||
machine_access_ids = fields.One2many(
|
machine_access_ids = fields.One2many(
|
||||||
'ows.machine.access',
|
'ows.machine.access',
|
||||||
'partner_id',
|
'partner_id',
|
||||||
string='Maschinenfreigaben'
|
string='Maschinenfreigaben'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
machine_access_html = fields.Html(
|
machine_access_html = fields.Html(
|
||||||
string="Maschinenfreigaben",
|
string="Maschinenfreigaben",
|
||||||
|
|
@ -54,21 +58,9 @@ class ResPartner(models.Model):
|
||||||
|
|
||||||
@api.depends('machine_access_ids')
|
@api.depends('machine_access_ids')
|
||||||
def _compute_machine_access_html(self):
|
def _compute_machine_access_html(self):
|
||||||
"""
|
areas = self.env['ows.machine.area'].search([], order="name")
|
||||||
Computes an HTML representation of the machine access permissions for each partner.
|
|
||||||
The HTML is structured as a grid of machine areas, where each area contains a table
|
|
||||||
listing the machines and whether the partner has access to them.
|
|
||||||
|
|
||||||
- Iterates through all machine areas and their associated machines.
|
|
||||||
- Checks if the partner has access to each machine.
|
|
||||||
- Generates an HTML table with a checkmark or cross icon for each machine access status.
|
|
||||||
- Assigns the generated HTML to the `machine_access_html` field of the partner.
|
|
||||||
"""
|
|
||||||
for partner in self:
|
for partner in self:
|
||||||
areas = self.env['ows.machine.area'].search([], order="name")
|
html = "<div style='display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem;'>"
|
||||||
html = """
|
|
||||||
<div style='display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem;'>
|
|
||||||
"""
|
|
||||||
for area in areas:
|
for area in areas:
|
||||||
html += f"<div class='o_group' style='margin-bottom: 1em;'>"
|
html += f"<div class='o_group' style='margin-bottom: 1em;'>"
|
||||||
html += f"<table class='o_group o_inner_group'>"
|
html += f"<table class='o_group o_inner_group'>"
|
||||||
|
|
@ -94,14 +86,17 @@ class ResPartner(models.Model):
|
||||||
html += "</div>"
|
html += "</div>"
|
||||||
partner.machine_access_html = html
|
partner.machine_access_html = html
|
||||||
|
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def migrate_existing_partners(self):
|
def migrate_existing_partners(self):
|
||||||
"""
|
"""
|
||||||
Erstellt für alle vorhandenen res.partner einen ows.user,
|
Erstellt für alle vorhandenen res.partner einen ows.user,
|
||||||
wenn noch keiner existiert, und übernimmt alte vvow_* Felder.
|
wenn noch keiner existiert, und übernimmt alte vvow_* Felder.
|
||||||
odoo-bin shell -d deine_datenbank
|
Führt am Ende automatisch einen commit durch.
|
||||||
env['res.partner'].migrate_existing_partners()
|
|
||||||
|
Verwendung in der odoo shell:
|
||||||
|
env['res.partner'].migrate_existing_partners()
|
||||||
|
env['ows.user'].search_count([])
|
||||||
|
env['ows.user'].search([]).mapped('partner_id.name')
|
||||||
"""
|
"""
|
||||||
migrated = 0
|
migrated = 0
|
||||||
skipped = 0
|
skipped = 0
|
||||||
|
|
@ -126,6 +121,9 @@ class ResPartner(models.Model):
|
||||||
|
|
||||||
_logger.info(f"[OWS Migration] ✅ Migriert: {migrated}, ❌ Übersprungen: {skipped}")
|
_logger.info(f"[OWS Migration] ✅ Migriert: {migrated}, ❌ Übersprungen: {skipped}")
|
||||||
|
|
||||||
|
# 🔐 Commit am Ende
|
||||||
|
self.env.cr.commit()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'type': 'ir.actions.client',
|
'type': 'ir.actions.client',
|
||||||
'tag': 'display_notification',
|
'tag': 'display_notification',
|
||||||
|
|
@ -136,6 +134,7 @@ class ResPartner(models.Model):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class OwsUser(models.Model):
|
class OwsUser(models.Model):
|
||||||
_name = 'ows.user'
|
_name = 'ows.user'
|
||||||
_description = 'OWS: Benutzerdaten'
|
_description = 'OWS: Benutzerdaten'
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ class PosOrder(models.Model):
|
||||||
|
|
||||||
training_products = self.env['ows.machine.training'].search([])
|
training_products = self.env['ows.machine.training'].search([])
|
||||||
product_map = {
|
product_map = {
|
||||||
tp.product_id.product_tmpl_id.id: tp.machine_id.id
|
tp.training_id.product_tmpl_id.id: tp.machine_id.id
|
||||||
for tp in training_products
|
for tp in training_products
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,14 @@ odoo.define('open_workshop.models', function (require) {
|
||||||
"use strict";
|
"use strict";
|
||||||
var models = require('point_of_sale.models');
|
var models = require('point_of_sale.models');
|
||||||
var field_utils = require('web.field_utils');
|
var field_utils = require('web.field_utils');
|
||||||
|
|
||||||
models.load_fields('res.partner', 'create_date');
|
models.load_fields('res.partner', 'create_date');
|
||||||
|
|
||||||
|
models.load_fields('res.partner', 'birthday');
|
||||||
|
models.load_fields('res.partner', 'security_briefing');
|
||||||
|
models.load_fields('res.partner', 'security_id');
|
||||||
|
models.load_fields('res.partner', 'rfid_card');
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
odoo.define('open_workshop.partner_access_popup', function (require) {
|
odoo.define('open_workshop.partner_access_popup', function (require) {
|
||||||
|
|
|
||||||
|
|
@ -29,12 +29,12 @@
|
||||||
|
|
||||||
<div class='client-detail'>
|
<div class='client-detail'>
|
||||||
<span class='label'>Geburtstag</span>
|
<span class='label'>Geburtstag</span>
|
||||||
<t t-if='partner.ows_user_id.birthday'>
|
<t t-if='partner.birthday'>
|
||||||
<span class='detail client-vvow_birthday'>
|
<span class='detail client-vvow_birthday'>
|
||||||
<t t-esc='partner.ows_user_id.birthday' />
|
<t t-esc='partner.birthday' />
|
||||||
</span>
|
</span>
|
||||||
</t>
|
</t>
|
||||||
<t t-if='!partner.ows_user_id.birthday'>
|
<t t-if='!partner.birthday'>
|
||||||
<span class='detail client-vvow_birthday empty'>N/A</span>
|
<span class='detail client-vvow_birthday empty'>N/A</span>
|
||||||
</t>
|
</t>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -62,23 +62,23 @@
|
||||||
</div>
|
</div>
|
||||||
<div class='client-detail'>
|
<div class='client-detail'>
|
||||||
<span class='label'>Haftungs.</span>
|
<span class='label'>Haftungs.</span>
|
||||||
<t t-if='partner.ows_user_id.security_briefing'>
|
<t t-if='partner.security_briefing'>
|
||||||
<span class='detail client-details-vvow_briefing'>
|
<span class='detail client-details-vvow_briefing'>
|
||||||
Ja
|
Ja
|
||||||
</span>
|
</span>
|
||||||
</t>
|
</t>
|
||||||
<t t-if='!partner.ows_user_id.security_briefing'>
|
<t t-if='!partner.security_briefing'>
|
||||||
<span class='detail client-details-vvow_sec_briefing_error'>
|
<span class='detail client-details-vvow_sec_briefing_error'>
|
||||||
Nein, bitte überprüfen!
|
Nein, bitte überprüfen!
|
||||||
</span>
|
</span>
|
||||||
</t>
|
</t>
|
||||||
<span class='label'>Id:</span>
|
<span class='label'>Id:</span>
|
||||||
<t t-if='partner.ows_user_id.security_id'>
|
<t t-if='partner.security_id'>
|
||||||
<span class='detail client-details-vvow_security_id'>
|
<span class='detail client-details-vvow_security_id'>
|
||||||
<t t-esc="partner.ows_user_id.security_id"/>
|
<t t-esc="partner.security_id"/>
|
||||||
</span>
|
</span>
|
||||||
</t>
|
</t>
|
||||||
<t t-if='!partner.ows_user_id.security_id'>
|
<t t-if='!partner.security_id'>
|
||||||
<span class='detail client-details-vvow_security_id__error'>
|
<span class='detail client-details-vvow_security_id__error'>
|
||||||
Kein ID vorhanden
|
Kein ID vorhanden
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class='client-detail'>
|
<div class='client-detail'>
|
||||||
<span class='label'>Geburtstag</span>
|
<span class='label'>Geburtstag</span>
|
||||||
<input class='detail client-birthday' name='birthday' type='date' t-att-value='partner.ows_user_id.birthday || ""'></input>
|
<input class='detail client-birthday' name='birthday' type='date' t-att-value='partner.birthday || ""'></input>
|
||||||
</div>
|
</div>
|
||||||
<div t-attf-class='client-detail #{widget.pos.pricelists.length <= 1 ? "oe_hidden" : ""}'>
|
<div t-attf-class='client-detail #{widget.pos.pricelists.length <= 1 ? "oe_hidden" : ""}'>
|
||||||
<span class='label'>Pricelist</span>
|
<span class='label'>Pricelist</span>
|
||||||
|
|
@ -52,9 +52,9 @@
|
||||||
|
|
||||||
<div class='client-detail'>
|
<div class='client-detail'>
|
||||||
<span class='label'>Haftungsauschschluß</span>
|
<span class='label'>Haftungsauschschluß</span>
|
||||||
<select class='detail client-vvow_security_briefing-states needsclick' name='vvow_security_briefing'>
|
<select class='detail client-vvow_security_briefing-states needsclick' name='security_briefing'>
|
||||||
<option value='true' t-att-selected="partner.ows_user_id.security_briefing ? true : undefined">Ja</option>
|
<option value='true' t-att-selected="partner.security_briefing ? true : undefined">Ja</option>
|
||||||
<option value='' t-att-selected="!partner.ows_user_id.security_briefing ? true: undefined">Nein</option>
|
<option value='' t-att-selected="!partner.security_briefing ? true: undefined">Nein</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user