@@ -36,6 +36,7 @@ def save_new_pizza(name, ingredients):
3636 Ingredient (name = ingredient ["name" ], vegetarian = ingredient ["vegetarian" ], price = ingredient ["price" ]))
3737 calculated_price = calculated_price + 0.4 * calculated_price # 40% profit
3838 calculated_price = calculated_price + 0.09 * calculated_price # 9% VAT
39+ calculated_price = str (round (calculated_price , 2 ))
3940 new_pizza = Pizza (name = name , vegetarian = veg_flag , price = calculated_price , ingredients = ingredients_list )
4041 db .session .add (new_pizza )
4142 db .session .commit ()
@@ -108,7 +109,10 @@ def show_ingredients(name):
108109
109110def save_new_order (customer , order_items ):
110111 new_order_items = []
111- driver = get_first_available_driver ()
112+ customer_address = customer ["address" ]
113+ customer_area = customer_address ["area" ]
114+ customer_zip_code = customer_address ["zip_code" ]
115+ driver = get_first_available_driver (customer_area , customer_zip_code )
112116 driver_id = driver .id
113117 driver .available = False
114118 address = customer ["address" ]
@@ -178,6 +182,7 @@ def driver_back():
178182 print ("Driver Back" )
179183 db .session .commit ()
180184
185+ # TODO: Change the times
181186 scheduler .add_job (id = 'preparation-time-' f'{ order_id } ' , func = change_status ,
182187 trigger = DateTrigger (order_time + timedelta (minutes = 0.1 )))
183188 scheduler .add_job (id = 'delivery-time-' f'{ order_id } ' , func = deliver ,
@@ -198,11 +203,22 @@ def find_order(order_id):
198203 return order
199204
200205
206+ def find_address (address_id ):
207+ address = Address .query .filter_by (id = address_id ).first_or_404 (
208+ description = 'There is no address with id {}' .format (address_id ))
209+ return address
210+
211+
201212def find_driver (driver_id ):
202213 driver = Driver .query .filter_by (id = driver_id ) \
203214 .first_or_404 (description = 'There is no driver with id {}' .format (driver_id ))
204215 return driver
205216
217+ def find_customer (customer_id ):
218+ customer = Customer .query .filter_by (id = customer_id ) \
219+ .first_or_404 (description = 'There is no driver with id {}' .format (customer_id ))
220+ return customer
221+
206222
207223def cancel_order (order_id ):
208224 order = find_order (order_id )
@@ -235,14 +251,27 @@ def are_there_available_drivers():
235251 return False
236252
237253
238- def get_first_available_driver ():
254+ def get_first_available_driver (area , zip_code ):
239255 if are_there_available_drivers ():
240256 drivers = db .session .query (Driver )
257+ orders = db .session .query (Order )
258+ current_time = datetime .now ()
241259 for driver in drivers :
242- if driver .available :
260+ if driver .available and driver . working_area == area :
243261 return driver
262+ else :
263+ if driver .working_area == area :
264+ for order in orders :
265+ customer = find_customer (order .customer_id )
266+ address = find_address (customer .address_id )
267+ if address .area == area and ((current_time - order .order_time ).seconds / 60 ) < 1 and address .zip_code == zip_code :
268+ return driver
269+
270+ raise Exception ("There are no available drivers for your area." )
244271 else :
245272 raise Exception ("There are no available drivers." )
246273
247274
275+
276+
248277db .create_all ()
0 commit comments