예제 #1
0
def detail(request, app_key):
    user = request.user
    app = get_object_or_404(App, key=app_key)
    if request.method == 'GET':
        try:
            user_app = UserApp.objects.get(user=user, app__key=app_key)
        except UserApp.DoesNotExist:
            pass
        plans = AppPlan.objects.filter(app=app, available=True)
        context = {}
        context['app'] = app
        context['plans'] = plans

        return render(request, 'market/{}.html'.format(app_key), context)
    else:
        plan_id = request.POST.get('plan')
        amount = int(request.POST.get('amount'))
        plan = AppPlan.objects.get(id=int(plan_id))
        price = plan.price
        days = plan.period * amount

        order = Order(price=price,
                      amount=amount,
                      period=plan.period,
                      user=user,
                      app=app,
                      plan=plan)
        order.save()
        return redirect("market_order", id=order.id)
예제 #2
0
    def post(self, request, format=None):
        o = Order()
        #o.consumer = request.user.userprofile
        o.save()
        for item in request.data.get('products'):
            product = Product.objects.get(pk = item['product'])
            op = OrderProduct()
            op.product = product
            op.order = o
            op.phone = request.data.get('phone')
            op.ammount = item['ammount']
            op.save()

            noty = Notification()
            noty.product = product

            #noty.consumer = request.user.userprofile
            noty.phone = request.data.get('phone')
            noty.provider = product.user
            noty.ammount = item['ammount']
            noty.save()
        
        async_to_sync(channel_layer.group_send)("notifications", {"type": "send_notify"})
            
        return Response(OrderSerializer(o).data)
예제 #3
0
 def post(self, request):
     o = Order()
     o.consumer = request.user.userprofile
     o.save()
     for item in request.data.get('products'):
         product = Product.objects.get(pk=item['product'])
         OrderProduct.objects.create(product=product,
                                     order=o,
                                     amount=item['amount'])
     return Response(OrderSerializer(o).data)
예제 #4
0
    def test_order_finish_twice(self):
        plan = self.plan1
        app = self.app
        price = plan.price
        amount = 2
        order = Order(price=price, amount=amount, period=plan.period, user=self.user, app=app, plan=plan)
        order.save()
        self.assertTrue(order.state == 0)
        now = timezone.now()
        order.finish()
        userapp = UserApp.objects.get(user=self.user, app=app)

        self.assertTrue(userapp.plan == plan)
        self.assertTrue((userapp.expired_time - now).days == 60)
        self.assertTrue(order.state == 1)
        self.assertTrue(OrderLock.objects.get(order=order))
        self.assertTrue(UserApp.objects.is_active(self.user, app.key))

        #: finish order again
        order.finish()
        userapp = UserApp.objects.get(user=self.user, app=app)

        self.assertTrue(userapp.plan == plan)
        self.assertTrue((userapp.expired_time - now).days == 60)
        self.assertTrue(order.state == 1)
        self.assertTrue(OrderLock.objects.get(order=order))
예제 #5
0
    def test_can_get_userpage_values(self):
        """
        Test that get_userpage_values retrieves a dictionary with
        the votes, purchases, coin_history, and SuggestionAdminPages
        for that user
        """
        new_user = User(username="******", email="*****@*****.**", password="******")
        new_user.save()

        suggestion_1 = Suggestion(is_feature=True, user=new_user, title="Userpage suggestion 1",
                                  details="Any old details", delay_submission=False)
        suggestion_1.save()
        suggestion_2 = Suggestion(is_feature=True, user=new_user, title="Userpage suggestion 2",
                                  details="Any old details")
        suggestion_2.save()

        suggestion_admin_1 = SuggestionAdminPage(suggestion=suggestion_1)
        suggestion_admin_1.save()
        suggestion_admin_2 = SuggestionAdminPage(suggestion=suggestion_2)
        suggestion_admin_2.save()

        for i in range(5):
            random_suggestion = choice(Suggestion.objects.all())
            upvote = Upvote(suggestion=random_suggestion, user=new_user)
            upvote.save()

            random_coin_transaction = choice(range(1, 10))
            coin_history_entry = UserCoinHistory(user=new_user, coins_change=1, transaction=random_coin_transaction)
            coin_history_entry.save()

            order = Order(user=new_user)
            order.save()
            random_store_item = choice(StoreItem.objects.all())
            order_item = OrderItem(order=order, item=random_store_item, quantity=1, total_purchase_price=1)
            order_item.save()

        userpage_values = get_userpage_values(new_user)

        self.assertEqual(len(userpage_values["coin_history"]), 5)

        random_purchase = choice(userpage_values["purchases"])
        self.assertTrue(isinstance(random_purchase, Order))
        random_coin_history = choice(userpage_values["coin_history"])
        self.assertTrue(isinstance(random_coin_history, UserCoinHistory))
        random_vote = choice(userpage_values["votes"])
        self.assertTrue(isinstance(random_vote, Upvote))
        random_suggestion_admin = choice(userpage_values["suggestions"])
        self.assertTrue(isinstance(random_suggestion_admin, SuggestionAdminPage))
