CegaperGPT / utils.py
andreinigo's picture
Upload 3 files
e1835d3
raw
history blame
3.94 kB
import googlemaps
import datetime
import os
# Crear un cliente de la API de Google Maps
gmaps = googlemaps.Client(key=os.environ["GOOGLE_MAPS_API_KEY"])
class Trip:
def __init__(self, origin, destination, departure_date, return_date, cost, car_type, pax):
self.origin = origin
self.destination = destination
self.departure_date = departure_date
self.return_date = return_date # esto puede ser None ahora
self.cost = cost
self.car_type = car_type
self.pax = pax
def to_dict(self):
trip_dict = {
'origin': self.origin,
'destination': self.destination,
'cost': self.cost,
'car_type': self.car_type,
'departure_date': self.departure_date.isoformat(),
'pax': self.pax
}
if self.return_date is not None:
trip_dict['return_date'] = self.return_date.isoformat()
return trip_dict
def determine_car_type(pax):
if 0 < pax < 6:
return "Transporter"
elif pax < 16:
return "Crafter"
elif pax < 23:
return "Minibus"
elif pax < 50:
return "Bus"
else:
return "Invalid"
def get_distance(origin: str, destination: str):
matrix = gmaps.distance_matrix(origin, destination)
distance_meters = matrix['rows'][0]['elements'][0]['distance']['value']
return distance_meters / 1000
def calculate_cost(distance, car_type):
base_cost_per_km = {
"Transporter": 50,
"Crafter": 75,
"Minibus": 100,
"Bus": 150
}
cost = distance * base_cost_per_km[car_type]
return round(max(500, min(20000, cost)))
def generate_trip_data(origin: str, destination: str, date_from: datetime, date_to: datetime, car_type: str, pax: int):
distance = get_distance(origin, destination)
base_cost = calculate_cost(distance, car_type)
trip = Trip(origin, destination, date_from,
date_to, base_cost, car_type, pax)
return trip
def get_trip(origin: str, destination: str, date_from: str, date_to=None, pax=1, round_trip: bool = False):
date_from = datetime.datetime.strptime(date_from, "%Y-%m-%d")
if date_to is not None:
date_to = datetime.datetime.strptime(date_to, "%Y-%m-%d")
car_type = determine_car_type(pax)
trip_origin = generate_trip_data(
origin, destination, date_from, date_to if round_trip else None, car_type, pax)
trip_return = None
if round_trip and date_to is not None:
trip_return = generate_trip_data(
destination, origin, date_to, None, car_type, pax)
trip_origin_dict = trip_origin.to_dict()
trip_info = "The trip to your destination is from " + trip_origin_dict['origin'] + " to " + trip_origin_dict['destination'] + " with a cost of " + str(
trip_origin_dict['cost']) + " and a car type of " + trip_origin_dict['car_type'] + ". "
if trip_return is not None:
trip_return_dict = trip_return.to_dict()
trip_info += "The return trip is from " + trip_return_dict['origin'] + " to " + trip_return_dict['destination'] + " with a cost of " + str(
trip_return_dict['cost']) + " and a car type of " + trip_return_dict['car_type'] + "."
return trip_info
def get_trip_info(trip_origin: Trip, trip_return: Trip = None):
trip_origin = trip_origin.to_dict()
trip_info = "The trip to your destination is from " + trip_origin['origin'] + " to " + trip_origin['destination'] + " with a cost of " + str(
trip_origin['cost']) + " and a car type of " + trip_origin['car_type'] + ". "
if trip_return is not None:
trip_return = trip_return.to_dict()
trip_info += "The return trip is from " + trip_return['origin'] + " to " + trip_return['destination'] + " with a cost of " + str(
trip_return['cost']) + " and a car type of " + trip_return['car_type'] + "."
return trip_info