From dfd670094baf1606f8d91608c6f4cf7a36a4b63f Mon Sep 17 00:00:00 2001 From: daniquilez <dani.quilez@gmail.com> Date: Fri, 28 Feb 2025 09:37:15 +0100 Subject: [PATCH] =?UTF-8?q?[IMP]=20=E2=9C=A8=20Introducing=20active=20moni?= =?UTF-8?q?toring=20members=20formula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/contract_line_qty_formula_data.xml | 14 ++++++++-- .../models/contract.py | 28 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/energy_communities_service_invoicing/data/contract_line_qty_formula_data.xml b/energy_communities_service_invoicing/data/contract_line_qty_formula_data.xml index c65eae7e2..edef781e2 100644 --- a/energy_communities_service_invoicing/data/contract_line_qty_formula_data.xml +++ b/energy_communities_service_invoicing/data/contract_line_qty_formula_data.xml @@ -1,10 +1,10 @@ <odoo> <data> <record - id="community_members_formula" + id="active_community_members_formula" model="contract.line.qty.formula" > - <field name="name">Community members</field> + <field name="name">Active community members</field> <field name="code"> result = env['cooperative.membership'].sudo().search_count([ ('company_id','=',contract.community_company_id.id), @@ -13,5 +13,15 @@ result = env['cooperative.membership'].sudo().search_count([ </field> <field name="company_id" eval="ref('base.main_company')" /> </record> + <record + id="active_monitoring_members_formula" + model="contract.line.qty.formula" + > + <field name="name">Active monitoring members</field> + <field name="code"> +result = contract.get_active_monitoring_members() + </field> + <field name="company_id" eval="ref('base.main_company')" /> + </record> </data> </odoo> diff --git a/energy_communities_service_invoicing/models/contract.py b/energy_communities_service_invoicing/models/contract.py index 12ac6b4a1..512e65349 100644 --- a/energy_communities_service_invoicing/models/contract.py +++ b/energy_communities_service_invoicing/models/contract.py @@ -1,3 +1,4 @@ +from collections import namedtuple from datetime import datetime from odoo import _, api, fields, models @@ -263,6 +264,33 @@ class ContractContract(models.Model): self.env, self.partner_id, self.community_company_id, self ) + def get_active_monitoring_members(self): + QueryResult = namedtuple("QueryResult", ["total"]) + QUERY = """ + select count(energy_selfconsumption_supply_point.code) from energy_project_project + inner join energy_selfconsumption_selfconsumption on + energy_selfconsumption_selfconsumption.project_id = energy_project_project.id + inner join energy_selfconsumption_distribution_table on + energy_selfconsumption_distribution_table.selfconsumption_project_id = energy_selfconsumption_selfconsumption.id + inner join energy_selfconsumption_supply_point_assignation on + energy_selfconsumption_supply_point_assignation.distribution_table_id = energy_selfconsumption_distribution_table.id + inner join energy_selfconsumption_supply_point on + energy_selfconsumption_supply_point.id = energy_selfconsumption_supply_point_assignation.supply_point_id + inner join energy_project_service_contract on + energy_project_service_contract.project_id= energy_project_project.id + inner join energy_project_provider on energy_project_service_contract.provider_id=energy_project_provider.id + where + energy_project_project.company_id={current_company_id} and + energy_selfconsumption_distribution_table.state = 'active' and + energy_project_provider.name LIKE '{arkenova_like}'; + """.format( + current_company_id=int(self.community_company_id.id), + arkenova_like="%Arkenova%", + ) + self.env.cr.execute(QUERY) + members = QueryResult._make(self.env.cr.fetchone()) + return members.total + def set_close_status_type_by_date(self): if self.date_end.strftime("%Y-%m-%d") <= datetime.now().strftime("%Y-%m-%d"): self.write({"status": "closed"}) -- GitLab