1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| PROCEDURE gJoursOuvrés(dDateDébut, dDateFin, bOuvrables = Faux)
tabPâques est tableau d'entiers
nNbJoursTotal est entier
nNbJours est entier
dDateFérié est Date
tabJourOuvré est tableau de booléens = [Vrai, Vrai, Vrai, Vrai, Vrai, bOuvrables, Faux]
taDéjàFérié est tableau associatif (*, *, wlEntier) de booléen
nFérié est entier
SI PAS DateValide(dDateDébut) OU PAS DateValide(dDateFin) OU dDateFin < dDateDébut ALORS
ErreurDéclenche(1, "Paramètres invalides")
RENVOYER 0
FIN
nDateDébut est entier = DateVersEntier(dDateDébut)
nDateFin est entier = DateVersEntier(dDateFin)
nNbJoursTotal = nDateFin + 1 - nDateDébut
nNbJours = nNbJoursTotal
// Enlève les dimanches
nNbJours -= PartieEntière((nNbJoursTotal + (EntierVersJour(nDateDébut) + 6) modulo 7) / 7)
// Enlève les samedis
SI PAS bOuvrables ALORS
nNbJours -= PartieEntière((nNbJoursTotal + EntierVersJour(nDateDébut) modulo 7) / 7)
FIN
// Cherche Pâques sur les années concernées
POUR nAnnée = dDateDébut..Année _A_ dDateFin..Année
TableauAjoute(tabPâques, DateVersEntier(Pâques(nAnnée)))
FIN
// Enlève les jours fériés
POUR TOUTE CHAÎNE sJourFérié DE JourFériéListe() SEPAREE PAR RC
SI sJourFérié [= "@" ALORS
nDécalage est entier = 0
SELON sJourFérié
CAS jfJeudiDeLAscension
nDécalage = 39
CAS jfLundiDePâques
nDécalage = 1
CAS jfLundiDePentecôte
nDécalage = 50
CAS jfVendrediSaint
nDécalage = -2
FIN
SI nDécalage <> 0 ALORS
POUR TOUT nPâques DE tabPâques
nFérié = nPâques + nDécalage
SI PAS taDéjàFérié[nFérié] _ET_ nDateDébut <= nFérié <= nDateFin _ET_ tabJourOuvré[EntierVersJour(nFérié)] ALORS
nNbJours--
taDéjàFérié[nFérié] = Vrai
FIN
FIN
FIN
SINON
dDateFérié = "2000" + sJourFérié
POUR nAnnée = dDateDébut..Année _A_ dDateFin..Année
dDateFérié..Année = nAnnée
nFérié = DateVersEntier(dDateFérié)
SI PAS taDéjàFérié[nFérié] _ET_ nDateDébut <= nFérié <= nDateFin _ET_ tabJourOuvré[EntierVersJour(nFérié)] ALORS
nNbJours--
taDéjàFérié[nFérié] = Vrai
FIN
FIN
FIN
FIN
RENVOYER nNbJours |
Partager