Issue with "authorize" transition in finance_workflow

View: New views
4 Messages — Rating Filter:   Alert me  

Issue with "authorize" transition in finance_workflow

by duffyd :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Hi all,

I'm progressing with my pay-for-membership package but have hit a
roadblock with the "authorize" transition in my package. Essentially,
within a subscriber to
Products.PlonePAS.interfaces.events.IUserInitialLoginInEvent I do the
following:

<code>
subscribers.py:
def buyMembership(event):
    """
    Redirect new member to payment processors website
    for payment
    """
    if IMembraneUser.providedBy(event.object):
        # TODO:: Is _getMembraneObject() bad?
        if
ISubscribemember.providedBy(event.object._getMembraneObject()):
            member = event.object._getMembraneObject()
            site = member.portal_url.getPortalObject()
            manage_options = IGetPaidManagementOptions(site)
            cart_util = getUtility(IShoppingCartUtility)
            cart = cart_util.get(site, create=True)
            createLineItem(member, cart)
            order_manager = getUtility(IOrderManager)
            order = Order()
            order.finance_workflow.fireTransition('create')
            order.processor_id = manage_options.payment_processor
            setContactInfo(order, member)
            order.order_id = order_manager.newOrderId()
            order.user_id = member.getId()
            order.shopping_cart = loads(dumps(cart))
            order_manager.store(order)
            cart_util.destroy(site)
            member.lastOrderID = order.order_id

def createLineItem(member, cart):            
    line = PayableLineItem()
    line.uid = member.getMemberType()
    line.item_id = member.getMemberType()
    line.name = member.getMemberType()
    line.description = member.getMemberType()
    line.cost = member.getPrice()
    line.product_code = member.getMemberType()
    line.quantity = 1
    cart[line.item_id] = line

def setContactInfo(order, member):
    bill_address = payment.BillingAddress()
    bill_address.bill_first_line = member.getMemberAddress()
    bill_address.bill_city = member.getCity()
    bill_address.bill_state = member.getMemberState()
    bill_address.bill_country = "US"
    bill_address.bill_postal_code = member.getZip()
    contact_info = payment.ContactInformation()
    order.contact_information = contact_info
    order.billing_address = bill_address
    order.shipping_address = payment.ShippingAddress()
</code>

I tried doing the 'authorize' transition in here but it errored. So I've
moved it to a utility browser view that creates the PayPal button in
login_success.pt. The code for the button is as follows:

<code>
browser/common.py:
class SubscribeMemberView(BrowserView):
   
    def checkout_button(self):
        site = getUtility(ISiteRoot)
        mtool = getToolByName(self.context, 'portal_membership')
        member = mtool.getAuthenticatedMember()
        if ISubscribemember.providedBy(member):
            getpaidoptions =
IGetPaidManagementPaymentOptions(self.context)
            order_manager = getUtility(IOrderManager)
            order = order_manager.get(member.getLastOrderID())
            order.finance_workflow.fireTransition('authorize')
            processor = getAdapter(self.context, IPaymentProcessor,
getpaidoptions.payment_processor)
            if getpaidoptions.payment_processor == 'Paypal Website
Payments Standard':
                button = processor.cart_post_button(order)
                return button
        else:
            return ''
</code>

When the above code runs, though, I get a TypeError. My pdb session is
here for your perusal[1].

Can anyone give any ideas as to why this doesn't work (a lot of this
code was copied from getpaid.paypal/brower/paypalbutton.py so should
work).

Thanks,
Tim

[1] http://duffyd.pastebin.com/f779a7fca


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "getpaid-dev" group.
To post to this group, send email to getpaid-dev@...
To unsubscribe from this group, send email to getpaid-dev+unsubscribe@...
For more options, visit this group at http://groups.google.com/group/getpaid-dev?hl=en
-~----------~----~----~----~------~----~------~--~---


Re: Issue with "authorize" transition in finance_workflow

by duffyd :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Sorry, the full traceback is here[1].

[1] http://duffyd.pastebin.com/f510a43d9

On Tue, 2009-05-12 at 09:13 +1200, Tim Knapp wrote:

