Example #1
0
def tarifs(demande):
    
    supp = suppf(demande)
    heures_tarif = heures_tariff(demande)

    #On initialise les prix de départ et les suppléments
    prise_en_charge = supp[supp['Supplements'] == 'Prise_en_charge']
    
        #On récupère la date et l'heure de départ
    date = demande['date_debut'].split('-')
    annee = int(date[0])
    mois = int(date[1])
    jour = int(date[2])
    heure = int(demande['heures'])
    minutes = int(demande['minutes'])
    
    #Mise en forme de la date
    date = datetime(
        annee,
        mois,
        jour,
        heure,
        minutes
    )

 #On prend les lignes selon les types de tarifs et on en tire le prix associé
    if tt.type_tarif(demande)[1] == [0,1] or tt.type_tarif(demande)[1] == [1,0]:
        #tout le trajet en jour ou en nuit
        ligne = heures_tarif[heures_tarif['Type_Tarif'] == tt.type_tarif(demande)[0]]
        prix = float(ligne['tarif_par_km'])
    else:
        #trajet en partie en jour et en nuit
        ligne = heures_tarif[heures_tarif['Type_Tarif'] == tt.type_tarif(demande)[2][0]]#tarif nuit
        ligne2 = heures_tarif[heures_tarif['Type_Tarif'] == tt.type_tarif(demande)[2][1]]#tarif jour
        prix = float(ligne['tarif_par_km']) * tt.type_tarif(demande)[1][0] + float(ligne2['tarif_par_km']) * tt.type_tarif(demande)[1][1] #avec pourcentage de jour et de nuit
    
   
    
    #On calcule les suppléments
    #On récupère les lignes selon les suppléments et leurs prix
    an = supp[supp['Supplements'] == 'Animal']
    bag = supp[supp['Supplements'] == 'Bagage']
    PerS = supp[supp['Supplements'] == 'PersonneSup']
    Gar = supp[supp['Supplements'] == 'Gare']
    Aer = supp[supp['Supplements'] == 'Aeroport']
    
    #On calcule les suppléments
    supplement = float(demande['bagage']) * float(bag['Prix']) + float(demande['animaux']) * 1
    
    if int(demande['nb_passagers']) > 4:
        supplement += (float(demande['nb_passagers'])-4) * float(PerS['Prix'])
    
    if demande['gare'] == 'True':
        supplement += float(Gar['Prix'])
		
    if demande['aeroport'] == 'True':
        supplement += float(Aer['Prix'])

    #On concatenne les adresses de départ et d'arrivée
    depart = demande['numero_dep'] + ' ' + demande['adresse_dep'] + ' ' + demande['cp_dep'] + ' ' + demande['ville_dep']
    arrive = demande['numero_arr'] + ' ' + demande['adresse_arr'] + ' ' + demande['cp_arr'] + ' ' + demande['ville_arr']       

    #On calcule le prix total
    if demande['A-R'] == 'True':
        prixTotal = float(prise_en_charge['Prix']) + prix *( cd.recup_distance(cd.distance(depart,arrive)) + cd.recup_distance(cd.distance(arrive,depart)) ) + supplement
    else:
        prixTotal = float(prise_en_charge['Prix']) + prix * cd.recup_distance(cd.distance(depart,arrive)) + supplement

    
    #On vérifie que le prix total soit supérieur au prix minimal
    prixMinimal = float(supp[supp['Supplements'] == 'Tarif_minimum']['Prix'])
    
    if prixTotal < prixMinimal:
        prixTotal = prixMinimal
    
