예제 #1
0
    def save(self, commit=True):

        if self.cleaned_data.get('billing_option') == self.SAME_AS_SHIPPING:
            # Convert shipping address into billing address
            billing_addr = BillingAddress()
            self.shipping_address.populate_alternative_model(billing_addr)
            if commit:
                billing_addr.save()
            return billing_addr
        else:
            address = super(BillingAddressForm, self).save(commit=False)
            try:
                address = UserAddress.objects.get(
                    user=self.instance.user,
                    hash=address.generate_hash())
                    
                last_address = UserAddress.objects.get(user=self.instance.user, is_default_for_billing=True)
                last_address.is_default_for_billing = False
                
                address.is_default_for_billing = True
                address.save()
                
            except UserAddress.DoesNotExist:
                address.is_default_for_billing = True
                address.save()
            return address
예제 #2
0
 def save(self, commit=True):
     if self.cleaned_data.get('same_as_shipping') == self.SAME_AS_SHIPPING:
         # Convert shipping address into billing address
         billing_addr = BillingAddress()
         self.shipping_address.populate_alternative_model(billing_addr)
         if commit:
             billing_addr.save()
         return billing_addr
     return super(BillingAddressForm, self).save(commit)
예제 #3
0
 def save(self, commit=True):
     if self.cleaned_data.get('same_as_shipping') == self.SAME_AS_SHIPPING:
         # Convert shipping address into billing address
         billing_addr = BillingAddress()
         self.shipping_address.populate_alternative_model(billing_addr)
         if commit:
             billing_addr.save()
         return billing_addr
     return super(BillingAddressForm, self).save(commit)
    def test_get_fields_billing(self):
        scaffold = Scaffold()

        address = BillingAddress(
            first_name='First Name',
            last_name='Last Name',
            line1='First Line Address',
            line4='Bruxelles',
            postcode='1000',
            country_id='BE')

        order_data = {
            'billing_address': address
        }
        fields = scaffold.get_fields_billing(None, order_data)

        assert Constants.BILLING_STREET in fields
        assert Constants.BILLING_NUMBER in fields
        assert Constants.BILLING_CITY in fields
        assert Constants.BILLING_POSTCODE in fields
        assert Constants.BILLING_STATE in fields
        assert Constants.BILLING_COUNTRY in fields

        assert fields[Constants.BILLING_STREET] == address.line1
        assert fields[Constants.BILLING_NUMBER] == '.', (
            'Since Oscar does not provide a street number we set a fake value')
        assert fields[Constants.BILLING_CITY] == address.city
        assert fields[Constants.BILLING_POSTCODE] == address.postcode
        assert fields[Constants.BILLING_STATE] == address.state
        assert fields[Constants.BILLING_COUNTRY] == address.country_id
예제 #5
0
 def save(self, commit=True):
     if self.cleaned_data.get('billing_option') == self.SAME_AS_SHIPPING:
         # Convert shipping address into billing address
         billing_addr = BillingAddress()
         self.shipping_address.populate_alternative_model(billing_addr)
         if commit:
             billing_addr.save()
         return billing_addr
     else:
         address = super(BillingAddressForm, self).save(commit=False)
         try:
             address = UserAddress.objects.get(
                 user=self.instance.user,
                 hash=address.generate_hash())
         except UserAddress.DoesNotExist:
             address.is_default_for_billing = True
             address.save()
         return address
예제 #6
0
파일: views.py 프로젝트: wadadaaa/jerusomar
 def get_billing_address_form(self, shipping_address):
     """
     Return an instantiated billing address form
     """
     addr = self.get_default_billing_address()
     if not addr:
         return BillingAddressForm(shipping_address=shipping_address)
     billing_addr = BillingAddress()
     addr.populate_alternative_model(billing_addr)
     return BillingAddressForm(shipping_address=shipping_address,
                               instance=billing_addr)
예제 #7
0
파일: views.py 프로젝트: yrobla/piezas
    def post(self, request, *args, **kwargs):
        quote_id = request.POST.get('quote_id', '')
        line_ids = request.POST.get('ids', '').split(',')
        payment_method = request.POST.get('payment_method', 'payondelivery')

        quote = models.Quote.objects.get(pk=quote_id)
        if self.request.user.id != quote.search_request.owner.id:
            raise PermissionDenied()

        response_data = {}
        if quote and line_ids and len(line_ids)>0:
            base_total = 0
            for line_id in line_ids:
                line = models.QuoteItem.objects.get(pk=line_id)
                base_total += line.base_total_excl_tax

            # create order
            order = Order()
            order.number = quote.id
            order.user = request.user
            order.site = Site.objects.get_current()
                
            order.currency = 'EUR'
            order.status = 'pending_payment'

            # get totals
            order.total_excl_tax = base_total
            order.total_incl_tax = float(base_total) + float(base_total*settings.TPC_TAX/100)
            order.shipping_excl_tax = quote.shipping_total_excl_tax
            order.shipping_incl_tax = quote.shipping_total_incl_tax

            # payment method
            order.payment_method = payment_method
            if payment_method == 'transfer':
                order.bank_account = quote.owner.iban
            order.save()

            # create order lines
            for line_id in line_ids:
                order_line = Line()
                order_line.order = order
                line = models.QuoteItem.objects.get(pk=line_id)

                # check if owner is partner, if not, create it
                try:
                    partner = Partner.objects.get(code=quote.owner.cif)
                except:
                    partner = Partner()
                    partner.code = quote.owner.cif
                    partner.name = quote.owner.commercial_name
                    partner.save()
                    
                order_line.partner = partner
                order_line.partner_name = quote.owner.commercial_name
                order_line.partner_sku = quote.owner.cif
                order_line.title = line.search_item_request
                order_line.upc = line.search_item_request.id
                order_line.product = line.search_item_request.piece
                order_line.quantity = 1

                order_line.unit_price_excl_tax = line.base_total_excl_tax
                order_line.line_price_excl_tax = line.base_total_excl_tax
                order_line.line_price_incl_tax = float(line.base_total_excl_tax) + float(line.base_total_excl_tax*settings.TPC_TAX/100)

                order_line.line_price_before_discounts_incl_tax = float(line.base_total_excl_tax) + float(line.base_total_excl_tax*settings.TPC_TAX/100)
                order_line.line_price_before_discounts_excl_tax = line.base_total_excl_tax
                order_line.save()
                

            # create addresses
            shipping_address = ShippingAddress()
            shipping_address.__dict__ = request.user.get_default_shipping_address().__dict__
            shipping_address.save()
            order.shipping_address = shipping_address

            # get user address
            billing_address = BillingAddress()
            if request.user.get_default_billing_address():
                billing_address.__dict__ = request.user.get_default_billing_address().__dict__
            else:
                billing_address.__dict__ = request.user.get_default_shipping_address().__dict__
            billing_address.save()
            order.billing_address = billing_address
            order.save()

            # associate order with quote
            quote.order = order
            quote.state = 'accepted'
            quote.date_accepted = datetime.now()
            quote.save()

            # mark all the lines as accepted or rejected
            for line in quote.lines:
                if unicode(line.id) in line_ids:
                    line.state = 'accepted'
                else:
                    line.state = 'rejected'
                line.save()
            response_data['result'] = 'OK'
        else:
            response_data['result'] = 'KO'
            response_data['error'] = _('There has been an error processing your request. Please try again.')

        return HttpResponse(json.dumps(response_data), content_type="application/json")