[IMP] purchase_requistion, purchase_requisition_stock: custom variant

Allow to use custom product decscription on requisition line.

closes odoo/odoo#34174

Task: 1970476
Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
This commit is contained in:
Arnold Moyaux
2020-03-05 14:31:13 +00:00
committed by Simon Lejeune
parent 7eb22cef2f
commit abef168389
5 changed files with 15 additions and 11 deletions
@@ -168,6 +168,7 @@ class PurchaseRequisitionLine(models.Model):
product_uom_id = fields.Many2one('uom.uom', string='Product Unit of Measure', domain="[('category_id', '=', product_uom_category_id)]")
product_uom_category_id = fields.Many2one(related='product_id.uom_id.category_id')
product_qty = fields.Float(string='Quantity', digits='Product Unit of Measure')
product_description_variants = fields.Char('Custom Description')
price_unit = fields.Float(string='Unit Price', digits='Product Price')
qty_ordered = fields.Float(compute='_compute_ordered_qty', string='Ordered Quantities')
requisition_id = fields.Many2one('purchase.requisition', required=True, string='Purchase Agreement', ondelete='cascade')
@@ -243,6 +244,8 @@ class PurchaseRequisitionLine(models.Model):
def _prepare_purchase_order_line(self, name, product_qty=0.0, price_unit=0.0, taxes_ids=False):
self.ensure_one()
requisition = self.requisition_id
if self.product_description_variants:
name += '\n' + self.product_description_variants
if requisition.schedule_date:
date_planned = datetime.combine(requisition.schedule_date, time.min)
else:
@@ -151,6 +151,7 @@
<field name="line_ids">
<tree string="Products" editable="bottom">
<field name="product_id" context="{'default_purchase_requisition': 'tenders'}" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
<field name="product_description_variants" attrs="{'readonly': [('parent.state', '!=', 'draft')]}"/>
<field name="product_qty"/>
<field name="qty_ordered" optional="show"/>
<field name="product_uom_category_id" invisible="1"/>
@@ -31,6 +31,7 @@ class PurchaseRequisition(models.Model):
'product_id': product_id.id,
'product_uom_id': product_uom.id,
'product_qty': product_qty,
'product_description_variants': values.get('product_description_variants'),
'move_dest_id': values.get('move_dest_ids') and values['move_dest_ids'][0].id or False
})],
}
+1 -1
View File
@@ -458,5 +458,5 @@ class PurchaseOrderLine(models.Model):
l.propagate_date_minimum_delta == values['propagate_date_minimum_delta'] and
l.propagate_cancel == values['propagate_cancel'] and
((values['orderpoint_id'] and not values['move_dest_ids']) and l.orderpoint_id == values['orderpoint_id'] or True) and
(values.get('product_description_variants') and l.name == description_picking or True))
(not values.get('product_description_variants') or l.name == description_picking))
return lines and lines[0] or self.env['purchase.order.line']
@@ -256,17 +256,18 @@ class TestPurchaseLeadTime(PurchaseTestCommon):
'route_ids': [],
}
procurement_values['product_description_variants'] = '[{"color": "Red"}]'
procurement_values['description'] = "T-shirt (Red)"
procurement_values['product_description_variants'] = 'Color (Red)'
order_1_values = procurement_values
ProcurementGroup.run([self.env['procurement.group'].Procurement(
self.t_shirt, 5, self.uom_unit, self.warehouse_1.lot_stock_id,
self.t_shirt.name, '/', self.env.company, order_1_values)
])
purchase_order = self.env['purchase.order.line'].search([('product_id', '=', self.t_shirt.id)], limit=1).order_id
order_line_description = purchase_order.order_line.product_id._get_description(purchase_order.picking_type_id)
self.assertEqual(len(purchase_order.order_line), 1, 'wrong number of order line is created')
self.assertEqual(purchase_order.order_line.name, order_line_description + "Color (Red)", 'wrong description in po lines')
procurement_values['product_description_variants'] = '[{"color": "Red"}]'
procurement_values['product_description_variants'] = 'Color (Red)'
order_2_values = procurement_values
ProcurementGroup.run([self.env['procurement.group'].Procurement(
self.t_shirt, 10, self.uom_unit, self.warehouse_1.lot_stock_id,
@@ -276,8 +277,7 @@ class TestPurchaseLeadTime(PurchaseTestCommon):
self.assertEqual(len(purchase_order.order_line), 1, 'line with same custom value should be merged')
self.assertEqual(purchase_order.order_line[0].product_qty, 15, 'line with same custom value should be merged and qty should be update')
procurement_values['product_description_variants'] = '[{"color": "Green"}]'
procurement_values['description'] = "T-shirt (Green)"
procurement_values['product_description_variants'] = 'Color (Green)'
order_3_values = procurement_values
ProcurementGroup.run([self.env['procurement.group'].Procurement(
@@ -285,13 +285,12 @@ class TestPurchaseLeadTime(PurchaseTestCommon):
self.t_shirt.name, '/', self.env.company, order_3_values)
])
self.assertEqual(len(purchase_order.order_line), 2, 'line with different custom value should not be merged')
self.assertEqual(purchase_order.order_line.filtered(lambda x: x.product_qty == 15).name, "T-shirt (Red)", 'wrong description in po lines')
self.assertEqual(purchase_order.order_line.filtered(lambda x: x.product_qty == 10).name, "T-shirt (Green)", 'wrong description in po lines')
self.assertEqual(purchase_order.order_line.filtered(lambda x: x.product_qty == 15).name, order_line_description + "Color (Red)", 'wrong description in po lines')
self.assertEqual(purchase_order.order_line.filtered(lambda x: x.product_qty == 10).name, order_line_description + "Color (Green)", 'wrong description in po lines')
purchase_order.button_confirm()
self.assertEqual(purchase_order.picking_ids[0].move_ids_without_package.filtered(lambda x: x.product_uom_qty == 15).description_picking, "T-shirt (Red)", 'wrong description in picking')
self.assertEqual(purchase_order.picking_ids[0].move_ids_without_package.filtered(lambda x: x.product_uom_qty == 10).description_picking, "T-shirt (Green)", 'wrong description in picking')
self.assertEqual(purchase_order.picking_ids[0].move_ids_without_package.filtered(lambda x: x.product_uom_qty == 15).description_picking, order_line_description + "Color (Red)", 'wrong description in picking')
self.assertEqual(purchase_order.picking_ids[0].move_ids_without_package.filtered(lambda x: x.product_uom_qty == 10).description_picking, order_line_description + "Color (Green)", 'wrong description in picking')
def test_reordering_days_to_purchase(self):
self.patcher = patch('odoo.addons.stock.models.stock_orderpoint.fields.Date', wraps=fields.Date)