[Erp5-report] r33255 kazuhiko - in /erp5/trunk/bt5/erp5_simulation: DocumentTemplateItem/ bt/

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Mar 2 10:44:21 CET 2010


Author: kazuhiko
Date: Tue Mar  2 10:44:19 2010
New Revision: 33255

URL: http://svn.erp5.org?rev=33255&view=rev
Log:
rename simulation rules according to the new naming convention.

Added:
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py
      - copied, changed from r33063, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py
      - copied, changed from r33063, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py
      - copied, changed from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py
      - copied, changed from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py
      - copied, changed from r33063, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py
      - copied, changed from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py
      - copied, changed from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py
Removed:
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py
    erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py
Modified:
    erp5/trunk/bt5/erp5_simulation/bt/revision
    erp5/trunk/bt5/erp5_simulation/bt/template_document_id_list

Copied: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py (from r33063, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py)
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py?p2=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py&p1=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py&r1=33063&r2=33255&rev=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRootSimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -38,7 +38,7 @@
      MovementCollectionUpdaterMixin
 from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
 
-class DeliveryRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
+class DeliveryRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
   """
   Delivery Rule object make sure an Delivery in the simulation
   is consistent with the real delivery
@@ -46,8 +46,8 @@
   WARNING: what to do with movement split ?
   """
   # CMF Type Definition
-  meta_type = 'ERP5 Delivery Rule'
-  portal_type = 'Delivery Rule'
+  meta_type = 'ERP5 Delivery Root Simulation Rule'
+  portal_type = 'Delivery Root Simulation Rule'
 
   # Declarative security
   security = ClassSecurityInfo()

Removed: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py?rev=33254&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliveryRule.py (removed)
@@ -1,157 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility 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
-# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-##############################################################################
-"""
-XXX This file is experimental for new simulation implementation, and
-will replace DeliveryRule.
-"""
-
-import zope.interface
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions, PropertySheet, interfaces
-from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5.mixin.rule import RuleMixin
-from Products.ERP5.mixin.movement_collection_updater import \
-     MovementCollectionUpdaterMixin
-from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
-
-class DeliveryRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
-  """
-  Delivery Rule object make sure an Delivery in the simulation
-  is consistent with the real delivery
-
-  WARNING: what to do with movement split ?
-  """
-  # CMF Type Definition
-  meta_type = 'ERP5 Delivery Rule'
-  portal_type = 'Delivery Rule'
-
-  # Declarative security
-  security = ClassSecurityInfo()
-  security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-  # Declarative interfaces
-  zope.interface.implements(interfaces.IRule,
-                            interfaces.IDivergenceController,
-                            interfaces.IMovementCollectionUpdater,)
-
-  # Default Properties
-  property_sheets = (
-    PropertySheet.Base,
-    PropertySheet.XMLObject,
-    PropertySheet.CategoryCore,
-    PropertySheet.DublinCore,
-    PropertySheet.Task,
-    PropertySheet.Predicate,
-    PropertySheet.Reference,
-    PropertySheet.Version,
-    PropertySheet.Rule
-    )
-
-  def _getMovementGenerator(self):
-    """
-    Return the movement generator to use in the expand process
-    """
-    return DeliveryRuleMovementGenerator()
-
-  def _getMovementGeneratorContext(self, context):
-    """
-    Return the movement generator context to use for expand
-    """
-    return context
-
-  def _getMovementGeneratorMovementList(self):
-    """
-    Return the movement lists to provide to the movement generator
-    """
-    return []
-
-  def _isProfitAndLossMovement(self, movement):
-    # For a kind of trade rule, a profit and loss movement lacks source
-    # or destination.
-    return (movement.getSource() is None or movement.getDestination() is None)
-
-class DeliveryRuleMovementGenerator(MovementGeneratorMixin):
-  def getGeneratedMovementList(self, context, movement_list=None,
-                                rounding=False):
-    """
-    Input movement list comes from delivery
-    """
-    ret = []
-    rule = context.getSpecialiseValue()
-    for input_movement, business_path in self \
-            ._getInputMovementAndPathTupleList(context):
-      kw = self._getPropertyAndCategoryList(input_movement, business_path,
-                                            rule)
-      input_movement_url = input_movement.getRelativeUrl()
-      kw.update({'order':input_movement_url,
-                 'delivery':input_movement_url})
-      simulation_movement = context.newContent(
-        portal_type=RuleMixin.movement_type,
-        temp_object=True,
-        **kw)
-      ret.append(simulation_movement)
-    return ret
-
-  def _getInputMovementList(self, context):
-    """Input movement list comes from delivery"""
-    delivery = context.getDefaultCausalityValue()
-    if delivery is None:
-      return []
-    else:
-      ret = []
-      existing_movement_list = context.objectValues()
-      for movement in delivery.getMovementList(
-        portal_type=delivery.getPortalDeliveryMovementTypeList()):
-        simulation_movement = self._getDeliveryRelatedSimulationMovement(movement)
-        if simulation_movement is None or \
-               simulation_movement in existing_movement_list:
-          ret.append(movement)
-      return ret
-
-  def _getDeliveryRelatedSimulationMovement(self, delivery_movement):
-    """Helper method to get the delivery related simulation movement.
-    This method is more robust than simply calling getDeliveryRelatedValue
-    which will not work if simulation movements are not indexed.
-    """
-    simulation_movement = delivery_movement.getDeliveryRelatedValue()
-    if simulation_movement is not None:
-      return simulation_movement
-    # simulation movement was not found, maybe simply because it's not indexed
-    # yet. We'll look in the simulation tree and try to find it anyway before
-    # creating another simulation movement.
-    # Try to find the one from trade model rule, which is the most common case
-    # where we may expand again before indexation of simulation movements is
-    # finished.
-    delivery = delivery_movement.getExplanationValue()
-    for movement in delivery.getMovementList():
-      related_simulation_movement = movement.getDeliveryRelatedValue()
-      if related_simulation_movement is not None:
-        for applied_rule in related_simulation_movement.contentValues():
-          for simulation_movement in applied_rule.contentValues():
-            if simulation_movement.getDeliveryValue() == delivery_movement:
-              return simulation_movement
-    return None

