[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:
@@ -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)])
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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")
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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 }; },
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'])
|
||||
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
@@ -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 "
|
||||
|
||||
@@ -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.")
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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,
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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']
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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']
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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',
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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.")
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user