From 88a1553c2a0124b817524c1378270b98539360f8 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Wed, 24 Jul 2024 18:18:07 +0200
Subject: [PATCH] [REF] refactor with deal flow dependency

---
 __manifest__.py                               |   7 +-
 data/sequence.xml                             |  17 -
 models/__init__.py                            |   4 +-
 models/financial_condition_contract.py        |  47 --
 models/financial_contract.py                  |  69 +--
 models/financial_deal.py                      |  34 ++
 ...{financial_condition.py => res_company.py} |  31 +-
 models/res_partner.py                         |  10 +
 security/ir.model.access.csv                  |   3 -
 security/security_rules.xml                   |  41 --
 static/description/icon.png                   | Bin 11106 -> 11292 bytes
 views/financial_condition.xml                 |  48 ---
 views/financial_condition_contract.xml        |  47 --
 views/financial_contract.xml                  | 406 ++++++++++++++----
 views/menus.xml                               |  56 +--
 views/res_partner.xml                         |   4 +-
 16 files changed, 430 insertions(+), 394 deletions(-)
 delete mode 100644 data/sequence.xml
 delete mode 100644 models/financial_condition_contract.py
 create mode 100644 models/financial_deal.py
 rename models/{financial_condition.py => res_company.py} (62%)
 delete mode 100644 security/security_rules.xml
 delete mode 100644 views/financial_condition.xml
 delete mode 100644 views/financial_condition_contract.xml

