Skip to content
Snippets Groups Projects
Commit 16a1fc1f authored by Álvaro García's avatar Álvaro García Committed by daniquilez
Browse files

[REF] :recycle: energy_communities_service_invoicing

Author: Alvaro Garcia <alvaro.garcia@somit.coop>
Author: Dani Quilez <dani.quilez@somenergia.coop>
parent dfd67009
No related branches found
No related tags found
2 merge requests!504Release 2025-03-11,!502Refactor module energy communities service invoicing
Showing
with 159 additions and 142 deletions
...@@ -71,7 +71,7 @@ class ContractUtils(Component): ...@@ -71,7 +71,7 @@ class ContractUtils(Component):
execution_date, execution_date,
executed_modification_action, executed_modification_action,
pricelist_id=None, pricelist_id=None,
service_pack_id=None, pack_id=None,
discount=None, discount=None,
payment_mode_id=None, payment_mode_id=None,
): ):
...@@ -89,7 +89,7 @@ class ContractUtils(Component): ...@@ -89,7 +89,7 @@ class ContractUtils(Component):
executed_modification_action, executed_modification_action,
execution_date, execution_date,
pricelist_id, pricelist_id,
service_pack_id, pack_id,
discount, discount,
payment_mode_id, payment_mode_id,
) )
...@@ -105,7 +105,7 @@ class ContractUtils(Component): ...@@ -105,7 +105,7 @@ class ContractUtils(Component):
self, self,
execution_date, execution_date,
pricelist_id=None, pricelist_id=None,
service_pack_id=None, pack_id=None,
discount=None, discount=None,
payment_mode_id=None, payment_mode_id=None,
): ):
...@@ -115,10 +115,10 @@ class ContractUtils(Component): ...@@ -115,10 +115,10 @@ class ContractUtils(Component):
).create_service_invoicing_initial( ).create_service_invoicing_initial(
**self._build_service_invoicing_params( **self._build_service_invoicing_params(
"reopen", "reopen",
"modify_service_pack,modify_pricelist,modify_discount,modify_payment_mode", "modify_pack,modify_pricelist,modify_discount,modify_payment_mode",
execution_date, execution_date,
pricelist_id, pricelist_id,
service_pack_id, pack_id,
discount, discount,
payment_mode_id, payment_mode_id,
) )
...@@ -132,7 +132,7 @@ class ContractUtils(Component): ...@@ -132,7 +132,7 @@ class ContractUtils(Component):
executed_action_description, executed_action_description,
execution_date, execution_date,
pricelist_id=None, pricelist_id=None,
service_pack_id=None, pack_id=None,
discount=None, discount=None,
payment_mode_id=None, payment_mode_id=None,
): ):
...@@ -140,9 +140,9 @@ class ContractUtils(Component): ...@@ -140,9 +140,9 @@ class ContractUtils(Component):
return { return {
"company_id": self.work.record.partner_id.related_company_id, "company_id": self.work.record.partner_id.related_company_id,
"community_company_id": self.work.record.community_company_id, "community_company_id": self.work.record.community_company_id,
"service_pack_id": service_pack_id "pack_id": pack_id
if "modify_service_pack" in executed_action_description_list if "modify_pack" in executed_action_description_list
else self.work.record.service_pack_id, else self.work.record.pack_id,
"pricelist_id": pricelist_id "pricelist_id": pricelist_id
if "modify_pricelist" in executed_action_description_list if "modify_pricelist" in executed_action_description_list
else self.work.record.pricelist_id, else self.work.record.pricelist_id,
......
...@@ -9,7 +9,7 @@ class SaleOrderUtils(Component): ...@@ -9,7 +9,7 @@ class SaleOrderUtils(Component):
self, self,
company_id, company_id,
community_company_id, community_company_id,
service_pack_id, pack_id,
pricelist_id, pricelist_id,
payment_mode_id, payment_mode_id,
start_date, start_date,
...@@ -28,7 +28,7 @@ class SaleOrderUtils(Component): ...@@ -28,7 +28,7 @@ class SaleOrderUtils(Component):
0, 0,
0, 0,
{ {
"product_id": service_pack_id.id, "product_id": pack_id.id,
"date_start": start_date, "date_start": start_date,
"date_end": start_date, "date_end": start_date,
}, },
...@@ -50,7 +50,7 @@ class SaleOrderUtils(Component): ...@@ -50,7 +50,7 @@ class SaleOrderUtils(Component):
self, self,
company_id, company_id,
community_company_id, community_company_id,
service_pack_id, pack_id,
pricelist_id, pricelist_id,
payment_mode_id, payment_mode_id,
start_date, start_date,
...@@ -61,7 +61,7 @@ class SaleOrderUtils(Component): ...@@ -61,7 +61,7 @@ class SaleOrderUtils(Component):
so = self.create_service_invoicing_sale_order( so = self.create_service_invoicing_sale_order(
company_id, company_id,
community_company_id, community_company_id,
service_pack_id, pack_id,
pricelist_id, pricelist_id,
payment_mode_id, payment_mode_id,
start_date, start_date,
...@@ -82,7 +82,7 @@ class SaleOrderUtils(Component): ...@@ -82,7 +82,7 @@ class SaleOrderUtils(Component):
self, self,
company_id, company_id,
community_company_id, community_company_id,
service_pack_id, pack_id,
pricelist_id, pricelist_id,
start_date, start_date,
discount, discount,
...@@ -93,7 +93,7 @@ class SaleOrderUtils(Component): ...@@ -93,7 +93,7 @@ class SaleOrderUtils(Component):
service_invoicing_id = self._create_service_invoicing( service_invoicing_id = self._create_service_invoicing(
company_id, company_id,
community_company_id, community_company_id,
service_pack_id, pack_id,
pricelist_id, pricelist_id,
payment_mode_id, payment_mode_id,
start_date, start_date,
......
<odoo> <odoo>
<record id="product_category_pack" model="product.category"> <record id="product_category_platform_pack" model="product.category">
<field name="name">Platform Service Pack</field> <field name="name">Platform Service Pack</field>
</record> </record>
<record id="product_category_service" model="product.category"> <record id="product_category_platform_service" model="product.category">
<field name="name">Platform Service</field> <field name="name">Platform Service</field>
</record> </record>
</odoo> </odoo>
...@@ -6,20 +6,24 @@ class AccountMove(models.Model): ...@@ -6,20 +6,24 @@ class AccountMove(models.Model):
ref_invoice_id = fields.Many2one( ref_invoice_id = fields.Many2one(
comodel_name="account.move", comodel_name="account.move",
compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute_sudo=True,
store=False, store=False,
) )
related_contract_id = fields.Many2one( related_contract_id = fields.Many2one(
comodel_name="contract.contract", comodel_name="contract.contract",
compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute_sudo=True,
store=False, store=False,
) )
is_pack = fields.Boolean( pack_type = fields.Boolean(
compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute_sudo=True,
store=True, store=True,
) )
is_contract = fields.Boolean( is_contract = fields.Boolean(
compute="_compute_ref_invoice_id_related_contract_id_is_pack_is_contract", compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute_sudo=True,
store=True, store=True,
) )
related_community_company_id = fields.Many2one( related_community_company_id = fields.Many2one(
...@@ -30,11 +34,11 @@ class AccountMove(models.Model): ...@@ -30,11 +34,11 @@ class AccountMove(models.Model):
) )
@api.depends("invoice_line_ids", "ref") @api.depends("invoice_line_ids", "ref")
def _compute_ref_invoice_id_related_contract_id_is_pack_is_contract(self): def _compute_ref_invoice_id_related_contract_id_pack_type_is_contract(self):
for record in self: for record in self:
record.ref_invoice_id = False record.ref_invoice_id = False
record.related_contract_id = False record.related_contract_id = False
record.is_pack = False record.pack_type = 'none'
record.is_contract = False record.is_contract = False
rel_inv = False rel_inv = False
if record.ref: if record.ref:
...@@ -45,7 +49,7 @@ class AccountMove(models.Model): ...@@ -45,7 +49,7 @@ class AccountMove(models.Model):
) )
if rel_inv: if rel_inv:
record.ref_invoice_id = rel_inv.id record.ref_invoice_id = rel_inv.id
record.is_pack = rel_inv.is_pack record.pack_type = rel_inv.pack_type
record.is_contract = rel_inv.is_contract record.is_contract = rel_inv.is_contract
if rel_inv.related_contract_id: if rel_inv.related_contract_id:
record.related_contract_id = rel_inv.related_contract_id.id record.related_contract_id = rel_inv.related_contract_id.id
...@@ -54,6 +58,6 @@ class AccountMove(models.Model): ...@@ -54,6 +58,6 @@ class AccountMove(models.Model):
first_move_line = record.invoice_line_ids[0] first_move_line = record.invoice_line_ids[0]
if first_move_line.contract_line_id: if first_move_line.contract_line_id:
rel_contract = first_move_line.contract_line_id.contract_id rel_contract = first_move_line.contract_line_id.contract_id
record.is_pack = rel_contract.is_pack record.pack_type = rel_contract.pack_type
record.related_contract_id = rel_contract.id record.related_contract_id = rel_contract.id
record.is_contract = True record.is_contract = True
...@@ -7,7 +7,7 @@ from ..utils import ( ...@@ -7,7 +7,7 @@ from ..utils import (
_CONTRACT_STATUS_VALUES, _CONTRACT_STATUS_VALUES,
_SALE_ORDER_SERVICE_INVOICING_ACTION_VALUES, _SALE_ORDER_SERVICE_INVOICING_ACTION_VALUES,
get_existing_open_pack_contract, get_existing_open_pack_contract,
raise_existing_same_open_pack_contract_error, raise_existing_same_open_platform_pack_contract_error,
) )
_CLOSING_ACTION_VALUES = _SALE_ORDER_SERVICE_INVOICING_ACTION_VALUES + [ _CLOSING_ACTION_VALUES = _SALE_ORDER_SERVICE_INVOICING_ACTION_VALUES + [
...@@ -45,7 +45,7 @@ class ContractContract(models.Model): ...@@ -45,7 +45,7 @@ class ContractContract(models.Model):
last_date_invoiced = fields.Date( last_date_invoiced = fields.Date(
string="Last Date Invoiced", compute="_compute_last_date_invoiced", store=False string="Last Date Invoiced", compute="_compute_last_date_invoiced", store=False
) )
is_pack = fields.Boolean(related="contract_template_id.is_pack") pack_type = fields.Selection(related="contract_template_id.pack_type")
is_free_pack = fields.Boolean(related="contract_template_id.is_free_pack") is_free_pack = fields.Boolean(related="contract_template_id.is_free_pack")
closing_action = fields.Selection( closing_action = fields.Selection(
selection=_CLOSING_ACTION_VALUES, selection=_CLOSING_ACTION_VALUES,
...@@ -65,10 +65,10 @@ class ContractContract(models.Model): ...@@ -65,10 +65,10 @@ class ContractContract(models.Model):
compute="_compute_related_contract_product_ids", compute="_compute_related_contract_product_ids",
store=False, store=False,
) )
service_pack_id = fields.Many2one( pack_id = fields.Many2one(
"product.product", "product.product",
string="Service Pack", string="Service Pack",
compute="_compute_service_pack_id", compute="_compute_pack_id",
store=False, store=False,
) )
sale_order_id = fields.Many2one( sale_order_id = fields.Many2one(
...@@ -107,9 +107,9 @@ class ContractContract(models.Model): ...@@ -107,9 +107,9 @@ class ContractContract(models.Model):
def _constrain_unique_contract(self): def _constrain_unique_contract(self):
for record in self: for record in self:
if record.community_company_id: if record.community_company_id:
existing_contract = record._get_existing_same_open_pack_contract() existing_contract = record._get_existing_same_open_platform_pack_contract()
if existing_contract: if existing_contract:
raise_existing_same_open_pack_contract_error(existing_contract) raise_existing_same_open_platform_pack_contract_error(existing_contract)
def _compute_received_invoices_count(self): def _compute_received_invoices_count(self):
for record in self: for record in self:
...@@ -142,9 +142,9 @@ class ContractContract(models.Model): ...@@ -142,9 +142,9 @@ class ContractContract(models.Model):
].last_date_invoiced ].last_date_invoiced
@api.depends("contract_template_id") @api.depends("contract_template_id")
def _compute_service_pack_id(self): def _compute_pack_id(self):
for record in self: for record in self:
record.service_pack_id = False record.pack_id = False
if record.contract_template_id: if record.contract_template_id:
rel_product = self.env["product.product"].search( rel_product = self.env["product.product"].search(
[ [
...@@ -157,7 +157,7 @@ class ContractContract(models.Model): ...@@ -157,7 +157,7 @@ class ContractContract(models.Model):
limit=1, limit=1,
) )
if rel_product: if rel_product:
record.service_pack_id = rel_product.id record.pack_id = rel_product.id
def _recurring_create_invoice(self, date_ref=False): def _recurring_create_invoice(self, date_ref=False):
moves = super()._recurring_create_invoice(date_ref) moves = super()._recurring_create_invoice(date_ref)
...@@ -177,11 +177,11 @@ class ContractContract(models.Model): ...@@ -177,11 +177,11 @@ class ContractContract(models.Model):
def action_reopen_contract(self): def action_reopen_contract(self):
return self._action_contract( return self._action_contract(
"reopen", self.service_pack_id, self.pricelist_id, self.payment_mode_id "reopen", self.pack_id, self.pricelist_id, self.payment_mode_id
) )
def _action_contract( def _action_contract(
self, action, service_pack_id=False, pricelist_id=False, payment_mode_id=False self, action, pack_id=False, pricelist_id=False, payment_mode_id=False
): ):
self.ensure_one() self.ensure_one()
create_dict = { create_dict = {
...@@ -189,8 +189,8 @@ class ContractContract(models.Model): ...@@ -189,8 +189,8 @@ class ContractContract(models.Model):
"executed_action": action, "executed_action": action,
"discount": self.discount, "discount": self.discount,
} }
if service_pack_id: if pack_id:
create_dict["service_pack_id"] = service_pack_id.id create_dict["pack_id"] = pack_id.id
if pricelist_id: if pricelist_id:
create_dict["pricelist_id"] = pricelist_id.id create_dict["pricelist_id"] = pricelist_id.id
if payment_mode_id: if payment_mode_id:
...@@ -259,9 +259,9 @@ class ContractContract(models.Model): ...@@ -259,9 +259,9 @@ class ContractContract(models.Model):
received_invoices.append(invoice.id) received_invoices.append(invoice.id)
return received_invoices return received_invoices
def _get_existing_same_open_pack_contract(self): def _get_existing_same_open_platform_pack_contract(self):
return get_existing_open_pack_contract( return get_existing_open_pack_contract(
self.env, self.partner_id, self.community_company_id, self self.env, self.partner_id, "platform_pack", contract_id=self, custom_query=[("community_company_id", "=", self.community_company_id.id)]
) )
def get_active_monitoring_members(self): def get_active_monitoring_members(self):
......
from odoo import api, fields, models from odoo import api, fields, models, _
PACK_VALUES = [
("platform_pack", _("Platform Pack")),
("none", _("None")),
]
class ContractTemplate(models.Model): class ContractTemplate(models.Model):
_name = "contract.template" _name = "contract.template"
_inherit = "contract.template" _inherit = "contract.template"
is_pack = fields.Boolean(compute="compute_is_pack", store=True)
is_free_pack = fields.Boolean(string="Is a free pack") is_free_pack = fields.Boolean(string="Is a free pack")
pack_type = fields.Selection(PACK_VALUES, compute="_compute_pack_type", string="Pack Type", store=True)
def compute_is_pack(self):
try: def _get_pack_product_from_category(self, category_id, value):
categ_id = self.env.ref( return value if bool(
"energy_communities_service_invoicing.product_category_pack"
).id
except:
categ_id = False
for record in self:
if categ_id:
record.is_pack = bool(
self.env["product.template"].search( self.env["product.template"].search(
[ [
("property_contract_template_id", "=", record.id), ("property_contract_template_id", "=", self.id),
( (
"categ_id", "categ_id",
"=", "=",
categ_id, category_id,
), ),
] ]
) )
) ) else 'none'
def _set_custom_pack_type(self, ref_category, value):
try:
categ_id = self.env.ref(
ref_category
).id
except:
categ_id = False
if categ_id:
self.pack_type = self._get_pack_product_from_category(categ_id, value)
def custom_compute_pack_type(self):
self._set_custom_pack_type("energy_communities_service_invoicing.product_category_platform_pack", 'platform_pack')
def _compute_pack_type(self):
for record in self:
record.custom_compute_pack_type()
...@@ -13,6 +13,7 @@ class ProductTemplate(models.Model): ...@@ -13,6 +13,7 @@ class ProductTemplate(models.Model):
compute="_compute_related_contract_product_ids", compute="_compute_related_contract_product_ids",
store=False, store=False,
) )
pack_type = fields.Selection(related="property_contract_template_id.pack_type")
@api.depends("property_contract_template_id") @api.depends("property_contract_template_id")
def _compute_related_contract_product_ids(self): def _compute_related_contract_product_ids(self):
...@@ -25,14 +26,13 @@ class ProductTemplate(models.Model): ...@@ -25,14 +26,13 @@ class ProductTemplate(models.Model):
record.related_contract_product_ids = rel_products record.related_contract_product_ids = rel_products
@api.constrains("property_contract_template_id") @api.constrains("property_contract_template_id")
def compute_contract_template_is_pack(self): def _constraint_contract_template_pack_type(self):
for record in self: ctemplates = self.env["contract.template"].search([])
ctemplates = self.env["contract.template"].search([]) for ctemplate in ctemplates:
for ctemplate in ctemplates: ctemplate._compute_pack_type()
ctemplate.compute_is_pack()
@api.constrains("description_sale") @api.constrains("description_sale")
def compute_contract_template_line_name(self): def _constraint_contract_template_line_name(self):
for record in self: for record in self:
ctemplatelines = self.env["contract.template.line"].search( ctemplatelines = self.env["contract.template.line"].search(
[("product_id", "=", record.product_variant_id.id)] [("product_id", "=", record.product_variant_id.id)]
......
...@@ -9,39 +9,39 @@ class ResPartner(models.Model): ...@@ -9,39 +9,39 @@ class ResPartner(models.Model):
_name = "res.partner" _name = "res.partner"
_inherit = ["res.partner"] _inherit = ["res.partner"]
service_pack_id = fields.Many2one( platform_pack_id = fields.Many2one(
"product.product", "product.product",
string="Service Pack", string="Platform Service Pack",
compute="_compute_service_pack_id", compute="_compute_platform_pack_id",
store=False, store=False,
) )
pack_contract_status = fields.Selection( platform_pack_contract_status = fields.Selection(
selection=_PACK_CONTRACT_STATUS_VALUES, selection=_PACK_CONTRACT_STATUS_VALUES,
string="Service Pack Status", string="Platform Service Pack Status",
compute="_compute_service_pack_status", compute="_compute_platform_pack_status",
store=False, store=False,
) )
def _compute_service_pack_status(self): def _compute_platform_pack_status(self):
for record in self: for record in self:
record.pack_contract_status = "none" record.platform_pack_contract_status = "none"
rel_contract = record._get_related_service_contract() rel_contract = record._get_related_platform_pack_contract()
if rel_contract: if rel_contract:
record.pack_contract_status = rel_contract.status record.platform_pack_contract_status = rel_contract.status
def _compute_service_pack_id(self): def _compute_platform_pack_id(self):
for record in self: for record in self:
record.service_pack_id = False record.platform_pack_id = False
rel_contract = record._get_related_service_contract() rel_contract = record._get_related_platform_pack_contract()
if rel_contract: if rel_contract:
if rel_contract.service_pack_id: if rel_contract.pack_id:
record.service_pack_id = rel_contract.service_pack_id.id record.platform_pack_id = rel_contract.pack_id.id
def _get_related_service_contract(self): def _get_related_platform_pack_contract(self):
return self.env["contract.contract"].search( return self.env["contract.contract"].search(
[ [
("community_company_id", "=", self.related_company_id.id), ("community_company_id", "=", self.related_company_id.id),
("is_pack", "=", True), ("pack_type", "=", "platform_pack"),
], ],
limit=1, limit=1,
) )
<odoo> <odoo>
<template id="report_invoice_document" inherit_id="account.report_invoice_document"> <template id="report_invoice_document" inherit_id="account.report_invoice_document">
<xpath expr="//div[@id='informations']" position="inside"> <xpath expr="//div[@id='informations']" position="inside">
<div class="col-auto col-3 mw-100 mb-2" t-if="o.is_pack"> <div class="col-auto col-3 mw-100 mb-2" t-if="o.pack_type == 'platform_pack'">
<strong>Community:</strong> <strong>Community:</strong>
<t t-if="o.related_community_company_id.comercial_name"> <t t-if="o.related_community_company_id.comercial_name">
<p class="m-0" t-field="o.related_community_company_id.comercial_name"/> <p class="m-0" t-field="o.related_community_company_id.comercial_name"/>
...@@ -13,19 +13,4 @@ ...@@ -13,19 +13,4 @@
</xpath> </xpath>
</template> </template>
</odoo> </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>-->
...@@ -68,7 +68,7 @@ def service_invoicing_form_view_for_platform_admins( ...@@ -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 # TODO: Think a bit more about more about if this 3 methods must go to contract utils component
def raise_existing_same_open_pack_contract_error(existing_contract): def raise_existing_same_open_platform_pack_contract_error(existing_contract):
raise ValidationError( raise ValidationError(
_( _(
"It already exists an open contract ({}) with same company and community." "It already exists an open contract ({}) with same company and community."
...@@ -77,26 +77,26 @@ def raise_existing_same_open_pack_contract_error(existing_contract): ...@@ -77,26 +77,26 @@ def raise_existing_same_open_pack_contract_error(existing_contract):
def get_existing_open_pack_contract( def get_existing_open_pack_contract(
env, partner_id, community_company_id, contract_id=False env, partner_id, pack_type, contract_id=False, custom_query=[]
): ):
#("community_company_id", "=", community_company_id.id),
query = [ query = [
("partner_id", "=", partner_id.id), ("partner_id", "=", partner_id.id),
("community_company_id", "=", community_company_id.id), ("pack_type", "=", pack_type),
("is_pack", "=", True),
("status", "in", ["paused", "in_progress"]), ("status", "in", ["paused", "in_progress"]),
] ]
if contract_id: if contract_id:
query.append(("id", "!=", contract_id.id)) query.append(("id", "!=", contract_id.id))
query = custom_query + query
return env["contract.contract"].search(query, limit=1) return env["contract.contract"].search(query, limit=1)
def get_existing_last_closed_pack_contract( def get_existing_last_closed_pack_contract(
env, partner_id, community_company_id, contract_id=False env, partner_id, community_company_id, contract_id=False
): ):
query = [ query = [
("partner_id", "=", partner_id.id), ("partner_id", "=", partner_id.id),
("community_company_id", "=", community_company_id.id), ("community_company_id", "=", community_company_id.id),
("is_pack", "=", True), ("pack_type", "=", "platform_pack"),
("status", "in", ["closed_planned", "closed"]), ("status", "in", ["closed_planned", "closed"]),
("successor_contract_id", "=", False), ("successor_contract_id", "=", False),
] ]
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
<field name="inherit_id" ref="account.view_move_form" /> <field name="inherit_id" ref="account.view_move_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after"> <xpath expr="//field[@name='partner_id']" position="after">
<field name="is_pack" invisible="True" /> <field name="pack_type" invisible="True" />
<field name="is_contract" invisible="True" /> <field name="is_contract" invisible="True" />
<field name="invoice_origin" attrs="{'invisible': [('is_contract','=',False)]}" /> <field name="invoice_origin" attrs="{'invisible': [('is_contract','=',False)]}" />
<field name="related_contract_id" 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)]}" /> <field name="related_community_company_id" attrs="{'invisible': [('pack_type' ,'=', 'platform_pack')]}" />
</xpath> </xpath>
</field> </field>
</record> </record>
......
...@@ -47,9 +47,9 @@ ...@@ -47,9 +47,9 @@
decoration-success="status == 'in_progress'" decoration-success="status == 'in_progress'"
/> />
<field name="partner_id" /> <field name="partner_id" />
<field name="community_company_id" /> <field name="community_company_id" attrs="{'invisible': [('pack_type', '!=', 'platform_pack')]}" />
<field name="service_pack_id" /> <field name="pack_id" />
<field name="is_pack" /> <field name="pack_type" />
</tree> </tree>
</field> </field>
</record> </record>
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
<field name="community_company_id" /> <field name="community_company_id" />
</xpath> </xpath>
<xpath expr="//field[@name='pricelist_id']" position="after"> <xpath expr="//field[@name='pricelist_id']" position="after">
<field name="service_pack_id" /> <field name="pack_id" />
</xpath> </xpath>
<xpath expr="//field[@name='user_id']" position="after"> <xpath expr="//field[@name='user_id']" position="after">
<field name="date_start" /> <field name="date_start" />
...@@ -135,7 +135,7 @@ ...@@ -135,7 +135,7 @@
<!--</div>--> <!--</div>-->
<group> <group>
<field name="name" /> <field name="name" />
<field name="service_pack_id" options="{'no_open': True}" /> <field name="pack_id" options="{'no_open': True}" />
<field name="related_contract_product_ids" widget="one2many" > <field name="related_contract_product_ids" widget="one2many" >
<tree editable="bottom"> <tree editable="bottom">
<field name="name" readonly="1"/> <field name="name" readonly="1"/>
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='vat']" position="after"> <xpath expr="//field[@name='vat']" position="after">
<field name="company_hierarchy_level" invisible="1" /> <field name="company_hierarchy_level" invisible="1" />
<field name="service_pack_id" attrs="{'invisible': [('company_hierarchy_level', '!=', 'community')]}" options="{'no_open': True}" /> <field name="platform_pack_id" attrs="{'invisible': [('company_hierarchy_level', '!=', 'community')]}" options="{'no_open': True}" />
<field name="pack_contract_status" attrs="{'invisible': [('company_hierarchy_level', '!=', 'community')]}" /> <field name="platform_pack_contract_status" attrs="{'invisible': [('company_hierarchy_level', '!=', 'community')]}" />
</xpath> </xpath>
</field> </field>
</record> </record>
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<field name="name">Packs</field> <field name="name">Packs</field>
<field name="res_model">product.template</field> <field name="res_model">product.template</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain" eval="[('categ_id','=',ref('product_category_pack'))]" /> <field name="domain" eval="[('categ_id','=',ref('product_category_platform_pack'))]" />
</record> </record>
<record <record
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<field name="name">Services</field> <field name="name">Services</field>
<field name="res_model">product.template</field> <field name="res_model">product.template</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain" eval="[('categ_id','=',ref('product_category_service'))]" /> <field name="domain" eval="[('categ_id','=',ref('product_category_platform_service'))]" />
</record> </record>
<record <record
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
<field name="name">Packs contract templates</field> <field name="name">Packs contract templates</field>
<field name="res_model">contract.template</field> <field name="res_model">contract.template</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain">[('is_pack','=',True)]</field> <field name="domain">[(pack_type, '=', 'platform_pack')]</field>
</record> </record>
<record <record
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
<field name="name">Service invoices (issued)</field> <field name="name">Service invoices (issued)</field>
<field name="res_model">account.move</field> <field name="res_model">account.move</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain" eval="[('move_type', 'in', ['out_invoice', 'out_refund']),('is_pack','=',True)]"/> <field name="domain" eval="[('move_type', 'in', ['out_invoice', 'out_refund']), ('pack_type', '=', 'platform_pack')]"/>
</record> </record>
<record <record
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
<field name="name">Service invoices (received)</field> <field name="name">Service invoices (received)</field>
<field name="res_model">account.move</field> <field name="res_model">account.move</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="domain" eval="[('move_type', 'in', ['in_invoice', 'in_refund']),('is_pack','=',True)]"/> <field name="domain" eval="[('move_type', 'in', ['in_invoice', 'in_refund']), ('pack_type', '=', 'platform_pack')]"/>
</record> </record>
<record <record
......
...@@ -22,9 +22,10 @@ class ServiceInvoicingActionWizard(models.TransientModel): ...@@ -22,9 +22,10 @@ class ServiceInvoicingActionWizard(models.TransientModel):
selection=_SERVICE_INVOICING_EXECUTED_ACTION_VALUES selection=_SERVICE_INVOICING_EXECUTED_ACTION_VALUES
) )
pricelist_id = fields.Many2one("product.pricelist", string="Select pricelist") pricelist_id = fields.Many2one("product.pricelist", string="Select pricelist")
service_pack_id = fields.Many2one("product.product", string="Service pack") pack_id = fields.Many2one("product.product", string="Pack")
discount = fields.Float(string="Discount (%)", digits="Discount") discount = fields.Float(string="Discount (%)", digits="Discount")
payment_mode_id = fields.Many2one("account.payment.mode", string="Payment mode") payment_mode_id = fields.Many2one("account.payment.mode", string="Payment mode")
pack_type = fields.Selection(related="service_invoicing_id.pack_type")
def execute_activate(self): def execute_activate(self):
with contract_utils(self.env, self.service_invoicing_id) as component: with contract_utils(self.env, self.service_invoicing_id) as component:
...@@ -42,7 +43,7 @@ class ServiceInvoicingActionWizard(models.TransientModel): ...@@ -42,7 +43,7 @@ class ServiceInvoicingActionWizard(models.TransientModel):
self.execution_date, self.execution_date,
executed_modification_action, executed_modification_action,
self.pricelist_id, self.pricelist_id,
self.service_pack_id, self.pack_id,
self.discount, self.discount,
self.payment_mode_id, self.payment_mode_id,
) )
...@@ -55,7 +56,7 @@ class ServiceInvoicingActionWizard(models.TransientModel): ...@@ -55,7 +56,7 @@ class ServiceInvoicingActionWizard(models.TransientModel):
service_invoicing_id = component.reopen( service_invoicing_id = component.reopen(
self.execution_date, self.execution_date,
self.pricelist_id, self.pricelist_id,
self.service_pack_id, self.pack_id,
self.discount, self.discount,
self.payment_mode_id, self.payment_mode_id,
) )
...@@ -66,7 +67,7 @@ class ServiceInvoicingActionWizard(models.TransientModel): ...@@ -66,7 +67,7 @@ class ServiceInvoicingActionWizard(models.TransientModel):
def _validate_execute_modify(self): def _validate_execute_modify(self):
if ( if (
not self.pricelist_id not self.pricelist_id
and not self.service_pack_id and not self.pack_id
and not self.payment_mode_id and not self.payment_mode_id
and self.discount == self.service_invoicing_id.discount and self.discount == self.service_invoicing_id.discount
): ):
...@@ -76,10 +77,10 @@ class ServiceInvoicingActionWizard(models.TransientModel): ...@@ -76,10 +77,10 @@ class ServiceInvoicingActionWizard(models.TransientModel):
executed_modification_action = "" executed_modification_action = ""
if self.pricelist_id: if self.pricelist_id:
executed_modification_action += "modify_pricelist" executed_modification_action += "modify_pricelist"
if self.service_pack_id: if self.pack_id:
if bool(executed_modification_action): if bool(executed_modification_action):
executed_modification_action += "," executed_modification_action += ","
executed_modification_action += "modify_service_pack" executed_modification_action += "modify_pack"
if self.payment_mode_id: if self.payment_mode_id:
if bool(executed_modification_action): if bool(executed_modification_action):
executed_modification_action += "," executed_modification_action += ","
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<sheet> <sheet>
<group> <group>
<field name="executed_action" invisible="1" /> <field name="executed_action" invisible="1" />
<field name="pack_type" invisible="1" />
<field <field
name="service_invoicing_id" name="service_invoicing_id"
required="1" required="1"
...@@ -19,8 +20,8 @@ ...@@ -19,8 +20,8 @@
/> />
<field name="execution_date" required="1"/> <field name="execution_date" required="1"/>
<field <field
name="service_pack_id" name="pack_id"
domain="[('is_contract','=',True)]" domain="[('pack_type','=', pack_type)]"
attrs="{ attrs="{
'invisible': [('executed_action','not in',['modification','reopen'])], 'invisible': [('executed_action','not in',['modification','reopen'])],
'required': [('executed_action','=','reopen')] 'required': [('executed_action','=','reopen')]
......
...@@ -10,7 +10,7 @@ from odoo.addons.energy_communities.utils import ( ...@@ -10,7 +10,7 @@ from odoo.addons.energy_communities.utils import (
from ..utils import ( from ..utils import (
get_existing_last_closed_pack_contract, get_existing_last_closed_pack_contract,
get_existing_open_pack_contract, get_existing_open_pack_contract,
raise_existing_same_open_pack_contract_error, raise_existing_same_open_platform_pack_contract_error,
service_invoicing_form_view_for_platform_admins, service_invoicing_form_view_for_platform_admins,
service_invoicing_tree_view, service_invoicing_tree_view,
) )
...@@ -34,9 +34,9 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): ...@@ -34,9 +34,9 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel):
community_company_mids = fields.Many2many( community_company_mids = fields.Many2many(
comodel_name="res.company", comodel_name="res.company",
) )
service_pack_id = fields.Many2one( platform_pack_id = fields.Many2one(
"product.product", "product.product",
string="Service pack", string="Platform service pack",
) )
payment_mode_id = fields.Many2one( payment_mode_id = fields.Many2one(
"account.payment.mode", "account.payment.mode",
...@@ -48,22 +48,22 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): ...@@ -48,22 +48,22 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel):
allowed_community_company_ids = fields.Many2many( allowed_community_company_ids = fields.Many2many(
comodel_name="res.company", comodel_name="res.company",
_compute="_compute_allowed_community_company_ids", compute="_compute_allowed_community_company_ids",
store=False, store=False,
) )
allowed_payment_mode_ids = fields.Many2many( allowed_payment_mode_ids = fields.Many2many(
comodel_name="account.payment.mode", comodel_name="account.payment.mode",
_compute="_compute_allowed_payment_mode_ids", compute="_compute_allowed_payment_mode_ids",
store=False, store=False,
) )
pack_product_categ_id = fields.Many2one( platform_pack_product_categ_id = fields.Many2one(
"product.category", compute="_compute_pack_product_categ_id", store=False "product.category", compute="_compute_platform_pack_product_categ_id", store=False
) )
def _compute_pack_product_categ_id(self): def _compute_platform_pack_product_categ_id(self):
for record in self: for record in self:
record.pack_product_categ_id = self.env.ref( record.platform_pack_product_categ_id = self.env.ref(
"energy_communities_service_invoicing.product_category_pack" "energy_communities_service_invoicing.product_category_platform_pack"
).id ).id
@api.depends("company_id", "community_company_mids") @api.depends("company_id", "community_company_mids")
...@@ -119,7 +119,7 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): ...@@ -119,7 +119,7 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel):
service_invoicing_id = component.reopen( service_invoicing_id = component.reopen(
self.execution_date, self.execution_date,
self.pricelist_id, self.pricelist_id,
self.service_pack_id, self.platform_pack_id,
self.discount, self.discount,
payment_mode_id, payment_mode_id,
) )
...@@ -129,7 +129,7 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): ...@@ -129,7 +129,7 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel):
service_invoicing_id = component.create_service_invoicing_initial( service_invoicing_id = component.create_service_invoicing_initial(
company_id, company_id,
community_company_id, community_company_id,
self.service_pack_id, self.platform_pack_id,
self.pricelist_id, self.pricelist_id,
self.execution_date, self.execution_date,
self.discount, self.discount,
...@@ -182,10 +182,11 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel): ...@@ -182,10 +182,11 @@ class ServiceInvoicingActionCreateWizard(models.TransientModel):
# Check if already open one and raise error # Check if already open one and raise error
for record in impacted_records: for record in impacted_records:
existing_contract = get_existing_open_pack_contract( existing_contract = get_existing_open_pack_contract(
self.env, record.parent_id.partner_id, record self.env, record.parent_id.partner_id, "platform_pack", contract_id=False, custom_query=[("community_company_id", "=", record.id)]
) )
if existing_contract: if existing_contract:
raise_existing_same_open_pack_contract_error(existing_contract) raise_existing_same_open_platform_pack_contract_error(existing_contract)
def _validate_service_invoicing_action_create_multicommunity(self, company_id_list): def _validate_service_invoicing_action_create_multicommunity(self, company_id_list):
impacted_records = self.env["res.company"].browse(company_id_list) impacted_records = self.env["res.company"].browse(company_id_list)
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<field name="creation_type" invisible="1" /> <field name="creation_type" invisible="1" />
<field name="allowed_community_company_ids" invisible="1" /> <field name="allowed_community_company_ids" invisible="1" />
<field name="allowed_payment_mode_ids" invisible="1" /> <field name="allowed_payment_mode_ids" invisible="1" />
<field name="pack_product_categ_id" invisible="1" /> <field name="platform_pack_product_categ_id" invisible="1" />
<field name="execution_date" required="1"/> <field name="execution_date" required="1"/>
<field <field
name="company_id" name="company_id"
...@@ -33,8 +33,8 @@ ...@@ -33,8 +33,8 @@
<field name="parent_id"/> <field name="parent_id"/>
</tree> </tree>
</field> </field>
<field name="service_pack_id" <field name="platform_pack_id"
domain="[('categ_id','=',pack_product_categ_id)]" domain="[('categ_id','=', platform_pack_product_categ_id)]"
required="1" required="1"
/> />
<field name="pricelist_id" required="1" domain="[('company_id','=',False)]"/> <field name="pricelist_id" required="1" domain="[('company_id','=',False)]"/>
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
"web_m2x_options", "web_m2x_options",
"l10n_es", "l10n_es",
"report_csv", "report_csv",
"energy_communities_service_invoicing",
], ],
"external_dependencies": { "external_dependencies": {
"python": ["pandas>=2.0.3", "numpy>=1.24.4", "openupgradelib>=3.6.1"] "python": ["pandas>=2.0.3", "numpy>=1.24.4", "openupgradelib>=3.6.1"]
...@@ -41,6 +42,7 @@ ...@@ -41,6 +42,7 @@
"data/mail_template.xml", "data/mail_template.xml",
"data/ir_attachment_data.xml", "data/ir_attachment_data.xml",
"data/ir_cron.xml", "data/ir_cron.xml",
"data/product_data.xml",
"views/contract_views.xml", "views/contract_views.xml",
"views/selfconsumption_views.xml", "views/selfconsumption_views.xml",
"views/supply_point_views.xml", "views/supply_point_views.xml",
......
<odoo>
<record id="product_category_selfconsumption_pack" model="product.category">
<field name="name">Selfconsumption Pack</field>
</record>
<record id="product_category_selfconsumption_service" model="product.category">
<field name="name">Selfconsumption Service</field>
</record>
</odoo>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment