Sélectionner une révision Git
scop_partner_staff.py 3,53 Kio
# © 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"
_description = "Contributions"
_rec_name = 'partner_id'
_order = 'effective_date, partner_id'
partner_id = fields.Many2one(
comodel_name='res.partner',
string='Organisme',
domain=[('is_coopeartive', '=', True)],
ondelete='restrict',
required=True,
index=True)
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')],
string="Type",
default='regul_ur',
required=True,)
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,)
staff_average = fields.Integer("Eff. Moyen (EM)", required=True,)
questionnaire_id = fields.Many2one(
comodel_name='scop.questionnaire',
string='Questionnaire',
ondelete='cascade')
comment = fields.Char('Commentaire')
# ------------------------------------------------------
# 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'):
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.")