From dc232b4f4f55ac60018764e9abe6dccc7ea3553f Mon Sep 17 00:00:00 2001 From: Ayush Tiwari <ayush.tiwari@nexedi.com> Date: Thu, 2 Feb 2017 10:44:21 +0000 Subject: [PATCH] bt5_prototype: Add workflow status methods for BP% --- product/ERP5/Document/BusinessPackage.py | 54 ++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/product/ERP5/Document/BusinessPackage.py b/product/ERP5/Document/BusinessPackage.py index 73d4b57370..13d4d4b656 100644 --- a/product/ERP5/Document/BusinessPackage.py +++ b/product/ERP5/Document/BusinessPackage.py @@ -47,6 +47,7 @@ from OFS import SimpleItem, XMLExportImport from Acquisition import Implicit, aq_base, aq_inner, aq_parent from Products.ERP5Type.dynamic.lazy_class import ERP5BaseBroken from Products.ERP5Type.XMLObject import XMLObject +from Products.CMFCore.utils import getToolByName from Products.ERP5Type import Permissions, PropertySheet, interfaces from Products.PythonScripts.PythonScript import PythonScript from AccessControl import ClassSecurityInfo, Unauthorized, getSecurityManager @@ -139,16 +140,45 @@ class BusinessPackage(XMLObject): , PropertySheet.XMLObject , PropertySheet.SimpleItem , PropertySheet.CategoryCore + , PropertySheet.Version , PropertySheet.BusinessPackage ) + def __init__(self, *args, **kw): + XMLObject.__init__(self, *args, **kw) + + security.declarePrivate('manage_afterAdd') + def manage_afterAdd(self, item, container): + """ + This is called when a new business package is added or imported. + """ + portal_workflow = getToolByName(self, 'portal_workflow') + if portal_workflow is not None: + # Make sure that the installation state is "not installed". + if portal_workflow.getStatusOf( + 'business_package_installation_workflow', self) is not None: + # XXX Not good to access the attribute directly, + # but there is no API for clearing the history. + self.workflow_history[ + 'business_package_installation_workflow'] = None + def _install(self, **kw): self._path_item.install(self) self._object_property_item.install(self) + workflow_tool = self.getPortalObject().portal_workflow + workflow_tool.business_package_installation_workflow.notifyWorkflowMethod( + self, 'install', kw={'comment': 'Installed'}) security.declareProtected(Permissions.ManagePortal, 'install') install = _install + security.declareProtected(Permissions.AccessContentsInformation, + 'getShortRevision') + def getShortRevision(self): + """Returned a shortened revision""" + r = self.getRevision() + return r and r[:5] + security.declareProtected(Permissions.ManagePortal, 'preinstall') def preinstall(self, check_dependencies=1, **kw): return {} @@ -257,6 +287,10 @@ class BusinessPackage(XMLObject): self._edit(**prop_dict) self.storePathData() + workflow_tool = self.getPortalObject().portal_workflow + workflow_tool.business_package_building_workflow.notifyWorkflowMethod( + self, 'edit', kw={'comment': 'Downloaded'}) + item_name_list = ['_path_item', '_object_property_item'] for item_name in item_name_list: item_object = getattr(self, item_name, None) @@ -266,6 +300,26 @@ class BusinessPackage(XMLObject): if item_object is not None: item_object.importFile(bpa) + def getBuildingState(self, default=None, id_only=1): + """ + Returns the current state in building + """ + portal_workflow = getToolByName(self, 'portal_workflow') + wf = portal_workflow.getWorkflowById( + 'business_package_building_workflow') + return wf._getWorkflowStateOf(self, id_only=id_only ) + + security.declareProtected(Permissions.AccessContentsInformation, + 'getInstallationState') + def getInstallationState(self, default=None, id_only=1): + """ + Returns the current state in installation + """ + portal_workflow = getToolByName(self.getPortalObject(), 'portal_workflow') + wf = portal_workflow.getWorkflowById( + 'business_package_installation_workflow') + return wf._getWorkflowStateOf(self, id_only=id_only ) + class BusinessPackageException(Exception): pass -- 2.30.9