diff --git a/__manifest__.py b/__manifest__.py
index 7e17d40..dca11bc 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -6,19 +6,18 @@
     "version": "16.0.1.0.0",
     "license": "AGPL-3",
     "depends": [
+        "financial_deal_flow",
         "financial_partner",
     ],
     "data": [
-        "security/ir.model.access.csv",
+        # security
+        # "security/ir.model.access.csv",
         # datas
         # views
         "views/financial_contract.xml",
-        "views/financial_condition.xml",
-        "views/financial_condition_contract.xml",
         "views/res_partner.xml",
         # views menu
         "views/menus.xml",
-        "data/sequence.xml"
         # wizard
     ],
     "assets": {
diff --git a/data/sequence.xml b/data/sequence.xml
deleted file mode 100644
index c43605e..0000000
--- a/data/sequence.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<odoo>
-    <data noupdate="1">
-        <!-- Demandes sequences -->
-        <record model="ir.sequence" id="financial_contract_sequence">
-            <field name="name">Contract number</field>
-            <field name="code">financial_contract_seq</field>
-            <field eval="1" name="number_next"/>
-            <field eval="1" name="number_increment"/>
-            <field eval="False" name="use_date_range"/>
-            <field eval="False" name="company_id"/>
-            <field name="prefix">FC</field>
-            <field name="padding">5</field>
-        </record>
-
-    </data>
-</odoo>
diff --git a/models/__init__.py b/models/__init__.py
index 6f8db4a..e4d34bb 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -1,4 +1,4 @@
 from . import financial_contract
+from . import financial_deal
+from . import res_company
 from . import res_partner
-from . import financial_condition
-from . import financial_condition_contract
diff --git a/models/financial_condition_contract.py b/models/financial_condition_contract.py
deleted file mode 100644
index b0b0f2b..0000000
--- a/models/financial_condition_contract.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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 FinancialConditionContract(models.Model):
-    _name = "financial.condition.contract"
-    _description = "Link between a condition precedent and a contract"
-    _rec_name = "condition_id"
-    # ------------------------------------------------------
-    # Fields declaration
-    # ------------------------------------------------------
-    name = fields.Char()
-    condition_id = fields.Many2one("financial.condition")
-    contract_id = fields.Many2one("financial.contract")
-    raised = fields.Boolean()
-    milestone = fields.Date()
-    comment = fields.Text()
-
-    # ------------------------------------------------------
-    # SQL Constraints
-    # ------------------------------------------------------
-
-    # ------------------------------------------------------
-    # Default methods
-    # ------------------------------------------------------
-
-    # ------------------------------------------------------
-    # Computed fields / Search Fields
-    # ------------------------------------------------------
-
-    # ------------------------------------------------------
-    # Onchange / Constraints
-    # ------------------------------------------------------
-
-    # ------------------------------------------------------
-    # CRUD methods (ORM overrides)
-    # ------------------------------------------------------
-
-    # ------------------------------------------------------
-    # Actions
-    # ------------------------------------------------------
-
-    # ------------------------------------------------------
-    # Business methods
-    # ------------------------------------------------------
diff --git a/models/financial_contract.py b/models/financial_contract.py
index e0e30e7..cd398df 100644
--- a/models/financial_contract.py
+++ b/models/financial_contract.py
@@ -1,55 +1,11 @@
 # © 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import _, fields, models, api
-from odoo.exceptions import UserError
+from odoo import models
 
 
 class FinancialContract(models.Model):
-    _name = "financial.contract"
-    _inherit = ["mail.thread", "mail.activity.mixin"]
-    _description = "Financial Contract"
-    _order = "create_date"
-    _check_company_auto = True
-    _rec_names_search = ["name", "partner_id.name", "partner_id.member_number"]
-
-    name = fields.Char("Numéro", readonly=True)
-    partner_id = fields.Many2one(
-        comodel_name="res.partner",
-        string="Coopérative",
-        domain="[('is_cooperative', '=', True)]",
-        tracking=1,
-        required=True,
-        index=True,
-    )
-    state = fields.Selection(
-        [
-            ("init", "Initialisation"),
-            ("running", "En cours"),
-            ("done", "Terminé"),
-            ("cancel", "Annulé"),
-        ],
-        string="Statut",
-        tracking=1,
-        default="init",
-    )
-    active = fields.Boolean(
-        default=True,
-        tracking=1,
-    )
-    description = fields.Text("Description du projet")
-    company_id = fields.Many2one(
-        comodel_name="res.company", required=True, default=lambda self: self.env.company
-    )
-    currency_id = fields.Many2one(
-        comodel_name="res.currency", related="company_id.currency_id"
-    )
-    condition_contract_ids = fields.One2many(
-        "financial.condition.contract",
-        string="Conditions",
-        inverse_name="contract_id",
-        domain="[('contract_id','=','active_id')]",
-    )
+    _inherit = "financial.contract"
 
     # ------------------------------------------------------
     # Computed fields / Search Fields
@@ -58,24 +14,3 @@ class FinancialContract(models.Model):
     # ------------------------------------------------------
     # CRUD (Override ORM)
     # ------------------------------------------------------
-    def unlink(self):
-        """
-        Restrict contract deletion depending on state
-        """
-        for contract in self:
-            if contract.state != "init":
-                raise UserError(
-                    _("Seuls les deals à l'état Projet peuvent être supprimés")
-                )
-        return super().unlink()
-
-    @api.model
-    def create(self, values):
-        # On récupère le no de demande
-        name = self.env["ir.sequence"].next_by_code("financial_contract_seq")
-        values["name"] = name
-
-        # On crée le record
-        res = super().create(values)
-
-        return res
diff --git a/models/financial_deal.py b/models/financial_deal.py
new file mode 100644
index 0000000..6511bcd
--- /dev/null
+++ b/models/financial_deal.py
@@ -0,0 +1,34 @@
+# © 2019 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import _, models
+from odoo.exceptions import UserError
+
+
+class FinancialDeal(models.Model):
+    _inherit = "financial.deal"
+
+    # ------------------------------------------------------
+    # Computed fields / Search Fields
+    # ------------------------------------------------------
+
+    # ------------------------------------------------------
+    # Inherit parent
+    # ------------------------------------------------------
+    def action_stage_validated(self):
+        res = super().action_stage_validated()
+
+        for contract in self.coop_contract_ids:
+            if not contract.company_id.contract_sequence_id:
+                raise UserError(
+                    _(
+                        f"Aucune séquence configurée pour les contrats de la société {contract.company_id.name}"
+                    )
+                )
+            if not contract.number:
+                contract.number = contract.company_id.contract_sequence_id.next_by_id()
+        return res
+
+    # ------------------------------------------------------
+    # CRUD (Override ORM)
+    # ------------------------------------------------------
diff --git a/models/financial_condition.py b/models/res_company.py
similarity index 62%
rename from models/financial_condition.py
rename to models/res_company.py
index 02b68cf..cc20680 100644
--- a/models/financial_condition.py
+++ b/models/res_company.py
@@ -1,18 +1,18 @@
 # 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
+from odoo import api, fields, models
 
 
-class FinancialCondition(models.Model):
-    _name = "financial.condition"
-    _description = "Configuration of a condition precedent"
+class ResCompany(models.Model):
+    _inherit = "res.company"
+
+    contract_sequence_id = fields.Many2one("ir.sequence")
 
     # ------------------------------------------------------
     # Fields declaration
     # ------------------------------------------------------
-    name = fields.Char()
-    category = fields.Selection([("a", "Cat. A"), ("b", "Cat B")])
+
     # ------------------------------------------------------
     # SQL Constraints
     # ------------------------------------------------------
@@ -32,6 +32,25 @@ class FinancialCondition(models.Model):
     # ------------------------------------------------------
     # CRUD methods (ORM overrides)
     # ------------------------------------------------------
+    @api.model
+    def create(self, values):
+        # Crée une séquence dédiée à la société
+        res = super().create(values)
+
+        res.contract_sequence_id = self.env["ir.sequence"].create(
+            {
+                "name": f"Contrats - {res.name}",
+                "company_id": res.id,
+                "number_next": 1,
+                "number_increment": 1,
+                "use_date_range": True,
+                "prefix": "C%(year)s%(month)s",
+                "padding": 4,
+                "implementation": "no_gap",
+                "code": f"financial.contract.company_{res.id}",
+            }
+        )
+        return res
 
     # ------------------------------------------------------
     # Actions
diff --git a/models/res_partner.py b/models/res_partner.py
index 433e420..1812005 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -45,6 +45,16 @@ class ResPartner(models.Model):
     # ------------------------------------------------------
     # Actions
     # ------------------------------------------------------
+    def action_view_contract(self):
+        self.ensure_one()
+        return {
+            "type": "ir.actions.act_window",
+            "name": "Contrats",
+            "res_model": "financial.contract",
+            "view_mode": "tree,form",
+            "domain": [("deal_type", "=", "external"), ("partner_id", "=", self.id)],
+            "flags": {"mode": "readonly"},
+        }
 
     # ------------------------------------------------------
     # Business methods
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 74d757b..97dd8b9 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1,4 +1 @@
 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,access_financial_condition,model_financial_condition,base.group_user,1,1,1,1
-access_financial_condition_contract,access_financial_condition_contract,model_financial_condition_contract,base.group_user,1,1,1,1
diff --git a/security/security_rules.xml b/security/security_rules.xml
deleted file mode 100644
index 7623004..0000000
--- a/security/security_rules.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" ?>
-<!-- Copyright 2022 Le Filament
-     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
-<odoo>
-    <!--
-        Category
-    -->
-<!--    <record id="module_cgscop_category" model="ir.module.category">-->
-<!--        <field name="name">CG Scop</field>-->
-<!--        <field name="sequence">10</field>-->
-<!--    </record>-->
-<!--    <record id="module_cgscop_administration_category" model="ir.module.category">-->
-<!--        <field name="name">Administration CG Scop</field>-->
-<!--        <field name="parent_id" ref="cgscop_partner.module_cgscop_category" />-->
-<!--    </record>-->
-
-    <!--
-        Group user
-    -->
-<!--    <record id="group_edit_all_ur" model="res.groups">-->
-<!--        <field name="name">Modification des coopératives de toutes les UR</field>-->
-<!--        <field name="category_id" ref="cgscop_partner.module_cgscop_category" />-->
-<!--    </record>-->
-
-    <!--
-        Group rules
-    -->
-<!--    <record id="res_partner_rule_ur" model="ir.rule">-->
-<!--        <field name="name">Modification des partenaires de mon UR</field>-->
-<!--        <field name="model_id" ref="base.model_res_partner" />-->
-<!--        <field-->
-<!--            name="domain_force"-->
-<!--        >['|',('ur_id','=',False),('ur_id','=',user.company_id.ur_id.id)]</field>-->
-<!--        <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" />-->
-<!--        <field name="perm_read" eval="False" />-->
-<!--        <field name="perm_write" eval="True" />-->
-<!--        <field name="perm_create" eval="True" />-->
-<!--        <field name="perm_unlink" eval="False" />-->
-<!--    </record>-->
-
-</odoo>
diff --git a/static/description/icon.png b/static/description/icon.png
index d96ec15a443e96f0ace3fb5543d3a419c87c49ea..a04374ee2970f59b609e8af5a93b9f5be586ece4 100644
GIT binary patch
delta 8086
zcmaD9HYZ|&ay_4JRY*ihP-3}4K~a8MW=^U?No7H*LTW{38UsVct+z9yrz!8wbNO${
z#ox%n*(Ad^Kf97mZl8J3DyzS%9>1$zSHDMR>y%eD2A&E6f+x71@BjC??f-+&C07Ej
zM7`bW7PoY|UbDRJzPQIf{WjX%KfikI_l;lv{`*kraAWGtXWv=tzt;Xc{_l(Bfo$U+
zOZQ7?oPE##<&)h0zXlWbnB7c&vj2Paf`4)vr(Zi%@f*aQ?%HbpyNvVmo^9`6$0t4z
z{<C_^`{jQx|L=W~`_wM-$&)F{_a~jsX1Zyw`s5)0<7lJFk5nF(r`@lZKP!&$XXu<q
z=9{_f)1H0~|CRKg-}B_xt@axp*Z)qqcK)sYclE!C|EmvtX!$YQ`uW$&=kLE|cYZ(q
zw5I0WUEMp?ajT`53SIgYcjb7{y!bg5oRxKYtM~Nwf4V)d{P|s`7qLrfj*F_lpIRk!
zsVLafy0_$V<u+~IWf4z0Hi|}0nqR9syCl+*?Ni8~x$7d{RX%syCie2|o2ln_E_uH1
zZ~e}@UcJ)qkIbATamHBp;QoKI@AcVtU00kRlrw*0QrsiggC;h`|IS9LsNCh3c`5v$
z|9ijw`E0f3UoAT~9uRz<-LdjzukP`{I-$9ifj9SM>E5j4cj(x$-Du{NlMZV%vsY=(
z>R9R`BmGm7=gJC}nM)K_o=Te*RJ2ZIdFTDv**dn*>$^^6o6m7oG70xuJ#m5KI<6yZ
zb!$uvOiZ!^udZ6=ySr~z_R6U2t*@S#>qHxF%}P7Ft9M#-=B=#F*PLGGmb{cKx)Qhh
z>$Ph6=GlC1axu0Ri9MRe=Z#9QWo|xecbv&?wN7m5&8)<)rrX}^dDt1d{q45ja_X`R
zN={u2?w?!sOH#ak#oe0ISEJY8E&DAyKhpc*)NAwa?VrE(%S6*kqo?Y((y#5f@+P_C
zNy(yl#ztzY6AM4{Fl2n3b99>5#0M)s&pFDsIaM@m<-9p_ZIV+q%u%Vjoc`|LsXOJB
z+)Mu~-gDCZS<~`&_b2Xru=2N3vHkP6;*q!4nQ1@!kaFVmg=Q(^r`JQf>lMmZM@7w*
z^pyTx!qHa0Shtkn+%+-7kNugl#ci48+N&4N>Qa*}IQzN#$={1+e_pcgJG(16Z+lA8
z1kU?b$?TcYGc#`b?69y2;hpnQ>gk%?>2qwEe{>c7F8c6cz0TwR=Ny<sKC1+6ec*Vc
zxcYH!)z<UNPIP_?aaQ>o{JwPgg}3wSMfe5xEnm91cKzKc@0srGo&B_Eb=E!+hLwR6
zssb1D>g5+KpZtB#^F_7W4{kL#TYZ^*=ZTWN<@c_=KY4VMOh;C4V)(PUxla`@e=7d|
zV0-^Z+s5y2t7qNm=n^=iI`#4$wwqhmAJd+a>L4z*p=&M2=C0bSbG~Q(edAnMwyM75
zlu6-&`m&_N&5Iw(9SDv4Q8fMeiMszk)NkJj=2<Q4Fwa$bUCNz9YdShPbIiB;a2&mJ
zU~P7L=zOc`?T5}b&9T(JI=8b)^n8@u_DRh*ZZ$L}EvooYI4kg=QP%zCI@MQAyz}a(
zdK!BB?>j&3fqj~>5!dRadp%Y-#!aud*Sz~w<<-ZLOI?KP0~*)Oym9Bn+dUseWQ(^4
z`Dgr?6;@JMai+Ac)OR|2p!)m9?FXV_C3lB;Nv&&7WB<3N<zBzaj+N<eTNJ*^9?zMc
zdL%d5@kn`Uce;;S+u^2D=GPsY7&2~ztcd=u_E&lt`;=7PtFe7NI$u`qyuMTU->+|9
zp6&TnuJh>S|K?jNwhr|ljVeC>IdpUFo#azm%}Jm3S#_wqjJvS6xN@J=+<k$QY-az@
z_+aPdtZ*k|Yxlo9dl^nT)ZAj!lMDO0A?}b=u>DP~kJCz|R?aZqmv?35;qXtMzBA5t
z-@K)l+L<%iM<;Ef>4muL)0>1|M5N1K-5auIx}&OS0h6+EtdWH&`yBmMr|Z{jit~HN
z)i&QJFnmtanums36)Xx>YAS^jrB<Z(or?I*w0yU|;V$#un&pv|2mBis2Lv2X5OqlM
zxnNgP>c}d#t@>P~)eZX@ZGETwUut~kkq(d5xw?(r_1@Yurn-Tqs`IUOFuE{?U6V<l
zc}9-+$7)d>MzaNnr`=UcP`sgfc6nF5X{DrMR55=E$MGFfYKLAuonh0g<T0aXlmFdC
zrw`8OtdQxEycKZEk8AHl)0flRB+Ht;gI{rlUeao~8g=VG!^RJy&pNJ2N1W5EcYMuU
zW-rHI->`R{)wW&P_e|dAE#3Lnu=!WC+`}!k3ag`@-`U02mc`(g_b`k3Uj8>3CqIs6
z-}+~~yUYKuhuu!`J=FBo@|v8TQ!q=6rOvNc{Ty$9G#x$onbG3eUcbs6uZw-=ysYSr
zF7PxlE$jGhneb%OpKaNV5#^s>-wVGQ6ccgf<D4kp-79=g9DBJ#_K{lg4*RIJ3rZe8
zOyZl)*MGg0)3tinhOkl{E~8B^|5#03v}Tn>W0U2B`bxk2#*QU^t#3Q>9ovpER4;IA
z$hFfFyROmytx><`0?TxhwhLl%o1B(To+nt!ciH*)qk`RAx0h|XxGHalLmF%36A5!a
z8G$xVBet~aC%e?<UihR`cGz@TX2k0|y-VbU`sB}5yn83K_lcUV$?hrVi!OIpmz<W5
z7xkR_B~VJJe|mlHz02zoFD9E8_ue_R;o977hqpcSNX(Tld_UWK=Zh!nb3&MlPfuF#
z)K~F_@}9;;(ff5*PCYs6G|$14=L*@^UpVM=jiJ1@a)a8@Q*ZV-M5!?7_XziVX0m(s
zs91X6O~yqZ)%B_;+)6qp`JVS?lUqZinTk_u!J^5!bA6ThqhF~7Y1g+lUJCSlTll$!
zC0=PqUDd?c6MnA8XXvD<JWJi;7WBH+r+j9>-EW_s#P6EIVSdZ<_vHTFmo&OG0%ouH
zJ7ddEkNPE@3z(%}wLOwrV?2Xb=HX^fxAiUeGZlB;Ic~k>+3hyns1?n}m!(uKRBAMs
z&>+f{w6LRFr9Oc@Qt_z8$L=7G`nRDx>~})EL|6;s4JN)RE}lC@M5b}-X3lrA^B1g@
zd1Cd>$jtS!$PbTqJU$y)k7#O&Z4Kv=-TqvM+3>f^iRD#)Uw=AT{L%5c(LO_UB{u(q
z3ad6>XrC*_C*vKPz{*k+T(s?!%?#F%)S~FD7PX?E$&02;+o|v}@XuQYF>c{by?}Z?
z(+3raEFy2c&N8_a?3=E)zHs)OKD)d_Jeq$p7G(VuO*lMX>4!E$yS?j&Vg|`YwYQR7
zn8T;?zGd$c+38le(n#u|d7Au`FV8(CCLM`6>2l3N^H;T-=9hLpcQ3p012zFsos%!M
zrKvbeJ`0)_n6W1=<OIW;hb(%hm*yS2oclhkzEkDy?@SY3y^Aw0T0}bSF%x#{y~8cY
zP^+@`;&F%dS{denJN)kbe#yXHY$@)k^n1NX1mACl?JBM3YL0p_|4FglK0{sb!>832
zBDLb#r}!<34*#&SNZ8<UV(|}QUFp1##&@%v_+4h_T@(GyWb?vd!o9QI4E}r6${7`Y
zH}0G*P+lK!BGBsLc85>WIpY5~bn2U@GDJ+6*2vv*K4Yu?GY#F!kaZ8$1rsj5IA4(=
zf6i&Un%>f{9qV1rFW`-7z0ei6>F$H6m-xab81g7Zc7)jfoYu1CfXt0`ZGt`*<*Q2m
z*!e~kCNJ{;y+4IrXU>A^1LwQNPtW`N?Tc$ymzfRYq%QUs_4B-%>x5sgR`@gFZ|~97
zUqr9`Q2Q$z>fU?O)q2JEZ*?0Ap0ggZEuSeFb|~=0MvuRT?kA`zN4~4nOj|4Gll<b|
z_C~K~joycT^xo4_@wE2gX}I)I$j76VL-6ynaQnUILS$BUn|?^BU1(OnNa|qX_k|md
zq<-C-X}>f!(sQ2GQUApH$bJz4d-YPMh5IJHs2B3^c4pcB#Zz|6`(tMq#dpg-yW%#_
zPM=GQdB6ARj(^T8lm4mC)XIK1SE_F2+!S7az6HzYxaynee9srq{-m6+KWpNl_uF0K
zZ(lz0@xxWl@9EXIvJ`KHhTK`^U>u?s`{mY${VcoMyEmRlH(Q?jByH#A^*`zjjk-U5
zofY2v?Q58jSM%%hM#n5paQ$MEF1h_qQPgw>htJg)sm>{Pf9#5J+s}1qv99XVAB!X=
z8XvhL#W&$*X-K7BPs*aB94GcVS(h+sOnQD`Pxo@&u4hcIjF)yCt(IE9Xd&y?)_H$K
z4tM@K>>Bk*VpqpG)0%IlNm;Y2eg5cN*00x1KELVmr=#}Q!u#zvye>BUaU^q|Y_X>6
zD^<5CADe7*pKM*(t0Jo1-P*r8uU}RnRp^CAh@^XYmi6zCr4!ZmY<5$))tn=vAMyFQ
zTj++vW-m-MBW1Mmz7=ft3BMtHB=`FKXYYKsCtSa+^WyUS44qH%R#wi{@elM2H<_)n
z(bd~mzbZhhQ&0XWQ`buFEA?TI=4^8;SlBFd^r^t<V&<>b8?-&yG(WM2a!4LBN=bKK
zuUwHo^}`S0tXBn1+Rwc9XG$JiQpIz-?KkJYhHTmLK$EFkCToV52yov{NvKd@bMjph
zX|H<!S8(2Zx5UKzGmFB0csLe|D1N!^tGu<v`gn~eTYcVdv7X;s&wcERR@TyKd$nY`
zjo<EDpBF4<xOs1?=(G<vr~d7}&A={F?o_VxmOJSK54YEkFF}25Qg=MQv8O(rxv=%C
zecM6q9lq=gXGCxFl?F2lU$z(MkIig0UY+)pbDz)G3nz9S5ueeg=Eq&L?a#-v9?m(=
zYyREo=3r+E`rLl4ey4Bg>`!%FygyHVIR3h`P(bIF+Jz5uwu>}7@U6_*wZvA}N5T5K
z+ssAwq2KKPI4PwY1uNOe?fbCLbZ4Ne@P@-v_%6Hi<TC1fw6l8_ke*v&DQ@mR`^$~+
zHS)Kd8aHUTaxB}Rw|q_c@t$LA=O@YiOWgFYe!>5{jT)ahxG&Dp|NK1sv@l<2h)d>P
z)0-aec$M$6%kTLp@%X1S%cT&ze_S8S^Ys2~etvAf9LE)_;D^r=EncLm&CgoK^kSP>
z4$sZsKJE6`zPfK@mfc(a{loo79rX+xp=-`DFfg`GUM?snr6tPF-DQ!oqA9^KWXa;N
zg&d+zYcH&7KDji0@;yQ2`Zesw|5lX0FZ|9YkfpjTQdYQO+3hqVIpNDQLk&N4F|b|e
z)i{=tCRsdbio@-XrTp^o@0Dy;|J`ZtzJAtLi3h@+=`#~=9g#j_JbT;0%J~*YxHfs!
z_}S!LV(paQxvt{RG0XRx4j4P9X<7QqD2aX6U9-hNdxq3UlfsCrC8xwM$*r!Rv)v+l
zDOdKL$@>jvTn(SL)2~>fP$!8~$VFqtf)1e^myD~P8z(IJ8zKFF!t3cLmQGmB;nv4G
zWuar)-v{*{c1LTQo4!<KO?G(R{kW!wp)qzrT<M(m$;VgDXZV-?z$^dPX;Xz?o>f~{
zw)Qvd%YE=@*GkRm15f!3ex#gO_QtDjmXnDd`=0q1%~KoxMK4G{`+Duh{>$tNuCc0l
z4b9F8CjK{H=ia+}_15kE=~93HG93R|bh5eBwqvugus4&kWn!vDT8c%gZc>tksji8o
ziIHwnig}W5s&QIUqM?zonNiB*g`$eeCP}GAhDnCH7Dnc#x+aOqX}U?KW@fsni6$nd
zsfmfk#%3v#pNeWIn_8x&873v`rWhC}>YAh&8tGaXm>TI?BqpVprX-r0TBI6JHV}*9
zGcq(cHZU_XwKOs?F)^MzOYEwOfrYWTfl0E7uA#9-qOOUFWs+`^nTe&Yg=K20rG=@1
zX`+$g<jLZm0_M6##vz7AR>lTaMyA>ZMw{P=XLE>sO#O17fq{W7$=lt9;Xep2*t>l4
z<Xi>$dUkOxIms^*CT(C~;M?x$;uunK>+Rf|;j`1L4%FXQSL9St<UErk#%|y((0x#?
z^RC*=H@>sZy*x5mZRR-{|7FMb&HTTh-Z8)G>g^|6GX2!&mI-aD?6mb%pL=f35ov`D
z2WMQ3xbcP~mm@b`pMkYf)Vqo0{Ck;rk7FKnUoZc*JO8<U@B7c1YaYJX{oaOGhWS=Q
z(E%n2fimVmg&m*LMP9J)W3kJ$uRFB=m-DGE4Ymii57LeD4#`$D#&4Im|0vB+`t)SI
zP-M&R3EY2<Uo5}>)3TxH%iVIX@MQ{ndwM@in7J&3wN7ahhvqpG`@lx^RGk))N=MdJ
zsWL4hD}%!?r8|1G)^mxTm{=$fq~gxHDOINBD~Gb=qzPJ8p~oB|_?3DT4sjreCJyBe
z10(`PQmID)A^9fc(j%Wqp39TxA3ZdA>QoEw(>Es1_TF}}BX0TaPuDM*^w!(ec5zRh
ze8iNue(|bLmw#26EZDoge`!U`8jtkEoJh8L>(@MyOt(GSXH)Wu-}>dzM%yrLcDa=b
z5`4vF6*B^K)Y6tLHrS@ayx#J4<*}O$rs>lC71;^fBPzCjRamvCAT7gViRX5SV@odU
zp4Z{+y{&y(>eJe=xZK>Q>%WID*6O-3(eKcdXdRo!YmV2?nj5#5K}Jk_{gy2sel70r
zl6|RiCV1*pk(;uamKv2|+WMyQ4|;!98LGs#6i%B~s~>qGEYW;+<;tH7`Igd0CY5kh
zap!E?A}8S*SP-GJ=f;(mWtlY<Yx`#`>omA6_C?BQ@xdK;lO8U8mX;JXXEHPMZoBGR
z+f+5@PG4N@`T0|$Sbf~ub!zI(_rCWDsa*z{aOu)1?W<R3lx;LoI>WZ)XQ8j|uGpyM
zf{A7dXHT>9eJI~;@>DF*OycsM8+Xp!H#g}paLT$-bjIfXl`XHAOq{k_+9gorO&a%k
zb5p_VCU(2ZdQa%xkWw^0lQv!b^QTW=qGIn(TXyGV)yLxSa|YSp?;NQ&?fscBL9@U8
z2b=azt_v~y`WMcO)bsbx{Zac=vUf_P&JAC+Gi=KHmI{1cC}3V|w`XDp$L3g(D4iD~
ztvi+pUN-sn`<1BOyVrNW^laGDsa4Q>_E`7UQj624PMkk`biwt_BAo_LKVGmcYc6JH
z-oeZ$m}b2~U-RLc3j(X}-&|Tz6J5VO&Fsn3k5$>)=RVbXiWVe?i9Kay6}k2HN%WdO
z>sC(=+#jDbL*6Q4t+wXV{H(0YkN#T7^4+t!QZ`*D+b}J)u;72)J*$e2qRo+MGvuYb
z%gpMpUOE)FTXy<yHRsQte{5H9<8WL2de+LUT(i1s-z2s!UCO_ATiS)!mI0BTCUTGO
z*XzZllx2Fh{7l>|ZQTC)RmR#?N>bembBkU#t<swF=EZ}}jg3>bIfg{7m8pJYuyyHD
z&HNhk7hh%8-0H8+n|J?PoM>WQ22YhO+uv)vjW;t~LZ`HIC0}}3QC4sI`}@1t@0y&+
zVPgHEp}DgSg4%DgIc=1Pk9q(6)eVV@yeVO>WxMNH_U`VDKB(|MeviZX-aw^`FLwRQ
zoffBm=uOG2&z~!|?U{3D&6*>{$#wSfF}qyO_e#H>bZq|)jmS%W596*rdiJO0p2Zcn
zg?Ifb<K^YQ#i{PtB*Oc<=1=(XREAk{l`2bbCTA2mwVW(T+Z%W1^Ss?m_m1tc0qOAd
z<gA+8_gqT4K2W5Uf87@qy)eG2y?@GFXFcocVqbRSGB<b4-TV69L2Aa&KNqgsJ-b_Y
z`}<X!_f)RXU3o6)?8%2akGa)VE>O+9es99{)9lmrA4<vY%vX5x@wesOt4E)n^b}MJ
zp85T^<@LK~Umj#+(k|>+rSazc*{3&z+gEC9@76BemXiK?%H@;m>!YG3FOmHCv*Q0F
z*O<l1N8V{LRQ;**D=qu<^u&j4amNG_%{rE4Rxs6_+Z9t&w%1;8@`^5})}x2)Wh_4(
zSTyHo$|KF?leb4lO){Iho0;+6?t;d36CWP&dHnIW<>Ob6zFbInRI1W;(jZc-iSb<7
z&W!i_r-^I_Ippo(_LZ8I6|D8wlZ-x=?44Xu^Rw&cE1ptqi6?ux#VewlyAC<++f~%s
z|NHmlM+$Q}HZ$5ZGQ^jZUaZ?|uc^JN+~UX4$NmAqL6eGDuTPqLwttRaQq&y(-|IFC
zaH=o)d7b-trHTD~`@a7CiuHXQli3*G-OLl0zpv<>94D7Am$kTx`RTu>4m&tQ>jN|1
zzxB<THY*|~<<MKd)&KV&F?j7cx7P05u9!J{9y2}8dNt=%==0xRljok@%-g%?-h~Mv
zcf8GAW{AxESY`S8)uS&7pMJi&I&*2B@TN7f^Q2CHPc)ahTqcv^=~b9!dHwC9GY=Ai
z%tDekf4p|8Zra)xXU$)K{#Y8XZ+tuAmw2LCY<>F2!gEg_U3rj@lolx3s<nD*vcJv5
zAhRi}bkwc&it|!b)>^xC81Q?|WoF!0u=7XBgQ`V6>$SM1hH3A&`Xv7PRGXaI>6z>N
z&hhatue}{E_{>g+g=tP<>BW2V=kSI;fA;D0VfPifnvQpu=*(JX`22hEwW~*$Gc#vS
zw(2&Jp7>O*zI0mK9-F#<KOTp?ziSm)cmM8L_uCbQfh{*xyeD$}zkU1ka^~xkQ!>w;
ze|~nG*{bh(XN^pre=lBl`)K?1b*Wc=bQqKy*ccuZ&rX^a8aZvdMviZT_51ItT1RKL
zaTFha^XcpZh2reKf-5)Q{@L>N!8EoV%dM>~O-*J@OjbFhQadBA-tF0Qq0QZg6CT`r
zB_*eOdzRS7&35wh<M*9;@9u82?Xt5QxA1inriB8*a{LUfW!7nvGY`+@UuMHyarohp
z$BX93yz=^%H&aL5dRpqqCw_AzwS9Et(qDYbwR`s_p}=)U*6z92qxkb)?BPFf<Bg8-
z!hlDGab<k0JGbdhd|HyOp59j9ZoIGE$1TqLl1Xpm`swxmze(%)`WkNEa^%h>q3O$(
zRs8?6{Y=%~*LEjg#K)xEdF)y9`)rl%)>hV({71Xaz4~qQ`qiV&2ODKC7HBB9c4kY}
z=9x2db9=7LkGZ_#-Ny^&@8Y%_%yVeic{JhC#>n-{ZS3nWmrg6TJzYBO2j5Gjc@ygo
zxg;CLJkERfRWPIB^joz}=PVMBy-qFi{VzH>&i|uY-aNzoK~qj|u{zx+l6LL&(^Fr*
z*zVt2=({+*YF6a>@>r&OpUxClKh@f}N@Gf7abbjxbX9$^oqYPPT|ZXTr=OfO@leLB
zW4$w9F7a7>A!X5plwa%S33VHq8BhMSNra<y#)tYUVJ4}NslOgA;+4HJ|7+FHJ&T*q
zv$L0-F`9BQGDt^m`SG`YLeDl%3S#i%<!3zIez*EgUexMUGd}7W*jS#Na=klnzU#)b
zZlQ&SeBG?6s(-(=JNf+F_xjC}aFK6MpR50?v)xp4t#GEkyL)+#``I4hv~$ms3-a_f
zx*FZjSh8`8NWE*|j)LqtF9SMeEW2oG>FAiQUN0wmP?%4+$L*pfSK8irN}Fdc)?I7z
z=61VZ==Ag%2g(mgl<b<4|8Hrgl$62Kj|H1HPqy#5d*foc%}I;IJDWFq9^GoRdTLTT
zvuk5eck9ckR;NNVj=Zm0fA8x<)<uD7)24lx`+r*UtYeL*yp%3x)CaL^ZI0`|nX+fS
z!p4d@5jK7*QmMyYr)CsQvghS5EbTp^<Rf)Nulu3uuKasGLd$L>DW1=A4P9^}t99l~
zmk-tZ^Q&SmOK`JT)Glqm^ryy$jk!`y__Ox@>(YG%*=2pF9zA->=BQoNvN-S=bDi2V
z+n%%Mib{)`82j5_oYE1#&suN(z$-iP&_xZo{qqA<4h5<By#HZwzi+qj?n^n5Y~RF1
z5+XS(R)2eQ@R^+doVSrnRn*zj9T_J^^qf2Cxo09rp>Ohu#}8+}{`+RDwZS^g|GyUt
z-m<o;Sh!Da^T`u)?w?=#vyyFD`iq%!Z(cRO=@p&0Xrn}}d4AER<+C08pRYT1Y*qcD
zfXvfJBg5uZyqnm>#I?!S^U#d1RdMUqKHYgt?a)OH%jf4m+nc*Zb{(I|-(I<Yw{-I=
zp*Z0s$4q)ZPZpkY|JXLENnz_JdzhTM{`dNe8T0m~i@&jTQ`WbO@_#t%TkO#?_MbOT
zem}6T*dk-)3WeJlN7Bqbr{wBxGu_S~6T8c7*PQw*H*)sG1fJ|{Znp^9Q-1uuyJqcl
z71x6$^O<9}nn~B+zT%S|8hXjqZSzT&U{B8Qv~&)a#ZS^wFNW>Y*L=KEN9$2Rq~-E9
zHgk~$)1E!K5D;;~&Rx#cOqz9DjE<VHSg_f_4?@$Isg;*Jn7!?g#Mi300yBaB?3mee
z6{FWb7o0t}{?#F;SKi*5TW-JCTBF%@=&`9O%OUSCclP;aXG->854nFe_V?0dY9g#w
z`S;aCdhIscOEQ*NQDUJ{{v_~GK|sdlM6;O&FTSR{{OWl~Yxe`a+}mnCCSuhO?1V!@
zS88ZIdb?-O(>TqpCcnT7FH2HhmVEzP@JUCku4YAVcv#*4y{qcCy7IB-%h(;d7}9jz
zbp7h!tH1MRUohznP}%f2zj1T!A)U6v5t}#5|1h=+js5<O$u-a*Ej6*`z|WM>z-@ob
zPCU$*l3=0Z`2PFRFNY5GNqO9Vq{N+V7T;+Q?Q?%ewX<*U<*B!ei|>5;=`!Pe_kU^0
z#7oBemDw)t-{H~!TTNN%O#S!czWe9ffBE)^m(93}LHVLa__1R@KHreo-Iyz^Cer=!
z>Ishc_`O~F&PyYwKAk)-PwmnU*W-OF4_7D)+P!>zSUT#-%qsPxe8;EBy!^2*GOtTw
zNpeNU`RZ!P+s}3{c`KF3Af}Xfj)%7}wP@1*H7k}ZTr<UXr&&?Yu`QF-*JZXGs!z0G
zv{#-S{HL&>L9t)Gu(f*o0-4(Hvb>HS-zD4x5?KV@1Y9H>TLcjVNC+$rC2&Z#^oXfx
z9adQ45yC14>Tz+datJu)7}0NF4&q6MHabeOE4r5c3Vq;j#OKsivyy4P$1;^A4dOps
za_#GqWPXTC@;_Akv+M5<&i`2t-^n-rpJFKZ&Uo{mMSp*E-e*wx8gKvWowYyn@dmR6
zG8-7!Bsa%8PI)TiEg-@At8slp|Ly+y9wr}u*Q+FH6ntumYhYktVDNPHb6Mw<&;$Sj
CrG?1=