Added: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py?rev=33255&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py (added)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/DeliverySimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -1,0 +1,113 @@
+##############################################################################
+#
+# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility 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
+# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+##############################################################################
+"""
+XXX This file is experimental for new simulation implementation, and
+will replace DeliveryRule.
+"""
+
+import zope.interface
+from AccessControl import ClassSecurityInfo
+from Products.ERP5Type import Permissions, PropertySheet, interfaces
+from Products.ERP5.Document.Predicate import Predicate
+from Products.ERP5.mixin.rule import RuleMixin
+from Products.ERP5.mixin.movement_collection_updater import \
+     MovementCollectionUpdaterMixin
+from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
+
+class DeliverySimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
+  """
+  Delivery Rule object make sure an Delivery in the simulation
+  is consistent with the real delivery
+
+  WARNING: what to do with movement split ?
+  """
+  # CMF Type Definition
+  meta_type = 'ERP5 Delivery Simulation Rule'
+  portal_type = 'Delivery Simulation Rule'
+
+  # Declarative security
+  security = ClassSecurityInfo()
+  security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+  # Declarative interfaces
+  zope.interface.implements(interfaces.IRule,
+                            interfaces.IDivergenceController,
+                            interfaces.IMovementCollectionUpdater,)
+
+  # Default Properties
+  property_sheets = (
+    PropertySheet.Base,
+    PropertySheet.XMLObject,
+    PropertySheet.CategoryCore,
+    PropertySheet.DublinCore,
+    PropertySheet.Task,
+    PropertySheet.Predicate,
+    PropertySheet.Reference,
+    PropertySheet.Version,
+    PropertySheet.Rule
+    )
+
+  def _getMovementGenerator(self):
+    """
+    Return the movement generator to use in the expand process
+    """
+    return DeliveryRuleMovementGenerator()
+
+  def _getMovementGeneratorContext(self, context):
+    """
+    Return the movement generator context to use for expand
+    """
+    return context
+
+  def _getMovementGeneratorMovementList(self):
+    """
+    Return the movement lists to provide to the movement generator
+    """
+    return []
+
+  def _isProfitAndLossMovement(self, movement):
+    # For a kind of trade rule, a profit and loss movement lacks source
+    # or destination.
+    return (movement.getSource() is None or movement.getDestination() is None)
+
+class DeliveryRuleMovementGenerator(MovementGeneratorMixin):
+  def getGeneratedMovementList(self, context, movement_list=None,
+                                rounding=False):
+    """
+    Input movement list comes from the parent
+    """
+    ret = []
+    for input_movement, business_path in self \
+            ._getInputMovementAndPathTupleList(context):
+      kw = self._getPropertyAndCategoryList(input_movement, business_path)
+      kw.update({'order':None,'delivery':None})
+      simulation_movement = context.newContent(
+        portal_type=RuleMixin.movement_type,
+        temp_object=True,
+        **kw)
+      ret.append(simulation_movement)
+    return ret

Copied: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py (from r33063, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py)
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py?p2=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py&p1=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py&r1=33063&r2=33255&rev=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRootSimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -38,14 +38,14 @@
      MovementCollectionUpdaterMixin
 from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
 
-class InvoiceRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
+class InvoiceRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
   """
   InvoiceRule and DeliveryRule seems to be identical. Keep it for
   compatibility only.
   """
   # CMF Type Definition
-  meta_type = 'ERP5 Invoice Rule'
-  portal_type = 'Invoice Rule'
+  meta_type = 'ERP5 Invoice Root Simulation Rule'
+  portal_type = 'Invoice Root Simulation Rule'
 
   # Declarative security
   security = ClassSecurityInfo()

