Skip to content
Extraits de code Groupes Projets
Valider be84071b rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[cgscop #169 & #168] ajout transfert ligne de temps + check sur la...

[cgscop #169 & #168] ajout transfert ligne de temps + check sur la transformation + possibilité accepter/refuser RDV
parent 693b49bd
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -8,6 +8,16 @@ from odoo import models, fields, api ...@@ -8,6 +8,16 @@ from odoo import models, fields, api
from odoo.exceptions import UserError, ValidationError from odoo.exceptions import UserError, ValidationError
class CGScopAttendee(models.Model):
_inherit = 'calendar.attendee'
timesheet_id = fields.Many2one(
comodel_name='account.analytic.line',
string='Timesheet linked',
ondelete='set null',
copy=False)
class CGScopCalendar(models.Model): class CGScopCalendar(models.Model):
_inherit = 'calendar.event' _inherit = 'calendar.event'
...@@ -61,6 +71,26 @@ class CGScopCalendar(models.Model): ...@@ -61,6 +71,26 @@ class CGScopCalendar(models.Model):
ur_regional_convention_nb = fields.Integer( ur_regional_convention_nb = fields.Integer(
string="Nb conventions régionales", string="Nb conventions régionales",
compute="_compute_ur_system_nb") compute="_compute_ur_system_nb")
attendees_initial = fields.Char(
string='Initiales Participants',
compute='_compute_attendees_initial')
state = fields.Selection([
('needsAction', 'Non répondu'),
('tentative', 'Incertain'),
('declined', 'Refusé'),
('accepted', 'Accepté')],
string='Statut',
compute='_compute_attendee_state',
help="Statut du participant",
default='needsAction')
is_attendee = fields.Boolean(
string='Est participant',
compute='_compute_is_attendee',
default=False)
is_transfered = fields.Boolean(
string='Transféré',
compute='_compute_is_transfered',
default=False)
# ------------------------------------------------------ # ------------------------------------------------------
# Compute # Compute
...@@ -79,6 +109,38 @@ class CGScopCalendar(models.Model): ...@@ -79,6 +109,38 @@ class CGScopCalendar(models.Model):
event.ur_regional_convention_nb = len( event.ur_regional_convention_nb = len(
regional_convention) regional_convention)
@api.depends('partner_ids')
def _compute_attendees_initial(self):
for event in self:
initials = ''
for partner in event.partner_ids:
initials += partner.lastname[0] + '.' + partner.firstname[0] + ', '
event.attendees_initial = initials
def _compute_attendee_state(self):
for event in self:
attendee = self.env['calendar.attendee'].search([
('event_id', '=', event.id),
('partner_id', '=', self.env.user.partner_id.id)])
event.state = attendee.state
def _compute_is_attendee(self):
for event in self:
if self.env.user.partner_id in event.partner_ids:
event.is_attendee = True
else:
event.is_attendee = False
def _compute_is_transfered(self):
for event in self:
attendee = self.env['calendar.attendee'].search([
('event_id', '=', event.id),
('partner_id', '=', self.env.user.partner_id.id)])
if attendee.timesheet_id:
event.is_transfered = True
else:
event.is_transfered = False
# ------------------------------------------------------ # ------------------------------------------------------
# Onchange # Onchange
# ------------------------------------------------------ # ------------------------------------------------------
...@@ -133,14 +195,59 @@ class CGScopCalendar(models.Model): ...@@ -133,14 +195,59 @@ class CGScopCalendar(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
# Fonction boutons # Fonction boutons
# ------------------------------------------------------ # ------------------------------------------------------
@api.multi
def do_accept(self):
""" Accepte l'invitation
Modifie le statut de la table Attendees
"""
for event in self:
attendee = self.env['calendar.attendee'].search([
('event_id', '=', event.id),
('partner_id', '=', self.env.user.partner_id.id)])
attendee.state = 'accepted'
@api.multi
def do_decline(self):
""" Refuse l'invitation
Modifie le statut de la table Attendees
"""
for event in self:
attendee = self.env['calendar.attendee'].search([
('event_id', '=', event.id),
('partner_id', '=', self.env.user.partner_id.id)])
attendee.state = 'declined'
@api.multi
def do_tentative(self):
""" Incertain pour l'invitation
Modifie le statut de la table Attendees
"""
for event in self:
attendee = self.env['calendar.attendee'].search([
('event_id', '=', event.id),
('partner_id', '=', self.env.user.partner_id.id)])
attendee.state = 'tentative'
@api.multi @api.multi
def create_timesheet(self): def create_timesheet(self):
""" Crée une ligne de temps à partir de l'entrée d'agenda """ Crée une ligne de temps à partir de l'entrée d'agenda
""" """
partner = self.env.user.partner_id
for event in self: for event in self:
if not partner in event.partner_ids:
raise UserError("Vous ne faites pas partie des participants, \
vous ne pouvez donc pas transformer cette entrée d'agenda \
en ligne de temps.")
if not event.project_id.analytic_account_id: if not event.project_id.analytic_account_id:
raise UserError("Le code activité UR doit être \ raise UserError("Le code activité UR doit être \
renseigné sur chaque entrée d'agenda") renseigné sur chaque entrée d'agenda")
else:
attendee = self.env['calendar.attendee'].search([
('event_id', '=', event.id),
('partner_id', '=', partner.id)])
if attendee.timesheet_id:
raise UserError("Vous avez déjà transféré cette entrée \
d'agenda : %s" % event.name)
else: else:
values = { values = {
'user_id': self.env.user.id, 'user_id': self.env.user.id,
...@@ -151,6 +258,7 @@ class CGScopCalendar(models.Model): ...@@ -151,6 +258,7 @@ class CGScopCalendar(models.Model):
'company_id': self.env.user.company_id.id, 'company_id': self.env.user.company_id.id,
'partner_id': event.coop_id.id, 'partner_id': event.coop_id.id,
'event_id': event.id, 'event_id': event.id,
'attendee_id': attendee.id,
} }
# Gestion des évènements sur toute la journée # Gestion des évènements sur toute la journée
if event.allday: if event.allday:
...@@ -158,7 +266,8 @@ class CGScopCalendar(models.Model): ...@@ -158,7 +266,8 @@ class CGScopCalendar(models.Model):
for i in range((event.stop - event.start).days + 1): for i in range((event.stop - event.start).days + 1):
values['date'] = event.start + timedelta(days=i) values['date'] = event.start + timedelta(days=i)
values['unit_amount'] = 8.0 values['unit_amount'] = 8.0
self.env['account.analytic.line'].create(values) ts = self.env['account.analytic.line'].create(values)
attendee.write({'timesheet_id': ts.id})
# Gestion des évènements sur plusieurs jours non flagués allday # Gestion des évènements sur plusieurs jours non flagués allday
if (event.stop - event.start).days > 0: if (event.stop - event.start).days > 0:
user_tz = self.env.user.tz user_tz = self.env.user.tz
...@@ -188,12 +297,14 @@ class CGScopCalendar(models.Model): ...@@ -188,12 +297,14 @@ class CGScopCalendar(models.Model):
hours = 8.0 hours = 8.0
values['date'] = day values['date'] = day
values['unit_amount'] = hours values['unit_amount'] = hours
self.env['account.analytic.line'].create(values) ts = self.env['account.analytic.line'].create(values)
attendee.write({'timesheet_id': ts.id})
# Gestion des évènements classiques # Gestion des évènements classiques
else: else:
values['date'] = event.start values['date'] = event.start
values['unit_amount'] = event.duration values['unit_amount'] = event.duration
self.env['account.analytic.line'].create(values) ts = self.env['account.analytic.line'].create(values)
attendee.write({'timesheet_id': ts.id})
@api.multi @api.multi
def duplicate_entry(self): def duplicate_entry(self):
......
...@@ -12,6 +12,11 @@ class ScopHrTimesheetCalendar(models.Model): ...@@ -12,6 +12,11 @@ class ScopHrTimesheetCalendar(models.Model):
string="Entrée d'Agenda", string="Entrée d'Agenda",
copy=False, copy=False,
ondelete="set null") ondelete="set null")
attendee_id = fields.Many2one(
comodel_name='calendar.attendee',
string="Invitation",
copy=False,
ondelete="set null")
type_event = fields.Selection([ type_event = fields.Selection([
('outside', 'Extérieur'), ('outside', 'Extérieur'),
('ur', 'UR'), ('ur', 'UR'),
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter