view for task detail

16-career-dev
Florian Roger 6 months ago
parent 82e06ac97a
commit 645729f291

@ -10,7 +10,7 @@ Addons for Odoo 16.
| gn_l10n_fr_pcg_asso | 16.0.0.0.3 | French chart of account and fiscal position for NGO's |
| gn_cc | 16.0.0.0.2 | Configuration for French convention collective, with data for IDCC3442 |
| gn_holidays | 16.0.0.0.1 | French configuration for Publics Holidays and Leave Management |
| gn_career | 16.0.0.0.8 | Fiche de poste et évolution de carrière |
| gn_career | 16.0.0.0.9 | Fiche de poste et évolution de carrière |
| gn_contract | 16.0.0.0.4 | Amendements to Hr Contracts |
## ToDo

@ -10,6 +10,8 @@ Module de gestion des fiches de postes et des évolutions de carrière
## Changelog
- v16.0.0.0.9 (2024/03/17):
- call specific view for task detail
- v16.0.0.0.8 (2024/03/16):
- call specific view for tasks
- v16.0.0.0.7 (2024/03/16):
@ -30,4 +32,6 @@ Module de gestion des fiches de postes et des évolutions de carrière
## Issues
- [] Add menuentries and views in Analyse section for missions and tasks (cf issue #12)
- [] Workflow Career > Mission > Tasks needs debug
- [] Review total_percentage constraints
- [] Review total_percentage constraints
- [] Review domains and unicity for tasks and missions
- [] clean and prune view and methods

@ -14,9 +14,9 @@
"gn_contract",
],
"data": [
"views/gn_career.xml",
"views/gn_career_mission_detail.xml",
"views/gn_career_task_detail.xml",
"views/gn_career_mission_detail.xml",
"views/gn_career.xml",
"views/gn_contract.xml",
"data/gn_career_menus.xml",
"security/ir.model.access.csv",

@ -30,7 +30,7 @@ class GnCareer(models.Model):
mission_ids = fields.Many2many('gn_career.mission', 'career_ids', compute='_compute_mission_ids', string="Missions effectuées", store=True)
mission_detail_ids = fields.One2many('gn_career.mission.detail', 'career_id', string="Détail de la mission")
total_percentage = fields.Float(compute='_compute_total_percentage', string="Total Percentage", store=True)
#total_percentage = fields.Float(compute='_compute_total_percentage', string="Total Percentage", store=True)
#@api.depends('mission_detail_ids.percentage')
def _compute_total_percentage(self):
@ -38,7 +38,7 @@ class GnCareer(models.Model):
for record in self:
record.total_percentage = sum(mission.percentage for mission in record.mission_detail_ids)
@api.constrains('total_percentage')
#@api.constrains('total_percentage')
def _check_total_percentage(self):
for record in self:
_logger.warning("in career._check_total_percentage, 'bypass_total_percentage_check' in context: %s", self._context.get('bypass_total_percentage_check'))
@ -106,14 +106,14 @@ class GnCareer(models.Model):
},
}
def write(self, vals):
if 'mission_detail_ids' in vals:
for record in self:
# Calculate total percentage, including changes from vals
total_percentage = record._compute_total_percentage()
if total_percentage != 100:
raise ValidationError("Le pourcentage total des missions au sein de la fiche de poste doit atteindre 100%. Veuillez ajuster la répartition de la mission.")
return super(GnCareer, self).write(vals)
# def write(self, vals):
# if 'mission_detail_ids' in vals:
# for record in self:
# # Calculate total percentage, including changes from vals
# total_percentage = record._compute_total_percentage()
# if total_percentage != 100:
# raise ValidationError("Le pourcentage total des missions au sein de la fiche de poste doit atteindre 100%. Veuillez ajuster la répartition de la mission.")
# return super(GnCareer, self).write(vals)
class GnCareerMissionDetail(models.Model):
_name = 'gn_career.mission.detail'
@ -122,9 +122,10 @@ class GnCareerMissionDetail(models.Model):
name = fields.Char(related='mission_id.name')
career_id = fields.Many2one('gn_career.career', string="Fiche de poste")
mission_id = fields.Many2one('gn_career.mission', string="Mission")
exclude_mission_ids = fields.Many2many('gn_career.mission', compute='_compute_exclude_mission_ids')
percentage = fields.Integer("Temps occupé par la mission en % de la fiche de poste", default="100")
tasks_percentage = fields.Float(compute='_compute_tasks_percentage', string="Répartition des tâches", store=True)
task_ids = fields.Many2many('gn_career.task.detail', 'mission_detail_id', string="Tâches incluses dans la mission")
task_ids = fields.One2many('gn_career.task.detail', 'mission_detail_id', string="Tâches incluses dans la mission")
#related_mission_task_ids = fields.Many2many('gn_career.task', compute='_compute_related_mission_task_ids')
#lasting_task_ids = fields.Many2many('gn_career.task', compute='_compute_lasting_mission_task_ids')
@ -168,23 +169,31 @@ class GnCareerMissionDetail(models.Model):
# else:
# record.task_ids_display = record.task_ids
@api.depends('task_ids', 'task_ids.percentage')
#@api.depends('task_ids', 'task_ids.percentage')
def _compute_tasks_percentage(self):
for record in self:
record.tasks_percentage = sum(task.percentage for task in record.task_ids)
@api.constrains('tasks_percentage')
#@api.constrains('tasks_percentage')
def _check_total_percentage(self):
for record in self:
if record.tasks_percentage != 100:
raise ValidationError("Le pourcentage total des tâches au sein de la mission doit atteindre 100%. Veuillez ajuster la répartition de la mission.")
@api.depends('career_id.mission_detail_ids.mission_id')
def _compute_exclude_mission_ids(self):
for rec in self:
existing_mission_ids = rec.career_id.mission_detail_ids.mapped('mission_id.id')
rec.exclude_mission_ids = [(6, 0, existing_mission_ids)]
class GnCareerTaskDetail(models.Model):
_name = 'gn_career.task.detail'
_description = "Détails d'une tâche"
mission_detail_id = fields.Many2one('gn_career.mission.detail', string="Mission de la fiche de poste", required=True)
name = fields.Char(related='task_id.name')
mission_detail_id = fields.Many2one('gn_career.mission.detail', string="Mission de la fiche de poste")
career_id = fields.Many2one('gn_career.career', related='mission_detail_id.career_id', string="Fiche de poste", readonly=True)
employee_id = fields.Many2one(string="Employee", related='career_id.employee_id', readonly=True)
#mission_id = fields.Many2one('gn_career.mission', related='mission_detail_id.mission_id', string="")

