From e177a1041881b8a7c07670a1f2974271a4e2fafd Mon Sep 17 00:00:00 2001 From: Wesley Oliveira Date: Tue, 17 Sep 2024 15:53:12 -0300 Subject: [PATCH] [IMP] stock_picking_analytic: add picking analytic account in invoice --- oca_dependencies.txt | 1 + stock_picking_analytic/README.rst | 1 + stock_picking_analytic/__manifest__.py | 1 + stock_picking_analytic/models/__init__.py | 1 + .../models/stock_invoice_onshipping.py | 21 ++++++ .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 13 ++-- stock_picking_analytic/tests/__init__.py | 1 + .../tests/test_stock_invoice_onshipping.py | 74 +++++++++++++++++++ 9 files changed, 109 insertions(+), 5 deletions(-) create mode 100644 stock_picking_analytic/models/stock_invoice_onshipping.py create mode 100644 stock_picking_analytic/tests/test_stock_invoice_onshipping.py diff --git a/oca_dependencies.txt b/oca_dependencies.txt index ca3c726ba2..ecd24ef8c8 100644 --- a/oca_dependencies.txt +++ b/oca_dependencies.txt @@ -1 +1,2 @@ # See https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#oca_dependencies-txt +account-invoicing diff --git a/stock_picking_analytic/README.rst b/stock_picking_analytic/README.rst index 604bc3bb48..973276ce2a 100644 --- a/stock_picking_analytic/README.rst +++ b/stock_picking_analytic/README.rst @@ -58,6 +58,7 @@ Contributors * Benoît Aimont * Denis Roussel +* Wesley Oliveira Maintainers ~~~~~~~~~~~ diff --git a/stock_picking_analytic/__manifest__.py b/stock_picking_analytic/__manifest__.py index 085c1a4217..5ac7ca501d 100644 --- a/stock_picking_analytic/__manifest__.py +++ b/stock_picking_analytic/__manifest__.py @@ -11,6 +11,7 @@ "website": "https://github.com/OCA/account-analytic", "depends": [ "stock_analytic", + "stock_picking_invoicing", "base_view_inheritance_extension", ], "data": [ diff --git a/stock_picking_analytic/models/__init__.py b/stock_picking_analytic/models/__init__.py index ae4c27227f..7ea3753214 100644 --- a/stock_picking_analytic/models/__init__.py +++ b/stock_picking_analytic/models/__init__.py @@ -1 +1,2 @@ from . import stock_picking +from . import stock_invoice_onshipping diff --git a/stock_picking_analytic/models/stock_invoice_onshipping.py b/stock_picking_analytic/models/stock_invoice_onshipping.py new file mode 100644 index 0000000000..4161131b8a --- /dev/null +++ b/stock_picking_analytic/models/stock_invoice_onshipping.py @@ -0,0 +1,21 @@ +# Copyright 2024 - TODAY, Wesley Oliveira +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class StockInvoiceOnshipping(models.TransientModel): + + _inherit = "stock.invoice.onshipping" + + def _get_invoice_line_values(self, moves, invoice_values, invoice): + """ + Include the analytic account filled in picking when creating an invoice + """ + values = super(StockInvoiceOnshipping, self)._get_invoice_line_values( + moves, invoice_values, invoice + ) + move = fields.first(moves) + if move.analytic_account_id: + values["analytic_account_id"] = move.analytic_account_id + return values diff --git a/stock_picking_analytic/readme/CONTRIBUTORS.rst b/stock_picking_analytic/readme/CONTRIBUTORS.rst index 9b5134ba97..4145c850ec 100644 --- a/stock_picking_analytic/readme/CONTRIBUTORS.rst +++ b/stock_picking_analytic/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Benoît Aimont * Denis Roussel +* Wesley Oliveira diff --git a/stock_picking_analytic/static/description/index.html b/stock_picking_analytic/static/description/index.html index 2f84034c66..6d93d866d5 100644 --- a/stock_picking_analytic/static/description/index.html +++ b/stock_picking_analytic/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -404,12 +404,15 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

diff --git a/stock_picking_analytic/tests/__init__.py b/stock_picking_analytic/tests/__init__.py index fe50e0960f..629268284f 100644 --- a/stock_picking_analytic/tests/__init__.py +++ b/stock_picking_analytic/tests/__init__.py @@ -1 +1,2 @@ from . import test_picking_analytic_account +from . import test_stock_invoice_onshipping diff --git a/stock_picking_analytic/tests/test_stock_invoice_onshipping.py b/stock_picking_analytic/tests/test_stock_invoice_onshipping.py new file mode 100644 index 0000000000..2c231afc3f --- /dev/null +++ b/stock_picking_analytic/tests/test_stock_invoice_onshipping.py @@ -0,0 +1,74 @@ +# Copyright (C) 2019-Today: Odoo Community Association (OCA) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import SavepointCase + + +class TestStockInvoiceOnshipping(SavepointCase): + @classmethod + def setUpClass(cls): + super(TestStockInvoiceOnshipping, cls).setUpClass() + cls.picking_model = cls.env["stock.picking"] + cls.move_model = cls.env["stock.move"] + cls.invoice_wizard = cls.env["stock.invoice.onshipping"] + cls.invoice_model = cls.env["account.move"] + cls.analytic_account_model = cls.env["account.analytic.account"] + + cls.partner = cls.env.ref("base.res_partner_2") + cls.pick_type_out = cls.env.ref("stock.picking_type_out") + cls.stock_location = cls.env.ref("stock.stock_location_stock") + cls.customers_location = cls.env.ref("stock.stock_location_customers") + cls.product = cls.env.ref("product.product_product_9") + + cls.analytic_account = cls.analytic_account_model.create( + { + "name": "Test Analytic Account", + } + ) + + def test_get_invoice_line_values(self): + picking = self.picking_model.create( + { + "partner_id": self.partner.id, + "picking_type_id": self.pick_type_out.id, + "location_id": self.stock_location.id, + "location_dest_id": self.customers_location.id, + "analytic_account_id": self.analytic_account.id, + } + ) + move_vals = { + "product_id": self.product.id, + "picking_id": picking.id, + "location_dest_id": self.customers_location.id, + "location_id": self.stock_location.id, + "name": self.product.name, + "product_uom_qty": 2, + "product_uom": self.product.uom_id.id, + "analytic_account_id": self.analytic_account.id, + } + new_move = self.move_model.create(move_vals) + new_move.onchange_product_id() + picking.set_to_be_invoiced() + picking.action_confirm() + picking.action_assign() + for move in picking.move_ids_without_package: + move.quantity_done = move.product_uom_qty + picking.button_validate() + wizard_obj = self.invoice_wizard.with_context( + active_ids=picking.ids, + active_model=picking._name, + active_id=picking.id, + ) + fields_list = wizard_obj.fields_get().keys() + wizard_values = wizard_obj.default_get(fields_list) + wizard = wizard_obj.create(wizard_values) + wizard.onchange_group() + wizard.action_generate() + domain = [("picking_ids", "=", picking.id)] + invoice = self.invoice_model.search(domain) + + for invoice_line in invoice.invoice_line_ids: + self.assertEqual( + invoice_line.analytic_account_id.id, + picking.analytic_account_id.id, + )