Beispiel #1
0
def create_user():
    for Model in (Role, User, UserRoles, Item, Customer, Cart, CartItem):
        Model.drop_table(fail_silently=True)
        Model.create_table(fail_silently=True)
    user_datastore.create_user(
        email='*****@*****.**',
        password='******'
    )
    item1 = Item(name='notebook', stock=300, price=500)
    item1.save()
    item2 = Item(name='TV', stock=250, price=200)
    item2.save()
    item3 = Item(name='flash', stock=950, price=10)
    item3.save()
    item4 = Item(name='smartphone', stock=455, price=150)
    item4.save()
    item5 = Item(name='camera', stock=50, price=550)
    item5.save()
    customer = Customer(name='John', birthday=date(1990, 1, 15))
    customer.save()
    cart1 = Cart(customer=customer.id)
    cart1.save()
    cartitem = CartItem(cart=cart1, item=item1, quantity=3)
    cartitem.save()
    customer = Customer(name='Olivier', birthday=date(1995, 2, 22))
    customer.save()
    cart2 = Cart(customer=customer.id)
    cart2.save()
    cartitem = CartItem(cart=cart2, item=item5, quantity=45)
    cartitem.save()
Beispiel #2
0
def cart_view():
    if request.method == 'POST':
        cart = Cart()

        # check for malformed post
        try:
            products_data = json.loads(request.data, parse_int=int)
        except JSONDecodeError:
            return redirect(url_for('product_list'))

        # so we wont create actual empty Cart in db for every cart/ request when cart is empty
        if products_data.get('id') == '' and not products_data['products']:
            return url_for('cart_view', cart_id='0')

        products = Product.query.filter(
            Product.id.in_([*products_data['products']])).all()
        prod_dict = {int(product.id): product for product in products}
        for product_id, quantity in products_data['products'].items():
            cart.cart_products.append(
                CartProduct(prod_dict[int(product_id)], quantity=quantity))
        db.session.add(cart)
        db.session.commit()
        return url_for('cart_view', cart_id=cart.id)

    elif request.method == 'GET':
        if not request.args.get('cart_id'):
            return redirect(url_for('product_list'))

        cart = Cart()
        cart_id = request.args.get('cart_id')
        if cart_id != '0':
            cart = Cart.query.get_or_404(cart_id)
        return render_template('cart.html', cart=cart)
    def setUp(self):
        # set up the test DB
        self.db = tested_db
        self.db.create_all()
        self.db.session.add(Cart(id=1, user_id=1, product_id=1, quantity=100))
        self.db.session.add(Cart(id=2, user_id=2, product_id=2, quantity=200))
        self.db.session.commit()

        self.app = tested_app.test_client()
def add_to_cart(user, product_id, params):
    if not params:
        params = {}
    amount = params.get("amount", 1)
    cart_item = Cart.query.filter_by(user_id=user["id"], product_id=product_id)

    if not cart_item.count():
        if amount == 0:
            return api.error_400("There is no product by that ID.")

        cart_item = Cart(product_id, user["id"], amount)
        db.session.add(cart_item)

    else:
        cart_item = cart_item.one()

        if amount > 0:
            cart_item.amount = amount
        else:
            db.session.delete(cart_item)

    try:
        db.session.commit()
    except sqlalchemy.exc.IntegrityError:
        return api.error_400("There is no product by that ID.")

    return api.success()
def add_cart():
    try:
        request_data = request.get_json()
        u_id = request_data["u_id"]
        g_id = request_data["goods_id"]
    except:
        return jsonify({
            'status': 400,
            'msg': '请求参数错误'
        })
    try:
        cart = db.session.query(Cart).filter(Cart.u_id == u_id, Cart.goods_id == g_id)
        if cart.count() == 0:
            g_num = 1
            is_select = False
            new_cart = Cart(u_id=u_id, goods_id=g_id, c_goods_num=g_num, c_is_selected=is_select)
            db.session.add(new_cart)
            db.session.commit()
        else:
            current_cart = cart.first()
            current_cart.c_goods_num += 1
            db.session.commit()
        return jsonify({
            'status': 200,
            'msg': '添加购物车成功'
        })
    except:
        return jsonify({
            'status': 300,
            'msg': "添加购物车失败"
        })
