Ejemplo n.º 1
0
    def test_for_year(self):
        self.assertEquals(
            JoursFeries.for_year(2018),
            {
                "Armistice": datetime.date(2018, 11, 11),
                "Ascension": datetime.date(2018, 5, 10),
                "Assomption": datetime.date(2018, 8, 15),
                "Fête Nationale": datetime.date(2018, 7, 14),
                "Fête du travail": datetime.date(2018, 5, 1),
                "Jour de l'an": datetime.date(2018, 1, 1),
                "Lundi de Pâques": datetime.date(2018, 4, 2),
                "Noël": datetime.date(2018, 12, 25),
                "Lundi de Pentecôte": datetime.date(2018, 5, 21),
                "Toussaint": datetime.date(2018, 11, 1),
                "Victoire des alliés": datetime.date(2018, 5, 8),
            },
        )

        self.assertEquals(
            JoursFeries.for_year(2020),
            {
                "Armistice": datetime.date(2020, 11, 11),
                "Ascension": datetime.date(2020, 5, 21),
                "Assomption": datetime.date(2020, 8, 15),
                "Fête Nationale": datetime.date(2020, 7, 14),
                "Fête du travail": datetime.date(2020, 5, 1),
                "Jour de l'an": datetime.date(2020, 1, 1),
                "Lundi de Pâques": datetime.date(2020, 4, 13),
                "Noël": datetime.date(2020, 12, 25),
                "Lundi de Pentecôte": datetime.date(2020, 6, 1),
                "Toussaint": datetime.date(2020, 11, 1),
                "Victoire des alliés": datetime.date(2020, 5, 8),
            },
        )
Ejemplo n.º 2
0
    def test_for_year_in_alsace(self):
        self.maxDiff = None
        self.assertEquals(
            JoursFeries.for_year(2018, include_alsace=True), {
                'Armistice': datetime.date(2018, 11, 11),
                'Ascension': datetime.date(2018, 5, 10),
                'Assomption': datetime.date(2018, 8, 15),
                'Fête Nationale': datetime.date(2018, 7, 14),
                'Fête du travail': datetime.date(2018, 5, 1),
                "Jour de l'an": datetime.date(2018, 1, 1),
                'Lundi de Pâques': datetime.date(2018, 4, 2),
                'Noël': datetime.date(2018, 12, 25),
                'Pentecôte': datetime.date(2018, 5, 21),
                'Toussaint': datetime.date(2018, 11, 1),
                'Victoire des alliés': datetime.date(2018, 5, 8),
                'Vendredi Saint': datetime.date(2018, 3, 30),
                'Saint Étienne': datetime.date(2018, 12, 26)
            })

        self.assertEquals(
            JoursFeries.for_year(2020, include_alsace=True), {
                'Armistice': datetime.date(2020, 11, 11),
                'Ascension': datetime.date(2020, 5, 21),
                'Assomption': datetime.date(2020, 8, 15),
                'Fête Nationale': datetime.date(2020, 7, 14),
                'Fête du travail': datetime.date(2020, 5, 1),
                "Jour de l'an": datetime.date(2020, 1, 1),
                'Lundi de Pâques': datetime.date(2020, 4, 13),
                'Noël': datetime.date(2020, 12, 25),
                'Pentecôte': datetime.date(2020, 6, 1),
                'Toussaint': datetime.date(2020, 11, 1),
                'Victoire des alliés': datetime.date(2020, 5, 8),
                'Vendredi Saint': datetime.date(2020, 4, 10),
                'Saint Étienne': datetime.date(2020, 12, 26)
            })