@ -17,17 +17,16 @@ class GnCareerTask(models.Model):
active_mission_ids = fields.Many2many('gn_career.mission.detail', relation="active_missions", string="Missions actives incluant cette tâche")
task_detail_ids = fields.One2many('gn_career.task.detail', 'task_id', string="Répartition des tâches au sein de la mission")
@api.depends('possible_mission_ids.mission_detail_ids.task_ids')
@api.onchange('task_detail_ids')
def _compute_effective_mission_ids(self):
_logger.warning("Enter in _compute_effective_mission_ids")
for task in self:
effective_mission_ids_set = set()
for mission in task.possible_mission_ids:
for detail in mission.mission_detail_ids:
if task in detail.task_ids:
effective_mission_ids_set.add(detail.id)
for task_detail in task.task_detail_ids:
if task_detail.mission_detail_id:
effective_mission_ids_set.add(task_detail.mission_detail_id.id)
task.effective_mission_ids = [(6, 0, list(effective_mission_ids_set))]
class GnCareerMission(models.Model):
_name = 'gn_career.mission'
_description = "Missions prévues dans le contrat"

@ -92,9 +92,16 @@
<field name="employee_id" readonly="1"/>
<field name="contract_id" readonly="1"/>
<field name="mission_ids" invisible="1"/>
<field name="mission_detail_ids"
context="{'tree_view_ref':'gn_career.gn_career_mission_detail_tree_view_in_career_view'}"/>
<field name="total_percentage"/>
<field name="mission_detail_ids" readonly="0"
context="{'tree_view_ref':'gn_career.gn_career_mission_detail_tree_view_in_career_view',
'form_view_ref': 'gn_career.gn_career_mission_detail_form_in_career_view'}"/>
<!--options="{'no_create_edit': True, 'no_create': True,
'views': {
'tree': [('ref', 'gn_career.gn_career_mission_detail_tree_view_in_career_view')],
'form': [('ref', 'gn_career.gn_career_mission_detail_form_in_career_view')]
}}"/>-->
<!--<field name="total_percentage"/> -->
<button name="%(action_define_mission_detail_xml)d" type='action' class="oe_highlight"
groups="hr_contract.group_hr_contract_manager"
string="Ajouter une mission (xml)"/>

