def cancel_order(request): ClinicManager.objects.get(user=request.user) if request.method == 'POST': req_obj = json.loads(request.body.decode('utf-8')) order_id = req_obj['order_id'] order_object = Order.objects.get(id=order_id) # Delete only if the order is queued for processing if order_object.order_status == "Queued for Processing": try: if ProcessQueue.objects.get(order_id=order_id): # Delete if in process queue process_queue_object = ProcessQueue.objects.get( order_id=order_id) process_queue_object.delete() current_process_queue = sorted(ProcessQueue.objects.all(), key=lambda x: x.queue_no) i = 1 for contents in current_process_queue: contents.queue_no = i contents.save() i += 1 except ProcessQueue.DoesNotExist: pass order_object.delete() update_process_queue() update_dispatch_queue() return HttpResponse("")
def notify_delivery(request): ClinicManager.objects.get(user=request.user) if request.method == 'POST': req_obj = json.loads(request.body.decode('utf-8')) order_id = req_obj['order_id'] order_object = Order.objects.get(id=order_id) order_object.time_delivered = timezone.now() order_object.order_status = "Delivered" order_object.save() update_process_queue() update_dispatch_queue() return HttpResponse("")
def place_order(request): ClinicManager.objects.get(user=request.user) if request.method == 'POST': req = json.loads(request.body.decode('utf-8')) print(req) if len(request.session['cart']) > 0: if place_order_for_user(request.session['cart'], request.session['clinic'], req['priority']): request.session['cart'] = [] request.session['total_weight'] = 0 request.session.modified = True update_process_queue() update_dispatch_queue() return HttpResponse(json.dumps({'status': 'success'})) else: request.session['cart'] = [] request.session['total_weight'] = 0 update_process_queue() update_dispatch_queue() return HttpResponse(json.dumps({'status': 'overweight'})) else: update_process_queue() update_dispatch_queue() return HttpResponse(json.dumps({'status': 'emptycart'})) else: update_process_queue() update_dispatch_queue() return HttpResponse()
def index(request): Dispatcher.objects.get(user=request.user) """ Render the Dispatcher home page. :param request: :return: Render template """ update_process_queue() update_dispatch_queue() dispatch_queue = DispatchQueue.objects.all().order_by('queue_number') if len(dispatch_queue) < 1: return render(request, 'dispatcher/index.html') if 'dispatch' not in request.session: request.session['dispatch'] = [] orders = [] weight = 0.0 for order in dispatch_queue: order_details = Order.objects.get(id=order.order_id) order_details.total_weight = round(order_details.total_weight, 2) weight += order_details.total_weight if weight > 23.8: break order_details.content_details = [] order_contents = json.loads(order_details.contents)['contents'] for cont in order_contents: item = Item.objects.get(id=cont['product_id']) item.qty = cont['qty'] order_details.content_details.append(item) orders.append(order_details) route_plan(orders) context = { 'orders': orders } return render(request, 'dispatcher/index.html', context=context)
def process(request): WarehousePersonnel.objects.get(user=request.user) order_object = Order.objects.filter(order_status='Processing by Warehouse') if (len(order_object) < 1): return HttpResponse("0") buffer = io.BytesIO() p = canvas.Canvas(buffer) p.drawString(100, 750, 'AS-P') i = 650 for order in order_object: p.drawString(100, i, "Order Number: " + str(order.id)) contents = order.contents contents = json.loads(contents) for content in contents['contents']: item_object = Item.objects.get(id=content['product_id']) p.drawString( 100, i - 50, str(item_object.name) + '; Quantity: ' + str(content['qty'])) i = i - 50 p.drawString(100, i - 50, str(order.order_clinic)) order.order_status = 'Queued for Dispatch' order.save() print('Queued for Dispatch...') update_dispatch_queue() request.session['process'] = [] request.session.modified = True p.showPage() p.save() response = HttpResponse(content_type='application/pdf') response[ 'Content-Disposition'] = 'attachment; filename = "shipping_label.pdf"' response.write(buffer.getvalue()) return response
def index(request): WarehousePersonnel.objects.get(user=request.user) update_process_queue() update_dispatch_queue() process_queue_top = ProcessQueue.objects.filter(queue_no=0) order_details = None if (len(process_queue_top) >= 1): if 'process' not in request.session: request.session['process'] = [] order_details = Order.objects.get(id=process_queue_top[0].order_id) order_details.total_weight = round(order_details.total_weight, 2) order_details.content_details = [] order_contents = json.loads(order_details.contents)['contents'] for cont in order_contents: item = Item.objects.get(id=cont['product_id']) item.qty = cont['qty'] order_details.content_details.append(item) order_in_process = Order.objects.filter( order_status='Processing by Warehouse') print(order_in_process) order_warehouse = None if (len(order_in_process) > 0): for order in order_in_process: order.content_details = [] order_contents = json.loads(order.contents)['contents'] for cont in order_contents: item = Item.objects.get(id=cont['product_id']) item.qty = cont['qty'] order.content_details.append(item) order_warehouse = order_in_process[0] context = {'order': order_details, 'warehouse': order_warehouse} return render(request, 'warehouse/index.html', context=context)
def dispatch(request): Dispatcher.objects.get(user=request.user) """ Dispatch an order The function will: dispatch the order that can be contained in the next shipment send email to the clinic manager for each order within the shipment, as a notification. :param request: :return: CSV file as a response. """ import csv orders_to_dispatch = DispatchQueue.objects.all().order_by('queue_number') if len(orders_to_dispatch) < 1: return HttpResponse("0") orders = [] weight = 0 for order in orders_to_dispatch: order_object = Order.objects.get(id=order.order_id) order_object.total_weight = round(order_object.total_weight, 2) weight += order_object.total_weight if weight > 23.8: break orders.append(order_object) order_object.order_status = 'Dispatched' order_object.time_dispatched = timezone.now() order_object.save() clinic_manager_email = (ClinicManager.objects.get(clinic_name= order_object.order_clinic)).user.email send_mail( 'Order Dispatched', 'Your order with order number: ' + str(order_object.id) + ' has been dispatched from the hospital.', '*****@*****.**', [clinic_manager_email] ) csv_route = route_plan(orders) update_dispatch_queue() response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="download.csv"' writer = csv.writer(response) for destination in csv_route: location_data = LocationData.objects.get(name=destination) writer.writerow([location_data.lat, location_data.lng, location_data.alt]) # for order in orders: # location_data = LocationData.objects.get(name=order.order_clinic) # writer.writerow([location_data.lat, location_data.lng, location_data.alt]) # location_data = LocationData.objects.get(name='Queen Mary Hospital Drone Port') # writer.writerow([location_data.lat, location_data.lng, location_data.alt]) request.session['dispatch'] = [] return response