diff --git a/__manifest__.py b/__manifest__.py index 3116aa078107c9227b9f5933cbfbfa3b6b8df2f7..3bb7d098d1e03ff66b621367103d2fac2ebb4c00 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,14 +1,11 @@ { "name": "Financial - Deal Contract", "summary": "Du deal flow au contrat", - "author": "Le Filament", + "author": "Le Filament, Odoo Community Association (OCA)", "website": "https://le-filament.com", "version": "16.0.1.0.0", "license": "AGPL-3", - "depends": [ - "financial_deal_flow", - "financial_contract", - ], + "depends": ["financial_deal_flow", "financial_contract", "loan_manager"], "data": [ # "security/ir.model.access.csv", # datas diff --git a/models/financial_contract.py b/models/financial_contract.py index a44c6e53e33b707c772a9c6e207a5df5eca1c785..94b6fd829958dea6b5d1221ba1367a3484718765 100644 --- a/models/financial_contract.py +++ b/models/financial_contract.py @@ -1,12 +1,16 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from datetime import datetime + +from ocb.odoo import api from odoo import fields, models +MAP_DICT = {"loan": "loan.manager.loan", "invest": "", "warranty": ""} + class FinancialContract(models.Model): _inherit = "financial.contract" - deal_tool_id = fields.Many2one( comodel_name="financial.deal.tool", string="Deal Tool", @@ -18,7 +22,58 @@ class FinancialContract(models.Model): related="deal_tool_id.deal_id", store=True, ) + deal_tool_model_id = fields.Many2one( + "ir.model", compute="_compute_deal_tool_model_id", store=True + ) + deal_tool_model_id_referenced_id = fields.Integer( + readonly=True, help="Id of the financial tool for this contract" + ) + # ------------------------------------------------------ + # SQL Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Default methods + # ------------------------------------------------------ # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ + @api.depends("deal_tool_id") + def _compute_deal_tool_model_id(self): + if self.deal_tool_id.type: + self.deal_tool_model_id = self.env["ir.model"].search( + [("model", "=", MAP_DICT[self.deal_tool_id.type])] + ) + + # ------------------------------------------------------ + # Onchange / Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # CRUD methods (ORM overrides) + # ------------------------------------------------------ + + @api.model + def create(self, values): + contract = super().create(values) + # Create financial tool associated + financial_tool_record = self.env[contract.deal_tool_model_id.model].create( + { + "description": contract.name, + "first_term_date": datetime.now, + "payment_date": datetime.now, + "amount": contract.deal_tool_id.amount, + "partner_id": contract.deal_id.partner_id, + } + ) + self.deal_tool_model_id_referenced_id = financial_tool_record.id + return contract + + # ------------------------------------------------------ + # Actions + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Business methods + # ------------------------------------------------------ diff --git a/views/financial_contract.xml b/views/financial_contract.xml index 2bc1b257e19f8d89147dcdbf155deed494a4a4e5..14195bcaa23a1b9c4c90b4fd1112082654dde20c 100644 --- a/views/financial_contract.xml +++ b/views/financial_contract.xml @@ -12,7 +12,8 @@ /> <field name="arch" type="xml"> <xpath expr="//field[@name='partner_id']" position="before"> - <field name="deal_id" readonly="True" /> + <field name="deal_tool_id" /> + <field name="deal_tool_model_id" /> </xpath> </field> </record>