Ejemplo n.º 3
0
    def test_for_year(self):
        self.assertEquals(
            JoursFeries.for_year(2018), {
                'Armistice': datetime.date(2018, 11, 11),
                'Ascension': datetime.date(2018, 5, 10),
                'Assomption': datetime.date(2018, 8, 15),
                'Fête Nationale': datetime.date(2018, 7, 14),
                'Fête du travail': datetime.date(2018, 5, 1),
                "Jour de l'an": datetime.date(2018, 1, 1),
                'Lundi de Pâques': datetime.date(2018, 4, 2),
                'Noël': datetime.date(2018, 12, 25),
                'Pentecôte': datetime.date(2018, 5, 21),
                'Toussaint': datetime.date(2018, 11, 1),
                'Victoire des alliés': datetime.date(2018, 5, 8)
            })

        self.assertEquals(
            JoursFeries.for_year(2020), {
                'Armistice': datetime.date(2020, 11, 11),
                'Ascension': datetime.date(2020, 5, 21),
                'Assomption': datetime.date(2020, 8, 15),
                'Fête Nationale': datetime.date(2020, 7, 14),
                'Fête du travail': datetime.date(2020, 5, 1),
                "Jour de l'an": datetime.date(2020, 1, 1),
                'Lundi de Pâques': datetime.date(2020, 4, 13),
                'Noël': datetime.date(2020, 12, 25),
                'Pentecôte': datetime.date(2020, 6, 1),
                'Toussaint': datetime.date(2020, 11, 1),
                'Victoire des alliés': datetime.date(2020, 5, 8)
            })
    def est_jour_ferie(self, row):
        date = row["date_heure_reception_alerte_locale"].date()

        if date.year not in self.bank_holidays:
            dates = JoursFeries.for_year(date.year).values()
            self.bank_holidays[date.year] = dates

        return date in self.bank_holidays[date.year]
Ejemplo n.º 5
0
    def test_for_year_in_alsace(self):
        self.maxDiff = None
        self.assertEquals(
            JoursFeries.for_year(2018, include_alsace=True),
            {
                "Armistice": datetime.date(2018, 11, 11),
                "Ascension": datetime.date(2018, 5, 10),
                "Assomption": datetime.date(2018, 8, 15),
                "Fête Nationale": datetime.date(2018, 7, 14),
                "Fête du travail": datetime.date(2018, 5, 1),
                "Jour de l'an": datetime.date(2018, 1, 1),
                "Lundi de Pâques": datetime.date(2018, 4, 2),
                "Noël": datetime.date(2018, 12, 25),
                "Lundi de Pentecôte": datetime.date(2018, 5, 21),
                "Toussaint": datetime.date(2018, 11, 1),
                "Victoire des alliés": datetime.date(2018, 5, 8),
                "Vendredi Saint": datetime.date(2018, 3, 30),
                "Saint Étienne": datetime.date(2018, 12, 26),
            },
        )

        self.assertEquals(
            JoursFeries.for_year(2020, include_alsace=True),
            {
                "Armistice": datetime.date(2020, 11, 11),
                "Ascension": datetime.date(2020, 5, 21),
                "Assomption": datetime.date(2020, 8, 15),
                "Fête Nationale": datetime.date(2020, 7, 14),
                "Fête du travail": datetime.date(2020, 5, 1),
                "Jour de l'an": datetime.date(2020, 1, 1),
                "Lundi de Pâques": datetime.date(2020, 4, 13),
                "Noël": datetime.date(2020, 12, 25),
                "Lundi de Pentecôte": datetime.date(2020, 6, 1),
                "Toussaint": datetime.date(2020, 11, 1),
                "Victoire des alliés": datetime.date(2020, 5, 8),
                "Vendredi Saint": datetime.date(2020, 4, 10),
                "Saint Étienne": datetime.date(2020, 12, 26),
            },
        )
Ejemplo n.º 6
0
 def testPaques(self):
     self.assertEquals(JoursFeries.paques(1954), datetime.date(1954, 4, 18))
     self.assertEquals(JoursFeries.paques(1981), datetime.date(1981, 4, 19))
     self.assertEquals(JoursFeries.paques(2049), datetime.date(2049, 4, 18))
