Skip to content
Snippets Groups Projects
Commit 60f7943a authored by daniquilez's avatar daniquilez
Browse files

[IMP] :sparkles: Define config journal and pack_type mixin

parent fdfbe70e
No related branches found
No related tags found
2 merge requests!504Release 2025-03-11,!502Refactor module energy communities service invoicing
Pipeline #191741 passed
Showing
with 146 additions and 77 deletions
......@@ -22,6 +22,7 @@
"contract_variable_quantity",
"energy_communities",
"energy_communities_cooperator", # TODO: This dependency is needed for active members formula. Need to refactor this.
"account_invoice_inter_company",
],
# always loaded
"data": [
......
......@@ -55,10 +55,12 @@ class ContractUtils(Component):
for line in self.work.record.contract_line_ids:
line.write({"discount": discount})
def set_configuration_service_invoicing_journal_if_defined(self):
journal_id = self.work.record.company_id.service_invoicing_journal_id
if journal_id:
self.work.record.write({"journal_id": journal_id.id})
# method to be extended if using component for another pack_type
def set_configuration_journal_if_defined(self):
if self.work.record.pack_type == "platform_pack":
journal_id = self.work.record.company_id.service_invoicing_sale_journal_id
if journal_id:
self.work.record.write({"journal_id": journal_id.id})
def clean_non_service_lines(self):
for line in self.work.record.contract_line_ids:
......
......@@ -77,7 +77,7 @@ class SaleOrderUtils(Component):
component.clean_non_service_lines()
component.set_start_date(start_date)
component.set_discount(discount)
component.set_configuration_service_invoicing_journal_if_defined()
component.set_configuration_journal_if_defined()
return service_invoicing_id
def create_service_invoicing_initial(
......
from . import pack_type_mixin
from . import abstract_contract
from . import account_move
from . import contract
......
from odoo import api, fields, models
from ..utils import PACK_VALUES
class AccountMove(models.Model):
_inherit = "account.move"
_name = "account.move"
_inherit = ["account.move", "pack.type.mixin"]
ref_invoice_id = fields.Many2one(
comodel_name="account.move",
compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute="_compute_ref_invoice_id_related_contract_id_is_contract",
compute_sudo=True,
store=False,
)
related_contract_id = fields.Many2one(
comodel_name="contract.contract",
compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute="_compute_ref_invoice_id_related_contract_id_is_contract",
compute_sudo=True,
store=False,
)
pack_type = fields.Boolean(
compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute_sudo=True,
store=True,
)
is_contract = fields.Boolean(
compute="_compute_ref_invoice_id_related_contract_id_pack_type_is_contract",
compute="_compute_ref_invoice_id_related_contract_id_is_contract",
compute_sudo=True,
store=True,
)
......@@ -34,11 +32,10 @@ class AccountMove(models.Model):
)
@api.depends("invoice_line_ids", "ref")
def _compute_ref_invoice_id_related_contract_id_pack_type_is_contract(self):
def _compute_ref_invoice_id_related_contract_id_is_contract(self):
for record in self:
record.ref_invoice_id = False
record.related_contract_id = False
record.pack_type = 'none'
record.is_contract = False
rel_inv = False
if record.ref:
......@@ -49,7 +46,6 @@ class AccountMove(models.Model):
)
if rel_inv:
record.ref_invoice_id = rel_inv.id
record.pack_type = rel_inv.pack_type
record.is_contract = rel_inv.is_contract
if rel_inv.related_contract_id:
record.related_contract_id = rel_inv.related_contract_id.id
......@@ -58,6 +54,24 @@ class AccountMove(models.Model):
first_move_line = record.invoice_line_ids[0]
if first_move_line.contract_line_id:
rel_contract = first_move_line.contract_line_id.contract_id
record.pack_type = rel_contract.pack_type
record.related_contract_id = rel_contract.id
record.is_contract = True
def custom_compute_pack_type(self):
self._set_custom_pack_type_on_invoice()
@api.depends("ref", "invoice_line_ids")
def _compute_pack_type(self):
super()._compute_pack_type()
# define configuration intercompany journal
def _prepare_invoice_data(self, dest_company):
inv_data = super()._prepare_invoice_data(dest_company)
if (
self.pack_type == "platform_pack"
and dest_company.sudo().service_invoicing_purchase_journal_id
):
inv_data[
"journal_id"
] = dest_company.sudo().service_invoicing_purchase_journal_id.id
return inv_data
from odoo import api, fields, models, _
from odoo import _, api, fields, models
PACK_VALUES = [
("platform_pack", _("Platform Pack")),
("none", _("None")),
]
class ContractTemplate(models.Model):
_name = "contract.template"
_inherit = "contract.template"
_inherit = ["contract.template", "pack.type.mixin"]
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 _get_pack_product_from_category(self, category_id, value):
return value if bool(
self.env["product.template"].search(
[
("property_contract_template_id", "=", self.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()
self._set_custom_pack_type_on_contract_template(
"platform_pack",
"energy_communities_service_invoicing.product_category_platform_pack",
)
from odoo import fields, models
from ..utils import PACK_VALUES
class PackTypeMixin(models.AbstractModel):
_name = "pack.type.mixin"
_description = "Add pack_type to any model"
pack_type = fields.Selection(
PACK_VALUES,
compute="_compute_pack_type",
compute_sudo=True,
string="Pack Type",
store=True,
)
def _get_pack_type_from_product_category(self, pack_type, category_id):
return (
pack_type
if bool(
self.env["product.template"].search(
[
("property_contract_template_id", "=", self.id),
("categ_id", "=", category_id),
]
)
)
else "none"
)
def _set_custom_pack_type_on_contract_template(self, pack_type, ref_category):
try:
categ_id = self.env.ref(ref_category).id
except:
categ_id = False
if categ_id:
self.pack_type = self._get_pack_type_from_product_category(
pack_type, categ_id
)
def _set_custom_pack_type_on_invoice(self):
if self.ref:
rel_inv = (
self.env["account.move"]
.sudo()
.search([("name", "=", self.ref)], limit=1)
)
if rel_inv:
self.pack_type = rel_inv.pack_type
else:
if self.invoice_line_ids:
first_move_line = self.invoice_line_ids[0]
if first_move_line.contract_line_id:
rel_contract = first_move_line.contract_line_id.contract_id
self.pack_type = rel_contract.pack_type
# method to be overwriten on implementations
def custom_compute_pack_type(self):
pass
def _compute_pack_type(self):
for record in self:
record.pack_type = "none"
record.custom_compute_pack_type()
......@@ -6,14 +6,14 @@ class ResCompany(models.Model):
_name = "res.company"
_inherit = ["res.company"]
service_invoicing_journal_id = fields.Many2one(
service_invoicing_sale_journal_id = fields.Many2one(
comodel_name="account.journal",
string="Service invoicing journal",
string="Service invoicing sale journal",
)
service_invoicing_purchase_journal_id = fields.Many2one(
comodel_name="account.journal",
string="Service invoicing purchase journal",
)
# service_invoicing_payment_mode_id = fields.Many2one(
# comodel_name="account.payment.mode",
# string="Service invoicing payment mode",
# )
service_invoicing_sale_team_id = fields.Many2one(
comodel_name="crm.team",
string="Service invoicing sales team",
......
......@@ -4,6 +4,11 @@ from odoo.exceptions import ValidationError
from odoo.addons.contract.models.contract import ContractContract
PACK_VALUES = [
("platform_pack", _("Platform Pack")),
("none", _("None")),
]
_CONTRACT_STATUS_VALUES = [
("paused", _("Paused")),
("in_progress", _("In progress")),
......@@ -77,19 +82,21 @@ def raise_existing_same_open_platform_pack_contract_error(existing_contract):
def get_existing_open_pack_contract(
env, partner_id, pack_type, contract_id=False, custom_query=[]
env, partner_id, pack_type, contract_id=False, custom_query=False
):
#("community_company_id", "=", community_company_id.id),
# ("community_company_id", "=", community_company_id.id),
query = [
("partner_id", "=", partner_id.id),
("partner_id", "=", partner_id.id),
("pack_type", "=", pack_type),
("status", "in", ["paused", "in_progress"]),
]
if contract_id:
query.append(("id", "!=", contract_id.id))
query = custom_query + query
if custom_query:
query = custom_query + query
return env["contract.contract"].search(query, limit=1)
def get_existing_last_closed_pack_contract(
env, partner_id, community_company_id, contract_id=False
):
......
......@@ -5,7 +5,7 @@
<field name="inherit_id" ref="account.view_move_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="pack_type" invisible="True" />
<field name="pack_type" />
<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)]}" />
......
......@@ -137,6 +137,7 @@
<group>
<field name="name" />
<field name="pack_id" options="{'no_open': True}" />
<field name="pack_type" />
<field name="related_contract_product_ids" widget="one2many" >
<tree editable="bottom">
<field name="name" readonly="1"/>
......
......@@ -19,7 +19,8 @@
<page string="Services Invoicing">
<group>
<field name="id" invisible="1"/>
<field name="service_invoicing_journal_id" domain="[('company_id', '=', id)]" />
<field name="service_invoicing_sale_journal_id" domain="[('company_id', '=', id)]" />
<field name="service_invoicing_purchase_journal_id" domain="[('company_id', '=', id)]" />
<field name="service_invoicing_sale_team_id" domain="[('company_id', '=', id)]" />
</group>
</page>
......
from . import pack_type_mixin
from . import account_move
from . import contract
from . import contract_csv_report
......
......@@ -11,7 +11,8 @@ class AccountMoveLine(models.Model):
class AccountMove(models.Model):
_inherit = "account.move"
_name = "account.move"
_inherit = ["account.move", "pack.type.mixin"]
selfconsumption_invoicing_mode = fields.Selection(
[
......
from odoo import _, api, fields, models
PACK_VALUES = [
("selfconsumption_pack", _("Selfconsumption Pack")),
]
class ContractTemplate(models.Model):
_inherit = "contract.template"
pack_type = fields.Selection(selection_add=PACK_VALUES)
_name = "contract.template"
_inherit = ["contract.template", "pack.type.mixin"]
def custom_compute_pack_type(self):
super().custom_compute_pack_type()
if self.pack_type == "none":
self._set_custom_pack_type(
"selfconsumption.product_category_selfconsumption_pack",
self._set_custom_pack_type_on_contract_template(
"selfconsumption_pack",
"selfconsumption.product_category_selfconsumption_pack",
)
from odoo import _, fields, models
PACK_VALUES = [
("selfconsumption_pack", _("Selfconsumption Pack")),
]
class PackTypeMixin(models.AbstractModel):
_inherit = "pack.type.mixin"
pack_type = fields.Selection(selection_add=PACK_VALUES)
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