diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.py b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.py index 5dd2e131d40cafe971e9d80f891a49223c12608f..a764843bc4ab7370b8dd0786ae14a8c21ba24347 100644 --- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.py +++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.py @@ -2,22 +2,6 @@ from Products.PythonScripts.standard import Object line_list = [] portal = context.getPortalObject() -# XXX use a larger limit -saved_selection_params = context.getPortalObject().portal_selections.getSelectionParamsFor(module_selection_name) -selection_params = saved_selection_params.copy() -selection_params['limit'] = 10000 -context.getPortalObject().portal_selections.setSelectionParamsFor(module_selection_name, selection_params) - -try: - checked_uid_list = portal.portal_selections.getSelectionCheckedUidsFor(module_selection_name) - if checked_uid_list: - getObject = portal.portal_catalog.getObject - delivery_list = [getObject(uid) for uid in checked_uid_list] - else: - delivery_list = portal.portal_selections.callSelectionFor(module_selection_name, context=context) -finally: - context.getPortalObject().portal_selections.setSelectionParamsFor(module_selection_name, saved_selection_params) - account_title_cache = {} def getAccountTitle(relative_url): try: @@ -32,7 +16,7 @@ def getAccountTitle(relative_url): return title -for delivery in delivery_list: +for delivery in portal.portal_catalog(uid=uid_list or -1): delivery = delivery.getObject() for movement in delivery.getMovementList(portal_type=portal_type): line_list.append(Object( diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.xml index 492e7ef117caa54519342126b7e900afc20a1967..56b2f25756fd019e4d753ec6758c1dd19388aec9 100644 --- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.xml +++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineList.xml @@ -50,7 +50,7 @@ _params - portal_type, module_selection_name, **kw + uid_list, portal_type, **kw id diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineReportSectionList.py b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineReportSectionList.py index 82a3bdd6fff1ee942685e00562c29573e2fbb575..2861ee09ce3693199983339eefa6a9f561682225 100644 --- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineReportSectionList.py +++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/DeliveryModule_getDeliveryLineReportSectionList.py @@ -1,6 +1,34 @@ from Products.ERP5Form.Report import ReportSection +portal = context.getPortalObject() + request = container.REQUEST -return ReportSection(form_id='DeliveryModule_viewDeliveryLineList', +module_selection_name = request['selection_name'] + +# so that ods style does not repeat header on each section +request.set('merge_report_section_list', 1) + +# XXX use a larger limit +saved_selection_params = portal.portal_selections.getSelectionParamsFor(module_selection_name) +selection_params = saved_selection_params.copy() +selection_params['limit'] = 100000 +context.getPortalObject().portal_selections.setSelectionParamsFor(module_selection_name, selection_params) + +report_section_list = [] +try: + all_uid_list = portal.portal_selections.getSelectionCheckedUidsFor(module_selection_name) + if not all_uid_list: + all_uid_list = [ x.uid for x in + portal.portal_selections.callSelectionFor(module_selection_name, context=context)] + + # split in chunks + batch_size = 1000 + for uid_list in [all_uid_list[x:x+batch_size] for x in xrange(0, len(all_uid_list), batch_size)]: + report_section_list.append( + ReportSection(form_id='DeliveryModule_viewDeliveryLineList', path=context.getPhysicalPath(), selection_params=dict(portal_type=request['portal_type'], - module_selection_name=request['selection_name'])), + uid_list=uid_list, + module_selection_name=module_selection_name))) + return report_section_list +finally: + context.getPortalObject().portal_selections.setSelectionParamsFor(module_selection_name, saved_selection_params)