def addOrder(self, customer=None, cart=None): """ """ cartmanager = ICartManagement(self.context) if customer is None: cm = ICustomerManagement(self.context) customer = cm.getAuthenticatedCustomer() if cart is None: cart = cartmanager.getCart() portal = getToolByName(self.context, 'portal_url').getPortalObject() ## The current user may not be allowed to create an order, so we ## temporarily change the security context to use a temporary ## user with manager role. old_sm = getSecurityManager() tmp_user = UnrestrictedUser(old_sm.getUser().getId(), '', ['Manager'], '') tmp_user = tmp_user.__of__(portal.acl_users) newSecurityManager(None, tmp_user) # Add a new order new_id = self._createOrderId() self.orders.invokeFactory("Order", id=new_id) new_order = getattr(self.orders, new_id) # Copy Customer to Order customer = ICustomerManagement(self.context).getAuthenticatedCustomer() cm = ICopyManagement(customer) cm.copyTo(new_order) # Add cart items to order IItemManagement(new_order).addItemsFromCart(cart) # Add total tax new_order.setTax(ITaxes(cart).getTaxForCustomer()) # Add shipping values to order sm = IShippingPriceManagement(self.context) new_order.setShippingPriceNet(sm.getPriceNet()) new_order.setShippingPriceGross(sm.getPriceForCustomer()) new_order.setShippingTax(sm.getTaxForCustomer()) new_order.setShippingTaxRate(sm.getTaxRateForCustomer()) # Add payment price values to order pp = IPaymentPriceManagement(self.context) new_order.setPaymentPriceGross(pp.getPriceForCustomer()) new_order.setPaymentPriceNet(pp.getPriceNet()) new_order.setPaymentTax(pp.getTaxForCustomer()) new_order.setPaymentTaxRate(pp.getTaxRateForCustomer()) ## Reset security manager setSecurityManager(old_sm) # Index with customer again new_order.reindexObject() return new_order
def getPriceNet(self, with_shipping=True, with_payment=True, with_discount=True): """Returns the net price of the cart. This is just a sum over net prices of all items of the cart plus shipping and payment. """ im = IItemManagement(self.context) if im.hasItems() == False: return 0.0 price = 0.0 for cart_item in im.getItems(): # NOTE: with_discount is passed here price += IPrices(cart_item).getPriceNet( with_discount=with_discount) if with_shipping == True: sm = IShippingPriceManagement(self.shop) shipping_price = sm.getPriceNet() price += shipping_price if with_payment == True: sm = IPaymentPriceManagement(self.shop) payment_price = sm.getPriceNet() price += payment_price return price
def getShippingPrices(self): """ """ shop = IShopManagement(self.context).getShop() sm = IShippingPriceManagement(shop) cm = ICurrencyManagement(shop) result = [] for shipping_price in sm.getShippingPrices(): price = cm.priceToString(shipping_price.getPrice()) result.append({ "id": shipping_price.getId(), "title": shipping_price.Title(), "description": shipping_price.Description(), "price": price, "url": shipping_price.absolute_url(), "up_url": "%s/es_folder_position?position=up&id=%s" % (self.context.absolute_url(), shipping_price.getId()), "down_url": "%s/es_folder_position?position=down&id=%s" % (self.context.absolute_url(), shipping_price.getId()), "amount_of_criteria": self._getAmountOfCriteria(shipping_price.getId()) }) return result
def getShippingInfo(self): """ """ sm = IShippingPriceManagement(self.context) shipping_price = sm.getPriceForCustomer() cm = ICurrencyManagement(self.context) price = cm.priceToString(shipping_price) method = IShippingMethodManagement( self.context).getSelectedShippingMethod() return { "price": price, "title": method.Title(), "description": method.Description() }
def getShippingInfo(self): """ """ sm = IShippingPriceManagement(self.context) shipping_price = sm.getPriceForCustomer() cm = ICurrencyManagement(self.context) price = cm.priceToString(shipping_price, suffix=None) method = IShippingMethodManagement( self.context).getSelectedShippingMethod() if method is None: return { "display": False, } else: return { "price": price, "title": method.Title(), "description": method.Description(), "display": len(self.getCartItems()) > 0 }
def getTaxForCustomer(self): """ """ im = IItemManagement(self.context) if im.hasItems() == False: return 0.0 tax = 0.0 for cart_item in im.getItems(): taxes = ITaxes(cart_item) tax += taxes.getTaxForCustomer() # Get shop shop = IShopManagement(self.context).getShop() # Shipping tax += IShippingPriceManagement(shop).getTaxForCustomer() # Payment tax += IPaymentPriceManagement(shop).getTaxForCustomer() return tax
def afterSetUp(self): """ """ super(TestShopShippingManagement, self).afterSetUp() self.shop.taxes.invokeFactory("CustomerTax", id="customer", rate=10.0) self.sm = IShippingPriceManagement(self.shop)