Beispiel #6
0
    def add_to_cart(jwt):

        body = request.get_json()
        try:
            validate_required_fields_in_new_cart(body)

            cart = Cart(
                customer_id=body.get('customer_id', None),
                product_id=body.get('product_id', None),
                amount=body.get('amount', None),
                product_price=body.get('product_price', None),
            )
            cart.insert()

            return jsonify({
                'success': True,
                'created': cart.id,
            })

        except ValueError:
            logging.exception("message")
            db.session.rollback()
            abort(422)

        finally:
            db.session.close()
Beispiel #7
0
def start(bot, update, user_data):
    uid = update.message.from_user.id
    bot.sendChatAction(uid, action=typing)
    # btrack(update.message, event_name="start-test-inline")
    # if the user is admin
    if uid == owner_id:
        text = texts.welcome_admin
        keyboard = main_kbd_admin
        next_state = "MAIN_MENU_A"
    # if the user is an ordinary user (is not admin)
    else:
        # if user is not saved in user_data dict
        if 'user' not in user_data: # useless if statement? now we don't save user in the dict
            # and the user is not saved in DB
            if session.query(User.tuid).filter_by(tuid=uid).scalar() is None:
                # we should save the user in user_data dict
                from_user = update.message.from_user
                user = User(tuid=uid, first_name=from_user.first_name, last_name=from_user.last_name)
                # also save the user in DB
                session.add(user)
                session.commit()
            # create an empty cart for the user
            user_data["cart"] = Cart()
            user_data["prev_delivery_addr"] = []
            # welcome, pathetic user
            text = texts.welcome_user
        # if user is saved in user_data dict we have nothing to do but to welcome him again
        else:
            text = texts.welcome_again_user
        keyboard = main_kbd_user
        next_state = "MAIN_MENU_U"
    return ans(text=text, keyboard=keyboard, next_state=next_state)(bot, update)
Beispiel #8
0
def addcart():
    data = request.form
    product = Product.query.filter_by(id=int(data['product_id'])).first()
    product_price = int(data['quantity']) * product.price
    cart = Cart(user_id=current_user.id,
                product_id=int(data['product_id']),
                quantity=int(data['quantity']),
                price=product_price)
    if cart.quantity < 0:
        return {}

    product = Cart.query.filter_by(product_id=cart.product_id,
                                   user_id=current_user.id).first()
    if product:
        product.quantity += cart.quantity
        product.price += product_price

        db.session.commit()
        return {}

    if cart.quantity != 0:
        db.session.add(cart)
        db.session.commit()

    return {}
Beispiel #9
0
    def create(qty, product_id, username, cart_number) -> dict:
        """ Create Cart """
        result: dict = {}
        try:
            data_stock = Stock.query.filter_by(product_id=product_id).first()
            if (data_stock is not None and data_stock.stock > 0):
                if ((data_stock.stock - qty) >= 0):
                    data = Cart(qty, product_id, username, 'Stock Available',
                                cart_number)
                    data.save()
                    result = {
                        'product_id': data.product_id,
                        'qty': data.qty,
                        'username': data.username,
                        'date_created': str(data.date_created),
                    }
                else:
                    result = {'message': 'Stock is not Enough'}
            else:
                result = {'message': 'Stock Unavailable'}
        except IntegrityError:
            Cart.rollback()
            raise ResourceExists('file_name already exists')

        return result
Beispiel #10
0
def register(bot, update, args):
    # Function to register new customer and define Cart # for further shopping
    # In addition, it finds already registered Customer and return their Cart #
    try:
        name = args[0]
        birthday = args[1]
        if Customer.select().where(
                Customer.name == name) and Customer.select().where(
                    Customer.birthday == birthday):
            cart_id = Customer.get(Customer.name == name,
                                   Customer.birthday == birthday).id
            bot.send_message(
                chat_id=update.message.chat_id,
                text='Dear, {}! You are already registered in our shop =) '
                'Glad to see you again! '
                'Please use Your Cart #: {} for all purchases.'
                '\nIf you need help, please use /guidance'.format(
                    name, cart_id))
        else:
            customer = Customer(name=name, birthday=birthday)
            customer.save()
            cart = Cart(customer=customer.id)
            cart.save()
            bot.send_message(
                chat_id=update.message.chat_id,
                text='Congratulations, {}! You are registered and '
                'can continue shopping :) '
                'Please use Your Cart #: {} for all purchases.'
                '\nIf you need help, please use /guidance'.format(
                    name, cart.id))
    except IndexError:
        bot.send_message(chat_id=update.message.chat_id,
                         text='Please use proper format: '
                         'Your name Your birthday (YEAR-MM-DD). ')
