From 2e1d4070f397ed6035eb3b751c45d170942d067f Mon Sep 17 00:00:00 2001
From: thibaud <thibaud@le-filament.com>
Date: Mon, 25 Mar 2024 10:46:40 +0100
Subject: [PATCH] [IMP] Improved contract generation

A check is performed before generating contract, if a contract has already been generated + the button disapear if so
---
 models/financial_deal_tool.py | 23 ++++++++++++-----------
 views/financial_deal_tool.xml | 21 ++++++++++++++-------
 2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/models/financial_deal_tool.py b/models/financial_deal_tool.py
index d1118e6..a67089d 100644
--- a/models/financial_deal_tool.py
+++ b/models/financial_deal_tool.py
@@ -1,7 +1,7 @@
 # Copyright 2023- Le Filament (https://le-filament.com)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
 
-from odoo import models
+from odoo import fields, models
 
 
 class DealTool(models.Model):
@@ -10,7 +10,7 @@ class DealTool(models.Model):
     # ------------------------------------------------------
     # Fields declaration
     # ------------------------------------------------------
-
+    contract_id = fields.Many2one("financial.contract")
     # ------------------------------------------------------
     # SQL Constraints
     # ------------------------------------------------------
@@ -43,12 +43,13 @@ class DealTool(models.Model):
     # ------------------------------------------------------
     def generate_contract(self):
         self.ensure_one()
-        contract = self.env["financial.contract"].create(
-            {
-                "description": self.deal_id.description,
-                "name": "An incoming sequence",
-                "partner_id": self.deal_id.partner_id.id,
-                "deal_tool_id": self.id,
-            }
-        )
-        return contract
+        if not self.contract_id:
+            self.contract_id = self.env["financial.contract"].create(
+                {
+                    "description": self.deal_id.description,
+                    "partner_id": self.deal_id.partner_id.id,
+                    "deal_tool_id": self.id,
+                }
+            )
+
+        return self.contract_id
diff --git a/views/financial_deal_tool.xml b/views/financial_deal_tool.xml
index a40df18..11d5c3d 100644
--- a/views/financial_deal_tool.xml
+++ b/views/financial_deal_tool.xml
@@ -1,21 +1,28 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <odoo>
     <data>
 
-        <record id="financial_deal_tool_view_tree_inherit_manager_tool"
-                model="ir.ui.view">
-            <field name="name">financial deal tool inherit in manager tool</field>
+        <record
+            id="financial_deal_tool_view_tree_inherit_manager_tool"
+            model="ir.ui.view"
+        >
+            <field
+                name="name"
+            >financial deal tool inherit in manager tool</field>
             <field name="model">financial.deal.tool</field>
-            <field name="inherit_id"
-                   ref="financial_deal_flow.financial_deal_tool_view_tree"/>
+            <field
+                name="inherit_id"
+                ref="financial_deal_flow.financial_deal_tool_view_tree"
+            />
             <field name="arch" type="xml">
                 <xpath expr="//field[@name='amount']" position="after">
-                    <field name="deal_id" invisible="1"/>
+                    <field name="contract_id" invisible="1" />
                     <button
                         name="btn_init_contract"
                         type="object"
                         icon="fa-share"
                         title="transform into tool"
+                        attrs="{'invisible':[('contract_id','!=',False)]}"
                     />
                 </xpath>
             </field>
-- 
GitLab