[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