Newer
Older

Benjamin - Le Filament
a validé
# © 2020 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

Benjamin - Le Filament
a validé
from odoo import models, fields, api
from odoo.exceptions import ValidationError

Benjamin - Le Filament
a validé
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'),

Benjamin - Le Filament
a validé
('regul_ur', 'Régularisation UR'),
('regul_cg', 'Régularisation CG'),
('regul_diane', 'Régularisation Diane')],

Benjamin - Le Filament
a validé
string="Type",

Benjamin - Le Filament
a validé
default='regul_ur',
required=True,)

Benjamin - Le Filament
a validé
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,)

Benjamin - Le Filament
a validé
questionnaire_id = fields.Many2one(
comodel_name='scop.questionnaire',
string='Questionnaire',
ondelete='cascade')

Benjamin - Le Filament
a validé
comment = fields.Char('Commentaire')

Benjamin - Le Filament
a validé
# ------------------------------------------------------
# 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.constrains(
'staff_count',
'staff_shareholder_count'
'staff_average')

Benjamin - Le Filament
a validé
def _check_staff_count(self):
"""
Interdit de créer une ligne à 0 sauf lorsque
cette ligne vient de la liste ministère
"""
for record in self:
if ((record.staff_count == 0
or record.staff_shareholder_count == 0
or record.staff_average == 0)
and record.type_entry not in ('questionnaire', 'questionnaire_inscription')):

Benjamin - Le Filament
a validé
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.")