> Hi all,
>
> I'm progressing with my pay-for-membership package but have hit a
> roadblock with the "authorize" transition in my package. Essentially,
> within a subscriber to
> Products.PlonePAS.interfaces.events.IUserInitialLoginInEvent I do the
> following:
>
> <code>
> subscribers.py:
> def buyMembership(event):
>     """
>     Redirect new member to payment processors website
>     for payment
>     """
>     if IMembraneUser.providedBy(event.object):
>         # TODO:: Is _getMembraneObject() bad?
>         if
> ISubscribemember.providedBy(event.object._getMembraneObject()):
>             member = event.object._getMembraneObject()
>             site = member.portal_url.getPortalObject()
>             manage_options = IGetPaidManagementOptions(site)
>             cart_util = getUtility(IShoppingCartUtility)
>             cart = cart_util.get(site, create=True)
>             createLineItem(member, cart)
>             order_manager = getUtility(IOrderManager)
>             order = Order()
>             order.finance_workflow.fireTransition('create')
>             order.processor_id = manage_options.payment_processor
>             setContactInfo(order, member)
>             order.order_id = order_manager.newOrderId()
>             order.user_id = member.getId()
>             order.shopping_cart = loads(dumps(cart))
>             order_manager.store(order)
>             cart_util.destroy(site)
>             member.lastOrderID = order.order_id
>
> def createLineItem(member, cart):            
>     line = PayableLineItem()
>     line.uid = member.getMemberType()
>     line.item_id = member.getMemberType()
>     line.name = member.getMemberType()
>     line.description = member.getMemberType()
>     line.cost = member.getPrice()
>     line.product_code = member.getMemberType()
>     line.quantity = 1
>     cart[line.item_id] = line
>
> def setContactInfo(order, member):
>     bill_address = payment.BillingAddress()
>     bill_address.bill_first_line = member.getMemberAddress()
>     bill_address.bill_city = member.getCity()
>     bill_address.bill_state = member.getMemberState()
>     bill_address.bill_country = "US"
>     bill_address.bill_postal_code = member.getZip()
>     contact_info = payment.ContactInformation()
>     order.contact_information = contact_info
>     order.billing_address = bill_address
>     order.shipping_address = payment.ShippingAddress()
> </code>
>
> I tried doing the 'authorize' transition in here but it errored. So I've
> moved it to a utility browser view that creates the PayPal button in
> login_success.pt. The code for the button is as follows:
>
> <code>
> browser/common.py:
> class SubscribeMemberView(BrowserView):
>    
>     def checkout_button(self):
>         site = getUtility(ISiteRoot)
>         mtool = getToolByName(self.context, 'portal_membership')
>         member = mtool.getAuthenticatedMember()
>         if ISubscribemember.providedBy(member):
>             getpaidoptions =
> IGetPaidManagementPaymentOptions(self.context)
>             order_manager = getUtility(IOrderManager)
>             order = order_manager.get(member.getLastOrderID())
>             order.finance_workflow.fireTransition('authorize')
>             processor = getAdapter(self.context, IPaymentProcessor,
> getpaidoptions.payment_processor)
>             if getpaidoptions.payment_processor == 'Paypal Website
> Payments Standard':
>                 button = processor.cart_post_button(order)
>                 return button
>         else:
>             return ''
> </code>
>
> When the above code runs, though, I get a TypeError. My pdb session is
> here for your perusal[1].
>
> Can anyone give any ideas as to why this doesn't work (a lot of this
> code was copied from getpaid.paypal/brower/paypalbutton.py so should
> work).
>
> Thanks,
> Tim
>
> [1] http://duffyd.pastebin.com/f779a7fca
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "getpaid-dev" group.
To post to this group, send email to getpaid-dev@...
To unsubscribe from this group, send email to getpaid-dev+unsubscribe@...
For more options, visit this group at http://groups.google.com/group/getpaid-dev?hl=en
-~----------~----~----~----~------~----~------~--~---


Re: Issue with "authorize" transition in finance_workflow

by duffyd :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Hi,

Just for the record I fixed this by doing a getMultiAdapter for the
ILineItemFactory and creating the item in the cart using this. All works
now!

-Tim

On Tue, 2009-05-12 at 09:26 +1200, Tim Knapp wrote:

