/ backend / providers / snappcar.py
snappcar.py
 1  from decimal import Decimal
 2  from typing import List
 3  
 4  from pydantic import Field
 5  
 6  from models.interface import ProviderInterface, VehicleOption, Calculator
 7  
 8  
 9  class SnappCarCalculator(Calculator):
10      average_price: Decimal = Field(default=Decimal("40"))
11      liter_per_km: Decimal = Field(default=Decimal("0.041"))
12      liter_price: Decimal = Field(default=Decimal("2.122"))
13  
14      def total_price(self) -> Decimal:
15          price = self.average_price
16  
17          if self.vehicle_request.distance_kilometer > 200:
18              price += (self.vehicle_request.distance_kilometer - 200) * self.price_per_km
19  
20          price += (
21              self.liter_per_km * self.liter_price
22          ) * self.vehicle_request.distance_kilometer
23          return price
24  
25  
26  class SnappCar(ProviderInterface):
27      async def get_vehicles_options(self) -> List[VehicleOption]:
28          return [
29              VehicleOption(
30                  calculator=SnappCarCalculator(
31                      price_per_minute=Decimal("0.00"),
32                      price_per_km=Decimal("0.15"),
33                      vehicle_request=self.vehicle_request,
34                  ),
35                  vehicle_image="snappcar.png",
36                  provider="Snappcar",
37                  type="Gemiddelde kosten",
38              )
39          ]