add filters on tasks

16-career-dev
Florian Roger 7 months ago
parent 45c1e9613e
commit d93c76d937

@ -11,7 +11,7 @@ Addons for Odoo 16.
| gn_cc | 16.0.0.0.2 | Configuration for French convention collective, with data for IDCC3442 | | 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_holidays | 16.0.0.0.1 | French configuration for Publics Holidays and Leave Management |
| gn_contract | 16.0.0.0.1 | Amendements to Hr Contracts | | gn_contract | 16.0.0.0.1 | Amendements to Hr Contracts |
| gn_career | 16.0.0.0.2 | Fiche de poste et évolution de carrière | | gn_career | 16.0.0.0.3 | Fiche de poste et évolution de carrière |
## ToDo ## ToDo

@ -14,6 +14,8 @@ Module de gestion des fiches de postes et des évolutions de carrière
- Création du module - Création du module
- v16.0.0.0.2 (2024/03/08): - v16.0.0.0.2 (2024/03/08):
- Add detail of Missions for each Career - Add detail of Missions for each Career
- v16.0.0.0.3 (2024/03/09):
- Filters on tasks
## Issues ## Issues

@ -1,6 +1,6 @@
{ {
"name": "France - Fiche de poste", "name": "France - Fiche de poste",
"version": "16.0.0.0.2", "version": "16.0.0.0.3",
"category": "HR", "category": "HR",
"summary": "Configuration de la fiche de poste et de son évolution conventionnelle", "summary": "Configuration de la fiche de poste et de son évolution conventionnelle",
"author": "Le Garage Numérique", "author": "Le Garage Numérique",

@ -15,6 +15,7 @@ class GnCareer(models.Model):
name = fields.Char("Nom", compute='_compute_name') name = fields.Char("Nom", compute='_compute_name')
start_date = fields.Date('From', required=True, default=lambda self: fields.Date.today()) start_date = fields.Date('From', required=True, default=lambda self: fields.Date.today())
contract_id = fields.Many2one('hr.contract', string="Contrat ou Avenant associé") contract_id = fields.Many2one('hr.contract', string="Contrat ou Avenant associé")
employee_id = fields.Many2one(string="Employee", related='contract_id.employee_id', readonly=True, store=True)
status = fields.Selection([ status = fields.Selection([
('draft', 'Brouillon'), ('draft', 'Brouillon'),
@ -25,7 +26,7 @@ class GnCareer(models.Model):
('active', 'Active'), ('active', 'Active'),
], string="Statut", default='draft') ], string="Statut", default='draft')
mission_ids = fields.Many2many('gn_career.mission', 'career_ids', compute='_compute_mission_ids', string="Missions effectuées") 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") 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") total_percentage = fields.Float(compute='_compute_total_percentage', string="Total Percentage")
@ -68,3 +69,25 @@ class GnCareerMissionDetail(models.Model):
mission_id = fields.Many2one('gn_career.mission', string="Mission") mission_id = fields.Many2one('gn_career.mission', string="Mission")
percentage = fields.Integer("Temps occupé par la mission en %", default="100") percentage = fields.Integer("Temps occupé par la mission en %", default="100")
task_ids = fields.Many2many('gn_career.task', 'mission_detail', string="Tâches incluses dans la mission") task_ids = fields.Many2many('gn_career.task', 'mission_detail', string="Tâches incluses dans la mission")
related_mission_task_ids = fields.Many2many('gn_career.task', compute='_compute_related_mission_task_ids')
task_ids_display = fields.Many2many('gn_career.task', compute='_compute_task_ids_display')
employee_id = fields.Many2one(string="Employee", related='career_id.contract_id.employee_id', readonly=True, store=True)
# A special field used to update task_ids domain in mission.detail form
@api.depends('mission_id.task_ids')
def _compute_related_mission_task_ids(self):
for record in self:
if record.mission_id:
record.related_mission_task_ids = record.mission_id.task_ids
else:
record.related_mission_task_ids = False
#A special field used for many2many tag in task form display
@api.depends('task_ids')
def _compute_task_ids_display(self):
current_task_id = self._context.get('exclude_task_id')
for record in self:
if current_task_id:
record.task_ids_display = record.task_ids.filtered(lambda t: t.id != current_task_id)
else:
record.task_ids_display = record.task_ids

@ -10,9 +10,19 @@ class GnCareerTask(models.Model):
name = fields.Char("Nom de la tâche") name = fields.Char("Nom de la tâche")
description = fields.Text("Description de la tâche") description = fields.Text("Description de la tâche")
possible_mission_ids = fields.Many2many('gn_career.mission', string="Missions pouvant inclure cette tâche") possible_mission_ids = fields.Many2many('gn_career.mission', string="Missions pouvant inclure cette tâche")
effective_mission_ids = fields.Many2many('gn_career.mission.detail', relation="effective_missions", string="Missions définies impliquant cette tâche") effective_mission_ids = fields.Many2many('gn_career.mission.detail', compute='_compute_effective_mission_ids', relation="effective_missions", string="Missions définies impliquant cette tâche")
active_mission_ids = fields.Many2many('gn_career.mission.detail', relation="active_missions", string="Missions actives incluant cette tâche") active_mission_ids = fields.Many2many('gn_career.mission.detail', relation="active_missions", string="Missions actives incluant cette tâche")
@api.depends('possible_mission_ids.mission_detail_ids.task_ids')
def _compute_effective_mission_ids(self):
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)
task.effective_mission_ids = [(6, 0, list(effective_mission_ids_set))]
class GnCareerMission(models.Model): class GnCareerMission(models.Model):
_name = 'gn_career.mission' _name = 'gn_career.mission'
_description = "Missions prévues dans le contrat" _description = "Missions prévues dans le contrat"
@ -21,5 +31,11 @@ class GnCareerMission(models.Model):
description = fields.Text("Description de la mission") description = fields.Text("Description de la mission")
task_ids = fields.Many2many('gn_career.task', string="Tâches pouvant être incluses dans la mission") task_ids = fields.Many2many('gn_career.task', string="Tâches pouvant être incluses dans la mission")
career_ids = fields.Many2many('gn_career.career', 'mission_ids', string="Fiches de poste incluant cette mission") career_ids = fields.Many2many('gn_career.career', 'mission_ids', compute='_compute_career_ids', string="Fiches de poste incluant cette mission", store=True)
career_mission_ids = fields.One2many('gn_career.mission.detail', 'mission_id', string="Répartition des missions au sein du poste") mission_detail_ids = fields.One2many('gn_career.mission.detail', 'mission_id', string="Répartition des missions au sein du poste")
@api.depends('mission_detail_ids.career_id')
def _compute_career_ids(self):
for mission in self:
career_ids = mission.mapped('mission_detail_ids.career_id').ids
mission.career_ids = [(6, 0, career_ids)]

