From 4385a2dfdcf8cf03546c7201f4550dda93020cf1 Mon Sep 17 00:00:00 2001 From: Remi <remi@le-filament.com> Date: Fri, 20 Sep 2019 12:50:03 +0200 Subject: [PATCH] =?UTF-8?q?Add=20wizard=20nouvelle=20p=C3=A9riode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 1 + __manifest__.py | 1 + views/res_partner_cooperative.xml | 3 +- wizard/__init__.py | 4 + wizard/scop_period_wizard.py | 235 ++++++++++++++++++++++++++++++ wizard/scop_period_wizard.xml | 55 +++++++ 6 files changed, 298 insertions(+), 1 deletion(-) create mode 100644 wizard/__init__.py create mode 100644 wizard/scop_period_wizard.py create mode 100644 wizard/scop_period_wizard.xml diff --git a/__init__.py b/__init__.py index 31660d6..93aa2c1 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,4 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import models +from . import wizard diff --git a/__manifest__.py b/__manifest__.py index 8b388b9..d48ebdb 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -18,6 +18,7 @@ "security/security_rules.xml", "security/ir.model.access.csv", "views/assets.xml", + "wizard/scop_period_wizard.xml", "views/res_partner.xml", "views/res_partner_cooperative.xml", "views/scop_config_views.xml", diff --git a/views/res_partner_cooperative.xml b/views/res_partner_cooperative.xml index 38409d5..de5d55a 100644 --- a/views/res_partner_cooperative.xml +++ b/views/res_partner_cooperative.xml @@ -72,6 +72,7 @@ <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"/> <field name="project_status" widget="statusbar" options="{'clickable': '0'}" statusbar_visible="1_information,2_pre-diagnostic,3_accompagnement,4_adhesion,5_suivi"/> </header> <sheet> @@ -348,7 +349,7 @@ <create string="Créer une nouvelle période"/> </control> </tree> - <form readonly="1"> + <form> <group name="period" string="Période" col="2"> <group> <field name="start" readonly="1"/> diff --git a/wizard/__init__.py b/wizard/__init__.py new file mode 100644 index 0000000..7a24b1f --- /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_period_wizard diff --git a/wizard/scop_period_wizard.py b/wizard/scop_period_wizard.py new file mode 100644 index 0000000..8bc31be --- /dev/null +++ b/wizard/scop_period_wizard.py @@ -0,0 +1,235 @@ +# © 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 ScopPeiodWizard(models.TransientModel): + _name = 'scop.period.wizard' + _description = "Création d'une nouvelle période" + + # Default functions + @api.model + def _default_partner_id(self): + return self.env.context.get('active_id') + + @api.model + def _default_previous_period_id(self): + return self.env['scop.period'].search( + [('partner_id', '=', self.env.context.get('active_id')), + ('end_reason', '=', False)], + limit=1).id + + @api.model + def _default_name(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).name + + @api.model + def _default_cooperative_form_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).cooperative_form_id + + @api.model + def _default_partner_company_type_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).partner_company_type_id + + @api.model + def _default_siret(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).siret + + @api.model + def _default_street(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).street + + @api.model + def _default_street2(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).street2 + + @api.model + def _default_street3(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).street3 + + @api.model + def _default_zip(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).zip + + @api.model + def _default_zip_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).zip_id + + @api.model + def _default_city(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).city + + @api.model + def _default_city_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).city_id + + @api.model + def _default_state_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).state_id + + @api.model + def _default_country_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).country_id + + @api.model + def _default_naf_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).naf_id + + @api.model + def _default_industry_id(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).industry_id + + @api.model + def _default_cae(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).cae + + @api.model + def _default_parent_group_name(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).parent_group_name + + @api.model + def _default_is_main_location(self): + return self.env['res.partner'].browse( + self.env.context.get('active_id')).is_main_location + + # Fields common + partner_id = fields.Integer('Partner', default=_default_partner_id) + + # Fields previous period + previous_period_id = fields.Integer(default=_default_previous_period_id) + 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') + + # Fields new period + start = fields.Date('Début de validité', required=True, + default=fields.Date.today()) + name = fields.Char('Raison Sociale', required=True, default=_default_name) + cooperative_form_id = fields.Many2one( + 'res.partner.cooperative.form', + string="Cooperative form", + on_delete='restrict', required=True, + default=_default_cooperative_form_id) + partner_company_type_id = fields.Many2one( + comodel_name='res.partner.company.type', + string='Legal Form', + track_visibility='onchange', + on_delete='restrict', required=True, + default=_default_partner_company_type_id) + siret = fields.Char(string='SIRET', size=14, required=True, + default=_default_siret) + street = fields.Char(default=_default_street) + street2 = fields.Char(default=_default_street2) + street3 = fields.Char(default=_default_street3) + zip = fields.Char(default=_default_zip) + zip_id = fields.Many2one('res.city.zip', 'ZIP Location', + default=_default_zip_id) + city = fields.Char(default=_default_city) + city_id = fields.Many2one('res.city', string='City of Address', + default=_default_city_id) + state_id = fields.Many2one( + "res.country.state", + string='State', + ondelete='restrict', + domain="[('country_id', '=?', country_id)]", + default=_default_state_id) + country_id = fields.Many2one( + 'res.country', string='Country', ondelete='restrict', + default=_default_country_id) + naf_id = fields.Many2one( + 'res.partner.naf', + string='Code NAF', + on_delete='restrict', default=_default_naf_id) + industry_id = fields.Many2one('res.partner.industry', 'Industry', + on_delete='restrict', + default=_default_industry_id) + cae = fields.Boolean("CAE", default=_default_cae) + parent_group_name = fields.Char('Coopérative mère', + default=_default_parent_group_name) + is_main_location = fields.Boolean("Est l'établissement principal", + default=_default_is_main_location) + + + # Action + @api.multi + def create_period(self): + # Create new period + self.env['scop.period'].create({ + 'partner_id': self.partner_id, + 'start': self.start, + '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, + 'city_id': self.city_id.id, + '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 + }) + + # Close previous period + previous_period = self.env['scop.period'].browse( + self.previous_period_id) + if previous_period: + previous_period.write({ + 'end': self.start, + 'end_reason': self.end_reason, + 'comments': self.comments, + }) + + # Update partner + partner = self.env['res.partner'].browse(self.partner_id) + partner.write({ + '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, + 'city_id': self.city_id.id, + '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 + }) diff --git a/wizard/scop_period_wizard.xml b/wizard/scop_period_wizard.xml new file mode 100644 index 0000000..1952922 --- /dev/null +++ b/wizard/scop_period_wizard.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <!-- WIZARD FORM --> + <record id="scop_period_wizard_view_form" model="ir.ui.view"> + <field name="name">scop.period.wizard.form</field> + <field name="model">scop.period.wizard</field> + <field name="arch" type="xml"> + <form string="Nouvelle Période"> + <group name="period" string="Période" col="2"> + <field name="start" required="1"/> + <field name="previous_period_id" invisible="1"/> + <field name="end_reason" attrs="{'required': [('previous_period_id', '!=', 0)], 'invisible': [('previous_period_id', '=', 0)]}"/> + <field name="comments" attrs="{'required': [('previous_period_id', '!=', 0)], 'invisible': [('previous_period_id', '=', 0)]}"/> + </group> + <group col="2"> + <group> + <field name="name" required="1"/> + <field name="cooperative_form_id" required="1"/> + <field name="partner_company_type_id" required="1"/> + <field name="siret" required="1"/> + <field name="street" required="1"/> + <field name="street2"/> + <field name="street3"/> + <field name="zip_id" invisible="1"/> + <field name="zip" required="1"/> + <field name="city_id" invisible="1"/> + <field name="city" required="1"/> + <field name="state_id" invisible="1"/> + <field name="country_id" invisible="1"/> + </group> + <group> + <field name="naf_id" required="1"/> + <field name="cae"/> + <field name="is_main_location"/> + <field name="parent_group_name"/> + </group> + </group> + <footer> + <button class="btn btn-sm btn-primary" name="create_period" string="Créer" type="object" confirm="Êtes-vous sûr de vouloir créer une nouvelle période ?"/> + <button class="btn btn-sm btn-default" special="cancel" string="Close"/> + </footer> + </form> + </field> + </record> + + <record id="scop_period_wizard_create_action" model="ir.actions.act_window"> + <field name="name">Nouvelle période</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">scop.period.wizard</field> + <field name="view_mode">form</field> + <field name="view_id" ref="scop_period_wizard_view_form"/> + <field name="target">new</field> + </record> + +</odoo> -- GitLab