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