Exemplo n.º 1
0
 def handle_forms(self, js_enabled=None, update_only=None):
     forms = getattr(self, '_forms', None)
     if not forms:
         shipping_form = self.get_shipping_address_form()
         billing_form = self.get_billing_address_form()
     
         if not update_only and shipping_form.is_valid() and billing_form.is_valid():
             shipping_address = shipping_form.save()
             billing_address = billing_form.save()
             order = self.create_order_object_from_cart()
 
             self.save_addresses_to_order(order, shipping_address,
                 billing_address)
 
             # The following marks addresses as being default addresses for
             # shipping and billing. For more options (amazon style), we should
             # remove this
             assign_address_to_request(self.request, shipping_address,
                 shipping=True)
             assign_address_to_request(self.request, billing_address,
                 shipping=False)          
                       
         billingshipping_form, shipping_choices_form, payment_choices_form = \
             self.handle_billingshipping_forms(js_enabled, update_only, shipping_form, billing_form)
             
         self._forms = {
             'shipping_address': shipping_form,
             'billing_address': billing_form,
             'billing_shipping_form': billingshipping_form,
             'shipping_choices_form': shipping_choices_form,
             'payment_choices_form': payment_choices_form
         }
     return self._forms
Exemplo n.º 2
0
    def post(self, *args, **kwargs):
        """ Called when view is POSTed """
        shipping_form = self.get_shipping_address_form()
        billing_form = self.get_billing_address_form()
        if shipping_form.is_valid() and billing_form.is_valid():

            # Add the address to the order
            shipping_address = shipping_form.save()
            billing_address = billing_form.save()
            order = self.create_order_object_from_cart()

            self.save_addresses_to_order(order, shipping_address,
                billing_address)

            # The following marks addresses as being default addresses for
            # shipping and billing. For more options (amazon style), we should
            # remove this
            assign_address_to_request(self.request, shipping_address,
                shipping=True)
            assign_address_to_request(self.request, billing_address,
                shipping=False)

            billingshipping_form = \
                self.get_billing_and_shipping_selection_form()
            if billingshipping_form.is_valid():
                self.request.session['payment_backend'] = \
                    billingshipping_form.cleaned_data['payment_method']
                self.request.session['shipping_backend'] = \
                    billingshipping_form.cleaned_data['shipping_method']
                return HttpResponseRedirect(reverse('checkout_shipping'))

        return self.get(self, *args, **kwargs)
Exemplo n.º 3
0
    def post(self, *args, **kwargs):
        """ Called when view is POSTed """
        shipping_form = self.get_shipping_address_form()
        if shipping_form.is_valid():

            # Add the address to the order
            shipping_address = shipping_form.save()
            order = self.create_order_object_from_cart()

            self.save_addresses_to_order(order, shipping_address,
                                         shipping_address)

            assign_address_to_request(self.request, shipping_address)
            assign_address_to_request(self.request, shipping_address,
                                      shipping=False)

            billingshipping_form = (
                self.get_billing_and_shipping_selection_form())
            if billingshipping_form.is_valid():
                self.request.session['payment_backend'] = (
                    billingshipping_form.cleaned_data['payment_method'])
                self.request.session['shipping_backend'] = (
                    billingshipping_form.cleaned_data['shipping_method'])
                payment_instructions_email_notification(
                    order=order,
                    address=shipping_address,
                    request=self.request
                )
                return HttpResponseRedirect(reverse('checkout_shipping'))

        return self.get(self, *args, **kwargs)
Exemplo n.º 4
0
    def post(self, *args, **kwargs):
        """ Called when view is POSTed """
        shipping_form = self.get_shipping_address_form()
        billing_form = self.get_billing_address_form()
        if shipping_form.is_valid() and billing_form.is_valid():

            # Add the address to the order
            shipping_address = shipping_form.save()
            billing_address = billing_form.save()
            order = self.create_order_object_from_cart()

            self.save_addresses_to_order(order, shipping_address,
                                         billing_address)

            # The following marks addresses as being default addresses for
            # shipping and billing. For more options (amazon style), we should
            # remove this
            assign_address_to_request(self.request,
                                      shipping_address,
                                      shipping=True)
            assign_address_to_request(self.request,
                                      billing_address,
                                      shipping=False)

            billingshipping_form = \
                self.get_billing_and_shipping_selection_form()
            if billingshipping_form.is_valid():
                self.request.session['payment_backend'] = \
                    billingshipping_form.cleaned_data['payment_method']
                self.request.session['shipping_backend'] = \
                    billingshipping_form.cleaned_data['shipping_method']
                return HttpResponseRedirect(reverse('checkout_shipping'))

        return self.get(self, *args, **kwargs)
Exemplo n.º 5
0
 def get_billing_address_form(self):
     """
     Initializes and handles the form for the shipping address.
     AddressModel is a model of the type defined in settings.SHOP_ADDRESS_MODEL
     """
     # Try to get the cached version first.
     form = getattr(self, '_billing_form', None)
     initial = {'name':get_user_name_from_request(self.request)}
     if not form:
         
         # Create a dynamic Form class for the model specified as the address model
         form_class = model_forms.modelform_factory(AddressModel,
                                                    exclude=['user_shipping', 'user_billing'])
         if self.request.method == "POST":
             form = form_class(self.request.POST, prefix="bill")
         else:
             # Try to get a shipping address instance from the request (user or session))
             billing_address = get_billing_address_from_request(self.request)
             # We should either have an instance, or None
             if not billing_address:
                 # The user or guest doesn't already have a favorite address.
                 # Instansiate a blank one, and use this as the default value for
                 # the form.
                 billing_address = AddressModel()
                 # Make our new address the default for the User or Guest.
                 assign_address_to_request(self.request, billing_address, shipping=False)
                 
             form = form_class(instance=billing_address, prefix="bill", initial=initial)
             
         
         setattr(self, '_billing_form', form)
         
     return form
