[Erp5-report] r10371 - in /erp5/trunk/products/ERP5: Document/ Interface/ PropertySheet/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Sep 27 17:44:02 CEST 2006
Author: rafael
Date: Wed Sep 27 17:43:55 2006
New Revision: 10371
URL: http://svn.erp5.org?rev=10371&view=rev
Log:
Added Divergence Testers. Used to check the Divergence
between Deliveries and Simulations Movements.
Added:
erp5/trunk/products/ERP5/Document/CategoryDivergenceTester.py (with props)
erp5/trunk/products/ERP5/Document/PropertyDivergenceTester.py (with props)
erp5/trunk/products/ERP5/Document/QuantityDivergenceTester.py (with props)
erp5/trunk/products/ERP5/Interface/DivergenceTester.py (with props)
erp5/trunk/products/ERP5/PropertySheet/DivergenceTester.py (with props)
Added: erp5/trunk/products/ERP5/Document/CategoryDivergenceTester.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/CategoryDivergenceTester.py?rev=10371&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Document/CategoryDivergenceTester.py (added)
+++ erp5/trunk/products/ERP5/Document/CategoryDivergenceTester.py Wed Sep 27 17:43:55 2006
@@ -1,0 +1,121 @@
+#############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+# Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+
+from Products.ERP5Type.ObjectMessage import ObjectMessage
+from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
+from Products.ERP5.Document.PropertyDivergenceTester import \
+ PropertyDivergenceTester
+
+class CategoryDivergenceTester(PropertyDivergenceTester):
+ """
+ The purpose of this divergence tester is to check the
+ consistency between delivery movement and simulation movement
+ for some specific categories.
+ """
+ meta_type = 'ERP5 Divergence Tester'
+ portal_type = 'Category Divergence Tester'
+ add_permission = Permissions.AddPortalContent
+ isPortalContent = 1
+ isRADContent = 1
+
+ # Declarative security
+ security = ClassSecurityInfo()
+ security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+ # Declarative interfaces
+ __implements__ = ( Interface.DivergenceTester, )
+
+ # Declarative properties
+ property_sheets = ( PropertySheet.Base
+ , PropertySheet.XMLObject
+ , PropertySheet.CategoryCore
+ , PropertySheet.DublinCore
+ , PropertySheet.DivergenceTester
+ )
+
+
+ def explain(self, simulation_movement):
+ """
+ This method returns a list of messages that contains
+ the divergence of the Delivery Line.
+ """
+ divergence_message_list = []
+ tested_property = self.getTestedPropertyList()
+ for tested_property_id, tested_property_title in \
+ self._splitStringList(tested_property):
+ delivery_mvt = simulation_movement.getDeliveryValue()
+ message = None
+ delivery_mvt_category_list = \
+ delivery_mvt.getPropertyList(tested_property_id)
+ simulation_category_list = \
+ simulation_movement.getPropertyList(tested_property_id)
+
+ # XXX Don't we need to check the order too ?
+ delivery_mvt_category_list.sort()
+ simulation_category_list.sort()
+
+ if delivery_mvt_category_list != simulation_category_list:
+
+ delivery_mvt_category_title_list = []
+ for mvt_category in delivery_mvt_category_list:
+ category_value = delivery_mvt.resolveCategory(mvt_category)
+ if category_value.getPortalType() == 'Category':
+ delivery_mvt_category_title_list.append(category_value.getTranslatedTitle())
+ else:
+ delivery_mvt_category_title_list.append(category_value.getTitle())
+
+
+ simulation_category_title_list = []
+ for mvt_category in simulation_category_list:
+ category_value = delivery_mvt.resolveCategory(mvt_category)
+ if category_value.getPortalType() == 'Category':
+ simulation_category_title_list.append(category_value.getTranslatedTitle())
+ else:
+ simulation_category_title_list.append(category_value.getTitle())
+
+ delivery_mvt_property = ' , '.join(delivery_mvt_category_title_list)
+ simulation_mvt_property = ' , '.join(movement_category_title_list)
+
+ solver_script_list = self.getSolverScriptList()
+ if solver_script_list is None:
+ solver_script_list = []
+
+ message = ObjectMessage(object_relative_url= delivery_mvt.getRelativeUrl(),
+ simulation_movement = simulation_movement,
+ decision_value = delivery_mvt_property ,
+ prevision_value = simulation_mvt_property,
+ tested_property=tested_property_id,
+ message=tested_property_title,
+ solver_script_list=self._splitStringList(property = solver_script_list)
+ )
+
+ divergence_message_list.append(message)
+
+ return divergence_message_list
Propchange: erp5/trunk/products/ERP5/Document/CategoryDivergenceTester.py
------------------------------------------------------------------------------
svn:executable = *
Added: erp5/trunk/products/ERP5/Document/PropertyDivergenceTester.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/PropertyDivergenceTester.py?rev=10371&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Document/PropertyDivergenceTester.py (added)
+++ erp5/trunk/products/ERP5/Document/PropertyDivergenceTester.py Wed Sep 27 17:43:55 2006
@@ -1,0 +1,109 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+# Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+
+from Products.ERP5Type.XMLObject import XMLObject
+
+from Products.ERP5Type.ObjectMessage import ObjectMessage
+from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
+from Products.ERP5Type.Utils import convertToUpperCase
+
+class PropertyDivergenceTester(XMLObject):
+ """
+ The purpose of this divergence tester is to check the
+ consistency between delivery movement and simulation movement
+ for some specific properties.
+ """
+ meta_type = 'ERP5 Divergence Tester'
+ portal_type = 'Property Divergence Tester'
+ add_permission = Permissions.AddPortalContent
+ isPortalContent = 1
+ isRADContent = 1
+
+ # Declarative security
+ security = ClassSecurityInfo()
+ security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+ # Declarative interfaces
+ __implements__ = ( Interface.DivergenceTester, )
+
+ # Declarative properties
+ property_sheets = ( PropertySheet.Base
+ , PropertySheet.XMLObject
+ , PropertySheet.CategoryCore
+ , PropertySheet.DublinCore
+ , PropertySheet.DivergenceTester
+ )
+
+ def test(self, simulation_movement):
+ """
+ This is the fast method to test, return 0 or 1.
+ It depends if the simulation_movement is divergent or not.
+ """
+ return len(self.explain(simulation_movement))
+
+ def explain(self, simulation_movement):
+ """
+ This method returns a list of messages that contains
+ the divergence of the Delivery Line.
+ """
+ divergence_message_list = []
+ tested_property = self.getTestedPropertyList()
+ for tested_property_id, tested_property_title in \
+ self._splitStringList(property=tested_property):
+
+ delivery_mvt = simulation_movement.getDeliveryValue()
+ delivery_mvt_property = delivery_mvt.getProperty(tested_property_id)
+ simulation_mvt_property = simulation_movement.getProperty(tested_property_id)
+
+ message = None
+
+ if delivery_mvt_property != simulation_mvt_property:
+ solver_script_list = self.getSolverScriptList()
+ if solver_script_list is None:
+ solver_script_list = []
+ message = ObjectMessage(
+ object_relative_url=delivery_mvt.getRelativeUrl(),
+ simulation_movement=simulation_movement,
+ decision_value=delivery_mvt_property ,
+ prevision_value=simulation_mvt_property,
+ tested_property=tested_property_id,
+ message=tested_property_title,
+ solver_script_list=self._splitStringList(solver_script_list)
+ )
+ divergence_message_list.append(message)
+
+ return divergence_message_list
+
+ def _splitStringList(self, string_list):
+ """
+ Convert a list of string with a pipe (ex: ["azert | qsdfg", ] )
+ to a list of tuple (ex: [("azert", "qsdfg"), ] )
+ """
+ return [tuple([x.strip() for x in x.split('|')]) for x in string_list]
Propchange: erp5/trunk/products/ERP5/Document/PropertyDivergenceTester.py
------------------------------------------------------------------------------
svn:executable = *
Added: erp5/trunk/products/ERP5/Document/QuantityDivergenceTester.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/QuantityDivergenceTester.py?rev=10371&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Document/QuantityDivergenceTester.py (added)
+++ erp5/trunk/products/ERP5/Document/QuantityDivergenceTester.py Wed Sep 27 17:43:55 2006
@@ -1,0 +1,107 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+# Rafael M. Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from AccessControl import ClassSecurityInfo
+
+from Products.ERP5Type.ObjectMessage import ObjectMessage
+from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
+from Products.ERP5.Document.PropertyDivergenceTester import \
+ PropertyDivergenceTester
+
+class QuantityDivergenceTester(PropertyDivergenceTester):
+ """
+ The purpose of this divergence tester is to check the
+ consistency between delivery movement and simulation movement
+ for the property quantity.
+ """
+ meta_type = 'ERP5 Divergence Tester'
+ portal_type = 'Quantity Divergence Tester'
+ add_permission = Permissions.AddPortalContent
+ isPortalContent = 1
+ isRADContent = 1
+
+ # Declarative security
+ security = ClassSecurityInfo()
+ security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+ # Declarative interfaces
+ __implements__ = ( Interface.DivergenceTester, )
+
+
+ # Declarative properties
+ property_sheets = ( PropertySheet.Base
+ , PropertySheet.XMLObject
+ , PropertySheet.CategoryCore
+ , PropertySheet.DublinCore
+ , PropertySheet.DivergenceTester
+ )
+
+
+ def explain(self, simulation_movement):
+ """
+ This method returns a list of messages that contains
+ the divergence of the Delivery Line.
+ """
+ delivery = simulation_movement.getDeliveryValue()
+
+ d_quantity = delivery.getQuantity()
+ quantity = simulation_movement.getCorrectedQuantity()
+ d_error = simulation_movement.getDeliveryError()
+
+ solver_script_list = self.getSolverScriptList()
+ if solver_script_list is None:
+ solver_script_list = []
+
+ message = ObjectMessage(object_relative_url= delivery.getRelativeUrl(),
+ simulation_movement = simulation_movement,
+ decision_value = d_quantity ,
+ prevision_value = quantity,
+ tested_property='quantity',
+ message='Quantity',
+ solver_script_list=self._splitStringList(solver_script_list)
+ )
+
+
+ if quantity is None:
+ if d_quantity is None:
+ return []
+ return [message]
+ if d_quantity is None:
+ d_quantity = 0
+ if d_error is None:
+ d_error = 0
+ delivery_ratio = simulation_movement.getDeliveryRatio()
+ # if the delivery_ratio is None, make sure that we are
+ # divergent even if the delivery quantity is 0
+ if delivery_ratio is not None:
+ d_quantity *= delivery_ratio
+ if delivery_ratio == 0 and quantity > 0:
+ return [message]
+ if d_quantity != quantity + d_error:
+ return [message]
+ return []
Propchange: erp5/trunk/products/ERP5/Document/QuantityDivergenceTester.py
------------------------------------------------------------------------------
svn:executable = *
Added: erp5/trunk/products/ERP5/Interface/DivergenceTester.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Interface/DivergenceTester.py?rev=10371&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Interface/DivergenceTester.py (added)
+++ erp5/trunk/products/ERP5/Interface/DivergenceTester.py Wed Sep 27 17:43:55 2006
@@ -1,0 +1,50 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+# Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+try:
+ from Interface import Interface
+except ImportError:
+ # for Zope versions before 2.6.0
+ from Interface import Base as Interface
+
+class DivergenceTester(Interface):
+ """
+ ERP5 Divergence Tester
+ """
+
+ def test(simulation_movement):
+ """
+ This is the fast method to test, return 0 or 1.
+ It depends if the simulation_movement is divergent or not.
+ """
+
+ def explain(simulation_movement):
+ """
+ This method returns a list of messages that contains
+ the divergence of the Delivery Line.
+ """
Propchange: erp5/trunk/products/ERP5/Interface/DivergenceTester.py
------------------------------------------------------------------------------
svn:executable = *
Added: erp5/trunk/products/ERP5/PropertySheet/DivergenceTester.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/PropertySheet/DivergenceTester.py?rev=10371&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/PropertySheet/DivergenceTester.py (added)
+++ erp5/trunk/products/ERP5/PropertySheet/DivergenceTester.py Wed Sep 27 17:43:55 2006
@@ -1,0 +1,46 @@
+##############################################################################
+#
+# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved.
+# Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+
+class DivergenceTester:
+ """
+ Divergence Tester are use for the divergence testers.
+ """
+
+ _properties = (
+ { 'id' : 'tested_property',
+ 'description' : 'Property used to Test',
+ 'type' : 'lines',
+ 'default' : (),
+ 'mode' : 'w' },
+ { 'id' : 'solver_script',
+ 'description' : 'List of scripts used to call the solvers',
+ 'type' : 'string',
+ 'multivalued' : 1,
+ 'mode' : 'w' },
+ )
Propchange: erp5/trunk/products/ERP5/PropertySheet/DivergenceTester.py
------------------------------------------------------------------------------
svn:executable = *
More information about the Erp5-report
mailing list