Example #1
0
 def create_order(self):
     basket = self.request.basket
     assert isinstance(basket, BaseBasket)
     assert basket.shop == self.request.shop
     basket.orderer = self.request.person
     basket.customer = self.request.customer
     basket.creator = self.request.user
     basket.status = OrderStatus.objects.get_default_initial()
     order_creator = get_basket_order_creator()
     order = order_creator.create_order(basket)
     basket.finalize()
     return order
Example #2
0
 def create_order(self):
     basket = self.request.basket
     assert isinstance(basket, BaseBasket)
     assert basket.shop == self.request.shop
     basket.orderer = self.request.person
     basket.customer = self.request.customer
     basket.creator = self.request.user
     basket.status = OrderStatus.objects.get_default_initial()
     order_creator = get_basket_order_creator()
     order = order_creator.create_order(basket)
     basket.finalize()
     return order
Example #3
0
 def create_order(self):
     basket = self.basket
     assert basket.shop == self.request.shop
     basket.orderer = self.request.person
     basket.customer = self.request.customer
     basket.creator = self.request.user
     if "impersonator_user_id" in self.request.session:
         basket.creator = get_user_model().objects.get(pk=self.request.session["impersonator_user_id"])
     basket.status = OrderStatus.objects.get_default_initial()
     order_creator = get_basket_order_creator()
     order = order_creator.create_order(basket)
     basket.finalize()
     return order
Example #4
0
 def create_order(self):
     basket = self.basket
     assert isinstance(basket, BaseBasket)
     assert basket.shop == self.request.shop
     basket.orderer = self.request.person
     basket.customer = self.request.customer
     basket.creator = self.request.user
     if "impersonator_user_id" in self.request.session:
         basket.creator = get_user_model().objects.get(pk=self.request.session["impersonator_user_id"])
     basket.status = OrderStatus.objects.get_default_initial()
     order_creator = get_basket_order_creator()
     order = order_creator.create_order(basket)
     basket.finalize()
     return order
Example #5
0
    def form_valid(self, form):
        basket = self.request.basket
        assert isinstance(basket, BaseBasket)
        order_data = form["order"].cleaned_data.copy()
        if not order_data.pop("accept_terms", None):  # pragma: no cover
            raise ValidationError("Terms must be accepted")

        basket.shop = self.request.shop
        basket.orderer = self.request.person
        basket.customer = self.request.customer
        basket.creator = self.request.user
        if "impersonator_user_id" in self.request.session:
            basket.creator = get_user_model().objects.get(
                pk=self.request.session["impersonator_user_id"])
        basket.shipping_address = form["shipping"].save(commit=False)
        basket.billing_address = form["billing"].save(commit=False)
        basket.shipping_method = order_data.pop("shipping_method")
        basket.payment_method = order_data.pop("payment_method")
        basket.status = OrderStatus.objects.get_default_initial()
        company_name = order_data.pop("company_name")
        tax_number = order_data.pop("tax_number")
        if company_name and tax_number:
            # Not using `get_or_create` here because duplicates are better than accidental information leakage
            basket.customer = CompanyContact.objects.create(
                name=company_name, tax_number=tax_number)
            for address in (basket.shipping_address, basket.billing_address):
                address.company_name = basket.customer.name
                address.tax_number = basket.customer.tax_number
        basket.marketing_permission = order_data.pop("marketing")
        basket.customer_comment = order_data.pop("comment")

        if order_data:  # pragma: no cover
            raise ValueError("`order_data` should be empty by now")

        order_creator = get_basket_order_creator()
        order = order_creator.create_order(basket)
        basket.finalize()
        self.checkout_process.complete()

        if order.require_verification:
            return redirect("shuup:order_requires_verification",
                            pk=order.pk,
                            key=order.key)
        else:
            return redirect("shuup:order_process_payment",
                            pk=order.pk,
                            key=order.key)
Example #6
0
    def checkout(self, request, *args, **kwargs):
        serializer = CheckoutSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        basket = self.get_basket()
        basket.verify_orderability()
        basket.shipping_method = serializer.validated_data['shipping_method']
        basket.payment_method = serializer.validated_data['payment_method']
        if basket.product_count < 1:
            raise ValidationError({
                'code': 'empty_basket',
                'error': 'You can\'t order an empty basket'
            })
        basket.status = OrderStatus.objects.get_default_initial()
        order_creator = get_basket_order_creator()
        order = order_creator.create_order(basket)
        basket.finalize()
        basket.save()

        return Response(OrderSerializer(order).data)