예제 #6
0
        async def on_order(self, order):

            print(f"on_order: {order}")

            if order["type"] in ["received", "match", "done", "change"]:
                return

            try:

                _price = Decimal(order["price"])
                _amount = Decimal(order["size"])

                self.orm_cache.append(
                    Order(
                        exchange=exchange,
                        symbol=symbol,
                        sequence=order["sequence"],
                        order_id=order["orderId"],
                        side=OrderSideEnum.SELL.name
                        if order["side"] == "sell" else OrderSideEnum.BUY.name,
                        time=ts_to_dt(int(order["time"]) / 10**9),
                        price=_price,
                        amount=_amount,
                        value=_price * _amount,
                    ))
            except Exception as e:
                logger.error(e)
            finally:
                if len(self.orm_cache) >= 50:
                    Order.objects.bulk_create(self.orm_cache,
                                              ignore_conflicts=True)

                    self.orm_cache = []
예제 #7
0
def shopping_cart(request):
    if request.method != "GET":
        return JsonResponse(data={"message": "Wrong method"}, status=400)
    # is_active is a field for user model and is_authenticated is a function for user model.
    if request.user.is_authenticated and request.user.is_active:
        order = Order.initiate(request.user.customer)
        return JsonResponse(order.to_dict(), status=200)
    else:
        return JsonResponse(data={"message": "You are not logged in."}, status=403)
예제 #8
0
def checkout(request):

    order = Order()
    i = 0
    total_qty = 0
    total_price = 0.0

    while request.POST.get('productId_' + str(i), None) is not None:
        product_id = request.POST.get('productId_' + str(i))
        qty = int(request.POST.get('qty_' + str(i)))
        total_qty = total_qty + qty
        product = Product.objects.get(pk=product_id)
        total_price = total_price + product.price_sale
        product.qty -= qty
        product.save()
        # Handle database
        # 1- Decrease product count (qty) - read from database [[product = Product.objects.get(pk=product_id)]]
        # 2-  Add Entry (row) or (save) in order-item table and order (Create order )

        i += 1
    order.total_qty = total_qty
    order.total_price = total_price
    order.save()
    del request.session[CART_KEY]
    return home(request)
예제 #9
0
    def test_creating_order_requires_a_user_value_only(self):
        """
        Test to check that creating an Order object only requires
        a value for user. delivery_address is optional. date_time should
        be set to current datetime
        """
        new_user = User.objects.create(username="******", email="*****@*****.**", password="******")
        only_user_order = Order(user=new_user)
        only_user_order.save()
        retrieved_order = Order.objects.get(user=new_user)
        self.assertEqual(retrieved_order.date_time.date(), datetime.date.today())

        with self.assertRaises(IntegrityError):
            order_without_user = Order()
            order_without_user.save()
예제 #10
0
파일: views.py 프로젝트: arimousa/market
def buy(request, product_code):
    amount = 0
    if request.method == 'POST':
        buy_form = OrderRowForm(request.POST or None)
        if buy_form.is_valid():
            amount = buy_form.cleaned_data.get('amount')
        customer = list(Customer.objects.filter(user=request.user))[0]
        product_obj = Product.objects.get(code=product_code)
        order_product = Order(customer=customer, status=1)
        order_product.add_product(product_obj, amount=amount)
        order_product.submit()
        order_product.send()
        return redirect('product')
    else:
        product_obj = Product.objects.get(pk=product_code)
        return render(request, 'buy.html', {'product_obj': product_obj})
예제 #11
0
def add_items(request):
    if request.method != "POST":
        return JsonResponse(data={"message": "Wrong method"}, status=400)
    try:
        if request.user.is_authenticated and request.user.is_active:
            data = json.loads(request.body.decode('utf-8'))
            try:
                if not isinstance(data, list):
                    raise Exception()
            except:
                return JsonResponse(data={"message": "Can't read message body"}, status=400)
            order = Order.initiate(request.user.customer)
            errors = []
            for item in data:
                if 'code' in item and 'amount' not in item:
                    errors.append({'code': item['code'],
                                   'message': "Item has no 'amount' property."
                                   })
                    continue
                if 'code' not in item:
                    errors.append({'code': "???",
                                   'message': "Item has no 'code' property."
                                   })
                    continue
                try:
                    if Product.objects.filter(code=item['code']).exists():
                        order.add_product(Product.objects.get(code=item['code']), item['amount'])
                    else:
                        raise Exception("Product not found.")
                except Exception as e:
                    errors.append({'code': item['code'],
                                   'message': str(e)
                                   })
            if errors:
                return JsonResponse(order.to_dict(errors), status=400)
            else:
                return JsonResponse(order.to_dict(), status=200)
        else:
            return JsonResponse(data={"message": "You are not logged in."}, status=403)
    except Exception as e:
        return JsonResponse(data=str(e), status=400)
