[FIX] purchase: invoice status

- Create a PO with a product "Control Purchase Bills" set to "On
  received quantities".
- Validate the PO.

The invoice status is "Waiting Bills", while it should be "Bills
Received".

opw-726245
This commit is contained in:
Nicolas Martinelli
2017-03-28 10:30:06 +02:00
parent 7c95c14c06
commit c9545bda30
2 changed files with 4 additions and 3 deletions
+3 -3
View File
@@ -47,7 +47,7 @@ class PurchaseOrder(models.Model):
if min_date:
order.date_planned = min_date
@api.depends('state', 'order_line.qty_invoiced', 'order_line.product_qty')
@api.depends('state', 'order_line.qty_invoiced', 'order_line.qty_received', 'order_line.product_qty')
def _get_invoiced(self):
precision = self.env['decimal.precision'].precision_get('Product Unit of Measure')
for order in self:
@@ -55,9 +55,9 @@ class PurchaseOrder(models.Model):
order.invoice_status = 'no'
continue
if any(float_compare(line.qty_invoiced, line.product_qty, precision_digits=precision) == -1 for line in order.order_line):
if any(float_compare(line.qty_invoiced, line.product_qty if line.product_id.purchase_method == 'purchase' else line.qty_received, precision_digits=precision) == -1 for line in order.order_line):
order.invoice_status = 'to invoice'
elif all(float_compare(line.qty_invoiced, line.product_qty, precision_digits=precision) >= 0 for line in order.order_line):
elif all(float_compare(line.qty_invoiced, line.product_qty if line.product_id.purchase_method == 'purchase' else line.qty_received, precision_digits=precision) >= 0 for line in order.order_line):
order.invoice_status = 'invoiced'
else:
order.invoice_status = 'no'
@@ -22,6 +22,7 @@ class TestPurchaseOrder(AccountingTestCase):
self.product_id_1 = self.env.ref('product.product_product_8')
self.product_id_2 = self.env.ref('product.product_product_11')
(self.product_id_1 | self.product_id_2).write({'purchase_method': 'purchase'})
# Ensure product_id_2 doesn't have res_partner_1 as supplier
if self.partner_id in self.product_id_2.seller_ids.mapped('name'):
id_to_remove = self.product_id_2.seller_ids.filtered(lambda r: r.name == self.partner_id).ids[0] if self.product_id_2.seller_ids.filtered(lambda r: r.name == self.partner_id) else False