fixed res.parnter update ows.user

This commit is contained in:
gitea 2025-04-08 21:18:51 +00:00
parent 7f4e7183ec
commit d5d99b4d8d
8 changed files with 76 additions and 6 deletions

44
Checkliste.md Normal file
View File

@ -0,0 +1,44 @@
# ✅ OpenWorkshop Test Checkliste
## 🔹 1. Migration
- [ ] `migrate_existing_partners()` erzeugt zu jedem Partner genau einen `ows.user`.
- [ ] `migrate_existing_partners()` übernimmt korrekt alte `vvow_*`-Felder.
- [ ] `migrate_machine_access_from_old_fields()` erstellt korrekte Einträge in `ows.machine.access`.
- [ ] `migrate_machine_access_from_old_fields()` übernimmt das Änderungsdatum aus `mail.tracking.value`.
## 🔹 2. Kontakte Backend
- [ ] Beim Anlegen eines neuen Partners wird automatisch ein `ows.user` angelegt.
- [ ] Änderungen an Geburtstag, RFID, Haftung in Partner-Formular schreiben korrekt in `ows.user`.
- [ ] Die Werte aus `ows.user` werden korrekt im Partnerformular angezeigt (via `compute`).
- [ ] Das HTML-Widget mit Maschinenfreigaben (`machine_access_html`) wird korrekt dargestellt.
## 🔹 3. POS-Integration
- [ ] Felder aus `ows.user` (Geburtstag, RFID etc.) erscheinen im POS-Kunden-Popup.
- [ ] Maschinenfreigaben erscheinen im POS-Layout korrekt gruppiert nach Bereichen.
- [ ] Farben der Maschinenbereiche werden korrekt aus `color_hex` übernommen.
## 🔹 4. Maschinenverwaltung
- [ ] Maschinen-Formular zeigt Nutzungs- und Einweisungsprodukte korrekt an.
- [ ] Drop-downs in den Produktlisten zeigen nur Produkte der richtigen Kategorie.
- [ ] Neue Zuordnungen können direkt in den Tree-Ansichten editiert werden.
- [ ] Filter greifen korrekt (Maschinennutzung / Einweisungen).
## 🔹 5. Menüstruktur
- [ ] Menüeinträge "Nutzungsprodukte" und "Einweisungsprodukte" erscheinen unter Konfiguration > Maschinen.
- [ ] Klick auf "Alle Maschinen" öffnet die erwartete Listenansicht.
## 🔹 6. CSV/XML Demo-/Initialdaten
- [ ] Maschinenbereiche (`ows.machine.area`) sind korrekt aus `data.xml` geladen.
- [ ] Maschinen und ihre Produkt-Zuordnungen sind vollständig.
- [ ] Kategorien und Produkte sind korrekt verknüpft (`product.category`, `product.product`).
## 🔹 7. Systemweite Konsistenz
- [ ] Es gibt keine doppelten `ows.user`-Einträge.
- [ ] Kein Partner existiert ohne zugehörigen `ows.user`.
- [ ] `res.partner.ows_user_id` ist immer gefüllt.
## 🔹 8. Technische Qualität
- [ ] Kein `@api.depends('id')` mehr vorhanden.
- [ ] Commit wird in Migrationsfunktionen korrekt gesetzt (`self.env.cr.commit()`).
- [ ] Keine toten `vvow_*` Felder mehr im Modell (wenn auf ows.user umgestellt).
- [ ] post-init und pre-load Skripte laufen fehlerfrei bei Neuinstallation.

View File

@ -29,7 +29,10 @@ Dieses Odoo v13.0 Modul erweitert das POS- und Kontakt-Modul um Funktionen für
1. Dieses Modul in den Custom-Addons-Ordner kopieren 1. Dieses Modul in den Custom-Addons-Ordner kopieren
2. Vor der Installation von open_worshop muss vvow_pos deinstalliert werden. Die Funktionalität von vvow_pos wird durch open_workshop ersetzt und erweitert. 2. Vor der Installation von open_worshop muss vvow_pos deinstalliert werden. Die Funktionalität von vvow_pos wird durch open_workshop ersetzt und erweitert.
3. ggf. muss die alte Datenbank manuell migiriert werden, es gibt ca 9 gelöscht res.partner auf die Verweise aus POS bestehen. Diese res.parnter müssen wieder hergestellt werden. Dazu gibt es ein Skript unter scripts/fix_missing_pos_partner.py 3. ggf. muss die alte Datenbank manuell migiriert werden, es gibt ca 9 gelöscht res.partner auf die Verweise aus POS bestehen. Diese res.parnter müssen wieder hergestellt werden. Dazu gibt es ein Skript unter
```folder
scripts/fix_missing_pos_partner.py
```
```bash ```bash
opt/odoo/odoo/odoo-bin shell -d hobbyhimmel < scrpts/fix_missing_pos_partner.py opt/odoo/odoo/odoo-bin shell -d hobbyhimmel < scrpts/fix_missing_pos_partner.py
``` ```