@ -1,10 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<record id="view_gn_career_mission_form" model="ir.ui.view">
<field name="name">gn_career.mission.form</field>
<field name="model">gn_career.mission</field>
<field name="arch" type="xml">
<form string="Mission">
<!-- Other fields -->
<field name="name"/>
<field name="description"/>
<field name="task_ids"/>
<field name="career_ids"/>
<field name="mission_detail_ids"
context="{'tree_view_ref':'gn_career.gn_career_mission_detail_tree_view_in_mission_view'}"/>
</form>
</field>
</record>
<record id="gn_career.missions_configuration" model="ir.actions.act_window"> <record id="gn_career.missions_configuration" model="ir.actions.act_window">
<field name="name">Missions</field> <field name="name">Missions</field>
<field name="res_model">gn_career.mission</field> <field name="res_model">gn_career.mission</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
</record> </record>
<record id="view_gn_career_task_form" model="ir.ui.view">
<field name="name">gn_career.task.form</field>
<field name="model">gn_career.task</field>
<field name="arch" type="xml">
<form string="Tâche">
<!-- Other fields -->
<field name="name"/>
<field name="description"/>
<field name="possible_mission_ids"/>
<field name="effective_mission_ids"
context="{'exclude_task_id': active_id, 'tree_view_ref':'gn_career.gn_career_mission_detail_tree_view_in_task_view'}"/>
</form>
</field>
</record>
<record id="gn_career.tasks_configuration" model="ir.actions.act_window"> <record id="gn_career.tasks_configuration" model="ir.actions.act_window">
<field name="name">Tâches</field> <field name="name">Tâches</field>
<field name="res_model">gn_career.task</field> <field name="res_model">gn_career.task</field>

@ -8,9 +8,11 @@
<sheet string="Détail de la mission"> <sheet string="Détail de la mission">
<group> <group>
<group> <group>
<field name="employee_id"/>
<field name="career_id"/> <field name="career_id"/>
<field name="mission_id"/> <field name="mission_id"/>
<field name="task_ids"/> <field name="related_mission_task_ids" invisible="1"/>
<field name="task_ids" domain="[('id', 'in', related_mission_task_ids)]"/>
<field name="percentage"/> <field name="percentage"/>
</group> </group>
</group> </group>
@ -28,6 +30,29 @@
</tree> </tree>
</field> </field>
</record> </record>
<record id="gn_career_mission_detail_tree_view_in_mission_view" model="ir.ui.view">
<field name="name">gn_career.mission.detail.tree.in_mission_view</field>
<field name="model">gn_career.mission.detail</field>
<field name="arch" type="xml">
<tree string="Mission Details">
<field name="employee_id"/>
<field name="mission_id"/>
<field name="percentage"/>
</tree>
</field>
</record>
<record id="gn_career_mission_detail_tree_view_in_task_view" model="ir.ui.view">
<field name="name">gn_career.mission.detail.tree.in_task_view</field>
<field name="model">gn_career.mission.detail</field>
<field name="arch" type="xml">
<tree string="Mission Details">
<field name="employee_id"/>
<field name="mission_id"/>
<field name="task_ids_display" widget="many2many_tags" string="Autres tâches dans la mission"/>
<field name="percentage"/>
</tree>
</field>
</record>
<record id="gn_career_mission_detail_action" model="ir.actions.act_window"> <record id="gn_career_mission_detail_action" model="ir.actions.act_window">
<field name="name">Détails des missions</field> <field name="name">Détails des missions</field>
<field name="res_model">gn_career.mission.detail</field> <field name="res_model">gn_career.mission.detail</field>

Loading…
Cancel
Save