Exemple #1
0
def add(request):
    basket = Basket(request)
    if request.POST.get('action') == 'post':

        user_id = request.user.id
        order_key = request.POST.get('order_key')
        baskettotal = basket.get_total_price()
        name = request.POST.get('name')
        address1 = request.POST.get('line1')
        address2 = request.POST.get('line2')
        post_code = request.POST.get('postCode')

        if Order.objects.filter(order_key=order_key).exists():
            pass
        else:
            order = Order.objects.create(user_id=user_id,
                                         name=name,
                                         address1=address1,
                                         address2=address2,
                                         post_code=post_code,
                                         total_paid=baskettotal,
                                         order_key=order_key)

            order_id = order.pk

            for item in basket:
                OrderItem.objects.create(order_id=order_id,
                                         product=item['product'],
                                         price=item['price'],
                                         quantity=item['qty'])

            response = JsonResponse({'success': 'Order Placed'})
            return response
Exemple #2
0
def order_create(request):
    basket = Basket(request)
    user = request.user
    if request.method == "POST":
        order_numbr = get_order_number()
        request.POST = request.POST.copy()
        request.POST['order_number'] = order_numbr
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save(commit=False)
            order.save()
            for item in basket:
                OrderProduct.objects.create(order=order,
                                            product=item['product'],
                                            price=item['price'],
                                            quantity=item['quantity'])
            #clear basket
            basket.clear()
            return render(request, 'order/created.html',
                          {'order_number': order.order_number})
    else:
        form = OrderCreateForm(initial={'order_by': user})
    return render(request, 'order/create.html', {
        'basket': basket,
        'form': form
    })
Exemple #3
0
def add(request):
    basket = Basket(request)
    if request.POST.get('action') == 'post':

        order_key = request.POST.get('order_key')
        user_id = request.user.id
        baskettotal = basket.get_total_price()

        # Check if order exists
        if Order.objects.filter(order_key=order_key).exists():
            pass
        else:
            order = Order.objects.create(user_id=user_id,
                                         full_name='name',
                                         address1='add1',
                                         address2='add2',
                                         total_paid=baskettotal,
                                         order_key=order_key)
            order_id = order.pk

            for item in basket:
                OrderItem.objects.create(order_id=order_id,
                                         product=item['product'],
                                         price=item['price'],
                                         quantity=item['qty'])

        response = JsonResponse({'success': 'Return something'})
        return response
Exemple #4
0
def BasketView(request):

    basket = Basket(request)
    total = str(basket.get_total_price())
    total = total.replace('.', '')
    total = int(total)

    return render(request, 'payment/home.html')
Exemple #5
0
def test_price_basket_with_two_identical_items():
    b = Basket()
    b.add(item_name="peas", count=2)
    c = {"peas": 2.01}
    o = {}

    sub_total, discount, total = price_basket(basket=b, catalogue=c, offers=o)

    assert sub_total == 4.02
    assert discount == 0
    assert total == 4.02
Exemple #6
0
def test_price_basket_with_a_single_discunted_item():
    b = Basket()
    b.add(item_name="peas", count=1)
    c = {"peas": 2.02}
    o = [discounted_item("peas", 0.5)]

    sub_total, discount, total = price_basket(basket=b, catalogue=c, offers=o)

    assert sub_total == 2.02
    assert discount == 1.01
    assert total == 1.01
Exemple #7
0
def test_price_basket_buy_three_get_one_free_applicable():
    b = Basket()
    b.add(item_name="peas", count=3)
    c = {"peas": 2.0}
    o = [buy_x_get_y_free("peas", x=3, y=1)]

    sub_total, discount, total = price_basket(basket=b, catalogue=c, offers=o)

    assert sub_total == 6.0
    assert discount == 2.0
    assert total == 4.0