Removed: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py?rev=33254&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceRule.py (removed)
@@ -1,156 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility 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
-# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-##############################################################################
-"""
-XXX This file is experimental for new simulation implementation, and
-will replace InvoiceRule.
-"""
-
-import zope.interface
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions, PropertySheet, interfaces
-from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5.mixin.rule import RuleMixin
-from Products.ERP5.mixin.movement_collection_updater import \
-     MovementCollectionUpdaterMixin
-from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
-
-class InvoiceRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
-  """
-  InvoiceRule and DeliveryRule seems to be identical. Keep it for
-  compatibility only.
-  """
-  # CMF Type Definition
-  meta_type = 'ERP5 Invoice Rule'
-  portal_type = 'Invoice Rule'
-
-  # Declarative security
-  security = ClassSecurityInfo()
-  security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-  # Declarative interfaces
-  zope.interface.implements(interfaces.IRule,
-                            interfaces.IDivergenceController,
-                            interfaces.IMovementCollectionUpdater,)
-
-  # Default Properties
-  property_sheets = (
-    PropertySheet.Base,
-    PropertySheet.XMLObject,
-    PropertySheet.CategoryCore,
-    PropertySheet.DublinCore,
-    PropertySheet.Task,
-    PropertySheet.Predicate,
-    PropertySheet.Reference,
-    PropertySheet.Version,
-    PropertySheet.Rule
-    )
-
-  def _getMovementGenerator(self):
-    """
-    Return the movement generator to use in the expand process
-    """
-    return InvoiceRuleMovementGenerator()
-
-  def _getMovementGeneratorContext(self, context):
-    """
-    Return the movement generator context to use for expand
-    """
-    return context
-
-  def _getMovementGeneratorMovementList(self):
-    """
-    Return the movement lists to provide to the movement generator
-    """
-    return []
-
-  def _isProfitAndLossMovement(self, movement):
-    # For a kind of trade rule, a profit and loss movement lacks source
-    # or destination.
-    return (movement.getSource() is None or movement.getDestination() is None)
-
-class InvoiceRuleMovementGenerator(MovementGeneratorMixin):
-  def getGeneratedMovementList(self, context, movement_list=None,
-                                rounding=False):
-    """
-    Input movement list comes from delivery
-    """
-    ret = []
-    rule = context.getSpecialiseValue()
-    for input_movement, business_path in self \
-            ._getInputMovementAndPathTupleList(context):
-      kw = self._getPropertyAndCategoryList(input_movement, business_path,
-                                            rule)
-      input_movement_url = input_movement.getRelativeUrl()
-      kw.update({'order':input_movement_url,
-                 'delivery':input_movement_url})
-      simulation_movement = context.newContent(
-        portal_type=RuleMixin.movement_type,
-        temp_object=True,
-        **kw)
-      ret.append(simulation_movement)
-    return ret
-
-  def _getInputMovementList(self, context):
-    """Input movement list comes from delivery"""
-    delivery = context.getDefaultCausalityValue()
-    if delivery is None:
-      return []
-    else:
-      ret = []
-      existing_movement_list = context.objectValues()
-      for movement in delivery.getMovementList(
-        portal_type=(delivery.getPortalInvoiceMovementTypeList() + \
-                     delivery.getPortalTaxMovementTypeList())):
-        simulation_movement = self._getDeliveryRelatedSimulationMovement(movement)
-        if simulation_movement is None or \
-               simulation_movement in existing_movement_list:
-          ret.append(movement)
-      return ret
-
-  def _getDeliveryRelatedSimulationMovement(self, delivery_movement):
-    """Helper method to get the delivery related simulation movement.
-    This method is more robust than simply calling getDeliveryRelatedValue
-    which will not work if simulation movements are not indexed.
-    """
-    simulation_movement = delivery_movement.getDeliveryRelatedValue()
-    if simulation_movement is not None:
-      return simulation_movement
-    # simulation movement was not found, maybe simply because it's not indexed
-    # yet. We'll look in the simulation tree and try to find it anyway before
-    # creating another simulation movement.
-    # Try to find the one from trade model rule, which is the most common case
-    # where we may expand again before indexation of simulation movements is
-    # finished.
-    delivery = delivery_movement.getExplanationValue()
-    for movement in delivery.getMovementList():
-      related_simulation_movement = movement.getDeliveryRelatedValue()
-      if related_simulation_movement is not None:
-        for applied_rule in related_simulation_movement.contentValues():
-          for simulation_movement in applied_rule.contentValues():
-            if simulation_movement.getDeliveryValue() == delivery_movement:
-              return simulation_movement
-    return None

Copied: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py (from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py)
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py?p2=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py&p1=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py&r1=33249&r2=33255&rev=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceSimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -38,13 +38,13 @@
      MovementCollectionUpdaterMixin
 from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
 
-class InvoicingRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
+class InvoiceSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
   """
   Invoicing Rule expand simulation created by a order or delivery rule.
   """
   # CMF Type Definition
-  meta_type = 'ERP5 Invoicing Rule'
-  portal_type = 'Invoicing Rule'
+  meta_type = 'ERP5 Invoice Simulation Rule'
+  portal_type = 'Invoice Simulation Rule'
 
   # Declarative security
   security = ClassSecurityInfo()

