Dans les étapes ci-dessous, je vous montre comment vous calculez le jour ouvrable suivant lorsque nous ajoutons un nombre de jours ouvrés (B) à une date quelconque (A), en tenant compte des week-ends et des jours fériés (C) en utilisant K2.
Exemple: Calculez la prochaine date de travail avec 4 jours ouvrables et la date (17/07/2019), le 23/07/2019 étant un jour férié, image ci-dessous.
Nous obtenons: 24/07/2019.
Étapes de réalisation
1. Créez une smartbox SMO qui gardera toutes vos vacances.
2. Générez une vue liste smartbox SMO qui vous permettra de gérer vos vacances.
3. Créer une vue item qui contiendra les contrôles dans l’image ci-dessous
4. Écrivez la règle _WeekEndOrNot qui indique si une date est le week-end (Yes) ou non (No), procédez comme suit:
NOTE: La règle _WeekEndOrNot contient une condition préalable qui teste la valeur renvoyée par l’expression ci-dessous (i). Mais si l’expression retourne un samedi ou un dimanche, nous concluons qu’il s’agit d’un week-end et transférons le “Yes” à dl_IsWeekEnd, sinon nous transférons le “No” à dl_IsWeekEnd.
i. Une expression qui prend la date dans dl_NextWorkingDate et renvoie le nom du jour, image ci-dessous
5. Écrivez une expression Ex_DayCounter . Il s’incrémente chaque fois que nous ajoutons une date et la stockons dans dl_ActiveDayCounter, image ci-dessous.
6. Lorsque btn_GetWorkingDate est cliqué:
Dans 1, nous validons les contrôles A & B dans 2, nous initialisons dl_ActiveWorkingDays à 1, puis nous stockons la date dans Cldr_Date dans dl_GivenDate. En 3, nous exécutons Ex_AddDate et conservons sa valeur dans dl_NextWorkingDate, qui appelle la règle du point 7 ci-dessous.
7. Ensuite, nous écrivons la règle _DateValueChange qui est structurée comme dans l’image:
De l’image ci-dessus,
Bloc: I. Vérifie si la date dans dl_NextWorkingDate est un jour férié ou un week-end (dl_IsHoliday a une valeur OU dl_IsWeekEnd est égal à Oui).
En A, nous stockons la valeur actuelle de dl_NextWorkingDate dans “dl_GivenDate”.
B Permet d’ajouter 1 jour à dl_NextWorkingDate qui appelle when dl_NextWorkingDate changes (boucle), jusqu’à ce obtenir un jour ouvrable.
Bloc: II. Vérifie si dl_NextWorkingDate contient un jour ouvrable et nous n’avons pas ajouté le nombre de jours donnés par l’utilisateur.
En C, nous mettons à jour dl_ActiveDayCounter en lui passant Ex_DayCounter.
D Garder la date de travail dans dl_GivenDate.
E Permet d’ajouter 1 jour à dl_NextWorkingDate qui appelle When dl_NextWorkingDate change (boucle), jusqu’à ce que nous ayons un jour ouvrable.
Bloc: III. Enfin, nous vérifions si nous avons ajouté tous les jours donnés par l’utilisateur et si la date actuel dans dl_NextWorkingDate est un jour ouvrable.
Téléchargez le package k2 ici ➡ Next-Working-Day-K2-Package
Merci à tous,