def add_basket(request):
    basket = Basket(request)
    if request.POST.get('action') == 'post':
        product_id = int(request.POST.get('productid'))
        product_qty = int(request.POST.get('productqty'))
        product = get_object_or_404(Product, id=product_id)
        basket.add(product=product, qty=product_qty)
        basketqty = basket.__len__()

        response = JsonResponse({'qty': basketqty})
        return response
Exemple #9
0
def test_price_basket_with_single_item():
    b = Basket()
    b.add(item_name="peas")
    c = {"peas": 2.01}
    o = {}

    sub_total, discount, total = price_basket(basket=b, catalogue=c, offers=o)

    assert sub_total == 2.01
    assert discount == 0
    assert total == 2.01
Exemple #10
0
    def __init__(self, parent):
        super(BuyFrame, self).__init__(parent)
        
        # create component bom parts list
        self.tree_boms_manager = helper.tree.TreeManager(self.tree_boms, context_menu=self.menu_boms)
        self.tree_boms_manager.AddTextColumn("Path")
        self.tree_boms_manager.AddTextColumn("Production count")
        self.tree_boms_manager.OnSelectionChanged = self.onTreeBomsSelectionChanged
        
        # create component bom parts list
        self.tree_bom_parts_manager = TreeManagerBomParts(self.tree_bom_parts)
        self.tree_bom_parts_manager.AddIntegerColumn("Id")
        self.tree_bom_parts_manager.AddTextColumn("Name")
        self.tree_bom_parts_manager.AddIntegerColumn("Components")
        self.tree_bom_parts_manager.AddIntegerColumn("Needed")
        self.tree_bom_parts_manager.AddIntegerColumn("Stock")
        self.tree_bom_parts_manager.AddIntegerColumn("Provisioning")
        self.tree_bom_parts_manager.AddTextColumn("Description")
        self.tree_bom_parts_manager.AddTextColumn("Comment")

        # create equivalent parts list
        self.tree_equivalent_parts_manager = helper.tree.TreeManager(self.tree_part_equivalents)
        self.tree_equivalent_parts_manager.AddIntegerColumn("Id")
        self.tree_equivalent_parts_manager.AddTextColumn("Name")
        self.tree_equivalent_parts_manager.AddIntegerColumn("Stock")
        self.tree_equivalent_parts_manager.AddTextColumn("Description")
        self.tree_equivalent_parts_manager.AddTextColumn("Comment")

        # create octoparts list
        self.tree_distributors_manager = TreeManagerDistributors(self.tree_distributors, context_menu=self.menu_prices)
        self.tree_distributors_manager.AddIntegerColumn("Amount To Buy")
        self.tree_distributors_manager.AddFloatColumn("Buy Price")
        self.tree_distributors_manager.AddIntegerColumn("Packaging Unit")
        self.tree_distributors_manager.AddIntegerColumn("Quantity")
        self.tree_distributors_manager.AddFloatColumn("Price")
        self.tree_distributors_manager.AddFloatColumn("Price per Item")
        self.tree_distributors_manager.AddTextColumn("Currency")
        self.tree_distributors_manager.AddTextColumn("SKU")

        # create wish parts list
        self.tree_wish_parts_manager = helper.tree.TreeManager(self.tree_wish_parts)
        self.tree_wish_parts_manager.AddTextColumn("Part")
        self.tree_wish_parts_manager.AddTextColumn("Distributor")
        self.tree_wish_parts_manager.AddTextColumn("SKU")
        self.tree_wish_parts_manager.AddIntegerColumn("Packaging Unit")
        self.tree_wish_parts_manager.AddFloatColumn("Amount")
        self.tree_wish_parts_manager.AddFloatColumn("Buy Price")
        self.tree_wish_parts_manager.AddTextColumn("Currency")
        self.tree_wish_parts_manager.AddTextColumn("Description")

        self.basket = Basket()

        self.update_state()