Removed: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py?rev=33254&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py (removed)
@@ -1,228 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility 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
-# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-##############################################################################
-"""
-XXX This file is experimental for new simulation implementation, and
-will replace InvoicingRule.
-"""
-
-import zope.interface
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions, PropertySheet, interfaces
-from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5.mixin.rule import RuleMixin
-from Products.ERP5.mixin.movement_collection_updater import \
-     MovementCollectionUpdaterMixin
-from Products.ERP5.Document.PredicateMatrix import PredicateMatrix
-from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
-
-class InvoiceTransactionRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate, PredicateMatrix):
-  """
-  Invoice Transaction Rule object generates accounting movements for
-  each invoice movement based on category membership and other
-  predicated. Template accounting movements are stored in cells inside
-  an instance of the InvoiceTransactionRule.
-  """
-  # CMF Type Definition
-  meta_type = 'ERP5 Invoice Transaction Rule'
-  portal_type = 'Invoice Transaction Rule'
-
-  # Declarative security
-  security = ClassSecurityInfo()
-  security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-  # Declarative interfaces
-  zope.interface.implements(interfaces.IRule,
-                            interfaces.IDivergenceController,
-                            interfaces.IMovementCollectionUpdater,)
-
-  # Default Properties
-  property_sheets = (
-    PropertySheet.Base,
-    PropertySheet.XMLObject,
-    PropertySheet.CategoryCore,
-    PropertySheet.DublinCore,
-    PropertySheet.Task,
-    PropertySheet.Predicate,
-    PropertySheet.Reference,
-    PropertySheet.Version,
-    PropertySheet.Rule
-    )
-
-  def _getMovementGenerator(self):
-    """
-    Return the movement generator to use in the expand process
-    """
-    return InvoiceTransactionRuleMovementGenerator()
-
-  def _getMovementGeneratorContext(self, context):
-    """
-    Return the movement generator context to use for expand
-    """
-    return context
-
-  def _getMovementGeneratorMovementList(self):
-    """
-    Return the movement lists to provide to the movement generator
-    """
-    return []
-
-  def _isProfitAndLossMovement(self, movement):
-    # For a kind of trade rule, a profit and loss movement lacks source
-    # or destination.
-    return (movement.getSource() is None or movement.getDestination() is None)
-
-class InvoiceTransactionRuleMovementGenerator(MovementGeneratorMixin):
-  def getGeneratedMovementList(self, context, movement_list=None,
-                                rounding=False):
-    """
-    Input movement list comes from order
-
-    XXX This implementation is very primitive, and does not support BPM,
-    i.e. business paths are not taken into account.
-    """
-    ret = []
-
-    rule = context.getSpecialiseValue()
-    # input_movement, business_path = rule._getInputMovementAndPathTupleList(
-    #   applied_rule)[0]
-    input_movement = context.getParentValue()
-    parent_movement = context.getParentValue()
-
-    # Find a matching cell
-    cell = rule._getMatchingCell(input_movement)
-
-    if cell is not None:
-      for accounting_rule_cell_line in cell.objectValues():
-        # get the resource (in that order):
-        #  * resource from the invoice (using deliveryValue)
-        #  * price_currency from the invoice
-        #  * price_currency from the parents simulation movement's
-        # deliveryValue
-        #  * price_currency from the top level simulation movement's
-        # orderValue
-        resource = None
-        invoice_line = input_movement.getDeliveryValue()
-        if invoice_line is not None :
-          invoice = invoice_line.getExplanationValue()
-          resource = invoice.getProperty('resource',
-                     invoice.getProperty('price_currency', None))
-        if resource is None :
-          # search the resource on parents simulation movement's deliveries
-          simulation_movement = parent_movement
-          portal_simulation = context.getPortalObject().portal_simulation
-          while resource is None and \
-                      simulation_movement != portal_simulation :
-            delivery = simulation_movement.getDeliveryValue()
-            if delivery is not None:
-              resource = delivery.getProperty('price_currency', None)
-            if (resource is None) and \
-               (simulation_movement.getParentValue().getParentValue() \
-                                      == portal_simulation) :
-              # we are on the first simulation movement, we'll try
-              # to get the resource from it's order price currency.
-              order = simulation_movement.getOrderValue()
-              if order is not None:
-                resource = order.getProperty('price_currency', None)
-            simulation_movement = simulation_movement\
-                                        .getParentValue().getParentValue()
-        if resource is None :
-          # last resort : get the resource from the rule
-          resource = accounting_rule_cell_line.getResource() \
-              or cell.getResource()
-        # XXX we need business path here?
-        kw = self._getPropertyAndCategoryList(input_movement, None, rule)
-
-        kw.update(
-          delivery=None,
-          source=[accounting_rule_cell_line.getSource()],
-          destination=[accounting_rule_cell_line.getDestination()],
-          quantity=(input_movement.getCorrectedQuantity() *
-            input_movement.getPrice(0.0)) *
-            accounting_rule_cell_line.getQuantity(),
-          resource=[resource],
-          price=1,
-        )
-        if resource is not None:
-          #set asset_price on movement when resource is different from price
-          #currency of the source/destination section
-          destination_exchange_ratio, precision = self \
-              ._getCurrencyRatioAndPrecisionByArrow(
-              rule, 'destination_section', kw)
-          if destination_exchange_ratio is not None:
-            kw.update(destination_total_asset_price=round(
-             (destination_exchange_ratio*
-              parent_movement.getTotalPrice()),precision))
-
-          source_exchange_ratio, precision = self \
-              ._getCurrencyRatioAndPrecisionByArrow(
-              rule, 'source_section', kw)
-          if source_exchange_ratio is not None:
-            kw.update(source_total_asset_price=round(
-             (source_exchange_ratio*
-              parent_movement.getTotalPrice()),precision))
-
-        if accounting_rule_cell_line.hasProperty(
-            'generate_prevision_script_id'):
-          generate_prevision_script_id = \
-                accounting_rule_cell_line.getGeneratePrevisionScriptId()
-          kw.update(getattr(input_movement,
-                            generate_prevision_script_id)(kw))
-        simulation_movement = context.newContent(
-          portal_type=RuleMixin.movement_type,
-          temp_object=True,
-          **kw)
-        ret.append(simulation_movement)
-    return ret
-
-  def _getCurrencyRatioAndPrecisionByArrow(self, rule, arrow, prevision_line):
-    from Products.ERP5Type.Document import newTempSimulationMovement
-    try:
-      prevision_currency = prevision_line['resource'][0]
-    except IndexError:
-      prevision_currency = None
-    exchange_ratio = None
-    precision = None
-    try:
-      section = prevision_line[arrow][0]
-    except IndexError:
-      section = None
-    if section is not None:
-      currency_url = rule.restrictedTraverse(section).getProperty(
-          'price_currency', None)
-    else:
-      currency_url = None
-    if currency_url is not None and prevision_currency != currency_url:
-      precision = section.getPriceCurrencyValue() \
-          .getQuantityPrecision()
-      temporary_movement = newTempSimulationMovement(rule.getPortalObject(),
-          '1', **prevision_line)
-      exchange_ratio = rule.restrictedTraverse(currency_url).getPrice(
-          context=temporary_movement.asContext(
-        categories=['price_currency/%s' % currency_url,
-                    'resource/%s' % prevision_currency],
-        start_date=temporary_movement.getStartDate()))
-    return exchange_ratio, precision

