Make client account currency inference computed
This commit is contained in:
parent
d19fea9dc7
commit
24c4881744
@ -38,7 +38,6 @@ class OperatingSystemSetup:
|
|||||||
values = {"mcs_is_client_account": True}
|
values = {"mcs_is_client_account": True}
|
||||||
if not partner.mcs_account_status:
|
if not partner.mcs_account_status:
|
||||||
values["mcs_account_status"] = "active"
|
values["mcs_account_status"] = "active"
|
||||||
values.update(self._client_company_currency_values(partner))
|
|
||||||
partner.write(values)
|
partner.write(values)
|
||||||
|
|
||||||
def _ensure_active_portfolio(self):
|
def _ensure_active_portfolio(self):
|
||||||
@ -142,47 +141,10 @@ class OperatingSystemSetup:
|
|||||||
values["mcs_is_client_account"] = True
|
values["mcs_is_client_account"] = True
|
||||||
if not partner.mcs_account_status:
|
if not partner.mcs_account_status:
|
||||||
values["mcs_account_status"] = "active"
|
values["mcs_account_status"] = "active"
|
||||||
values.update(self._client_company_currency_values(partner))
|
|
||||||
if values:
|
if values:
|
||||||
partner.write(values)
|
partner.write(values)
|
||||||
return partner
|
return partner
|
||||||
|
|
||||||
def _client_company_currency_values(self, partner):
|
|
||||||
invoice = self.Invoice.search(
|
|
||||||
[
|
|
||||||
("move_type", "=", "out_invoice"),
|
|
||||||
("state", "=", "posted"),
|
|
||||||
("commercial_partner_id", "=", partner.commercial_partner_id.id),
|
|
||||||
("company_id", "!=", False),
|
|
||||||
],
|
|
||||||
order="invoice_date desc, id desc",
|
|
||||||
limit=1,
|
|
||||||
)
|
|
||||||
if invoice:
|
|
||||||
return {
|
|
||||||
"mcs_client_company_id": invoice.company_id.id,
|
|
||||||
"mcs_currency_id": invoice.currency_id.id or invoice.company_currency_id.id,
|
|
||||||
}
|
|
||||||
project = self.Project.search(
|
|
||||||
[("partner_id", "=", partner.id), ("company_id", "!=", False)],
|
|
||||||
order="write_date desc, id desc",
|
|
||||||
limit=1,
|
|
||||||
)
|
|
||||||
if project:
|
|
||||||
return {
|
|
||||||
"mcs_client_company_id": project.company_id.id,
|
|
||||||
"mcs_currency_id": project.company_id.currency_id.id,
|
|
||||||
}
|
|
||||||
if partner.currency_id:
|
|
||||||
company = self.env["res.company"].sudo().search(
|
|
||||||
[("currency_id", "=", partner.currency_id.id)], limit=1
|
|
||||||
)
|
|
||||||
values = {"mcs_currency_id": partner.currency_id.id}
|
|
||||||
if company:
|
|
||||||
values["mcs_client_company_id"] = company.id
|
|
||||||
return values
|
|
||||||
return {}
|
|
||||||
|
|
||||||
def _ensure_project(self, partner, account_name, workstream, delivery_type):
|
def _ensure_project(self, partner, account_name, workstream, delivery_type):
|
||||||
is_internal = partner.name == "Internal"
|
is_internal = partner.name == "Internal"
|
||||||
project_name = "%s - %s" % (partner.name, workstream)
|
project_name = "%s - %s" % (partner.name, workstream)
|
||||||
|
|||||||
@ -107,10 +107,6 @@ class CrmLead(models.Model):
|
|||||||
partner = lead.partner_id
|
partner = lead.partner_id
|
||||||
if partner:
|
if partner:
|
||||||
values = {"mcs_is_client_account": True}
|
values = {"mcs_is_client_account": True}
|
||||||
company = lead.company_id or self.env.company
|
|
||||||
if company:
|
|
||||||
values["mcs_client_company_id"] = company.id
|
|
||||||
values["mcs_currency_id"] = company.currency_id.id
|
|
||||||
if not partner.mcs_account_owner_id and lead.user_id:
|
if not partner.mcs_account_owner_id and lead.user_id:
|
||||||
values["mcs_account_owner_id"] = lead.user_id.id
|
values["mcs_account_owner_id"] = lead.user_id.id
|
||||||
partner.write(values)
|
partner.write(values)
|
||||||
|
|||||||
@ -33,11 +33,13 @@ class ResPartner(models.Model):
|
|||||||
mcs_currency_id = fields.Many2one(
|
mcs_currency_id = fields.Many2one(
|
||||||
"res.currency",
|
"res.currency",
|
||||||
string="MCS Currency",
|
string="MCS Currency",
|
||||||
|
compute="_compute_mcs_account_metrics",
|
||||||
default=lambda self: self.env.company.currency_id,
|
default=lambda self: self.env.company.currency_id,
|
||||||
)
|
)
|
||||||
mcs_client_company_id = fields.Many2one(
|
mcs_client_company_id = fields.Many2one(
|
||||||
"res.company",
|
"res.company",
|
||||||
string="MCS Company",
|
string="MCS Company",
|
||||||
|
compute="_compute_mcs_account_metrics",
|
||||||
help="Company inferred from this client's invoices or delivery projects.",
|
help="Company inferred from this client's invoices or delivery projects.",
|
||||||
)
|
)
|
||||||
mcs_monthly_revenue = fields.Monetary(
|
mcs_monthly_revenue = fields.Monetary(
|
||||||
@ -116,18 +118,13 @@ class ResPartner(models.Model):
|
|||||||
"mcs_is_client_account": "boolean",
|
"mcs_is_client_account": "boolean",
|
||||||
"mcs_account_status": "varchar",
|
"mcs_account_status": "varchar",
|
||||||
"mcs_account_health": "varchar",
|
"mcs_account_health": "varchar",
|
||||||
"mcs_currency_id": "integer",
|
|
||||||
"mcs_client_company_id": "integer",
|
|
||||||
"mcs_monthly_revenue": "numeric",
|
"mcs_monthly_revenue": "numeric",
|
||||||
"mcs_contracted_value": "numeric",
|
"mcs_contracted_value": "numeric",
|
||||||
"mcs_monthly_hours": "double precision",
|
"mcs_monthly_hours": "double precision",
|
||||||
"mcs_effective_hourly_revenue": "numeric",
|
"mcs_effective_hourly_revenue": "numeric",
|
||||||
"mcs_total_invoiced": "numeric",
|
"mcs_total_invoiced": "numeric",
|
||||||
"mcs_total_invoiced_display": "varchar",
|
|
||||||
"mcs_total_outstanding": "numeric",
|
"mcs_total_outstanding": "numeric",
|
||||||
"mcs_total_outstanding_display": "varchar",
|
|
||||||
"mcs_total_overdue": "numeric",
|
"mcs_total_overdue": "numeric",
|
||||||
"mcs_total_overdue_display": "varchar",
|
|
||||||
"mcs_last_invoice_date": "date",
|
"mcs_last_invoice_date": "date",
|
||||||
"mcs_account_owner_id": "integer",
|
"mcs_account_owner_id": "integer",
|
||||||
"mcs_next_account_action": "varchar",
|
"mcs_next_account_action": "varchar",
|
||||||
|
|||||||
@ -74,14 +74,9 @@
|
|||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search>
|
<search>
|
||||||
<field name="display_name"/>
|
<field name="display_name"/>
|
||||||
<field name="mcs_client_company_id"/>
|
|
||||||
<field name="mcs_account_owner_id"/>
|
<field name="mcs_account_owner_id"/>
|
||||||
<field name="mcs_account_status"/>
|
<field name="mcs_account_status"/>
|
||||||
<filter string="Canada Company" name="mcs_company_canada" domain="[('mcs_client_company_id.name','=','Metatroncube Software Solutions')]"/>
|
|
||||||
<filter string="India LLP" name="mcs_company_india" domain="[('mcs_client_company_id.name','=','Metatroncube Software Solutions LLP')]"/>
|
|
||||||
<group expand="0" string="Group By">
|
<group expand="0" string="Group By">
|
||||||
<filter string="MCS Company" name="group_mcs_client_company" context="{'group_by':'mcs_client_company_id'}"/>
|
|
||||||
<filter string="Currency" name="group_mcs_currency" context="{'group_by':'mcs_currency_id'}"/>
|
|
||||||
<filter string="Health" name="group_mcs_health" context="{'group_by':'mcs_account_health'}"/>
|
<filter string="Health" name="group_mcs_health" context="{'group_by':'mcs_account_health'}"/>
|
||||||
</group>
|
</group>
|
||||||
</search>
|
</search>
|
||||||
@ -95,6 +90,6 @@
|
|||||||
<field name="view_id" ref="view_partner_tree_mcs_client_account"/>
|
<field name="view_id" ref="view_partner_tree_mcs_client_account"/>
|
||||||
<field name="search_view_id" ref="view_partner_search_mcs_client_account"/>
|
<field name="search_view_id" ref="view_partner_search_mcs_client_account"/>
|
||||||
<field name="domain">[('mcs_is_client_account','=',True)]</field>
|
<field name="domain">[('mcs_is_client_account','=',True)]</field>
|
||||||
<field name="context">{'default_mcs_is_client_account': True, 'group_by': 'mcs_client_company_id'}</field>
|
<field name="context">{'default_mcs_is_client_account': True}</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user