예제 #12
0
 def post(self, request):
     order = Order()
     total_price = 0.0
     total_qty = 0
     while request.data.get('product_id'):
         product = request.data.get('product_id')
         qty = request.data.get('qty')
         product_id = Product.objects.get(pk=product)
         total_price = total_price + product_id.sale_price
         total_qty = total_qty + qty
         product_id.qty -= qty
         product.save()
     order.total_qty = total_qty
     order.total_price = total_price
     order.save()
     return Response(status=status.HTTP_201_CREATED)
예제 #13
0
def submit(request):
    if request.method != "POST":
        return JsonResponse(data={"message": "Wrong method"}, status=400)
    try:
        if len(json.loads(request.body.decode('utf-8'))):
            raise Exception("")
    except:
        return JsonResponse({"message": "Can't read request body."}, status=400)
    try:
        if request.user.is_active and request.user.is_authenticated:
            data = json.loads(request.body.decode('utf-8'))
            if not isinstance(data, dict):
                return JsonResponse({'message': 'Not able to read your request body.'}, status=404)
            order = Order.initiate(request.user.customer)
            try:
                order.submit()
            except Exception as e:
                return JsonResponse({"message": str(e)}, status=400)
            return JsonResponse(order.toDict(), status=200)
        else:
            return JsonResponse(data={"message": "You are not logged in."}, status=403)
    except Exception as e:
        return JsonResponse(data=str(e), status=400)
예제 #14
0
def order(request):
    template = 'orders.html'
    if request.method == 'POST':
        cart = request.session.get('cart')
        cart = json.dumps(cart)
        user = request.user
        new_order = Order(cart=cart, user=user)
        new_order.make_pretty_cart()
        new_order.save()
        request.session['cart'].clear()
        request.session.modified = True
        context = {
            'orders': '',
            'result': 'Ваш заказ успешно создан',
            'just_ordered': True,
        }
        context.update(auth_check(request))
        return render(request, template, context)
    else:
        user = request.user
        orders = Order.objects.filter(user=user).all()
        context = {'orders': orders}
        context.update(auth_check(request))
        return render(request, template, context)
예제 #15
0
    def setUpTestData(cls):
        user_1 = User(username="******")
        user_1.save()
        user_2 = User(username="******", email="*****@*****.**")
        user_2.save()
        user_3 = User(username="******", password="******", email="*****@*****.**")
        user_3.save()

        suggestion_1 = Suggestion(is_feature=True, user=user_1, title="Test Suggestion 1", details="Any old details",
                                  delay_submission=False)
        suggestion_1.save()
        suggestion_2 = Suggestion(is_feature=True, user=user_2, title="Test Suggestion 2", details="Any old details",
                                  delay_submission=True)
        suggestion_2.save()
        suggestion_3 = Suggestion.objects.create(is_feature=True, user=user_2, title="Test Suggestion 3",
                                                 details="Any old details", delay_submission=False)
        suggestion_3.save()

        user_1_usercoins = UserCoins(user=user_1, coins=100)
        user_1_usercoins.save()
        user_2_usercoins = UserCoins(user=user_2, coins=500)
        user_2_usercoins.save()
        user_3_usercoins = UserCoins(user=user_3, coins=0)
        user_3_usercoins.save()

        coins_purchase_1 = CoinsPurchase(name="coins purchase 1", coins_price=200)
        coins_purchase_1.save()
        coins_purchase_2 = CoinsPurchase(name="coins purchase 2", coins_price=500)
        coins_purchase_2.save()
        suggestion_coins_purchase = CoinsPurchase(name="Suggestion", coins_price=500)
        suggestion_coins_purchase.save()
        upvote_coins_purchase = CoinsPurchase(name="Upvote", coins_price=100)
        upvote_coins_purchase.save()
        promote_feature_purchase = CoinsPurchase(name="Feature Suggestion Promotion", coins_price=600)
        promote_feature_purchase.save()

        coins_store_item_500 = StoreItem(name="500 coins", price=0, delivery_required=False, is_coins=True,
                                         coins_amount=500)
        coins_store_item_500.save()
        coins_store_item_200 = StoreItem(name="200 coins", price=2, delivery_required=False, is_coins=True,
                                         coins_amount=200)
        coins_store_item_200.save()
        coins_store_item_1000 = StoreItem(name="1000 coins", price=10, delivery_required=False, is_coins=True,
                                          coins_amount=1000)
        coins_store_item_1000.save()

        non_coins_store_item = StoreItem(name="not coins", price=5, delivery_required=True, is_coins=False)
        non_coins_store_item.save()

        order_1 = Order(user=user_1)
        order_1.save()
        order_2 = Order(user=user_2)
        order_2.save()
        order_3 = Order(user=user_3)
        order_3.save()