Copied: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py (from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py)
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py?p2=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py&p1=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py&r1=33249&r2=33255&rev=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoiceTransactionSimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -39,7 +39,7 @@
 from Products.ERP5.Document.PredicateMatrix import PredicateMatrix
 from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
 
-class InvoiceTransactionRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate, PredicateMatrix):
+class InvoiceTransactionSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate, PredicateMatrix):
   """
   Invoice Transaction Rule object generates accounting movements for
   each invoice movement based on category membership and other
@@ -47,8 +47,8 @@
   an instance of the InvoiceTransactionRule.
   """
   # CMF Type Definition
-  meta_type = 'ERP5 Invoice Transaction Rule'
-  portal_type = 'Invoice Transaction Rule'
+  meta_type = 'ERP5 Invoice Transaction Simulation Rule'
+  portal_type = 'Invoice Transaction Simulation Rule'
 
   # Declarative security
   security = ClassSecurityInfo()

Removed: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py?rev=33254&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/InvoicingRule.py (removed)
@@ -1,116 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility 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
-# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-##############################################################################
-"""
-XXX This file is experimental for new simulation implementation, and
-will replace InvoicingRule.
-"""
-
-import zope.interface
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions, PropertySheet, interfaces
-from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5.mixin.rule import RuleMixin
-from Products.ERP5.mixin.movement_collection_updater import \
-     MovementCollectionUpdaterMixin
-from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
-
-class InvoicingRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
-  """
-  Invoicing Rule expand simulation created by a order or delivery rule.
-  """
-  # CMF Type Definition
-  meta_type = 'ERP5 Invoicing Rule'
-  portal_type = 'Invoicing Rule'
-
-  # Declarative security
-  security = ClassSecurityInfo()
-  security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-  # Declarative interfaces
-  zope.interface.implements(interfaces.IRule,
-                            interfaces.IDivergenceController,
-                            interfaces.IMovementCollectionUpdater,)
-
-  # Default Properties
-  property_sheets = (
-    PropertySheet.Base,
-    PropertySheet.XMLObject,
-    PropertySheet.CategoryCore,
-    PropertySheet.DublinCore,
-    PropertySheet.Task,
-    PropertySheet.Predicate,
-    PropertySheet.Reference,
-    PropertySheet.Version,
-    PropertySheet.Rule
-    )
-
-  def _getMovementGenerator(self):
-    """
-    Return the movement generator to use in the expand process
-    """
-    return InvoicingRuleMovementGenerator()
-
-  def _getMovementGeneratorContext(self, context):
-    """
-    Return the movement generator context to use for expand
-    """
-    return context
-
-  def _getMovementGeneratorMovementList(self):
-    """
-    Return the movement lists to provide to the movement generator
-    """
-    return []
-
-  def _isProfitAndLossMovement(self, movement):
-    # For a kind of trade rule, a profit and loss movement lacks source
-    # or destination.
-    return (movement.getSource() is None or movement.getDestination() is None)
-
-class InvoicingRuleMovementGenerator(MovementGeneratorMixin):
-  def getGeneratedMovementList(self, context, movement_list=None,
-                                rounding=False):
-    """
-    Input movement list comes from order
-
-    XXX This implementation is very primitive, and does not support BPM,
-    i.e. business paths are not taken into account.
-    """
-    ret = []
-    for input_movement, business_path in self \
-            ._getInputMovementAndPathTupleList(context):
-      kw = self._getPropertyAndCategoryList(input_movement, business_path)
-      kw.update({'order':None,'delivery':None})
-      simulation_movement = context.newContent(
-        portal_type=RuleMixin.movement_type,
-        temp_object=True,
-        **kw)
-      ret.append(simulation_movement)
-    return ret
-
-  def _getInputMovementList(self, context):
-    return [context.getParentValue(),]