> Sorry, the full traceback is here[1].
>
> [1] http://duffyd.pastebin.com/f510a43d9
>
> On Tue, 2009-05-12 at 09:13 +1200, Tim Knapp wrote:
> > Hi all,
> >
> > I'm progressing with my pay-for-membership package but have hit a
> > roadblock with the "authorize" transition in my package. Essentially,
> > within a subscriber to
> > Products.PlonePAS.interfaces.events.IUserInitialLoginInEvent I do the
> > following:
> >
> > <code>
> > subscribers.py:
> > def buyMembership(event):
> >     """
> >     Redirect new member to payment processors website
> >     for payment
> >     """
> >     if IMembraneUser.providedBy(event.object):
> >         # TODO:: Is _getMembraneObject() bad?
> >         if
> > ISubscribemember.providedBy(event.object._getMembraneObject()):
> >             member = event.object._getMembraneObject()
> >             site = member.portal_url.getPortalObject()
> >             manage_options = IGetPaidManagementOptions(site)
> >             cart_util = getUtility(IShoppingCartUtility)
> >             cart = cart_util.get(site, create=True)
> >             createLineItem(member, cart)
> >             order_manager = getUtility(IOrderManager)
> >             order = Order()
> >             order.finance_workflow.fireTransition('create')
> >             order.processor_id = manage_options.payment_processor
> >             setContactInfo(order, member)
> >             order.order_id = order_manager.newOrderId()
> >             order.user_id = member.getId()
> >             order.shopping_cart = loads(dumps(cart))
> >             order_manager.store(order)
> >             cart_util.destroy(site)
> >             member.lastOrderID = order.order_id
> >
> > def createLineItem(member, cart):            
> >     line = PayableLineItem()
> >     line.uid = member.getMemberType()
> >     line.item_id = member.getMemberType()
> >     line.name = member.getMemberType()
> >     line.description = member.getMemberType()
> >     line.cost = member.getPrice()
> >     line.product_code = member.getMemberType()
> >     line.quantity = 1
> >     cart[line.item_id] = line
> >
> > def setContactInfo(order, member):
> >     bill_address = payment.BillingAddress()
> >     bill_address.bill_first_line = member.getMemberAddress()
> >     bill_address.bill_city = member.getCity()
> >     bill_address.bill_state = member.getMemberState()
> >     bill_address.bill_country = "US"
> >     bill_address.bill_postal_code = member.getZip()
> >     contact_info = payment.ContactInformation()
> >     order.contact_information = contact_info
> >     order.billing_address = bill_address
> >     order.shipping_address = payment.ShippingAddress()
> > </code>
> >
> > I tried doing the 'authorize' transition in here but it errored. So I've
> > moved it to a utility browser view that creates the PayPal button in
> > login_success.pt. The code for the button is as follows:
> >
> > <code>
> > browser/common.py:
> > class SubscribeMemberView(BrowserView):
> >    
> >     def checkout_button(self):
> >         site = getUtility(ISiteRoot)
> >         mtool = getToolByName(self.context, 'portal_membership')
> >         member = mtool.getAuthenticatedMember()
> >         if ISubscribemember.providedBy(member):
> >             getpaidoptions =
> > IGetPaidManagementPaymentOptions(self.context)
> >             order_manager = getUtility(IOrderManager)
> >             order = order_manager.get(member.getLastOrderID())
> >             order.finance_workflow.fireTransition('authorize')
> >             processor = getAdapter(self.context, IPaymentProcessor,
> > getpaidoptions.payment_processor)
> >             if getpaidoptions.payment_processor == 'Paypal Website
> > Payments Standard':
> >                 button = processor.cart_post_button(order)
> >                 return button
> >         else:
> >             return ''
> > </code>
> >
> > When the above code runs, though, I get a TypeError. My pdb session is
> > here for your perusal[1].
> >
> > Can anyone give any ideas as to why this doesn't work (a lot of this
> > code was copied from getpaid.paypal/brower/paypalbutton.py so should
> > work).
> >
> > Thanks,
> > Tim
> >
> > [1] http://duffyd.pastebin.com/f779a7fca
> >
> >
> > >
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "getpaid-dev" group.
To post to this group, send email to getpaid-dev@...
To unsubscribe from this group, send email to getpaid-dev+unsubscribe@...
For more options, visit this group at http://groups.google.com/group/getpaid-dev?hl=en
-~----------~----~----~----~------~----~------~--~---


Re: Issue with "authorize" transition in finance_workflow

by Christopher Johnson-7 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Yeah!
/me curious what you're up to :)

-c

On Wed, May 13, 2009 at 5:28 PM, Tim Knapp <duffyd@...> wrote:

Hi,

Just for the record I fixed this by doing a getMultiAdapter for the
ILineItemFactory and creating the item in the cart using this. All works
now!

-Tim

