def api_utilisateurs():
    users = db.session.execute("SELECT * FROM utilisateurs").fetchall()

    users_dict = {}
    for a, b, c, d, e, f, g, h, i, j, k in users:
        users_dict.setdefault(a, []).append([b, c, d, e, f, g, h, i, j, k])

    utile.ecrire_json(users_dict, "app/static/data/api/utilisateurs.json")
    utilisateurs = utile.lire_json('app/static/data/api/utilisateurs.json')

    return jsonify(utilisateurs)
def faq():
    faq_data = utile.lire_json('app/static/data/faq.json')
    return render_template('faq.html', titre='FAQ', faq_data=faq_data)
Beispiel #3
0
def faq():
    faq_data = utile.lire_json('app/static/data/faq.json')
    return render_template('faq.html', titre='FAQ', faq_data=faq_data)
Beispiel #4
0
def faq():
    faq_data = utile.lire_json("app/static/data/faq.json")
    return render_template("faq.html", titre="FAQ", faq_data=faq_data)
Beispiel #5
0
'''
Il faut que vous preniez en compte le fait que le Groupe 3
renvoit une adresse entière et non pas des morceaux d'adresse,
allez leur en parler. De plus, ils sont censés vous
renvoyer des chiffres, pas des chaînes de caractères.
Il vaut mieux séparer chaque test dans une fonction à part,
ca améliore la visibilité. Il n'y a plus besoin
de considérer les retours. Vous n'êtes pas obligés
de tout comparer dans vos tests, par exemple dans le
premier test c'est seulement le prix total qui nous
intéresse. 

La première fonction ci-dessous est un bon exemple.
'''

tarifs = utile.lire_json('app/devis/data/tarifs.json')
supplements = utile.lire_json('app/devis/data/supplements.json')