Copied: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py (from r33063, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py)
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py?p2=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py&p1=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py&r1=33063&r2=33255&rev=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRootSimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -38,7 +38,7 @@
      MovementCollectionUpdaterMixin
 from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
 
-class OrderRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
+class OrderRootSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
   """
   Order Rule object make sure an Order in the simulation
   is consistent with the real order
@@ -46,8 +46,8 @@
   WARNING: what to do with movement split ?
   """
   # CMF Type Definition
-  meta_type = 'ERP5 Order Rule'
-  portal_type = 'Order Rule'
+  meta_type = 'ERP5 Order Root Simulation Rule'
+  portal_type = 'Order Root Simulation Rule'
 
   # Declarative security
   security = ClassSecurityInfo()

Removed: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py?rev=33254&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/OrderRule.py (removed)
@@ -1,125 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility 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
-# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-##############################################################################
-"""
-XXX This file is experimental for new simulation implementation, and
-will replace OrderRule.
-"""
-
-import zope.interface
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions, PropertySheet, interfaces
-from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5.mixin.rule import RuleMixin
-from Products.ERP5.mixin.movement_collection_updater import \
-     MovementCollectionUpdaterMixin
-from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
-
-class OrderRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
-  """
-  Order Rule object make sure an Order in the simulation
-  is consistent with the real order
-
-  WARNING: what to do with movement split ?
-  """
-  # CMF Type Definition
-  meta_type = 'ERP5 Order Rule'
-  portal_type = 'Order Rule'
-
-  # Declarative security
-  security = ClassSecurityInfo()
-  security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-  # Declarative interfaces
-  zope.interface.implements(interfaces.IRule,
-                            interfaces.IDivergenceController,
-                            interfaces.IMovementCollectionUpdater,)
-
-  # Default Properties
-  property_sheets = (
-    PropertySheet.Base,
-    PropertySheet.XMLObject,
-    PropertySheet.CategoryCore,
-    PropertySheet.DublinCore,
-    PropertySheet.Task,
-    PropertySheet.Predicate,
-    PropertySheet.Reference,
-    PropertySheet.Version,
-    PropertySheet.Rule
-    )
-
-  def _getMovementGenerator(self):
-    """
-    Return the movement generator to use in the expand process
-    """
-    return OrderRuleMovementGenerator()
-
-  def _getMovementGeneratorContext(self, context):
-    """
-    Return the movement generator context to use for expand
-    """
-    return context
-
-  def _getMovementGeneratorMovementList(self):
-    """
-    Return the movement lists to provide to the movement generator
-    """
-    return []
-
-  def _isProfitAndLossMovement(self, movement):
-    # For a kind of trade rule, a profit and loss movement lacks source
-    # or destination.
-    return (movement.getSource() is None or movement.getDestination() is None)
-
-class OrderRuleMovementGenerator(MovementGeneratorMixin):
-  def getGeneratedMovementList(self, context, movement_list=None,
-                                rounding=False):
-    """
-    Input movement list comes from order
-    """
-    ret = []
-    rule = context.getSpecialiseValue()
-    for input_movement, business_path in self \
-            ._getInputMovementAndPathTupleList(context):
-      kw = self._getPropertyAndCategoryList(input_movement, business_path,
-                                            rule)
-      input_movement_url = input_movement.getRelativeUrl()
-      kw.update({'order':input_movement_url})
-      simulation_movement = context.newContent(
-        portal_type=RuleMixin.movement_type,
-        temp_object=True,
-        **kw)
-      ret.append(simulation_movement)
-    return ret
-
-  def _getInputMovementList(self, context):
-    """Input movement list comes from order"""
-    order = context.getDefaultCausalityValue()
-    if order is None:
-      return []
-    else:
-      return order.getMovementList(
-        portal_type=order.getPortalOrderMovementTypeList())

