From 52367fe2e5ec6e5615a931edd86ae851717b6a56 Mon Sep 17 00:00:00 2001
From: Yoshinori Okuji <yo@nexedi.com>
Date: Tue, 20 Jan 2004 09:12:08 +0000
Subject: [PATCH] Part of getAggregated moved into subcontent classes
 (TransformedResource, AssortedResource)

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@209 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/Document/Transformation.py | 225 +-----------------------
 1 file changed, 8 insertions(+), 217 deletions(-)

diff --git a/product/ERP5/Document/Transformation.py b/product/ERP5/Document/Transformation.py
index 69dfa47826..d5ee9d0983 100755
--- a/product/ERP5/Document/Transformation.py
+++ b/product/ERP5/Document/Transformation.py
@@ -31,7 +31,6 @@ from AccessControl import ClassSecurityInfo
 
 from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
 from Products.ERP5Type.XMLObject import XMLObject
-from Products.ERP5Type.Base import TempBase
 from Products.ERP5Type.Utils import asList, keepIn, rejectIn
 
 from Products.ERP5.Variated import Variated
@@ -55,11 +54,11 @@ class Transformation(XMLObject, Domain, Variated):
 
       getDomainRangeBaseCategoryList -> base categories which allow to select state...
 
-      getDomainCategoryList -> bonne idée.... = DomainValue...
+      getDomainCategoryList -> bonne id?.... = DomainValue...
                                base category which defines the state
                                (and other things)
 
-      getDomainRangeCategoryList -> bonne idée.... = DomainValue...
+      getDomainRangeCategoryList -> bonne id?.... = DomainValue...
 
     """
 
@@ -287,221 +286,13 @@ une gamme..."""
       # Currently, we do not consider abstractions, we just add whatever we find in all
       # transformations
       for transformation in transformation_list:
-        # Browse each transformed resource of the current transformation
+        # Browse each transformed or assorted resource of the current transformation
         for transformed_resource in transformation.objectValues():
