Spaces:
Paused
Paused
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 | |