Beispiel #11
0
def cart(book_name):
    global user_name
    book_id = Book.get_id_by_username(book_name)
    author = Book.get_author_by_username(book_name)
    price = Book.get_price_by_username(book_name)
    genre = Book.get_genre_by_username(book_name)
    edition = Book.get_edition_by_username(book_name)
    Session = sessionmaker(bind=engine)
    session = Session()
    customer_id = Customer.get_id_by_username(user_name)

    temp = 0
    cart = session.query(Cart).filter(Cart.customer_id == customer_id).all()
    for book in cart:
        print(book.book_id)
        if book.book_id == book_id:
            temp += 1
    if temp > 0:
        flash('This book is already in your cart!!')
        return redirect(url_for('search'))
    cart = Cart(customer_id=customer_id, book_id=book_id, book_name=book_name, author=author,
                price=price, genre=genre, book_edition=edition)
    session.add(cart)
    session.commit()
    res = session.query(Cart).filter(Cart.customer_id == customer_id).all()
    session.flush()
    session.close()
    return render_template('shopping_cart.html', res=res, user_logged=user_logged, user_name=user_name)
Beispiel #12
0
def index(page=1):
    if request.method == 'GET':
        goods = Goods.query.filter().paginate(page, config.POSTS_PER_PAGE,
                                              False)
        return render_template('index.html', goods=goods)
    elif request.method == 'POST':
        user_account = session.get('user_account')
        if user_account:
            user = Users.query.filter(Users.account == user_account).first()
            user_id = user.id
            good_id = request.form.get('good_id')
            check_exist = Cart.query.filter(Cart.user_id == user_id).filter(
                Cart.goods_id == good_id).first()
            if check_exist:
                check_exist.goods_num = check_exist.goods_num + 1
                db.session.commit()
            else:
                new_cart = Cart(user_id=user_id, goods_id=good_id, goods_num=1)
                db.session.add(new_cart)
                db.session.commit()
            goods = Goods.query.filter().paginate(page, config.POSTS_PER_PAGE,
                                                  False)
            return render_template('index.html',
                                   goods=goods,
                                   status=1,
                                   color='success',
                                   alert='Add to cart successfully!')
        else:
            return redirect(url_for('login'))

    goods = Goods.query.filter().paginate(page, config.POSTS_PER_PAGE, False)
    return render_template('index.html', goods=goods)
Beispiel #13
0
def buyProductView(request):
    user = request.user
    if user.profile.corporate is False:
        category = request.GET.get('category', '')
        products = Product.objects.filter(p_type=category)
        context_dict = {'products': products}
        # user is adding a product to cart
        if request.GET.get('add', ''):
            django_id = request.GET.get('add', '')
            if not Cart.objects.filter(
                    user=user,
                    product=Product.objects.filter(id=django_id)).exists():
                cart = Cart(user=user,
                            product=Product.objects.get(id=django_id),
                            quantity=1)
                cart.save()
        full_cart = Cart.objects.filter(user=user).distinct()
        categories = Product.objects.order_by().values_list(
            'p_type').distinct()
        categories_string = [x[0] for x in categories]
        context_dict['full_cart'] = full_cart
        context_dict['categories_string'] = categories_string
        return render(request, 'users/shop/buy.html', context_dict)

    else:
        return redirect('/')
Beispiel #14
0
def addCart():
    #返回参数结构
    responseData = {"status": 0, "message": '', "result": {}}
    goodsId = request.form.get("goodsId")
    goodsPrice = request.form.get("goodsPrice")
    goodsNumber = request.form.get("goodsNumber")
    goodsStyle = request.form.get("goodsStyle")
    goodsSize = request.form.get("goodsSize")
    userId = '1111'
    if not (goodsId and goodsPrice and goodsNumber and goodsStyle
            and goodsSize):
        responseData["status"] = 1
        responseData["message"] = "缺少必要的业务参数!"
    else:
        goods = Cart(goodsId=goodsId,
                     goodsPrice=goodsPrice,
                     goodsNumber=goodsNumber,
                     goodsStyle=goodsStyle,
                     goodsSize=goodsSize,
                     userId=userId)
        db.session.add(goods)
        db.session.commit()
        responseData["status"] = 0
        responseData["message"] = "加入购物车成功!"

    # 返回数据
    return jsonify(responseData)