#On retourne le prix total via un dictionnaire de données
#Gestion des conditions

    #Si le client est pris à l'aéroport
    if demande['aeroport'] == 'True':   
        prixA = float(Aer['Prix'])
    else:
        prixA = 0
        
    #Si le nombre de personne est supérieur à 4
    if int(demande['nb_passagers']) > 4:
        nbPersonnes =  float(demande['nb_passagers']) - 4
    else:
        nbPersonnes = 0
   
     #Si le client est pris à la gare
    if demande['gare'] == 'True':
        prixG = float(Gar['Prix'])
    else:
        prixG = 0
                

    dico = {
                'Prix_Total' : str(round(prixTotal,2)), 
                'Prise_en_charge' : str(float(prise_en_charge['Prix'])),
                'Prix_par_km' : prix,
                'Nombre_km' : cd.recup_distance(cd.distance(depart,arrive)),
                'Nombre_bagage' : str(demande['bagage']),
                'Prix_1_bagage' : str(float(bag['Prix'])),
                'prix_total_bagage' : str(float(demande['bagage']) * float(bag['Prix'])),
                'animal' : str(demande['animaux']),
                'prix_animal' : str(float(an['Prix'])),
                'prix_total_animal' : str(float(demande['animaux']) * float(an['Prix'])),
                'Gare' : str(demande['gare']),
                'Prix_Gare' : str(prixG),
                'Nombres_personnes_sup' : nbPersonnes,
                'Prix_par_personnes_sup' : str(float(PerS['Prix'])),
                'Prix_personnes_sup' : str((nbPersonnes) * float(PerS['Prix'])),
                'Aeroport' : str(demande['aeroport']),
                'Prix_Aeroport':str(prixA)
 	}

    #On retourne le prix total
    return dico    
Example #2
0
def type_tarif(demande):
    
