Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • b2d1ef3d473f68164496a99a11f4567bd3acfd0b
  • 14.0 par défaut
  • 12.0 protégée
  • 13.0
  • 12.0-lm-00 protégée
5 résultats

scop_period.py

Blame
  • scop_address_wizard.py 9,34 Kio
    # © 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
    from odoo.exceptions import ValidationError
    
    
    class ScopPeriodWizard(models.TransientModel):
        _name = 'scop.address.wizard'
        _description = "Wizard changement d'adresse"
    
        # 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', '=', 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_cedex(self):
            return self.env['res.partner'].browse(
                self.env.context.get('active_id')).cedex
    
        @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_cae(self):
            return self.env['res.partner'].browse(
                self.env.context.get('active_id')).cae
    
        @api.model
        def _default_ur_id(self):
            return self.env['res.partner'].browse(
                self.env.context.get('active_id')).ur_id
    
        # 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',
            default='adr')
        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)
        cedex = fields.Char(default=_default_cedex)
        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)
        cae = fields.Boolean("CAE", default=_default_cae)
        ur_id = fields.Many2one(
            comodel_name='union.regionale',
            string='Union Régionale',
            default=_default_ur_id)
    
        # Action
        @api.onchange('zip_id')
        def _onchange_zip_id(self):
            if self.zip_id:
                self.zip = self.zip_id.name
                self.city = self.zip_id.city_id.name
                self.country_id = self.zip_id.city_id.country_id
                self.state_id = self.zip_id.city_id.state_id
    
        @api.multi
        def create_period(self):
            for period in self:
                partner_values = {}
                partner = self.env['res.partner'].browse(period.partner_id)
    
                # Check changement de région
                zip_id = self.env['res.city.zip'].search([
                    ('name', '=', period.zip)])
                region = zip_id[0].city_id[0].state_id
                if partner.region and region != partner.region:
                    raise ValidationError(
                        "Vous ne pouvez pas modifier l'adresse "
                        "dans une autre région.\n"
                        " - ancienne région : %s\n"
                        " - nouvelle région : %s" % (partner.region.name, region.name))
    
                # Close previous period
                previous_period = self.env['scop.period'].browse(
                    period.previous_period_id)
                if previous_period:
                    if previous_period.end:
                        if period.start >= previous_period.end:
                            partner_values = {
                                'dissolution_date': False,
                            }
                        else:
                            raise ValidationError(
                                "La nouvelle période ne peut commencer avant la "
                                + "fin de la période précédente : "
                                + str(previous_period.end))
                    if period.start >= previous_period.start:
                        if not previous_period.end:
                            previous_period.sudo().write({
                                'end': period.start,
                                'end_reason': period.end_reason,
                                'comments': period.comments,
                            })
                    else:
                        raise ValidationError(
                            "La nouvelle période ne peut commencer avant la "
                            + "période précédente : "
                            + str(previous_period.start))
    
                # Create new period
                period_values = {
                    'start': period.start,
                    'partner_id': period.partner_id
                }
    
                values = {
                    'name': period.name,
                    'dissolution_reason_id': False,
                    'cooperative_form_id': period.cooperative_form_id.id,
                    'partner_company_type_id': period.partner_company_type_id.id,
                    'siret': period.siret,
                    'street': period.street,
                    'street2': period.street2,
                    'street3': period.street3,
                    'zip': period.zip,
                    'zip_id': period.zip_id.id,
                    'city': period.city,
                    'cedex': period.cedex,
                    'state_id': period.state_id.id,
                    'country_id': period.country_id.id,
                    'naf_id': period.naf_id.id,
                    'cae': period.cae,
                    'ur_id': period.ur_id.id,
                }
                period_values.update(values)
                self.env['scop.period'].sudo().create(period_values)
    
                # Update partner
                partner_values.update({
                    'siret': period.siret,
                    'street': period.street,
                    'street2': period.street2,
                    'street3': period.street3,
                    'zip': period.zip,
                    'zip_id': period.zip_id.id,
                    'city': period.city,
                    'cedex': period.cedex,
                    'state_id': period.state_id.id,
                    'country_id': period.country_id.id,
                    'ur_id': period.ur_id.id,
                })
                partner.sudo().write(partner_values)