diff --git a/models/res_partner.py b/models/res_partner.py index 4fdd26ef887231bdae9780ac663277a1936f29de..f5061830473a576cb6a581ed847f898957738a7b 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from datetime import datetime, timedelta -from odoo import models, fields, api +from odoo import models, fields, api, _ from odoo.exceptions import ValidationError @@ -15,6 +15,11 @@ class ScopPartner(models.Model): # Infos générales is_cooperative = fields.Boolean("Est une coopérative") + current_company_id = fields.Many2one( + 'res.company', + string='Current company', + compute='_compute_company_id') + # Informations organisme # A garder ? unique_id_si_ur = fields.Char("Identifiant unique SI UR") @@ -336,6 +341,32 @@ class ScopPartner(models.Model): for coop in self: coop.creation_suborigin_id = False + # Creation d'une periode lorsque le statut passe en Phase de Suivi + @api.onchange('project_status') + def onchange_project_status(self): + if self.project_status == '5_suivi': + new_period = self.env['scop.period'].create({ + 'partner_id': self._origin.id, + 'name': self.name, + 'cooperative_form_id': self.cooperative_form_id.id, + 'partner_company_type_id': self.partner_company_type_id.id, + 'siret': self.siret, + 'street': self.street, + 'street2': self.street2, + 'street3': self.street3, + 'zip': self.zip, + 'zip_id': self.zip_id.id, + 'city': self.city, + 'state_id': self.state_id.id, + 'country_id': self.country_id.id, + 'naf_id': self.naf_id.id, + 'industry_id': self.industry_id.id, + 'cae': self.cae, + 'parent_group_name': self.parent_group_name, + 'is_main_location': self.is_main_location + }) + self.scop_period_ids = new_period + @api.model def _compute_siren(self): for company in self: @@ -349,8 +380,31 @@ class ScopPartner(models.Model): company.seed_end = company.date_1st_sign + timedelta(2556) else: company.seed_end = str(datetime.today() + timedelta(2556)) + + @api.model + def _compute_company_id(self): + for company in self: + company.current_company_id = self.env['res.company'].browse(self.env.user.company_id.id) + @api.multi + def coop_open_act(self): + user_current = self.env.user.id + company_current = self.env['res.company'].browse(self.env.user.company_id.id) + return { + 'name': _("Cooperative"), + 'type': 'ir.actions.act_window', + 'res_model': 'res.partner', + 'view_mode': 'tree,form', + 'view_type': 'form', + 'views': [[False, 'tree'], [False, 'form'], ], + # 'context': {'search_default_company_id': [company_current.id]}, + 'context': {'search_default_type_cooperative': True, 'search_default_company_id': [company_current.id], 'default_is_company': True, 'default_is_cooperative': True, 'default_company_type': 'company', 'default_project_status': '5_suivi'}, + 'target': 'current', + } + # @api.multi + # def action_deces(self): + class ResPartneCertification(models.Model): _name = "res.partner.certification" _description = "Certification" diff --git a/static/src/js/kanban_renderer.js b/static/src/js/kanban_renderer.js new file mode 100644 index 0000000000000000000000000000000000000000..168bc4cbb02024ff6bbf9cde7b00ff4d9107af42 --- /dev/null +++ b/static/src/js/kanban_renderer.js @@ -0,0 +1,23 @@ +odoo.define('cgscop_partner.kanban_renderer',function(require){ +"use strict"; + + +var KanbanRenderer = require('web.KanbanRenderer'); + +KanbanRenderer.include({ + + _setState: function (state) { + this._super.apply(this, arguments); + + var arch = this.arch; + if (arch.attrs.block_drag_drop_kanban) { + if (arch.attrs.block_drag_drop_kanban=='true') { + this.columnOptions.draggable = false; + } + } + + }, + +}); + +}); \ No newline at end of file diff --git a/views/assets.xml b/views/assets.xml index ff7781d4ce8a4a9df006bbcb4187e05a23217b97..5020a5283722cb3ac46ac3ad7a36890238f318a3 100644 --- a/views/assets.xml +++ b/views/assets.xml @@ -7,6 +7,7 @@ <template id="cgscop_assets_backend" name="account assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <link rel="stylesheet" type="text/css" href="/cgscop_partner/static/src/css/style.css"/> + <script type="text/javascript" src="/cgscop_partner/static/src/js/kanban_renderer.js"/> </xpath> </template> diff --git a/views/res_partner_cooperative.xml b/views/res_partner_cooperative.xml index 6e166d3f5e306e7e1a15c80b135154c9dac0c516..45df18e3bd35641e1a3551275e468b680600823b 100644 --- a/views/res_partner_cooperative.xml +++ b/views/res_partner_cooperative.xml @@ -55,6 +55,7 @@ <attribute name="group_edit">false</attribute> <attribute name="group_delete">false</attribute> <attribute name="quick_create">false</attribute> + <attribute name="block_drag_drop_kanban">true</attribute> </xpath> <xpath expr="//kanban/field[@name='type']" position="after"> <field name="activity_ids" /> @@ -74,8 +75,9 @@ <field name="arch" type="xml"> <form string="Cooperatives"> <header> - <button string="Nouvelle période" type="action" name="%(cgscop_partner.scop_period_wizard_create_action)d" class="oe_highlight" attrs="{'invisible': [('write_date', '=', False)]}"/> - <field name="project_status" widget="statusbar" statusbar_visible="1_information,2_pre-diagnostic,3_accompagnement,4_adhesion,5_suivi"/> + <button string="Nouvelle période" type="action" name="%(cgscop_partner.scop_period_wizard_create_action)d" class="oe_highlight" attrs="{'invisible': ['|', ('write_date', '=', False),('project_status', '!=', '5_suivi')]}"/> + <button string="Décés/Mise en sommeil" type="object" name="action_deces" class="oe_highlight" attrs="{'invisible': [('project_status', '!=', '5_suivi')]}"/> + <field name="project_status" widget="statusbar" clickable="True" statusbar_visible="1_information,2_pre-diagnostic,3_accompagnement,4_adhesion,5_suivi"/> </header> <sheet> <div class="oe_button_box" name="button_box"> @@ -114,171 +116,165 @@ <h3> <field name="member_number" readonly="True" class="o_field_header"/> </h3> - <!-- <h3> --> - <label for='cae' string="CAE" attrs="{'invisible':[('cae','=',False)]}"/> - <field name="cae" readonly="True" class="oe_edit_only o_field_header"/> - <!-- </h3> --> + <h3> + <span name="cae" class="o_field_widget o_readonly_modifier o_field_header" attrs="{'invisible':[('cae','=',False)]}">CAE</span> + <field name="cae" invisible="1" /> + </h3> <field name="supplier" invisible="True"/> <field name="customer" invisible="True"/> <field name="user_id" invisible="True"/> </div> </div> </div> + <group col="3" string="Informations Générales"> + <group string="Contact"> + <label for='street' string="Adresse Administrative"/> + <div class="o_address_format oe_read_only" modifiers="{}"> + <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="City completion" + class="oe_edit_only"/> + <field name="zip" placeholder="ZIP" class="o_address_zip"/> + <field name="city" placeholder="Ville" class="o_address_city" + attrs="{'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)]}" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> + <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> + <field name="phone" widget="phone" string="Téléphone 1"/> + <field name="mobile" widget="phone" string="Téléphone 2"/> + <field name="admin_email" widget="email" string="E-mail administratif"/> + <field name="email" widget="email" string="E-mail commercial"/> + <field name="website" widget="url"/> + <label for='facebook' class="oe_read_only" string="Réseaux sociaux" attrs="{'invisible':[('facebook','=',False),('linkedin','=',False),('twitter','=',False)]}"/> + <div > + <button string="" class="btn-cgscop oe_read_only" name="open_facebook" type="object" icon="fa-facebook" attrs="{'invisible':[('facebook','=',False)]}"/> + <button string="" class="btn-cgscop oe_read_only" name="open_linkedin" type="object" icon="fa-linkedin" attrs="{'invisible':[('linkedin','=',False)]}"/> + <button string="" class="btn-cgscop oe_read_only" name="open_twitter" type="object" icon="fa-twitter" attrs="{'invisible':[('twitter','=',False)]}"/> + </div> + <label for='facebook' string="Facebook" class="oe_edit_only"/> + <div > + <field class="oe_edit_only" name="facebook" widget="url"/> + </div> + <label class="oe_edit_only" for='linkedin' string="LinkedIn"/> + <div > + <field class="oe_edit_only" name="linkedin" widget="url"/> + </div> + <label class="oe_edit_only" for='twitter' string="Twitter"/> + <div > + <field class="oe_edit_only" name="twitter" widget="url"/> + </div> + <field name="director_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_zip_id': zip_id, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer, 'default_lang': lang, 'default_user_id': user_id, 'default_type': 'contact'}"> + <kanban> + <field name="id"/> + <field name="color"/> + <field name="name"/> + <field name="title"/> + <field name="type"/> + <field name="email"/> + <field name="parent_id"/> + <field name="is_company"/> + <field name="function"/> + <field name="phone"/> + <field name="street"/> + <field name="street2"/> + <field name="street3"/> + <field name="zip"/> + <field name="zip_id"/> + <field name="city"/> + <field name="country_id"/> + <field name="mobile"/> + <field name="state_id"/> + <field name="image_small"/> + <field name="lang"/> + <field name="comment"/> + <field name="customer"/> + <field name="display_name"/> + <field name="supplier"/> + <templates> + <t t-name="kanban-box"> + <t t-set="color" t-value="kanban_color(record.color.raw_value)"/> + <div t-att-class="color + (record.title.raw_value == 1 ? ' oe_kanban_color_alert' : '') + ' oe_kanban_global_click'"> + <div class="oe_kanban_details"> + <field name="name"/> + <div t-if="record.function.raw_value"><field name="function"/></div> + <div t-if="record.email.raw_value"><field name="email" widget="email"/></div> + <div t-if="record.phone.raw_value">Phone: <field name="phone" widget="phone"/></div> + <div t-if="record.mobile.raw_value">Mobile: <field name="mobile" widget="phone"/></div> + </div> + </div> + </t> + </templates> + </kanban> + <form string="Contact Dirigeant"> + <sheet> + <field name="type" invisible="1" widget="radio" options="{'horizontal': true}"/> + <field name="parent_id" invisible="1"/> + <group> + <group invisible="1"> + <field name="street"/> + <field name="street2"/> + <field name="street3"/> + <field name="zip_id"/> + <field name="zip"/> + <field name="city"/> + <field name="state_id"/> + <field name="country_id"/> + </group> + <group> + <field name="name" string="Contact Name" attrs="{'required' : [('type', '=', 'contact')]}"/> + <field name="title" placeholder="e.g. Mr." + attrs="{'invisible': [('type','!=', 'contact')]}"/> + <field name="function" placeholder="e.g. Sales Director" + attrs="{'invisible': [('type','!=', 'contact')]}"/> + <field name="email"/> + <field name="phone" widget="phone"/> + <field name="mobile" widget="phone"/> + <field name="comment" placeholder="internal note..."/> + </group> + </group> + <field name="supplier" invisible="True"/> + <field name="customer" invisible="True"/> + <field name="lang" invisible="True"/> + <field name="image" invisible="True"/> + <field name="user_id" invisible="True"/> + </sheet> + </form> + </field> + </group> + <group string="Suivi UR"> + <field name="company_id" string="UR" required="True" domain="[('id', '!=', 1)]"/> + <field name="creation_delegate_id" widget="res_partner_many2one" + attrs="{'required':[('project_status','in',('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_person_id" widget="res_partner_many2one" readonly="True"/> + <field name="parent_group_name"/> + <field name="category_id" string="Segmentation" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/> + </group> + <group string="Informations Activité"> + <field name="creation_origin_id" required="True"/> + <field name="creation_suborigin_id" attrs="{'required':[('creation_origin_id','!=',False)]}" domain="[('parent_id', '=', creation_origin_id)]"/> + <field name="date_1st_sign" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="registration_date" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="social_object" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="naf_id" readonly="True" context="{'partner_category_display': 'short'}"/> + <field name="industry_id"/> + <field name="certification_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/> + <field name="siret" readonly="True"/> + <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="is_seed_scop" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> + <field name="seed_end" attrs="{'invisible': [('is_seed_scop', '!=', True)], 'required':[('project_status','in',('4_adhesion', '5_suivi')),('is_seed_scop', '=', True)]}"/> + <field name="is_incubated" required="True"/> + <field name="incubator_id" widget="res_partner_many2one" attrs="{'invisible': [('is_incubated', '!=', True)]}"/> + <field name="prescriber_canal_id" widget="res_partner_many2one"/> + </group> + </group> <notebook colspan="4"> - <page name="general_info" string="Informations Générales"> - <group > - <group string="Contact"> - <label for='street' string="Adresse Administrative"/> - <div class="o_address_format oe_read_only" modifiers="{}"> - <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="City completion" - class="oe_edit_only"/> - <field name="zip" placeholder="ZIP" class="o_address_zip"/> - <field name="city" placeholder="Ville" class="o_address_city" - attrs="{'readonly': [('type', '=', 'contact'), ('parent_id', '!=', False)]}" modifiers="{'readonly':[['type','=','contact'],['parent_id','!=',false]]}"/> - <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> - <field name="phone" widget="phone" string="Téléphone 1"/> - <field name="mobile" widget="phone" string="Téléphone 2"/> - <field name="admin_email" widget="email" string="E-mail administratif"/> - <field name="email" widget="email" string="E-mail commercial"/> - <field name="website" widget="url"/> - <label for='facebook' class="oe_read_only" string="Réseaux sociaux" attrs="{'invisible':[('facebook','=',False),('linkedin','=',False),('twitter','=',False)]}"/> - <div > - <button string="" class="btn-cgscop oe_read_only" name="open_facebook" type="object" icon="fa-facebook" attrs="{'invisible':[('facebook','=',False)]}"/> - <button string="" class="btn-cgscop oe_read_only" name="open_linkedin" type="object" icon="fa-linkedin" attrs="{'invisible':[('linkedin','=',False)]}"/> - <button string="" class="btn-cgscop oe_read_only" name="open_twitter" type="object" icon="fa-twitter" attrs="{'invisible':[('twitter','=',False)]}"/> - </div> - <label for='facebook' string="Facebook" class="oe_edit_only"/> - <div > - <field class="oe_edit_only" name="facebook" widget="url"/> - </div> - <label class="oe_edit_only" for='linkedin' string="LinkedIn"/> - <div > - <field class="oe_edit_only" name="linkedin" widget="url"/> - </div> - <label class="oe_edit_only" for='twitter' string="Twitter"/> - <div > - <field class="oe_edit_only" name="twitter" widget="url"/> - </div> - <field name="director_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_zip_id': zip_id, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer, 'default_lang': lang, 'default_user_id': user_id, 'default_type': 'contact'}"> - <kanban> - <field name="id"/> - <field name="color"/> - <field name="name"/> - <field name="title"/> - <field name="type"/> - <field name="email"/> - <field name="parent_id"/> - <field name="is_company"/> - <field name="function"/> - <field name="phone"/> - <field name="street"/> - <field name="street2"/> - <field name="street3"/> - <field name="zip"/> - <field name="zip_id"/> - <field name="city"/> - <field name="country_id"/> - <field name="mobile"/> - <field name="state_id"/> - <field name="image_small"/> - <field name="lang"/> - <field name="comment"/> - <field name="customer"/> - <field name="display_name"/> - <field name="supplier"/> - <templates> - <t t-name="kanban-box"> - <t t-set="color" t-value="kanban_color(record.color.raw_value)"/> - <div t-att-class="color + (record.title.raw_value == 1 ? ' oe_kanban_color_alert' : '') + ' oe_kanban_global_click'"> - <div class="oe_kanban_details"> - <field name="name"/> - <div t-if="record.function.raw_value"><field name="function"/></div> - <div t-if="record.email.raw_value"><field name="email" widget="email"/></div> - <div t-if="record.phone.raw_value">Phone: <field name="phone" widget="phone"/></div> - <div t-if="record.mobile.raw_value">Mobile: <field name="mobile" widget="phone"/></div> - </div> - </div> - </t> - </templates> - </kanban> - <form string="Contact Dirigeant"> - <sheet> - <field name="type" invisible="1" widget="radio" options="{'horizontal': true}"/> - <field name="parent_id" invisible="1"/> - <group> - <group invisible="1"> - <field name="street"/> - <field name="street2"/> - <field name="street3"/> - <field name="zip_id"/> - <field name="zip"/> - <field name="city"/> - <field name="state_id"/> - <field name="country_id"/> - </group> - <group> - <field name="name" string="Contact Name" attrs="{'required' : [('type', '=', 'contact')]}"/> - <field name="title" placeholder="e.g. Mr." - attrs="{'invisible': [('type','!=', 'contact')]}"/> - <field name="function" placeholder="e.g. Sales Director" - attrs="{'invisible': [('type','!=', 'contact')]}"/> - <field name="email"/> - <field name="phone" widget="phone"/> - <field name="mobile" widget="phone"/> - <field name="comment" placeholder="internal note..."/> - </group> - </group> - <field name="supplier" invisible="True"/> - <field name="customer" invisible="True"/> - <field name="lang" invisible="True"/> - <field name="image" invisible="True"/> - <field name="user_id" invisible="True"/> - </sheet> - </form> - </field> - </group> - <group string="Suivi UR"> - <field name="company_id" string="UR" required="True" domain="[('id', '!=', 1)]"/> - <field name="creation_delegate_id" widget="res_partner_many2one" - attrs="{'required':[('project_status','in',('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_person_id" widget="res_partner_many2one" readonly="True"/> - <field name="parent_group_name"/> - <field name="category_id" string="Segmentation" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/> - </group> - </group> - <group string="Informations Activité"> - <group> - <field name="creation_origin_id" required="True"/> - <field name="creation_suborigin_id" attrs="{'required':[('creation_origin_id','!=',False)]}" domain="[('parent_id', '=', creation_origin_id)]"/> - <field name="date_1st_sign" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> - <field name="registration_date" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> - <field name="social_object" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> - <field name="naf_id" readonly="True" context="{'partner_category_display': 'short'}"/> - </group> - <group> - <field name="industry_id"/> - <field name="certification_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/> - <field name="siret" readonly="True"/> - <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="is_seed_scop" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> - <field name="seed_end" attrs="{'invisible': [('is_seed_scop', '!=', True)], 'required':[('project_status','in',('4_adhesion', '5_suivi')),('is_seed_scop', '=', True)]}"/> - <field name="is_incubated" required="True"/> - <field name="incubator_id" widget="res_partner_many2one" attrs="{'invisible': [('is_incubated', '!=', True)]}"/> - <field name="prescriber_canal_id" widget="res_partner_many2one"/> - </group> - </group> - </page> <page name="juridical_info" string="Informations Juridiques"> <group> <field name="siren" readonly="True"/> @@ -578,12 +574,19 @@ </record> <!-- Prospects Action --> + <!-- <record id="action_scop_cooperative_act" model="ir.actions.server"> + <field name="name">Coopératives</field> + <field name="model_id" ref="model_res_partner"/> + <field name="state">code</field> + <field name="code">action = env.get('res.partner').coop_open_act()</field> + </record> --> + + <record model="ir.actions.act_window" id="scop_cooperative_act"> <field name="name">Coopératives</field> <field name="res_model">res.partner</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <!-- <field name="search_view_id" ref="base.view_res_partner_filter"/> --> <field name="search_view_id" ref="cgscop_partner.res_partner_view_search_inherit_scop"/> <field name="domain" eval="[('is_cooperative', '=', True),('project_status','=','5_suivi')]"/> <field name="view_ids" eval="[(5, 0, 0),