[IMP] product: rename product.uom into uom.uom

Also rename product.uom.categ into uom.category to
 give it a decent name.
This commit is contained in:
XavierDo
2018-02-26 14:27:26 +01:00
parent 6a378e3839
commit 2966d4faed
71 changed files with 170 additions and 157 deletions
@@ -9,7 +9,7 @@ class AccountAnalyticLine(models.Model):
_description = 'Analytic Line'
_order = 'date desc'
product_uom_id = fields.Many2one('product.uom', string='Unit of Measure')
product_uom_id = fields.Many2one('uom.uom', string='Unit of Measure')
product_id = fields.Many2one('product.product', string='Product')
general_account_id = fields.Many2one('account.account', string='Financial Account', ondelete='restrict', readonly=True,
related='move_id.account_id', store=True, domain=[('deprecated', '=', False)])
+1 -1
View File
@@ -1527,7 +1527,7 @@ class AccountInvoiceLine(models.Model):
help="Gives the sequence of this line when displaying the invoice.")
invoice_id = fields.Many2one('account.invoice', string='Invoice Reference',
ondelete='cascade', index=True)
uom_id = fields.Many2one('product.uom', string='Unit of Measure',
uom_id = fields.Many2one('uom.uom', string='Unit of Measure',
ondelete='set null', index=True, oldname='uos_id')
product_id = fields.Many2one('product.product', string='Product',
ondelete='restrict', index=True)
+1 -1
View File
@@ -424,7 +424,7 @@ class AccountMoveLine(models.Model):
name = fields.Char(string="Label")
quantity = fields.Float(digits=dp.get_precision('Product Unit of Measure'),
help="The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports.")
product_uom_id = fields.Many2one('product.uom', string='Unit of Measure')
product_uom_id = fields.Many2one('uom.uom', string='Unit of Measure')
product_id = fields.Many2one('product.product', string='Product')
debit = fields.Monetary(default=0.0, currency_field='company_currency_id')
credit = fields.Monetary(default=0.0, currency_field='company_currency_id')
@@ -83,7 +83,7 @@ class AccountInvoiceReport(models.Model):
],
'product.product': ['product_tmpl_id'],
'product.template': ['categ_id'],
'product.uom': ['category_id', 'factor', 'name', 'uom_type'],
'uom.uom': ['category_id', 'factor', 'name', 'uom_type'],
'res.currency.rate': ['currency_id', 'name'],
'res.partner': ['country_id'],
}
@@ -130,8 +130,8 @@ class AccountInvoiceReport(models.Model):
JOIN res_partner partner ON ai.commercial_partner_id = partner.id
LEFT JOIN product_product pr ON pr.id = ail.product_id
left JOIN product_template pt ON pt.id = pr.product_tmpl_id
LEFT JOIN product_uom u ON u.id = ail.uom_id
LEFT JOIN product_uom u2 ON u2.id = pt.uom_id
LEFT JOIN uom_uom u ON u.id = ail.uom_id
LEFT JOIN uom_uom u2 ON u2.id = pt.uom_id
JOIN (
-- Temporary table to decide if the qty should be added or retrieved (Invoice vs Credit Note)
SELECT id,(CASE
+1 -1
View File
@@ -83,7 +83,7 @@ class StockPicking(models.Model):
weight = fields.Float(compute='_cal_weight', digits=dp.get_precision('Stock Weight'), store=True)
carrier_tracking_ref = fields.Char(string='Tracking Reference', copy=False)
carrier_tracking_url = fields.Char(string='Tracking URL', compute='_compute_carrier_tracking_url')
weight_uom_id = fields.Many2one('product.uom', string='Unit of Measure', compute='_compute_weight_uom_id', help="Unit of measurement for Weight")
weight_uom_id = fields.Many2one('uom.uom', string='Unit of Measure', compute='_compute_weight_uom_id', help="Unit of measurement for Weight")
package_ids = fields.Many2many('stock.quant.package', compute='_compute_packages', string='Packages')
weight_bulk = fields.Float('Bulk Weight', compute='_compute_bulk_weight')
shipping_weight = fields.Float("Weight for Shipping", compute='_compute_shipping_weight')
+16 -1
View File
@@ -1,7 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Master Data for expense created by email -->
<!--default alias for leads-->
<record id="mail_alias_expense" model="mail.alias">
<field name="alias_name">expense</field>
<field name="alias_model_id" ref="model_hr_expense"/>
<field name="alias_user_id" ref="base.user_root"/>
<field name="alias_contact">employees</field>
</record>
<!-- Resource: product.categ -->
<record id="cat_expense" model="product.category">
<field name="parent_id" ref="product.product_category_all"/>
<field name="name">Expenses</field>
</record>
<record id="product_product_fixed_cost" model="product.product">
<field name="name">Expenses</field>
<field name="list_price">0.0</field>
+2 -2
View File
@@ -23,7 +23,7 @@ class HrExpense(models.Model):
@api.model
def _default_product_uom_id(self):
return self.env['product.uom'].search([], limit=1, order='id')
return self.env['uom.uom'].search([], limit=1, order='id')
@api.model
def _default_account_id(self):
@@ -33,7 +33,7 @@ class HrExpense(models.Model):
date = fields.Date(readonly=True, states={'draft': [('readonly', False)], 'reported': [('readonly', False)], 'refused': [('readonly', False)]}, default=fields.Date.context_today, string="Date")
employee_id = fields.Many2one('hr.employee', string="Employee", required=True, readonly=True, states={'draft': [('readonly', False)], 'reported': [('readonly', False)], 'refused': [('readonly', False)]}, default=_default_employee_id)
product_id = fields.Many2one('product.product', string='Product', readonly=True, states={'draft': [('readonly', False)], 'reported': [('readonly', False)], 'refused': [('readonly', False)]}, domain=[('can_be_expensed', '=', True)], required=True)
product_uom_id = fields.Many2one('product.uom', string='Unit of Measure', required=True, readonly=True, states={'draft': [('readonly', False)], 'refused': [('readonly', False)]}, default=_default_product_uom_id)
product_uom_id = fields.Many2one('uom.uom', string='Unit of Measure', required=True, readonly=True, states={'draft': [('readonly', False)], 'refused': [('readonly', False)]}, default=_default_product_uom_id)
unit_amount = fields.Float("Unit Price", readonly=True, required=True, states={'draft': [('readonly', False)], 'reported': [('readonly', False)], 'refused': [('readonly', False)]}, digits=dp.get_precision('Product Price'))
quantity = fields.Float(required=True, readonly=True, states={'draft': [('readonly', False)], 'reported': [('readonly', False)], 'refused': [('readonly', False)]}, digits=dp.get_precision('Product Unit of Measure'), default=1)
tax_ids = fields.Many2many('account.tax', 'expense_tax', 'expense_id', 'tax_id', string='Taxes', states={'done': [('readonly', True)], 'post': [('readonly', True)]})
@@ -6,7 +6,7 @@ access_hr_expense_sheet_user,hr.expense.sheet.user,model_hr_expense_sheet,hr_exp
access_hr_expense_sheet_employee,hr.expense.sheet.employee,model_hr_expense_sheet,base.group_user,1,1,1,1
access_product_product_hr_expense_user,product.product.hr.expense.user,product.model_product_product,hr_expense.group_hr_expense_user,1,1,1,1
access_product_template_hr_expense_user,product.template.hr.expense.user,product.model_product_template,hr_expense.group_hr_expense_user,1,1,1,1
access_product_uom_hr_expense_user,product.uom.hr.expense.user,uom.model_product_uom,hr_expense.group_hr_expense_user,1,1,1,1
access_uom_uom_hr_expense_user,uom.uom.hr.expense.user,uom.model_uom_uom,hr_expense.group_hr_expense_user,1,1,1,1
access_account_journal_user,account.journal.user,account.model_account_journal,hr_expense.group_hr_expense_user,1,1,1,1
access_account_journal_employee,account.journal.employee,account.model_account_journal,base.group_user,1,0,0,0
access_account_invoice_user,account.invoice.user,account.model_account_invoice,hr_expense.group_hr_expense_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
6 access_product_product_hr_expense_user product.product.hr.expense.user product.model_product_product hr_expense.group_hr_expense_user 1 1 1 1
7 access_product_template_hr_expense_user product.template.hr.expense.user product.model_product_template hr_expense.group_hr_expense_user 1 1 1 1
8 access_product_uom_hr_expense_user access_uom_uom_hr_expense_user product.uom.hr.expense.user uom.uom.hr.expense.user uom.model_product_uom uom.model_uom_uom hr_expense.group_hr_expense_user 1 1 1 1
9 access_account_journal_user account.journal.user account.model_account_journal hr_expense.group_hr_expense_user 1 1 1 1
10 access_account_journal_employee account.journal.employee account.model_account_journal base.group_user 1 0 0 0
11 access_account_invoice_user account.invoice.user account.model_account_invoice hr_expense.group_hr_expense_user 1 1 1 1
12 access_account_invoice_line_user account.invoice.line.user account.model_account_invoice_line hr_expense.group_hr_expense_user 1 1 1 1
@@ -4,6 +4,6 @@ access_account_analytic_line_portal,access_timesheets_portal,analytic.model_acco
access_account_analytic_user,analytic.account.analytic.timesheet.user,analytic.model_account_analytic_account,hr_timesheet.group_hr_timesheet_user,1,1,0,0
access_product_product_user,product.product.timesheet.user,product.model_product_product,hr_timesheet.group_hr_timesheet_user,1,1,1,0
access_product_template_timesheet_user,product.template.timesheet.user,product.model_product_template,hr_timesheet.group_hr_timesheet_user,1,1,1,0
access_product_uom_hr_timesheet,product.uom.timesheet.user,uom.model_product_uom,hr_timesheet.group_hr_timesheet_user,1,0,0,0
access_uom_uom_hr_timesheet,uom.uom.timesheet.user,uom.model_uom_uom,hr_timesheet.group_hr_timesheet_user,1,0,0,0
access_project_project,project.project.timesheet.user,model_project_project,hr_timesheet.group_hr_timesheet_user,1,0,0,0
access_project_task,project.task.timesheet.user,model_project_task,hr_timesheet.group_hr_timesheet_user,1,1,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
4 access_account_analytic_user analytic.account.analytic.timesheet.user analytic.model_account_analytic_account hr_timesheet.group_hr_timesheet_user 1 1 0 0
5 access_product_product_user product.product.timesheet.user product.model_product_product hr_timesheet.group_hr_timesheet_user 1 1 1 0
6 access_product_template_timesheet_user product.template.timesheet.user product.model_product_template hr_timesheet.group_hr_timesheet_user 1 1 1 0
7 access_product_uom_hr_timesheet access_uom_uom_hr_timesheet product.uom.timesheet.user uom.uom.timesheet.user uom.model_product_uom uom.model_uom_uom hr_timesheet.group_hr_timesheet_user 1 0 0 0
8 access_project_project project.project.timesheet.user model_project_project hr_timesheet.group_hr_timesheet_user 1 0 0 0
9 access_project_task project.task.timesheet.user model_project_task hr_timesheet.group_hr_timesheet_user 1 1 0 0
+4 -4
View File
@@ -16,7 +16,7 @@ class MrpBom(models.Model):
_order = "sequence"
def _get_default_product_uom_id(self):
return self.env['product.uom'].search([], limit=1, order='id').id
return self.env['uom.uom'].search([], limit=1, order='id').id
code = fields.Char('Reference')
active = fields.Boolean(
@@ -38,7 +38,7 @@ class MrpBom(models.Model):
'Quantity', default=1.0,
digits=dp.get_precision('Unit of Measure'), required=True)
product_uom_id = fields.Many2one(
'product.uom', 'Product Unit of Measure',
'uom.uom', 'Product Unit of Measure',
default=_get_default_product_uom_id, oldname='product_uom', required=True,
help="Unit of Measure (Unit of Measure) is the unit of measurement for the inventory control")
sequence = fields.Integer('Sequence', help="Gives the sequence order when displaying a list of bills of material.")
@@ -180,7 +180,7 @@ class MrpBomLine(models.Model):
_rec_name = "product_id"
def _get_default_product_uom_id(self):
return self.env['product.uom'].search([], limit=1, order='id').id
return self.env['uom.uom'].search([], limit=1, order='id').id
product_id = fields.Many2one(
'product.product', 'Product', required=True)
@@ -188,7 +188,7 @@ class MrpBomLine(models.Model):
'Product Quantity', default=1.0,
digits=dp.get_precision('Product Unit of Measure'), required=True)
product_uom_id = fields.Many2one(
'product.uom', 'Product Unit of Measure',
'uom.uom', 'Product Unit of Measure',
default=_get_default_product_uom_id,
oldname='product_uom', required=True,
help="Unit of Measure (Unit of Measure) is the unit of measurement for the inventory control")
+1 -1
View File
@@ -60,7 +60,7 @@ class MrpProduction(models.Model):
readonly=True, required=True, track_visibility='onchange',
states={'confirmed': [('readonly', False)]})
product_uom_id = fields.Many2one(
'product.uom', 'Product Unit of Measure',
'uom.uom', 'Product Unit of Measure',
oldname='product_uom', readonly=True, required=True,
states={'confirmed': [('readonly', False)]})
picking_type_id = fields.Many2one(
+1 -1
View File
@@ -26,7 +26,7 @@ class MrpUnbuild(models.Model):
'Quantity',
required=True, states={'done': [('readonly', True)]})
product_uom_id = fields.Many2one(
'product.uom', 'Unit of Measure',
'uom.uom', 'Unit of Measure',
required=True, states={'done': [('readonly', True)]})
bom_id = fields.Many2one(
'mrp.bom', 'Bill of Material',
+1 -1
View File
@@ -35,7 +35,7 @@ class MrpWorkorder(models.Model):
related='production_id.product_id', readonly=True,
help='Technical: used in views only.', store=True)
product_uom_id = fields.Many2one(
'product.uom', 'Unit of Measure',
'uom.uom', 'Unit of Measure',
related='production_id.product_uom_id', readonly=True,
help='Technical: used in views only.')
production_availability = fields.Selection(
+4 -4
View File
@@ -22,7 +22,7 @@ access_mrp_production_stock_worker,mrp.production stock_worker,model_mrp_product
access_product_product_user,product.product user,product.model_product_product,mrp.group_mrp_user,1,0,0,0
access_product_template_user,product.template user,product.model_product_template,mrp.group_mrp_user,1,0,0,0
access_product_price_history_mrp_manager,product.price.history.mrp.manager,product.model_product_price_history,mrp.group_mrp_manager,1,1,1,1
access_product_uom_user,product.uom user,uom.model_product_uom,mrp.group_mrp_user,1,0,0,0
access_uom_uom_user,uom.uom user,uom.model_uom_uom,mrp.group_mrp_user,1,0,0,0
access_product_supplierinfo_user,product.supplierinfo user,product.model_product_supplierinfo,mrp.group_mrp_user,1,1,1,1
access_res_partner,res.partner,base.model_res_partner,mrp.group_mrp_user,1,0,0,0
access_mrp_workorder_mrp_user,mrp.workorder.user,model_mrp_workorder,mrp.group_mrp_user,1,1,1,1
@@ -31,7 +31,7 @@ access_resource_calendar_leaves_user,mrp.resource.calendar.leaves.user,resource.
access_resource_calendar_leaves_manager,mrp.resource.calendar.leaves.manager,resource.model_resource_calendar_leaves,mrp.group_mrp_manager,1,0,0,0
access_resource_calendar_attendance_mrp_user,mrp.resource.calendar.attendance.mrp.user,resource.model_resource_calendar_attendance,mrp.group_mrp_user,1,1,1,1
access_resource_calendar_attendance_manager,mrp.resource.calendar.attendance.manager,resource.model_resource_calendar_attendance,mrp.group_mrp_manager,1,1,1,1
access_product_puom_categ,product.uom.categ,uom.model_product_uom_categ,mrp.group_mrp_user,1,0,0,0
access_uom_category,uom.category,uom.model_uom_category,mrp.group_mrp_user,1,0,0,0
access_resource_resource,resource.resource,resource.model_resource_resource,mrp.group_mrp_user,1,0,0,0
access_resource_resource_manager,resource.resource.manager,resource.model_resource_resource,mrp.group_mrp_manager,1,1,1,1
access_product_supplierinfo_manager,product.supplierinfo user,product.model_product_supplierinfo,mrp.group_mrp_manager,1,0,0,0
@@ -42,8 +42,8 @@ access_stock_warehouse_orderpoint_user,stock.warehouse.orderpoint,stock.model_st
access_stock_picking_mrp_manager,stock.picking mrp_manager,stock.model_stock_picking,mrp.group_mrp_manager,1,0,0,0
access_mrp_bom_stockuser,mrp.bom,model_mrp_bom,stock.group_stock_user,1,0,0,0
access_mrp_bom_line_stockuser,mrp.bom.line,model_mrp_bom_line,stock.group_stock_user,1,0,0,0
access_product_uom_categ_mrp_manager,product.uom.categ mrp_manager,uom.model_product_uom_categ,mrp.group_mrp_manager,1,1,1,1
access_product_uom_mrp_manager,product.uom mrp_manager,uom.model_product_uom,mrp.group_mrp_manager,1,1,1,1
access_uom_category_mrp_manager,uom.category mrp_manager,uom.model_uom_category,mrp.group_mrp_manager,1,1,1,1
access_uom_uom_mrp_manager,uom.uom mrp_manager,uom.model_uom_uom,mrp.group_mrp_manager,1,1,1,1
access_product_category_mrp_manager,product.category mrp_manager,product.model_product_category,mrp.group_mrp_manager,1,1,1,1
access_product_template_mrp_manager,product.template mrp_manager,product.model_product_template,mrp.group_mrp_manager,1,1,1,1
access_product_product_mrp_manager,product.product mrp_manager,product.model_product_product,mrp.group_mrp_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
22 access_product_product_user product.product user product.model_product_product mrp.group_mrp_user 1 0 0 0
23 access_product_template_user product.template user product.model_product_template mrp.group_mrp_user 1 0 0 0
24 access_product_price_history_mrp_manager product.price.history.mrp.manager product.model_product_price_history mrp.group_mrp_manager 1 1 1 1
25 access_product_uom_user access_uom_uom_user product.uom user uom.uom user uom.model_product_uom uom.model_uom_uom mrp.group_mrp_user 1 0 0 0
26 access_product_supplierinfo_user product.supplierinfo user product.model_product_supplierinfo mrp.group_mrp_user 1 1 1 1
27 access_res_partner res.partner base.model_res_partner mrp.group_mrp_user 1 0 0 0
28 access_mrp_workorder_mrp_user mrp.workorder.user model_mrp_workorder mrp.group_mrp_user 1 1 1 1
31 access_resource_calendar_leaves_manager mrp.resource.calendar.leaves.manager resource.model_resource_calendar_leaves mrp.group_mrp_manager 1 0 0 0
32 access_resource_calendar_attendance_mrp_user mrp.resource.calendar.attendance.mrp.user resource.model_resource_calendar_attendance mrp.group_mrp_user 1 1 1 1
33 access_resource_calendar_attendance_manager mrp.resource.calendar.attendance.manager resource.model_resource_calendar_attendance mrp.group_mrp_manager 1 1 1 1
34 access_product_puom_categ access_uom_category product.uom.categ uom.category uom.model_product_uom_categ uom.model_uom_category mrp.group_mrp_user 1 0 0 0
35 access_resource_resource resource.resource resource.model_resource_resource mrp.group_mrp_user 1 0 0 0
36 access_resource_resource_manager resource.resource.manager resource.model_resource_resource mrp.group_mrp_manager 1 1 1 1
37 access_product_supplierinfo_manager product.supplierinfo user product.model_product_supplierinfo mrp.group_mrp_manager 1 0 0 0
42 access_stock_picking_mrp_manager stock.picking mrp_manager stock.model_stock_picking mrp.group_mrp_manager 1 0 0 0
43 access_mrp_bom_stockuser mrp.bom model_mrp_bom stock.group_stock_user 1 0 0 0
44 access_mrp_bom_line_stockuser mrp.bom.line model_mrp_bom_line stock.group_stock_user 1 0 0 0
45 access_product_uom_categ_mrp_manager access_uom_category_mrp_manager product.uom.categ mrp_manager uom.category mrp_manager uom.model_product_uom_categ uom.model_uom_category mrp.group_mrp_manager 1 1 1 1
46 access_product_uom_mrp_manager access_uom_uom_mrp_manager product.uom mrp_manager uom.uom mrp_manager uom.model_product_uom uom.model_uom_uom mrp.group_mrp_manager 1 1 1 1
47 access_product_category_mrp_manager product.category mrp_manager product.model_product_category mrp.group_mrp_manager 1 1 1 1
48 access_product_template_mrp_manager product.template mrp_manager product.model_product_template mrp.group_mrp_manager 1 1 1 1
49 access_product_product_mrp_manager product.product mrp_manager product.model_product_product mrp.group_mrp_manager 1 1 1 1
+2 -2
View File
@@ -81,7 +81,7 @@ class MrpProductProduce(models.TransientModel):
production_id = fields.Many2one('mrp.production', 'Production')
product_id = fields.Many2one('product.product', 'Product')
product_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True)
product_uom_id = fields.Many2one('product.uom', 'Unit of Measure')
product_uom_id = fields.Many2one('uom.uom', 'Unit of Measure')
lot_id = fields.Many2one('stock.production.lot', string='Lot')
produce_line_ids = fields.One2many('mrp.product.produce.line', 'product_produce_id', string='Product to Track')
product_tracking = fields.Selection(related="product_id.tracking")
@@ -177,7 +177,7 @@ class MrpProductProduceLine(models.TransientModel):
product_id = fields.Many2one('product.product', 'Product')
lot_id = fields.Many2one('stock.production.lot', 'Lot')
qty_to_consume = fields.Float('To Consume')
product_uom_id = fields.Many2one('product.uom', 'Unit of Measure')
product_uom_id = fields.Many2one('uom.uom', 'Unit of Measure')
qty_done = fields.Float('Done')
move_id = fields.Many2one('stock.move')
@@ -13,7 +13,7 @@ class MrpSubProduct(models.Model):
product_qty = fields.Float(
'Product Qty',
default=1.0, digits=dp.get_precision('Product Unit of Measure'), required=True)
product_uom_id = fields.Many2one('product.uom', 'Unit of Measure', required=True)
product_uom_id = fields.Many2one('uom.uom', 'Unit of Measure', required=True)
bom_id = fields.Many2one('mrp.bom', 'BoM', ondelete='cascade')
operation_id = fields.Many2one('mrp.routing.workcenter', 'Produced at Operation')
@@ -11,7 +11,7 @@ class ChangeProductionQty(models.TransientModel):
def _update_product_to_produce(self, prod, qty):
super(ChangeProductionQty, self)._update_product_to_produce(prod, qty)
Production = self.env['mrp.production']
UoM = self.env['product.uom']
UoM = self.env['uom.uom']
for sub_product_line in prod.bom_id.sub_products:
move = prod.move_finished_ids.filtered(lambda x: x.subproduct_id == sub_product_line and x.state not in ('done', 'cancel'))
if move:
@@ -54,7 +54,7 @@
<field name="sequence">20</field>
</record>
<record id="uom.product_uom_categ_unit" model="product.uom.categ">
<record id="uom.product_uom_categ_unit" model="uom.category">
<field name="is_pos_groupable">True</field>
</record>
</data>
+4 -4
View File
@@ -22,14 +22,14 @@ class ProductTemplate(models.Model):
return super(ProductTemplate, self).unlink()
class ProductUomCateg(models.Model):
_inherit = 'product.uom.categ'
class UomCateg(models.Model):
_inherit = 'uom.category'
is_pos_groupable = fields.Boolean(string='Group Products in POS',
help="Check if you want to group products of this category in point of sale orders")
class ProductUom(models.Model):
_inherit = 'product.uom'
class Uom(models.Model):
_inherit = 'uom.uom'
is_pos_groupable = fields.Boolean(related='category_id.is_pos_groupable')
@@ -74,7 +74,7 @@ class PosOrderReport(models.Model):
LEFT JOIN pos_order s ON (s.id=l.order_id)
LEFT JOIN product_product p ON (l.product_id=p.id)
LEFT JOIN product_template pt ON (p.product_tmpl_id=pt.id)
LEFT JOIN product_uom u ON (u.id=pt.uom_id)
LEFT JOIN uom_uom u ON (u.id=pt.uom_id)
LEFT JOIN pos_session ps ON (s.session_id=ps.id)
LEFT JOIN pos_config pc ON (ps.config_id=pc.id)
"""
@@ -22,7 +22,7 @@ access_product_product_supplierinfo_user,product.supplierinfo user,product.model
access_product_product_packaging_user,product.packaging user,product.model_product_packaging,group_pos_user,1,0,0,0
access_stock_warehouse_manager,stock.warehouse manager,stock.model_stock_warehouse,group_pos_manager,1,0,0,0
access_stock_location_manager,stock.location manager,stock.model_stock_location,group_pos_manager,1,0,0,0
access_product_uom_manager,product.uom manager,uom.model_product_uom,group_pos_manager,1,1,1,1
access_uom_uom_manager,uom.uom manager,uom.model_uom_uom,group_pos_manager,1,1,1,1
access_product_category_manager,product.category manager,product.model_product_category,group_pos_manager,1,1,1,1
access_product_pricelist_manager,product.pricelist manager,product.model_product_pricelist,group_pos_manager,1,1,1,1
access_product_pricelist_user,product.pricelist user,product.model_product_pricelist,group_pos_user,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
22 access_product_product_packaging_user product.packaging user product.model_product_packaging group_pos_user 1 0 0 0
23 access_stock_warehouse_manager stock.warehouse manager stock.model_stock_warehouse group_pos_manager 1 0 0 0
24 access_stock_location_manager stock.location manager stock.model_stock_location group_pos_manager 1 0 0 0
25 access_product_uom_manager access_uom_uom_manager product.uom manager uom.uom manager uom.model_product_uom uom.model_uom_uom group_pos_manager 1 1 1 1
26 access_product_category_manager product.category manager product.model_product_category group_pos_manager 1 1 1 1
27 access_product_pricelist_manager product.pricelist manager product.model_product_pricelist group_pos_manager 1 1 1 1
28 access_product_pricelist_user product.pricelist user product.model_product_pricelist group_pos_user 1 0 0 0
+1 -1
View File
@@ -172,7 +172,7 @@ exports.PosModel = Backbone.Model.extend({
}
},
},{
model: 'product.uom',
model: 'uom.uom',
fields: [],
domain: null,
context: function(self){ return { active_test: false }; },
+2 -2
View File
@@ -83,8 +83,8 @@
sequence="20"/>
<record id="product_uom_categ_form_view" model="ir.ui.view">
<field name="name">product.uom.categ.form.inherit</field>
<field name="model">product.uom.categ</field>
<field name="name">uom.category.form.inherit</field>
<field name="model">uom.category</field>
<field name="inherit_id" ref="uom.product_uom_categ_form_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
@@ -36,7 +36,7 @@ class PosSaleReport(models.Model):
LEFT JOIN product_category AS pc ON (pt.categ_id = pc.id)
LEFT JOIN res_company AS rc ON (pos.company_id = rc.id)
LEFT JOIN res_partner rp ON (rc.partner_id = rp.id)
LEFT JOIN product_uom u ON (u.id=pt.uom_id)
LEFT JOIN uom_uom u ON (u.id=pt.uom_id)
"""
return pos_str
-1
View File
@@ -16,7 +16,6 @@
<!--
Precisions
-->
<record forcecreate="True" id="decimal_price" model="decimal.precision">
<field name="name">Product Price</field>
<field name="digits">2</field>
+5 -5
View File
@@ -176,7 +176,7 @@ class ProductProduct(models.Model):
def _set_product_price(self):
for product in self:
if self._context.get('uom'):
value = self.env['product.uom'].browse(self._context['uom'])._compute_price(product.price, product.uom_id)
value = self.env['uom.uom'].browse(self._context['uom'])._compute_price(product.price, product.uom_id)
else:
value = product.price
value -= product.price_extra
@@ -185,7 +185,7 @@ class ProductProduct(models.Model):
def _set_product_lst_price(self):
for product in self:
if self._context.get('uom'):
value = self.env['product.uom'].browse(self._context['uom'])._compute_price(product.lst_price, product.uom_id)
value = self.env['uom.uom'].browse(self._context['uom'])._compute_price(product.lst_price, product.uom_id)
else:
value = product.lst_price
value -= product.price_extra
@@ -205,7 +205,7 @@ class ProductProduct(models.Model):
def _compute_product_lst_price(self):
to_uom = None
if 'uom' in self._context:
to_uom = self.env['product.uom'].browse([self._context['uom']])
to_uom = self.env['uom.uom'].browse([self._context['uom']])
for product in self:
if to_uom:
@@ -502,7 +502,7 @@ class ProductProduct(models.Model):
# TDE FIXME: delegate to template or not ? fields are reencoded here ...
# compatibility about context keys used a bit everywhere in the code
if not uom and self._context.get('uom'):
uom = self.env['product.uom'].browse(self._context['uom'])
uom = self.env['uom.uom'].browse(self._context['uom'])
if not currency and self._context.get('currency'):
currency = self.env['res.currency'].browse(self._context['currency'])
@@ -592,7 +592,7 @@ class SupplierInfo(models.Model):
sequence = fields.Integer(
'Sequence', default=1, help="Assigns the priority to the list of product vendor.")
product_uom = fields.Many2one(
'product.uom', 'Vendor Unit of Measure',
'uom.uom', 'Vendor Unit of Measure',
readonly="1", related='product_tmpl_id.uom_po_id',
help="This comes from the product form.")
min_qty = fields.Float(
+2 -2
View File
@@ -170,7 +170,7 @@ class Pricelist(models.Model):
qty_in_product_uom = qty
if qty_uom_id != product.uom_id.id:
try:
qty_in_product_uom = self.env['product.uom'].browse([self._context['uom']])._compute_quantity(qty, product.uom_id)
qty_in_product_uom = self.env['uom.uom'].browse([self._context['uom']])._compute_quantity(qty, product.uom_id)
except UserError:
# Ignored - incompatible UoM in context, use default product UoM
pass
@@ -179,7 +179,7 @@ class Pricelist(models.Model):
# TDE SURPRISE: product can actually be a template
price = product.price_compute('list_price')[product.id]
price_uom = self.env['product.uom'].browse([qty_uom_id])
price_uom = self.env['uom.uom'].browse([qty_uom_id])
for rule in items:
if rule.min_quantity and qty_in_product_uom < rule.min_quantity:
continue
+6 -6
View File
@@ -31,7 +31,7 @@ class ProductTemplate(models.Model):
raise RedirectWarning(err_msg, self.env.ref('product.product_category_action_form').id, redir_msg)
def _get_default_uom_id(self):
return self.env["product.uom"].search([], limit=1, order='id').id
return self.env["uom.uom"].search([], limit=1, order='id').id
name = fields.Char('Name', index=True, required=True, translate=True)
sequence = fields.Integer('Sequence', default=1, help='Gives the sequence order when displaying a product list')
@@ -89,7 +89,7 @@ class ProductTemplate(models.Model):
'Weight', compute='_compute_weight', digits=dp.get_precision('Stock Weight'),
inverse='_set_weight', store=True,
help="The weight of the contents in Kg, not including any packaging, etc.")
weight_uom_id = fields.Many2one('product.uom', string='Weight Unit of Measure', compute='_compute_weight_uom_id')
weight_uom_id = fields.Many2one('uom.uom', string='Weight Unit of Measure', compute='_compute_weight_uom_id')
weight_uom_name = fields.Char(string='Weight unit of measure label', related='weight_uom_id.name', readonly=True)
sale_ok = fields.Boolean(
@@ -100,11 +100,11 @@ class ProductTemplate(models.Model):
'product.pricelist', 'Pricelist', store=False,
help='Technical field. Used for searching on pricelists, not stored in database.')
uom_id = fields.Many2one(
'product.uom', 'Unit of Measure',
'uom.uom', 'Unit of Measure',
default=_get_default_uom_id, required=True,
help="Default Unit of Measure used for all stock operation.")
uom_po_id = fields.Many2one(
'product.uom', 'Purchase Unit of Measure',
'uom.uom', 'Purchase Unit of Measure',
default=_get_default_uom_id, required=True,
help="Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure.")
company_id = fields.Many2one(
@@ -193,7 +193,7 @@ class ProductTemplate(models.Model):
def _set_template_price(self):
if self._context.get('uom'):
for template in self:
value = self.env['product.uom'].browse(self._context['uom'])._compute_price(template.price, template.uom_id)
value = self.env['uom.uom'].browse(self._context['uom'])._compute_price(template.price, template.uom_id)
template.write({'list_price': value})
else:
self.write({'list_price': self.price})
@@ -379,7 +379,7 @@ class ProductTemplate(models.Model):
# TDE FIXME: delegate to template or not ? fields are reencoded here ...
# compatibility about context keys used a bit everywhere in the code
if not uom and self._context.get('uom'):
uom = self.env['product.uom'].browse(self._context['uom'])
uom = self.env['uom.uom'].browse(self._context['uom'])
if not currency and self._context.get('currency'):
currency = self.env['res.currency'].browse(self._context['currency'])
+1 -1
View File
@@ -16,7 +16,7 @@ class TestProductCommon(common.SavepointCase):
})
# Product environment related data
Uom = cls.env['product.uom']
Uom = cls.env['uom.uom']
cls.uom_unit = cls.env.ref('uom.product_uom_unit')
cls.uom_dozen = cls.env.ref('uom.product_uom_dozen')
cls.uom_dunit = Uom.create({
+1 -1
View File
@@ -9,7 +9,7 @@ class AccountAnalyticAccount(models.Model):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
company_uom_id = fields.Many2one('product.uom', related='company_id.project_time_mode_id', string="Company UOM")
company_uom_id = fields.Many2one('uom.uom', related='company_id.project_time_mode_id', string="Company UOM")
project_ids = fields.One2many('project.project', 'analytic_account_id', string='Projects')
project_count = fields.Integer("Project Count", compute='_compute_project_count')
+1 -1
View File
@@ -7,7 +7,7 @@ from odoo import fields, models
class ResCompany(models.Model):
_inherit = 'res.company'
project_time_mode_id = fields.Many2one('product.uom', string='Project Time Unit',
project_time_mode_id = fields.Many2one('uom.uom', string='Project Time Unit',
default=lambda s: s.env.ref('uom.product_uom_hour', raise_if_not_found=False),
help="This will set the unit of measure used in projects and tasks.\n"
"If you use the timesheet linked to projects, don't "
+1 -1
View File
@@ -12,7 +12,7 @@ class ResConfigSettings(models.TransientModel):
group_subtask_project = fields.Boolean("Sub-tasks", implied_group="project.group_subtask_project")
group_project_rating = fields.Boolean("Use Rating on Project", implied_group='project.group_project_rating')
project_time_mode_id = fields.Many2one(
'product.uom', related='company_id.project_time_mode_id', string='Project Time Unit',
'uom.uom', related='company_id.project_time_mode_id', string='Project Time Unit',
help="This will set the unit of measure used in projects and tasks.\n"
"If you use the timesheet linked to projects, don't "
"forget to setup the right unit of measure in your employees.")
+1 -1
View File
@@ -642,7 +642,7 @@ class PurchaseOrderLine(models.Model):
product_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True)
date_planned = fields.Datetime(string='Scheduled Date', required=True, index=True)
taxes_id = fields.Many2many('account.tax', string='Taxes', domain=['|', ('active', '=', False), ('active', '=', True)])
product_uom = fields.Many2one('product.uom', string='Product Unit of Measure', required=True)
product_uom = fields.Many2one('uom.uom', string='Product Unit of Measure', required=True)
product_id = fields.Many2one('product.product', string='Product', domain=[('purchase_ok', '=', True)], change_default=True, required=True)
product_image = fields.Binary(
'Product Image', related="product_id.image",
+3 -3
View File
@@ -27,7 +27,7 @@ class PurchaseReport(models.Model):
picking_type_id = fields.Many2one('stock.warehouse', 'Warehouse', readonly=True)
partner_id = fields.Many2one('res.partner', 'Vendor', readonly=True)
date_approve = fields.Date('Date Approved', readonly=True)
product_uom = fields.Many2one('product.uom', 'Reference Unit of Measure', required=True)
product_uom = fields.Many2one('uom.uom', 'Reference Unit of Measure', required=True)
company_id = fields.Many2one('res.company', 'Company', readonly=True)
currency_id = fields.Many2one('res.currency', 'Currency', readonly=True)
user_id = fields.Many2one('res.users', 'Purchase Representative', readonly=True)
@@ -89,8 +89,8 @@ class PurchaseReport(models.Model):
left join product_product p on (l.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id)
LEFT JOIN ir_property ip ON (ip.name='standard_price' AND ip.res_id=CONCAT('product.template,',t.id) AND ip.company_id=s.company_id)
left join product_uom u on (u.id=l.product_uom)
left join product_uom u2 on (u2.id=t.uom_id)
left join uom_uom u on (u.id=l.product_uom)
left join uom_uom u2 on (u2.id=t.uom_id)
left join stock_picking_type spt on (spt.id=s.picking_type_id)
left join account_analytic_account analytic_account on (l.account_analytic_id = analytic_account.id)
left join currency_rate cr on (cr.currency_id = s.currency_id and
+2 -2
View File
@@ -37,8 +37,8 @@ access_account_move,account.move,account.model_account_move,group_purchase_user,
access_account_move_line,account.move.line,account.model_account_move_line,group_purchase_user,1,0,0,0
access_account_analytic_line,account.analytic.line,account.model_account_analytic_line,group_purchase_user,1,0,0,0
access_res_partner_purchase_manager,res.partner.purchase.manager,base.model_res_partner,group_purchase_manager,1,1,1,0
access_product_uom_categ_purchase_manager,product.uom.categ purchase_manager,uom.model_product_uom_categ,purchase.group_purchase_manager,1,1,1,1
access_product_uom_purchase_manager,product.uom purchase_manager,uom.model_product_uom,purchase.group_purchase_manager,1,1,1,1
access_uom_category_purchase_manager,uom.category purchase_manager,uom.model_uom_category,purchase.group_purchase_manager,1,1,1,1
access_uom_uom_purchase_manager,uom.uom purchase_manager,uom.model_uom_uom,purchase.group_purchase_manager,1,1,1,1
access_product_category_purchase_manager,product.category purchase_manager,product.model_product_category,purchase.group_purchase_manager,1,1,1,1
access_product_template_purchase_manager,product.template purchase_manager,product.model_product_template,purchase.group_purchase_manager,1,1,1,1
access_product_packaging_purchase_manager,product.packaging purchase_manager,product.model_product_packaging,purchase.group_purchase_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
37 access_account_move_line account.move.line account.model_account_move_line group_purchase_user 1 0 0 0
38 access_account_analytic_line account.analytic.line account.model_account_analytic_line group_purchase_user 1 0 0 0
39 access_res_partner_purchase_manager res.partner.purchase.manager base.model_res_partner group_purchase_manager 1 1 1 0
40 access_product_uom_categ_purchase_manager access_uom_category_purchase_manager product.uom.categ purchase_manager uom.category purchase_manager uom.model_product_uom_categ uom.model_uom_category purchase.group_purchase_manager 1 1 1 1
41 access_product_uom_purchase_manager access_uom_uom_purchase_manager product.uom purchase_manager uom.uom purchase_manager uom.model_product_uom uom.model_uom_uom purchase.group_purchase_manager 1 1 1 1
42 access_product_category_purchase_manager product.category purchase_manager product.model_product_category purchase.group_purchase_manager 1 1 1 1
43 access_product_template_purchase_manager product.template purchase_manager product.model_product_template purchase.group_purchase_manager 1 1 1 1
44 access_product_packaging_purchase_manager product.packaging purchase_manager product.model_product_packaging purchase.group_purchase_manager 1 1 1 1
+2 -2
View File
@@ -182,8 +182,8 @@ class TestCreatePicking(common.TestProductCommon):
updated on the moves. Edit the ir.config_parameter to propagate the uom of the purchase order
lines to the moves and edit a last time the ordered quantities. Receive, check the quantities.
"""
uom_unit = self.env.ref('product.product_uom_unit')
uom_dozen = self.env.ref('product.product_uom_dozen')
uom_unit = self.env.ref('uom.product_uom_unit')
uom_dozen = self.env.ref('uom.product_uom_dozen')
self.assertEqual(self.product_id_1.uom_po_id.id, uom_unit.id)
@@ -20,7 +20,7 @@ class TestOnchangeProductId(TransactionCase):
self.res_partner_model = self.env['res.partner']
self.product_tmpl_model = self.env['product.template']
self.product_model = self.env['product.product']
self.product_uom_model = self.env['product.uom']
self.product_uom_model = self.env['uom.uom']
self.supplierinfo_model = self.env["product.supplierinfo"]
def test_onchange_product_id(self):
@@ -194,7 +194,7 @@ class PurchaseRequisitionLine(models.Model):
_rec_name = 'product_id'
product_id = fields.Many2one('product.product', string='Product', domain=[('purchase_ok', '=', True)], required=True)
product_uom_id = fields.Many2one('product.uom', string='Product Unit of Measure')
product_uom_id = fields.Many2one('uom.uom', string='Product Unit of Measure')
product_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'))
price_unit = fields.Float(string='Unit Price', digits=dp.get_precision('Product Price'))
qty_ordered = fields.Float(compute='_compute_ordered_qty', string='Ordered Quantities')
@@ -50,7 +50,7 @@ class TestPurchaseRequisition(common.TransactionCase):
warehouse = self.env['stock.warehouse'].browse(self.ref('stock.warehouse0'))
product = self.env['product.product'].browse(self.product_13_id)
product.write({'route_ids': [(4, self.ref('purchase.route_warehouse0_buy'))]})
self.env['procurement.group'].run(product, 14, self.env['product.uom'].browse(self.ref('uom.product_uom_unit')), warehouse.lot_stock_id, '/', '/',
self.env['procurement.group'].run(product, 14, self.env['uom.uom'].browse(self.ref('uom.product_uom_unit')), warehouse.lot_stock_id, '/', '/',
{
'warehouse_id': warehouse,
'date_planned': date_planned,
+3 -3
View File
@@ -41,7 +41,7 @@ class Repair(models.Model):
default=1.0, digits=dp.get_precision('Product Unit of Measure'),
readonly=True, required=True, states={'draft': [('readonly', False)]})
product_uom = fields.Many2one(
'product.uom', 'Product Unit of Measure',
'uom.uom', 'Product Unit of Measure',
readonly=True, required=True, states={'draft': [('readonly', False)]})
partner_id = fields.Many2one(
'res.partner', 'Customer',
@@ -504,7 +504,7 @@ class RepairLine(models.Model):
'Quantity', default=1.0,
digits=dp.get_precision('Product Unit of Measure'), required=True)
product_uom = fields.Many2one(
'product.uom', 'Product Unit of Measure',
'uom.uom', 'Product Unit of Measure',
required=True)
invoice_line_id = fields.Many2one(
'account.invoice.line', 'Invoice Line',
@@ -608,7 +608,7 @@ class RepairFee(models.Model):
product_id = fields.Many2one('product.product', 'Product')
product_uom_qty = fields.Float('Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True, default=1.0)
price_unit = fields.Float('Unit Price', required=True)
product_uom = fields.Many2one('product.uom', 'Product Unit of Measure', required=True)
product_uom = fields.Many2one('uom.uom', 'Product Unit of Measure', required=True)
price_subtotal = fields.Float('Subtotal', compute='_compute_price_subtotal', store=True, digits=0)
tax_id = fields.Many2many('account.tax', 'repair_fee_line_tax', 'repair_fee_line_id', 'tax_id', 'Taxes')
invoice_line_id = fields.Many2one('account.invoice.line', 'Invoice Line', copy=False, readonly=True)
@@ -61,8 +61,8 @@ class ReportIntrastat(models.Model):
left join (product_template pt
left join product_product pp on (pp.product_tmpl_id = pt.id))
on (inv_line.product_id = pp.id)
left join product_uom uom on uom.id=inv_line.uom_id
left join product_uom puom on puom.id = pt.uom_id
left join uom_uom uom on uom.id=inv_line.uom_id
left join uom_uom puom on puom.id = pt.uom_id
left join report_intrastat_code intrastat on pt.intrastat_id = intrastat.id
left join (res_partner inv_address
left join res_country inv_country on (inv_country.id = inv_address.country_id))
+2 -2
View File
@@ -868,7 +868,7 @@ class SaleOrderLine(models.Model):
product_id = fields.Many2one('product.product', string='Product', domain=[('sale_ok', '=', True)], change_default=True, ondelete='restrict', required=True)
product_updatable = fields.Boolean(compute='_compute_product_updatable', string='Can Edit Product', readonly=True, default=True)
product_uom_qty = fields.Float(string='Ordered Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True, default=1.0)
product_uom = fields.Many2one('product.uom', string='Unit of Measure', required=True)
product_uom = fields.Many2one('uom.uom', string='Unit of Measure', required=True)
# Non-stored related field to allow portal user to see the image of the product he has ordered
product_image = fields.Binary('Product Image', related="product_id.image", store=False)
@@ -974,7 +974,7 @@ class SaleOrderLine(models.Model):
# browse so lines and product uoms here to make them share the same prefetch
lines_map = {line.id: line for line in self}
product_uom_ids = [item['product_uom_id'][0] for item in data if item['product_uom_id']]
product_uom_map = {uom.id: uom for uom in self.env['product.uom'].browse(product_uom_ids)}
product_uom_map = {uom.id: uom for uom in self.env['uom.uom'].browse(product_uom_ids)}
for item in data:
if not item['product_uom_id']:
continue
@@ -55,8 +55,8 @@ class PosSaleReport(models.Model):
cr.company_id = so.company_id AND
cr.date_start <= COALESCE(so.date_order, now()) AND
(cr.date_end IS NULL OR cr.date_end > COALESCE(so.date_order, now())))
LEFT JOIN product_uom u on (u.id=sol.product_uom)
LEFT JOIN product_uom u2 on (u2.id=pt.uom_id)
LEFT JOIN uom_uom u on (u.id=sol.product_uom)
LEFT JOIN uom_uom u2 on (u2.id=pt.uom_id)
""" % self.env['res.currency']._select_companies_rates()
return so_str
+3 -3
View File
@@ -16,7 +16,7 @@ class SaleReport(models.Model):
date = fields.Datetime('Date Order', readonly=True)
confirmation_date = fields.Datetime('Confirmation Date', readonly=True)
product_id = fields.Many2one('product.product', 'Product', readonly=True)
product_uom = fields.Many2one('product.uom', 'Unit of Measure', readonly=True)
product_uom = fields.Many2one('uom.uom', 'Unit of Measure', readonly=True)
product_uom_qty = fields.Float('Qty Ordered', readonly=True)
qty_delivered = fields.Float('Qty Delivered', readonly=True)
qty_to_invoice = fields.Float('Qty To Invoice', readonly=True)
@@ -88,8 +88,8 @@ class SaleReport(models.Model):
join res_partner partner on s.partner_id = partner.id
left join product_product p on (l.product_id=p.id)
left join product_template t on (p.product_tmpl_id=t.id)
left join product_uom u on (u.id=l.product_uom)
left join product_uom u2 on (u2.id=t.uom_id)
left join uom_uom u on (u.id=l.product_uom)
left join uom_uom u2 on (u2.id=t.uom_id)
left join product_pricelist pp on (s.pricelist_id = pp.id)
left join currency_rate cr on (cr.currency_id = pp.currency_id and
cr.company_id = s.company_id and
+3 -3
View File
@@ -22,11 +22,11 @@ access_res_partner_sale_manager,res.partner.sale.manager,base.model_res_partner,
access_product_template_sale_user,product.template sale use,product.model_product_template,sales_team.group_sale_salesman,1,0,0,0
access_product_product_sale_user,product.product sale use,product.model_product_product,sales_team.group_sale_salesman,1,0,0,0
access_account_tax_user,account.tax.user,account.model_account_tax,sales_team.group_sale_salesman,1,0,0,0
access_product_uom_user,product.uom.user,uom.model_product_uom,sales_team.group_sale_salesman,1,0,0,0
access_uom_uom_user,uom.uom.user,uom.model_uom_uom,sales_team.group_sale_salesman,1,0,0,0
access_product_pricelist_sale_user,product.pricelist.sale.user,product.model_product_pricelist,sales_team.group_sale_salesman,1,0,0,0
access_account_account_salesman,account_account salesman,account.model_account_account,sales_team.group_sale_salesman,1,0,0,0
access_product_uom_categ_sale_manager,product.uom.categ salemanager,uom.model_product_uom_categ,sales_team.group_sale_manager,1,1,1,1
access_product_uom_sale_manager,product.uom salemanager,uom.model_product_uom,sales_team.group_sale_manager,1,1,1,1
access_uom_category_sale_manager,uom.category salemanager,uom.model_uom_category,sales_team.group_sale_manager,1,1,1,1
access_uom_uom_sale_manager,uom.uom salemanager,uom.model_uom_uom,sales_team.group_sale_manager,1,1,1,1
access_product_category_sale_manager,product.category salemanager,product.model_product_category,sales_team.group_sale_manager,1,1,1,1
access_product_supplierinfo_user,product.supplierinfo.user,product.model_product_supplierinfo,sales_team.group_sale_salesman,1,0,0,0
access_product_supplierinfo_sale_manager,product.supplierinfo salemanager,product.model_product_supplierinfo,sales_team.group_sale_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
22 access_product_template_sale_user product.template sale use product.model_product_template sales_team.group_sale_salesman 1 0 0 0
23 access_product_product_sale_user product.product sale use product.model_product_product sales_team.group_sale_salesman 1 0 0 0
24 access_account_tax_user account.tax.user account.model_account_tax sales_team.group_sale_salesman 1 0 0 0
25 access_product_uom_user access_uom_uom_user product.uom.user uom.uom.user uom.model_product_uom uom.model_uom_uom sales_team.group_sale_salesman 1 0 0 0
26 access_product_pricelist_sale_user product.pricelist.sale.user product.model_product_pricelist sales_team.group_sale_salesman 1 0 0 0
27 access_account_account_salesman account_account salesman account.model_account_account sales_team.group_sale_salesman 1 0 0 0
28 access_product_uom_categ_sale_manager access_uom_category_sale_manager product.uom.categ salemanager uom.category salemanager uom.model_product_uom_categ uom.model_uom_category sales_team.group_sale_manager 1 1 1 1
29 access_product_uom_sale_manager access_uom_uom_sale_manager product.uom salemanager uom.uom salemanager uom.model_product_uom uom.model_uom_uom sales_team.group_sale_manager 1 1 1 1
30 access_product_category_sale_manager product.category salemanager product.model_product_category sales_team.group_sale_manager 1 1 1 1
31 access_product_supplierinfo_user product.supplierinfo.user product.model_product_supplierinfo sales_team.group_sale_salesman 1 0 0 0
32 access_product_supplierinfo_sale_manager product.supplierinfo salemanager product.model_product_supplierinfo sales_team.group_sale_manager 1 1 1 1
+1 -1
View File
@@ -19,7 +19,7 @@ class TestOnchangeProductId(TransactionCase):
self.res_partner_model = self.env['res.partner']
self.product_tmpl_model = self.env['product.template']
self.product_model = self.env['product.product']
self.product_uom_model = self.env['product.uom']
self.product_uom_model = self.env['uom.uom']
self.supplierinfo_model = self.env["product.supplierinfo"]
self.pricelist_model = self.env['product.pricelist']
+1 -1
View File
@@ -49,7 +49,7 @@ class SaleOrderLine(models.Model):
if 'purchase_price' not in vals:
order_id = self.env['sale.order'].browse(vals['order_id'])
product_id = self.env['product.product'].browse(vals['product_id'])
product_uom_id = self.env['product.uom'].browse(vals['product_uom'])
product_uom_id = self.env['uom.uom'].browse(vals['product_uom'])
vals['purchase_price'] = self._compute_margin(order_id, product_id, product_uom_id)
+1 -1
View File
@@ -36,7 +36,7 @@ class SaleOrderLine(models.Model):
if components.get(product, False):
if uom.id != components[product]['uom']:
from_uom = uom
to_uom = self.env['product.uom'].browse(components[product]['uom'])
to_uom = self.env['uom.uom'].browse(components[product]['uom'])
qty = from_uom._compute_quantity(qty, to_uom)
components[product]['qty'] += qty
else:
+5 -5
View File
@@ -13,7 +13,7 @@ class TestSaleMrpFlow(common.TransactionCase):
super(TestSaleMrpFlow, self).setUp()
# Useful models
self.StockMove = self.env['stock.move']
self.ProductUom = self.env['product.uom']
self.UoM = self.env['uom.uom']
self.MrpProduction = self.env['mrp.production']
self.Inventory = self.env['stock.inventory']
self.InventoryLine = self.env['stock.inventory.line']
@@ -37,26 +37,26 @@ class TestSaleMrpFlow(common.TransactionCase):
p.route_ids.add(r)
return p.save()
self.uom_kg = self.ProductUom.create({
self.uom_kg = self.UoM.create({
'name': 'Test-KG',
'category_id': self.categ_kgm.id,
'factor_inv': 1,
'factor': 1,
'uom_type': 'reference',
'rounding': 0.000001})
self.uom_gm = self.ProductUom.create({
self.uom_gm = self.UoM.create({
'name': 'Test-G',
'category_id': self.categ_kgm.id,
'uom_type': 'smaller',
'factor': 1000.0,
'rounding': 0.001})
self.uom_unit = self.ProductUom.create({
self.uom_unit = self.UoM.create({
'name': 'Test-Unit',
'category_id': self.categ_unit.id,
'factor': 1,
'uom_type': 'reference',
'rounding': 1.0})
self.uom_dozen = self.ProductUom.create({
self.uom_dozen = self.UoM.create({
'name': 'Test-DozenA',
'category_id': self.categ_unit.id,
'factor_inv': 12,
+2 -2
View File
@@ -374,8 +374,8 @@ class TestSaleStock(TestSale):
lines to the moves and edit a last time the ordered quantities. Deliver, check the
quantities.
"""
uom_unit = self.env.ref('product.product_uom_unit')
uom_dozen = self.env.ref('product.product_uom_dozen')
uom_unit = self.env.ref('uom.product_uom_unit')
uom_dozen = self.env.ref('uom.product_uom_dozen')
item1 = self.products['prod_order']
self.assertEqual(item1.uom_id.id, uom_unit.id)
+1 -1
View File
@@ -503,7 +503,7 @@ class ProductTemplate(models.Model):
def write(self, vals):
if 'uom_id' in vals:
new_uom = self.env['product.uom'].browse(vals['uom_id'])
new_uom = self.env['uom.uom'].browse(vals['uom_id'])
updated = self.filtered(lambda template: template.uom_id != new_uom)
done_moves = self.env['stock.move'].search([('product_id', 'in', updated.mapped('product_variant_ids').ids)], limit=1)
if done_moves:
+1 -1
View File
@@ -301,7 +301,7 @@ class InventoryLine(models.Model):
domain=[('type', '=', 'product')],
index=True, required=True)
product_uom_id = fields.Many2one(
'product.uom', 'Product Unit of Measure',
'uom.uom', 'Product Unit of Measure',
required=True,
default=lambda self: self.env.ref('uom.product_uom_unit', raise_if_not_found=True))
product_qty = fields.Float(
+1 -1
View File
@@ -62,7 +62,7 @@ class StockMove(models.Model):
"be moved. Lowering this quantity does not generate a "
"backorder. Changing this quantity on assigned moves affects "
"the product reservation, and should be done with care.")
product_uom = fields.Many2one('product.uom', 'Unit of Measure', required=True)
product_uom = fields.Many2one('uom.uom', 'Unit of Measure', required=True)
# TDE FIXME: make it stored, otherwise group will not work
product_tmpl_id = fields.Many2one(
'product.template', 'Product Template',
+1 -1
View File
@@ -23,7 +23,7 @@ class StockMoveLine(models.Model):
'stock.move', 'Stock Move',
help="Change to a better name")
product_id = fields.Many2one('product.product', 'Product', ondelete="cascade")
product_uom_id = fields.Many2one('product.uom', 'Unit of Measure', required=True)
product_uom_id = fields.Many2one('uom.uom', 'Unit of Measure', required=True)
product_qty = fields.Float(
'Real Reserved Quantity', digits=0,
compute='_compute_product_qty', inverse='_set_product_qty', store=True)
+1 -1
View File
@@ -18,7 +18,7 @@ class ProductionLot(models.Model):
'product.product', 'Product',
domain=[('type', 'in', ['product', 'consu'])], required=True)
product_uom_id = fields.Many2one(
'product.uom', 'Unit of Measure',
'uom.uom', 'Unit of Measure',
related='product_id.uom_id', store=True)
quant_ids = fields.One2many('stock.quant', 'lot_id', 'Quants', readonly=True)
create_date = fields.Datetime('Creation Date')
+1 -1
View File
@@ -26,7 +26,7 @@ class StockQuant(models.Model):
'product.template', string='Product Template',
related='product_id.product_tmpl_id')
product_uom_id = fields.Many2one(
'product.uom', 'Unit of Measure',
'uom.uom', 'Unit of Measure',
readonly=True, related='product_id.uom_id')
company_id = fields.Many2one(related='location_id.company_id',
string='Company', store=True, readonly=True)
+1 -1
View File
@@ -25,7 +25,7 @@ class StockScrap(models.Model):
'product.product', 'Product',
required=True, states={'done': [('readonly', True)]})
product_uom_id = fields.Many2one(
'product.uom', 'Unit of Measure',
'uom.uom', 'Unit of Measure',
required=True, states={'done': [('readonly', True)]})
tracking = fields.Selection('Product Tracking', readonly=True, related="product_id.tracking")
lot_id = fields.Many2one(
+1 -1
View File
@@ -753,7 +753,7 @@ class Orderpoint(models.Model):
'product.product', 'Product',
domain=[('type', '=', 'product')], ondelete='cascade', required=True)
product_uom = fields.Many2one(
'product.uom', 'Product Unit of Measure', related='product_id.uom_id',
'uom.uom', 'Product Unit of Measure', related='product_id.uom_id',
readonly=True, required=True,
default=lambda self: self._context.get('product_uom', False))
product_min_qty = fields.Float(
+2 -2
View File
@@ -26,8 +26,8 @@ access_stock_inventory_line_manager,stock.inventory.line manager,model_stock_inv
access_stock_location_stock_manager,stock.location stock manager,model_stock_location,stock.group_stock_manager,1,0,0,0
access_product_product_stock_user,product_product_stock_user,product.model_product_product,stock.group_stock_user,1,0,0,0
access_product_template_stock_user,product.template stock user,product.model_product_template,stock.group_stock_user,1,0,0,0
access_product_uom_categ_stock_manager,product.uom.categ stock_manager,uom.model_product_uom_categ,stock.group_stock_manager,1,1,1,1
access_product_uom_stock_manager,product.uom stock_manager,uom.model_product_uom,stock.group_stock_manager,1,1,1,1
access_uom_category_stock_manager,uom.category stock_manager,uom.model_uom_category,stock.group_stock_manager,1,1,1,1
access_uom_uom_stock_manager,uom.uom stock_manager,uom.model_uom_uom,stock.group_stock_manager,1,1,1,1
access_product_category_stock_manager,product.category stock_manager,product.model_product_category,stock.group_stock_manager,1,1,1,1
access_product_template_stock_manager,product.template stock_manager,product.model_product_template,stock.group_stock_manager,1,1,1,1
access_product_product_stock_manager,product.product stock_manager,product.model_product_product,stock.group_stock_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
26 access_stock_location_stock_manager stock.location stock manager model_stock_location stock.group_stock_manager 1 0 0 0
27 access_product_product_stock_user product_product_stock_user product.model_product_product stock.group_stock_user 1 0 0 0
28 access_product_template_stock_user product.template stock user product.model_product_template stock.group_stock_user 1 0 0 0
29 access_product_uom_categ_stock_manager access_uom_category_stock_manager product.uom.categ stock_manager uom.category stock_manager uom.model_product_uom_categ uom.model_uom_category stock.group_stock_manager 1 1 1 1
30 access_product_uom_stock_manager access_uom_uom_stock_manager product.uom stock_manager uom.uom stock_manager uom.model_product_uom uom.model_uom_uom stock.group_stock_manager 1 1 1 1
31 access_product_category_stock_manager product.category stock_manager product.model_product_category stock.group_stock_manager 1 1 1 1
32 access_product_template_stock_manager product.template stock_manager product.model_product_template stock.group_stock_manager 1 1 1 1
33 access_product_product_stock_manager product.product stock_manager product.model_product_product stock.group_stock_manager 1 1 1 1
+1 -1
View File
@@ -9,7 +9,7 @@ class TestStockCommon(common.TransactionCase):
super(TestStockCommon, self).setUp()
self.ProductObj = self.env['product.product']
self.UomObj = self.env['product.uom']
self.UomObj = self.env['uom.uom']
self.PartnerObj = self.env['res.partner']
self.ModelDataObj = self.env['ir.model.data']
self.StockPackObj = self.env['stock.move.line']
+3 -3
View File
@@ -1711,15 +1711,15 @@ class TestStockUOM(TestStockCommon):
def test_pickings_transfer_with_different_uom_and_back_orders(self):
""" Picking transfer with diffrent unit of meassure. """
# weight category
categ_test = self.env['product.uom.categ'].create({'name': 'Bigger than tons'})
categ_test = self.env['uom.category'].create({'name': 'Bigger than tons'})
T_LBS = self.env['product.uom'].create({
T_LBS = self.env['uom.uom'].create({
'name': 'T-LBS',
'category_id': categ_test.id,
'uom_type': 'reference',
'rounding': 0.01
})
T_GT = self.env['product.uom'].create({
T_GT = self.env['uom.uom'].create({
'name': 'T-GT',
'category_id': categ_test.id,
'uom_type': 'bigger',
+1 -1
View File
@@ -13,7 +13,7 @@ class ReturnPickingLine(models.TransientModel):
product_id = fields.Many2one('product.product', string="Product", required=True, domain="[('id', '=', product_id)]")
quantity = fields.Float("Quantity", digits=dp.get_precision('Product Unit of Measure'), required=True)
uom_id = fields.Many2one('product.uom', string='Unit of Measure', related='move_id.product_uom')
uom_id = fields.Many2one('uom.uom', string='Unit of Measure', related='move_id.product_uom')
wizard_id = fields.Many2one('stock.return.picking', string="Wizard")
move_id = fields.Many2one('stock.move', "Move")
@@ -15,7 +15,7 @@ class TestStockLandedCostsRounding(TestStockLandedCostsCommon):
self._load('stock_account', 'test', 'stock_valuation_account.xml')
# Define undivisible units
product_uom_unit_round_1 = self.env['product.uom'].create({
product_uom_unit_round_1 = self.env['uom.uom'].create({
'category_id': self.ref('uom.product_uom_categ_unit'),
'name': 'Undivisible Unit(s)',
'factor': 1.0,
+25 -25
View File
@@ -2,62 +2,62 @@
<odoo>
<data noupdate="1">
<!--
Resource: uom.uom.categ
Resource: uom.category
-->
<record id="product_uom_categ_unit" model="product.uom.categ">
<record id="product_uom_categ_unit" model="uom.category">
<field name="name">Unit</field>
</record>
<record id="product_uom_categ_kgm" model="product.uom.categ">
<record id="product_uom_categ_kgm" model="uom.category">
<field name="name">Weight</field>
</record>
<record id="uom_categ_wtime" model="product.uom.categ">
<record id="uom_categ_wtime" model="uom.category">
<field name="name">Working Time</field>
</record>
<record id="uom_categ_length" model="product.uom.categ">
<record id="uom_categ_length" model="uom.category">
<field name="name">Length / Distance</field>
</record>
<record id="product_uom_categ_vol" model="product.uom.categ">
<record id="product_uom_categ_vol" model="uom.category">
<field name="name">Volume</field>
</record>
<!--
Resource: uom.uom
-->
<record id="product_uom_unit" model="product.uom">
<record id="product_uom_unit" model="uom.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="0.001"/>
</record>
<record id="product_uom_dozen" model="product.uom">
<record id="product_uom_dozen" model="uom.uom">
<field name="category_id" ref="uom.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">
<record id="product_uom_kgm" model="uom.uom">
<field name="category_id" ref="product_uom_categ_kgm"/>
<field name="name">kg</field>
<field name="factor" eval="1"/>
<field name="rounding" eval="0.001"/>
</record>
<record id="product_uom_gram" model="product.uom">
<record id="product_uom_gram" model="uom.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">
<record id="product_uom_hour" model="uom.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">
<record id="product_uom_day" model="uom.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">
<record id="product_uom_ton" model="uom.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' -->
@@ -65,73 +65,73 @@
<field name="factor_inv" eval="1000"/>
<field name="uom_type">bigger</field>
</record>
<record id="product_uom_meter" model="product.uom">
<record id="product_uom_meter" model="uom.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">
<record id="product_uom_km" model="uom.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">
<record id="product_uom_cm" model="uom.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">
<record id="product_uom_litre" model="uom.uom">
<field name="name">Liter(s)</field>
<field name="category_id" ref="product_uom_categ_vol"/>
<field name="factor">1.0</field>
</record>
<!--Americanization of units of measure-->
<record id="product_uom_lb" model="product.uom">
<record id="product_uom_lb" model="uom.uom">
<field name="name">lb(s)</field>
<field name="category_id" ref="product_uom_categ_kgm"/>
<field name="factor">2.20462</field>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_oz" model="product.uom">
<record id="product_uom_oz" model="uom.uom">
<field name="name">oz(s)</field>
<field name="category_id" ref="product_uom_categ_kgm"/>
<field name="factor">35.274</field>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_inch" model="product.uom">
<record id="product_uom_inch" model="uom.uom">
<field name="name">inch(es)</field>
<field name="category_id" ref="uom_categ_length"/>
<field name="factor">39.3701</field>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_foot" model="product.uom">
<record id="product_uom_foot" model="uom.uom">
<field name="name">foot(ft)</field>
<field name="category_id" ref="uom_categ_length"/>
<field name="factor">3.28084</field>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_mile" model="product.uom">
<record id="product_uom_mile" model="uom.uom">
<field name="name">mile(s)</field>
<field name="category_id" ref="uom_categ_length"/>
<field name="factor_inv" eval="1609.34"/>
<field name="uom_type">bigger</field>
</record>
<record id="product_uom_floz" model="product.uom">
<record id="product_uom_floz" model="uom.uom">
<field name="name">fl oz</field>
<field name="category_id" ref="product_uom_categ_vol"/>
<field name="factor">33.814</field>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_qt" model="product.uom">
<record id="product_uom_qt" model="uom.uom">
<field name="name">qt</field>
<field name="category_id" ref="product_uom_categ_vol"/>
<field name="factor">1.05669</field>
<field name="uom_type">smaller</field>
</record>
<record id="product_uom_gal" model="product.uom">
<record id="product_uom_gal" model="uom.uom">
<field name="name">gal(s)</field>
<field name="category_id" ref="product_uom_categ_vol"/>
<field name="factor_inv" eval="3.78541"/>
+1 -2
View File
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
# flake8: noqa: F401
from . import uom_uom
from . import uom_uom
+8 -8
View File
@@ -5,21 +5,21 @@ from odoo import api, fields, tools, models, _
from odoo.exceptions import UserError
class ProductUoMCategory(models.Model):
_name = 'product.uom.categ'
class UoMCategory(models.Model):
_name = 'uom.category'
_description = 'Product UoM Categories'
name = fields.Char('Name', required=True, translate=True)
class ProductUoM(models.Model):
_name = 'product.uom'
class UoM(models.Model):
_name = 'uom.uom'
_description = 'Product Unit of Measure'
_order = "name"
name = fields.Char('Unit of Measure', required=True, translate=True)
category_id = fields.Many2one(
'product.uom.categ', 'Category', required=True, ondelete='cascade',
'uom.category', 'Category', required=True, ondelete='cascade',
help="Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios.")
factor = fields.Float(
'Ratio', default=1.0, digits=0, required=True, # force NUMERIC with unlimited precision
@@ -59,14 +59,14 @@ class ProductUoM(models.Model):
if 'factor_inv' in values:
factor_inv = values.pop('factor_inv')
values['factor'] = factor_inv and (1.0 / factor_inv) or 0.0
return super(ProductUoM, self).create(values)
return super(UoM, self).create(values)
@api.multi
def write(self, values):
if 'factor_inv' in values:
factor_inv = values.pop('factor_inv')
values['factor'] = factor_inv and (1.0 / factor_inv) or 0.0
return super(ProductUoM, self).write(values)
return super(UoM, self).write(values)
@api.model
def name_create(self, name):
@@ -79,7 +79,7 @@ class ProductUoM(models.Model):
# look for the category based on the english name, i.e. no context on purpose!
# TODO: should find a way to have it translated but not created until actually used
if not self._context.get('default_category_id'):
EnglishUoMCateg = self.env['product.uom.categ'].with_context({})
EnglishUoMCateg = self.env['uom.category'].with_context({})
misc_category = EnglishUoMCateg.search([('name', '=', 'Unsorted/Imported Units')])
if misc_category:
values['category_id'] = misc_category.id
+2 -2
View File
@@ -1,3 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_product_uom_categ_user,product.uom.categ.user,model_product_uom_categ,base.group_user,1,0,0,0
access_product_uom_user,product.uom.user,model_product_uom,base.group_user,1,0,0,0
access_uom_category_user,uom.category.user,model_uom_category,base.group_user,1,0,0,0
access_uom_uom_user,uom.uom.user,model_uom_uom,base.group_user,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_product_uom_categ_user access_uom_category_user product.uom.categ.user uom.category.user model_product_uom_categ model_uom_category base.group_user 1 0 0 0
3 access_product_uom_user access_uom_uom_user product.uom.user uom.uom.user model_product_uom model_uom_uom base.group_user 1 0 0 0
+1 -1
View File
@@ -37,7 +37,7 @@ class TestUom(TransactionCase):
self.assertEquals(qty, 1.234, "Converted quantity does not correspond.")
def test_20_rounding(self):
product_uom = self.env['product.uom'].create({
product_uom = self.env['uom.uom'].create({
'name': 'Score',
'factor_inv': 20,
'uom_type': 'bigger',
+8 -8
View File
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="product_uom_tree_view" model="ir.ui.view">
<field name="name">product.uom.tree</field>
<field name="model">product.uom</field>
<field name="name">uom.uom.tree</field>
<field name="model">uom.uom</field>
<field name="arch" type="xml">
<tree string="Units of Measure">
<field name="name"/>
@@ -13,8 +13,8 @@
</record>
<record id="product_uom_form_view" model="ir.ui.view">
<field name="name">product.uom.form</field>
<field name="model">product.uom</field>
<field name="name">uom.uom.form</field>
<field name="model">uom.uom</field>
<field name="arch" type="xml">
<form string="Units of Measure">
<group>
@@ -48,7 +48,7 @@
<record id="product_uom_form_action" model="ir.actions.act_window">
<field name="name">Units of Measure</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.uom</field>
<field name="res_model">uom.uom</field>
<field name="view_type">form</field>
<field name="view_id" ref="product_uom_tree_view"/>
<field name="help" type="html">
@@ -62,8 +62,8 @@
</record>
<record id="product_uom_categ_form_view" model="ir.ui.view">
<field name="name">product.uom.categ.form</field>
<field name="model">product.uom.categ</field>
<field name="name">uom.category.form</field>
<field name="model">uom.category</field>
<field name="arch" type="xml">
<form string="Units of Measure categories">
<group>
@@ -75,7 +75,7 @@
<record id="product_uom_categ_form_action" model="ir.actions.act_window">
<field name="name">Unit of Measure Categories</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.uom.categ</field>
<field name="res_model">uom.category</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
+1 -1
View File
@@ -239,7 +239,7 @@ class SaleOrderOption(models.Model):
website_description = fields.Html('Line Description', sanitize_attributes=False, translate=html_translate)
price_unit = fields.Float('Unit Price', required=True, digits=dp.get_precision('Product Price'))
discount = fields.Float('Discount (%)', digits=dp.get_precision('Discount'))
uom_id = fields.Many2one('product.uom', 'Unit of Measure ', required=True)
uom_id = fields.Many2one('uom.uom', 'Unit of Measure ', required=True)
quantity = fields.Float('Quantity', required=True, digits=dp.get_precision('Product UoS'), default=1)
sequence = fields.Integer('Sequence', help="Gives the sequence order when displaying a list of suggested product.")
+2 -2
View File
@@ -56,7 +56,7 @@ class SaleQuoteLine(models.Model):
price_unit = fields.Float('Unit Price', required=True, digits=dp.get_precision('Product Price'))
discount = fields.Float('Discount (%)', digits=dp.get_precision('Discount'), default=0.0)
product_uom_qty = fields.Float('Quantity', required=True, digits=dp.get_precision('Product UoS'), default=1)
product_uom_id = fields.Many2one('product.uom', 'Unit of Measure ', required=True)
product_uom_id = fields.Many2one('uom.uom', 'Unit of Measure ', required=True)
@api.onchange('product_id')
def _onchange_product_id(self):
@@ -107,7 +107,7 @@ class SaleQuoteOption(models.Model):
website_description = fields.Html('Option Description', translate=html_translate, sanitize_attributes=False)
price_unit = fields.Float('Unit Price', required=True, digits=dp.get_precision('Product Price'))
discount = fields.Float('Discount (%)', digits=dp.get_precision('Discount'))
uom_id = fields.Many2one('product.uom', 'Unit of Measure ', required=True)
uom_id = fields.Many2one('uom.uom', 'Unit of Measure ', required=True)
quantity = fields.Float('Quantity', required=True, digits=dp.get_precision('Product UoS'), default=1)
@api.onchange('product_id')