On Tue, 2009-05-12 at 09:26 +1200, Tim Knapp wrote:
> Sorry, the full traceback is here[1].
>
> [1] http://duffyd.pastebin.com/f510a43d9
>
> On Tue, 2009-05-12 at 09:13 +1200, Tim Knapp wrote:
> > Hi all,
> >
> > I'm progressing with my pay-for-membership package but have hit a
> > roadblock with the "authorize" transition in my package. Essentially,
> > within a subscriber to
> > Products.PlonePAS.interfaces.events.IUserInitialLoginInEvent I do the
> > following:
> >
> > <code>
> > subscribers.py:
> > def buyMembership(event):
> >     """
> >     Redirect new member to payment processors website
> >     for payment
> >     """
> >     if IMembraneUser.providedBy(event.object):
> >         # TODO:: Is _getMembraneObject() bad?
> >         if
> > ISubscribemember.providedBy(event.object._getMembraneObject()):
> >             member = event.object._getMembraneObject()
> >             site = member.portal_url.getPortalObject()
> >             manage_options = IGetPaidManagementOptions(site)
> >             cart_util = getUtility(IShoppingCartUtility)
> >             cart = cart_util.get(site, create=True)
> >             createLineItem(member, cart)
> >             order_manager = getUtility(IOrderManager)
> >             order = Order()
> >             order.finance_workflow.fireTransition('create')
> >             order.processor_id = manage_options.payment_processor
> >             setContactInfo(order, member)
> >             order.order_id = order_manager.newOrderId()
> >             order.user_id = member.getId()
> >             order.shopping_cart = loads(dumps(cart))
> >             order_manager.store(order)
> >             cart_util.destroy(site)
> >             member.lastOrderID = order.order_id
> >
> > def createLineItem(member, cart):
> >     line = PayableLineItem()
> >     line.uid = member.getMemberType()
> >     line.item_id = member.getMemberType()
> >     line.name = member.getMemberType()
> >     line.description = member.getMemberType()
> >     line.cost = member.getPrice()
> >     line.product_code = member.getMemberType()
> >     line.quantity = 1
> >     cart[line.item_id] = line
> >
> > def setContactInfo(order, member):
> >     bill_address = payment.BillingAddress()
> >     bill_address.bill_first_line = member.getMemberAddress()
> >     bill_address.bill_city = member.getCity()
> >     bill_address.bill_state = member.getMemberState()
> >     bill_address.bill_country = "US"
> >     bill_address.bill_postal_code = member.getZip()
> >     contact_info = payment.ContactInformation()
> >     order.contact_information = contact_info
> >     order.billing_address = bill_address
> >     order.shipping_address = payment.ShippingAddress()
> > </code>
> >
> > I tried doing the 'authorize' transition in here but it errored. So I've
> > moved it to a utility browser view that creates the PayPal button in
> > login_success.pt. The code for the button is as follows:
> >
> > <code>
> > browser/common.py:
> > class SubscribeMemberView(BrowserView):
> >
> >     def checkout_button(self):
> >         site = getUtility(ISiteRoot)
> >         mtool = getToolByName(self.context, 'portal_membership')
> >         member = mtool.getAuthenticatedMember()
> >         if ISubscribemember.providedBy(member):
> >             getpaidoptions =
> > IGetPaidManagementPaymentOptions(self.context)
> >             order_manager = getUtility(IOrderManager)
> >             order = order_manager.get(member.getLastOrderID())
> >             order.finance_workflow.fireTransition('authorize')
> >             processor = getAdapter(self.context, IPaymentProcessor,
> > getpaidoptions.payment_processor)
> >             if getpaidoptions.payment_processor == 'Paypal Website
> > Payments Standard':
> >                 button = processor.cart_post_button(order)
> >                 return button
> >         else:
> >             return ''
> > </code>
> >
> > When the above code runs, though, I get a TypeError. My pdb session is
> > here for your perusal[1].
> >
> > Can anyone give any ideas as to why this doesn't work (a lot of this
> > code was copied from getpaid.paypal/brower/paypalbutton.py so should
> > work).
> >
> > Thanks,
> > Tim
> >
> > [1] http://duffyd.pastebin.com/f779a7fca
> >
> >
> > >
>
>
> >






--
Cofounder and CEO
ifPeople - Innovation for People
www.ifpeople.net
t: 678-608-3408
130 Boulevard NE, #6
Atlanta, GA 30312

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "getpaid-dev" group.
To post to this group, send email to getpaid-dev@...
To unsubscribe from this group, send email to getpaid-dev+unsubscribe@...
For more options, visit this group at http://groups.google.com/group/getpaid-dev?hl=en
-~----------~----~----~----~------~----~------~--~---