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"

Benjamin - Le Filament
a validé
_rec_name = 'partner_id'
_order = 'effective_date, partner_id'
partner_id = fields.Many2one(
comodel_name='res.partner',
string='Organisme',

Benjamin - Le Filament
a validé
ondelete='restrict',
required=True,
index=True)
partner_city = fields.Char("Ville", related='partner_id.city')
partner_siret = fields.Char("SIRET", related='partner_id.siret')

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

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
"""

jordan
a validé
if self.type_entry in ('questionnaire', 'questionnaire_inscription') \
and not self.env.user.has_group(
'cgscop_partner.group_cg_administrative'):

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

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