def tarif_minimum():
    '''
    On vérifie qu'un trajet court a bien comme prix
    le tarif minimum.
    '''
    # Choisir une date le lendemain du jour actuel
    date_debut = datetime.now() + timedelta(days=1)
    demande = {
        'commentaire': '',
        'adresse_dep': '10 Rue Elvire Toulouse',
        'adresse_arr': '17 Rue Elvire Toulouse',
        'categorie': 'particulier',
        'nb_passagers': 3,
Beispiel #6
0
def estimation(demande):
    ''' Calculer le devis d'une demande. '''

    # On récupère les tarifs applicables
    tarifs = utile.lire_json('app/devis/data/tarifs.json')
    supplements = utile.lire_json('app/devis/data/supplements.json')


    # Extraction des information de départ
    depart = geo.geocoder(demande['adresse_dep'])
    arrivee = geo.geocoder(demande['adresse_arr'])
    debut = demande['debut']

    # Simulation de la course
    simulation = calculer.simuler(depart, arrivee, debut)
    duree = simulation['duree']
    distance = simulation['distance']
    jour = simulation['ratios']['jour']
    nuit = simulation['ratios']['nuit']

    # Savoir si c'est un jour ferié ou un dimanche
    date = '{0}/{1}'.format(debut.day, debut.month)
    jours_feries = calendrier.feries(debut.year)
    ferie = date in jours_feries
    dimanche = debut.weekday() == 6

    # Décider du tarif à appliquer
    if ferie or dimanche:
        prix_par_km = tarifs['D']
    else:
        prix_par_km = jour * tarifs['C'] + nuit * tarifs['D']


    # Calculer le prix de la course
    montant = round(distance,1) * round(prix_par_km,2)


    # Calculer le supplément
    supplement = calculer_supplement(demande, supplements)

    # Tarif supplémentaire appliqué à un trajet ralenti (si temps de trajet plus long de 5 minutes 
    # par rapport à temps de trajet de référence, on applique une nouvelle tarification par minute de trajet supplémentaire)

    if round(simulation['ecart']/60) > 5:
        diff_minutes = round(simulation['ecart']/60) - 5
    else:
        diff_minutes = 0

    tarif_trajet_ralenti = diff_minutes * supplements['prix_trajet_ralenti']/60



    # Calcul du total minimum estimé
    total = montant + supplement + tarif_trajet_ralenti
    # Prise en compte du tarif minimum
    total = max(total, supplements['tarif_minimum'])


    # On retourne l'estimation à travers un dictionnaire de données

    estimation = {
        'prix': {
            'montant': round(montant, 2),
            'supplement': round(supplement, 2),
            'total': round(total,2)

        },
        'detail': {
            'parcours': {
                'duree': str(duree),
                'distance': round(distance,2),
                'prix_par_km': round(prix_par_km,2)
            },
            'bagages': {
                'nb': demande['nb_bagages'],
                'prix': supplements['bagage'],
                'total': round(int(demande['nb_bagages']) * supplements['bagage'],2)
            },
            'animaux': {
                'nb': demande['nb_animaux'],
                'prix': supplements['animal'],
                'total': round(int(demande['nb_animaux']) * supplements['animal'],2)
            },
            'personnes': {
                'nb': demande['nb_passagers'],
                'supplementaires': {
                    'nb': max(0, int(demande['nb_passagers']) - 4),
                    'prix': supplements['personne_sup'],
                    'total': round(max(0, int(demande['nb_passagers']) - 4) * supplements['personne_sup'],2)
                }
            },
            'gare': {
                'prise_en_charge': demande['gare'],
                'prix': 0 if not demande['gare'] else supplements['gare']
            },
            'aeroport': {
                'prise_en_charge': demande['aeroport'],
                'prix': 0 if not demande['aeroport'] else supplements['aeroport']
            },
            'prise_en_charge': supplements['prise_en_charge'],
            'tarif_trajet_ralenti' : round(tarif_trajet_ralenti,2),
            'trajet_a_vide':supplements['trajet_a_vide']
        }
    }
    return estimation
Beispiel #7
0
def estimation_precise(course):
    ''' Calculer le devis précis d'une course (en calculant le coût de trajet à vide). '''

    # on récupère la valeur estimée de la course lors de la première estimation
    prix = db.session.query(Course,Facture).filter(Course.numero == Facture.course).filter(Course.numero == course['numero']).first()
    prix_estimation = prix.Facture.estimation_1


    # On récupère les tarifs applicables
    tarifs = utile.lire_json('app/devis/data/tarifs.json')
    supplements = utile.lire_json('app/devis/data/supplements.json')

    # On déduit au prix estimé la valeur de trajet à vide fixée dans la première estimation
    tav = supplements['trajet_a_vide']
    prix_estimation -= tav
    

    # Simulation du trajet à vide

    # Récupération de la position du taxi qui effectuera la course
    pos = db.session.query(Course,Conducteur).filter(Course.conducteur == Conducteur.telephone).filter(Course.numero == course['numero']).first()
    pos_taxi = pos.Conducteur.position
    position = json.loads(db.session.scalar(
                    ST_AsGeoJSON(
                        pos_taxi
                    )
                ))
    position['lat'] = position['coordinates'][0]
    position['lon'] = position['coordinates'][1]




    # Extraction des information de départ
    dep = db.session.query(Course,Adresse).filter(Course.depart == Adresse.identifiant).filter(Course.numero == course['numero']).first()
    depart = dep.Adresse.position
    adresse_dep = json.loads(db.session.scalar(
                    ST_AsGeoJSON(
                        depart
                    )
                ))

    adresse_dep['lat'] = adresse_dep['coordinates'][0]
    adresse_dep['lon'] = adresse_dep['coordinates'][1]


    
    depart_taxi = position
    depart_course = adresse_dep

    deb = db.session.query(Course,Adresse).filter(Course.numero == course['numero']).first()   
    debut = deb.Course.debut



    # Calcul de la distance
    simulation = calculer.simuler(depart_taxi, depart_course, debut)
    duree = simulation['duree']
    distance = simulation['distance']
    jour = simulation['ratios']['jour']
    nuit = simulation['ratios']['nuit']

    # Savoir si c'est un jour ferié ou un dimanche
    date = '{0}/{1}'.format(debut.day, debut.month)
    jours_feries = calendrier.feries(debut.year)
    ferie = date in jours_feries
    dimanche = debut.weekday() == 6

    # Décider du tarif à appliquer
    if ferie or dimanche:
        prix_par_km = tarifs['B']
    else:
        prix_par_km = jour * tarifs['A'] + nuit * tarifs['B']

    # Calculer le prix de la course
    total = round(prix_estimation + distance * prix_par_km,2)
    # Prise en compte du tarif minimum
    total = max(total, supplements['tarif_minimum'])


    # On retourne la nouvelle estimation du prix du trajet
    return total
Beispiel #8
0
def estimation(demande):
    ''' Calculer le devis d'une demande. '''

    # On récupère les tarifs applicables
    tarifs = utile.lire_json('app/devis/data/tarifs.json')
    supplements = utile.lire_json('app/devis/data/supplements.json')

    # Prise en charge de départ
    prise_en_charge = supplements['prise_en_charge']

    # Extraction des information de départ
    depart = geo.geocoder(demande['adresse_dep'])
    arrivee = geo.geocoder(demande['adresse_arr'])
    debut = demande['debut']

    # Simulation de la course
    simulation = calculer.simuler(depart, arrivee, debut)
    duree = simulation['duree']
    distance = simulation['distance']
    jour = simulation['ratios']['jour']
    nuit = simulation['ratios']['nuit']

    # Savoir si c'est un jour ferié ou un dimanche
    date = '{0}/{1}'.format(debut.day, debut.month)
    jours_feries = calendrier.feries(debut.year)
    ferie = date in jours_feries
    dimanche = debut.weekday() == 6

    # Décider du tarif à appliquer
    if ferie or dimanche:
        prix_par_km = tarifs['D']
    else:
        prix_par_km = jour * tarifs['C'] + nuit * tarifs['D']


    # Calculer le prix de la course
    montant = distance * prix_par_km

    # Prix du trajet à vide
    tav = supplements['trajet_a_vide']

    # Calculer le supplément
    supplement = calculer_supplement(demande, supplements)

    # Tarif supplémentaire appliqué à un trajet ralenti (si temps de trajet plus long de 5 minutes 
    # par rapport à temps de trajet de référence, on applique une nouvelle tarification par minute de trajet supplémentaire)

    if round(simulation['ecart']/60) > 5:
        diff_minutes = round(simulation['ecart']/60) - 5
    else:
        diff_minutes = 0

    estimation = diff_minutes * supplements['prix_trajet_ralenti']/60



    # Calcul du total minimum estimé
    total = montant + supplement + tav + estimation
    # Prise en compte du tarif minimum
    total = max(total, supplements['tarif_minimum'])


    # On retourne l'estimation à travers un dictionnaire de données

    estimation = {
        'prix': {
            'montant': round(montant, 2),
            'supplement': round(supplement, 2),
            'trajet_a_vide' : tav,
            'total': round(total,2)

        },
        'detail': {
            'parcours': {
                'duree': str(duree),
                'distance': round(distance,1),
                'prix_par_km': prix_par_km
            },
            'bagages': {
                'nb': demande['nb_bagages'],
                'prix': supplements['bagage'],
                'total': int(demande['nb_bagages']) * supplements['bagage']
            },
            'animaux': {
                'nb': demande['nb_animaux'],
                'prix': supplements['animal'],
                'total': int(demande['nb_animaux']) * supplements['animal']
            },
            'personnes': {
                'nb': demande['nb_passagers'],
                'supplementaires': {
                    'nb': max(0, int(demande['nb_passagers']) - 4),
                    'prix': supplements['personne_sup'],
                    'total': max(0, int(demande['nb_passagers']) - 4) * supplements['personne_sup']
                }
            },
            'gare': {
                'prise_en_charge': demande['gare'],
                'prix': 0 if not demande['gare'] else supplements['gare']
            },
            'aeroport': {
                'prise_en_charge': demande['aeroport'],
                'prix': 0 if not demande['aeroport'] else supplements['aeroport']
            },
            'prise_en_charge': supplements['prise_en_charge']
        }
    }
    return estimation
Beispiel #9
0
def estimation_precise(course):
    ''' Calculer le devis précis d'une course (en calculant le coût de trajet à vide). '''

    # on récupère la valeur estimée de la course lors de la première estimation
    prix = db.session.query(Course,Facture).filter(Course.numero == Facture.course).filter(Course.numero == course['numero']).first()
    prix_estimation = prix.Facture.montant


    # On récupère les tarifs applicables
    tarifs = utile.lire_json('app/devis/data/tarifs.json')
    supplements = utile.lire_json('app/devis/data/supplements.json')

    # On déduit au prix estimé la valeur de trajet à vide fixée dans la première estimation
    tav = supplements['trajet_a_vide']
    prix_estimation -= tav
    

    # Simulation du trajet à vide

    # Récupération de la position du taxi qui effectuera la course
    pos = db.session.query(Course,Conducteur).filter(Course.conducteur == Conducteur.telephone).filter(Course.numero == course['numero']).first()
    pos_taxi = pos.Conducteur.position
    position = json.loads(db.session.scalar(
                    ST_AsGeoJSON(
                        pos_taxi
                    )
                ))
    position['lat'] = position['coordinates'][0]
    position['lon'] = position['coordinates'][1]




    # Extraction des information de départ
    dep = db.session.query(Course,Adresse).filter(Course.depart == Adresse.identifiant).filter(Course.numero == course['numero']).first()
    depart = dep.Adresse.position
    adresse_dep = json.loads(db.session.scalar(
                    ST_AsGeoJSON(
                        depart
                    )
                ))

    adresse_dep['lat'] = adresse_dep['coordinates'][0]
    adresse_dep['lon'] = adresse_dep['coordinates'][1]


    
    depart_taxi = position
    depart_course = adresse_dep

    deb = db.session.query(Course,Adresse).filter(Course.numero == course['numero']).first()   
    debut = deb.Course.debut



    # Calcul de la distance
    simulation = calculer.simuler(depart_taxi, depart_course, debut)
    duree = simulation['duree']
    distance = simulation['distance']
    jour = simulation['ratios']['jour']
    nuit = simulation['ratios']['nuit']

    # Savoir si c'est un jour ferié ou un dimanche
    date = '{0}/{1}'.format(debut.day, debut.month)
    jours_feries = calendrier.feries(debut.year)
    ferie = date in jours_feries
    dimanche = debut.weekday() == 6

    # Décider du tarif à appliquer
    if ferie or dimanche:
        prix_par_km = tarifs['B']
    else:
        prix_par_km = jour * tarifs['A'] + nuit * tarifs['B']


    # Calculer le prix de la course
    total = round(prix_estimation + distance * prix_par_km,2)
    # Prise en compte du tarif minimum
    total = max(total, supplements['tarif_minimum'])


    # On retourne la nouvelle estimation du prix du trajet
    return total