Example #1
0
    def get_shipping_address(self):
        addr_data = self.checkout_session.new_shipping_address_fields()
        if addr_data:
            return ShippingAddress(**addr_data)

        addr_id = self.checkout_session.user_address_id()
        if addr_id:
            # Create shipping address from an existing user address
            user_addr = UserAddress.objects.get(id=addr_id)
            shipping_addr = ShippingAddress()
            user_addr.populate_alternative_model(shipping_addr)
            return shipping_addr
Example #2
0
 def test_populated_shipping_address_has_same_summary_user_address(self):
     a = factories.UserAddressFactory.build(country=self.country,
                                            user=self.user)
     a.clean()
     sa = ShippingAddress()
     a.populate_alternative_model(sa)
     self.assertEqual(sa.summary, a.summary)
Example #3
0
 def test_populate_shipping_address_doesnt_set_id(self):
     a = factories.UserAddressFactory.build(country=self.country,
                                            user=self.user)
     a.clean()
     sa = ShippingAddress()
     a.populate_alternative_model(sa)
     self.assertIsNone(sa.id)
    def test_get_fields_delivery(self):
        scaffold = Scaffold()

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

        order_data = {
            'shipping_address': address
        }
        fields = scaffold.get_fields_delivery(None, order_data)

        assert Constants.DELIVERY_STREET in fields
        assert Constants.DELIVERY_NUMBER in fields
        assert Constants.DELIVERY_CITY in fields
        assert Constants.DELIVERY_POSTCODE in fields
        assert Constants.DELIVERY_STATE in fields
        assert Constants.DELIVERY_COUNTRY in fields

        assert fields[Constants.DELIVERY_STREET] == address.line1
        assert fields[Constants.DELIVERY_NUMBER] == '.', (
            'Since Oscar does not provide a street number we set a fake value')
        assert fields[Constants.DELIVERY_CITY] == address.city
        assert fields[Constants.DELIVERY_POSTCODE] == address.postcode
        assert fields[Constants.DELIVERY_STATE] == address.state
        assert fields[Constants.DELIVERY_COUNTRY] == address.country_id
Example #5
0
 def test_populated_shipping_address_has_same_summary_user_address(self):
     a = UserAddress(first_name=" Terry  ",
                     last_name='Barrington',
                     line1="  75 Smith Road  ",
                     postcode="  n4 8ty",
                     country=self.country,
                     user=self.user)
     sa = ShippingAddress()
     a.populate_alternative_model(sa)
     self.assertEquals(sa.summary, a.summary)
Example #6
0
 def test_populate_shipping_address_doesnt_set_id(self):
     a = UserAddress(first_name=" Terry  ",
                     last_name='Barrington',
                     line1="  75 Smith Road  ",
                     postcode="  n4 8ty",
                     country=self.country,
                     user=self.user)
     sa = ShippingAddress()
     a.populate_alternative_model(sa)
     self.assertIsNone(sa.id)
Example #7
0
    def test_get_street_housenr(self):
        scaffold = Scaffold()
        address = ShippingAddress(first_name='First Name',
                                  last_name='Last Name',
                                  line1='First Line Address 1',
                                  line4='Bruxelles',
                                  postcode='1000',
                                  country_id='BE')

        street, housenr = scaffold.get_street_housenr(address)
        assert housenr == '1'

        address.line1 = 'First Line Address'
        address.line2 = '1'
        street, housenr = scaffold.get_street_housenr(address)
        assert housenr == '1'

        address.line1 = 'First Line'
        address.line2 = 'Address'
        address.line3 = '1'
        street, housenr = scaffold.get_street_housenr(address)
        assert housenr == '1'
    def test_get_street_housenr(self):
        scaffold = Scaffold()
        address = ShippingAddress(
            first_name='First Name',
            last_name='Last Name',
            line1='First Line Address 1',
            line4='Bruxelles',
            postcode='1000',
            country_id='BE')

        street, housenr = scaffold.get_street_housenr(address)
        assert housenr == '1'

        address.line1 = 'First Line Address'
        address.line2 = '1'
        street, housenr = scaffold.get_street_housenr(address)
        assert housenr == '1'

        address.line1 = 'First Line'
        address.line2 = 'Address'
        address.line3 = '1'
        street, housenr = scaffold.get_street_housenr(address)
        assert housenr == '1'
Example #9
0
    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")