@ -12,13 +12,27 @@
<field name="career_id"/>
<field name="mission_id"/>
<field name="percentage"/>
<field name="task_ids" view="gn_career.gn_career_task_detail_tree_view_in_mission_detail_view"/>
<field name="task_ids"
context="{'tree_view_ref': 'gn_career.gn_career_task_detail_tree_view_in_mission_detail_view',
'form_view_ref': 'gn_career.gn_career_task_detail_form_view',
'default_mission_detail_id': active_id}"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_define_task_detail_xml" model="ir.actions.act_window">
<field name="name">Ajouter une tâche xml</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">gn_career.task.detail</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{'default_mission_detail_id': active_id}</field>
<field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'form', 'view_id': ref('gn_career_task_detail_form_view_in_mission_detail_view')}),
(0, 0, {'view_mode': 'tree', 'view_id': ref('gn_career_task_detail_tree_view_in_mission_detail_view')})]"/>
</record>
<!--<field name="view_id" ref='gn_career.gn_career_task_detail_form_view'/> -->
<record id="gn_career_mission_detail_form_in_career_view" model="ir.ui.view">
<field name="name">gn_career.mission.detail.form.career</field>
<field name="model">gn_career.mission.detail</field>
@ -27,10 +41,24 @@
<sheet string="Détail de la mission">
<group>
<group>
<field name="employee_id"/>
<field name="mission_id"/>
<field name="career_id" invisible="1"/>
<field name="exclude_mission_ids" invisible="1"/>
<field name="mission_id" domain="[('id', 'not in', exclude_mission_ids)]"/>
<field name="percentage"/>
<field name="task_ids" view="gn_career.gn_career_task_detail_tree_view_in_mission_detail_view"/>
<field name="task_ids"
options="{'no_create_edit': True, 'no_create': True,
'views': {
'tree': [('ref', 'gn_career.gn_career_task_detail_tree_view_in_mission_detail_view')],
'form': [('ref', 'gn_career.gn_career_task_detail_form_view')]
}}"
context="{'default_mission_detail_id': active_id}"/>
<!--<field name="task_ids"
context="{'tree_view_ref':'gn_career.gn_career_task_detail_tree_view_in_mission_detail_view',
'form_view_ref': 'gn_career.gn_career_task_detail_form_view',
'default_mission_detail_id': active_id}"/> -->
<button name="%(gn_career.action_define_task_detail_xml)d" type='action' class="oe_highlight"
groups="hr_contract.group_hr_contract_manager"
string="Ajouter une tâche"/>
</group>
</group>
</sheet>
@ -85,6 +113,6 @@
<field name="name">Détails des missions</field>
<field name="res_model">gn_career.mission.detail</field>
<field name="view_mode">tree,form</field>
<field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('gn_career_mission_detail_tree_view')}), (0, 0, {'view_mode': 'form', 'view_id': ref('gn_career_mission_detail_form_view')})]"/>
<field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('gn_career.gn_career_mission_detail_tree_view')}), (0, 0, {'view_mode': 'form', 'view_id': ref('gn_career.gn_career_mission_detail_form_in_career_view')})]"/>
</record>
</odoo>

@ -12,7 +12,27 @@
<field name="career_id"/>
<field name="mission_detail_id"/>
<field name="percentage"/>
<field name="other_tasks_in_mission"/>
<field name="other_tasks_in_mission" widget="many2many_tags"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="gn_career_task_detail_form_view_in_mission_detail_view" model="ir.ui.view">
<field name="name">gn_career.task.detail.form.in_mission_detail_view</field>
<field name="model">gn_career.task.detail</field>
<field name="arch" type="xml">
<form string="Détail des tâches">
<sheet string="Détail des tâches">
<group>
<group>
<field name="employee_id"/>
<field name="career_id"/>
<field name="mission_detail_id"/>
<field name="task_id"/>
<field name="percentage"/>
<field name="other_tasks_in_mission" widget="many2many_tags"/>
</group>
</group>
</sheet>
@ -57,7 +77,7 @@
<record id="gn_career_task_detail_action" model="ir.actions.act_window">
<field name="name">Détails des tâches</field>
<field name="res_model">gn_career.task.detail</field>
<field name="view_mode">tree,form</field>
<field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('gn_career_task_detail_tree_view')}), (0, 0, {'view_mode': 'form', 'view_id': ref('gn_career_task_detail_form_view')})]"/>
<field name="view_mode">form,tree</field>
<field name="view_ids" eval="[(5, 0, 0), (0, 0, {'view_mode': 'form', 'view_id': ref('gn_career_task_detail_form_view')}), (0, 0, {'view_mode': 'tree', 'view_id': ref('gn_career_task_detail_tree_view')})]"/>
</record>
</odoo>
Loading…
Cancel
Save