#On récupère la date et l'heure de départ
    date = demande['date_debut'].split('-')
    annee_depart = int(date[0])
    mois_depart = int(date[1])
    jour_depart = int(date[2])
    heure_depart = int(demande['heures'])
    minutes_depart = int(demande['minutes'])
    
    #Mise en forme de la date
    date = datetime(annee_depart,mois_depart,jour_depart,heure_depart,minutes_depart)
    
    #On concatenne les adresses de départ et d'arrivée
    depart = demande['numero_dep'] + ' ' + demande['adresse_dep'] + ' ' + demande['cp_dep'] + ' ' + demande['ville_dep']
    arrive = demande['numero_arr'] + ' ' + demande['adresse_arr'] + ' ' + demande['cp_arr'] + ' ' + demande['ville_arr']       

    #Recherche du tarif: Jour ou Nuit/JourFerie/Dimanche    
    #On calcule la date d'arrivée estimée du trajet
    temps_trajet = timedelta(minutes=cd.recup_heure(cd.distance(depart,arrive)))
    date_arrive = date + temps_trajet

    #On définit les limites de passages aux horaires jour et nuit
    date_lim_jour = datetime.strptime(str(annee_depart) + '-' + str(mois_depart) + '-' + str(jour_depart) + ' 08:00:00', '%Y-%m-%d %H:%M:%S')
    date_lim_soir = datetime.strptime(str(annee_depart) + '-' + str(mois_depart) + '-' + str(jour_depart) + ' 19:00:00', '%Y-%m-%d %H:%M:%S')

    #On calcule le pourcentage de temps passé avec chaque tarif (nuit/jour) lorsqu'il y a un changement de tarif en cours de trajet
    #Si le départ est avant 8h
    if date < date_lim_jour:
        
        #Si l'arrivée est entre 8h et 19h
        if date_arrive >= date_lim_jour and date_arrive < date_lim_soir:
            temps_nuit = (date_lim_jour - date)/temps_trajet
            temps_jour = (date_arrive - date_lim_jour)/temps_trajet
            intervalle = [round(temps_nuit,2), round(temps_jour,2)]
        #Si l'arrivée est après 19h
        elif date_arrive >= date_lim_soir:
            temps_nuit = ((date_lim_jour - date) + (date_arrive - date_lim_soir))/temps_trajet
            temps_jour = (date_lim_soir - date_lim_jour)/temps_trajet
            intervalle = [round(temps_nuit,2), round(temps_jour,2)]
        #Si le trajet est seulement de nuit
        else:
            intervalle = [1,0]
    
    #Si le départ est avant 19h
    elif date < date_lim_soir:
        
        #Si l'arrivée est après 19h et avant 8h le lendemain
        if date_arrive >= date_lim_soir and date_arrive < date_lim_jour + timedelta(days=1):
            temps_jour = (date_lim_soir - date)/temps_trajet
            temps_nuit = (date_arrive - date_lim_soir)/temps_trajet
            intervalle = [round(temps_nuit,2), round(temps_jour,2)]
        #Si l'arrivée est après 8h le lendemain
        elif date_arrive >= date_lim_jour + timedelta(days=1):
            temps_nuit = ((date_lim_jour + timedelta(days=1)) - date_lim_soir)/temps_trajet
            temps_jour = ((date_lim_soir - date) + (date_arrive - date_lim_jour + timedelta(days=1)))/temps_trajet
            intervalle = [round(temps_nuit,2), round(temps_jour,2)]
        #Si le trajet est seulement de jour
        elif date_arrive < date_lim_soir: 
            intervalle = [0,1]
    
    #Si le départ est après 19h
    elif date >= date_lim_soir:
        
        #Si l'arrivée est entre 8h et 19h le lendemain
        if date_arrive >= date_lim_jour + timedelta(days=1) and date_arrive < date_lim_soir + timedelta(days=1):
            temps_nuit = ((date_lim_jour + timedelta(days=1)) - date) / temps_trajet
            temps_jour = (date_arrive - date_lim_jour + timedelta(day=1))/temps_trajet
            intervalle = [round(temps_nuit,2), round(temps_jour,2)]
        #Si l'arrivée est après 19h le lendemain
        elif date_arrive >= date_lim_soir + timedelta(days=1):
            temps_nuit = (date + (date_lim_jour + timedelta(days=1)) + (date_arrive - (date_lim_soir + timedelta(days=1))))/temps_trajet
            temps_jour = ((date_lim_soir + timedelta(days=1)) - (date_lim_jour + timedelta(days=1)))/temps_trajet
            intervalle = [round(temps_nuit,2), round(temps_jour,2)]
        #Si le trajet est seulement de nuit
        else:
            intervalle = [1,0]
   
 
    #On concaténe le mois et le jour de façon a avoir une chaine de la forme 'jour/mois'  
    dateC = str(date.day)+ '/' +str(date.month)
    
    #On vérifie si la date en entrée est un jour ferie
    ferie = dateC in [
        '1/1',
        '1/5',
        '8/5',
        '14/7',
        '15/8',
        '1/11',
        '11/11',
        '25/12'
    ]+feries(date.year)
    
    #print(ferie)    
    
    #On vérifie si le jour est un dimanche
    dimanche = date.weekday()
   
    if ferie == True or dimanche == 6:
        intervalle = [1,0]  
        
    #Choix du tarif avec prise en compte des aller retours
    #Si trajet Aller retour
    if demande['A-R'] == 'True':
    #Test tarif spécial (Nuit/JourFérié/Dimanche)
        if date.hour >= 19 and date.hour < 8 or ferie or dimanche == 6:
            Type_tarif = 'TarifB'
    #Tarif de jour par défaut 
        else:
            Type_tarif = 'TarifA'
    #Si trajet simple
    else:
    #Test tarif spécial (Nuit/JourFérié/Dimanche)
        if date.hour >= 19 and date.hour < 8 or ferie or dimanche == 6:
            Type_tarif = 'TarifD'
    #Tarif de jour par défaut 
        else:
            Type_tarif = 'TarifC'
  #Initialise les tarifs à utiliser en cas de changement de tarifs en cours de trajet           
    if demande['A-R'] == 'True':
        double_tarif = ['TarifB','TarifA']
    else:
        double_tarif = ['TarifD','TarifC']
    return Type_tarif, intervalle, double_tarif