Removed: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py?rev=33254&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py (removed)
@@ -1,143 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2010 Nexedi SARL and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility 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
-# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-##############################################################################
-"""
-XXX This file is experimental for new simulation implementation, and
-will replace PaymentRule.
-"""
-
-import zope.interface
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions, PropertySheet, interfaces
-from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5.mixin.rule import RuleMixin
-from Products.ERP5.mixin.movement_collection_updater import \
-     MovementCollectionUpdaterMixin
-from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
-
-class PaymentRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
-  """
-  Payment Rule generates payment simulation movement from invoice
-  transaction simulation movements.
-  """
-  # CMF Type Definition
-  meta_type = 'ERP5 Payment Rule'
-  portal_type = 'Payment Rule'
-
-  # Declarative security
-  security = ClassSecurityInfo()
-  security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-  # Declarative interfaces
-  zope.interface.implements(interfaces.IRule,
-                            interfaces.IDivergenceController,
-                            interfaces.IMovementCollectionUpdater,)
-
-  # Default Properties
-  property_sheets = (
-    PropertySheet.Base,
-    PropertySheet.XMLObject,
-    PropertySheet.CategoryCore,
-    PropertySheet.DublinCore,
-    PropertySheet.Task,
-    PropertySheet.Predicate,
-    PropertySheet.Reference,
-    PropertySheet.Version,
-    PropertySheet.Rule
-    )
-
-  def _getMovementGenerator(self):
-    """
-    Return the movement generator to use in the expand process
-    """
-    return PaymentRuleMovementGenerator()
-
-  def _getMovementGeneratorContext(self, context):
-    """
-    Return the movement generator context to use for expand
-    """
-    return context
-
-  def _getMovementGeneratorMovementList(self):
-    """
-    Return the movement lists to provide to the movement generator
-    """
-    return []
-
-  def _isProfitAndLossMovement(self, movement):
-    # For a kind of trade rule, a profit and loss movement lacks source
-    # or destination.
-    return (movement.getSource() is None or movement.getDestination() is None)
-
-class PaymentRuleMovementGenerator(MovementGeneratorMixin):
-  def getGeneratedMovementList(self, context, movement_list=None,
-                                rounding=False):
-    """
-    Input movement list comes from parent.
-
-    XXX This implementation using Business Path, not Payment Condition.
-    """
-    ret = []
-    rule = context.getSpecialiseValue()
-    for input_movement, business_path in self \
-            ._getInputMovementAndPathTupleList(context):
-      # Payment Rule does not work with Business Path
-      if business_path is None:
-        continue
-      # Since we need to consider business_path only for bank movement,
-      # not for payable movement, we pass None as business_path here.
-      kw = self._getPropertyAndCategoryList(input_movement, None, rule)
-      kw.update({'order':None, 'delivery':None})
-      quantity = kw.pop('quantity', 0)
-      efficiency = business_path.getEfficiency()
-      if efficiency:
-        quantity *= efficiency
-      start_date = business_path.getExpectedStartDate(input_movement)
-      if start_date is not None:
-        kw.update({'start_date':start_date})
-      stop_date = business_path.getExpectedStopDate(input_movement)
-      if stop_date is not None:
-        kw.update({'stop_date':stop_date})
-      # one for payable
-      simulation_movement = context.newContent(
-        portal_type=RuleMixin.movement_type,
-        temp_object=True,
-        quantity=-quantity,
-        **kw)
-      ret.append(simulation_movement)
-      # one for bank
-      kw.update({'source':business_path.getSource(),
-                 'destination':business_path.getDestination(),})
-      simulation_movement = context.newContent(
-        portal_type=RuleMixin.movement_type,
-        temp_object=True,
-        quantity=quantity,
-        **kw)
-      ret.append(simulation_movement)
-    return ret
-
-  def _getInputMovementList(self, context):
-    return [context.getParentValue(),]

Copied: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py (from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py)
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py?p2=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py&p1=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py&r1=33249&r2=33255&rev=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/PaymentSimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -38,14 +38,14 @@
      MovementCollectionUpdaterMixin
 from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
 
-class PaymentRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
+class PaymentSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
   """
   Payment Rule generates payment simulation movement from invoice
   transaction simulation movements.
   """
   # CMF Type Definition
-  meta_type = 'ERP5 Payment Rule'
-  portal_type = 'Payment Rule'
+  meta_type = 'ERP5 Payment Simulation Rule'
+  portal_type = 'Payment Simulation Rule'
 
   # Declarative security
   security = ClassSecurityInfo()

