feat(equipment-view): Integrate OWS into Maintenance menu with Equipment-centric views
- Extended maintenance.equipment model with Related fields to ows.machine
- ows_machine_id: One2many inverse relation
- ows_category: Related to machine category (editable, stored)
- ows_area_id: Related to machine area (editable, stored)
- ows_product_ids: Related One2many for usage products
- ows_training_ids: Related One2many for training products
- Equipment Form View Extensions:
- Added ows_area_id and ows_category after location field
- New 'Offene Werkstatt (Hobbyhimmel)' notebook page with:
- Security section (category icon, category, area)
- Usage products section (Nutzungsprodukte)
- Training products section (Einweisungsprodukte)
- Page visibility controlled by ows_machine_id existence
- Equipment List/Search View Extensions:
- Added ows_category_icon and ows_area_id columns
- Added OWS search fields (area, category)
- Added category filters (green/yellow/red)
- Added OWS grouping options (by area, by category)
- Menu Structure Migration:
- Removed standalone 'Ausrüstung' top-level menu
- Integrated all OWS config into Maintenance → Configuration:
- Bereiche (Areas)
- Zuordnungen (Assignments) container
- Nutzungsprodukte (Usage Products)
- Einweisungsprodukte (Training Products)
- Created simplified tree views for Equipment context:
- view_ows_machine_product_tree_simple (no machine_id column)
- view_ows_machine_training_tree_simple (no machine_id column)
- Freed location field from automatic area synchronization:
- Removed area → location mapping in create()/write()
- location now available for detailed physical location info
- ows_area_id provides workspace area assignment
BREAKING CHANGE: Standalone OWS menu removed, all features now in Maintenance app
UX IMPROVEMENT: Single Equipment view shows all data, no split views needed
This commit is contained in:
parent
ed339b0e2e
commit
1b203eeb10
|
|
@ -400,6 +400,51 @@ AVAILABLE_COLORS = [
|
|||
('#ffffff', 'Weiss'),
|
||||
]
|
||||
|
||||
class OwsMachineArea(models.Model):
|
||||
_name = 'ows.machine.area'
|
||||
_table = 'ows_machine_area'
|
||||
_description = 'OWS: Maschinenbereich'
|
||||
|
||||
|
||||
class MaintenanceEquipment(models.Model):
|
||||
"""Erweitere maintenance.equipment mit OWS-Feldern für direkte Bearbeitung"""
|
||||
_inherit = 'maintenance.equipment'
|
||||
|
||||
# Inverse Relation zu ows.machine
|
||||
ows_machine_id = fields.One2many('ows.machine', 'equipment_id', string='OWS Maschine', readonly=True)
|
||||
|
||||
# OWS-Felder direkt auf Equipment (via related für einfache Bearbeitung)
|
||||
ows_category = fields.Selection(
|
||||
related='ows_machine_id.category',
|
||||
string='Sicherheitskategorie',
|
||||
readonly=False,
|
||||
store=True
|
||||
)
|
||||
ows_category_icon = fields.Char(
|
||||
related='ows_machine_id.category_icon',
|
||||
string='⚙'
|
||||
)
|
||||
ows_area_id = fields.Many2one(
|
||||
'ows.machine.area',
|
||||
related='ows_machine_id.area_id',
|
||||
string='Bereich',
|
||||
readonly=False,
|
||||
store=True
|
||||
)
|
||||
ows_product_ids = fields.One2many(
|
||||
'ows.machine.product',
|
||||
related='ows_machine_id.product_ids',
|
||||
string='Nutzungsprodukte',
|
||||
readonly=False
|
||||
)
|
||||
ows_training_ids = fields.One2many(
|
||||
'ows.machine.training',
|
||||
related='ows_machine_id.training_ids',
|
||||
string='Einweisungsprodukte',
|
||||
readonly=False
|
||||
)
|
||||
|
||||
|
||||
class OwsMachineArea(models.Model):
|
||||
_name = 'ows.machine.area'
|
||||
_table = 'ows_machine_area'
|
||||
|
|
@ -527,12 +572,6 @@ class OwsMachine(models.Model):
|
|||
'serial_no': vals.get('serial_no', False),
|
||||
}
|
||||
|
||||
# Area → Location Mapping für Equipment
|
||||
if 'area_id' in vals and vals['area_id']:
|
||||
area = self.env['ows.machine.area'].browse(vals['area_id'])
|
||||
if area and area.name:
|
||||
equipment_vals['location'] = area.name
|
||||
|
||||
equipment = self.env['maintenance.equipment'].create(equipment_vals)
|
||||
vals['equipment_id'] = equipment.id
|
||||
|
||||
|
|
@ -541,15 +580,8 @@ class OwsMachine(models.Model):
|
|||
def write(self, vals):
|
||||
"""
|
||||
Bei Updates:
|
||||
1. Area → Location synchronisieren
|
||||
2. Name/Serial_no → Equipment synchronisieren
|
||||
1. Name/Serial_no → Equipment synchronisieren
|
||||
"""
|
||||
# Area → Location Mapping
|
||||
if 'area_id' in vals and vals['area_id']:
|
||||
area = self.env['ows.machine.area'].browse(vals['area_id'])
|
||||
if area and area.name:
|
||||
vals['location'] = area.name
|
||||
|
||||
# Name/Serial_no an Equipment weiterleiten
|
||||
equipment_vals = {}
|
||||
if 'name' in vals:
|
||||
|
|
|
|||
|
|
@ -7,9 +7,6 @@
|
|||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
<!-- Menüpunkt unter Maschinen > Konfiguration -->
|
||||
<menuitem id="menu_machine_area" name="Bereiche" parent="menu_machine_config" action="open_workshop_base.action_machine_area_list" sequence="30"/>
|
||||
|
||||
<!-- Listenansicht -->
|
||||
<record id="view_machine_area_tree" model="ir.ui.view">
|
||||
<field name="name">ows.machine.area.tree</field>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<odoo>
|
||||
<!-- Tree View: Nutzungsprodukte -->
|
||||
<!-- Tree View: Nutzungsprodukte (normale Ansicht) -->
|
||||
<record id="view_machine_product_tree" model="ir.ui.view">
|
||||
<field name="name">ows.machine.product.tree</field>
|
||||
<field name="model">ows.machine.product</field>
|
||||
|
|
@ -10,8 +10,19 @@
|
|||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Tree View: Nutzungsprodukte (vereinfacht für Equipment) -->
|
||||
<record id="view_ows_machine_product_tree_simple" model="ir.ui.view">
|
||||
<field name="name">ows.machine.product.tree.simple</field>
|
||||
<field name="model">ows.machine.product</field>
|
||||
<field name="arch" type="xml">
|
||||
<list editable="bottom">
|
||||
<field name="product_id" domain="[('categ_id.name', '=', 'Maschinennutzung')]"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Tree View: Einweisungsprodukte -->
|
||||
<!-- Tree View: Einweisungsprodukte (normale Ansicht) -->
|
||||
<record id="view_machine_training_tree" model="ir.ui.view">
|
||||
<field name="name">ows.machine.training.tree</field>
|
||||
<field name="model">ows.machine.training</field>
|
||||
|
|
@ -22,6 +33,17 @@
|
|||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Tree View: Einweisungsprodukte (vereinfacht für Equipment) -->
|
||||
<record id="view_ows_machine_training_tree_simple" model="ir.ui.view">
|
||||
<field name="name">ows.machine.training.tree.simple</field>
|
||||
<field name="model">ows.machine.training</field>
|
||||
<field name="arch" type="xml">
|
||||
<list editable="bottom">
|
||||
<field name="training_id" domain="[('categ_id.name', 'in', ['Einweisungen', 'Kurse'])]"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Action: Nutzungsprodukte -->
|
||||
<record id="action_machine_product" model="ir.actions.act_window">
|
||||
|
|
|
|||
|
|
@ -1,15 +1,80 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Inherit maintenance.equipment form view to make location readonly -->
|
||||
<record id="view_equipment_form_location_readonly" model="ir.ui.view">
|
||||
<field name="name">maintenance.equipment.form.location.readonly</field>
|
||||
<!-- Erweitere Equipment Form mit OWS-Feldern -->
|
||||
<record id="view_equipment_form_ows_extension" model="ir.ui.view">
|
||||
<field name="name">maintenance.equipment.form.ows</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='location']" position="attributes">
|
||||
<attribute name="readonly">1</attribute>
|
||||
<attribute name="help">Wird automatisch aus dem Bereich (ows.machine) synchronisiert. Änderungen nur über Bereich möglich.</attribute>
|
||||
<!-- Füge OWS-Felder in die Details-Gruppe ein -->
|
||||
<xpath expr="//field[@name='location']" position="after">
|
||||
<field name="ows_area_id" string="Bereich"/>
|
||||
<field name="ows_category" string="Sicherheitskategorie"/>
|
||||
</xpath>
|
||||
|
||||
<!-- Füge Open Workshop Notebook-Page hinzu -->
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Offene Werkstatt (Hobbyhimmel)" name="open_workshop" invisible="not ows_machine_id">
|
||||
<group>
|
||||
<group string="Sicherheit">
|
||||
<field name="ows_machine_id" invisible="1"/>
|
||||
<field name="ows_category_icon" readonly="1"/>
|
||||
<field name="ows_category"/>
|
||||
<field name="ows_area_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Nutzungsprodukte">
|
||||
<field name="ows_product_ids" nolabel="1" context="{'tree_view_ref': 'open_workshop_base.view_ows_machine_product_tree_simple'}"/>
|
||||
</group>
|
||||
<group string="Einweisungsprodukte">
|
||||
<field name="ows_training_ids" nolabel="1" context="{'tree_view_ref': 'open_workshop_base.view_ows_machine_training_tree_simple'}"/>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Erweitere Equipment List-View mit OWS-Spalten -->
|
||||
<record id="view_equipment_tree_ows_extension" model="ir.ui.view">
|
||||
<field name="name">maintenance.equipment.tree.ows</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_view_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='name']" position="after">
|
||||
<field name="ows_category_icon" string="⚙" optional="show"/>
|
||||
<field name="ows_area_id" optional="show"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Erweitere Equipment Search-View mit OWS-Filtern -->
|
||||
<record id="view_equipment_search_ows_extension" model="ir.ui.view">
|
||||
<field name="name">maintenance.equipment.search.ows</field>
|
||||
<field name="model">maintenance.equipment</field>
|
||||
<field name="inherit_id" ref="maintenance.hr_equipment_view_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<!-- Füge OWS-Felder zur Suche hinzu -->
|
||||
<xpath expr="//field[@name='name']" position="after">
|
||||
<field name="ows_area_id" string="Bereich"/>
|
||||
<field name="ows_category" string="Kategorie"/>
|
||||
</xpath>
|
||||
|
||||
<!-- Füge OWS-Filter hinzu -->
|
||||
<xpath expr="//filter[@name='inactive']" position="after">
|
||||
<separator/>
|
||||
<filter string="Kategorie 1 (grün)" name="filter_green" domain="[('ows_category', '=', 'green')]"/>
|
||||
<filter string="Kategorie 2 (gelb)" name="filter_yellow" domain="[('ows_category', '=', 'yellow')]"/>
|
||||
<filter string="Kategorie 3 (rot)" name="filter_red" domain="[('ows_category', '=', 'red')]"/>
|
||||
</xpath>
|
||||
|
||||
<!-- Füge OWS-Gruppierungen hinzu (erstelle group wenn nicht vorhanden) -->
|
||||
<xpath expr="//search" position="inside">
|
||||
<group expand="0" string="Gruppieren nach">
|
||||
<filter string="Bereich" name="group_by_area" context="{'group_by': 'ows_area_id'}"/>
|
||||
<filter string="Kategorie" name="group_by_category" context="{'group_by': 'ows_category'}"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
<!-- menu_views.xml -->
|
||||
<odoo>
|
||||
<!-- Maschinenliste -->
|
||||
<record id="action_machine_list" model="ir.actions.act_window">
|
||||
<!-- Equipment-Liste mit OWS-Filter (ersetzt Standard Equipment Action) -->
|
||||
<record id="action_equipment_ows" model="ir.actions.act_window">
|
||||
<field name="name">Ausrüstung</field>
|
||||
<field name="res_model">ows.machine</field>
|
||||
<field name="res_model">maintenance.equipment</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="context">{'search_default_group_area': 1, 'group_expand': True}</field>
|
||||
<field name="domain">[('ows_machine_id', '!=', False)]</field>
|
||||
<field name="context">{
|
||||
'default_ows_category': 'red',
|
||||
'search_default_group_by_area': 1
|
||||
}</field>
|
||||
</record>
|
||||
|
||||
<!-- Trainingsprodukt-Liste -->
|
||||
|
|
@ -15,42 +19,32 @@
|
|||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
<!-- Menüstruktur -->
|
||||
<!-- Oberstes Menü -->
|
||||
<menuitem id="menu_machine_root"
|
||||
name="Ausrüstung"
|
||||
sequence="10"/>
|
||||
<!-- Integration in Maintenance Menü -->
|
||||
|
||||
<!-- Bereiche unter Maintenance → Configuration -->
|
||||
<menuitem id="menu_maintenance_ows_areas"
|
||||
name="Bereiche"
|
||||
parent="maintenance.menu_maintenance_config"
|
||||
action="open_workshop_base.action_machine_area_list"
|
||||
sequence="50"/>
|
||||
|
||||
<!-- Konfigurationsebene -->
|
||||
<menuitem id="menu_machine_config"
|
||||
name="Konfiguration"
|
||||
parent="menu_machine_root"
|
||||
sequence="10"/>
|
||||
|
||||
<!-- Menüpunkt: Maschinenliste (klickbar) -->
|
||||
<menuitem id="menu_machine_list_action"
|
||||
name="Alle Ausrüstung"
|
||||
parent="menu_machine_config"
|
||||
action="open_workshop_base.action_machine_list"
|
||||
sequence="10"/>
|
||||
|
||||
<!-- Menücontainer: Zuordnungen -->
|
||||
<menuitem id="menu_machine_list"
|
||||
<!-- Zuordnungen Container unter Maintenance → Configuration -->
|
||||
<menuitem id="menu_maintenance_ows_assignments"
|
||||
name="Zuordnungen"
|
||||
parent="menu_machine_config"
|
||||
sequence="20"/>
|
||||
parent="maintenance.menu_maintenance_config"
|
||||
sequence="51"/>
|
||||
|
||||
<!-- Untermenü: Nutzungsprodukte -->
|
||||
<menuitem id="menu_machine_product"
|
||||
<!-- Nutzungsprodukte unter Zuordnungen -->
|
||||
<menuitem id="menu_maintenance_machine_product"
|
||||
name="Nutzungsprodukte"
|
||||
parent="menu_machine_list"
|
||||
parent="menu_maintenance_ows_assignments"
|
||||
action="action_machine_product"
|
||||
sequence="10"/>
|
||||
|
||||
<!-- Untermenü: Einweisungsprodukte -->
|
||||
<menuitem id="menu_machine_training"
|
||||
<!-- Einweisungsprodukte unter Zuordnungen -->
|
||||
<menuitem id="menu_maintenance_machine_training"
|
||||
name="Einweisungsprodukte"
|
||||
parent="menu_machine_list"
|
||||
parent="menu_maintenance_ows_assignments"
|
||||
action="action_machine_training"
|
||||
sequence="20"/>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user