From 70afb81d3dbd3cbb7295f1c283ced8340e6be198 Mon Sep 17 00:00:00 2001 From: daniquilez <dani.quilez@gmail.com> Date: Fri, 21 Feb 2025 19:27:03 +0100 Subject: [PATCH] =?UTF-8?q?[IMP]=20=E2=9C=A8=20Service=20Invoicing=20MVP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/contract_utils.py | 28 +++++++------------ .../components/sale_order_utils.py | 10 ++++--- .../models/contract_line.py | 5 +--- energy_communities_service_invoicing/utils.py | 4 +-- .../views/contract_views.xml | 14 +++++----- .../service_invoicing_action_create.py | 22 +++++++-------- 6 files changed, 36 insertions(+), 47 deletions(-) diff --git a/energy_communities_service_invoicing/components/contract_utils.py b/energy_communities_service_invoicing/components/contract_utils.py index c0cd319e4..cc36474cf 100644 --- a/energy_communities_service_invoicing/components/contract_utils.py +++ b/energy_communities_service_invoicing/components/contract_utils.py @@ -4,7 +4,7 @@ from odoo.addons.component.core import Component class ContractUtils(Component): _inherit = "contract.utils" - def set_contract_status_ready_to_start(self): + def setup_initial_data(self): for line in self.work.record.contract_line_ids: line.write( { @@ -15,7 +15,7 @@ class ContractUtils(Component): "quantity": 0, } ) - self.work.record.write({"status": "ready_to_start"}) + self.work.record.write({"status": "paused"}) def _activate_contract_lines(self, execution_date): for line in self.work.record.contract_line_ids: @@ -39,10 +39,7 @@ class ContractUtils(Component): def set_contract_status_closed(self, execution_date): for line in self.work.record.contract_line_ids: - if ( - self.work.record.status == "ready_to_start" - or self.work.record.is_free_pack - ): + if self.work.record.status == "paused" or self.work.record.is_free_pack: self._activate_contract_lines(execution_date) line.write({"date_end": execution_date}) line._compute_state() @@ -95,17 +92,12 @@ class ContractUtils(Component): discount, payment_mode_id, ) - if initial_status == "ready_to_start": - new_service_invoicing_id = ( - sale_order_utils.create_service_invoicing_ready_to_start( - **service_invoicing_params - ) - ) - if initial_status == "in_progress": - new_service_invoicing_id = sale_order_utils.create_service_invoicing( - **service_invoicing_params - ) - + new_service_invoicing_id = sale_order_utils.create_service_invoicing_initial( + **service_invoicing_params + ) + # Do we really want new contract to be in_progress on a modification?? + if initial_status == "in_progress" and not self.work.record.is_free_pack: + self.set_contract_status_active() self._setup_successors_and_predecessors(new_service_invoicing_id) return new_service_invoicing_id @@ -120,7 +112,7 @@ class ContractUtils(Component): self.set_contract_status_closed(execution_date) new_service_invoicing_id = self.component( usage="sale.order.utils", model_name="sale.order" - ).create_service_invoicing_ready_to_start( + ).create_service_invoicing_initial( **self._build_service_invoicing_params( "reopen", "modify_service_pack,modify_pricelist,modify_discount,modify_payment_mode", diff --git a/energy_communities_service_invoicing/components/sale_order_utils.py b/energy_communities_service_invoicing/components/sale_order_utils.py index 2dc8013c9..5375602fb 100644 --- a/energy_communities_service_invoicing/components/sale_order_utils.py +++ b/energy_communities_service_invoicing/components/sale_order_utils.py @@ -42,7 +42,7 @@ class SaleOrderUtils(Component): order_line._compute_name() return self.env["sale.order"].create(so_creation_dict) - def create_service_invoicing( + def _create_service_invoicing( self, company_id, community_company_id, @@ -75,7 +75,7 @@ class SaleOrderUtils(Component): component.set_configuration_service_invoicing_journal_if_defined() return service_invoicing_id - def create_service_invoicing_ready_to_start( + def create_service_invoicing_initial( self, company_id, community_company_id, @@ -87,7 +87,7 @@ class SaleOrderUtils(Component): executed_action, executed_action_description="none", ): - service_invoicing_id = self.create_service_invoicing( + service_invoicing_id = self._create_service_invoicing( company_id, community_company_id, service_pack_id, @@ -100,7 +100,9 @@ class SaleOrderUtils(Component): ) # TODO: We must call contract_utils with a better component and workcontext modification approach with contract_utils(self.env, service_invoicing_id) as component: - component.set_contract_status_ready_to_start() + component.setup_initial_data() + if service_invoicing_id.is_free_pack: + component.set_contract_status_active(start_date) return service_invoicing_id def _get_related_contracts(self, sale_order): diff --git a/energy_communities_service_invoicing/models/contract_line.py b/energy_communities_service_invoicing/models/contract_line.py index 3bed75255..3ec81ca6a 100644 --- a/energy_communities_service_invoicing/models/contract_line.py +++ b/energy_communities_service_invoicing/models/contract_line.py @@ -19,9 +19,6 @@ class ContractLine(models.Model): # FIXME: Change method name according to real updated field # e.g.: _update_last_date_invoiced() for record in self: - if ( - record.contract_id.status != "ready_to_start" - or record.contract_id.is_free_pack - ): + if record.contract_id.status == "paused" or record.contract_id.is_free_pack: return super()._update_recurring_next_date() diff --git a/energy_communities_service_invoicing/utils.py b/energy_communities_service_invoicing/utils.py index 47feda5bc..3da795640 100644 --- a/energy_communities_service_invoicing/utils.py +++ b/energy_communities_service_invoicing/utils.py @@ -5,7 +5,7 @@ from odoo.exceptions import ValidationError from odoo.addons.contract.models.contract import ContractContract _CONTRACT_STATUS_VALUES = [ - ("ready_to_start", _("Ready to start")), + ("paused", _("Paused")), ("in_progress", _("In progress")), ("closed_planned", _("Planned closure")), ("closed", _("Closed")), @@ -52,7 +52,7 @@ def get_existing_open_contract( ("partner_id", "=", partner_id.id), ("community_company_id", "=", community_company_id.id), ("is_pack", "=", True), - ("status", "in", ["ready_to_start", "in_progress"]), + ("status", "in", ["paused", "in_progress"]), ] if contract_id: query.append(("id", "!=", contract_id.id)) diff --git a/energy_communities_service_invoicing/views/contract_views.xml b/energy_communities_service_invoicing/views/contract_views.xml index 14da3acba..9f7dd5a4b 100644 --- a/energy_communities_service_invoicing/views/contract_views.xml +++ b/energy_communities_service_invoicing/views/contract_views.xml @@ -7,9 +7,9 @@ <field name="arch" type="xml"> <filter name="not_finished" position="before"> <filter - name="ready_to_start" - string="Ready to start" - domain="[('status','=','ready_to_start')]" + name="paused" + string="Paused" + domain="[('status','=','paused')]" /> <!--<separator />--> </filter> @@ -41,7 +41,7 @@ <field name="status" widget="badge" - decoration-info="status == 'ready_to_start'" + decoration-info="status == 'paused'" decoration-danger="status == 'closed'" decoration-warning="status == 'closed_planned'" decoration-success="status == 'in_progress'" @@ -117,19 +117,19 @@ name="action_activate_contract" type="object" string="Activate" - attrs="{'invisible':[('status','not in',['ready_to_start'])]}" + attrs="{'invisible':[('status','not in',['paused'])]}" /> <button name="action_modify_contract" type="object" string="Modify" - attrs="{'invisible':[('status','not in',['ready_to_start','in_progress'])]}" + attrs="{'invisible':[('status','not in',['paused','in_progress'])]}" /> <button name="action_close_contract" type="object" string="Close" - attrs="{'invisible':[('status','not in',['ready_to_start','in_progress'])]}" + attrs="{'invisible':[('status','not in',['paused','in_progress'])]}" /> <button name="action_reopen_contract" 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 3dfce8f31..a68cfef60 100644 --- a/energy_communities_service_invoicing/wizards/service_invoicing_action_create.py +++ b/energy_communities_service_invoicing/wizards/service_invoicing_action_create.py @@ -100,17 +100,15 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): # If none of previous create a new contract else: with sale_order_utils(self.env) as component: - service_invoicing_id = ( - component.create_service_invoicing_ready_to_start( - self.company_id, - self.community_company_id, - self.service_pack_id, - self.pricelist_id, - self.payment_mode_id, - datetime.now(), - self.discount, - "activate", - "active_platform_service_invocing", - ) + service_invoicing_id = component.create_service_invoicing_initial( + self.company_id, + self.community_company_id, + self.service_pack_id, + self.pricelist_id, + self.payment_mode_id, + datetime.now(), + self.discount, + "activate", + "active_platform_service_invocing", ) return service_invoicing_view(self.env, service_invoicing_id) -- GitLab