示例#1
0
 def test_order_make(self):
     order_test = Order(client_phone=8432424,
                        type=Order.TYPE_DINNER_WAGON,
                        state=Order.STATE_DONE,
                        order_date=date(2014, 12, 12),
                        execute_date=datetime(2014, 12, 12).date())
     order_test.make()
     self.assertEqual(order_test.state.__str__(), '4', 'State of order is not equal')
     self.assertEqual(order_test.type, Order.TYPE_DINNER_WAGON)
示例#2
0
def get_order_form(request, establishment_id, order_type):
    """Возвращает на страницу соответствующую форму, тип зависит от order_type:
    0 - заказ столика
    1 - заказ самовывоза
    2 - заказ доставки"""
    # проверям, нужно ли вообще пользователю показывать форму (вдруг он ничего не заказал?)
    # проверяем, есть ли в сессии ключи, соответствующие блюдам выбранного заведения
    establishment_dishes = Dish.objects.filter(establishmentdish__establishment__id=establishment_id)
    is_valid_request = False
    for key in request.session.keys():
        if key != 'cart_price':
            if establishment_dishes.filter(id=key).first() is not None:
                is_valid_request = True
                break

    if is_valid_request:
        order_types = Order.ORDER_TYPE
        if order_type == '1':
            if request.method == 'POST':
                form = PickUpForm(establishment_id, request.POST)
                if form.is_valid():
                    order_client_phone = form.cleaned_data['phone']
                    order_order_type = order_type
                    order_execute_date = form.cleaned_data['date']
                    order_execute_time = form.cleaned_data['time']
                    order_contact_account = Employee.objects.filter(
                        establishment__id=establishment_id
                    ).first()
                    order_branch_id = int(request.POST.get('address'))
                    order_establishment_branch = EstablishmentBranch.objects.filter(
                        id=order_branch_id
                    ).first()
                    new_order = Order(
                        client_phone=order_client_phone,
                        type=order_order_type,
                        execute_date=order_execute_date,
                        execute_time=order_execute_time,
                        contact_account=order_contact_account,
                        establishment_branch=order_establishment_branch
                    )
                    new_order.save()
                    for key in request.session.keys():
                        if key != 'cart_price':
                            row = OrdersCartRow(
                                establishment_dish=EstablishmentDish.objects.get(dish__id=key),
                                dishes_count=request.session[key],
                                order=new_order,
                            )
                            row.save()
                    new_order.make(type='pickup')
                    new_order.save(update_fields=['type', 'state'])

                    # удаление из сессии оформленных в заказе блюд и корзины, при необходимости
                    keys_for_delete = []
                    for key in request.session.keys():
                        if key != 'cart_price':
                            if establishment_dishes.get(id=key) is not None:
                                keys_for_delete.append(key)
                    for key in keys_for_delete:
                        del request.session[key]
                    is_cart_empty = True
                    for key in request.session.keys():
                        if key != 'cart_price':
                            is_cart_empty = False
                    if is_cart_empty:
                        del request.session['cart_price']

                    establishment = Establishment.objects.get(id=establishment_id)
                    return render(
                        request,
                        'orders/order_created.html',
                        {
                            'order_type': order_type,
                            'establishment_id': establishment_id,
                            'establishment_name': establishment.name,
                            'establishment_email': establishment.email,
                            'establishment_branch_order_phone': order_establishment_branch.order_phone_number,
                            'establishment_branch_help_phone': order_establishment_branch.help_phone_number
                        }
                    )
                else:
                    if request.POST.get('address_changed') == '1':
                        show_errors = 0
                    else:
                        show_errors = 1
            else:
                form = PickUpForm(establishment_id)
                show_errors = 0
            return render(
                request,
                'orders/make_order_form.html',
                {
                    # show_form определяет, нужно ли показывать форму пользователю
                    'show_form': 1,
                    'show_errors': show_errors,
                    'establishment_id': establishment_id,
                    'form': form,
                    'order_types_list': order_types,
                    'current_order_type': order_type
                }
            )
        elif order_type == '2':
            if request.method == 'POST':
                form = DeliveryForm(request.POST)
                if form.is_valid():
                    order_client_phone = form.cleaned_data['phone']
                    order_order_type = order_type
                    order_execute_date = form.cleaned_data['date']
                    order_execute_time = form.cleaned_data['time']
                    order_contact_account = Employee.objects.filter(
                        establishment__id=establishment_id
                    ).first()
                    order_delivery_address = request.POST.get('address')
                    new_order = Order(
                        client_phone=order_client_phone,
                        type=order_order_type,
                        execute_date=order_execute_date,
                        execute_time=order_execute_time,
                        contact_account=order_contact_account,
                        delivery_address=order_delivery_address
                    )
                    new_order.save()
                    for key in request.session.keys():
                        if key != 'cart_price':
                            row = OrdersCartRow(
                                establishment_dish=EstablishmentDish.objects.get(dish__id=key),
                                dishes_count=request.session[key],
                                order=new_order,
                            )
                            row.save()
                    new_order.make(type='delivery')
                    new_order.save(update_fields=['type', 'state'])

                    # удаление из сессии оформленных в заказе блюд и корзины, при необходимости
                    keys_for_delete = []
                    for key in request.session.keys():
                        if key != 'cart_price':
                            if establishment_dishes.get(id=key) is not None:
                                keys_for_delete.append(key)
                    for key in keys_for_delete:
                        del request.session[key]
                    is_cart_empty = True
                    for key in request.session.keys():
                        if key != 'cart_price':
                            is_cart_empty = False
                    if is_cart_empty:
                        del request.session['cart_price']

                    establishment = Establishment.objects.get(id=establishment_id)
                    return render(
                        request,
                        'orders/order_created.html',
                        {
                            'order_type': order_type,
                            'establishment_id': establishment_id,
                            'establishment_name': establishment.name,
                            'establishment_email': establishment.email,
                            'establishment_branch_order_phone': '',
                            'establishment_branch_help_phone': ''
                        }
                    )
            else:
                form = DeliveryForm()
            show_errors = 1
            return render(
                request,
                'orders/make_order_form.html',
                {
                    # show_form определяет, нужно ли показывать форму пользователю
                    'show_form': 1,
                    'show_errors': show_errors,
                    'establishment_id': establishment_id,
                    'form': form,
                    'order_types_list': order_types,
                    'current_order_type': order_type
                }
            )
        else:
            if request.method == 'POST':
                if request.POST.get('address_changed') == '1':
                    # выб выбран другой филиал заведения
                    branch_id = request.POST.get('address')
                    form = TableForm(establishment_id, branch_id, -1, -1, request.POST)
                    show_errors = 0
                    show_custom_date_error = 0
                elif request.POST.get('show_tables') == '1':
                    # была нажата кнопка показа столиков
                    branch_id = request.POST.get('address')
                    hall_type = request.POST.get('hall')
                    order_date_str = request.POST.get('date')
                    try:
                        time_structure = time.strptime(order_date_str, '%Y-%m-%d')
                        order_date = datetime(time_structure.tm_year, time_structure.tm_mon, time_structure.tm_mday)
                        border_date = datetime(datetime.now().year, datetime.now().month, datetime.now().day)
                        if order_date < border_date:
                            form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                            show_errors = 0
                            show_custom_date_error = 1
                        else:
                            form = TableForm(establishment_id, branch_id, hall_type, order_date, request.POST)
                            show_errors = 0
                            show_custom_date_error = 0
                    except ValueError:
                        form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                        show_errors = 1
                        show_custom_date_error = 0
                    except TypeError:
                        try:
                            time_structure = time.strptime(order_date_str, '%Y-%m-%d')
                            order_date = datetime(time_structure.tm_year, time_structure.tm_mon, time_structure.tm_mday)
                            border_date = datetime(datetime.now().year, datetime.now().month, datetime.now().day)
                            if order_date < border_date:
                                form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                                show_errors = 0
                                show_custom_date_error = 1
                            else:
                                form = TableForm(establishment_id, branch_id, hall_type, order_date, request.POST)
                                show_errors = 0
                                show_custom_date_error = 0
                        except ValueError:
                            form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                            show_errors = 1
                            show_custom_date_error = 0
                else:
                    branch_id = request.POST.get('address')
                    hall_type = request.POST.get('hall')
                    order_date_str = request.POST.get('date')
                    try:
                        time_structure = time.strptime(order_date_str, '%Y-%m-%d')
                        order_date = datetime(time_structure.tm_year, time_structure.tm_mon, time_structure.tm_mday)
                        border_date = datetime(datetime.now().year, datetime.now().month, datetime.now().day)
                        if order_date < border_date:
                            form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                        else:
                            form = TableForm(establishment_id, branch_id, hall_type, order_date, request.POST)
                    except ValueError:
                        form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                    except TypeError:
                        try:
                            time_structure = time.strptime(order_date_str, '%Y-%m-%d')
                            order_date = datetime(time_structure.tm_year, time_structure.tm_mon, time_structure.tm_mday)
                            border_date = datetime(datetime.now().year, datetime.now().month, datetime.now().day)
                            if order_date < border_date:
                                form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                            else:
                                form = TableForm(establishment_id, branch_id, hall_type, order_date, request.POST)
                        except ValueError:
                            form = TableForm(establishment_id, branch_id, hall_type, -1, request.POST)
                    if form.is_valid():
                        # создание и запись в БД заказа
                        order_client_phone = form.cleaned_data['phone']
                        order_order_type = order_type
                        order_execute_date = form.cleaned_data['date']
                        order_execute_time = form.cleaned_data['time']
                        order_contact_account = Employee.objects.filter(
                            establishment__id=establishment_id
                        ).first()
                        order_branch_id = int(request.POST.get('address'))
                        order_establishment_branch = EstablishmentBranch.objects.filter(
                            id=order_branch_id
                        ).first()
                        order_table_seats = int(request.POST.get('table'))
                        order_hall_type = request.POST.get('hall')
                        order_dinner_wagon = DinnerWagon.objects.filter(
                            seats=order_table_seats,
                            hall__type=order_hall_type,
                            hall__branch=order_establishment_branch
                        ).first()
                        new_order = Order(
                            client_phone=order_client_phone,
                            type=order_order_type,
                            execute_date=order_execute_date,
                            execute_time=order_execute_time,
                            contact_account=order_contact_account,
                            establishment_branch=order_establishment_branch,
                            dinner_wagon=order_dinner_wagon
                        )
                        new_order.save()
                        for key in request.session.keys():
                            if key != 'cart_price':
                                row = OrdersCartRow(
                                    establishment_dish=EstablishmentDish.objects.get(dish__id=key),
                                    dishes_count=request.session[key],
                                    order=new_order,
                                )
                                row.save()
                        new_order.make(type='table')
                        new_order.save(update_fields=['type', 'state'])

                        # удаление из сессии оформленных в заказе блюд и корзины, при необходимости
                        keys_for_delete = []
                        for key in request.session.keys():
                            if key != 'cart_price':
                                if establishment_dishes.get(id=key) is not None:
                                    keys_for_delete.append(key)
                        for key in keys_for_delete:
                            del request.session[key]
                        is_cart_empty = True
                        for key in request.session.keys():
                            if key != 'cart_price':
                                is_cart_empty = False
                        if is_cart_empty:
                            del request.session['cart_price']

                        establishment = Establishment.objects.get(id=establishment_id)
                        return render(
                            request,
                            'orders/order_created.html',
                            {
                                'order_type': order_type,
                                'establishment_id': establishment_id,
                                'establishment_name': establishment.name,
                                'establishment_email': establishment.email,
                                'establishment_branch_order_phone': order_establishment_branch.order_phone_number,
                                'establishment_branch_help_phone': order_establishment_branch.help_phone_number
                            }
                        )
                    else:
                        show_errors = 1
                        show_custom_date_error = 0
            else:
                form = TableForm(establishment_id, -1, -1, -1)
                show_errors = 0
                show_custom_date_error = 0
            return render(
                request,
                'orders/make_order_form.html',
                {
                    # show_form определяет, нужно ли показывать форму пользователю
                    'show_form': 1,
                    'show_errors': show_errors,
                    'show_custom_date_error': show_custom_date_error,
                    'establishment_id': establishment_id,
                    'form': form,
                    'order_types_list': order_types,
                    'current_order_type': order_type
                }
            )
    else:
        show_errors = 0
        return render(
            request,
            'orders/make_order_form.html',
            {
                # show_form определяет, нужно ли показывать форму пользователю
                'show_form': 0,
                'show_errors': show_errors,
                'establishment_id': establishment_id
            }
        )