Ejemplo n.º 7
0
def compute_required_workforce_details(needs, day_shifts, night_shifts,
                                       shift_durations, shift_break_durations,
                                       annual_hours_fix, annual_hours_var,
                                       week_indices, year,
                                       include_alsace_moselle):
    # Getting the number of each day of the week in a year
    s = get_nb_of_each_week_day_in_a_year(year)

    # Getting all the french bank holidays of the given year (except those on sundays)
    bank_holidays = JoursFeries.for_year(year,
                                         include_alsace=include_alsace_moselle)
    # Note: the next weekday() function returns the day of the week as an integer, where Monday is 0 and Sunday is 6
    bank_holidays_days = list(
        filter(lambda day: day < 6,
               [datetime.weekday() for datetime in bank_holidays.values()]))

    break_durations = shift_break_durations.copy()
    for shift in {**night_shifts, **day_shifts}:
        if shift not in shift_break_durations or shift_break_durations[
                shift] is None:
            break_durations[shift] = 0

    # Overall FTER computation
    # Hypothesis : all the workforce are in fixed rest
    fter_day = sum([
        sum([
            needs[day][shift] * s[day] *
            (shift_durations[shift] - break_durations[shift])
            for day in week_indices
        ]) for shift in day_shifts
    ]) / annual_hours_fix['day']
    fter_night = sum([
        sum([
            needs[day][shift] * s[day] *
            (shift_durations[shift] - break_durations[shift])
            for day in week_indices
        ]) for shift in night_shifts
    ]) / annual_hours_fix['night']

    # Verification of the hypothesis : if true -> END, else all the workforce are in VARIABLE rest -> compute again
    nb_sb_day = (s[6] * sum([needs[6][shift] for shift in day_shifts]) + sum([
        sum([needs[day][shift] for day in bank_holidays_days])
        for shift in day_shifts
    ])) / fter_day
    nb_sb_night = (s[6] * sum([needs[6][shift] for shift in night_shifts]) +
                   sum([
                       sum([needs[day][shift] for day in bank_holidays_days])
                       for shift in night_shifts
                   ]))
    nb_sb_night /= fter_night
    if nb_sb_day > 10:
        # All the workforce on day shifts are in variable rest
        fter_day = sum([
            sum([
                needs[day][shift] * s[day] *
                (shift_durations[shift] - break_durations[shift])
                for day in week_indices
            ]) for shift in day_shifts
        ]) / annual_hours_var['day']
    if nb_sb_night > 10:
        # All the workforce on night shifts are in variable rest
        fter_night = sum([
            sum([
                needs[day][shift] * s[day] *
                (shift_durations[shift] - break_durations[shift])
                for day in week_indices
            ]) for shift in night_shifts
        ]) / annual_hours_var['night']
    return fter_day, fter_night, nb_sb_day <= 10, nb_sb_night <= 10
Ejemplo n.º 8
0
    event.begin = date.strftime("%Y-%m-%d")
    event.make_all_day()
    calendar.events.add(event)


START, END = date(1950, 1, 1), date(2050, 12, 31)

modes = [({"include_alsace": False}, ""), ({"include_alsace": True}, "_alsace_moselle")]

for mode in modes:
    args, suffix = mode
    bank_holidays = {}
    calendar = Calendar()

    for year in range(START.year, END.year + 1):
        bank_holidays[year] = JoursFeries.for_year(year, **args)

    data = []
    dates = map(lambda d: d.to_pydatetime().date(), pd.date_range(START, END))
    for the_date in dates:
        est_jour_ferie = the_date in bank_holidays[the_date.year].values()
        nom_jour_ferie = None
        current_year = date.today().year
        is_recent = the_date.year in range(current_year - 5, current_year + 11)

        if est_jour_ferie:
            nom_jour_ferie = bank_holiday_name(bank_holidays, the_date)

        # Generate ICS calendar only from 5 years ago to 10 years in the future
        if est_jour_ferie and is_recent:
            add_event(calendar, nom_jour_ferie, the_date)
