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)
def faq(): faq_data = utile.lire_json("app/static/data/faq.json") return render_template("faq.html", titre="FAQ", faq_data=faq_data)
''' 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,
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
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
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
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