From 9fb44d0240133d011dea9dab7f0d963ea0c190e0 Mon Sep 17 00:00:00 2001
From: thibaud <thibaud@le-filament.com>
Date: Tue, 19 Mar 2024 17:01:06 +0100
Subject: [PATCH] [IMP] Added condition precedent and linked it to contracts

---
 __manifest__.py                               |  4 +-
 models/__init__.py                            |  1 +
 models/financial_condition_precedent.py       | 87 +++++++++++++++++++
 models/financial_contract.py                  |  3 +
 security/ir.model.access.csv                  |  2 +
 views/financial_condition_precedent.xml       | 48 ++++++++++
 ...financial_condition_precedent_contract.xml | 53 +++++++++++
 views/financial_contract.xml                  | 33 ++++---
 views/menus.xml                               | 40 ++++++---
 9 files changed, 244 insertions(+), 27 deletions(-)
 create mode 100644 models/financial_condition_precedent.py
 create mode 100644 views/financial_condition_precedent.xml
 create mode 100644 views/financial_condition_precedent_contract.xml

diff --git a/__manifest__.py b/__manifest__.py
index a7e2b0e..97fde0a 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -1,7 +1,7 @@
 {
     "name": "Financial - Contract",
     "summary": "Gestion des contrats des outils financiers",
-    "author": "Le Filament",
+    "author": "Le Filament, Odoo Community Association (OCA)",
     "website": "https://le-filament.com",
     "version": "16.0.1.0.0",
     "license": "AGPL-3",
@@ -13,6 +13,8 @@
         # datas
         # views
         "views/financial_contract.xml",
+        "views/financial_condition_precedent.xml",
+        "views/financial_condition_precedent_contract.xml",
         "views/res_partner.xml",
         # views menu
         "views/menus.xml",
diff --git a/models/__init__.py b/models/__init__.py
index 2bddc2e..0c09abf 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -1,2 +1,3 @@
 from . import financial_contract
 from . import res_partner
+from . import financial_condition_precedent
diff --git a/models/financial_condition_precedent.py b/models/financial_condition_precedent.py
new file mode 100644
index 0000000..672c898
--- /dev/null
+++ b/models/financial_condition_precedent.py
@@ -0,0 +1,87 @@
+# Copyright 2023- Le Filament (https://le-filament.com)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import fields, models
+
+
+class FinancialConditionPrecedent(models.Model):
+    _name = "financial.condition.precedent"
+    _description = "Configuration of a condition precedent"
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+    name = fields.Char()
+    category = fields.Selection([("a", "Cat. A"), ("b", "Cat B")])
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
+
+
+class FinancialConditionPrecedentContract(models.Model):
+    _name = "financial.condition.precedent.contract"
+    _description = "Link between a condition precedent and a contract"
+
+    # ------------------------------------------------------
+    # Fields declaration
+    # ------------------------------------------------------
+    name = fields.Char(compute="_compute_name")
+    condition_precedent_id = fields.Many2one("financial.condition.precedent")
+    raised = fields.Boolean()
+
+    # ------------------------------------------------------
+    # SQL Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Default methods
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+    def _compute_name(self):
+        for condition_precedent_contract in self:
+            condition_precedent_contract.name = (
+                condition_precedent_contract.condition_precedent_id.name
+            )
+
+    # ------------------------------------------------------
+    # Onchange / Constraints
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # CRUD methods (ORM overrides)
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Business methods
+    # ------------------------------------------------------
diff --git a/models/financial_contract.py b/models/financial_contract.py
index 5de399d..bb32e65 100644
--- a/models/financial_contract.py
+++ b/models/financial_contract.py
@@ -44,6 +44,9 @@ class FinancialContract(models.Model):
     currency_id = fields.Many2one(
         comodel_name="res.currency", related="company_id.currency_id"
     )
+    condition_precedent_contract_ids = fields.Many2many(
+        "financial.condition.precedent.contract", string="Conditions"
+    )
 
     # ------------------------------------------------------
     # Computed fields / Search Fields
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 7f16336..bb0d685 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1,2 +1,4 @@
 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
 access_financial_contract,access_financial_contract,model_financial_contract,base.group_user,1,1,1,1
+access_financial_condition_precedent,access_financial_condition_precedent,model_financial_condition_precedent,base.group_user,1,1,1,1
+access_financial_condition_precedent_contract,access_financial_condition_precedent_contract,model_financial_condition_precedent_contract,base.group_user,1,1,1,1
diff --git a/views/financial_condition_precedent.xml b/views/financial_condition_precedent.xml
new file mode 100644
index 0000000..86b5c2a
--- /dev/null
+++ b/views/financial_condition_precedent.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <data>
+
+        <record id="financial_condition_precedent_form_view" model="ir.ui.view">
+            <field name="name">financial_condition_precedent.form
+            </field>
+            <field name="model">financial.condition.precedent</field>
+            <field name="arch" type="xml">
+                <form string="Conditions">
+                    <sheet>
+                        <div class="oe_title">
+                            <label for="name" />
+                            <h1>
+                                <field name="name" placeholder="Name" />
+                            </h1>
+                        </div>
+                        <group>
+                            <field name="category" />
+                        </group>
+                    </sheet>
+                </form>
+            </field>
+        </record>
+
+        <record id="financial_condition_precedent_tree_view" model="ir.ui.view">
+            <field name="name">financial_condition_precedent.tree
+            </field>
+            <field name="model">financial.condition.precedent</field>
+            <field name="arch" type="xml">
+                <tree string="Conditions">
+                    <field name="name" />
+                </tree>
+            </field>
+        </record>
+
+
+        <record
+            id="financial_condition_precedent_act_window"
+            model="ir.actions.act_window"
+        >
+            <field name="name">Conditions</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="res_model">financial.condition.precedent</field>
+            <field name="view_mode">tree,form</field>
+        </record>
+    </data>
+</odoo>
diff --git a/views/financial_condition_precedent_contract.xml b/views/financial_condition_precedent_contract.xml
new file mode 100644
index 0000000..32d1655
--- /dev/null
+++ b/views/financial_condition_precedent_contract.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <data>
+
+        <record
+            id="financial_condition_precedent_contract_view_form"
+            model="ir.ui.view"
+        >
+            <field
+                name="name"
+            >financial_condition_precedent_contract_view_form</field>
+            <field name="model">financial.condition.precedent.contract</field>
+            <field name="arch" type="xml">
+                <form string="financial_condition_precedent_contract_form">
+                    <sheet>
+                        <group>
+                            <field name="condition_precedent_id" />
+                            <field name="raised" />
+                        </group>
+                    </sheet>
+                </form>
+            </field>
+        </record>
+
+        <record
+            id="financial_condition_precedent_contract_view_tree"
+            model="ir.ui.view"
+        >
+            <field
+                name="name"
+            >financial_condition_precedent_contract_view_tree</field>
+            <field name="model">financial.condition.precedent.contract</field>
+            <field name="arch" type="xml">
+                <tree string="financial_condition_precedent_contract_tree">
+                    <field name="name" />
+                    <field name="raised" />
+                </tree>
+            </field>
+        </record>
+
+        <record
+            id="financial_condition_precedent_contract_action"
+            model="ir.actions.act_window"
+        >
+            <field name="name">financial_condition_precedent_contract</field>
+            <field name="type">ir.actions.act_window</field>
+            <field
+                name="res_model"
+            >financial.condition.precedent.contract</field>
+            <field name="view_mode">tree,form</field>
+        </record>
+    </data>
+</odoo>
diff --git a/views/financial_contract.xml b/views/financial_contract.xml
index 52a19e2..b61dee9 100644
--- a/views/financial_contract.xml
+++ b/views/financial_contract.xml
@@ -30,6 +30,11 @@
                             />
                         </group>
                     </group>
+                    <notebook>
+                        <page string="Conditions precedent">
+                            <field name="condition_precedent_contract_ids" />
+                        </page>
+                    </notebook>
                 </sheet>
                 <div class="oe_chatter">
                     <field name="message_follower_ids" />
@@ -50,7 +55,7 @@
                 <field name="name" />
                 <field name="partner_id" />
                 <field name="state" />
-<!--                <field name="total_amount" />-->
+                <!--                <field name="total_amount" />-->
             </tree>
         </field>
     </record>
@@ -73,22 +78,24 @@
                     <t t-name="kanban-box">
                         <div class="oe_kanban_global_click">
                             <!-- TODO: Ajouter css pour bandeau archivage -->
-<!--                            <div class="ribbon ribbon-top-right" attrs="{'invisible': [('active', '=', True)]}">-->
-<!--                                <span class="bg-danger">Archivé</span>-->
-<!--                            </div>-->
+                            <!--                            <div class="ribbon ribbon-top-right" attrs="{'invisible': [('active', '=', True)]}">-->
+                            <!--                                <span class="bg-danger">Archivé</span>-->
+                            <!--                            </div>-->
                             <div class="oe_kanban_content">
                                 <div class="o_kanban_record_title">
-                                    <strong><field name="name" /> - <field
-                                            name="partner_id"
-                                        /></strong>
+                                    <strong>
+                                        <field name="name" />
+                                        -
+                                        <field name="partner_id" />
+                                    </strong>
                                 </div>
                                 <div class="o_kanban_record_subtitle">
-<!--                                    <t t-if="record.total_amount.raw_value">-->
-<!--                                        <field-->
-<!--                                            name="total_amount"-->
-<!--                                            widget="monetary"-->
-<!--                                            options="{'currency_field': 'currency_id'}"/>-->
-<!--                                    </t>-->
+                                    <!--                                    <t t-if="record.total_amount.raw_value">-->
+                                    <!--                                        <field-->
+                                    <!--                                            name="total_amount"-->
+                                    <!--                                            widget="monetary"-->
+                                    <!--                                            options="{'currency_field': 'currency_id'}"/>-->
+                                    <!--                                    </t>-->
                                 </div>
                                 <div class="oe_clear" />
                             </div>
diff --git a/views/menus.xml b/views/menus.xml
index 20baa72..e16c3f6 100644
--- a/views/menus.xml
+++ b/views/menus.xml
@@ -17,17 +17,31 @@
         sequence="10"
     />
     <!-- Configuration -->
-<!--    <menuitem-->
-<!--        id="menu_financial_deal_config"-->
-<!--        name="Configuration"-->
-<!--        parent="financial_deal_menu_root"-->
-<!--        sequence="100"-->
-<!--    />-->
-<!--    <menuitem-->
-<!--        id="menu_financial_deal"-->
-<!--        name="Partenaires financiers"-->
-<!--        parent="menu_financial_deal_config"-->
-<!--        action="financial_deal_partner_act_window"-->
-<!--        sequence="10"-->
-<!--    />-->
+    <menuitem
+        id="menu_financial_contract_configuration"
+        name="Configuration"
+        parent="financial_contract_menu_root"
+        sequence="10"
+    />
+
+    <menuitem
+        id="menu_financial_condition_precedent"
+        name="Conditions"
+        parent="menu_financial_contract_configuration"
+        action="financial_condition_precedent_act_window"
+        sequence="10"
+    />
+    <!--    <menuitem-->
+    <!--        id="menu_financial_deal_config"-->
+    <!--        name="Configuration"-->
+    <!--        parent="financial_deal_menu_root"-->
+    <!--        sequence="100"-->
+    <!--    />-->
+    <!--    <menuitem-->
+    <!--        id="menu_financial_deal"-->
+    <!--        name="Partenaires financiers"-->
+    <!--        parent="menu_financial_deal_config"-->
+    <!--        action="financial_deal_partner_act_window"-->
+    <!--        sequence="10"-->
+    <!--    />-->
 </odoo>
-- 
GitLab