Example #3
0
def tarifs(demande):
    
    supp=suppf(demande)
    heures_tarif =heures_tariff(demande)

    #On initialise les prix de départ et les suppléments
    prise_en_charge = supp[supp['Supplements'] == 'Prise_en_charge']
    
    #On prend les lignes selon les types de tarifs et on en tire le prix associé
    ligne = heures_tarif[heures_tarif['Type_Tarif'] == tt.type_tarif(demande)]
    prix = float(ligne['tarif_par_km'])
    
    #On calcule les suppléments
    #On récupère les lignes selon les suppléments et leurs prix
    an= supp[supp['Supplements'] == 'Animal']
    bag = supp[supp['Supplements'] == 'Bagage']
    PerS = supp[supp['Supplements'] == 'PersonneSup']
    Gar = supp[supp['Supplements'] == 'Gare']
    Aer = supp[supp['Supplements'] == 'Aeroport']
    
    #On calcule les suppléments
    supplement = float(demande['bagage']) * float(bag['Prix']) + float(demande['animaux']) * 1
    
    if int(demande['nb_passagers']) > 4:
        supplement += (float(demande['nb_passagers'])-4) * float(PerS['Prix'])
    
    if demande['gare'] == 'True':
        supplement += float(Gar['Prix'])
		
    if demande['aeroport'] == 'True':
        supplement += float(Aer['Prix'])

    #On concatenne les adresses de départ et d'arrivée
    depart = demande['numero_dep'] + ' ' + demande['adresse_dep'] + ' ' + demande['cp_dep'] + ' ' + demande['ville_dep']
    arrive = demande['numero_arr'] + ' ' + demande['adresse_arr'] + ' ' + demande['cp_arr'] + ' ' + demande['ville_arr']       

    #On calcule le prix total
    if demande['A-R'] == 'True':
        prixTotal = float(prise_en_charge['Prix']) + prix *( cd.recup_distance(cd.distance(depart,arrive)) + cd.recup_distance(cd.distance(arrive,depart)) ) + supplement
    else:
        prixTotal = float(prise_en_charge['Prix']) + prix * cd.recup_distance(cd.distance(depart,arrive)) + supplement

    
    #On vérifie que le prix total soit supérieur au prix minimal
    prixMinimal = float(supp[supp['Supplements'] == 'Tarif_minimum']['Prix'])
    
    if prixTotal < prixMinimal:
        prixTotal = prixMinimal
    
#On retourne le prix total via un dictionnaire de données
#Gestion des conditions

    #Si le client est pris à l'aéroport
    if demande['aeroport'] == 'True':   
        prixA = float(Aer['Prix'])
    else:
        prixA = 0
        
    #Si le nombre de personne est supérieur à 4
    if int(demande['nb_passagers']) > 4:
        nbPersonnes =  float(demande['nb_passagers']) - 4
    else:
        nbPersonnes = 0
   
     #Si le client est pris à la gare
    if demande['gare'] == 'True':
        prixG = float(Gar['Prix'])
    else:
        prixG = 0
                

    dico = {
                'Prix_Total' : str(round(prixTotal,2)), 
                'Prise_en_charge' : str(float(prise_en_charge['Prix'])),
                'Nombre_bagage' : str(demande['bagage']),
                'Prix_1_bagage' : str(float(bag['Prix'])),
                'prix_total_bagage' : str(float(demande['bagage']) * float(bag['Prix'])),
                'animal' : str(demande['animaux']),
                'prix_animal' : str(float(an['Prix'])),
                'prix_total_animal' : str(float(demande['animaux']) * float(an['Prix'])),
                'Gare' : str(demande['gare']),
                'Prix_Gare' : str(prixG),
                'Nombres_personnes_sup' : nbPersonnes,
                'Prix_par_personnes_sup' : str(float(PerS['Prix'])),
                'Prix_personnes_sup' : str((nbPersonnes) * float(PerS['Prix'])),
                'Aeroport' : str(demande['aeroport']),
                'Prix_Aeroport':str(prixA)
                }

    #On retourne le prix total
    return dico