From e06b477700b55311cc13bfe032285c63f67937f8 Mon Sep 17 00:00:00 2001 From: daniquilez <dani.quilez@gmail.com> Date: Thu, 27 Feb 2025 16:47:26 +0100 Subject: [PATCH] =?UTF-8?q?[IMP]=20=E2=9C=A8=20Propagate=20contract=20and?= =?UTF-8?q?=20community=20from=20pack=20contract=20to=20invoice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/account_move_views.xml | 30 ++++++--------- .../__manifest__.py | 2 + .../data/product_data.xml | 4 +- .../models/account_move.py | 38 ++++++++++++++++--- .../models/contract.py | 12 +++--- .../report/report_invoice.xml | 31 +++++++++++++++ energy_communities_service_invoicing/utils.py | 6 +-- .../views/account_move_views.xml | 16 ++++++++ .../wizards/service_invoicing_action.py | 2 +- .../service_invoicing_action_create.py | 12 +++--- 10 files changed, 111 insertions(+), 42 deletions(-) create mode 100644 energy_communities_service_invoicing/report/report_invoice.xml create mode 100644 energy_communities_service_invoicing/views/account_move_views.xml diff --git a/energy_communities_cooperator/views/account_move_views.xml b/energy_communities_cooperator/views/account_move_views.xml index de9feb1fd..eedd053f7 100644 --- a/energy_communities_cooperator/views/account_move_views.xml +++ b/energy_communities_cooperator/views/account_move_views.xml @@ -1,22 +1,16 @@ <odoo> <record id="account_move_form" model="ir.ui.view"> - <field name="name">account.move.form.inherit</field> - <field name="model">account.move</field> - <field name="inherit_id" ref="account.view_move_form" /> - <field name="arch" type="xml"> - <xpath expr="//notebook" position="before"> - <group> - <field name="user_current_role" invisible="True" /> - <field - name="membership_id" - attrs="{'invisible': [('user_current_role', '!=', 'role_platform_admin')],'readonly': 0}" - /> - <field - name="voluntary_share_total_contribution" - attrs="{'invisible': [('user_current_role', '!=', 'role_platform_admin')]}" - /> - </group> - </xpath> - </field> + <field name="name">account.move.form.inherit</field> + <field name="model">account.move</field> + <field name="inherit_id" ref="account.view_move_form" /> + <field name="arch" type="xml"> + <xpath expr="//notebook" position="before"> + <field name="user_current_role" invisible="True" /> + <group attrs="{'invisible': [('user_current_role', '!=', 'role_platform_admin')]}"> + <field name="membership_id" readonly="False" /> + <field name="voluntary_share_total_contribution" /> + </group> + </xpath> + </field> </record> </odoo> diff --git a/energy_communities_service_invoicing/__manifest__.py b/energy_communities_service_invoicing/__manifest__.py index f525cf563..38cac035e 100644 --- a/energy_communities_service_invoicing/__manifest__.py +++ b/energy_communities_service_invoicing/__manifest__.py @@ -30,6 +30,8 @@ "data/contract_cron.xml", "data/contract_line_qty_formula_data.xml", "data/product_data.xml", + "report/report_invoice.xml", + "views/account_move_views.xml", "views/contract_line_formula_views.xml", "views/contract_template_views.xml", "views/contract_views.xml", diff --git a/energy_communities_service_invoicing/data/product_data.xml b/energy_communities_service_invoicing/data/product_data.xml index b3248d09a..89e2a323c 100644 --- a/energy_communities_service_invoicing/data/product_data.xml +++ b/energy_communities_service_invoicing/data/product_data.xml @@ -1,8 +1,8 @@ <odoo> <record id="product_category_pack" model="product.category"> - <field name="name">Service Pack</field> + <field name="name">Platform Service Pack</field> </record> <record id="product_category_service" model="product.category"> - <field name="name">Service</field> + <field name="name">Platform Service</field> </record> </odoo> diff --git a/energy_communities_service_invoicing/models/account_move.py b/energy_communities_service_invoicing/models/account_move.py index 4add5cb7a..378c9bd62 100644 --- a/energy_communities_service_invoicing/models/account_move.py +++ b/energy_communities_service_invoicing/models/account_move.py @@ -5,15 +5,37 @@ class AccountMove(models.Model): _inherit = "account.move" ref_invoice_id = fields.Many2one( - compute="_compute_ref_invoice_id_and_is_pack", store=False + comodel_name="account.move", + compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", + store=False, + ) + related_contract_id = fields.Many2one( + comodel_name="contract.contract", + compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", + store=False, + ) + is_pack = fields.Boolean( + compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", + store=True, + ) + is_contract = fields.Boolean( + compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", + store=True, + ) + related_community_company_id = fields.Many2one( + comodel_name="res.company", + string="Related community", + related="related_contract_id.community_company_id", + domain="[('hierarchy_level','=','community')]", ) - is_pack = fields.Boolean(compute="_compute_ref_invoice_id_and_is_pack", store=True) @api.depends("invoice_line_ids", "ref") - def _compute_ref_invoice_id_and_is_pack(self): + def _compute_ref_invoice_id_related_contract_id_is_pack_is_contract(self): for record in self: record.ref_invoice_id = False + record.related_contract_id = False record.is_pack = False + record.is_contract = False rel_inv = False if record.ref: rel_inv = ( @@ -24,10 +46,14 @@ class AccountMove(models.Model): if rel_inv: record.ref_invoice_id = rel_inv.id record.is_pack = rel_inv.is_pack + record.is_contract = rel_inv.is_contract + if rel_inv.related_contract_id: + record.related_contract_id = rel_inv.related_contract_id.id else: if record.invoice_line_ids: first_move_line = record.invoice_line_ids[0] if first_move_line.contract_line_id: - record.is_pack = ( - first_move_line.contract_line_id.contract_id.is_pack - ) + rel_contract = first_move_line.contract_line_id.contract_id + record.is_pack = rel_contract.is_pack + record.related_contract_id = rel_contract.id + record.is_contract = True diff --git a/energy_communities_service_invoicing/models/contract.py b/energy_communities_service_invoicing/models/contract.py index b10170d78..12ac6b4a1 100644 --- a/energy_communities_service_invoicing/models/contract.py +++ b/energy_communities_service_invoicing/models/contract.py @@ -5,8 +5,8 @@ from odoo import _, api, fields, models from ..utils import ( _CONTRACT_STATUS_VALUES, _SALE_ORDER_SERVICE_INVOICING_ACTION_VALUES, - get_existing_open_contract, - raise_existing_same_open_contract_error, + get_existing_open_pack_contract, + raise_existing_same_open_pack_contract_error, ) _CLOSING_ACTION_VALUES = _SALE_ORDER_SERVICE_INVOICING_ACTION_VALUES + [ @@ -106,9 +106,9 @@ class ContractContract(models.Model): def _constrain_unique_contract(self): for record in self: if record.community_company_id: - existing_contract = record._get_existing_same_open_contract() + existing_contract = record._get_existing_same_open_pack_contract() if existing_contract: - raise_existing_same_open_contract_error(existing_contract) + raise_existing_same_open_pack_contract_error(existing_contract) def _compute_received_invoices_count(self): for record in self: @@ -258,8 +258,8 @@ class ContractContract(models.Model): received_invoices.append(invoice.id) return received_invoices - def _get_existing_same_open_contract(self): - return get_existing_open_contract( + def _get_existing_same_open_pack_contract(self): + return get_existing_open_pack_contract( self.env, self.partner_id, self.community_company_id, self ) diff --git a/energy_communities_service_invoicing/report/report_invoice.xml b/energy_communities_service_invoicing/report/report_invoice.xml new file mode 100644 index 000000000..aed13d4d3 --- /dev/null +++ b/energy_communities_service_invoicing/report/report_invoice.xml @@ -0,0 +1,31 @@ +<odoo> + <template id="report_invoice_document" inherit_id="account.report_invoice_document"> + <xpath expr="//div[@id='informations']" position="inside"> + <div class="col-auto col-3 mw-100 mb-2" t-if="o.is_pack"> + <strong>Community:</strong> + <t t-if="o.related_community_company_id.comercial_name"> + <p class="m-0" t-field="o.related_community_company_id.comercial_name"/> + </t> + <t t-else=""> + <p class="m-0" t-field="o.related_community_company_id.name"/> + </t> + </div> + </xpath> + </template> +</odoo> +<!--<xpath expr="//table" position="before">--> +<!-- <div class="row">--> +<!-- <div class="col-6" name="related_community_company_id">--> +<!-- <label for="related_community_company_id">Related community company</label>--> +<!-- <address--> +<!-- class="mb-0"--> +<!-- t-field="o.related_community_company_id.partner_id"--> +<!-- t-options="{'widget': 'contact', 'fields': ['address', 'name'], 'no_marker': True}"--> +<!-- />--> +<!-- <div t-if="o.related_community_company_id.partner_id.vat">--> +<!-- Tax ID: <span t-field="o.related_community_company_id.partner_id.vat"/>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!--</xpath>--> + diff --git a/energy_communities_service_invoicing/utils.py b/energy_communities_service_invoicing/utils.py index f24348955..18562a076 100644 --- a/energy_communities_service_invoicing/utils.py +++ b/energy_communities_service_invoicing/utils.py @@ -68,7 +68,7 @@ def service_invoicing_form_view_for_platform_admins( # TODO: Think a bit more about more about if this 3 methods must go to contract utils component -def raise_existing_same_open_contract_error(existing_contract): +def raise_existing_same_open_pack_contract_error(existing_contract): raise ValidationError( _( "It already exists an open contract ({}) with same company and community." @@ -76,7 +76,7 @@ def raise_existing_same_open_contract_error(existing_contract): ) -def get_existing_open_contract( +def get_existing_open_pack_contract( env, partner_id, community_company_id, contract_id=False ): query = [ @@ -90,7 +90,7 @@ def get_existing_open_contract( return env["contract.contract"].search(query, limit=1) -def get_existing_last_closed_contract( +def get_existing_last_closed_pack_contract( env, partner_id, community_company_id, contract_id=False ): query = [ diff --git a/energy_communities_service_invoicing/views/account_move_views.xml b/energy_communities_service_invoicing/views/account_move_views.xml new file mode 100644 index 000000000..272df95a6 --- /dev/null +++ b/energy_communities_service_invoicing/views/account_move_views.xml @@ -0,0 +1,16 @@ +<odoo> + <record id="account_move_form" model="ir.ui.view"> + <field name="name">account.move.form.inherit</field> + <field name="model">account.move</field> + <field name="inherit_id" ref="account.view_move_form" /> + <field name="arch" type="xml"> + <xpath expr="//field[@name='partner_id']" position="after"> + <field name="is_pack" invisible="True" /> + <field name="is_contract" invisible="True" /> + <field name="invoice_origin" attrs="{'invisible': [('is_contract','=',False)]}" /> + <field name="related_contract_id" attrs="{'invisible': [('is_contract','=',False)]}" /> + <field name="related_community_company_id" attrs="{'invisible': [('is_pack','=',False)]}" /> + </xpath> + </field> + </record> +</odoo> diff --git a/energy_communities_service_invoicing/wizards/service_invoicing_action.py b/energy_communities_service_invoicing/wizards/service_invoicing_action.py index ec3423774..59a6b2d9f 100644 --- a/energy_communities_service_invoicing/wizards/service_invoicing_action.py +++ b/energy_communities_service_invoicing/wizards/service_invoicing_action.py @@ -87,5 +87,5 @@ class ServiceInvoicingActionWizard(models.TransientModel): if self.discount != self.service_invoicing_id.discount: if bool(executed_modification_action): executed_modification_action += "," - executed_action += "modify_discount" + executed_modification_action += "modify_discount" return executed_modification_action diff --git a/energy_communities_service_invoicing/wizards/service_invoicing_action_create.py b/energy_communities_service_invoicing/wizards/service_invoicing_action_create.py index 82768993b..e36abc4bb 100644 --- a/energy_communities_service_invoicing/wizards/service_invoicing_action_create.py +++ b/energy_communities_service_invoicing/wizards/service_invoicing_action_create.py @@ -8,9 +8,9 @@ from odoo.addons.energy_communities.utils import ( ) from ..utils import ( - get_existing_last_closed_contract, - get_existing_open_contract, - raise_existing_same_open_contract_error, + get_existing_last_closed_pack_contract, + get_existing_open_pack_contract, + raise_existing_same_open_pack_contract_error, service_invoicing_form_view_for_platform_admins, service_invoicing_tree_view, ) @@ -110,7 +110,7 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): self, community_company_id, company_id, payment_mode_id=False ): self._validate_service_invoicing_action_create([community_company_id.id]) - existing_closed_contract = get_existing_last_closed_contract( + existing_closed_contract = get_existing_last_closed_pack_contract( self.env, company_id.partner_id, community_company_id ) # If existing closed contract reopen it @@ -181,11 +181,11 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): raise ValidationError(_("You can only assign pack to communities")) # Check if already open one and raise error for record in impacted_records: - existing_contract = get_existing_open_contract( + existing_contract = get_existing_open_pack_contract( self.env, record.parent_id.partner_id, record ) if existing_contract: - raise_existing_same_open_contract_error(existing_contract) + raise_existing_same_open_pack_contract_error(existing_contract) def _validate_service_invoicing_action_create_multicommunity(self, company_id_list): impacted_records = self.env["res.company"].browse(company_id_list) -- GitLab