Most Powerful Open Source ERP

How To Use Delivery Causality Workflow

How To showing how to use delivery_causality_workflow for another portal type.
  • Last Update:2016-09-07
  • Version:001
  • Language:en

After r23647 (2008-09-16), one 'delivery_causality_workflow' can be used for various portal types.

Table of Contents

Steps

We provide a script and External method that rename workflow name in workflow history on existing documents.

To use delivery_causality_workflow for another portal type, you need the following 'Type-based Script' (like SalePackingList_getBuilderList).

(PortalType)_getBuilderList

   returns the list of delivery builders that creates this portal type's document.

(PortalType)_getRuleReference

   returns the reference of the rule that should be applied to this portal type. If no applied rule is required, return None.

a script and a external method for migrating *_causality_workflow

Save the following as 'External Method' and register as 'mergeCausalityWorkflowHistory'.

Toggle line numbers
   1 from Products.ERP5Type.patches.WorkflowTool import WorkflowHistoryList
   2 
   3 def mergeCausalityWorkflowHistory(self):
   4   wf_list = []
   5   workflow_history = getattr(self, 'workflow_history', None)
   6   if workflow_history is None:
   7     return 'no history'
   8   for k, v in workflow_history.items():
   9     if k.endswith('_causality_workflow'):
  10       wf_list.extend(v)
  11       del(self.workflow_history[k])
  12   wf_list.sort(key=lambda x:x['time'])
  13   if len(wf_list):
  14     self.workflow_history['delivery_causality_workflow'] = \
  15       WorkflowHistoryList(wf_list)
  16   return 'done'
Toggle line numbers from Products.ERP5Type.patches.WorkflowTool import WorkflowHistoryList def mergeCausalityWorkflowHistory(self): wf_list = [] workflow_history = getattr(self, 'workflow_history', None) if workflow_history is None: return 'no history' for k, v in workflow_history.items(): if k.endswith('_causality_workflow'): wf_list.extend(v) del(self.workflow_history[k]) wf_list.sort(key=lambda x:x['time']) if len(wf_list): self.workflow_history['delivery_causality_workflow'] = \ WorkflowHistoryList(wf_list) return 'done'

Save the following as 'Script (Python)'. Please modify portal_type list according to your ERP5 instance. Then invoke it to migrate all documents that now use delivery_causality_workflow. You need to restart ERP5 after this migration.

Toggle line numbers
   1 for i in context.getPortalObject().portal_catalog(
   2   portal_type=('Internal Packing List',
   3                'Pay Sheet Transaction',
   4                'Production Packing List',
   5                'Production Report',
   6                'Purchase Invoice Transaction',
   7                'Purchase Packing List',
   8                'Sale Invoice Transaction',
   9                'Sale Packing List',
  10                'Task Report',
  11                ), limit=None):
  12   i.activate(priority=4).mergeCausalityWorkflowHistory()
  13   print i.getPath()
  14 return printed

Toggle line numbers for i in context.getPortalObject().portal_catalog( portal_type=('Internal Packing List', 'Pay Sheet Transaction', 'Production Packing List', 'Production Report', 'Purchase Invoice Transaction', 'Purchase Packing List', 'Sale Invoice Transaction', 'Sale Packing List', 'Task Report', ), limit=None): i.activate(priority=4).mergeCausalityWorkflowHistory() print i.getPath() return printed

Related Articles