def ShippingMethodsVocabulary(context): try: items = Shippings(context).vocab except KeyError: # happens GS profile application if registry entries not present yet return AvailableShippingMethodsVocabulary(context) return SimpleVocabulary([SimpleTerm(value=k, title=v) for k, v in items])
def shipping(self, items): shippings = Shippings(self.context) shipping = shippings.get(self.shipping_method) try: return { 'label': shipping.label, 'description': shipping.description, 'net': shipping.net(items), 'vat': shipping.vat(items), } # B/C for bda.plone.shipping < 0.4 except NotImplementedError: return { 'label': shipping.label, 'description': shipping.description, 'net': shipping.calculate(items), 'vat': Decimal(0), }
def save(self, providers, widget, data): super(OrderCheckoutAdapter, self).save(providers, widget, data) creator = None member = plone.api.user.get_current() if member: creator = member.getId() created = datetime.datetime.now() order = self.order # XXX: payment name # payment type # payment total # shipping name # shipping vat sid = data.fetch('checkout.shipping_selection.shipping').extracted shipping = Shippings(self.context).get(sid) order.attrs['shipping'] = shipping.calculate(self.items) uid = order.attrs['uid'] = uuid.uuid4() order.attrs['creator'] = creator order.attrs['created'] = created bookings = self.create_bookings(order) booking_uids = list() vendor_uids = set() for booking in bookings: booking_uids.append(booking.attrs['uid']) vendor_uids.add(booking.attrs['vendor_uid']) order.attrs['booking_uids'] = booking_uids order.attrs['vendor_uids'] = list(vendor_uids) cart_data = get_data_provider(self.context) cart_discount = cart_data.discount(self.items) order.attrs['cart_discount_net'] = cart_discount['net'] order.attrs['cart_discount_vat'] = cart_discount['vat'] orders_soup = get_orders_soup(self.context) ordernumber = create_ordernumber() while self.ordernumber_exists(orders_soup, ordernumber): ordernumber = create_ordernumber() order.attrs['ordernumber'] = ordernumber orders_soup.add(order) bookings_soup = get_bookings_soup(self.context) for booking in bookings: bookings_soup.add(booking) return uid
def save(self, providers, widget, data): super(OrderCheckoutAdapter, self).save(providers, widget, data) order = self.order # order UUID uid = order.attrs['uid'] = uuid.uuid4() # order creator creator = None member = plone.api.user.get_current() if member: creator = member.getId() order.attrs['creator'] = creator # order creation date created = datetime.datetime.now() order.attrs['created'] = created cart_data = get_data_provider(self.context, self.request) # payment related information if cart_data.total > Decimal(0): payment_param = 'checkout.payment_selection.payment' pid = data.fetch(payment_param).extracted payment = Payments(self.context).get(pid) order.attrs['payment_method'] = pid if payment: order.attrs['payment_label'] = payment.label else: order.attrs['payment_label'] = _('unknown', default=u'Unknown') # no payment else: order.attrs['payment_method'] = 'no_payment' order.attrs['payment_label'] = _('no_payment', default=u'No Payment') # shipping related information if cart_data.include_shipping_costs: shipping_param = 'checkout.shipping_selection.shipping' sid = data.fetch(shipping_param).extracted shipping = Shippings(self.context).get(sid) order.attrs['shipping_method'] = sid order.attrs['shipping_label'] = shipping.label order.attrs['shipping_description'] = shipping.description try: shipping_net = shipping.net(self.items) shipping_vat = shipping.vat(self.items) order.attrs['shipping_net'] = shipping_net order.attrs['shipping_vat'] = shipping_vat order.attrs['shipping'] = shipping_net + shipping_vat # B/C for bda.plone.shipping < 0.4 except NotImplementedError: shipping_net = shipping.calculate(self.items) order.attrs['shipping_net'] = shipping_net order.attrs['shipping_vat'] = Decimal(0) order.attrs['shipping'] = shipping_net # no shipping else: order.attrs['shipping_method'] = 'no_shipping' order.attrs['shipping_label'] = _('no_shipping', default=u'No Shipping') order.attrs['shipping_description'] = '' order.attrs['shipping_net'] = Decimal(0) order.attrs['shipping_vat'] = Decimal(0) order.attrs['shipping'] = Decimal(0) # create order bookings bookings = self.create_bookings(order) # set order state, needed for sorting in orders table order.attrs['state'] = calculate_order_state(bookings) # set order salaried, needed for sorting in orders table order.attrs['salaried'] = ifaces.SALARIED_NO # lookup booking uids, buyable uids and vendor uids booking_uids = list() buyable_uids = list() vendor_uids = set() for booking in bookings: booking_uids.append(booking.attrs['uid']) buyable_uids.append(booking.attrs['buyable_uid']) vendor_uids.add(booking.attrs['vendor_uid']) order.attrs['booking_uids'] = booking_uids order.attrs['buyable_uids'] = buyable_uids order.attrs['vendor_uids'] = list(vendor_uids) # cart discount related information # XXX: in order to be able to reliably modify orders, cart discount # rules for this order must be stored instead of the actual # calculated discount. cart_discount = cart_data.discount(self.items) order.attrs['cart_discount_net'] = cart_discount['net'] order.attrs['cart_discount_vat'] = cart_discount['vat'] # create ordernumber orders_soup = get_orders_soup(self.context) ordernumber = create_ordernumber() while self.ordernumber_exists(orders_soup, ordernumber): ordernumber = create_ordernumber() order.attrs['ordernumber'] = ordernumber # add order orders_soup.add(order) # add bookings bookings_soup = get_bookings_soup(self.context) # list containing items where stock threshold has been reached stock_threshold_reached_items = list() for booking in bookings: bookings_soup.add(booking) buyable = get_object_by_uid( self.context, booking.attrs['buyable_uid'] ) item_stock = get_item_stock(buyable) # no stock applied if item_stock is None: stock_warning_threshold = None else: stock_warning_threshold = item_stock.stock_warning_threshold if stock_warning_threshold: remaining = booking.attrs['remaining_stock_available'] # stock threshold has been reached if remaining <= stock_warning_threshold: stock_threshold_reached_items.append(booking.attrs) if stock_threshold_reached_items: event = events.StockThresholdReached( self.context, self.request, order.attrs['uid'], stock_threshold_reached_items, ) notify(event) # return uid of added order return uid
def shipping(self, items): shippings = Shippings(self.context) shipping = shippings.get(self.shipping_method) return shipping.calculate(items)
def AvailableShippingMethodsVocabulary(context): shippings = Shippings(context).shippings items = [(shipping.sid, shipping.label) for shipping in shippings] return SimpleVocabulary([SimpleTerm(value=k, title=v) for k, v in items])
def save(self, providers, widget, data): super(OrderCheckoutAdapter, self).save(providers, widget, data) order = self.order # order UUID uid = order.attrs['uid'] = uuid.uuid4() # order creator creator = None member = plone.api.user.get_current() if member: creator = member.getId() order.attrs['creator'] = creator # order creation date created = datetime.datetime.now() order.attrs['created'] = created cart_data = get_data_provider(self.context, self.request) # payment related information if cart_data.total > Decimal(0): payment_param = 'checkout.payment_selection.payment' pid = data.fetch(payment_param).extracted payment = Payments(self.context).get(pid) order.attrs['payment_method'] = pid if payment: order.attrs['payment_label'] = payment.label else: order.attrs['payment_label'] = _('unknown', default=u'Unknown') # no payment else: order.attrs['payment_method'] = 'no_payment' order.attrs['payment_label'] = _('no_payment', default=u'No Payment') # shipping related information if cart_data.include_shipping_costs: shipping_param = 'checkout.shipping_selection.shipping' sid = data.fetch(shipping_param).extracted shipping = Shippings(self.context).get(sid) order.attrs['shipping_method'] = sid order.attrs['shipping_label'] = shipping.label order.attrs['shipping_description'] = shipping.description try: shipping_net = shipping.net(self.items) shipping_vat = shipping.vat(self.items) order.attrs['shipping_net'] = shipping_net order.attrs['shipping_vat'] = shipping_vat order.attrs['shipping'] = shipping_net + shipping_vat # B/C for bda.plone.shipping < 0.4 except NotImplementedError: shipping_net = shipping.calculate(self.items) order.attrs['shipping_net'] = shipping_net order.attrs['shipping_vat'] = Decimal(0) order.attrs['shipping'] = shipping_net # no shipping else: order.attrs['shipping_method'] = 'no_shipping' order.attrs['shipping_label'] = _('no_shipping', default=u'No Shipping') order.attrs['shipping_description'] = '' order.attrs['shipping_net'] = Decimal(0) order.attrs['shipping_vat'] = Decimal(0) order.attrs['shipping'] = Decimal(0) # create order bookings bookings = self.create_bookings(order) # set order state, needed for sorting in orders table order.attrs['state'] = calculate_order_state(bookings) # set order salaried, needed for sorting in orders table order.attrs['salaried'] = ifaces.SALARIED_NO # lookup booking uids, buyable uids and vendor uids booking_uids = list() buyable_uids = list() vendor_uids = set() for booking in bookings: booking_uids.append(booking.attrs['uid']) buyable_uids.append(booking.attrs['buyable_uid']) vendor_uids.add(booking.attrs['vendor_uid']) order.attrs['booking_uids'] = booking_uids order.attrs['buyable_uids'] = buyable_uids order.attrs['vendor_uids'] = list(vendor_uids) # cart discount related information cart_discount = cart_data.discount(self.items) order.attrs['cart_discount_net'] = cart_discount['net'] order.attrs['cart_discount_vat'] = cart_discount['vat'] # create ordernumber orders_soup = get_orders_soup(self.context) ordernumber = create_ordernumber() while self.ordernumber_exists(orders_soup, ordernumber): ordernumber = create_ordernumber() order.attrs['ordernumber'] = ordernumber # add order orders_soup.add(order) # add bookings bookings_soup = get_bookings_soup(self.context) # list containing items where stock threshold has been reached stock_threshold_reached_items = list() for booking in bookings: bookings_soup.add(booking) buyable = get_object_by_uid(self.context, booking.attrs['buyable_uid']) item_stock = get_item_stock(buyable) # no stock applied if item_stock is None: stock_warning_threshold = None else: stock_warning_threshold = item_stock.stock_warning_threshold if stock_warning_threshold: remaining = booking.attrs['remaining_stock_available'] # stock threshold has been reached if remaining <= stock_warning_threshold: stock_threshold_reached_items.append(booking.attrs) if stock_threshold_reached_items: event = events.StockThresholdReached( self.context, self.request, order.attrs['uid'], stock_threshold_reached_items, ) notify(event) # return uid of added order return uid
def save(self, providers, widget, data): super(OrderCheckoutAdapter, self).save(providers, widget, data) order = self.order # order UUID uid = order.attrs['uid'] = uuid.uuid4() # order creator creator = None member = plone.api.user.get_current() if member: creator = member.getId() order.attrs['creator'] = creator # order creation date created = datetime.datetime.now() order.attrs['created'] = created cart_data = get_data_provider(self.context, self.request) # payment related information if cart_data.total > Decimal(0): payment_param = 'checkout.payment_selection.payment' pid = data.fetch(payment_param).extracted payment = Payments(self.context).get(pid) order.attrs['payment_method'] = pid if payment: order.attrs['payment_label'] = payment.label else: order.attrs['payment_label'] = _('unknown', default=u'Unknown') # no payment else: order.attrs['payment_method'] = 'no_payment' order.attrs['payment_label'] = _('no_payment', default=u'No Payment') # shipping related information if cart_data.include_shipping_costs: shipping_param = 'checkout.shipping_selection.shipping' sid = data.fetch(shipping_param).extracted shipping = Shippings(self.context).get(sid) order.attrs['shipping_method'] = sid order.attrs['shipping_label'] = shipping.label order.attrs['shipping_description'] = shipping.description try: shipping_net = shipping.net(self.items) shipping_vat = shipping.vat(self.items) order.attrs['shipping_net'] = shipping_net order.attrs['shipping_vat'] = shipping_vat order.attrs['shipping'] = shipping_net + shipping_vat # B/C for bda.plone.shipping < 0.4 except NotImplementedError: shipping_net = shipping.calculate(self.items) order.attrs['shipping_net'] = shipping_net order.attrs['shipping_vat'] = Decimal(0) order.attrs['shipping'] = shipping_net # no shipping else: order.attrs['shipping_method'] = 'no_shipping' order.attrs['shipping_label'] = _('no_shipping', default=u'No Shipping') order.attrs['shipping_description'] = '' order.attrs['shipping_net'] = Decimal(0) order.attrs['shipping_vat'] = Decimal(0) order.attrs['shipping'] = Decimal(0) # create order bookings bookings = self.create_bookings(order) # lookup booking uids, buyable uids and vendor uids booking_uids = list() buyable_uids = list() vendor_uids = set() for booking in bookings: booking_uids.append(booking.attrs['uid']) buyable_uids.append(booking.attrs['buyable_uid']) vendor_uids.add(booking.attrs['vendor_uid']) order.attrs['booking_uids'] = booking_uids order.attrs['buyable_uids'] = buyable_uids order.attrs['vendor_uids'] = list(vendor_uids) # cart discount related information cart_discount = cart_data.discount(self.items) order.attrs['cart_discount_net'] = cart_discount['net'] order.attrs['cart_discount_vat'] = cart_discount['vat'] # create ordernumber orders_soup = get_orders_soup(self.context) ordernumber = create_ordernumber() while self.ordernumber_exists(orders_soup, ordernumber): ordernumber = create_ordernumber() order.attrs['ordernumber'] = ordernumber order.attrs['state'] = ifaces.STATE_NEW order.attrs['salaried'] = ifaces.SALARIED_NO # add order orders_soup.add(order) # add bookings bookings_soup = get_bookings_soup(self.context) for booking in bookings: bookings_soup.add(booking) # return uid of added order return uid