Exemple #11
0
    def __init__(self, parent):
        super(BuyFrame, self).__init__(parent)

        # create module bom parts list
        self.tree_boms_manager = helper.tree.TreeManager(self.tree_boms)
        self.tree_boms_manager.AddTextColumn("Path")
        self.tree_boms_manager.AddTextColumn("Production count")

        # create module bom parts list
        self.tree_bom_parts_manager = TreeManagerBomParts(self.tree_bom_parts)
        self.tree_bom_parts_manager.AddIntegerColumn("Id")
        self.tree_bom_parts_manager.AddTextColumn("Name")
        self.tree_bom_parts_manager.AddIntegerColumn("Modules")
        self.tree_bom_parts_manager.AddIntegerColumn("Needed")
        self.tree_bom_parts_manager.AddIntegerColumn("Stock")
        self.tree_bom_parts_manager.AddIntegerColumn("Provisioning")
        self.tree_bom_parts_manager.AddTextColumn("Description")
        self.tree_bom_parts_manager.AddTextColumn("Comment")

        # create equivalent parts list
        self.tree_equivalent_parts_manager = helper.tree.TreeManager(self.tree_part_equivalents)
        self.tree_equivalent_parts_manager.AddIntegerColumn("Id")
        self.tree_equivalent_parts_manager.AddTextColumn("Name")
        self.tree_equivalent_parts_manager.AddIntegerColumn("Stock")
        self.tree_equivalent_parts_manager.AddTextColumn("Description")
        self.tree_equivalent_parts_manager.AddTextColumn("Comment")

        # create octoparts list
        self.tree_distributors_manager = TreeManagerDistributors(self.tree_distributors)
        self.tree_distributors_manager.AddIntegerColumn("Amount To Buy")
        self.tree_distributors_manager.AddFloatColumn("Buy Price")
        self.tree_distributors_manager.AddIntegerColumn("Packaging Unit")
        self.tree_distributors_manager.AddIntegerColumn("Quantity")
        self.tree_distributors_manager.AddFloatColumn("Price")
        self.tree_distributors_manager.AddFloatColumn("Price per Item")
        self.tree_distributors_manager.AddTextColumn("Currency")
        self.tree_distributors_manager.AddTextColumn("SKU")

        # create wish parts list
        self.tree_wish_parts_manager = helper.tree.TreeManager(self.tree_wish_parts)
        self.tree_wish_parts_manager.AddTextColumn("Part")
        self.tree_wish_parts_manager.AddTextColumn("Distributor")
        self.tree_wish_parts_manager.AddTextColumn("SKU")
        self.tree_wish_parts_manager.AddIntegerColumn("Packaging Unit")
        self.tree_wish_parts_manager.AddFloatColumn("Amount")
        self.tree_wish_parts_manager.AddFloatColumn("Buy Price")
        self.tree_wish_parts_manager.AddTextColumn("Currency")
        self.tree_wish_parts_manager.AddTextColumn("Description")

        self.basket = Basket()

        self.enableBom(False)
Exemple #12
0
def BasketView(request):

    basket = Basket(request)
    total = str(basket.get_total_price())
    total = total.replace('.', '')
    total = int(total)

    stripe.api_key = os.environ.get('STRIPE_API_KEY')
    intent = stripe.PaymentIntent.create(amount=total,
                                         currency='inr',
                                         metadata={'userid': request.user.id})

    return render(request, 'payment/payment.html',
                  {'client_secret': intent.client_secret})
Exemple #13
0
def BasketView(request):
    basket = Basket(request)
    total = str(basket.get_total_price())
    total = total.replace('.', '')
    total = int(total)

    stripe.api_key = 'sk_test_51Ip9DUJQDQJquU6ukM0x3CAeMlFF5451jyMQMuG2u3PbxIaJ2I31WR7oCu8W29KEHmHO7jpU12t2lEb4eBZu2xbM00x1bKH2ba'

    intent = stripe.PaymentIntent.create(
        amount=total,
        currency='gbp',
        metadata={'userid': request.user.id},
    )
    return render(request, 'payment/home.html',
                  {'client_secret': intent.client_secret})