Example #7
0
    def form_valid(self, form):
        basket = self.request.basket
        assert isinstance(basket, BaseBasket)
        order_data = form["order"].cleaned_data.copy()
        if not order_data.pop("accept_terms", None):  # pragma: no cover
            raise ValidationError("Terms must be accepted")

        basket.shop = self.request.shop
        basket.orderer = self.request.person
        basket.customer = self.request.customer
        basket.creator = self.request.user
        if "impersonator_user_id" in self.request.session:
            basket.creator = get_user_model().objects.get(pk=self.request.session["impersonator_user_id"])
        basket.shipping_address = form["shipping"].save(commit=False)
        basket.billing_address = form["billing"].save(commit=False)
        basket.shipping_method = order_data.pop("shipping_method")
        basket.payment_method = order_data.pop("payment_method")
        basket.status = OrderStatus.objects.get_default_initial()
        company_name = order_data.pop("company_name")
        tax_number = order_data.pop("tax_number")
        if company_name and tax_number:
            # Not using `get_or_create` here because duplicates are better than accidental information leakage
            basket.customer = CompanyContact.objects.create(name=company_name, tax_number=tax_number)
            for address in (basket.shipping_address, basket.billing_address):
                address.company_name = basket.customer.name
                address.tax_number = basket.customer.tax_number
        basket.marketing_permission = order_data.pop("marketing")
        basket.customer_comment = order_data.pop("comment")

        if order_data:  # pragma: no cover
            raise ValueError("`order_data` should be empty by now")

        order_creator = get_basket_order_creator()
        order = order_creator.create_order(basket)
        basket.finalize()
        self.checkout_process.complete()

        if order.require_verification:
            return redirect("shuup:order_requires_verification", pk=order.pk, key=order.key)
        else:
            return redirect("shuup:order_process_payment", pk=order.pk, key=order.key)
def test_simple_packager1(rf):
    populate_if_required()
    MAX_WIDTH = 1050
    MAX_LENGTH = 1050
    MAX_HEIGHT = 1050
    MAX_EDGES_SUM = 2000
    MAX_WEIGHT = 30000

    constraint1 = SimplePackageDimensionConstraint(MAX_WIDTH, MAX_LENGTH,
                                                   MAX_HEIGHT, MAX_EDGES_SUM)
    constraint2 = WeightPackageConstraint(MAX_WEIGHT)

    packager = SimplePackager()
    assert packager._constraints == set()
    packager.add_constraint(constraint1)
    packager.add_constraint(constraint2)
    assert constraint1 in packager._constraints
    assert constraint2 in packager._constraints

    product1 = create_product(sku='p1',
                              width=250,
                              depth=200,
                              height=50,
                              gross_weight=2340,
                              shop=get_default_shop(),
                              supplier=get_default_supplier())

    product2 = create_product(sku='p2',
                              width=500,
                              depth=150,
                              height=90,
                              gross_weight=690,
                              shop=get_default_shop(),
                              supplier=get_default_supplier())

    assert packager._product_has_valid_attrs(product1) is True
    assert packager._product_has_valid_attrs(product2) is True

    # cria produtos invalidos, sem propriedades necessárias

    # no gross_weight
    product_invalid_1 = create_product(sku='pi1',
                                       width=100,
                                       depth=200,
                                       height=50,
                                       gross_weight=100)
    product_invalid_1.gross_weight = 0
    assert packager._product_has_valid_attrs(product_invalid_1) is False

    # no height
    product_invalid_2 = create_product(sku='pi2',
                                       width=100,
                                       depth=200,
                                       height=50,
                                       gross_weight=100)
    product_invalid_2.height = 0
    assert packager._product_has_valid_attrs(product_invalid_2) is False

    # no depth
    product_invalid_3 = create_product(sku='pi3',
                                       width=100,
                                       depth=200,
                                       height=50,
                                       gross_weight=100)
    product_invalid_3.depth = 0
    assert packager._product_has_valid_attrs(product_invalid_3) is False

    # no width
    product_invalid_4 = create_product(sku='pi4',
                                       width=100,
                                       depth=200,
                                       height=50,
                                       gross_weight=100)
    product_invalid_4.width = 0
    assert packager._product_has_valid_attrs(product_invalid_4) is False

    # cria um basket vazio
    request = rf.get("/")
    request.session = {}
    request.shop = get_default_shop()
    apply_request_middleware(request)
    basket = get_basket(request)

    # adiciona um item no carrinho
    basket.add_product(supplier=get_default_supplier(),
                       shop=get_default_shop(),
                       product=product1,
                       quantity=2)

    basket.add_product(supplier=get_default_supplier(),
                       shop=get_default_shop(),
                       product=product2,
                       quantity=3)

    # cria o pedido a partir do carrinho
    order_creator = get_basket_order_creator()
    basket.status = OrderStatus.objects.get_default_initial()
    order = order_creator.create_order(basket)

    packages_from_source = packager.pack_source(basket)
    packages_from_order = packager.pack_order(order)

    # os produtos cabem todos no mesmo pacote
    assert len(packages_from_source) == 1
    assert len(packages_from_order) == 1

    pkge_from_source = packages_from_source[0]
    pkge_from_order = packages_from_order[0]

    for pkge in (pkge_from_source, pkge_from_order):
        assert pkge.count == 5  # 5 produtos
        assert pkge.weight == (product1.gross_weight * 2 +
                               product2.gross_weight * 3)  # peso igual
        assert pkge.width == 500  # product2 width
        assert pkge.length == 200  # product1 depth
        assert pkge.height == (product1.height * 2 + product2.height * 3
                               )  # soma as alturas