eggification
[photoprint.git] / Products / photoprint / skins / order_list.py
diff --git a/Products/photoprint/skins/order_list.py b/Products/photoprint/skins/order_list.py
new file mode 100755 (executable)
index 0000000..2635e58
--- /dev/null
@@ -0,0 +1,95 @@
+##parameters=b_start=0, key='created', reverse=False
+from Products.CMFCore.utils import getToolByName
+from Products.Plinn.PloneMisc import Batch
+from Products.photoprint.utils import Message as _
+from ZTUtils import make_query
+
+wtool = getToolByName(context, 'portal_workflow')
+mtool = getToolByName(context, 'portal_membership')
+options = {}
+folders = context.contentValues({'portal_type':'Order Folder'})
+options['folders'] = folders
+
+columns = ( {'key': 'created',
+                        'title': _('Date'),
+                        'width': None,
+                        'colspan': None}
+                       , {'key': 'customer',
+                        'title': _('Customer'),
+                        'width': None,
+                        'colspan': None}
+                       , {'key': 'id',
+                        'title': _('Reference'),
+                        'width': None,
+                        'colspan': None}
+                       , {'key': 'quantity',
+                        'title': _('Prints'),
+                        'width': None,
+                        'colspan': None}
+                       , {'key': 'amount',
+                        'title': _('Amount'),
+                        'width': None,
+                        'colspan': None }
+                       , {'key': 'state',
+                        'title': _('State'),
+                        'width': None,
+                        'colspan': None }
+                       )
+
+target = context.absolute_url()
+
+for column in columns :
+       images = []
+       if key == column['key']:
+               if reverse :
+                       toggleImg = getattr(context, 'arrowDown.gif')
+                       alt = _('descending sort')
+               else :
+                       toggleImg = getattr(context, 'arrowUp.gif')
+                       alt = _('ascending sort')
+               query = make_query(key=column['key'], reverse = not reverse)
+               images.append( {'src' : toggleImg.absolute_url(), 'alt' : alt} )
+       else :
+               query = make_query(key=column['key'], reverse = reverse)
+       
+       column['url'] = '%s?%s' % (target, query)
+       column['images'] = images
+
+options['columns'] = columns
+
+def getReviewState(item) :
+       return wtool.getInfoFor(item, 'review_state', wf_id='order_workflow')
+
+sortFuncs = {'created' : lambda a, b : cmp(a.created(), b.created())
+                       ,'customer'     : lambda a, b : cmp(a.Creator(), b.Creator())
+                       ,'id'           : lambda a, b : cmp(a.getId(), b.getId())
+                       ,'quantity'     : lambda a, b : cmp(a.quantity, b.quantity)
+                       ,'amount'       : lambda a, b : cmp(a.amountWithFees.getValues()['taxed'], b.amountWithFees.getValues()['taxed'])
+                       ,'state'        : lambda a, b : cmp(getReviewState(a), getReviewState(b))}
+
+orders = context.contentValues({'portal_type':'Order'})
+step = reverse and -1 or 1
+orders.sort(sortFuncs[key])
+orders = orders[::step]
+options['key'] = key
+options['reverse'] = reverse
+
+def beforeGetItem(item) :
+       info = {}
+       info['url'] = item.absolute_url()
+       info['created'] = item.created()
+       info['reference'] = item.getId()
+       info['quantity'] = item.quantity
+       info['price'] = item.amountWithFees
+       info['state'] = wtool.getInfoFor(item, 'review_state', wf_id='order_workflow')
+       customer = mtool.getMemberById(item.Creator())
+       if customer :
+               info['customer'] = customer.getMemberFullName()
+       else :
+               info['customer'] = item.Creator()
+       return info
+       
+orders = Batch(orders, context.default_batch_size, b_start, orphan=0, quantumleap=1, before_getitem=beforeGetItem)
+options['orders'] = orders
+
+return context.order_list_template(**options)