def create_from_cart(self, cart): """ This creates a new Order object (and all the rest) from a passed Cart object. Specifically, it creates an Order with corresponding OrderItems and eventually corresponding ExtraPriceFields This will only actually commit the transaction once the function exits to minimize useless database access. Emits the ``processing`` signal. """ # must be imported here! from shop.models.ordermodel import ExtraOrderItemPriceField, ExtraOrderPriceField, OrderItem from shop.models.cartmodel import CartItem # Let's create the Order itself: order = self.model() order.user = cart.user order.status = self.model.PROCESSING # Processing order.order_subtotal = cart.subtotal_price order.order_total = cart.total_price order.save() # Let's serialize all the extra price arguments in DB for label, value in cart.extra_price_fields: eoi = ExtraOrderPriceField() eoi.order = order eoi.label = str(label) eoi.value = value eoi.save() # There, now move on to the order items. cart_items = CartItem.objects.filter(cart=cart) for item in cart_items: item.update(cart) order_item = OrderItem() order_item.order = order order_item.product_reference = item.product.id order_item.product_name = item.product.get_name() order_item.product = item.product order_item.unit_price = item.product.get_price() order_item.quantity = item.quantity order_item.line_total = item.line_total order_item.line_subtotal = item.line_subtotal order_item.save() # For each order item, we save the extra_price_fields to DB for label, value in item.extra_price_fields: eoi = ExtraOrderItemPriceField() eoi.order_item = order_item # Force unicode, in case it has àö... eoi.label = unicode(label) eoi.value = value eoi.save() processing.send(self.model, order=order, cart=cart) return order
def create_from_cart(self, cart): """ This creates a new Order object (and all the rest) from a passed Cart object. Specifically, it creates an Order with corresponding OrderItems and eventually corresponding ExtraPriceFields This will only actually commit the transaction once the function exits to minimize useless database access. """ # must be imported here! from shop.models.ordermodel import ( ExtraOrderItemPriceField, ExtraOrderPriceField, OrderItem, ) from shop.models.cartmodel import CartItem # Let's create the Order itself: o = self.model() o.user = cart.user o.status = self.model.PROCESSING # Processing o.order_subtotal = cart.subtotal_price o.order_total = cart.total_price o.save() # Let's serialize all the extra price arguments in DB for label, value in cart.extra_price_fields: eoi = ExtraOrderPriceField() eoi.order = o eoi.label = str(label) eoi.value = value eoi.save() # There, now move on to the order items. cart_items = CartItem.objects.filter(cart=cart) for item in cart_items: item.update(cart) i = OrderItem() i.order = o i.product_reference = item.product.id i.product_name = item.product.get_name() i.product = item.product i.unit_price = item.product.get_price() i.quantity = item.quantity i.line_total = item.line_total i.line_subtotal = item.line_subtotal i.save() # For each order item, we save the extra_price_fields to DB for label, value in item.extra_price_fields: eoi = ExtraOrderItemPriceField() eoi.order_item = i # Force unicode, in case it has àö... eoi.label = unicode(label) eoi.value = value eoi.save() return o
def create_from_cart(self, cart, request): """ This creates a new Order object (and all the rest) from a passed Cart object. Specifically, it creates an Order with corresponding OrderItems and eventually corresponding ExtraPriceFields This will only actually commit the transaction once the function exits to minimize useless database access. The `state` parameter is further passed to process_cart_item, process_cart, and post_process_cart, so it can be used as a way to store per-request arbitrary information. Emits the ``processing`` signal. """ # must be imported here! from shop.models.ordermodel import ( ExtraOrderItemPriceField, ExtraOrderPriceField, OrderItem, ) from shop.models.cartmodel import CartItem # First, let's remove old orders self.remove_old_orders(cart) # Create an empty order object order = self.create_order_object(cart, request) order.save() # Let's serialize all the extra price arguments in DB for field in cart.extra_price_fields: eoi = ExtraOrderPriceField() eoi.order = order eoi.label = unicode(field[0]) eoi.value = field[1] if len(field) == 3: eoi.data = field[2] eoi.save() # There, now move on to the order items. cart_items = CartItem.objects.filter(cart=cart) for item in cart_items: item.update(request) order_item = OrderItem() order_item.order = order order_item.product_reference = item.product.get_product_reference() order_item.product_name = item.product.get_name() order_item.product = item.product order_item.unit_price = item.product.get_price() order_item.quantity = item.quantity order_item.line_total = item.line_total order_item.line_subtotal = item.line_subtotal order_item.save() # For each order item, we save the extra_price_fields to DB for field in item.extra_price_fields: eoi = ExtraOrderItemPriceField() eoi.order_item = order_item # Force unicode, in case it has àö... eoi.label = unicode(field[0]) eoi.value = field[1] if len(field) == 3: eoi.data = field[2] eoi.save() processing.send(self.model, order=order, cart=cart) return order
def create_fixtures(self): self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name = "Toto") self.user.save() self.client = Client() self.client.user = self.user self.client.save() self.country = Country.objects.create(name='CH') self.address = Address() self.address.client = self.client self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = False self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.client = self.client self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save() # The order fixture self.order = Order() self.order.user = self.user self.order.order_subtotal = Decimal('100') # One item worth 100 self.order.order_total = Decimal('120') # plus a test field worth 10 self.order.status = Order.PROCESSING ship_address = self.address bill_address = self.address2 self.order.shipping_name = "%s %s" %(self.address.client.user.first_name, self.address.client.user.last_name) self.order.shipping_address = ship_address.address self.order.shipping_address2 = ship_address.address2 self.order.shipping_zip_code = ship_address.zip_code self.order.shipping_state = ship_address.state self.order.shipping_country = ship_address.country.name self.order.shipping_name = "%s %s" %(self.address.client.user.first_name, self.address.client.user.last_name) self.order.billing_address = bill_address.address self.order.billing_address2 = bill_address.address2 self.order.billing_zip_code = bill_address.zip_code self.order.billing_state = bill_address.state self.order.billing_country = bill_address.country.name self.order.save() # Orderitems self.orderitem = OrderItem() self.orderitem.order = self.order self.orderitem.product_reference = 'fakeref' self.orderitem.product_name = 'Test item' self.orderitem.unit_price = Decimal("100") self.orderitem.quantity = 1 self.orderitem.line_subtotal = Decimal('100') self.orderitem.line_total = Decimal('110') self.orderitem.save() eoif = ExtraOrderItemPriceField() eoif.order_item = self.orderitem eoif.label = 'Fake extra field' eoif.value = Decimal("10") eoif.save() eof = ExtraOrderPriceField() eof.order = self.order eof.label = "Fake Taxes" eof.value = Decimal("10") eof.save()
def setUp(self): self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.user.save() self.country = Country.objects.create(name='CH') self.address = Address() self.address.client = self.client self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = False self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.client = self.client self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save() # The order fixture self.order = Order() self.order.user = self.user self.order.order_subtotal = Decimal('100') # One item worth 100 self.order.order_total = Decimal('120') # plus a test field worth 10 self.order.status = Order.PROCESSING ship_address = self.address bill_address = self.address2 self.order.set_shipping_address(ship_address) self.order.set_billing_address(bill_address) self.order.save() # Orderitems self.orderitem = OrderItem() self.orderitem.order = self.order self.orderitem.product_name = 'Test item' self.orderitem.unit_price = Decimal("100") self.orderitem.quantity = 1 self.orderitem.line_subtotal = Decimal('100') self.orderitem.line_total = Decimal('110') self.orderitem.save() eoif = ExtraOrderItemPriceField() eoif.order_item = self.orderitem eoif.label = 'Fake extra field' eoif.value = Decimal("10") eoif.save() eof = ExtraOrderPriceField() eof.order = self.order eof.label = "Fake Taxes" eof.value = Decimal("10") eof.save()
def setUp(self): self.user = User.objects.create( username="******", email="*****@*****.**", first_name="Test", last_name="User") self.shop = PaymentAPI() self.backend = GenericPayerBackend(shop=self.shop) class Mock(object): pass self.request = Mock() setattr(self.request, 'user', self.user) self.user.save() self.country = Country.objects.create(name='CH') self.address = AddressModel() self.address.client = self.client self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = False self.address.is_shipping = True self.address.save() self.address2 = AddressModel() self.address2.client = self.client self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save() # The order fixture self.order = Order() self.order.user = self.user self.order.order_subtotal = Decimal('100') # One item worth 100 self.order.order_total = Decimal('120') # plus a test field worth 10 self.order.status = Order.PROCESSING ship_address = self.address bill_address = self.address2 self.order.set_shipping_address(ship_address) self.order.set_billing_address(bill_address) self.order.save() # Orderitems self.orderitem = OrderItem() self.orderitem.order = self.order self.orderitem.product_name = 'Test item' self.orderitem.unit_price = Decimal("100") self.orderitem.quantity = 1 self.orderitem.line_subtotal = Decimal('100') self.orderitem.line_total = Decimal('110') self.orderitem.save() oi = OrderExtraInfo() oi.order = self.order oi.text = "buffalo " * 64 oi.save() eoif = ExtraOrderItemPriceField() eoif.order_item = self.orderitem eoif.label = 'Fake extra field' eoif.value = Decimal("10") eoif.save() eof = ExtraOrderPriceField() eof.order = self.order eof.label = "Fake Taxes" eof.value = Decimal("10") eof.save()
def setUp(self): self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="User") self.shop = PaymentAPI() self.backend = GenericPayerBackend(shop=self.shop) class Mock(object): pass self.request = Mock() setattr(self.request, 'user', self.user) self.user.save() self.country = Country.objects.create(name='CH') self.address = AddressModel() self.address.client = self.client self.address.address = 'address' self.address.address2 = 'address2' self.address.zip_code = '1234' self.address.state = 'ZH' self.address.country = self.country self.address.is_billing = False self.address.is_shipping = True self.address.save() self.address2 = AddressModel() self.address2.client = self.client self.address2.address = '2address' self.address2.address2 = '2address2' self.address2.zip_code = '21234' self.address2.state = '2ZH' self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save() # The order fixture self.order = Order() self.order.user = self.user self.order.order_subtotal = Decimal('100') # One item worth 100 self.order.order_total = Decimal('120') # plus a test field worth 10 self.order.status = Order.PROCESSING ship_address = self.address bill_address = self.address2 self.order.set_shipping_address(ship_address) self.order.set_billing_address(bill_address) self.order.save() # Orderitems self.orderitem = OrderItem() self.orderitem.order = self.order self.orderitem.product_name = 'Test item' self.orderitem.unit_price = Decimal("100") self.orderitem.quantity = 1 self.orderitem.line_subtotal = Decimal('100') self.orderitem.line_total = Decimal('110') self.orderitem.save() oi = OrderExtraInfo() oi.order = self.order oi.text = "buffalo " * 64 oi.save() eoif = ExtraOrderItemPriceField() eoif.order_item = self.orderitem eoif.label = 'Fake extra field' eoif.value = Decimal("10") eoif.save() eof = ExtraOrderPriceField() eof.order = self.order eof.label = "Fake Taxes" eof.value = Decimal("10") eof.save()
def setUp(self): self.user = User.objects.create(username="******", email="*****@*****.**", first_name="Test", last_name="Toto") self.user.save() self.country = Country.objects.create(name="CH") self.address = Address() self.address.client = self.client self.address.address = "address" self.address.address2 = "address2" self.address.zip_code = "1234" self.address.state = "ZH" self.address.country = self.country self.address.is_billing = False self.address.is_shipping = True self.address.save() self.address2 = Address() self.address2.client = self.client self.address2.address = "2address" self.address2.address2 = "2address2" self.address2.zip_code = "21234" self.address2.state = "2ZH" self.address2.country = self.country self.address2.is_billing = True self.address2.is_shipping = False self.address2.save() # The order fixture self.order = Order() self.order.user = self.user self.order.order_subtotal = Decimal("100") # One item worth 100 self.order.order_total = Decimal("120") # plus a test field worth 10 self.order.status = Order.PROCESSING ship_address = self.address bill_address = self.address2 self.order.set_shipping_address(ship_address) self.order.set_billing_address(bill_address) self.order.save() # Orderitems self.orderitem = OrderItem() self.orderitem.order = self.order self.orderitem.product_name = "Test item" self.orderitem.unit_price = Decimal("100") self.orderitem.quantity = 1 self.orderitem.line_subtotal = Decimal("100") self.orderitem.line_total = Decimal("110") self.orderitem.save() eoif = ExtraOrderItemPriceField() eoif.order_item = self.orderitem eoif.label = "Fake extra field" eoif.value = Decimal("10") eoif.save() eof = ExtraOrderPriceField() eof.order = self.order eof.label = "Fake Taxes" eof.value = Decimal("10") eof.save()