-          # First, we set initial values for quantity and variation
-          # Currently, we only consider discrete variations
-          # Continuous variations will be implemented in a future version of ERP5
-          error_list = []
-          variation = []
-          quantity = transformed_resource.getQuantity()
-          quantity_unit = transformed_resource.getQuantityUnit()
-          efficiency =  transformed_resource.getEfficiency()
-          # XXXXXXXXXXXXXXXXXX maybe this kind of constraints....
-          # should be defined in the property sheet and handled
-          # automaticaly
-          if efficiency is None or efficiency is '' or efficiency == 0.0:
-            efficiency = 1.0
-          else:
-            efficiency = float(efficiency)
-          # We look up the resource involved in this transformed resource
-          resource = transformed_resource.getDefaultResourceValue()
-          if resource is not None:
-            resource_id = resource.getId()
-          else:
-            resource_id = None
-          # and get some attributed we need for the summary
-          priced_quantity = resource.getPricedQuantity()
-          # XXXXXXXXXXXXXXXXXX maybe this kind of constraints....
-          # should be defined in the property sheet and handled
-          # automaticaly
-          try:
-            priced_quantity = float(priced_quantity)
-            if priced_quantity == 0.0: priced_quantity = 1.0
-          except:
-            priced_quantity = 1.0
-            error_list += ["Priced Quantity could not be converted for resource %s" % resource_id]
-          source_base_price = 0.0
-          base_price = 0.0
-          duration = 0.0
-          is_variated_quantity = 0 # The variated quantity is 0 by default
-          # Try to update some attributes based on the resource attributes
-          if resource.hasDefaultBasePrice():
-            base_price = resource.getBasePrice()
-            try:
-              base_price = float(base_price)
-            except:
-              base_price = 0.0
-              error_list += ["Default base price could not be converted for resource %s" % resource_id]
-          if resource.hasSourceBasePrice():
-            source_base_price = resource.getSourceBasePrice()
-            try:
-              source_base_price = float(source_base_price)
-            except:
-              source_base_price = 0.0
-              error_list += ["Source base price could not be converted for resource %s" % resource_id]
-          resource_quantity_unit = resource.getDefaultQuantityUnit()
-          # This is very dirty and we must do some real unit conversion here XXXXXXX
-          if quantity_unit == "Temps/Minute":
-            duration = quantity
-          # Start filing the value holder with what we have now
-          # Maybe we should define a ValueHolder class XXXXXXXXXXXXXXXXXXXXXX
-          # First we create a object which id is the id of the transformed_resource
-          line_item = TempBase(transformed_resource.id)
-          # and then call edit to update its attributed
-          # XXXXXXXXXXXXX bad: this call will call reindex() which is not needed at all
-          # How can we create standard objects which are temporary and not indexed ???
-          line_item.edit(
-              transformation = transformation,
-              transformed_resource = transformed_resource,
-              resource = resource,
-              transformation_id = transformation.getId(),
-              resource_id = resource.getId(),
-              resource_relative_url = resource.getRelativeUrl(),
-              specialise_id = transformation.getId(),
-              specialise_relative_url = transformation.getRelativeUrl(),
-              description =  transformed_resource.getDescription(),
-              quantity_unit = quantity_unit,
-              duration = duration,
-              quantity = quantity,
-              efficiency = efficiency,
-              base_price = base_price,
-              source_base_price = source_base_price,
-              total_source_base_price = 0.0,
-              total_base_price = 0.0,
-              total_duration = 0.0,
-              base_price_defined_by = '',
-              source_base_price_defined_by = '',
-              quantity_defined_by = '',
-              variation_defined_by = '',
-              resource_quantity_unit = resource_quantity_unit
-            )
-          # We are going to try to find which variation applies to the current REQUEST
-          # First we initialize variation to the default variation value define by
-          # the transformed resource
-          variation = transformed_resource.getVariationCategoryList()
-          variation_base_category_list = resource.getVariationBaseCategoryList()
-          self.portal_categories.setCategoryMembership(line_item,
-                                  variation_base_category_list, variation, base=1)
-          # and update the price with the variation price if necessary
-          for resource_variation in transformed_resource.getValueList(
-                               variation_base_category_list, portal_type=variation_type_list):
-            if resource_variation.hasDefaultBasePrice():
-              new_base_price = resource_variation.getBasePrice()
-              try:
-                new_base_price = float(new_base_price)
-              except:
-                new_base_price = 0.0
-                error_list += ["Default base price could not be converted for resource variation %s"
-                     % resource_variation.id]
-              if new_base_price > 0.0:
-                base_price = new_base_price
-                line_item.base_price_defined_by = resource_variation.getId()
-              new_source_base_price = resource_variation.getSourceBasePrice()
-            if resource_variation.hasSourceBasePrice():
-              try:
-                new_source_base_price = float(new_source_base_price)
-              except:
-                new_source_base_price = 0.0
-                error_list += ["Source base price could not be converted for resource variation %s"
-                      % resource_variation.id]
-              if new_source_base_price > 0.0:
-                source_base_price = new_source_base_price
-                line_item.source_base_price_defined_by = resource_variation.getId()
-          # Now, let us update variations and quantities
-          # We will browse the mapped values and dermine which apply
-          for mapped_value in transformed_resource.objectValues():
-            if mapped_value.test(REQUEST):
-              # Update attributes defined by the mapped value
-              for attribute in mapped_value.getMappedValuePropertyList():
-                setattr(line_item, attribute, mapped_value.get(attribute))
-                if attribute == 'quantity':
-                  line_item.quantity_defined_by = mapped_value.getId()
-                  # If we have to do this, then there is a problem....
-                  # We'd better have better API for this, like an update function in the mapped_value
-                  try:
-                    quantity = float(mapped_value.quantity)
-                    is_variated_quantity = 1 # The variated quantity is 1
-                    #                          when the quantity is defined by a variation matrix
-                  except:
-                    error_list += ["Quantity defined by %s is not a float" % mapped_value.id]
-              # Update categories defined by the mapped value
-              base_category_list = mapped_value.getMappedValueBaseCategoryList()
-              if len(base_category_list) > 0:
-                line_item.variation_defined_by = mapped_value.getId()
-                #LOG('In Transformation prevariation',0,str(mapped_value.getCategoryMembershipList(base_category_list, base=1)))
-                self.portal_categories.setCategoryMembership(line_item, base_category_list,
-                        mapped_value.getCategoryMembershipList(base_category_list, base=1), base=1)
-                for resource_variation in mapped_value.getValueList(base_category_list,
-                                                                     portal_type=variation_type_list):
-                  if resource_variation.hasDefaultBasePrice():
-                    new_base_price = resource_variation.getBasePrice()
-                    try:
-                      new_base_price = float(new_base_price)
-                    except:
-                      new_base_price = 0.0
-                      error_list += \
-                          ["Default base price could not be converted for resource variation %s"
-                                                                % resource_variation.id]
-                    if new_base_price > 0.0:
-                      base_price = new_base_price
-                      line_item.base_price_defined_by = resource_variation.getId()
-                  if resource_variation.hasSourceBasePrice():
-                    new_source_base_price = resource_variation.getSourceBasePrice()
-                    try:
-                      new_source_base_price = float(new_source_base_price)
-                    except:
-                      new_source_base_price = 0.0
-                      error_list += \
-                          ["Source base price could not be converted for resource variation %s"
-                                                                % resource_variation.id]
-                    if new_source_base_price > 0.0:
-                      source_base_price = new_source_base_price
-                      line_item.source_base_price_defined_by = resource_variation.getId()
-          # Convert Quantities
-          converted_quantity = resource.convertQuantity(quantity, quantity_unit,
-                                                                   resource_quantity_unit)
-          try:
-            converted_quantity = float(converted_quantity)
-          except:
-            converted_quantity = 0.0
-            error_list += ["Quantity could not be converted for resource %s" % resource.id]
-          # Convert price to unit price
-          unit_base_price = base_price / priced_quantity
-          unit_source_base_price = source_base_price / priced_quantity
-          variation = self.portal_categories.getCategoryMembershipList(line_item,
-                                                variation_base_category_list, base=1)
-          #LOG('In Transformation variation',0,str(variation))
-          total_base_price = converted_quantity * unit_base_price / efficiency
-          total_source_base_price = converted_quantity * unit_source_base_price / efficiency
-          # Define variated price
-          if is_variated_quantity:
-            total_variated_base_price = total_base_price
-            total_variated_source_base_price = total_source_base_price
-          else:
-            total_variated_base_price = 0.0
-            total_variated_source_base_price = 0.0
-          # Create a nice presentation of the variation
-          pretty_variation = ''
-          for variation_item in variation:
-            pretty_variation += "<br>%s" % str(variation_item)
-          # Update the value and calculate total
-          line_item.edit(
-            converted_quantity = converted_quantity,
-            base_price = base_price,
-            unit_base_price = unit_base_price,
-            total_base_price = total_base_price,
-            source_base_price = source_base_price,
-            unit_source_base_price = unit_source_base_price,
-            total_source_base_price = total_source_base_price,
-            variation = variation,
-            variation_category_list = variation,
-            quantity = quantity,
-            pretty_variation = pretty_variation,
-            error_list = error_list
-          )
-          # Add the line_item to the
-          summary_list += [line_item]
+          LOG("for transformed_resource in transformation",0,transformed_resource.getId())
+          line_item_list, total_base_price, total_source_base_price, \
+            total_variated_base_price, total_variated_source_base_price, duration \
+            = transformed_resource.getAggregatedAmountList(REQUEST)
+          summary_list += line_item_list
           grand_total_base_price += total_base_price
           grand_total_source_base_price += total_source_base_price
           grand_total_variated_base_price += total_variated_base_price
-- 
2.30.9