[Erp5-report] r30621 - /erp5/trunk/products/ERP5/mixin/amount_generator.py

nobody at svn.erp5.org nobody at svn.erp5.org
Sun Nov 15 09:45:48 CET 2009


Author: jp
Date: Sun Nov 15 09:45:47 2009
New Revision: 30621

URL: http://svn.erp5.org?rev=30621&view=rev
Log:
Deliveries  can act as IDivergenceController

Added:
    erp5/trunk/products/ERP5/mixin/amount_generator.py

Added: erp5/trunk/products/ERP5/mixin/amount_generator.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/mixin/amount_generator.py?rev=30621&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/mixin/amount_generator.py (added)
+++ erp5/trunk/products/ERP5/mixin/amount_generator.py [utf8] Sun Nov 15 09:45:47 2009
@@ -1,0 +1,118 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2009 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.
+#
+##############################################################################
+
+import zope.interface
+from AccessControl import ClassSecurityInfo
+from Products.ERP5Type import Permissions, interfaces
+
+class AmountGeneratorMixin:
+  """
+  This class provides a generic implementation of IAmountGenerator.
+
+  NOTE: very draft placeholder
+  """
+
+  # Declarative security
+  security = ClassSecurityInfo()
+  security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+  # Declarative interfaces
+  zope.interface.implements(interfaces.IAmountGenerator,)
+
+  # Declarative interfaces
+  security.declareProtected(Permissions.AccessContentsInformation, 'getAggregatedAmountList')
+  def getAggregatedAmountList(self, context, movement_list=None, rounding=False):
+    """
+    NOTE: very draft placeholder
+    """
+    # Generic Transformation Algorithm
+    #  the same algorith should apply to payroll, taxes and MRP transformations
+
+    # Set the common arbitrary base amounts in a dictionnary
+    base_amount = {
+      'delivery': 1,
+      'employee': 100,
+    }
+
+    # Set ungrouped empty result list
+    ungrouped_result = []
+
+    # Initialise loop -
+    #  movement_list can be for example delivery.contentValues(use='product')
+    if movement_list is None:
+      movement_list = context.getMovementList()
+
+    # Build the amounts from delivery lines and trade model lines
+    for line in movement_list:
+      # Set line level base application amounts
+      for application in line.getBaseApplicationList(): # Acquired from Resource
+        base_amount[application] = total_price=line.getTotalPrice()
+      # Set line level arbitrary base amounts
+      base_amount.update(dict(
+        price=line.getPrice(),
+        quantity=line.getQuantity(),
+        unit=(line.getQuantityUnit() == 'unit') * line.getQuantity(),
+        ton=(line.getQuantityUnit() == 'ton') * line.getQuantity(),
+        # more base applications could be set here
+      ))
+      # Feed the result with trade model (wihch must be ordered through constraint resolution)
+      for trade_model_line in trade_model.contentValues(portal_type="Trade Model Line"):
+        if trade_model_line.getResource():
+          # This line has a resource, it is an output line
+          amount = Amount(resource=trade_model_line.getResource(),
+                          # Resource can be a VAT service or a Component in MRP
+                          quantity=base_amount[trade_model_line.getBaseApplication()]
+                                  *(trade_model_line.getQuantity() or 1.0),
+                          # Quantity is used a multiplier (like in transformations for MRP)
+                          price=trade_model_line.getPrice(),
+                          # Price could be empty here (like in Transformation)
+                          # or set to the price of a product (ex. a Stamp)
+                          # or set to a tax ratio (ie. price per value units)
+                          base_contribution_list=trade_model_line.getBaseContributionList(),
+                          # We save here the base contribution so that they can 
+                          # be later used by getTotalPrice on the delivery itself
+                        )
+          ungrouped_result.append(amount)
+        else:
+          # This line has a no resource, it is an intermediate line
+          value = base_amount[trade_model_line.getBaseApplication()] 
+                  *(trade_model_line.getQuantity() or 1.0)
+                  # Quantity is used as a multiplier
+                  *(trade_model_line.getPrice() or 1.0)
+                  # Price is used as a ratio (also a kind of multiplier)
+          for key in trade_model_line.getBaseContribution():
+            base_amount[key] += value
+          
+    # Compute the grouped result - It is still unkonwn if grouping should happen
+    #   here and in which way - XXX
+    grouped_result = SomeMovementGroup(ungrouped_result)
+
+    # Return result
+    return grouped_result
+
+




More information about the Erp5-report mailing list