def getButton(self): button = ClickAndBuyStandardProcessor(self.context) cart_util = getUtility(IShoppingCartUtility) cart = cart_util.get(self.context, create=True) manage_options = IGetPaidManagementOptions(self.context) # we'll get the order_manager, create the new order, and store it. order_manager = getUtility(IOrderManager) new_order_id = order_manager.newOrderId() order = Order() order.finance_workflow.fireTransition('create') # register the payment processor name to make the workflow handlers happy order.processor_id = manage_options.payment_processor # registering an empty contact information list order.contact_information = payment.ContactInformation() order.billing_address = payment.BillingAddress() order.shipping_address = payment.ShippingAddress() order.order_id = new_order_id # make cart safe for persistence by using pickling order.shopping_cart = loads(dumps(cart)) order.user_id = getSecurityManager().getUser().getId() order_manager.store(order) import ipdb; ipdb.set_trace() return button.cart_post_button(order)
def placeOrder(self, data, cart): # disable ZPublisher retries for this request self.request.retry_max_count = 0 conn = self.context._p_jar order_manager = getUtility(IOrderManager) order = Order() conn.add(order) order.shopping_cart = loads(dumps(cart)) # make sure the cart is not in session storage conn.add(order.shopping_cart) order.order_id = order_manager.newOrderId() order.contact_information = self.getContactInformation() conn.add(order.contact_information) order.billing_address = BillingAddressInfo(**data) conn.add(order.billing_address) order.user_id = self.getBuyerUsername() order.processor_id, processor = IPaymentProcessor(getSite()) order.finance_workflow.fireTransition("create") order.bill_phone_number = '' if self.total_is_zero: order.user_payment_info_last4 = None order.name_on_card = None order_manager.store(order) order.finance_workflow.fireTransition("authorize") order.finance_workflow.fireTransition('charge-charging') else: order.user_payment_info_last4 = data['credit_card'][-4:] order.name_on_card = data['name_on_card'] payment_info = PaymentInfo(**data) # XXX Should rewrite to do a single auth_capture if possible result = processor.authorize(order, payment_info) if result is gp_interfaces.keys.results_success: order_manager.store(order) order.finance_workflow.fireTransition("authorize") elif result is gp_interfaces.keys.results_async: # Asynchronous handling of authorization; we don't know status return order else: order.finance_workflow.fireTransition('reviewing-declined') return False return order
def getButton(self): button = PaypalStandardProcessor(self.context) cart_util = getUtility(IShoppingCartUtility) cart = cart_util.get(self.context, create=True) site = self.context.portal_url.getPortalObject() manage_options = IGetPaidManagementOptions( site ) # we'll get the order_manager, create the new order, and store it. order_manager = getUtility(IOrderManager) new_order_id = order_manager.newOrderId() order = Order() # register the payment processor name to make the workflow handlers happy order.processor_id = manage_options.payment_processor # FIXME: registering an empty contact information list for now - need to populate this from user # if possible order.contact_information = payment.ContactInformation() order.billing_address = payment.BillingAddress() order.shipping_address = payment.ShippingAddress() order.order_id = new_order_id # make cart safe for persistence by using pickling order.shopping_cart = loads(dumps(cart)) order.user_id = getSecurityManager().getUser().getId() order.finance_workflow.fireTransition('create') order_manager.store(order) # have to wait for the order to be created and the cart added for this to work order.finance_workflow.fireTransition('authorize') # save html for button - we'll destroy the cart later on html = button.cart_post_button(order) # and destroy the cart cart_util.destroy(self.context) return html