-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase_actions.py
More file actions
125 lines (112 loc) · 4.14 KB
/
database_actions.py
File metadata and controls
125 lines (112 loc) · 4.14 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from database import write_to_database
from car_rental_io import cars_as_dict
from datetime import datetime
def remove_from_database(item, list):
"""
Function used to remove items from database,
as input takes item and list it's in
returns a list
"""
list.remove(item)
write_to_database(list)
return list
def add_to_database(item, list):
"""
Function used to add items to database,
as input takes item and list it's in
returns a list
"""
list.append(item)
write_to_database(list)
return list
def overdue_cars(cars):
"""
Function returns overdue cars with amount of days they're late,
as input takes a list, using datetime compares today's date and rent end date
returns a list
"""
today = datetime.now().date()
overdue = []
if cars:
for car in cars:
rent_info = car.rent
if rent_info:
rent_end_date = datetime.strptime(rent_info.return_date, '%d.%m.%Y').date()
if rent_info is not None and (rent_end_date < today):
overdue.append(car)
return overdue
def search_database(criteria, cars):
"""
Function used to search items from database,
as an input takes criteria as dictionary and a list of cars,
iterates through dictionary and checks if criteria meet
return a list
"""
criteria_meeting = []
car_index = 0
cars_as_list = cars_as_dict(cars)
if len(criteria) != 0:
for car in cars_as_list:
criteria_met = 0
criteria_size = len(criteria)
for crit_name in criteria:
crit = criteria[crit_name]
car_crit = car[crit_name]
if isinstance(crit, dict):
if crit_name == 'Rent':
if car_crit is not None and crit['Return date'] is not None:
car_date = datetime.strptime(car_crit['Return date'], '%d.%m.%Y').date()
crit_date = datetime.strptime(crit['Return date'], '%d.%m.%Y').date()
if car_crit is None or crit['Return date'] is None or car_date < crit_date:
criteria_met += 1
continue
if crit_name == 'Reservation':
if car_crit is not None and crit['Due Reservation Date'] is not None:
car_date = datetime.strptime(car_crit['Due Reservation Date'], '%d.%m.%Y').date()
crit_date = datetime.strptime(crit['Due Reservation Date'], '%d.%m.%Y').date()
if car_crit is None or crit['Due Reservation Date'] is None or car_date < crit_date:
criteria_met += 1
continue
criteria_size += len(crit)
for add in crit:
if crit[add] != '':
try:
if crit[add] == car_crit[add] or crit[add] == '':
criteria_met += 1
except Exception:
pass
else:
criteria_met += 1
criteria_met += 1
else:
if crit == car_crit or crit == '':
criteria_met += 1
if(criteria_met == criteria_size):
car_class = cars[car_index]
criteria_meeting.append(car_class)
car_index += 1
return criteria_meeting
else:
return []
def reserved_cars(cars):
"""
function that lists all reserved cars,
as input takes a list, returns a list
"""
list = []
if cars:
for car in cars:
if car.reservation is not None:
list.append(car)
return list
def not_reserved_cars(cars):
"""
function that lists all available to rent cars,
as input takes a list, returns a list
"""
list = []
if cars:
for car in cars:
if car.reservation is None and car.rent is None:
list.append(car)
return list