Exemple #14
0
def BasketView(request):

    basket = Basket(request)
    total = str(basket.get_total_price())
    total = total.replace('.', '')
    total = int(total)

    stripe.api_key = \
        'sk_test_51J5tPkDbVJLGvj0Ajlm3Fh5AIxiwenCVdHAeLwaN28DSkbdLPUla8T5gFQsCNklf64bqP9fjCLDS95Hpbxa3qkdI00R1Sy8BRF'
    intent = stripe.PaymentIntent.create(amount=total,
                                         currency='gbp',
                                         metadata={'userid': request.user.id})

    return render(request, 'payment/home.html',
                  {'client_secret': intent.client_secret})
Exemple #15
0
def order_placed(request):
    """After the user checks out (clicks on 'Place order') we make changes to the attributes of active order."""
    basket = Basket(request)
    user = request.user
    profile = Profile.objects.get(user=user)
    active_order = Order.objects.get(client=profile, active_basket=True)

    active_order.active_basket = False
    active_order.order_status = 'PD'
    active_order.invoice_total = Decimal(basket.get_total_price())

    active_order.save()
    basket.clear()

    return render(request, 'orders/order_placed.html')
Exemple #16
0
def add(request):
    basket = Basket(request)

    if request.POST.get('action') == 'post':
        user_id = request.user.id
        basket_price = basket.get_basket_price
        order_key = request.POST['order_key']
        print(order_key)

        # Check if order (by order_key) exists
        if Order.objects.filter(order_key=order_key).exists():
            pass
        else:
            order = Order.objects.create(
                user_id=user_id,
                order_key=order_key,
                full_name=request.POST['fullname'],
                address1=request.POST['address1'],
                address2=request.POST['address2'],
                city=request.POST['city'],
                country=request.POST['country'],
                post_code=request.POST['postcode'],
                total_price=basket_price,
            )

            for item in basket:
                OrderItem.objects.create(order=order,
                                         product=item['product'],
                                         price=item['total_price'],
                                         quantity=item['qty'])

        return JsonResponse({'status': 'success'})
Exemple #17
0
def BasketView(request):

    basket = Basket(request)
    total = str(basket.get_total_price())
    total = total.replace('.', '')
    total = int(total)

    stripe.api_key = settings.STRIPE_SECRET_KEY
    intent = stripe.PaymentIntent.create(
        amount=total,
        currency='gbp',
        metadata={'userid': request.user.id}
    )

    return render(request, 'payment/payment_form.html', {'client_secret': intent.client_secret, 
                                                            'STRIPE_PUBLISHABLE_KEY': os.environ.get('STRIPE_PUBLISHABLE_KEY')})
Exemple #18
0
    def form_valid(self, form):
        result = super().form_valid(form)

        user = self.request.user
        profile = Profile.objects.get(user=user)
        my_basket = Basket(
            self.request)  # this is the offline basket (before logging in)

        if Order.objects.filter(client=profile, active_basket=True).exists():
            active_order = Order.objects.get(client=profile,
                                             active_basket=True)
        else:
            if len(my_basket) > 0:
                active_order = Order.objects.create(
                    client=profile,
                    active_basket=True,
                )
            else:
                return result

        order_items = active_order.items.all()

        my_basket_copy = {}
        for key in my_basket.basket:
            my_basket_copy[key] = my_basket.basket[key].copy()

        for item in order_items:  # update the session basket from the database
            my_basket.add(item.product, item.quantity)

        for product_id in my_basket_copy:  # update the database with the copy of the offline basket
            my_product = Product.objects.get(id=int(product_id))
            if OrderItem.objects.filter(product=my_product,
                                        order=active_order).exists():
                item = OrderItem.objects.get(product=my_product,
                                             order=active_order)
                item.quantity += my_basket_copy[product_id]['qty']
                item.save()
            else:
                OrderItem.objects.create(
                    order=active_order,
                    product=my_product,
                    price=my_product.price,
                    quantity=my_basket_copy[product_id]['qty'])

        return result