Beispiel #15
0
def order_confirm(bot, update, user_data):
    uid = update.message.from_user.id
    answer = update.message.text
    keyboard = main_kbd_user
    next_state = "MAIN_MENU_U"
    # delivery:
    if "delivery_addr" in user_data:
        dtime = correct_time(answer)
        if not dtime:
            text = texts.wrong_time_format
            keyboard = None
            next_state = None
        else:
            user_data["delivery_time"] = dtime
            addr = user_data["delivery_addr"]
            ddate = user_data["delivery_date"]
            # dtime = user_data["delivery_time"]
            cart = user_data["cart"]
            order_json = cart.json_repr()
            new_order = Order(addr=addr,
                              ddate=ddate,
                              dtime=dtime,
                              order=order_json)
            user = session.query(User).filter_by(tuid=uid).scalar()
            user.uorders.append(new_order)
            session.commit()
            # TODO: save delivery_addr and suggest it next time
            user_data["prev_delivery_addr"].append(addr)
            user_data["cart"] = Cart()
            del user_data["delivery_addr"]
            del user_data["delivery_date"]
            del user_data["delivery_time"]
            text = texts.delivery_confirmation % (addr, ddate, dtime,
                                                  cart.total)
    # pickup:
    else:
        pickup_point = answer
        cart = user_data["cart"]
        order_json = cart.json_repr()
        new_order = Order(pickup=pickup_point, order=order_json)
        user = session.query(User).filter_by(tuid=uid).scalar()
        user.uorders.append(new_order)
        session.commit()
        text = texts.pickup_confirmation % (answer, cart.total)
        user_data["cart"] = Cart()
    return ans(text=text, keyboard=keyboard, next_state=next_state)(bot,
                                                                    update)
Beispiel #16
0
def view_cart(request):
    cart = request.session.get("cart", None)
    if not cart:
        cart = Cart()
        request.session["cart"] = cart
    return render_to_response("view_cart.html",
                              locals(),
                              context_instance=RequestContext(request))
Beispiel #17
0
 def test_update_cart(self):
     user = self._create_user_in_database()
     cart = Cart(self.request)
     cart.new(self.request)
     cart.add(product=user, quantity=3, unit_price=100)
     cart.update(product=user, quantity=2, unit_price=200)
     self.assertEquals(cart.summary(), 400)
     self.assertEquals(cart.count(), 2)
Beispiel #18
0
def add2Cart(request, cuisineID):
    # FIXME: 如果餐厅在“打烊”状态,应该无法添加到购物车,返回错误
    cart = request.session.get('cart', None)
    if cart is None:
        cart = Cart()
    res = {'size': cart.add(int(cuisineID))}
    request.session['cart'] = cart
    return HttpResponse(json.dumps(res))
Beispiel #19
0
def test_cart(products):
    print('Received products are {0}'.format(products))
    try:
        products = products.split(',')
        products = [eval(product) for product in products]
    except Exception as e:
        print('Unable to decode products, please try again')
    my_cart = Cart(products=products)
    Cart.calculate_total(my_cart, offers)
Beispiel #20
0
def addToCart():
    user = User.query.get(request.data['id'])
    data = request.json
    newProductInCart = Cart(user_id=user.id,
                            product_id=data['product_id'],
                            product_details_id=data['product_details_id'],
                            quantity=data['quantity'])
    db.session.add(newProductInCart)
    db.session.commit()
    return jsonify({'message': 'item has been added to the cart'})
Beispiel #21
0
 def _create_cart_in_database(self, creation_date=datetime.datetime.now(), 
         checked_out=False):
     """
         Helper function so I don't repeat myself
     """
     cart = Cart()
     cart.creation_date = creation_date
     cart.checked_out = False
     cart.save()
     return cart
Beispiel #22
0
def add_to_cart(request, id):
    product = Product.objects.get(id=id)
    cart = request.session.get("cart", None)
    if not cart:
        cart = Cart()
        request.session["cart"] = cart
    cart.add_product(product)
    request.session["cart"] = cart
    # return view_cart(request)
    return HttpResponseRedirect("/depotapp/cart/view/")
Beispiel #23
0
 def on_post(self, req, resp, userId):
     try:
         cart = Cart(userId=userId)
         carts = Cart.objects(userId=userId)
         if len(carts) == 0:
             cartResp = cart.save()
             ResponseUtil.makeBody(resp, cartResp.to_json())
         else:
             ResponseUtil.makeBody(resp, carts[0].to_json())
     except Exception as e:
         ResponseUtil.error(e, resp)
def list_item_of_user(id_user):
    cart = Cart.query.filter(Cart.id_user == id_user).all()
    if (cart != []):
        id_cart = cart[0].id
    else:
        newcart = Cart(id_user=id_user)
        db.session.add(newcart)
        db.session.commit()
        id_cart = Cart.query.filter(Cart.id_user == id_user).first().id

    list_item = CartItem.query.filter(CartItem.id_cart == id_cart).all()

    return id_cart, list_item