Binary file not shown.

Binary file not shown.

View File

@ -65,8 +65,14 @@ class ResPartner(models.Model):
@api.model_create_multi @api.model_create_multi
def create(self, vals_list): def create(self, vals_list):
partners = super().create(vals_list) partners = super().create(vals_list)
for partner in partners: for vals, partner in zip(vals_list, partners):
self.env['ows.user'].create({'partner_id': partner.id}) self.env['ows.user'].create({
'partner_id': partner.id,
'birthday': vals.get('birthday'),
'rfid_card': vals.get('rfid_card'),
'security_briefing': vals.get('security_briefing'),
'security_id': vals.get('security_id'),
})
return partners return partners
machine_access_ids = fields.One2many( machine_access_ids = fields.One2many(
@ -209,10 +215,11 @@ class ResPartner(models.Model):
# Änderungsverlauf durchsuchen: Wann wurde das Feld auf True gesetzt? # Änderungsverlauf durchsuchen: Wann wurde das Feld auf True gesetzt?
tracking = TrackingValue.search([ tracking = TrackingValue.search([
('field', '=', field_name), ('field', '=', field_name),
('new_value_boolean', '=', True), ('field_type', '=', 'boolean'),
('new_value_integer', '=', 1),
('mail_message_id.model', '=', 'res.partner'), ('mail_message_id.model', '=', 'res.partner'),
('mail_message_id.res_id', '=', partner.id), ('mail_message_id.res_id', '=', partner.id),
], order='mail_message_id.date ASC', limit=1) ], order='id ASC', limit=1)
date_granted = tracking.mail_message_id.date if tracking else fields.Datetime.now() date_granted = tracking.mail_message_id.date if tracking else fields.Datetime.now()

View File

@ -19,6 +19,7 @@ def run_migration(cr, registry):
except Exception as e: except Exception as e:
_logger.error(f"[OWS] Fehler bei automatischer Partner-Migration: {e}") _logger.error(f"[OWS] Fehler bei automatischer Partner-Migration: {e}")
try: try:
env['res.partner'].migrate_machine_access_from_old_fields() env['res.partner'].migrate_machine_access_from_old_fields()
_logger.info("[OWS] Automatische Felder-Migration für Maschinenfreigaben in res.partner.") _logger.info("[OWS] Automatische Felder-Migration für Maschinenfreigaben in res.partner.")
@ -26,6 +27,7 @@ def run_migration(cr, registry):
except Exception as e: except Exception as e:
_logger.error(f"[OWS] Fehler bei automatischer Felder-Migration: {e}") _logger.error(f"[OWS] Fehler bei automatischer Felder-Migration: {e}")
''' Funktioniert nicht:
try: try:
module = env['ir.module.module'].search([('name', '=', 'vvow_einweisungen')], limit=1) module = env['ir.module.module'].search([('name', '=', 'vvow_einweisungen')], limit=1)
if module and module.state != 'uninstalled': if module and module.state != 'uninstalled':
@ -33,3 +35,4 @@ def run_migration(cr, registry):
module.button_immediate_uninstall() module.button_immediate_uninstall()
except Exception as e: except Exception as e:
_logger.error(f"[OWS] Fehler bei deinstallieren von vvow_einweisungen: {e}") _logger.error(f"[OWS] Fehler bei deinstallieren von vvow_einweisungen: {e}")
'''

3
todo.md Normal file
View File

@ -0,0 +1,3 @@
[ ] Help System
[ ] Möglichkeit, Einweisungen manuell zu setzen?
[ ]

View File

@ -118,4 +118,14 @@
</xpath> </xpath>
</field> </field>
</record> </record>
<record id="view_partner_form_inherit" model="ir.ui.view">
<field name="name">res.partner.form.inherit.default_person</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="company_type" position="attributes">
<attribute name="default">person</attribute>
</field>
</field>
</record>
</odoo> </odoo>