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.