Ejemplo n.º 9
0
def add_rows(data_df, new_data_df):
    df = data_df.copy()

    shd = SchoolHolidayDates()
    df_tn = pd.read_csv(TOURN_FILE,
                        index_col=0,
                        parse_dates=True,
                        date_parser=parse_date,
                        sep=';')

    for d in new_data_df.index:

        print('Adding data for date:', d)
        # print(new_data_df.index)

        # Jour feries
        fer = int(d.date() in JoursFeries.for_year(d.year).values())

        # Vacances scolaires
        vac = int(shd.is_holiday_for_zone(d.date(), 'C'))

        # Tournament
        tourn = 0
        for tn_date in df_tn.index:
            if d in pd.date_range(end=tn_date, periods=4):
                tourn = 1

        # Weather
        t = d.isoformat()
        url = f'https://api.darksky.net/forecast/{DARKSKY_API_KEY3}/48.854891,2.203673,{t}?exclude=hourly,currently&flags&lang=fr&units=si'
        response = requests.get(url)
        if response.status_code is not 200:
            print('Http Error')
        weather = response.json()
        temp_max = get_attribute(weather, 'temperatureMax')
        temp_min = get_attribute(weather, 'temperatureMin')
        wind = get_attribute(weather, 'windGust')
        rain = get_attribute(weather, 'precipProbability')

        # add scale rain between 0 and 4 include
        rain = add_scale_rain(rain)

        # Competition a Saint-Cloud
        nbPlay = new_data_df.loc[d, 'nbPlay']

        # Restaurant open ?
        open_res = new_data_df.loc[d, 'open']

        # Number of covers
        nbCov = new_data_df.loc[d, 'nbCov']

        #print(nbCov)
        #print(temp_min)
        #print(type(wind))

        df.loc[d] = pd.Series(
            {
                'fer': fer,
                'vac': vac,
                'tourn': tourn,
                'tempMoy': round((temp_max + temp_min) / 2, 2),
                'tempMax': temp_max,
                'tempMin': temp_min,
                'wind': wind,
                'rain': rain,  ##True if rain > 0.5 else False,
                'nbPlay': nbPlay,
                'open': open_res,
                'nbCov': nbCov
            },
            name=d)

    return df
Ejemplo n.º 10
0
        elif choix=='teste':
            Cl.test(Cl.dico_arret)
            print('=============================================================================')
            print('                         Fin du teste')
            print('=============================================================================')
        elif  choix=='sibra':
            try:
                print("Fonction de recherche pour le chemin le plus court en terme de temps")
                date=input("Quelle est la date du depart(format: 01/10/2018) : ")
                dates=dt.date(int(date[-4:]), int(date[3:5]),int( date[:2]))
                jours=input("Quelle est le jour du depart : ")
                horraire=input("Entrer l'heure de depart : ")
                arret_depart=input("Entrer l'arret de depart : ")
                arret_arrive=input("Entrer l'arret d'arrivé : ")
                reseau=Cl.Sibra(Cl.dico_arret[arret_depart])
                dict_ferie=JoursFeries.for_year(int(date[-4:]))
                if jours=='dimanche' or jours=='samedi':
                    jour=3
                else:
                    jour=0
    
                for values in dict_ferie.values():
                    if values==dates:
                        jour=3
        
                resultat=reseau.affichage_resultat(Cl.dico_arret[arret_arrive],dt.timedelta(hours=int(horraire[:len(horraire)-3]),minutes=int(horraire[-2:])),jour,noeud)
            except:
                print('\033[31m=============================================================================\033[0m')
                print("\033[31mIl y a eu une erreur. Verifier les données entrées \033[0m")
                print('\033[31m=============================================================================\033[0m')