-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Expand file tree
/
Copy pathfee_strategy.py
More file actions
30 lines (24 loc) · 1.01 KB
/
fee_strategy.py
File metadata and controls
30 lines (24 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from abc import ABC, abstractmethod
from parking_ticket import ParkingTicket
from vehicle_size import VehicleSize
import math
class FeeStrategy(ABC):
@abstractmethod
def get_hourly_rate(self, parking_ticket: ParkingTicket) -> float:
pass
def calculate_fee(self, parking_ticket: ParkingTicket) -> float:
duration = parking_ticket.get_exit_timestamp() - parking_ticket.get_entry_timestamp()
hours = max(1, math.ceil(duration / (1000 * 60 * 60)))
return hours * self.get_hourly_rate(parking_ticket)
class FlatRateFeeStrategy(FeeStrategy):
RATE_PER_HOUR = 10.0
def get_hourly_rate(self, parking_ticket: ParkingTicket) -> float:
return self.RATE_PER_HOUR
class VehicleBasedFeeStrategy(FeeStrategy):
HOURLY_RATES = {
VehicleSize.SMALL: 10.0,
VehicleSize.MEDIUM: 20.0,
VehicleSize.LARGE: 30.0,
}
def get_hourly_rate(self, parking_ticket: ParkingTicket) -> float:
return self.HOURLY_RATES[parking_ticket.get_vehicle().get_size()]