From 76476b8b869ef821aa65acf39c53fbbbbcaebe7a Mon Sep 17 00:00:00 2001 From: Remi <remi@le-filament.com> Date: Fri, 16 Aug 2019 14:58:10 +0200 Subject: [PATCH] Add mandatory fields in view depending on state --- __manifest__.py | 3 +- models/res_partner.py | 3 +- views/res_partner_cooperative.xml | 208 +++++++++++++++++++++++------- 3 files changed, 165 insertions(+), 49 deletions(-) diff --git a/__manifest__.py b/__manifest__.py index 63b176b..1c3044f 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -9,8 +9,7 @@ "application": False, "installable": True, "depends": [ - "base_location", - "contacts", + "base_location_geonames_import", "l10n_fr_naf_ape", "partner_address_street3", "partner_company_type", diff --git a/models/res_partner.py b/models/res_partner.py index 45fc107..c514457 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -52,8 +52,7 @@ class ScopPartner(models.Model): ('5_suivi', 'Phase de suivi'), ('6_abandonne', 'Projet abandonné')], track_visibility='onchange', - string='Statut projet', - default='1_information') + string='Statut projet') creation_delegate_id = fields.Many2one( 'res.partner', string='Délégué de création', diff --git a/views/res_partner_cooperative.xml b/views/res_partner_cooperative.xml index f33c949..6f151fe 100644 --- a/views/res_partner_cooperative.xml +++ b/views/res_partner_cooperative.xml @@ -4,6 +4,102 @@ <odoo> <data> + <record id="res_partner_view_search_inherit_scop" model="ir.ui.view"> + <field name="name">res.partner.view.search.inherit.scop</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="arch" type="xml"> + <filter name="type_company" position="replace"> + <filter string="Companies" name="type_company" domain="[('is_company','=',True),('is_cooperative','=',False)]"/> + <filter string="Organismes" name="type_cooperative" domain="[('is_company','=',True),('is_cooperative','=',True)]"/> + </filter> + </field> + </record> + + <record id="action_contacts_only" model="ir.actions.act_window"> + <field name="name">Contacts</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">res.partner</field> + <field name="view_type">form</field> + <field name="view_mode">kanban,tree,form,activity</field> + <field name="search_view_id" ref="base.view_res_partner_filter"/> + <field name="context">{'search_default_type_person': 1}</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a contact in your address book + </p><p> + Odoo helps you to easily track all activities related to a customer. + </p> + </field> + </record> + + <record id="action_contacts_only_view_kanban" model="ir.actions.act_window.view"> + <field name="sequence" eval="0"/> + <field name="view_mode">kanban</field> + <field name="view_id" ref="base.res_partner_kanban_view"/> + <field name="act_window_id" ref="action_contacts_only"/> + </record> + <record id="action_contacts_only_view_tree" model="ir.actions.act_window.view"> + <field name="sequence" eval="1"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="base.view_partner_tree"/> + <field name="act_window_id" ref="action_contacts_only"/> + </record> + <record id="action_contacts_only_view_form" model="ir.actions.act_window.view"> + <field name="sequence" eval="2"/> + <field name="view_mode">form</field> + <field name="view_id" ref="base.view_partner_form"/> + <field name="act_window_id" ref="action_contacts_only"/> + </record> + + <menuitem id="contacts.res_partner_menu_contacts" + name="Contacts" + action="action_contacts_only" + parent="contacts.menu_contacts" + sequence="2"/> + + + + <record id="action_companies_only" model="ir.actions.act_window"> + <field name="name">Companies</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">res.partner</field> + <field name="view_type">form</field> + <field name="view_mode">kanban,tree,form,activity</field> + <field name="search_view_id" ref="base.view_res_partner_filter"/> + <field name="context">{'search_default_type_company': 1}</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a company in your address book + </p><p> + Odoo helps you to easily track all activities related to a customer. + </p> + </field> + </record> + + <record id="action_companies_only_view_kanban" model="ir.actions.act_window.view"> + <field name="sequence" eval="0"/> + <field name="view_mode">kanban</field> + <field name="view_id" ref="base.res_partner_kanban_view"/> + <field name="act_window_id" ref="action_companies_only"/> + </record> + <record id="action_companies_only_view_tree" model="ir.actions.act_window.view"> + <field name="sequence" eval="1"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="base.view_partner_tree"/> + <field name="act_window_id" ref="action_companies_only"/> + </record> + <record id="action_companies_only_view_form" model="ir.actions.act_window.view"> + <field name="sequence" eval="2"/> + <field name="view_mode">form</field> + <field name="view_id" ref="base.view_partner_form"/> + <field name="act_window_id" ref="action_companies_only"/> + </record> + <menuitem id="res_partner_menu_companies" + name="Companies" + action="action_companies_only" + parent="contacts.menu_contacts" + sequence="2"/> <record id="view_partner_cooperative_tree" model="ir.ui.view"> <field name="name">cooperative.tree</field> @@ -119,7 +215,8 @@ options='{"terminology": "archive"}'/> </button> </div> - <field name="image" widget='image' class="oe_avatar" options='{"preview_image": "image_medium", "size": [90, 90]}'/> + <field name="image" widget='image' class="oe_avatar" options='{"preview_image": "image_medium", "size": [90, 90]}' + attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> <div class="oe_title"> <field name="is_company" invisible="1"/> <field name="commercial_partner_id" invisible="1"/> @@ -127,90 +224,109 @@ <field name="is_cooperative" invisible="1"/> <field name="type" attrs="{'invisible': [('parent_id','=', False)]}" groups="base.group_no_one"/> <h1> - <field name="name" default_focus="1" placeholder="Name" attrs="{'required' : [('type', '=', 'contact')]}"/> + <field name="name" default_focus="1" placeholder="Name" required="True"/> </h1> </div> <group> <group string="Infos générales"> - <field name="social_object"/> + <field name="social_object" attrs="{'required':[('project_status','in',('2_pre-diagnostic','3_accompagnement','4_adhesion', '5_suivi'))]}"/> <field name="sigle"/> - <field name="organization_type_id"/> - <field name="partner_company_type_id"/> - <field name="certification_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/> - <field name="website" widget="url"/> - <field name="siren" /> - <field name="siret" /> + <field name="organization_type_id" required="True"/> + <field name="partner_company_type_id" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="certification_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}" + attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="website" widget="url" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="siren" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="siret" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> <field name="lang"/> - <field name="ape_id" context="{'partner_category_display': 'short'}" domain="[('parent_id', 'child_of', 1)]" options="{'always_reload': True}" can_create="true" can_write="true"/> - <field name="industry_id" options="{'no_create': True}" can_create="true" can_write="true"/> + <field name="ape_id" context="{'partner_category_display': 'short'}" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}" + domain="[('parent_id', 'child_of', %(l10n_eu_nace.nace_root)d), ('child_ids', '=', False)]" options='{"always_reload": True}'/> + <field name="industry_id" options="{'no_create': True}" can_create="true" can_write="true" + attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> </group> <group string="UR"> - <field name="ur"/> - <field name="creation_delegate_id" widget="res_partner_many2one"/> - <field name="followup_delegate_id" widget="res_partner_many2one"/> - <field name="revision_delegate_id" widget="res_partner_many2one"/> - <field name="creation_origin"/> - <field name="project_status" required="1"/> - <field name="cooperative_form_id"/> - <field name="date_1st_sign"/> - <field name="cae"/> - <field name="is_seed_scop"/> + <field name="ur" required="True"/> + <field name="creation_delegate_id" widget="res_partner_many2one" + attrs="{'required':[('project_status','in',('2_pre-diagnostic','3_accompagnement','4_adhesion', '5_suivi'))]}"/> + <field name="followup_delegate_id" widget="res_partner_many2one" attrs="{'required':[('project_status','in',('5_suivi'))]}"/> + <field name="revision_delegate_id" widget="res_partner_many2one" attrs="{'required':[('project_status','in',('5_suivi'))]}"/> + <field name="creation_origin" required="True"/> + <field name="project_status" required="True"/> + <field name="cooperative_form_id" attrs="{'required':[('project_status','in',('2_pre-diagnostic','3_accompagnement','4_adhesion', '5_suivi'))]}"/> + <field name="date_1st_sign" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="cae" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="is_seed_scop" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> </group> </group> <group string="Informations de contact"> <group> - <field name="phone" widget="phone" string="Téléphone 1"/> + <field name="phone" widget="phone" string="Téléphone 1" required="True"/> <field name="mobile" widget="phone" string="Téléphone 2"/> - <field name="email" widget="email" string="E-mail commercial"/> + <field name="email" widget="email" string="E-mail commercial" required="True"/> <field name="admin_email" widget="email" string="E-mail administratif"/> </group> <group> <field name="country_enforce_cities" invisible="1" modifiers="{'readonly':true,'invisible':true}"/> <label for="street" string="Adresse Administrative"/> <div class="o_address_format" modifiers="{}"> - <div attrs="{'invisible': ['|', ('parent_id', '=', False), ('type', '!=', 'contact')]}" class="oe_edit_only" modifiers="{'invisible':['|',['parent_id','=',false],['type','!=','contact']]}"> + <div attrs="{'invisible': ['|', ('parent_id', '=', False), ('type', '!=', 'contact')]}" class="oe_edit_only" + modifiers="{'invisible':['|',['parent_id','=',false],['type','!=','contact']]}"> <b modifiers="{}"> Company Address: </b> </div> - <field name="street" placeholder="Rue..." class="o_address_street" attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> - <field name="street2" placeholder="Rue 2..." class="o_address_street" attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> - <field name="street3" placeholder="Rue 3..." class="o_address_street" attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> + <field name="street" placeholder="Rue..." class="o_address_street" + attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)], 'required':[('project_status','in',('4_adhesion', '5_suivi'))]}" + modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> + <field name="street2" placeholder="Rue 2..." class="o_address_street" + attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)], 'required':[('project_status','in',('4_adhesion', '5_suivi'))]}" + modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> + <field name="street3" placeholder="Rue 3..." class="o_address_street" + attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)], 'required':[('project_status','in',('4_adhesion', '5_suivi'))]}" + modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> <field name="zip_id" options="{'create_name_field': 'city', 'no_open': True, 'no_create': True}" placeholder="ZIP" class="oe_edit_only" - attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/> - <field name="zip" placeholder="ZIP" class="o_address_zip" attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" on_change="1" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> - <field name="city" placeholder="Ville" class="o_address_city" attrs="{'invisible': [('country_enforce_cities', '=', True), ('city_id', '!=', False)], 'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)]}" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]],'invisible':[['country_enforce_cities','=',true],['city_id','!=',false]]}"/> + attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)], 'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="zip" placeholder="ZIP" class="o_address_zip" + attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)], 'required':[('project_status','in',('4_adhesion', '5_suivi'))]}" + on_change="1" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',False]]}"/> + <field name="city" placeholder="Ville" class="o_address_city" + attrs="{'invisible': [('country_enforce_cities', '=', True), ('city_id', '!=', False)], 'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)], 'required':[('project_status','in',('4_adhesion', '5_suivi'))]}" + modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]],'invisible':[['country_enforce_cities','=',true],['city_id','!=',false]]}"/> <field name="city_id" placeholder="Ville" string="Ville" class="o_address_city" context="{'default_country_id': country_id, 'default_name': city, 'default_zipcode': zip, 'default_state_id': state_id}" domain="[('country_id', '=', country_id)]" attrs="{'invisible': [('country_enforce_cities', '=', False)], 'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)]}" on_change="1" can_create="true" can_write="true" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]],'invisible':[['country_enforce_cities','=',false]]}"/> - <field name="state_id" class="o_address_state" placeholder="State" options="{'no_open': True}" attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" context="{'country_id': country_id, 'zip': zip}" on_change="1" can_create="true" can_write="true" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> - <field name="country_id" placeholder="Country" class="o_address_country" options="{'no_open': True, 'no_create': True}" attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" on_change="1" can_create="true" can_write="true" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> + <field name="state_id" class="o_address_state" placeholder="State" options="{'no_open': True}" + attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" context="{'country_id': country_id, 'zip': zip}" + on_change="1" can_create="true" can_write="true" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> + <field name="country_id" placeholder="Country" class="o_address_country" + options="{'no_open': True, 'no_create': True}" attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" + on_change="1" can_create="true" can_write="true" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> </div> </group> </group> <group string="Autres informations"> - <field name="direccte_id" widget="res_partner_many2one"/> - <field name="auditor_id" widget="res_partner_many2one"/> - <field name="accountant_id" widget="res_partner_many2one"/> - <field name="registration_date" /> - <field name="last_update_status"/> - <field name="is_main_location"/> - <field name="is_subsidiary"/> + <field name="direccte_id" widget="res_partner_many2one" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="auditor_id" widget="res_partner_many2one" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="accountant_id" widget="res_partner_many2one" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="registration_date" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="last_update_status" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="is_main_location" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="is_subsidiary" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> <field name="parent_group_name" attrs="{'required' : [('is_subsidiary', '=', True)], 'invisible' : [('is_subsidiary', '=', False)]}"/> </group> <group> <group string="Informations comptables"> - <field name="first_closeout"/> - <field name="closeout_month"/> - <field name="capital"/> + <field name="first_closeout" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="closeout_month" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="capital" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> </group> <group string="Dissolution"> <field name="dissolution_date"/> @@ -223,7 +339,8 @@ </group> <notebook colspan="4"> <page string="Contacts & Addresses" autofocus="autofocus"> - <field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer, 'default_lang': lang, 'default_user_id': user_id}"> + <field name="child_ids" mode="kanban" + context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer, 'default_lang': lang, 'default_user_id': user_id}"> <kanban> <field name="id"/> <field name="color"/> @@ -314,7 +431,8 @@ attrs="{'invisible': [('country_enforce_cities', '=', False)], 'readonly': [('type', '=', 'contact')]}" on_change="1" can_create="true" can_write="true" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]],'invisible':[['country_enforce_cities','=',false]]}"/> - <field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}' context="{'country_id': country_id, 'zip': zip}"/> + <field name="state_id" class="o_address_state" placeholder="State" + options='{"no_open": True}' context="{'country_id': country_id, 'zip': zip}"/> <field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/> </div> </div> @@ -420,7 +538,7 @@ (0, 0, {'view_mode': 'kanban', 'view_id': ref('view_partner_cooperative_kanban')}), (0, 0, {'view_mode': 'tree', 'view_id': ref('view_partner_cooperative_tree')}), (0, 0, {'view_mode': 'form', 'view_id': ref('view_partner_cooperative_form')})]"/> - <field name="context">{'default_is_company': True, 'default_is_cooperative': True, 'default_company_type': 'company'}</field> + <field name="context">{'search_default_is_cooperative': True, 'default_is_company': True, 'default_is_cooperative': True, 'default_company_type': 'company', 'default_project_status': '1_information'}</field> </record> -- GitLab