Esempio n. 1
0
def order_create(request):
    if request.method == 'POST':
        form = OrderCreateForm(user=request.user, data=request.POST)
        if form.is_valid():
            order_new = None
            try:
                order_new = form.save(request=request)
            except Order.LockOrderError:
                print('LockOrderError')
                person = get_person(request.user)
                if person:
                    today = datetime.date.today()
                    begin_datetime = datetime.datetime(today.year, today.month, today.day, 0, 0, 0) \
                        .astimezone(tz=pytz.timezone(settings.TIME_ZONE))
                    end_datetime = datetime.datetime(today.year, today.month, today.day, 23, 59, 59) \
                        .astimezone(tz=pytz.timezone(settings.TIME_ZONE))
                    set_orders = Order.objects.filter(person=person, date__range=(begin_datetime, end_datetime)) \
                        .order_by('-id')
                    if len(set_orders) > 0:
                        order_new = set_orders[0]
            if order_new:
                return render(request, 'orders/order.html', {'order': order_new, 'created': True})
            else:
                return render(request, 'orders/create.html', {'form': form})
    else:
        form = OrderCreateForm(user=request.user, initial={
            'delivery': datetime.datetime.now().astimezone(tz=pytz.timezone(settings.TIME_ZONE)) + datetime.timedelta(
                days=1), 'receiver_bills': str(request.user.email)
            }
                               )

    return render(request, 'orders/create.html', {'form': form})
Esempio n. 2
0
 def save(self):
     self.session[settings.CART_SESSION_ID] = self.cart
     self.session.modified = True
     self.price_exchange = False
     person = get_person(self.user)
     if person:
         person.lock = False
Esempio n. 3
0
def our_api(request):
    person = get_person(request.user)
    customer = get_customer(request.user)
    uid = ''
    if person:
        if person.uid in ('','xxx'):
            person.create_uid()
        uid = person.uid
    if not customer:
        files = []
    else:
        files = customer.get_files()
        for file in files:
            type_file = file['type']
            file['url'] = f'http://b2b.santex.su/api/v1/outside/?uid={uid}&type={type_file}'
    return render(request, 'files/files_API.html', {'uid': uid, 'files': files})
Esempio n. 4
0
    def get(request):

        current_customer = get_customer(request.user)
        current_customer_id = None
        current_customer_price_id = 0
        current_customer_suffix = ''
        if current_customer:
            current_customer_id = current_customer.id
            current_customer_price_id = current_customer.price.id
            current_customer_suffix = current_customer.suffix

        if current_customer_id is None:
            return Response({'error': 'Не удалось авторизовать пользователя'},
                            status=HTTP_403_FORBIDDEN)

        current_person = get_person(request.user)
        current_person_id = 0
        if current_person:
            current_person_id = current_person.id

        param = [current_customer_id]

        filter_code = ''

        for key, value in request.GET.items():
            if key.startswith('filter_code'):
                filter_code += f"{'' if filter_code == '' else ','}{value}"

        filter_article = ''

        for key, value in request.GET.items():
            if key.startswith('filter_article'):
                filter_article += f"{'' if filter_article == '' else ','}{value}"

        filter_barcode = ''

        for key, value in request.GET.items():
            if key.startswith('filter_barcode'):
                filter_barcode += f"{'' if filter_barcode == '' else ','}{value}"

        filter_brand = ''

        for key, value in request.GET.items():
            if key.startswith('filter_brand'):
                filter_brand += f"{'' if filter_brand == '' else ','}{value}"

        filter_quantity = request.GET.get('filter_quantity', '')

        str_filter_code = ' TRUE '
        if filter_code != '':
            param += [
                list(map(lambda x: x.upper(), filter_code.split(','))),
            ]
            str_filter_code = 'UPPER(_product.code::text) = ANY(%s)'

        str_filter_article = ' TRUE '
        if filter_article != '':
            param += [
                list(map(lambda x: x.upper(), filter_article.split(','))),
            ]
            str_filter_article = 'UPPER(_product.code_brand::text) = ANY(%s)'

        str_filter_barcode = ' TRUE '
        if filter_barcode != '':
            param += [
                list(map(lambda x: x.upper(), filter_barcode.split(','))),
            ]
            str_filter_barcode = 'UPPER(_product.barcode::text) = ANY(%s)'

        str_filter_brand = ' TRUE '
        if filter_brand != '':
            param += [
                list(map(lambda x: x.upper(), filter_brand.split(','))),
            ]
            str_filter_brand = 'UPPER(_brand.name::text) = ANY(%s)'

        str_filter_quantity = ' TRUE '
        if filter_quantity != '' and filter_quantity.upper() == 'YES':
            str_filter_quantity = 'COALESCE(_inventories.quantity, 0) > 0'

        queryset = Product.objects.raw(
            f"""WITH result AS (
                SELECT _product.id AS id,
                        _product.code AS code_,
                        _product.guid AS guid_,
                        _product.code_brand AS article_,
                        _product.barcode AS barcode_,
                        _product.name AS name_,
                        _product.matrix AS matrix_,
                        _product.image AS image,
                        COALESCE(_brand.name, '') AS brand_name_,
                        COALESCE(_customersprices.discount, COALESCE(_prices.value, 0)) AS price,
                        COALESCE(_customersprices_cur.name, COALESCE(_prices_cur.name, '')) AS currency,
                        COALESCE(_prices.rrp, 0) AS price_rrp,
                        SUM(COALESCE(_inventories.quantity, 0)) AS quantity
                    FROM san_site_product _product
                        LEFT JOIN san_site_prices _prices 
                                ON _product.id = _prices.product_id AND _prices.price_id = {current_customer_price_id}
                            LEFT JOIN san_site_currency _prices_cur ON _prices.currency_id = _prices_cur.id
                        LEFT JOIN san_site_customersprices{current_customer_suffix} _customersprices 
                            ON _customersprices.customer_id = %s AND _product.id = _customersprices.product_id  
                                LEFT JOIN san_site_currency _customersprices_cur 
                                    ON _customersprices.currency_id = _customersprices_cur.id
                        LEFT JOIN san_site_personstores _personstores ON _personstores.person_id = {current_person_id}
                            LEFT JOIN san_site_inventories _inventories 
                                ON _product.id = _inventories.product_id
                                    AND _personstores.store_id = _inventories.store_id
                        LEFT JOIN san_site_brand _brand ON _product.brand_id = _brand.id
                    WHERE _product.is_deleted = FALSE
                        AND {str_filter_code}
                        AND {str_filter_article}
                        AND {str_filter_brand}
                        AND {str_filter_barcode}
                        AND {str_filter_quantity}
                    GROUP BY _product.id,
                        _product.code,
                        _product.code_brand,
                        _product.barcode,
                        _product.name,
                        _product.matrix,
                        _product.image,
                        COALESCE(_brand.name, ''),
                        COALESCE(_prices.value, 0),
                        COALESCE(_customersprices.discount, COALESCE(_prices.value, 0)),
                        COALESCE(_customersprices_cur.name, COALESCE(_prices_cur.name, '')),
                        COALESCE(_prices.rrp, 0)
                    )
                SELECT *
                FROM result
                ORDER BY result.code_;""", param)
        serializer = ProductSerializer(queryset, many=True)
        return Response(serializer.data, status=HTTP_200_OK)