# -*- coding: utf-8 -*-
# This file is part of Shuup.
#
# Copyright (c) 2012-2017, Shoop Commerce Ltd. All rights reserved.
#
# This source code is licensed under the OSL-3.0 license found in the
# LICENSE file in the root directory of this source tree.
from django import forms
from django.contrib.auth import get_user_model
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView
from shuup.core.models import OrderStatus
from shuup.front.basket import get_basket_order_creator
from shuup.front.basket.objects import BaseBasket
from shuup.front.checkout import CheckoutPhaseViewMixin
[docs]class ConfirmPhase(CheckoutPhaseViewMixin, FormView):
identifier = "confirm"
title = _("Confirmation")
template_name = "shuup/front/checkout/confirm.jinja"
form_class = ConfirmForm
[docs] def process(self):
self.basket.customer_comment = self.storage.get("comment")
self.basket.marketing_permission = self.storage.get("marketing")
[docs] def is_valid(self):
return bool(self.storage.get("accept_terms"))
def _get_product_ids(self):
return [str(product_id) for product_id in self.basket.get_product_ids_and_quantities().keys()]
[docs] def get_context_data(self, **kwargs):
context = super(ConfirmPhase, self).get_context_data(**kwargs)
basket = self.basket
assert isinstance(basket, BaseBasket)
basket.calculate_taxes()
errors = list(basket.get_validation_errors())
context["basket"] = basket
context["errors"] = errors
context["orderable"] = (not errors)
context["product_ids"] = ','.join(self._get_product_ids())
return context
[docs] 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