Skip to content
Extraits de code Groupes Projets
scop_partner_staff.py 4,54 ko
Newer Older
  • Learn to ignore specific revisions
  • # © 2020 Le Filament (<http://www.le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    
    from odoo import models, fields, api
    from odoo.exceptions import ValidationError
    
    
    
    class ScopPartnerStaff(models.Model):
        _name = "scop.partner.staff"
    
    jordan's avatar
    jordan a validé
        _description = "Effectifs"
    
        _rec_name = 'partner_id'
        _order = 'effective_date, partner_id'
    
        partner_id = fields.Many2one(
            comodel_name='res.partner',
            string='Organisme',
    
            domain=[('is_cooperative', '=', True)],
    
        partner_city = fields.Char("Ville", related='partner_id.city')
        partner_siret = fields.Char("SIRET", related='partner_id.siret')
    
        user_id = fields.Many2one(
            comodel_name='res.users',
            string='Utilisateur',
            ondelete='set null',
            required=True,
            default=lambda self: self.env.uid)
        type_entry = fields.Selection([
    
            ('questionnaire', 'Questionnaire'),
            ('questionnaire_inscription', 'Questionnaire Inscription'),
    
            ('regul_ur', 'Régularisation UR'),
            ('regul_cg', 'Régularisation CG'),
            ('regul_diane', 'Régularisation Diane')],
    
        effective_date = fields.Date(
            string="Date",
            default=fields.Date.today(),
            required=True,)
        staff_count = fields.Integer("Effectif (EF)", required=True,)
    
        staff_shareholder_count = fields.Integer("Eff. Sociétaires (ES)", required=True,)
    
    jordan's avatar
    jordan a validé
        staff_average = fields.Integer("Equivalent temps plein (ETP)", required=True,)
    
        staff_men = fields.Integer("Eff. salariés hommes")
        staff_women = fields.Integer("Eff. salariés femmes")
        staff_shareholder_men = fields.Integer("Sociétaires salariés hommes")
        staff_shareholder_women = fields.Integer("Sociétaires salariés femmes")
    
    
        questionnaire_id = fields.Many2one(
            comodel_name='scop.questionnaire',
            string='Questionnaire',
            ondelete='cascade')
    
    
        # ------------------------------------------------------
        # OnChange
        # ------------------------------------------------------
        @api.onchange('type_entry')
        def _onchange_type_entry(self):
            """
                Interdit la sélection questionnaire ou questionnaire inscription
                sur l'interface
            """
    
            if self.type_entry in ('questionnaire', 'questionnaire_inscription') \
                    and not self.env.user.has_group(
                    'cgscop_partner.group_cg_administrative'):
    
                raise ValidationError(
                    'Vous ne pouvez choisir que des types "Régularisation".')
    
        # ------------------------------------------------------
        # Contrains
        # ------------------------------------------------------
    
        @api.one
        @api.constrains('staff_count', 'staff_shareholder_count', 'staff_average')
        def _check_staff(self):
    
            """
                Interdit de créer une ligne à 0 sauf lorsque
                cette ligne vient de la liste ministère
            """
    
            if ((self.staff_count == 0
                    or self.staff_shareholder_count == 0
                    or self.staff_average == 0)
                    and self.type_entry not in ('questionnaire', 'questionnaire_inscription')):
                raise ValidationError(
                    "Tous les effectifs doivent être renseignés et supérieurs à 0.")
    
    
        @api.constrains('effective_date')
        def _check_effective_date(self):
            """
                Interdit la création de deux lignes à une même date
                pour un même partenaire sauf pour LM
            """
            for record in self:
                doublon = self.search([
                    ('partner_id', '=', record.partner_id.id),
                    ('effective_date', '=', record.effective_date)
                ])
                if (len(doublon) > 1
                        and record.type_entry not in ('questionnaire', 'questionnaire_inscription')):
                    raise ValidationError(
                        "Vous ne pouvez pas créer 2 ajustements à la même date.")
    
    
        # ------------------------------------------------------
        # Buttons
        # ------------------------------------------------------
        def edit_staff(self):
            form_id = self.env.ref(
                "cgscop_partner.scop_partner_staff_form_view")
            return {
                'type': 'ir.actions.act_window',
                'res_model': 'scop.partner.staff',
                'view_mode': 'form',
                'views': [[form_id.id, 'form']],
                'res_id': self.id,
                'target': 'new',
            }