Exemple #19
0
def BasketView(request):

    basket = Basket(request)
    total = str(basket.get_total_price())
    total = total.replace('.', '')
    total = int(total)

    # stripe.api_key = 'sk_test_51IPPiMLq3gp8sNqb4uK7SS05ez3ab0ZHBwHUt7spe1B7xtOCyoSfoygnGUA5HQ2wh3oecQAL5Kam4stDeU8L7R7c00WHdZN5uU'
    stripe.api_key = settings.STRIPE_SECRET_KEY
    intent = stripe.PaymentIntent.create(amount=total,
                                         currency='gbp',
                                         metadata={'userid': request.user.id})

    return render(
        request, 'payment/payment_form.html', {
            'client_secret': intent.client_secret,
            'STRIPE_PUBLISHABLE_KEY': os.environ.get('STRIPE_PUBLISHABLE_KEY')
        })
Exemple #20
0
def test_price_empty_basket():
    b = Basket()
    c = {}
    o = {}

    sub_total, discount, total = price_basket(basket=b, catalogue=c, offers=o)

    assert sub_total == 0
    assert discount == 0
    assert total == 0
Exemple #21
0
def BasketView(request):

    basket = Basket(request)
    total = str(basket.get_total_price())
    total = total.replace(".", "")
    total = int(total)

    stripe.api_key = settings.STRIPE_SECRET_KEY
    intent = stripe.PaymentIntent.create(amount=total,
                                         currency="usd",
                                         metadata={"userid": request.user.id})

    return render(
        request,
        "payment/payment_form.html",
        {
            "client_secret": intent.client_secret,
            "STRIPE_PUBLISHABLE_KEY": os.environ.get("STRIPE_PUBLISHABLE_KEY")
        },
    )
Exemple #22
0
def basket_update_delivery(request):
    basket = Basket(request)
    if request.POST.get('action') == 'post':
        delivery_option = int(request.POST.get('deliveryoption'))
        delivery_type = DeliveryOptions.objects.get(id=delivery_option)
        updated_total_price = basket.basket_update_delivery(
            delivery_type.delivery_price)

        session = request.session
        if 'purchase' not in request.session:
            session['purchase'] = {'delivery_id': delivery_type.id}
        else:
            session['purchase']['delivery_id'] = delivery_type.id
            session.modified = True

        response = JsonResponse({
            'total': updated_total_price,
            'delivery_price': delivery_type.delivery_price
        })
        return response
Exemple #23
0
 def main(self):
     self.displayWelcomeMessage()
     warehouse = Warehouse.fromFile(WarehouseReader("../warehouse.dat"))
     catalogue = Catalogue.fromFile(CatalogueReader("../catalogue.dat"))
     basket = Basket()
     catalogueActions = CatalogueActions(catalogue)
     warehouseActions = WarehouseActions(warehouse, catalogue)
     basketActions = BasketActions(basket, catalogue, warehouse)
     UserInterface(catalogueActions, warehouseActions,
                   basketActions).start()
     self.displayGoodbyeMessage()
     sys.exit()
Exemple #24
0
def payment_complete(request):
    """
    Payment complete view
    """

    basket = Basket(request)
    basket.clear()

    user = request.user
    current_site = get_current_site(request)
    subject = 'Order Placed'
    protocol = 'https' if request.is_secure() else 'http'
    message = render_to_string('payment/payment_complete_email.html', {
        'protocol': protocol,
        'user': user,
        'domain': current_site.domain,
    })

    user.email_user(subject=subject, message=message, email=user.email)

    return render(request, 'payment/payment_complete.html')