Beispiel #25
0
def insertcart(request):
    x = request.GET["pid"]
    qt = request.GET["qt"]
    user = User.objects.get(id=request.session.get("_auth_user_id"))
    un = str(user.username)
    pr = Product.objects.get(pid=x)
    a = int(str(x))
    b = int(str(qt))
    c = un
    d = float(pr.pcost)
    e = int(str(qt)) * float(pr.pcost)
    ct = Cart(username=c, pid=a, units=b, unitprice=d, tuprice=e)
    ct.save()
    return render(request, 'insertcart.html')
def list_item_of_user_name_book(id_user):
    cart = Cart.query.filter(Cart.id_user == id_user).all()
    if (cart != []):
        id_cart = cart[0].id
    else:
        newcart = Cart(id_user=id_user)
        db.session.add(newcart)
        db.session.commit()
        id_cart = Cart.query.filter(Cart.id_user == id_user).first().id

    list_item = CartItem.query.filter(CartItem.id_cart == id_cart).join(
        Book, Book.id == CartItem.idBook).add_column(Book.name).all()

    return id_cart, list_item
Beispiel #27
0
def order_confirm(bot, update, user_data):
    answer = update.message.text
    # delivery:
    if "delivery_addr" in user_data:
        user_data["delivery_time"] = answer
        addr = user_data["delivery_addr"]
        ddate = user_data["delivery_date"]
        dtime = user_data["delivery_time"]
        cart = user_data["cart"]
        order_json = cart.json_repr()
        new_order = Order(addr=addr,
                          ddate=ddate,
                          dtime=dtime,
                          order=order_json)
        user = user_data['user']
        user.uorders.append(new_order)
        session.commit()
        # TODO: save delivery_addr and suggest it next time
        user_data["prev_delivery_addr"].append(addr)
        user_data["cart"] = Cart()
        del user_data["delivery_addr"]
        del user_data["delivery_date"]
        del user_data["delivery_time"]
        text = texts.delivery_confirmation % (addr, ddate, dtime, cart.total)
    # pickup:
    else:
        pickup_point = answer
        cart = user_data["cart"]
        order_json = cart.json_repr()
        new_order = Order(pickup=pickup_point, order=order_json)
        user = user_data['user']
        user.uorders.append(new_order)
        session.commit()
        text = texts.pickup_confirmation % (answer, cart.total)
        user_data["cart"] = Cart()
    ans(text=text, keyboard=main_kbd_user)(bot, update)
    return "MAIN_MENU_U"
def insert_into_cart(user_id, product_id, quantity):
    stock = db_session.query(Product).filter_by(id=product_id).first()
    available_stock = stock.count
    if available_stock > int(quantity):
        pro = db_session.query(Cart).filter_by(user_id=user_id,
                                               product_id=product_id).first()
        if pro != None:
            return "result"
        else:
            item = Cart(user_id=user_id, product_id=product_id, count=quantity)
            db_session.add(item)
            db_session.commit()
            return True
    else:
        return False
Beispiel #29
0
def insert_into_cart(product_id, quantity, user_id):
    available_stock = session.query(Item).filter_by(id=product_id).first()
    available_quantity = available_stock.quantity
    if available_quantity < int(quantity):
        return False
    else:
        avail = session.query(Cart).filter_by(user_id=user_id,
                                              item_id=product_id).first()
        if avail != None:
            return "No"
        else:
            product = Cart(user_id=user_id,
                           item_id=product_id,
                           desired_quantity=quantity)
        session.add(product)
        session.commit()
        return True
Beispiel #30
0
def add(request, good_id, count):
    buyers = request.user  #获得当前用户
    #buy_goods=Goods.objects.get(id=int(good_id))#购买的商品
    buy_count = int(count)
    goods_cart = Cart.objects.filter(user=buyers, goods_id=int(good_id))
    if len(goods_cart) >= 1:  #如果商品存在
        buy_cart = goods_cart[0]
        buy_cart.count = buy_cart.count + buy_count
    else:
        buy_cart = Cart()
        buy_cart.user = buyers
        buy_cart.goods_id = good_id
        buy_cart.count = buy_count
    buy_cart.save()
    if request.is_ajax():
        count = Cart.objects.filter(user=buyers)
        return JsonResponse({'count': count})
    else:
        return redirect('/cart/')