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

[update] ajout champs + modifs programme + update maj sessions

parent 99552b76
Branches
Aucune étiquette associée trouvée
1 requête de fusion!1Refactor reports
......@@ -32,11 +32,14 @@ class TrainingProgram(models.Model):
default=0,
store=True)
session_count = fields.Integer(
string="Nbre Sessions",
string="Nb Sessions",
compute='_compute_sessions',
default=0,
store=True)
# ------------------------------------------------------
# Compute
# ------------------------------------------------------
@api.depends('session_ids')
def _compute_sessions(self):
self.session_count = len(self.session_ids)
......
......@@ -14,11 +14,17 @@ class TrainingSession(models.Model):
session_id = fields.Many2one(
comodel_name='training.course.session',
string='Session',
ondelete='cascade',
required=True)
training_id = fields.Many2one(
comodel_name='training.training',
string='Formation')
string='Formation',
ondelete='cascade',
required=True)
customer_id = fields.Many2one(
comodel_name='res.partner',
string='Client',
related='training_id.customer_id',
store=True)
date = fields.Datetime('Date',)
user_id = fields.Many2one(
comodel_name='res.users',
......
......@@ -2,7 +2,7 @@
# © 2019 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
from odoo import models, fields, api
class TrainingStudent(models.Model):
......@@ -17,9 +17,25 @@ class TrainingStudent(models.Model):
parent_id = fields.Many2one(
comodel_name='res.partner',
string='Entreprise',
readonly=True,
related='student_id.parent_id')
domain=[('is_company', '=', True)])
training_id = fields.Many2one(
comodel_name='training.training',
string='Formation')
certificate = fields.Binary(string="Attestation")
_sql_constraints = [ (
'course_unique','UNIQUE(student_id, training_id)',
"Un stagiaire ne peut être inscrit qu'une fois") ]
# ------------------------------------------------------
# Onchange
# ------------------------------------------------------
@api.onchange('parent_id')
def _onchange_student_id(self):
vals = {}
vals['domain'] = {
'student_id': [
('is_company', '=', False),
('parent_id', '=', self.parent_id.id)],
}
return vals
......@@ -46,6 +46,8 @@ class Training(models.Model):
payment = fields.Boolean(string="Subrogation de paiement")
date_begin = fields.Date(string='Début de la formation')
date_end = fields.Date(string='Fin de la formation')
session_hours = fields.Char(string='Horaires')
students_nb_prev = fields.Char(string="Nb Stagiaires Prévisionnel")
convention = fields.Binary(string="Convention")
date_convention = fields.Date(string="Date Convention")
date_attestation = fields.Date(string="Date Attestation")
......@@ -105,6 +107,42 @@ class Training(models.Model):
file_number = fields.Char(string='N° Dossier')
plan = fields.Char(string='Dispositif')
# ------------------------------------------------------
# Override ORM
# ------------------------------------------------------
@api.model
def create(self, vals):
record = super(Training, self).create(vals)
if vals.get('course_id', False):
for s in record.course_id.session_ids:
self.env['training.session'].create({
'session_id': s.id,
'training_id': record.id,
'date_delay': s.duration,
'sequence': s.sequence,
})
return record
@api.multi
def write(self, vals):
record = super(Training, self).write(vals)
print(self)
print(record)
print(vals)
if vals.get('course_id', False):
self.session_ids.unlink()
for s in self.course_id.session_ids:
self.env['training.session'].create({
'session_id': s.id,
'training_id': self.id,
'date_delay': s.duration,
'sequence': s.sequence,
})
return record
# ------------------------------------------------------
# compute
# ------------------------------------------------------
@api.depends('student_ids')
def _compute_students_count(self):
self.students_count = len(self.student_ids)
......@@ -133,18 +171,9 @@ class Training(models.Model):
def _compute_invoiced(self):
self.invoiced = sum(self.invoice_ids.mapped('amount_untaxed_signed'))
@api.onchange('course_id')
def _onchange_session_ids(self):
# Delete all training session
self.session_ids.unlink()
# Populate sessions from course
for session in self.course_id.session_ids:
self.env['training.session'].create({
'session_id': session.id,
'training_id': self._origin.id,
'date_delay': session.duration,
})
# ------------------------------------------------------
# Buttons
# ------------------------------------------------------
@api.multi
def action_valid(self):
for training in self:
......
......@@ -48,8 +48,8 @@
</div>
<div class="subblock">
<h3>8. MODALITÉS ET DURÉE DE LA FORMATION</h3>
<p>Formation dispensée en intra-entreprise par groupes de <span t-field="doc.students_count" /> personnes, et par session de demi-journées (4h), afin de s’adapter aux contraintes de disponibilité de l’entreprise.</p>
<p>Horaires : <strong>9h-13h ou 13h-17h</strong></p>
<p>Formation dispensée en intra-entreprise par groupes de <span t-field="doc.students_nb_prev" /> personnes, et par session de demi-journées, afin de s’adapter aux contraintes de disponibilité de l’entreprise.</p>
<p>Horaires : <strong><span t-field="doc.session_hours" /></strong></p>
<p><strong><span t-field="doc.session_count" /> sessions</strong> de formation, soit <strong><span t-field="doc.hours" /> heures par personne</strong></p>
</div>
<div class="subblock">
......@@ -60,7 +60,7 @@
<div class="subblock">
<h3>10. COÛT DE LA FORMATION</h3>
<p>
<span t-field="doc.cost" /> € HT en formation INTRA de <span t-field="doc.students_count" /> personnes soit <span t-esc="round(doc.cost / doc.students_count, 2)" /> € par personne.
<span t-field="doc.cost" /> € HT en formation INTRA de <span t-field="doc.students_nb_prev" /> personnes.
</p>
</div>
<div class="subblock">
......
......@@ -6,7 +6,7 @@
<field name="name">Training Course Form View</field>
<field name="model">training.course</field>
<field name="arch" type="xml">
<form string="Fomration">
<form string="Formation">
<sheet>
<group>
<field name="name" />
......
......@@ -13,6 +13,7 @@
<field name="date" />
<field name="date_delay" />
<field name="training_id" />
<field name="customer_id" />
<field name="user_id" />
</group>
</sheet>
......@@ -30,6 +31,7 @@
<field name="date" />
<field name="session_id" />
<field name="training_id" />
<field name="customer_id" />
<field name="user_id" />
</tree>
</field>
......@@ -44,10 +46,10 @@
<!-- Champs de recherche -->
<field name="session_id"/>
<field name="user_id"/>
<field name="training_id"/>
<field name="training_id"/>
<!-- Filtres -->
<!-- Groupes -->
<group expand="0" name="group_by" string="Group By">
<filter string="Formateur" name="group_user" domain="[]" context="{'group_by' : 'user_id'}" />
......
......@@ -16,10 +16,12 @@
<sheet>
<group>
<group string="Formation">
<field name="customer_id" />
<field name="course_id" />
<field name="date_begin" widget="date" />
<field name="date_end" widget="date" />
<field name="customer_id" required="1"/>
<field name="course_id" required="1"/>
<field name="date_begin" widget="date" required="1"/>
<field name="date_end" widget="date" required="1"/>
<field name="students_nb_prev" required="1" placeholder="ex : 4, 4 à 6"/>
<field name="session_hours" required="1" placeholder="ex : 9h-12h ou 14h-17h"/>
</group>
<group string="OPCO">
<field name="opco_id" />
......@@ -31,7 +33,7 @@
</group>
<group string="Infos Financières">
<group>
<field name="cost" />
<field name="cost" required="1"/>
<field name="rate" />
<field name="amount" />
<field name="invoiced" />
......@@ -44,13 +46,13 @@
</group>
</group>
<group>
<field name="place" />
<field name="place" required="1"/>
</group>
<notebook>
<page name="students" string="Stagiaires">
<field name="student_ids" >
<field name="student_ids" context="{'default_parent_id': customer_id, 'default_training_id': active_id}">
<tree>
<field name="student_id" />
<field name="student_id" domain="[('parent_id', '=', parent_id), ]"/>
<field name="parent_id" />
<field name="certificate" />
</tree>
......
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