[FIX]hr_negative_leave:fix leave types available when creating a leave request #17

Merged
laetitiadacosta merged 1 commits from 16-fix-hr-negative-leaves into 16.0 2026-02-10 15:30:07 +00:00
2 changed files with 18 additions and 9 deletions

View File

@@ -3,7 +3,7 @@
{ {
"name": "hr_negative_leave", "name": "hr_negative_leave",
"version": "16.0.3.0.0", "version": "16.0.3.0.1",
"author": "Elabore", "author": "Elabore",
"website": "https://elabore.coop", "website": "https://elabore.coop",
"maintainer": "Elabore", "maintainer": "Elabore",

View File

@@ -5,17 +5,26 @@
<field name="inherit_id" ref="hr_holidays.hr_leave_view_form" /> <field name="inherit_id" ref="hr_holidays.hr_leave_view_form" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='holiday_status_id']" position="attributes"> <xpath expr="//field[@name='holiday_status_id']" position="attributes">
<!-- Pseudo-code for the domain:
if requires_allocation == 'no':
mondot marked this conversation as resolved Outdated

Je trouve les effets de bord de ce domaine assez compliqué à identifier, du coup j'ai demandé à notre ami Claude.

Est-ce que tu es d'accord avec sa suggestion ? (moi je suis plutôt d'accord)

 ● Le domaine actuel a un problème de logique. Analysons-le :                                                                                                  
   
  '|', '|', '|',                                                                                                                                              
  ('requires_allocation', '=', 'no'),         # A
  ('has_valid_allocation', '=', True),        # B                                                                                                             
  ('allows_negative', '=', True),             # C
  '&',
      ('allows_negative', '=', False),        # D
      ('virtual_remaining_leaves', '>', 0)    # E

  Ce qui donne : A OR B OR C OR (D AND E)

  Problèmes identifiés :

  1. has_valid_allocation = True seul est trop permissif : Si un type de congé a une allocation valide mais virtual_remaining_leaves <= 0 et allows_negative =
   False, il sera quand même affiché. L'utilisateur pourrait alors créer une demande qui sera refusée ensuite.
  2. allows_negative = True sans vérifier l'allocation : Un type de congé pourrait s'afficher même sans allocation valide, ce qui n'a pas de sens pour un
  congé négatif.

  Domaine corrigé suggéré :

  <attribute name="domain">[
      '|',
      ('requires_allocation', '=', 'no'),
      '&amp;',
          ('has_valid_allocation', '=', True),
          '|',
              ('allows_negative', '=', True),
              ('virtual_remaining_leaves', '&gt;', 0)
  ]</attribute>

  Ce qui se lit :
  - Soit le type ne nécessite pas d'allocation
  - Soit il a une allocation valide ET (soit les négatifs sont autorisés, soit il reste des jours)
Je trouve les effets de bord de ce domaine assez compliqué à identifier, du coup j'ai demandé à notre ami Claude. Est-ce que tu es d'accord avec sa suggestion ? (moi je suis plutôt d'accord) ``` ● Le domaine actuel a un problème de logique. Analysons-le : '|', '|', '|', ('requires_allocation', '=', 'no'), # A ('has_valid_allocation', '=', True), # B ('allows_negative', '=', True), # C '&', ('allows_negative', '=', False), # D ('virtual_remaining_leaves', '>', 0) # E Ce qui donne : A OR B OR C OR (D AND E) Problèmes identifiés : 1. has_valid_allocation = True seul est trop permissif : Si un type de congé a une allocation valide mais virtual_remaining_leaves <= 0 et allows_negative = False, il sera quand même affiché. L'utilisateur pourrait alors créer une demande qui sera refusée ensuite. 2. allows_negative = True sans vérifier l'allocation : Un type de congé pourrait s'afficher même sans allocation valide, ce qui n'a pas de sens pour un congé négatif. Domaine corrigé suggéré : <attribute name="domain">[ '|', ('requires_allocation', '=', 'no'), '&amp;', ('has_valid_allocation', '=', True), '|', ('allows_negative', '=', True), ('virtual_remaining_leaves', '&gt;', 0) ]</attribute> Ce qui se lit : - Soit le type ne nécessite pas d'allocation - Soit il a une allocation valide ET (soit les négatifs sont autorisés, soit il reste des jours) ```

hello,

pour allows_negative, c'est voulu, on veut pouvoir sélectionner le type de congé même en cas de solde négatif

pour has_valid_allocation, c'est en effet trop permissif, j'ai repris le domain initial qui est :

if requires_allocation == 'no':
ok
elif has_valid_allocation and virtual_remaining_leaves > 0 and max_leaves > 0:
ok
else:
refuse

que j'ai changé pour

if requires_allocation == 'no': ok
elif has_valid_allocation and virtual_remaining_leaves > 0 and max_leaves > 0: ok
elif allow_negative == True: ok
else: refuse

hello, pour allows_negative, c'est voulu, on veut pouvoir sélectionner le type de congé même en cas de solde négatif pour has_valid_allocation, c'est en effet trop permissif, j'ai repris le domain initial qui est : if requires_allocation == 'no': ok elif has_valid_allocation and virtual_remaining_leaves > 0 and max_leaves > 0: ok else: refuse que j'ai changé pour if requires_allocation == 'no': ok elif has_valid_allocation and virtual_remaining_leaves > 0 and max_leaves > 0: ok elif allow_negative == True: ok else: refuse

Top, et merci pour le pseudo code en commentaire 😍

Top, et merci pour le pseudo code en commentaire 😍
ok
elif has_valid_allocation and virtual_remaining_leaves > 0 and max_leaves > 0:
ok
elif allows_negative == True:
ok
else:
refuse
-->
<attribute name="domain">[ <attribute name="domain">[
'|', '|', '|',
('requires_allocation', '=', 'no'), ('requires_allocation', '=', 'no'),
'&amp;', '&amp;',
('has_valid_allocation', '=', True), ('has_valid_allocation', '=', True),
'|', '&amp;',
('allows_negative', '=', True), ('virtual_remaining_leaves', '&gt;', 0),
'&amp;', ('max_leaves', '&gt;', 0),
('virtual_remaining_leaves', '&gt;', 0), ('allows_negative', '=', True)
('allows_negative', '=', False), ]</attribute>
]</attribute>
</xpath> </xpath>
</field> </field>
</record> </record>