feat: Improve equipment creation flow and UX
- Made location field readonly in maintenance.equipment view - Hide equipment_id field in machine form (auto-created) - Name and serial_no now directly editable in machine form - Area is now required field - Location automatically synced from area to equipment - Equipment auto-created on machine save with all fields - Renamed menu from 'Maschinen' to 'Ausrüstung' - Improved user flow: No need to switch between views Changes: - Added maintenance_equipment_views.xml for readonly location - Updated create() to always auto-create equipment - Enhanced write() to sync name/serial_no changes to equipment - Menu labels updated to 'Ausrüstung'
This commit is contained in:
parent
f87755e7d0
commit
42db76a9c7
|
|
@ -12,7 +12,8 @@
|
|||
'views/machine_product_training_views.xml',
|
||||
'views/menu_views.xml',
|
||||
'views/machine_area_views.xml',
|
||||
'views/machine_views.xml',
|
||||
'views/machine_views.xml',
|
||||
'views/maintenance_equipment_views.xml',
|
||||
'views/res_partner_view.xml',
|
||||
'data/data.xml',
|
||||
],
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ class OwsMachine(models.Model):
|
|||
# - serial_no → wird als 'code' verwendet (siehe @api.depends unten)
|
||||
# - cost → purchase_price
|
||||
# - effective_date → purchase_date
|
||||
# - location → storage_location
|
||||
# - location → storage_location (wird von area_id synchronisiert, readonly via View)
|
||||
# - note → description
|
||||
# - category_id → Wird mit area_id synchronisiert
|
||||
|
||||
|
|
@ -517,35 +517,49 @@ class OwsMachine(models.Model):
|
|||
def create(self, vals):
|
||||
"""
|
||||
Beim Erstellen einer ows.machine:
|
||||
1. Equipment erstellen FALLS nicht vorhanden
|
||||
1. Equipment IMMER automatisch erstellen
|
||||
2. Area → Location synchronisieren
|
||||
3. serial_no und name vom User übernehmen
|
||||
"""
|
||||
# Nur Equipment erstellen, wenn keins ausgewählt wurde
|
||||
if 'equipment_id' not in vals or not vals['equipment_id']:
|
||||
equipment_vals = {
|
||||
'name': vals.get('name', 'Neue Maschine'),
|
||||
}
|
||||
equipment = self.env['maintenance.equipment'].create(equipment_vals)
|
||||
vals['equipment_id'] = equipment.id
|
||||
# Equipment IMMER automatisch erstellen
|
||||
equipment_vals = {
|
||||
'name': vals.get('name', 'Neue Maschine'),
|
||||
'serial_no': vals.get('serial_no', False),
|
||||
}
|
||||
|
||||
# Area → Location Mapping
|
||||
# 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:
|
||||
# Setze location direkt auf area.name
|
||||
vals['location'] = area.name
|
||||
equipment_vals['location'] = area.name
|
||||
|
||||
equipment = self.env['maintenance.equipment'].create(equipment_vals)
|
||||
vals['equipment_id'] = equipment.id
|
||||
|
||||
return super(OwsMachine, self).create(vals)
|
||||
|
||||
def write(self, vals):
|
||||
"""
|
||||
Bei Updates Area → Location synchronisieren
|
||||
Bei Updates:
|
||||
1. Area → Location synchronisieren
|
||||
2. 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:
|
||||
equipment_vals['name'] = vals['name']
|
||||
if 'serial_no' in vals:
|
||||
equipment_vals['serial_no'] = vals['serial_no']
|
||||
|
||||
if equipment_vals and self.equipment_id:
|
||||
self.equipment_id.write(equipment_vals)
|
||||
|
||||
return super(OwsMachine, self).write(vals)
|
||||
|
||||
def name_get(self):
|
||||
|
|
|
|||
|
|
@ -35,18 +35,16 @@
|
|||
</button>
|
||||
</div>
|
||||
<group>
|
||||
<group string="Open Workshop" name="ows_group">
|
||||
<field name="equipment_id"
|
||||
options="{'no_create': False, 'no_open': False}"
|
||||
context="{'default_name': name}"
|
||||
string="Equipment"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<group string="Maschine" name="ows_group">
|
||||
<field name="equipment_id" invisible="1"/>
|
||||
<field name="name" placeholder="z.B. Sabako Laser"/>
|
||||
<field name="serial_no" string="Code/Seriennummer" placeholder="z.B. sabako_laser"/>
|
||||
<field name="category_icon" string="⚙" readonly="1"/>
|
||||
<field name="category"/>
|
||||
<field name="area_id"/>
|
||||
<field name="area_id" required="1"/>
|
||||
</group>
|
||||
<group name="info_group">
|
||||
<field name="serial_no" readonly="1" string="Code (von Equipment)"/>
|
||||
<field name="location" readonly="1" string="Standort (von Bereich)"/>
|
||||
<field name="active"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
|
|||
15
open_workshop_base/views/maintenance_equipment_views.xml
Normal file
15
open_workshop_base/views/maintenance_equipment_views.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?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>
|
||||
<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>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<odoo>
|
||||
<!-- Maschinenliste -->
|
||||
<record id="action_machine_list" model="ir.actions.act_window">
|
||||
<field name="name">Maschinen</field>
|
||||
<field name="name">Ausrüstung</field>
|
||||
<field name="res_model">ows.machine</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
<!-- Menüstruktur -->
|
||||
<!-- Oberstes Menü -->
|
||||
<menuitem id="menu_machine_root"
|
||||
name="Maschinen"
|
||||
name="Ausrüstung"
|
||||
sequence="10"/>
|
||||
|
||||
<!-- Konfigurationsebene -->
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
<!-- Menüpunkt: Maschinenliste (klickbar) -->
|
||||
<menuitem id="menu_machine_list_action"
|
||||
name="Alle Maschinen"
|
||||
name="Alle Ausrüstung"
|
||||
parent="menu_machine_config"
|
||||
action="open_workshop_base.action_machine_list"
|
||||
sequence="10"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user