[FIX] stock,mrp: Create ir.model.data with _update, not create

Purpose
=======

As the 'function' tag is re-evaluated on the module update (even when noupdate="1"), the ir.model.data will be created a second time with the function 'create'.

This leads to the record deletion after the update when calling '_process_end'.

Specification
=============

Use '_update' instead of 'create' and '_update_dummy'.

- _update won't create another ir.model.data if it already exists.
- _update already calls _update_dummy to avoid the record deletion.
This commit is contained in:
Yannick Tivisse
2017-11-22 12:28:05 +01:00
parent eb90eb42ce
commit 491faac5e9
3 changed files with 68 additions and 107 deletions
+7 -11
View File
@@ -83,21 +83,17 @@
<field name="sequence">0</field>
</record>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'picking_type_manufacturing',
'module':'mrp',
'model': 'stock.picking.type',
'res_id': obj().env.ref('stock.warehouse0').manu_type_id.id,
}"/>
</function>
<!-- avoid the xml id and the associated resource being dropped by the orm by manually making a hit on it -->
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.picking.type</value>
<value>mrp</value>
<value eval="{}"/>
<value>picking_type_manufacturing</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').manu_type_id.id"/>
</function>
</data>
</odoo>
+42 -65
View File
@@ -149,98 +149,75 @@
</record>
<!-- create xml ids for demo data that are widely used in tests or in other codes, for more convenience -->
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'stock_location_stock',
'module':'stock',
'model': 'stock.location',
'res_id': obj().env.ref('stock.warehouse0').lot_stock_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'stock_location_company',
'module':'stock',
'model': 'stock.location',
'res_id': obj().env.ref('stock.warehouse0').wh_input_stock_loc_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'stock_location_output',
'module':'stock',
'model': 'stock.location',
'res_id': obj().env.ref('stock.warehouse0').wh_output_stock_loc_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'location_pack_zone',
'module':'stock',
'model': 'stock.location',
'res_id': obj().env.ref('stock.warehouse0').wh_pack_stock_loc_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'picking_type_internal',
'module':'stock',
'model': 'stock.picking.type',
'res_id': obj().env.ref('stock.warehouse0').int_type_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'picking_type_in',
'module':'stock',
'model': 'stock.picking.type',
'res_id': obj().env.ref('stock.warehouse0').in_type_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'picking_type_out',
'module':'stock',
'model': 'stock.picking.type',
'res_id': obj().env.ref('stock.warehouse0').out_type_id.id,
}"/>
</function>
<!-- avoid the xml id and the associated resource being dropped by the orm by manually making a hit on it -->
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.location</value>
<value>stock</value>
<value eval="{}"/>
<value>stock_location_stock</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').lot_stock_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.location</value>
<value>stock</value>
<value eval="{}"/>
<value>stock_location_company</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').wh_input_stock_loc_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.location</value>
<value>stock</value>
<value eval="{}"/>
<value>stock_location_output</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').wh_output_stock_loc_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.location</value>
<value>stock</value>
<value eval="{}"/>
<value>location_pack_zone</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').wh_pack_stock_loc_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.picking.type</value>
<value>stock</value>
<value eval="{}"/>
<value>picking_type_internal</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').int_type_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.picking.type</value>
<value>stock</value>
<value eval="{}"/>
<value>picking_type_in</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').in_type_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.picking.type</value>
<value>stock</value>
<value eval="{}"/>
<value>picking_type_out</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.warehouse0').out_type_id.id"/>
</function>
<!-- create the transit location for each company existing -->
+19 -31
View File
@@ -1,47 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- create xml ids for demo data that are widely used in tests or in other codes, for more convenience -->
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'chi_picking_type_in',
'module':'stock',
'model': 'stock.picking.type',
'res_id': obj().env.ref('stock.stock_warehouse_shop0').in_type_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'chi_picking_type_out',
'module':'stock',
'model': 'stock.picking.type',
'res_id': obj().env.ref('stock.stock_warehouse_shop0').out_type_id.id,
}"/>
</function>
<function model="ir.model.data" name="create">
<value model="stock.warehouse" eval="{
'name': 'stock_location_shop0',
'module':'stock',
'model': 'stock.location',
'res_id': obj().env.ref('stock.stock_warehouse_shop0').lot_stock_id.id,
}"/>
</function>
<!-- avoid the xml id and the associated resource being dropped by the orm by manually making a hit on it -->
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.picking.type</value>
<value>stock</value>
<value eval="{}"/>
<value>chi_picking_type_in</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.stock_warehouse_shop0').in_type_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<function model="ir.model.data" name="_update">
<value>stock.picking.type</value>
<value>stock</value>
<value eval="{}"/>
<value>chi_picking_type_out</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.stock_warehouse_shop0').out_type_id.id"/>
</function>
<function model="ir.model.data" name="_update_dummy">
<value>stock.location</value>
<function model="ir.model.data" name="_update">
<value>stock.picking.type</value>
<value>stock</value>
<value eval="{}"/>
<value>stock_location_shop0</value>
<value eval="True"/>
<value eval="True"/>
<value>init</value>
<value model="stock.warehouse" eval="obj().env.ref('stock.stock_warehouse_shop0').lot_stock_id.id"/>
</function>
<record id="location_refrigerator_small" model="stock.location">