示例#1
0
def order_bread(request, order_id):
    order = get_object_or_404(Order, id=order_id)
    if request.method == 'POST':
        if 'bread' in request.POST and request.POST['bread'] == 'Update':
            bread_form = BreadForm(request.POST)
            if bread_form.is_valid():
                bread_form.process(order)
                url = '/order/bread/' + str(order_id)
                return redirect(url)
        else:
            bread_form = BreadForm()

        if 'customer' in request.POST and request.POST['customer'] == 'Update':
            customer_form = CustomerForm(request.POST)
            if customer_form.is_valid():
                customer_form.process(order)
                url = '/order/pizza/' + str(order_id)
                return redirect(url)
        else:
            customer_form = CustomerForm()

    else:
        bread_form = BreadForm()
        customer_form = CustomerForm()

    return list.ListView(request,
                         queryset=Order.objects.filter(id=order_id),
                         template_name="order/bread.html",
                         template_object_name="order",
                         extra_context={
                             "bread_form": bread_form,
                             "customer_form": customer_form,
                             "order": order,
                         })
示例#2
0
    def post(self, request):
        generic_error_response = self.render_json_response({
            'status': 'error',
            'errors': {
                'non_field_errors': 'Invalid submission.'
            }
        })
        try:
            data = json.loads(request.POST.get('data'))
            tip = data.get('tip')
            items = data.get('items')
            first_name = data.get('first_name')
            last_name = data.get('last_name')
            phone_number = data.get('phone_number')
            cc_number = data.get('crimsoncash')
        except (IndexError, ValueError):
            return generic_error_response

        if any(i is None for i in
               [tip, items, first_name, last_name, phone_number, cc_number]):
            return generic_error_response

        order_form = OrderForm(data={'tip': tip})
        if not order_form.is_valid():
            return self.render_json_response({
                'status': 'error',
                'errors': order_form.errors
            })
        else:
            tip = order_form.cleaned_data.get('tip')

        order_items = []
        for pk, quantity in items.iteritems():
            order_item_form = OrderItemForm(data={
                'item': pk,
                'quantity': quantity
            })
            if not order_item_form.is_valid():
                return self.render_json_response({
                    'status':
                    'error',
                    'errors':
                    order_item_form.errors
                })
            else:
                quantity = order_item_form.cleaned_data.get('quantity')
                item = order_item_form.cleaned_data.get('item')
                if quantity > 0:
                    order_items.append((item, quantity))

        # add the phone number country code if necessary
        if not phone_number[:1] == '+' and not phone_number[:1] == '1':
            phone_number = u'+1{}'.format(phone_number)
        elif not phone_number[:1] == '+':
            phone_number = u'+{}'.format(phone_number)

        customer_form = CustomerForm(
            data={
                'first_name': first_name,
                'last_name': last_name,
                'phone': phone_number,
                'cc_number': cc_number
            })
        if not customer_form.is_valid():
            return self.render_json_response({
                'status': 'error',
                'errors': customer_form.errors
            })

        # if they submitted an order with all quantities = 0
        if not order_items:
            return generic_error_response

        first_name = customer_form.cleaned_data.get('first_name')
        last_name = customer_form.cleaned_data.get('last_name')
        phone_number = customer_form.cleaned_data.get('phone')
        cc_number = customer_form.cleaned_data.get('cc_number')

        customer, created = Customer.objects.get_or_create(
            first_name=first_name,
            last_name=last_name,
            phone=phone_number,
            cc_number=cc_number,
        )

        order = Order.objects.create(
            customer=customer,
            tip=tip,
        )

        m = hashlib.md5()
        m.update('{}{}'.format(order.customer.last_name, order.pk))
        key = m.hexdigest()
        order.key = key
        order.save()

        for item, quantity in order_items:
            order.add_item(item, quantity)

        return self.render_json_response({
            'status': 'success',
            'key': order.key
        })