diff --git a/__init__.py b/__init__.py index 31660d6a9650857f10c9dbdcd139145e0897ef6e..9fd0534aa4cf7c55c55a5948fa7926fb62096c62 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,3 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from . import models +from . import models, wizard diff --git a/__manifest__.py b/__manifest__.py index 9982e987d0c8ab363d38b620ad9a0b5764b4b286..5759ab631f9c55c27fa70c49b5a8780b60c969f5 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -10,6 +10,9 @@ "cgscop_partner", ], "data": [ + # wizard + "wizard/scop_deces_wizard.xml", + # views "views/assets.xml", "views/res_partner.xml", ], diff --git a/models/res_partner.py b/models/res_partner.py index b0c7e97ea70021902e20e574ed96b089a155dc16..51f4c5639d12fb2feac982ac44d0116a85b8f72b 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -11,11 +11,10 @@ class SecondaryFacility(models.Model): selection_add=[("facility", "Etablissement")], ondelete={"resource": "set default"} ) - facility_ids = fields.One2many( "res.partner", "parent_id", - string="Etablissements Secondaires", + string="Etablissements", domain=[("active", "=", True), ("type", "=", "facility")], ) other_child_ids = fields.One2many( @@ -28,6 +27,36 @@ class SecondaryFacility(models.Model): ("type", "!=", "facility"), ], ) + date_open_facility = fields.Date("Date ouverture établissement") + date_close_facility = fields.Date("Date fermeture établissement") + is_facility_closed = fields.Boolean( + string="Etablissement fermé", + compute="_compute_is_facility_closed", + search="_search_is_facility_closed", + ) + + # ------------------------------------------------------ + # Override parent + # ------------------------------------------------------ + def _compute_is_facility_closed(self): + for partner in self: + if partner.type == "facility" and partner.date_close_facility: + partner.is_facility_closed = True + else: + partner.is_facility_closed = False + + def _search_is_facility_closed(self, operator, value): + if operator not in ["=", "!="]: + raise ValueError("This opérateur non supporté") + if not isinstance(value, bool): + raise ValueError("La valeur doit être Vrai ou Faux (pas %s)", value) + + if (operator == "=" and value) or (operator == "!=" and not value): + domain = [("type", "=", "facility"), ('date_close_facility', '!=', False)] + else: + domain = [("type", "=", "facility"), ('date_close_facility', '=', False)] + partner_ids = self.search(domain) + return [("id", "in", partner_ids.ids)] # ------------------------------------------------------ # Override parent diff --git a/views/res_partner.xml b/views/res_partner.xml index d385b752a31db71244a15ce1bd46fe26698dbe6c..8b9640c719be8a5cbd0b126bf00eaa522fa82e2e 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -13,7 +13,30 @@ <field name="name">cooperative.facility.form</field> <field name="model">res.partner</field> <field name="inherit_id" ref="cgscop_partner.scop_contact_view_form" /> + <field name="priority">100</field> <field name="arch" type="xml"> + <xpath expr="//div[hasclass('oe_title')]" position="before"> + <field name="is_facility_closed" invisible="1" /> + <span + class="badge bg-danger" + attrs="{'invisible': [('is_facility_closed', '!=', True)]}" + > + Établissement fermé + </span> + </xpath> + <!-- parent_id obligatoire pour les établissements secondaires --> + <xpath expr="//div[hasclass('oe_title')]//field[@name='parent_id']" position="attributes"> + <attribute name="attrs">{'required': [('type', '=', 'facility')]}</attribute> + </xpath> + <!-- sire obligatoire pour les établissements secondaires --> + <xpath expr="//field[@name='siret']" position="attributes"> + <attribute name="attrs">{'required': [('type', '=', 'facility')]}</attribute> + </xpath> + <xpath expr="//field[@name='registration_date']" position="after"> + <field name="date_open_facility" attrs="{'invisible': [('type', '!=', 'facility')]}" /> + <field name="date_close_facility" attrs="{'invisible': [('type', '!=', 'facility')]}" /> + </xpath> + <xpath expr="//group[@name='partner_segment_info']" position="after"> <group name="facility_info" @@ -29,18 +52,6 @@ options="{'no_open': True, 'no_create': True}" domain="[('active', '=', True),('ur_id', '=', ur_id)]" /> - <label for='siret' string="SIRET" class="oe_edit_only" /> - <div> - <field name="siret" class="oe_edit_only" /> - </div> - <label - for='formatted_siret' - string="SIRET" - class="oe_read_only" - /> - <div> - <field name="formatted_siret" class="oe_read_only" /> - </div> <field name="naf_id" options='{"no_create": True, "no_open": True}' @@ -83,7 +94,7 @@ <field name="naf_id" /> </xpath> <page name="scop_contacts" position="inside"> - <label for="facility_ids" string="Etablissements Secondaires" /> + <label for="facility_ids" string="Etablissements" /> <p> <button name="add_facility" @@ -173,7 +184,7 @@ > <attribute name="attrs" - eval="{'invisible': [('company_name', '!=', False),('company_name', '!=', '')]}" + eval="{'invisible': [('company_name', '!=', False),('company_name', '!=', '')], 'required': [('type', '=', 'facility')]}" /> </xpath> </field> @@ -182,14 +193,12 @@ <!-- ****************************** *** Custom Views ****************************** --> - <!-- - CG Scop Facility View Tree - --> + <!-- Tree --> <record id="scop_partner_tree_view" model="ir.ui.view"> <field name="name">scop partner tree view</field> <field name="model">res.partner</field> <field name="arch" type="xml"> - <tree string="Etablissements secondaires"> + <tree string="Etablissements"> <field name="display_name" /> <field name="parent_id" string="Etablissement principal" /> <field name="zip" /> @@ -200,18 +209,54 @@ </field> </record> + <!-- Search --> + <record id="scop_partner_facility_view_search" model="ir.ui.view"> + <field name="name">scop.partner.facility.search</field> + <field name="model">res.partner</field> + <field name="arch" type="xml"> + <search string="Etablissements"> + <field name="name" filter_domain="['|', '|', '|', '|', ('display_name', 'ilike', self), ('ref', '=', self), ('email', 'ilike', self), ('member_number','=like',self), ('nickname', 'ilike', self)]"/> + <field name="phone" filter_domain="['|',('phone','ilike',self),('mobile','=',self)]"/> + <field name="followup_delegate_id" string="Délégué" filter_domain="['|', '|', '|', ('followup_delegate_id', 'ilike', self), ('creation_delegate_id', 'ilike', self), ('revision_person_id', 'ilike', self), ('revision_certified_person_id', 'ilike', self)]"/> + <field name="member_number_int" filter_domain="[('member_number','=like',self)]"/> + <field name="siret" filter_domain="[('siret','ilike',self)]"/> + <filter string="Mes organismes" name="my_partners" domain="['|', ('creation_delegate_id','=',uid), ('followup_delegate_id','=',uid)]"/> + <filter string="Mon UR" name="my_ur" domain="[('current_user_ur_id', '=', 'ur_id')]"/> + <separator/> + <filter string="Adhérents" name="is_adherent" domain="[('parent_id.membership_status', '=', 'member')]"/> + <filter string="Adhérents de mon UR" name="my_ur_adherent" domain="[('current_user_ur_id', '=', 'ur_id'), ('parent_id.membership_status', '=', 'member')]"/> + <separator/> + <filter string="Date d'ouverture" name="date_open_facility" date="date_open_facility"/> + <filter string="Date de fermeture" name="date_close_facility" date="date_close_facility"/> + <separator/> + <filter string="Établissements fermés" name="facility_closed" domain="[('is_facility_closed','=',True)]"/> + <filter string="Établissements ouverts" name="facility_open" domain="[('is_facility_closed','=',False)]"/> + <filter string="Archivés" name="inactive" domain="[('active','=',False)]"/> + <separator/> + <filter string="Mes Activités" name="activities_my" domain="[('activity_ids.user_id', '=', uid)]"/> + <separator/> + <group expand="0" name="group_by" string="Group By"> + <filter name="group_company" string="Structure" context="{'group_by': 'parent_id'}"/> + <filter name="group_city" string="Ville" context="{'group_by': 'city'}"/> + <filter name="group_departement" string="Département" context="{'group_by': 'zip_departement'}"/> + <filter name="group_country" string="Pays" context="{'group_by': 'country_id'}"/> + </group> + </search> + </field> + </record> + <!-- ****************************** *** Action ****************************** --> <!-- Organismes Action --> <record model="ir.actions.act_window" id="scop_facility_act"> - <field name="name">Etablissements secondaires</field> + <field name="name">Etablissements</field> <field name="res_model">res.partner</field> <field name="view_mode">tree,form,activity,pivot,graph</field> <field name="search_view_id" - ref="cgscop_partner.scop_partner_view_search" + ref="scop_partner_facility_view_search" /> <field name="domain" diff --git a/wizard/__init__.py b/wizard/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0faf2b899412000e63514bf19e7e6da4097f16cd --- /dev/null +++ b/wizard/__init__.py @@ -0,0 +1,4 @@ +# © 2019 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import scop_deces_wizard diff --git a/wizard/scop_deces_wizard.py b/wizard/scop_deces_wizard.py new file mode 100644 index 0000000000000000000000000000000000000000..e0f62f579eba3cd08d04267cecc94d22a35d281f --- /dev/null +++ b/wizard/scop_deces_wizard.py @@ -0,0 +1,13 @@ +# © 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 + + +class ScopDecesWizard(models.TransientModel): + _inherit = "scop.deces.wizard" + + def deces_action(self): + super().deces_action() + partner_id = self.env["res.partner"].browse(self.partner_id) + partner_id.facility_ids.update({"date_close_facility": self.end}) diff --git a/wizard/scop_deces_wizard.xml b/wizard/scop_deces_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..e3534c97cc9c07010bbe7be95d533def891cb3e3 --- /dev/null +++ b/wizard/scop_deces_wizard.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<odoo> + <data> + <!-- WIZARD FORM --> + <record id="scop_deces_wizard_view_form_inherit" model="ir.ui.view"> + <field name="name">scop.deces.wizard.form.inherit</field> + <field name="model">scop.deces.wizard</field> + <field name="inherit_id" ref="cgscop_partner.scop_deces_wizard_view_form" /> + <field name="arch" type="xml"> + <xpath expr="//ul" position="inside"> + <li>fermeture des établissements secondaires</li> + </xpath> + </field> + </record> + </data> +</odoo>