Exemple #25
0
def add_order(request):
    if request.method == 'POST':
        basket = Basket(request)

        if basket.is_empty():
            error = 'Basket is empty'
            return render(request, 'order/add_order.html', {
                'order': None,
                'error': error
            })
        if not request.POST.get('address'):
            error = 'Select Address'
            return render(request, 'order/add_order.html', {
                'order': None,
                'error': error
            })

        seller = get_object_or_404(Seller, slug=request.session['seller'])
        address = get_object_or_404(Address, id=request.POST.get('address'))
        order = Order(user=request.user, seller=seller, address=address)
        order.save()
        for item, info in basket.basket.items():
            try:
                item = seller.items.get(name=item)
            except Item.DoesNotExist:
                return Http404

            entry = Entry(item=item, order=order, quantity=info['qty'])
            entry.save()

        basket.clean()
        return render(request, 'order/add_order.html', {
            'order': order,
            'error': None
        })
    else:
        addresses = request.user.addresses.all()
        return render(request, 'order/finalize_order.html',
                      {'addresses': addresses})
def basket_update_delivery(request):
    basket = Basket(request)
    if request.POST.get("action") == "post":
        delivery_option = int(request.POST.get("deliveryoption"))
        delivery_type = DeliveryOptions.objects.get(id=delivery_option)
        updated_total_price = basket.basket_update_delivery(
            delivery_type.delivery_price)

        session = request.session
        if "purchase" not in request.session:
            session["purchase"] = {
                "delivery_id": delivery_type.id,
            }
        else:
            session["purchase"]["delivery_id"] = delivery_type.id
            session.modified = True

        response = JsonResponse({
            "total": updated_total_price,
            "delivery_price": delivery_type.delivery_price
        })
        return response
Exemple #27
0
def order_create(request):
    basket = Basket(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in basket:
                OrderItem.objects.create(order=order,
                                         product=item['product'],
                                         price=item['price'],
                                         quantity=item['quantity'])
            basket.clear()

            order_created.delay(order.id)
            return render(request, 'orders/order/created.html',
                          {'order': order})
    else:
        form = OrderCreateForm()
    return render(request, 'orders/order/create.html', {
        'basket': basket,
        'form': form
    })
Exemple #28
0
    def test_some_invalid_items(self):
        items = [
            "Apples",
            "Soup",
            "Bread",
            "Soup",
            "Milk",
            "Random",
            "Stuff",
            "Bread,Milk",
        ]
        basket = Basket(items, self.offers, self.products)

        self.assertEqual(5, len(basket.found_goods))
Exemple #29
0
def create_order(request):
    basket = Basket(request)
    if request.method == 'POST':
        form = OrderForm(request.POST)
        if form.is_valid():
            order = form.save()
            for i in basket:
                OrderItem.objects.create(order=order,
                                         item=i['item'],
                                         price=i['price'],
                                         quantity=i['quantity'])
            basket.drop_basket()
            created_order(order.id)
            #for celery asynchronous tasks
            #created_order.delay(order.id)
            return render(request, 'orders/order_created.html',
                          {'order': order})
    else:
        form = OrderForm()
    return render(request, 'orders/order_create.html', {
        'basket': basket,
        'form': form
    })
Exemple #30
0
def order_create(request):
    user = request.user
    print(user.username)
    basket = Basket(request)
    if request.method == 'POST':
        if user.username != '':
            form = OrderCreateForm(request.POST)
        else:
            form = OrderCreateAnonForm(request.POST)
        if form.is_valid():
            order = form.save()
            if not request.POST.get('phone'):
                order.first_name = user.first_name
                order.phone = str(user)
                order.save()

            for item in basket:

                OrderItem.objects.create(order=order,
                                         product=item['product'],
                                         price=item['price'],
                                         quantity=item['quantity'])

            basket.clear()

            return render(request, 'order/created.html', {'order': order})
    else:
        if user.username != '':
            form = OrderCreateForm
        else:
            form = OrderCreateAnonForm

    return render(request, 'order/order.html', {
        'basket': basket,
        'form': form
    })