From e619fd1132de4a1d403e4572a7bd058f6246b069 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Thu, 17 Nov 2022 17:08:06 +0100
Subject: [PATCH] [update] add wizard project creation

---
 __manifest__.py                    |   7 +-
 models/calendar.py                 |  10 +--
 security/ir.model.access.csv       |   1 +
 views/res_partner.xml              | 126 -----------------------------
 wizard/__init__.py                 |   1 +
 wizard/calendar_create_project.py  |  76 +++++++++++++++++
 wizard/calendar_create_project.xml |  87 ++++++++++++++++++++
 7 files changed, 172 insertions(+), 136 deletions(-)
 delete mode 100644 views/res_partner.xml
 create mode 100644 wizard/calendar_create_project.py
 create mode 100644 wizard/calendar_create_project.xml

diff --git a/__manifest__.py b/__manifest__.py
index 29908d8..8da6438 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -12,12 +12,15 @@
         "cgscop_timesheet",
     ],
     "data": [
+        # security
         "security/security_rules.xml",
         "security/ir.model.access.csv",
+        # wizard
+        "wizard/calendar_create_project.xml",
+        "wizard/calendar_event_transform.xml",
+        # views
         "views/calendar.xml",
         "views/hr_timesheet.xml",
-        "views/res_partner.xml",
-        "wizard/calendar_event_transform.xml",
     ],
     "qweb": [
         "static/src/xml/*.xml",
diff --git a/models/calendar.py b/models/calendar.py
index fb54466..fd5107b 100644
--- a/models/calendar.py
+++ b/models/calendar.py
@@ -424,20 +424,14 @@ class CGScopCalendar(models.Model):
         Affiche une fenêtre simplifiée pour la création d'un projet
         """
         self.ensure_one()
-        view_id = self.env.ref("cgscop_calendar.scop_project_calendar_view_form").id
         return {
             "name": "Création d'un projet",
             "type": "ir.actions.act_window",
             "view_mode": "form",
-            "views": [(view_id, "form")],
-            "view_id": view_id,
-            "res_model": "res.partner",
+            "views": [(False, "form")],
+            "res_model": "calendar.create.project",
             "target": "new",
             "context": {
-                "default_is_company": True,
-                "default_is_cooperative": True,
-                "default_company_type": "company",
-                "default_project_status": "1_information",
                 "default_date_first_rdv": self.start.date() if self.start else None,
             },
         }
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index e306ece..6b4e09a 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1,2 +1,3 @@
 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
 access_calendar_event_transform,access_calendar_event_transform,model_calendar_event_transform,base.group_user,1,1,1,1
+access_calendar_create_project,access_calendar_create_project,model_calendar_create_project,base.group_user,1,1,1,1
diff --git a/views/res_partner.xml b/views/res_partner.xml
deleted file mode 100644
index 7b8766e..0000000
--- a/views/res_partner.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<odoo>
-    <data>
-        <record id="scop_project_calendar_view_form" model="ir.ui.view">
-            <field name="name">scop.project.calendar.view.form</field>
-            <field name="model">res.partner</field>
-            <field name="priority">200</field>
-            <field name="arch" type="xml">
-                <form string="Projet">
-                    <sheet>
-                        <div class="oe_title oe_title_cgscop">
-                            <field name="is_cooperative" invisible="1" />
-                            <h1>
-                                <field
-                                    name="name"
-                                    default_focus="1"
-                                    required="1"
-                                    placeholder="Raison Sociale"
-                                />
-                            </h1>
-                            <div class="oe_bloc_cgscop">
-                                <div class="o_row d-flex">
-                                    <h3>
-                                        <field
-                                            class="o_field_header"
-                                            name="cooperative_form_id"
-                                            options="{'no_open': True, 'no_create': True}"
-                                            placeholder="Forme Coopérative"
-                                        />
-                                    </h3>
-                                </div>
-                            </div>
-                        </div>
-                        <group>
-                            <group string="Contact">
-                                <label for='street' string="Adresse du siège social" />
-                                <div class="o_address_format">
-                                    <field
-                                        name="street"
-                                        placeholder="Rue..."
-                                        class="o_address_street"
-                                    />
-                                    <field
-                                        name="street2"
-                                        placeholder="Rue 2..."
-                                        class="o_address_street"
-                                    />
-                                    <field
-                                        name="street3"
-                                        placeholder="Rue 3..."
-                                        class="o_address_street"
-                                    />
-                                    <field
-                                        name="zip_id"
-                                        options="{'create_name_field': 'city', 'no_open': True, 'no_create': True}"
-                                        placeholder="CP / Ville autocomplétion..."
-                                        class="oe_edit_only"
-                                    />
-                                    <field
-                                        name="zip"
-                                        placeholder="CP..."
-                                        class="o_address_city"
-                                    />
-                                    <field name="zip_departement" invisible="1" />
-                                    <field
-                                        name="city"
-                                        placeholder="Ville..."
-                                        class="o_address_city"
-                                    />
-                                    <field name="city_id" invisible="1" />
-                                    <field
-                                        name="cedex"
-                                        placeholder="Cedex"
-                                        class="o_address_city"
-                                    />
-                                    <field
-                                        name="state_id"
-                                        class="o_address_zip"
-                                        placeholder="Région"
-                                        options='{"no_open": True, "no_create": True}'
-                                        context="{'country_id': country_id, 'zip': zip}"
-                                    />
-                                    <field
-                                        name="country_id"
-                                        placeholder="Pays"
-                                        class="o_address_country"
-                                        options='{"no_open": True, "no_create": True}'
-                                    />
-                                </div>
-                                <field
-                                    name="zip_departement"
-                                    string="N° de département"
-                                />
-                                <field name="region" />
-                                <field
-                                    name="phone"
-                                    widget="phone"
-                                    string="Téléphone 1"
-                                />
-                                <field
-                                    name="mobile"
-                                    widget="phone"
-                                    string="Téléphone 2"
-                                />
-                                <field name="email" widget="email" string="E-mail" />
-                                <field name="website" widget="url" />
-                            </group>
-                            <group name="infos" string="Informations">
-                                <field name="creation_origin_id" required="1" />
-                                <field name="creation_suborigin_id" />
-                                <field name="social_object" />
-                                <field name="date_first_rdv" required="1" />
-                                <field
-                                    name="is_first_rdv_infocoll"
-                                    widget="boolean_toggle"
-                                />
-                                <field name="date_send_guide" />
-                                <field name="adhesion_comments" />
-                            </group>
-                        </group>
-                    </sheet>
-                </form>
-            </field>
-        </record>
-    </data>
-</odoo>
diff --git a/wizard/__init__.py b/wizard/__init__.py
index ea73a94..7bf5165 100644
--- a/wizard/__init__.py
+++ b/wizard/__init__.py
@@ -1,4 +1,5 @@
 # © 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
+from . import calendar_create_project
 from . import calendar_event_transform
diff --git a/wizard/calendar_create_project.py b/wizard/calendar_create_project.py
new file mode 100644
index 0000000..bc57a02
--- /dev/null
+++ b/wizard/calendar_create_project.py
@@ -0,0 +1,76 @@
+# © 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
+
+
+class CalendarCreateProject(models.TransientModel):
+    """
+    This wizard allows to create project from event
+    """
+
+    _name = "calendar.create.project"
+    _description = "Wizard de création de projet depuis l'agenda"
+
+    name = fields.Char("Raison Sociale")
+    is_cooperative = fields.Boolean("Est une coopérative")
+    cooperative_form_id = fields.Many2one(
+        "res.partner.cooperative.form",
+        string="Cooperative form",
+        ondelete="restrict",
+        tracking=True,
+    )
+    city = fields.Char("Ville")
+    zip = fields.Char("Code Postal")
+    phone = fields.Char("Téléphone")
+    mobile = fields.Char("Mobile")
+    email = fields.Char("Adresse Mail")
+
+    # Infos générales / Infos activité
+    creation_origin_id = fields.Many2one(
+        "res.partner.creation.origin",
+        string="Origine création en coop",
+        domain=[("parent_id", "=", False)],
+        ondelete="restrict",
+    )
+    creation_suborigin_id = fields.Many2one(
+        "res.partner.creation.origin",
+        string="Sous-Origine création en coop",
+        domain=[("child_ids", "=", False)],
+        ondelete="restrict",
+    )
+    social_object = fields.Text("Objet Social")
+    date_first_rdv = fields.Date("Date du 1er rdv")
+    is_first_rdv_infocoll = fields.Boolean("Réunion d'info. collective")
+    date_send_guide = fields.Date("Date d’envoi du guide de faisabilité")
+    adhesion_comments = fields.Text("Commentaires Adhésion")
+
+    # ------------------------------------------------------
+    # Fonction boutons
+    # ------------------------------------------------------
+    def button_create_project(self):
+        ctx = self.env.context
+        event_id = self.env["calendar.event"].browse(ctx.get("active_id"))
+        partner_id = self.env["res.partner"].create(
+            {
+                "name": self.name,
+                "is_cooperative": True,
+                "is_company": True,
+                "company_type": "company",
+                "project_status": "1_information",
+                "cooperative_form_id": self.cooperative_form_id.id,
+                "city": self.city,
+                "zip": self.zip,
+                "phone": self.phone,
+                "mobile": self.mobile,
+                "email": self.email,
+                "creation_origin_id": self.creation_origin_id.id,
+                "creation_suborigin_id": self.creation_suborigin_id.id,
+                "social_object": self.social_object,
+                "date_first_rdv": self.date_first_rdv,
+                "is_first_rdv_infocoll": self.is_first_rdv_infocoll,
+                "date_send_guide": self.date_send_guide,
+                "adhesion_comments": self.adhesion_comments,
+            }
+        )
+        event_id.coop_id = partner_id
diff --git a/wizard/calendar_create_project.xml b/wizard/calendar_create_project.xml
new file mode 100644
index 0000000..84cd0bc
--- /dev/null
+++ b/wizard/calendar_create_project.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+    <data>
+        <record id="scop_project_calendar_view_form" model="ir.ui.view">
+            <field name="name">scop.project.calendar.view.form</field>
+            <field name="model">calendar.create.project</field>
+            <field name="arch" type="xml">
+                <form string="Projet">
+                    <sheet>
+                        <div class="oe_title oe_title_cgscop">
+                            <h1>
+                                <field
+                                    name="name"
+                                    default_focus="1"
+                                    required="1"
+                                    placeholder="Raison Sociale"
+                                />
+                            </h1>
+                            <div class="oe_bloc_cgscop">
+                                <div class="o_row d-flex">
+                                    <h3>
+                                        <field
+                                            class="o_field_header"
+                                            name="cooperative_form_id"
+                                            options="{'no_open': True, 'no_create': True}"
+                                            placeholder="Forme Coopérative"
+                                        />
+                                    </h3>
+                                </div>
+                            </div>
+                        </div>
+                        <group>
+                            <group string="Contact">
+                                <field
+                                    name="zip"
+                                    placeholder="CP..."
+                                    class="o_address_city"
+                                />
+                                <field
+                                    name="city"
+                                    placeholder="Ville..."
+                                    class="o_address_city"
+                                />
+                                <field
+                                    name="phone"
+                                    widget="phone"
+                                    string="Téléphone 1"
+                                />
+                                <field
+                                    name="mobile"
+                                    widget="phone"
+                                    string="Téléphone 2"
+                                />
+                                <field name="email" widget="email" />
+                            </group>
+                            <group name="infos" string="Informations">
+                                <field name="creation_origin_id" required="1" />
+                                <field name="creation_suborigin_id" />
+                                <field name="social_object" />
+                                <field name="date_first_rdv" required="1" />
+                                <field
+                                    name="is_first_rdv_infocoll"
+                                    widget="boolean_toggle"
+                                />
+                                <field name="date_send_guide" />
+                                <field name="adhesion_comments" />
+                            </group>
+                        </group>
+                    </sheet>
+                    <footer>
+                        <button
+                            name="button_create_project"
+                            type="object"
+                            string="Créer le projet"
+                            class="btn-primary"
+                        />
+                        <button
+                            class="btn btn-sm btn-default"
+                            special="cancel"
+                            string="Annuler"
+                        />
+                    </footer>
+                </form>
+            </field>
+        </record>
+    </data>
+</odoo>
-- 
GitLab