From 93b23776563c15875a8291ff96f14e9cd333adad Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Fri, 31 Jan 2020 10:40:53 +0000 Subject: [PATCH] [FIX] stock_landed_costs: reconciliation with vendor bill in anglo saxon accounting - receipt products through an rfq - when creating the vendor bill of the rfq, directly add a landed costs product - post the vendor bill then create the landed cost, validate the landed cost - the aml of the LC is not reconciled with the aml of the vendor bill for the lc product because the "You are trying to reconcile some entries that are already reconciled." error. We fix this by filtering out the already reconciled aml. Not that the flow is behaving as expected if the landed cost is created in another vendor bill, such as the tests were doing. We thus add another test. opw-2184988 X-original-commit: 1e78527ac5295563e9610ad9ddd98834998285f3 --- .../models/stock_landed_cost.py | 2 +- .../tests/test_stockvaluationlayer.py | 52 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/addons/stock_landed_costs/models/stock_landed_cost.py b/addons/stock_landed_costs/models/stock_landed_cost.py index afbaef47f22..d50ec173f82 100644 --- a/addons/stock_landed_costs/models/stock_landed_cost.py +++ b/addons/stock_landed_costs/models/stock_landed_cost.py @@ -176,7 +176,7 @@ class LandedCost(models.Model): for product in cost.cost_lines.product_id: accounts = product.product_tmpl_id.get_product_accounts() input_account = accounts['stock_input'] - all_amls.filtered(lambda aml: aml.account_id == input_account).reconcile() + all_amls.filtered(lambda aml: aml.account_id == input_account and not aml.full_reconcile_id).reconcile() return True def _check_sum(self): diff --git a/addons/stock_landed_costs/tests/test_stockvaluationlayer.py b/addons/stock_landed_costs/tests/test_stockvaluationlayer.py index 372006a5c0b..640ca6b3488 100644 --- a/addons/stock_landed_costs/tests/test_stockvaluationlayer.py +++ b/addons/stock_landed_costs/tests/test_stockvaluationlayer.py @@ -333,6 +333,58 @@ class TestStockValuationLCFIFOVB(TestStockValuationLCCommon): self.assertEqual(self.product1.quantity_svl, 10) self.assertEqual(self.product1.value_svl, 150) + def test_vendor_bill_flow_anglo_saxon_2(self): + """In anglo saxon accounting, receive 10@10 and invoice with the addition of 1@50 as a + landed costs and create a linked landed costs record. + """ + self.env.company.anglo_saxon_accounting = True + + # Create an RFQ for self.product1, 10@10 + rfq = Form(self.env['purchase.order']) + rfq.partner_id = self.vendor1 + + with rfq.order_line.new() as po_line: + po_line.product_id = self.product1 + po_line.price_unit = 10 + po_line.product_qty = 10 + po_line.taxes_id.clear() + + rfq = rfq.save() + rfq.button_confirm() + + # Process the receipt + receipt = rfq.picking_ids + wiz = receipt.button_validate() + wiz = self.env['stock.immediate.transfer'].browse(wiz['res_id']).process() + self.assertEqual(rfq.order_line.qty_received, 10) + + input_aml = self._get_stock_input_move_lines()[-1] + self.assertEqual(input_aml.debit, 0) + self.assertEqual(input_aml.credit, 100) + valuation_aml = self._get_stock_valuation_move_lines()[-1] + self.assertEqual(valuation_aml.debit, 100) + self.assertEqual(valuation_aml.credit, 0) + + # Create a vebdor bill for the RFQ and add to it the landed cost + action = rfq.action_view_invoice() + vb = Form(self.env['account.move'].with_context(action['context'])) + with vb.invoice_line_ids.new() as inv_line: + inv_line.product_id = self.productlc1 + inv_line.price_unit = 50 + inv_line.is_landed_costs_line = True + vb = vb.save() + vb.post() + + action = vb.button_create_landed_costs() + lc = Form(self.env[action['res_model']].browse(action['res_id'])) + lc.picking_ids.add(receipt) + lc = lc.save() + lc.button_validate() + + # Check reconciliation of input aml of lc + lc_input_aml = lc.account_move_id.line_ids.filtered(lambda aml: aml.account_id == self.stock_input_account) + self.assertTrue(len(lc_input_aml.full_reconcile_id), 1) + def test_vendor_bill_flow_continental_1(self): """In continental accounting, receive 10@10 and invoice. Then invoice 1@50 as a landed costs and create a linked landed costs record.