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
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)
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
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)
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)
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'
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")