Skip to content

Commit

Permalink
[IMP] stock_picking_analytic: add picking analytic account in invoice
Browse files Browse the repository at this point in the history
  • Loading branch information
WesleyOliveira98 committed Sep 17, 2024
1 parent 50d217d commit a8d453c
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 5 deletions.
1 change: 1 addition & 0 deletions oca_dependencies.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
# See https://github.com/OCA/odoo-community.org/blob/master/website/Contribution/CONTRIBUTING.rst#oca_dependencies-txt
account-invoicing
1 change: 1 addition & 0 deletions stock_picking_analytic/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ Contributors

* Benoît Aimont <[email protected]>
* Denis Roussel <[email protected]>
* Wesley Oliveira <[email protected]>

Maintainers
~~~~~~~~~~~
Expand Down
1 change: 1 addition & 0 deletions stock_picking_analytic/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"website": "https://github.com/OCA/account-analytic",
"depends": [
"stock_analytic",
"stock_picking_invoicing",
"base_view_inheritance_extension",
],
"data": [
Expand Down
1 change: 1 addition & 0 deletions stock_picking_analytic/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import stock_picking
from . import stock_invoice_onshipping
21 changes: 21 additions & 0 deletions stock_picking_analytic/models/stock_invoice_onshipping.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2024 - TODAY, Wesley Oliveira <[email protected]>
# 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
1 change: 1 addition & 0 deletions stock_picking_analytic/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
* Benoît Aimont <[email protected]>
* Denis Roussel <[email protected]>
* Wesley Oliveira <[email protected]>
13 changes: 8 additions & 5 deletions stock_picking_analytic/static/description/index.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
Expand All @@ -9,10 +8,11 @@

/*
:Author: David Goodger ([email protected])
: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.
Expand Down Expand Up @@ -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 }
Expand All @@ -301,7 +301,7 @@
span.pre {
white-space: pre }

span.problematic {
span.problematic, pre.problematic {
color: red }

span.section-subtitle {
Expand Down Expand Up @@ -404,12 +404,15 @@ <h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Benoît Aimont &lt;<a class="reference external" href="mailto:benoit.aimont&#64;acsone.eu">benoit.aimont&#64;acsone.eu</a>&gt;</li>
<li>Denis Roussel &lt;<a class="reference external" href="mailto:denis.roussel&#64;acsone.eu">denis.roussel&#64;acsone.eu</a>&gt;</li>
<li>Wesley Oliveira &lt;<a class="reference external" href="mailto:wesley.oliveira&#64;escodoo.com.br">wesley.oliveira&#64;escodoo.com.br</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
Expand Down
1 change: 1 addition & 0 deletions stock_picking_analytic/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from . import test_picking_analytic_account
from . import test_stock_invoice_onshipping
74 changes: 74 additions & 0 deletions stock_picking_analytic/tests/test_stock_invoice_onshipping.py
Original file line number Diff line number Diff line change
@@ -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_analytic_picking_invoicing(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,
)

0 comments on commit a8d453c

Please sign in to comment.