I'm reopening this bug, in light of bug 734686 and on the comments on the current bug.
I think Graeme has a point in comment #2: we may indeed need multiple UoM with the same factor, even perhaps multiple ones with factor = 1.0, i.e multiple reference units. And I don't think this would be an issue. What is critical here is that we only allow a single "reference quantity" in each category, which is the quantity that is equivalent to 1 x reference UoM. If you decide to have multiple UoM with factor = 1.0, they effectively become synonyms for each other, which is fine. As Graeme says, maybe you want to have 1 PCE = 1 UNIT = 1 ROLL, etc. It doesn't matter because they all represent the same quantity and can be compared correctly. Eric, we do not need and do not want to explicitly specific the UoM that is used as reference for relative UoM, because the reference is always very clear: the quantity represented by factor or ratio = 1.0. So if a category only contains "Kg" of type "bigger than reference" and ratio = 1000, then it is implicit that this category has a reference unit (unnamed) that has ratio = 1.0, i.e 1/1000 of Kg. And if I define a second UoM named "mg" of type "smaller than reference" with ratio = 1000, then I am defining it relatively to that implicit reference UoM, 1 mg will in fact be equal to 1/1,000,000 of a Kg. I cannot define relative UoMs otherwise than that. I think this gives me maximum flexibility (if I don't want "gram" to be used anywhere in the system, I don't need to define it) without the complexity of conversion tables, etc. And if I want to define multiple UoMs with ratio = 1 in the same category, I don't think this is an issue, because by definition they are all exactly identical in term of relative quantities. This means that if you have 1 PCE = 1 ROLL, then you will have BOX-OF-10-PCE = BOX-OF-10-ROLLS, by definition. If you don't want that, then you should put ROLL and PCE in different categories. Now, in order to avoid confusion, and as bug 734686 mentions, we should also enforce that UoM names are unique, but that is a separate bug. My suggestion is therefore to revert the patch mentioned in comment #4, because it removes flexibility, and instead fix the report mentioned in the description, to make it more robust and support all the different cases: no explicit reference UoM, multiple reference UoM, all reference UoM inactive, etc. A partial fix may have been provided in 6.0 with http://bazaar.launchpad.net/~openerp/openobject-addons/6.0/revision/4512.2.1 ** Changed in: openobject-addons Status: Fix Released => Confirmed -- You received this bug notification because you are a member of C2C OERPScenario, which is subscribed to the OpenERP Project Group. https://bugs.launchpad.net/bugs/731035 Title: Reference UoM for category should be checked for uniqueness Status in OpenERP Modules (addons): Confirmed Bug description: Currently any UoM can be set as a reference for a given category which seems to be wrong (meaning one category can have several UoM references). By conception it is dubious and actually it makes some reports crashes like account_invoice_report with the following error message: Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/netsvc.py", line 489, in dispatch result = ExportService.getService(service_name).dispatch(method, auth, params) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/service/web_services.py", line 599, in dispatch res = fn(db, uid, *params) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/osv.py", line 122, in wrapper return f(self, dbname, *args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/osv.py", line 176, in execute res = self.execute_cr(cr, uid, obj, method, *args, **kw) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/osv.py", line 167, in execute_cr return getattr(object, method)(cr, uid, *args, **kw) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/orm.py", line 1735, in search return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/orm.py", line 3981, in _search cr.execute('SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str, where_clause_params)Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/netsvc.py", line 489, in dispatch result = ExportService.getService(service_name).dispatch(method, auth, params) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/service/web_services.py", line 599, in dispatch res = fn(db, uid, *params) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/osv.py", line 122, in wrapper return f(self, dbname, *args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/osv.py", line 176, in execute res = self.execute_cr(cr, uid, obj, method, *args, **kw) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/osv.py", line 167, in execute_cr return getattr(object, method)(cr, uid, *args, **kw) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/orm.py", line 1735, in search return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/osv/orm.py", line 3981, in _search cr.execute('SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str, where_clause_params) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/sql_db.py", line 78, in wrapper return f(self, *args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/sql_db.py", line 131, in execute res = self._obj.execute(query, params) ProgrammingError: more than one row returned by a subquery used as an expression File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/sql_db.py", line 78, in wrapper return f(self, *args, **kwargs) File "/usr/local/lib/python2.6/dist-packages/openerp-server_9000/sql_db.py", line 131, in execute res = self._obj.execute(query, params) ProgrammingError: more than one row returned by a subquery used as an expression Uniqueness should be checked when the UoM is created/modified. Even more, you should not be able to delete the reference of a category if other UoM depend on it. _______________________________________________ Mailing list: https://launchpad.net/~c2c-oerpscenario Post to : [email protected] Unsubscribe : https://launchpad.net/~c2c-oerpscenario More help : https://help.launchpad.net/ListHelp