Removed: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py?rev=33254&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py (removed)
@@ -1,140 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsibility 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
-# guarantees 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-##############################################################################
-"""
-XXX This file is experimental for new simulation implementation, and
-will replace DeliveryRule.
-"""
-
-import zope.interface
-from AccessControl import ClassSecurityInfo
-from Products.ERP5Type import Permissions, PropertySheet, interfaces
-from Products.ERP5.Document.Predicate import Predicate
-from Products.ERP5.mixin.rule import RuleMixin
-from Products.ERP5.mixin.movement_collection_updater import \
-     MovementCollectionUpdaterMixin
-from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
-
-class TradeModelRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
-  """
-    Rule for Trade Model
-  """
-  # CMF Type Definition
-  meta_type = 'ERP5 Trade Model Rule'
-  portal_type = 'Trade Model Rule'
-
-  # Declarative security
-  security = ClassSecurityInfo()
-  security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-  # Declarative interfaces
-  zope.interface.implements(interfaces.IRule,
-                            interfaces.IDivergenceController,
-                            interfaces.IMovementCollectionUpdater,)
-
-  # Default Properties
-  property_sheets = (
-    PropertySheet.Base,
-    PropertySheet.XMLObject,
-    PropertySheet.CategoryCore,
-    PropertySheet.DublinCore,
-    PropertySheet.Task,
-    PropertySheet.Predicate,
-    PropertySheet.Reference,
-    PropertySheet.Version,
-    PropertySheet.Rule
-    )
-
-  def _getMovementGenerator(self):
-    """
-    Return the movement generator to use in the expand process
-    """
-    return TradeModelRuleMovementGenerator()
-
-  def _getMovementGeneratorContext(self, context):
-    """
-    Return the movement generator context to use for expand
-    """
-    return context
-
-  def _getMovementGeneratorMovementList(self):
-    """
-    Return the movement lists to provide to the movement generator
-    """
-    return []
-
-  def _isProfitAndLossMovement(self, movement):
-    # For a kind of trade rule, a profit and loss movement lacks source
-    # or destination.
-    return (movement.getSource() is None or movement.getDestination() is None)
-
-class TradeModelRuleMovementGenerator(MovementGeneratorMixin):
-  def getGeneratedMovementList(self, context, movement_list=None,
-                                rounding=False):
-    """
-    Generates list of movements
-    """
-    movement_list = []
-    trade_condition = context.getTradeConditionValue()
-    business_process = context.getBusinessProcessValue()
-
-    if trade_condition is None or business_process is None:
-      return movement_list
-
-    context_movement = context.getParentValue()
-    for amount in trade_condition.getAggregatedAmountList(context_movement):
-      # business path specific
-      business_path_list = business_process.getPathValueList(
-          trade_phase=amount.getTradePhaseList())
-      if len(business_path_list) == 0:
-        raise ValueError('Cannot find Business Path')
-
-      if len(business_path_list) != 1:
-        raise NotImplementedError('Only one Business Path is supported')
-
-      business_path = business_path_list[0]
-
-      kw = self._getPropertyAndCategoryList(context_movement, business_path)
-
-      # rule specific
-      kw['price'] = amount.getProperty('price')
-      kw['resource'] = amount.getProperty('resource_list')
-      kw['reference'] = amount.getProperty('reference')
-      kw['quantity'] = amount.getProperty('quantity')
-      kw['base_application'] = amount.getProperty(
-          'base_application_list')
-      kw['base_contribution'] = amount.getProperty(
-          'base_contribution_list')
-
-      simulation_movement = context.newContent(
-        portal_type=RuleMixin.movement_type,
-        temp_object=True,
-        order=None,
-        delivery=None,
-        **kw)
-      movement_list.append(simulation_movement)
-
-    return movement_list

Copied: erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py (from r33249, erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py)
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py?p2=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py&p1=erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py&r1=33249&r2=33255&rev=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelRule.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/DocumentTemplateItem/TradeModelSimulationRule.py [utf8] Tue Mar  2 10:44:19 2010
@@ -38,13 +38,13 @@
      MovementCollectionUpdaterMixin
 from Products.ERP5.mixin.movement_generator import MovementGeneratorMixin
 
-class TradeModelRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
+class TradeModelSimulationRule(RuleMixin, MovementCollectionUpdaterMixin, Predicate):
   """
     Rule for Trade Model
   """
   # CMF Type Definition
-  meta_type = 'ERP5 Trade Model Rule'
-  portal_type = 'Trade Model Rule'
+  meta_type = 'ERP5 Trade Model Simulation Rule'
+  portal_type = 'Trade Model Simulation Rule'
 
   # Declarative security
   security = ClassSecurityInfo()

Modified: erp5/trunk/bt5/erp5_simulation/bt/revision
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/bt/revision?rev=33255&r1=33254&r2=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/bt/revision [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/bt/revision [utf8] Tue Mar  2 10:44:19 2010
@@ -1,1 +1,1 @@
-47
+48

Modified: erp5/trunk/bt5/erp5_simulation/bt/template_document_id_list
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_simulation/bt/template_document_id_list?rev=33255&r1=33254&r2=33255&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_simulation/bt/template_document_id_list [utf8] (original)
+++ erp5/trunk/bt5/erp5_simulation/bt/template_document_id_list [utf8] Tue Mar  2 10:44:19 2010
@@ -1,7 +1,8 @@
-DeliveryRule
-InvoiceRule
-InvoiceTransactionRule
-InvoicingRule
-OrderRule
-PaymentRule
-TradeModelRule
+DeliveryRootSimulationRule
+DeliverySimulationRule
+InvoiceRootSimulationRule
+InvoiceSimulationRule
+InvoiceTransactionSimulationRule
+OrderRootSimulationRule
+PaymentSimulationRule
+TradeModelSimulationRule




More information about the Erp5-report mailing list