Je n’aime pas commencer quelque chose et ne pas le terminer alors hop, la suite du post précédent :
voici tout ce qu’il vous faut pour déterminer si un jour donné est férié ou pas
et également, à la demande de Denis, des méthodes utiles pour manipuler tout ça ^^
Il faudra bien-sur penser à maintenir tout ça en cas de disparition spontanée de jour férié dans les années à venir, comme c’est la tendance depuis quelques temps ;p
je suis également preneur de tout conseil sur la qualité du code et l’état de l’art, une façon plus élégante ou plus efficace de gérer tout ça ;p
Le code suivant est à ajouter au même niveau que la méthode pour calculer Pâques :
#Permet de calculer le jour de l’ascencion de l’année donnée
def self.getAscencion(date)
ascencion = self.getPaques(date) + 38
return ascencion
end
#Permet de calculer le jour du lundi de pentecote de l’année donnée
def self.getPentecote(date)
pentecote = self.getPaques(date) + 49
return pentecote
end
#Permet de récupérer le nombre de jours ouvrés pour un mois donné
def self.getNbJoursOuvresMois(date)
nb_jours_ouvres_mois = 0
date_debut = DateTime::new(date.year, date.month, 1)
date_fin = self.getDernierJour(date)
nb_jours_ouvres_mois = self.getNbJoursOuvresPeriode(date_debut, date_fin)
return nb_jours_ouvres_mois
end
# Permet de déterminer si le jour passé en param est férié ou non
def self.jourFerie?(date)
is_jour_ferie = false
tab_jours_feries = {
:nouvel_an => DateTime::new(date.year,1,1),
:armistice_39_45 => DateTime::new(date.year,5,8),
:toussaint => DateTime::new(date.year,11,1),
:armistice_14_18 => DateTime::new(date.year,11,11),
:assomption => DateTime::new(date.year,8,15),
:fete_du_travail => DateTime::new(date.year,5,1),
:fete_nationnale => DateTime::new(date.year,7,14),
:noel => DateTime::new(date.year,12,25),
:paques => UtilsDate.getPaques(date),
:ascencion => UtilsDate.getAscencion(date),
:pentecote => UtilsDate.getPentecote(date)
}
tab_jours_feries.each do |j|
if j[1] == date
is_jour_ferie = true
break
end
end
return is_jour_ferie
end
# Permet de récupérer le nombre de jours ouvrés pour un mois donné
def self.getNbJoursOuvresMois(date)
nb_jours_ouvres_mois = 0
date_debut = DateTime::new(date.year, date.month, 1)
date_fin = self.getDernierJour(date)
nb_jours_ouvres_mois = self.getNbJoursOuvresPeriode(date_debut, date_fin)
return nb_jours_ouvres_mois
end
# Permet de récupérer le nombre de jours ouvrés entre un jour donné et la fin du mois
def self.getNbJoursOuvresAvantFinMois(date)
nb_jours_ouvres_avant_fin_mois = 0
date_fin_mois = self.getDernierJour(date)
date.upto(date_fin_mois){ |ma_date|
nb_jours_ouvres_avant_fin_mois += 1 if self.isJourOuvre(ma_date)
}
return nb_jours_ouvres_avant_fin_mois
end
# Permet de récupérer le nombre de jours ouvré entre deux dates, inclues
def self.getNbJoursOuvresPeriode(date_debut, date_fin)
nb_jours_ouvres_periode = 0
#pour être certain de boucler dans le bon sens :
date_temp = nil
if date_debut > date_fin
date_temp= date_debut
date_debut = date_fin
date_fin = date_temp
end
date_debut.upto(date_fin){ |ma_date|
nb_jours_ouvres_periode += 1 if self.isJourOuvre(ma_date)
}
return nb_jours_ouvres_periode
end
# Permet de déterminer si le jour passé en param est ouvré
# ie : ni un jour férié, ni un samedi, ni un dimanche
def self.isJourOuvre(date)
is_jour_ouvre = false
if (!self.isJourFerie(date) && date.wday!=0 && date.wday!=6)
is_jour_ouvre = true
end
return is_jour_ouvre
end
# Permet d’obtenir le dernier jour du mois de la date passée en param
def self.getDernierJour(date)
if date.month == 12
annee = date.year+1
mois = 1
else
annee = date.year
mois = date.month+1
end
date_debut_mois_suivant = DateTime::new(annee, mois, 1)
date_dernier_jour = date_debut_mois_suivant - 1
return date_dernier_jour
end



