view for task detail
This commit is contained in:
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…
x
Reference in New Issue
Block a user