from AccessControl.requestmethod import postonly
from zope.interface import implements
from zope.component.factory import Factory
+from persistent.list import PersistentList
from OFS.SimpleItem import SimpleItem
from ZTUtils import make_query
from DateTime import DateTime
from interfaces import IPrintOrderTemplate, IPrintOrder
from permissions import ManagePrintOrderTemplate, ManagePrintOrders
from price import Price
-from utils import Message as _
-from utils import translate
from xml.dom.minidom import Document
from tool import COPIES_COUNTERS
from App.config import getConfiguration
-from paypal.interface import PayPalInterface
+try :
+ from paypal.interface import PayPalInterface
+ paypalAvailable = True
+except ImportError :
+ paypalAvailable = False
from logging import getLogger
console = getLogger('Products.photoprint.order')
self.billing = PersistentMapping()
self.shipping = PersistentMapping()
self.shippingFees = Price(0,0)
- self._paymentResponse = PersistentMapping()
+ self._paypalLog = PersistentList()
@property
def amountWithFees(self) :
portal = utool.getPortalObject()
member = mtool.getAuthenticatedMember()
- options = {#'PAYMENTREQUEST_0_AMT' : '99.55', # todo
- 'PAYMENTREQUEST_0_CURRENCYCODE' : 'EUR',
+ options = {'PAYMENTREQUEST_0_CURRENCYCODE' : 'EUR',
'PAYMENTREQUEST_0_PAYMENTACTION' : 'Sale',
'RETURNURL' : '%s/photoprint_order_confirm' % self.absolute_url(),
'CANCELURL' : '%s/photoprint_order_cancel' % self.absolute_url(),
- # 'CALLBACK' : TODO
'ALLOWNOTE' : 0, # The buyer is unable to enter a note to the merchant.
'HDRIMG' : '%s/logo.gif' % portal_url,
'EMAIL' : member.getProperty('email'),
'GIFTRECEIPTENABLE' : 0,
'BUYEREMAILOPTINENABLE' : 0, # Do not enable buyer to provide email address.
'NOSHIPPING' : 1, # PayPal does not display shipping address fields whatsoever.
- # 'PAYMENTREQUEST_0_NOTIFYURL' : TODO
-
'PAYMENTREQUEST_0_SHIPTONAME' : self.billing['name'],
'PAYMENTREQUEST_0_SHIPTOSTREET' : self.billing['address'],
'PAYMENTREQUEST_0_SHIPTOCITY' : self.billing['city'],
}
if len(self.items) > 1 :
- quantitySum = reduce(lambda a, b : a['quantity'] + b['quantity'], self.items)
+ quantitySum = reduce(lambda a, b : a + b, [item['quantity'] for item in self.items])
else :
quantitySum = self.items[0]['quantity']
total = round(self.amountWithFees.getValues()['taxed'], 2)
- options['L_PAYMENTREQUEST_0_NAME0'] = 'Commande realis photo ref. %s' % self.getId()
+ options['L_PAYMENTREQUEST_0_NAME0'] = 'Commande photo ref. %s' % self.getId()
if quantitySum == 1 :
options['L_PAYMENTREQUEST_0_DESC0'] = "Commande d'un tirage photographique"
else :
options['L_PAYMENTREQUEST_0_DESC0'] = 'Commande de %d tirages photographiques' % quantitySum
options['L_PAYMENTREQUEST_0_AMT0'] = total
options['PAYMENTINFO_0_SHIPPINGAMT'] = round(self.shippingFees.getValues()['taxed'], 2)
- # options['L_PAYMENTREQUEST_0_TAXAMT0'] = tax
- # options['L_PAYMENTREQUEST_0_QTY%d' % n] = 1
options['PAYMENTREQUEST_0_AMT'] = total
ppi = self._initPayPalInterface()
response = ppi.set_express_checkout(**options)
response = PrintOrder.recordifyPPResp(response)
- # self._paypalLog.append(response)
+ self._paypalLog.append(response)
response['url'] = ppi.generate_express_checkout_redirect_url(response['TOKEN'])
console.info(options)
console.info(response)
ppi = self._initPayPalInterface()
response = ppi.get_express_checkout_details(TOKEN=token)
response = PrintOrder.recordifyPPResp(response)
- # self._paypalLog.append(response)
+ self._paypalLog.append(response)
return response
security.declarePrivate('ppDoExpressCheckoutPayment')
TOKEN=token,
PAYERID=payerid)
response = PrintOrder.recordifyPPResp(response)
- # self._paypalLog.append(response)
+ self._paypalLog.append(response)
return response
security.declareProtected(ModifyPortalContent, 'ppPay')