Exemple #1
0
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("")
Exemple #2
0
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("")
Exemple #3
0
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()
Exemple #4
0
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)
Exemple #5
0
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
Exemple #6
0
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)
Exemple #7
0
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