delta 7899
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
JWt~$(698ctzMB95

diff --git a/views/financial_condition.xml b/views/financial_condition.xml
deleted file mode 100644
index 4366c07..0000000
--- a/views/financial_condition.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<odoo>
-    <data>
-
-        <record id="financial_condition_form_view" model="ir.ui.view">
-            <field name="name">financial_condition.form
-            </field>
-            <field name="model">financial.condition</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_tree_view" model="ir.ui.view">
-            <field name="name">financial_condition.tree
-            </field>
-            <field name="model">financial.condition</field>
-            <field name="arch" type="xml">
-                <tree string="Conditions">
-                    <field name="name" />
-                </tree>
-            </field>
-        </record>
-
-
-        <record
-            id="financial_condition_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</field>
-            <field name="view_mode">tree,form</field>
-        </record>
-    </data>
-</odoo>
diff --git a/views/financial_condition_contract.xml b/views/financial_condition_contract.xml
deleted file mode 100644
index acab917..0000000
--- a/views/financial_condition_contract.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<odoo>
-    <data>
-
-        <record id="financial_condition_contract_view_form" model="ir.ui.view">
-            <field name="name">financial_condition_contract_view_form
-            </field>
-            <field name="model">financial.condition.contract</field>
-            <field name="arch" type="xml">
-                <form string="financial_condition_contract_form">
-                    <sheet>
-                        <group>
-                            <field name="condition_id" />
-                            <field name="raised" />
-                            <field name="milestone" />
-                            <field name="comment" />
-                        </group>
-                    </sheet>
-                </form>
-            </field>
-        </record>
-
-        <record id="financial_conditioncontract_view_tree" model="ir.ui.view">
-            <field name="name">financial_condition_contract_view_tree
-            </field>
-            <field name="model">financial.condition.contract</field>
-            <field name="arch" type="xml">
-                <tree string="financial_condition_contract_tree">
-                    <field name="name" />
-                    <field name="raised" />
-                    <field name="milestone" />
-                    <field name="comment" />
-                </tree>
-            </field>
-        </record>
-
-        <record
-            id="financial_condition_contract_action"
-            model="ir.actions.act_window"
-        >
-            <field name="name">financial_condition_contract</field>
-            <field name="type">ir.actions.act_window</field>
-            <field name="res_model">financial.condition.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 9375376..9657bf9 100644
--- a/views/financial_contract.xml
+++ b/views/financial_contract.xml
@@ -2,114 +2,348 @@
 <!-- Copyright 2024 Le Filament
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-    <!-- Form -->
-    <record model="ir.ui.view" id="financial_deal_contract_view">
-        <field name="name">financial.contract.form</field>
+    <!-- Kanban -->
+<!--    <record model="ir.ui.view" id="financial_contract_kanban_view">-->
+<!--        <field name="name">financial.deal.contract</field>-->
+<!--        <field name="model">financial.contract</field>-->
+<!--        <field name="arch" type="xml">-->
+<!--            <kanban-->
+<!--                default_group_by="state"-->
+<!--                class="o_kanban_small_column o_opportunity_kanban"-->
+<!--                archivable="false"-->
+<!--            >-->
+<!--                <field name="state" />-->
+<!--                <field name="name" />-->
+<!--                <field name="partner_id" />-->
+<!--                <field name="active" />-->
+<!--                <templates>-->
+<!--                    <t t-name="kanban-box">-->
+<!--                        <div class="oe_kanban_global_click">-->
+<!--                            &lt;!&ndash; TODO: Ajouter css pour bandeau archivage &ndash;&gt;-->
+<!--                            &lt;!&ndash;                            <div class="ribbon ribbon-top-right" attrs="{'invisible': [('active', '=', True)]}">&ndash;&gt;-->
+<!--                            &lt;!&ndash;                                <span class="bg-danger">Archivé</span>&ndash;&gt;-->
+<!--                            &lt;!&ndash;                            </div>&ndash;&gt;-->
+<!--                            <div class="oe_kanban_content">-->
+<!--                                <div class="o_kanban_record_title">-->
+<!--                                    <strong>-->
+<!--                                        <field name="name" />-->
+<!--                                        - -->
+<!--                                        <field name="partner_id" />-->
+<!--                                    </strong>-->
+<!--                                </div>-->
+<!--                                <div class="o_kanban_record_subtitle">-->
+<!--                                    &lt;!&ndash;                                    <t t-if="record.total_amount.raw_value">&ndash;&gt;-->
+<!--                                    &lt;!&ndash;                                        <field&ndash;&gt;-->
+<!--                                    &lt;!&ndash;                                            name="total_amount"&ndash;&gt;-->
+<!--                                    &lt;!&ndash;                                            widget="monetary"&ndash;&gt;-->
+<!--                                    &lt;!&ndash;                                            options="{'currency_field': 'currency_id'}"/>&ndash;&gt;-->
+<!--                                    &lt;!&ndash;                                    </t>&ndash;&gt;-->
+<!--                                </div>-->
+<!--                                <div class="oe_clear" />-->
+<!--                            </div>-->
+<!--                        </div>-->
+<!--                    </t>-->
+<!--                </templates>-->
+<!--            </kanban>-->
+<!--        </field>-->
+<!--    </record>-->
+
+    <!-- Tree Internal -->
+    <record id="financial_contract_all_tree_view" model="ir.ui.view">
+        <field name="name">financial.contract.all.tree</field>
         <field name="model">financial.contract</field>
         <field name="arch" type="xml">
-            <form string="Contract">
-                <header>
-                    <field name="state" widget="statusbar" />
-                </header>
-                <sheet>
-                    <field name="active" invisible="1" />
-                    <widget
-                        name="web_ribbon"
-                        title="Archivé"
-                        bg_color="bg-danger"
-                        attrs="{'invisible': [('active', '=', True)]}"
-                    />
-                    <h1>
-                        <field name="name" />
-                    </h1>
-                    <group>
-                        <group string="Coopérative">
-                            <field
-                                name="partner_id"
-                                options="{'no_create': 1, 'no_edit': 1}"
-                            />
-                        </group>
-                    </group>
-                    <notebook>
-                        <page string="Conditions precedent">
-                            <field name="condition_contract_ids" />
-                        </page>
-                    </notebook>
-                </sheet>
-                <div class="oe_chatter">
-                    <field name="message_follower_ids" />
-                    <field name="activity_ids" />
-                    <field name="message_ids" />
-                </div>
-            </form>
+            <tree>
+                <field name="company_id" />
+                <field name="type" />
+                <field name="product_id" />
+                <field name="amount" string="Montant" />
+                <button
+                    name="show_amortization"
+                    type="object"
+                    icon="fa-calculator"
+                    class="btn-outline-primary"
+                    title="Tableau d'amortissement"
+                    attrs="{'invisible': [('type', '!=', 'loan')]}"
+                />
+                <field name="currency_id" invisible="1" />
+            </tree>
         </field>
     </record>
 
-    <!-- Tree -->
-    <record model="ir.ui.view" id="financial_contract_view">
-        <field name="name">financial.contract.tree</field>
+    <!-- Tree Loan -->
+    <record id="financial_contract_loan_tree_view" model="ir.ui.view">
+        <field name="name">financial.contract.loan.tree</field>
         <field name="model">financial.contract</field>
         <field name="arch" type="xml">
             <tree>
                 <field name="currency_id" invisible="1" />
-                <field name="name" />
+                <field name="type" invisible="1" />
                 <field name="partner_id" />
+                <field name="product_id" />
                 <field name="state" />
-                <!--                <field name="total_amount" />-->
+                <field name="expiration_date" />
+                <field name="amount" string="Montant" />
+                <field name="rate" />
+                <field name="duration" />
+                <field name="periodicity" />
+                <field name="delay_type" />
+                <field name="delay_duration" />
+                <field name="payment_date" />
+                <field name="first_term_date" />
+                <field name="company_id" />
+                <button
+                    name="show_amortization"
+                    type="object"
+                    icon="fa-calculator"
+                    class="btn-outline-primary"
+                    title="Tableau d'amortissement"
+                    attrs="{'invisible': [('type', '!=', 'loan')]}"
+                />
             </tree>
         </field>
     </record>
 
-    <!-- Kanban -->
-    <record model="ir.ui.view" id="financial_contract_kanban_view">
-        <field name="name">financial.deal.contract</field>
+    <!-- Tree Invest -->
+    <record id="financial_contract_invest_tree_view" model="ir.ui.view">
+        <field name="name">financial.contract.invest.tree</field>
         <field name="model">financial.contract</field>
         <field name="arch" type="xml">
-            <kanban
-                default_group_by="state"
-                class="o_kanban_small_column o_opportunity_kanban"
-                archivable="false"
-            >
+            <tree>
+                <field name="currency_id" invisible="1" />
+                <field name="type" invisible="1" />
+                <field name="partner_id" />
+                <field name="product_id" />
                 <field name="state" />
-                <field name="name" />
+                <field name="expiration_date" />
+                <field name="amount" string="Montant" />
+                <field name="securities_number" />
+                <field name="nominal" />
+                <field name="fixed_rate" />
+                <field name="performance_indicator" />
+                <field name="performance_month" />
+                <field name="issue_date" />
+                <field name="payment_date" />
+                <field name="company_id" />
+                <button
+                    name="show_amortization"
+                    type="object"
+                    icon="fa-calculator"
+                    class="btn-outline-primary"
+                    title="Tableau d'amortissement"
+                    attrs="{'invisible': [('type', '!=', 'loan')]}"
+                />
+            </tree>
+        </field>
+    </record>
+
+    <!-- Tree Guarantee -->
+    <record id="financial_contract_guarantee_tree_view" model="ir.ui.view">
+        <field name="name">financial.contract.guarantee.tree</field>
+        <field name="model">financial.contract</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="currency_id" invisible="1" />
+                <field name="type" invisible="1" />
+                <field name="partner_id" />
+                <field name="product_id" />
+                <field name="state" />
+                <field name="expiration_date" />
+                <field name="amount" string="Montant" />
+                <field name="external_loan_id" />
+                <field name="fmg_amount" />
+                <field name="social_share_amount" />
+                <field name="guarantee_rate" />
+                <field name="is_counter_guarantee" />
+                <field name="loan_balance" />
+                <field name="guarantee_balance" />
+                <field name="final_risk_guarantee" />
+                <field name="payment_date" />
+                <field name="company_id" />
+                <button
+                    name="show_amortization"
+                    type="object"
+                    icon="fa-calculator"
+                    class="btn-outline-primary"
+                    title="Tableau d'amortissement"
+                    attrs="{'invisible': [('type', '!=', 'loan')]}"
+                />
+            </tree>
+        </field>
+    </record>
+    <!-- Tree Partner -->
+    <record id="financial_contract_partner_tree_view" model="ir.ui.view">
+        <field name="name">financial.contract.partner.tree</field>
+        <field name="model">financial.contract</field>
+        <field name="arch" type="xml">
+            <tree>
                 <field name="partner_id" />
-                <field name="active" />
-                <templates>
-                    <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="oe_kanban_content">
-                                <div class="o_kanban_record_title">
-                                    <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>-->
-                                </div>
-                                <div class="oe_clear" />
-                            </div>
-                        </div>
-                    </t>
-                </templates>
-            </kanban>
+                <field name="deal_partner_id" />
+                <field name="type" />
+                <field name="amount" string="Montant" />
+                <field name="currency_id" invisible="1" />
+                <button
+                    name="show_amortization"
+                    type="object"
+                    icon="fa-calculator"
+                    class="btn-outline-primary"
+                    title="Tableau d'amortissement"
+                    attrs="{'invisible': [('type', '!=', 'loan')]}"
+                />
+            </tree>
+        </field>
+    </record>
+
+    <!-- Search -->
+    <record id="financial_contract_search_view" model="ir.ui.view">
+       <field name="name">financial.contract.search</field>
+       <field name="model">financial.contract</field>
+        <field name="arch" type="xml">
+            <search string="Contracts">
+                <field name="name" />
+                <!-- Filter -->
+                <filter name="expiration_date" date="expiration_date" />
+                <filter
+                    string="Prêt"
+                    name="loan"
+                    domain="[('type', '=', 'loan')]"
+                />
+                <filter
+                    string="Investissement"
+                    name="invest"
+                    domain="[('type', '=', 'invest')]"
+                />
+                <filter
+                    string="Garantie"
+                    name="guarantee"
+                    domain="[('type', '=', 'guarantee')]"
+                />
+                <separator />
+                <filter
+                    string="Proposition"
+                    name="proposal"
+                    domain="[('state', '=', 'proposal')]"
+                />
+                <filter
+                    string="Contrat signé"
+                    name="contract"
+                    domain="[('state', '=', 'contract')]"
+                />
+                <filter
+                    string="Terminé"
+                    name="done"
+                    domain="[('state', '=', 'done')]"
+                />
+                <filter
+                    string="Annulé"
+                    name="cancel"
+                    domain="[('state', '=', 'cancel')]"
+                />
+                <separator />
+                <filter
+                    string="Archivé"
+                    name="inactive"
+                    domain="[('active', '=', False)]"
+                />
+                <!-- Group by -->
+                <group expand="0" name="group_by" string="Group By">
+                    <filter
+                        name="group_partner_id"
+                        string="Coopérative"
+                        context="{'group_by' : 'partner_id'}"
+                    />
+                    <filter
+                        name="group_state"
+                        string="Statut"
+                        context="{'group_by': 'state'}"
+                    />
+                    <filter
+                        string="Type d'outil"
+                        name="group_type"
+                        context="{'group_by':'type'}"
+                    />
+                </group>
+            </search>
         </field>
     </record>
 
-    <!-- Action -->
-    <record model="ir.actions.act_window" id="financial_contract_act_window">
-        <field name="name">Contrats</field>
+    <!-- Actions -->
+    <record model="ir.actions.act_window" id="financial_contract_all_action">
+        <field name="name">Tous les contrats</field>
+        <field name="res_model">financial.contract</field>
+        <field name="view_mode">tree,form</field>
+<!--        <field name="domain">[('deal_type', '=', 'internal'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>-->
+        <field name="domain">[('deal_type', '=', 'internal')]</field>
+    </record>
+    <record model="ir.actions.act_window" id="financial_contract_loan_action">
+        <field name="name">Prêts</field>
+        <field name="res_model">financial.contract</field>
+        <field name="view_mode">tree,form</field>
+        <field
+            name="view_ids"
+            eval="[(5, 0, 0),
+                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_loan_tree_view')}),
+                  ]"
+        />
+        <field
+            name="domain"
+        >[('deal_type', '=', 'internal'), ('type', '=', 'loan'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>
+    </record>
+    <record model="ir.actions.act_window" id="financial_contract_invest_action">
+        <field name="name">Titres participatifs</field>
+        <field name="res_model">financial.contract</field>
+        <field name="view_mode">tree,form</field>
+        <field
+            name="view_ids"
+            eval="[(5, 0, 0),
+                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_invest_tree_view')}),
+                  ]"
+        />
+        <field
+            name="domain"
+        >[('deal_type', '=', 'internal'), ('type', '=', 'invest'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>
+    </record>
+    <record
+        model="ir.actions.act_window"
+        id="financial_contract_guarantee_action"
+    >
+        <field name="name">Guaranties</field>
+        <field name="res_model">financial.contract</field>
+        <field name="view_mode">tree,form</field>
+        <field
+            name="view_ids"
+            eval="[(5, 0, 0),
+                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_guarantee_tree_view')}),
+                  ]"
+        />
+        <field
+            name="domain"
+        >[('deal_type', '=', 'internal'), ('type', '=', 'guarantee'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>
+    </record>
+    <record
+        model="ir.actions.act_window"
+        id="financial_contract_guarantee_action"
+    >
+        <field name="name">Garanties</field>
+        <field name="res_model">financial.contract</field>
+        <field name="view_mode">tree,form</field>
+        <field
+            name="domain"
+        >[('deal_type', '=', 'internal'), ('type', '=', 'guarantee'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>
+    </record>
+    <record
+        model="ir.actions.act_window"
+        id="financial_contract_external_action"
+    >
+        <field name="name">Contrats partenaires</field>
         <field name="res_model">financial.contract</field>
-        <field name="view_mode">kanban,tree,form</field>
+        <field name="view_mode">tree,form</field>
+        <field
+            name="view_ids"
+            eval="[(5, 0, 0),
+                  (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_partner_tree_view')}),
+                  ]"
+        />
+        <field name="domain">[('deal_type', '=', 'external')]</field>
     </record>
 </odoo>
diff --git a/views/menus.xml b/views/menus.xml
index ccc8e91..54c4fd7 100644
--- a/views/menus.xml
+++ b/views/menus.xml
@@ -10,38 +10,46 @@
 
     <!-- Menu -->
     <menuitem
-        id="menu_financial_contract"
-        name="Contrats"
+        id="menu_financial_contract_all"
+        name="Tous les contrats"
         parent="financial_contract_menu_root"
-        action="financial_contract_act_window"
+        action="financial_contract_all_action"
         sequence="10"
     />
+    <menuitem
+        id="menu_financial_contract_loan"
+        name="Prêts participatifs"
+        parent="financial_contract_menu_root"
+        action="financial_contract_loan_action"
+        sequence="20"
+    />
+    <menuitem
+        id="menu_financial_contract_invest"
+        name="Titres participatifs"
+        parent="financial_contract_menu_root"
+        action="financial_contract_invest_action"
+        sequence="30"
+    />
+    <menuitem
+        id="menu_financial_contract_guarantee"
+        name="Garanties"
+        parent="financial_contract_menu_root"
+        action="financial_contract_guarantee_action"
+        sequence="40"
+    />
+    <menuitem
+        id="menu_financial_contract_external"
+        parent="financial_contract_menu_root"
+        action="financial_contract_external_action"
+        sequence="50"
+    />
+
     <!-- Configuration -->
     <menuitem
         id="menu_financial_contract_configuration"
         name="Configuration"
         parent="financial_contract_menu_root"
-        sequence="10"
+        sequence="100"
     />
 
-    <menuitem
-        id="menu_financial_condition"
-        name="Conditions"
-        parent="menu_financial_contract_configuration"
-        action="financial_condition_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>
diff --git a/views/res_partner.xml b/views/res_partner.xml
index d29e109..f5e7d77 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -10,11 +10,11 @@
         <field name="arch" type="xml">
             <xpath expr="//div[@name='button_box']" position="inside">
                 <button
-                    name="%(financial_contract_act_window)d"
+                    name="action_view_contract"
                     class="oe_stat_button"
                     icon="fa-file-text-o"
                     attrs="{'invisible': [('financial_contract_count', '=', 0)]}"
-                    type="action"
+                    type="object"
                 >
                     <field
                         name="financial_contract_count"
-- 
GitLab