Exemplo n.º 6
0
    def post(self, *args, **kwargs):
        """ Called when view is POSTed """
        shipping_form = self.get_shipping_address_form()

        if shipping_form.is_valid():

            # Add the address to the order
            shipping_address = shipping_form.save()
            order = self.create_order_object_from_cart()

            self.save_addresses_to_order(order, shipping_address,
                                         shipping_address)

            assign_address_to_request(self.request, shipping_address)
            assign_address_to_request(self.request,
                                      shipping_address,
                                      shipping=False)

            billingshipping_form = (
                self.get_billing_and_shipping_selection_form())
            if billingshipping_form.is_valid():
                self.request.session['payment_backend'] = (
                    billingshipping_form.cleaned_data['payment_method'])
                self.request.session['shipping_backend'] = (
                    billingshipping_form.cleaned_data['shipping_method'])
                orderextrainfo_form = OrderExtraInfoForm(self.request.POST)
                if orderextrainfo_form.is_valid():
                    orderextrainfo = orderextrainfo_form.save(commit=False)
                    orderextrainfo.order = order
                    orderextrainfo.save()
                payment_instructions_email_notification(
                    order=order,
                    address=shipping_address,
                    request=self.request)
                return HttpResponseRedirect(reverse('checkout_shipping'))

        return self.get(self, *args, **kwargs)
Exemplo n.º 7
0
    def handle_forms(self, js_enabled=None, update_only=None):
        forms = getattr(self, '_forms', None)
        if not forms:
            shipping_form = self.get_shipping_address_form()
            billing_form = self.get_billing_address_form()

            if not update_only and shipping_form.is_valid(
            ) and billing_form.is_valid():
                shipping_address = shipping_form.save()
                billing_address = billing_form.save()
                order = self.create_order_object_from_cart()

                self.save_addresses_to_order(order, shipping_address,
                                             billing_address)

                # The following marks addresses as being default addresses for
                # shipping and billing. For more options (amazon style), we should
                # remove this
                assign_address_to_request(self.request,
                                          shipping_address,
                                          shipping=True)
                assign_address_to_request(self.request,
                                          billing_address,
                                          shipping=False)

            billingshipping_form, shipping_choices_form, payment_choices_form = \
                self.handle_billingshipping_forms(js_enabled, update_only, shipping_form, billing_form)

            self._forms = {
                'shipping_address': shipping_form,
                'billing_address': billing_form,
                'billing_shipping_form': billingshipping_form,
                'shipping_choices_form': shipping_choices_form,
                'payment_choices_form': payment_choices_form
            }
        return self._forms
Exemplo n.º 8
0
 def get_shipping_address_form(self):
     """
     Initializes and handles the form for the shipping address.
     AddressModel is a model of the type defined in settings.SHOP_ADDRESS_MODEL.
     
     The trick here is that we generate a ModelForm for whatever model was 
     passed to us by the SHOP_ADDRESS_MODEL setting, and us this, prefixed, as
     the shipping address form. So this can be as complex or as simple as one wants.
     
     Subclasses of this view can obviously override this method and return any 
     other form instead.
     """
     # Try to get the cached version first.
     form = getattr(self, '_shipping_form', None)
     initial = {'name':get_user_name_from_request(self.request)}
     if not form:
         # Create a dynamic Form class for the model specified as the address model
         form_class = self.get_shipping_form_class()
         
         if self.request.method == "POST":
             form = form_class(self.request.POST, prefix="ship")
         else:
             # Try to get a shipping address instance from the request (user or session))
             shipping_address = get_shipping_address_from_request(self.request)
             # We should either have an instance, or None
             if not shipping_address:
                 # The user or guest doesn't already have a favorite address.
                 # Instanciate a blank one, and use this as the default value for
                 # the form.
                 shipping_address = AddressModel()
                 # Make our new address the default for the User or Guest.
                 assign_address_to_request(self.request, shipping_address, shipping=True)
                 
             form = form_class(instance=shipping_address, prefix="ship", initial=initial)
         setattr(self, '_shipping_form', form)
     return form
Exemplo n.º 9
0
 def test_get_billing_address_from_request_with_preset_and_session(self):
     assign_address_to_request(self.request, self.address, shipping=False)
     res = get_billing_address_from_request(self.request)
     self.assertEqual(res, self.address)
Exemplo n.º 10
0
 def test_get_billing_address_from_request_with_preset_and_user(self):
     setattr(self.request, 'user', self.user)
     assign_address_to_request(self.request, self.address, shipping=False)
     res = get_billing_address_from_request(self.request)
     self.assertEqual(res, self.address)
Exemplo n.º 11
0
 def test_get_billing_address_from_request_with_preset_and_session(self):
     assign_address_to_request(self.request, self.address, shipping=False)
     res = get_billing_address_from_request(self.request)
     self.assertEqual(res, self.address)
Exemplo n.º 12
0
 def test_get_billing_address_from_request_with_preset_and_user(self):
     setattr(self.request, 'user', self.user)
     assign_address_to_request(self.request, self.address, shipping=False)
     res = get_billing_address_from_request(self.request)
     self.assertEqual(res, self.address)
Exemplo n.º 13
0
 def test_get_shipping_address_from_request_with_preset_and_user(self):
     setattr(self.request, "user", self.user)
     assign_address_to_request(self.request, self.address, shipping=True)
     res = get_shipping_address_from_request(self.request)
     self.assertEqual(res, self.address)