odoo/addons/product/product_data.xml

204 lines
8.1 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<!--
Resource: product.uom.categ
-->
<record id="product_category_all" model="product.category">
<field name="name">All products</field>
</record>
<record id="product_category_1" model="product.category">
<field name="parent_id" ref="product_category_all"/>
<field name="name">Saleable</field>
</record>
<record id="product_uom_categ_unit" model="product.uom.categ">
<field name="name">Unit</field>
</record>
<record id="product_uom_categ_kgm" model="product.uom.categ">
<field name="name">Weight</field>
</record>
<record id="uom_categ_wtime" model="product.uom.categ">
<field name="name">Working Time</field>
</record>
<record id="uom_categ_length" model="product.uom.categ">
<field name="name">Length / Distance</field>
</record>
<record id="product_uom_categ_vol" model="product.uom.categ">
<field name="name">Volume</field>
</record>
<!--
Resource: product.uom
-->
<record id="product_uom_unit" model="product.uom">
<field name="category_id" ref="product_uom_categ_unit"/>
<field name="name">Unit(s)</field>
<field name="factor" eval="1.0"/>
<field name="rounding" eval="1.0"/>
</record>
<record id="product_uom_dozen" model="product.uom">
<field name="category_id" ref="product.product_uom_categ_unit"/>
<field name="name">Dozen(s)</field>
<field name="factor_inv" eval="12"/>
<field name="uom_type">bigger</field>
</record>
<record id="product_uom_kgm" model="product.uom">
<field name="category_id" ref="product_uom_categ_kgm"/>
<field name="name">kg</field>
<field name="factor" eval="1"/>
[FIX] product: remove unnecessary UoM rounding step, add missing test Remove the intermediate rounding inside _compute_qty(), as it is not necessary after rev. fa2f7b86 and has undesired side-effects. An extra float_round() operation inside _compute_qty() had been added at rev. 311c77bb to avoid a float representation error in UoM factors that could bias the ceiling() operation done as the last conversion step. Example 1: Dozen has a factor of 1/12, which was previously stored in the database with a decimal accuracy of 12 significant decimal digits. This meant the factor was exactly stored as 0.08333333333333. When reading this back into a Python float, the precision was not sufficient, and the UoM conversion of 1 Dozen to Units gave a result of 12.00000000000047961... After the final ceiling() operation to Unit's rounding, the converted value ended up as 13. This problem was initially solved using an extra rounding. However at revision fa2f7b86 the decimal precision used to store UoM factors was increased to preserve all significant digits. This added the extra precision necessary to read the Dozen factor back into an accurate float value of 1/12, and the conversion of 1 Dozen now gives 12.0 Units, even without the intermediate rounding operation. (Works for other factor values too) At the same time that extra rounding operation has undesired side-effects, as it requires a fixed precision derived from the rounding precisions of the UoMs. But there is no given precision that would work in all cases for this intermediate value. It is always possible to find a valid combination of UoM roundings that breaks that intermediate step, e.g. by forcing integer roundings. Example 2: Let Grams have a rounding precision set to 1 because no smaller quantities are allowed, and Kilograms a rounding of 0.001 to allow representing 1 Gram. (gram factor = 1000 and kilogram rounding = .001 by default) If we try to convert 1234 Grams into Kilograms, the extra rounding introduced in 311c77bb will cause a rounding of 1234.0/1000.0 at the precision of Grams (1), which gives 1.0 as a result. The net result of this conversion gives 1234.0 Gram = 1.0 Kilogram, while the correct result (1.234 Kilogram) is perfectly compatible with the UoM settings. Similar errors could be triggered with various rounding settings, as long as the intermediate rounding needs a finite precision. Two extra tests have been added to cover Example 1 and Example 2. -- Related to #2072, #1125, #1126, #2672 Closes #2495, #2498
2014-11-27 11:36:28 +00:00
<field name="rounding" eval="0.001"/>
</record>
<record id="product_uom_gram" model="product.uom">
<field name="category_id" ref="product_uom_categ_kgm"/>
<field name="name">g</field>
<field name="factor" eval="1000"/>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_hour" model="product.uom">
<field name="name">Hour(s)</field>
<field eval="uom_categ_wtime" name="category_id"/>
<field name="factor" eval="8.0"/>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_day" model="product.uom">
<field name="name">Day(s)</field>
<field eval="uom_categ_wtime" name="category_id"/>
<field name="factor" eval="1.0"/>
</record>
<record id="product_uom_ton" model="product.uom">
<field name="category_id" ref="product_uom_categ_kgm"/>
<!-- 'tonne' is the most common spelling in english-speaking countries,
the alternative is 'metric ton' in the US, abbreviated as 'mt' -->
<field name="name">t</field>
<field name="factor_inv" eval="1000"/>
<field name="uom_type">bigger</field>
</record>
<record id="product_uom_meter" model="product.uom">
<field name="category_id" ref="uom_categ_length"/>
<field name="name">m</field>
<field name="factor" eval="1.0"/>
</record>
<record id="product_uom_km" model="product.uom">
<field name="category_id" ref="uom_categ_length"/>
<field name="name">km</field>
<field name="factor_inv" eval="1000"/>
<field name="uom_type">bigger</field>
</record>
<record id="product_uom_cm" model="product.uom">
<field name="category_id" ref="uom_categ_length"/>
<field name="name">cm</field>
<field name="factor" eval="100"/>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_litre" model="product.uom">
<field name="name">Liter(s)</field>
<field name="category_id" ref="product_uom_categ_vol"/>
<field name="factor">1.0</field>
</record>
<!--
... to here, it should be in product_demo but we cant just move it
there yet otherwise people who have installed the server (even with the without-demo
parameter) will see those record just disappear.
-->
<!--
Request link
-->
<record id="req_link_product" model="res.request.link">
<field name="name">Product</field>
<field name="object">product.product</field>
</record>
<!--
Resource: product.price.type
-->
<record id="list_price" model="product.price.type">
<field name="name">Public Price</field>
<field name="field">list_price</field>
</record>
<record id="standard_price" model="product.price.type">
<field name="name">Cost Price</field>
<field name="field">standard_price</field>
</record>
<!--
Price list type
-->
<record id="pricelist_type_sale" model="product.pricelist.type">
<field name="name">Sale Pricelist</field>
<field name="key">sale</field>
</record>
<!--
Price list
-->
<record id="list0" model="product.pricelist">
<field name="name">Public Pricelist</field>
<field name="type">sale</field>
</record>
<record id="ver0" model="product.pricelist.version">
<field name="pricelist_id" ref="list0"/>
<field name="name">Default Public Pricelist Version</field>
</record>
<record id="item0" model="product.pricelist.item">
<field name="price_version_id" ref="ver0"/>
<field name="base" ref="list_price"/>
<field name="name">Default Public Pricelist Line</field>
</record>
<!--
Property
-->
<record forcecreate="True" id="property_product_pricelist" model="ir.property">
<field name="name">property_product_pricelist</field>
<field name="fields_id" search="[('model','=','res.partner'),('name','=','property_product_pricelist')]"/>
<field eval="'product.pricelist,'+str(ref('list0'))" name="value"/>
</record>
<record forcecreate="True" id="decimal_price" model="decimal.precision">
<field name="name">Product Price</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_discount" model="decimal.precision">
<field name="name">Discount</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_account" model="decimal.precision">
<field name="name">Account</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_stock_weight" model="decimal.precision">
<field name="name">Stock Weight</field>
<field name="digits">2</field>
</record>
<record forcecreate="True" id="decimal_product_uom" model="decimal.precision">
<field name="name">Product Unit of Measure</field>
<field name="digits" eval="3"/>
</record>
<record forcecreate="True" id="decimal_product_uos" model="decimal.precision">
<field name="name">Product UoS</field>
<field name="digits" eval="3"/>
</record>
<!--
Product
-->
<record id="product_product_consultant" model="product.product">
<field name="list_price">75.0</field>
<field name="standard_price">30.0</field>
<field name="uom_id" ref="product.product_uom_hour"/>
<field name="uom_po_id" ref="product.product_uom_hour"/>
<field name="name">Service</field>
<field name="categ_id" ref="product.product_category_all"/>
<field name="type">service</field>
</record>
</data>
</openerp>