From df41101390bb91e532bdf3ae3e03db2c8bb2c794 Mon Sep 17 00:00:00 2001 From: Carolina Fernandez Date: Mon, 9 Oct 2023 12:38:23 -0300 Subject: [PATCH] [IMP] contract_sale_invoicing: pre-commit stuff --- contract_sale_invoicing/__init__.py | 1 - contract_sale_invoicing/__manifest__.py | 27 +++++----- contract_sale_invoicing/models/contract.py | 34 ++++++++----- .../tests/test_contract_sale_invoicing.py | 50 +++++++++++-------- .../views/contract_view.xml | 7 ++- .../odoo/addons/contract_sale_invoicing | 1 + setup/contract_sale_invoicing/setup.py | 6 +++ 7 files changed, 73 insertions(+), 53 deletions(-) create mode 120000 setup/contract_sale_invoicing/odoo/addons/contract_sale_invoicing create mode 100644 setup/contract_sale_invoicing/setup.py diff --git a/contract_sale_invoicing/__init__.py b/contract_sale_invoicing/__init__.py index cca1a88e8..c7818ff10 100644 --- a/contract_sale_invoicing/__init__.py +++ b/contract_sale_invoicing/__init__.py @@ -2,4 +2,3 @@ from . import models from . import tests - diff --git a/contract_sale_invoicing/__manifest__.py b/contract_sale_invoicing/__manifest__.py index b84fc713b..cbd303fe3 100644 --- a/contract_sale_invoicing/__manifest__.py +++ b/contract_sale_invoicing/__manifest__.py @@ -1,20 +1,19 @@ # Copyright 2018 Tecnativa - Carlos Dauden # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { - 'name': 'Contract Invoicing of Pending Sales Orders', - 'summary': 'Include sales to invoice in contract invoice creation', - 'version': '12.0.1.0.4', - 'category': 'Contract Management', - 'website': 'https://github.com/OCA/contract', - 'author': 'Tecnativa, ' - 'Odoo Community Association (OCA)', - 'license': 'AGPL-3', - 'installable': True, - 'depends': [ - 'contract', - 'sale_management', + "name": "Contract Invoicing of Pending Sales Orders", + "summary": "Include sales to invoice in contract invoice creation", + "version": "12.0.1.0.4", + "category": "Contract Management", + "website": "https://github.com/OCA/contract", + "author": "Tecnativa, " "Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": [ + "contract", + "sale_management", ], - 'data': [ - 'views/contract_view.xml', + "data": [ + "views/contract_view.xml", ], } diff --git a/contract_sale_invoicing/models/contract.py b/contract_sale_invoicing/models/contract.py index 8562eb797..2cb5c427f 100644 --- a/contract_sale_invoicing/models/contract.py +++ b/contract_sale_invoicing/models/contract.py @@ -5,12 +5,12 @@ from odoo import api, fields, models class ContractContract(models.Model): - _inherit = 'contract.contract' + _inherit = "contract.contract" invoicing_sales = fields.Boolean( - string='Invoice Pending Sales Orders', - help='If checked include sales with same analytic account to invoice ' - 'in contract invoice creation.', + string="Invoice Pending Sales Orders", + help="If checked include sales with same analytic account to invoice " + "in contract invoice creation.", ) @api.multi @@ -19,16 +19,24 @@ class ContractContract(models.Model): for contract in self: if not contract.invoicing_sales or not contract.recurring_next_date: continue - sales = self.env['sale.order'].search([ - ('analytic_account_id', '=', contract.group_id.id), - ('partner_invoice_id', 'child_of', - contract.partner_id.commercial_partner_id.ids), - ('invoice_status', '=', 'to invoice'), - ('date_order', '<=', - '{} 23:59:59'.format(contract.recurring_next_date)), - ]) + sales = self.env["sale.order"].search( + [ + ("analytic_account_id", "=", contract.group_id.id), + ( + "partner_invoice_id", + "child_of", + contract.partner_id.commercial_partner_id.ids, + ), + ("invoice_status", "=", "to invoice"), + ( + "date_order", + "<=", + "{} 23:59:59".format(contract.recurring_next_date), + ), + ] + ) if sales: invoice_ids = sales.action_invoice_create() - invoices |= self.env['account.invoice'].browse(invoice_ids)[:1] + invoices |= self.env["account.invoice"].browse(invoice_ids)[:1] return invoices diff --git a/contract_sale_invoicing/tests/test_contract_sale_invoicing.py b/contract_sale_invoicing/tests/test_contract_sale_invoicing.py index 0e0d51345..e9eb68f64 100644 --- a/contract_sale_invoicing/tests/test_contract_sale_invoicing.py +++ b/contract_sale_invoicing/tests/test_contract_sale_invoicing.py @@ -8,40 +8,48 @@ class TestContractSaleInvoicing(TestContractBase): @classmethod def setUpClass(cls): super(TestContractSaleInvoicing, cls).setUpClass() - cls.contract.group_id = \ - cls.env['account.analytic.account'].search([], limit=1) - cls.product_so = cls.env.ref( - 'product.product_product_1') - cls.product_so.invoice_policy = 'order' - cls.sale_order = cls.env['sale.order'].create({ - 'partner_id': cls.partner.id, - 'partner_invoice_id': cls.partner.id, - 'partner_shipping_id': cls.partner.id, - 'order_line': [(0, 0, {'name': cls.product_so.name, - 'product_id': cls.product_so.id, - 'product_uom_qty': 2, - 'product_uom': cls.product_so.uom_id.id, - 'price_unit': cls.product_so.list_price})], - 'pricelist_id': cls.partner.property_product_pricelist.id, - 'analytic_account_id': cls.contract.group_id.id, - 'date_order': '2016-02-15', - }) + cls.contract.group_id = cls.env["account.analytic.account"].search([], limit=1) + cls.product_so = cls.env.ref("product.product_product_1") + cls.product_so.invoice_policy = "order" + cls.sale_order = cls.env["sale.order"].create( + { + "partner_id": cls.partner.id, + "partner_invoice_id": cls.partner.id, + "partner_shipping_id": cls.partner.id, + "order_line": [ + ( + 0, + 0, + { + "name": cls.product_so.name, + "product_id": cls.product_so.id, + "product_uom_qty": 2, + "product_uom": cls.product_so.uom_id.id, + "price_unit": cls.product_so.list_price, + }, + ) + ], + "pricelist_id": cls.partner.property_product_pricelist.id, + "analytic_account_id": cls.contract.group_id.id, + "date_order": "2016-02-15", + } + ) def test_not_sale_invoicing(self): self.contract.invoicing_sales = False self.sale_order.action_confirm() self.contract.recurring_create_invoice() - self.assertEqual(self.sale_order.invoice_status, 'to invoice') + self.assertEqual(self.sale_order.invoice_status, "to invoice") def test_sale_invoicing(self): self.contract.invoicing_sales = True self.sale_order.action_confirm() self.contract.recurring_create_invoice() - self.assertEqual(self.sale_order.invoice_status, 'invoiced') + self.assertEqual(self.sale_order.invoice_status, "invoiced") def test_contract_sale_invoicing_without(self): self.contract.invoicing_sales = True self.sale_order.analytic_account_id = False self.sale_order.action_confirm() self.contract.recurring_create_invoice() - self.assertEqual(self.sale_order.invoice_status, 'to invoice') + self.assertEqual(self.sale_order.invoice_status, "to invoice") diff --git a/contract_sale_invoicing/views/contract_view.xml b/contract_sale_invoicing/views/contract_view.xml index 46ec28c25..cedb83b5e 100644 --- a/contract_sale_invoicing/views/contract_view.xml +++ b/contract_sale_invoicing/views/contract_view.xml @@ -1,15 +1,14 @@ - + - contract.contract - + - + diff --git a/setup/contract_sale_invoicing/odoo/addons/contract_sale_invoicing b/setup/contract_sale_invoicing/odoo/addons/contract_sale_invoicing new file mode 120000 index 000000000..0af10a412 --- /dev/null +++ b/setup/contract_sale_invoicing/odoo/addons/contract_sale_invoicing @@ -0,0 +1 @@ +../../../../contract_sale_invoicing \ No newline at end of file diff --git a/setup/contract_sale_invoicing/setup.py b/setup/contract_sale_invoicing/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/contract_sale_invoicing/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)