diff --git a/__manifest__.py b/__manifest__.py index fef71de54a7dcfe0fd84d4adff055e11551c466d..88b740f2dbd8cc64ca8a08743a35d03d943c56c8 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -19,6 +19,7 @@ "security/ir.model.access.csv", "views/assets.xml", "wizard/scop_period_wizard.xml", + "wizard/scop_deces_wizard.xml", "views/res_company.xml", "views/res_users.xml", "views/res_partner.xml", diff --git a/models/res_partner.py b/models/res_partner.py index a0659c99719354c8361458abcd4d35b7b0446541..280fb36ca3c6b04a978b289df443cfea7e42a59f 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -52,6 +52,7 @@ class ScopPartner(models.Model): cae = fields.Boolean("CAE") # Infos générales / Contact + cedex = fields.Char("Cedex") admin_email = fields.Char('E-mail administratif') facebook = fields.Char("Facebook") linkedin = fields.Char("LinkedIn") @@ -105,6 +106,7 @@ class ScopPartner(models.Model): comodel_name='res.partner.certification', string='Agrément', on_delete='restrict') siret = fields.Char(string='SIRET', size=14) + capital = fields.Integer("Capital social de la structure") first_closeout = fields.Date( 'Date clôture 1er bilan en coopérative') closeout_month = fields.Selection( @@ -135,6 +137,9 @@ class ScopPartner(models.Model): 'res.partner.prescriber.canal', string='Canal de Prescription', on_delete='restrict') + sigle = fields.Char("Sigle de la coopérative") + keywords_scic = fields.Many2many( + 'res.partner.keywords', string='Mots clés SCIC', on_delete='restrict') # Infos juridiques siren = fields.Char(string='SIREN', size=9, compute='_compute_siren') @@ -469,6 +474,13 @@ class ResPartnerCooperativeForm(models.Model): id_riga = fields.Integer("ID RIGA") +class ResPartnerKeywords(models.Model): + _name = "res.partner.keywords" + _description = "Keywords SCIC" + + name = fields.Char('Keywords SCIC') + + class ResPartnerCreationOrigin(models.Model): _name = "res.partner.creation.origin" _description = "Creation Origin" diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 48e99d888477a9da8c71f9d7c7ef428074b0849d..5101a46cec0b82ea299ba00085963d491269228a 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -26,3 +26,4 @@ access_scop_revision_format,access_scop_revision_format,model_scop_revision_form access_res_partner_prescriber_canal,access_res_partner_prescriber_canal,model_res_partner_prescriber_canal,base.group_user,1,1,1,1 access_scop_period,access_scop_period,model_scop_period,base.group_user,1,1,1,1 access_union_regionale,access_union_regionale,model_union_regionale,base.group_user,1,1,1,1 +access_res_partner_keywords,access_res_partner_keywords,model_res_partner_keywords,base.group_user,1,1,1,1 diff --git a/static/src/js/relational_fields.js b/static/src/js/relational_fields.js new file mode 100644 index 0000000000000000000000000000000000000000..aa1af4df24f0c998e6a76121777c42a24e71ed8e --- /dev/null +++ b/static/src/js/relational_fields.js @@ -0,0 +1,33 @@ +odoo.define('cgscop_partner.relational_fields',function(require){ +"use strict"; + +var AbstractField = require('web.AbstractField'); +var relational_fields = require('web.relational_fields'); +var FieldStatus = relational_fields.FieldStatus; + +var core = require('web.core'); + +var qweb = core.qweb; + +FieldStatus.include({ + + _render: function () { + var clickable_attr; + if (this.mode === 'readonly') { + clickable_attr = false; + } else { + clickable_attr = true; + } + var selections = _.partition(this.status_information, function (info) { + return (info.selected || !info.fold); + }); + this.$el.html(qweb.render("FieldStatus.content", { + selection_unfolded: selections[0], + selection_folded: selections[1], + clickable: clickable_attr, + })); + }, + +}); + +}); \ No newline at end of file diff --git a/views/assets.xml b/views/assets.xml index 5020a5283722cb3ac46ac3ad7a36890238f318a3..e3ba04a57847cb1c46e345433f3a47494c14687e 100644 --- a/views/assets.xml +++ b/views/assets.xml @@ -8,6 +8,7 @@ <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"/> + <script type="text/javascript" src="/cgscop_partner/static/src/js/relational_fields.js"/> </xpath> </template> diff --git a/views/res_partner.xml b/views/res_partner.xml index faefa28461b52839f950a842ac8c3af854861a9f..cabb77b0b2e183c78d234e242dbc070561931ca2 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -87,6 +87,9 @@ <field name="inherit_id" ref="base.view_partner_form"/> <field name="priority" eval="120"/> <field name="arch" type="xml"> + <xpath expr="//div[@class='oe_title']" position="attributes"> + <attribute name="class">oe_title oe_title_cgscop</attribute> + </xpath> <field name="title" position="replace"/> <xpath expr='//form/sheet/group/group[2]' position="replace"> <group name="Infos activités" attrs="{'invisible': [('is_company','=', False)]}"> diff --git a/views/res_partner_cooperative.xml b/views/res_partner_cooperative.xml index 05f1d4cfbcf74aae7c2fd71dbf05852de31fcfdb..b93c4994f4b1ec5dfea8a41dfb304184abf4b9d4 100644 --- a/views/res_partner_cooperative.xml +++ b/views/res_partner_cooperative.xml @@ -76,7 +76,7 @@ <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),('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')]}"/> + <button string="Décés/Mise en sommeil" type="action" name="%(cgscop_partner.scop_deces_wizard_create_action)d" 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> @@ -140,6 +140,7 @@ <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="cedex" class="o_address_city"/> <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}'/> @@ -265,6 +266,7 @@ <field name="industry_id" options="{'no_create': True}"/> <field name="certification_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"/> <field name="siret" readonly="True"/> + <field name="capital" attrs="{'required':[('project_status','in',('4_adhesion', '5_suivi'))]}"/> <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'))]}"/> @@ -272,6 +274,8 @@ <field name="is_incubated" required="True"/> <field name="incubator_id" widget="res_partner_many2one" attrs="{'invisible': [('is_incubated', '!=', True)]}" options="{'no_create': True}"/> <field name="prescriber_canal_id" widget="res_partner_many2one" options="{'no_create': True}"/> + <field name="sigle"/> + <field name="keywords_scic" widget="many2many_tags" /> </group> </group> <notebook colspan="4"> @@ -506,8 +510,8 @@ </form> </field> </page> - <page name='internal_notes' string="Internal Notes"> - <field name="comment" placeholder="Internal note..."/> + <page name='internal_notes' string="Commentaires"> + <field name="comment" placeholder="Commentaires..."/> </page> <page name='scop_membership' string="Périodes d'adhésion"> <field name="membership_period_ids" mode="tree"> diff --git a/wizard/__init__.py b/wizard/__init__.py index 7a24b1fe0c4972b574271631a82b59d727c98dc9..2db860f3e55ad009a0a26fa0a0fec525b71ca6d6 100644 --- a/wizard/__init__.py +++ b/wizard/__init__.py @@ -2,3 +2,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import scop_period_wizard +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..a17c1ad5639271642076606e9ee6210589028c29 --- /dev/null +++ b/wizard/scop_deces_wizard.py @@ -0,0 +1,60 @@ +# © 2019 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ScopDecesWizard(models.TransientModel): + _name = 'scop.deces.wizard' + _description = "Décés" + + # Default functions + @api.model + def _default_partner_id(self): + return self.env.context.get('active_id') + + @api.model + def _default_last_period_id(self): + return self.env['scop.period'].search( + [('partner_id', '=', self.env.context.get('active_id')), + ('end_reason', '=', False)], + limit=1) + + # Fields common + partner_id = fields.Integer('Partner', default=_default_partner_id) + + # Fields previous period + last_period_id = fields.One2many( + comodel_name='scop.period', + inverse_name='partner_id', + string="Dernière période", + default=_default_last_period_id) + end = fields.Date( + 'Fin de validité', required=True, default=fields.Date.today()) + end_reason = fields.Selection( + [('juri', "Modification de la forme juridique"), + ('form', "Changement de forme coopérative"), + ('acti', "Changement d'activité (NAF)"), + ('adr', "Changement d'adresse"), + ('nom', "Changement de dénomination sociale"), + ('autr', "Autres")], + string='Motif') + comments = fields.Text('Commentaires') + + @api.multi + def deces_action(self): + # Close previous period + last_period_id = self.env['scop.period'].browse( + self.last_period_id.id) + last_period_id.write({ + 'end': self.end, + 'end_reason': self.end_reason, + 'comments': self.comments, + }) + + # Update partner + partner = self.env['res.partner'].browse(self.partner_id) + partner.write({ + # 'dissolution_date': self.end, + # 'dissolution_reason_id' + }) diff --git a/wizard/scop_deces_wizard.xml b/wizard/scop_deces_wizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..14da21b531ae9fc53cced23ed6374262d1c53feb --- /dev/null +++ b/wizard/scop_deces_wizard.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <!-- WIZARD FORM --> + <record id="scop_deces_wizard_view_form" model="ir.ui.view"> + <field name="name">scop.deces.wizard.form</field> + <field name="model">scop.deces.wizard</field> + <field name="arch" type="xml"> + <form string="Décés"> + <group name="period" string="Décés / Mise en sommeil"> + <field name="end"/> + <field name="end_reason"/> + <field name="comments"/> + </group> + <footer> + <button class="btn btn-sm btn-primary" name="deces_action" string="Créer" type="object" confirm="Êtes-vous sûr de vouloir clôturer la dernière période ?"/> + <button class="btn btn-sm btn-default" special="cancel" string="Close"/> + </footer> + </form> + </field> + </record> + + <record id="scop_deces_wizard_create_action" model="ir.actions.act_window"> + <field name="name">Décés période</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">scop.deces.wizard</field> + <field name="view_mode">form</field> + <field name="view_id" ref="scop_deces_wizard_view_form"/> + <field name="target">new</field> + </record> + +</odoo>