From ea376035e687cbf3ff188113ace6d490630cc6f0 Mon Sep 17 00:00:00 2001 From: Romain Courteaud <romain@nexedi.com> Date: Wed, 5 Oct 2005 09:37:58 +0000 Subject: [PATCH] Modify code layout. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@3959 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Tool/DomainTool.py | 189 +++++++++++++++++--------------- 1 file changed, 98 insertions(+), 91 deletions(-) diff --git a/product/ERP5/Tool/DomainTool.py b/product/ERP5/Tool/DomainTool.py index 954647fc97..d83d1a7916 100755 --- a/product/ERP5/Tool/DomainTool.py +++ b/product/ERP5/Tool/DomainTool.py @@ -1,6 +1,6 @@ ############################################################################## # -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. +# Copyright (c) 2002, 2005 Nexedi SARL and Contributors. All Rights Reserved. # Jean-Paul Smets-Solanes <jp@nexedi.com> # Sebastien Robin <seb@nexedi.com> # @@ -27,56 +27,49 @@ # ############################################################################## -from Products.CMFCore.utils import UniqueObject - -from Acquisition import Implicit from AccessControl import ClassSecurityInfo from Globals import InitializeClass, DTMLFile from Products.ERP5Type import Permissions from Products.ERP5 import _dtmldir from Products.ERP5Type.Tool.BaseTool import BaseTool -from Products.ERP5Type.Document.Folder import Folder from zLOG import LOG from DateTime import DateTime class DomainTool(BaseTool): """ - A tool to define ranges and subranges (predicates) + A tool to define ranges and subranges (predicates) """ id = 'portal_domains' meta_type = 'ERP5 Domain Tool' portal_type = 'Domain Tool' - allowed_types = ( 'ERP5 Domain',) + allowed_types = ('ERP5 Domain', ) # Declarative Security security = ClassSecurityInfo() - # - # ZMI methods - # - #manage_options = Folder.manage_options - - security.declareProtected( Permissions.ManagePortal, 'manage_overview' ) - manage_overview = DTMLFile( 'explainDomainTool', _dtmldir ) + security.declareProtected(Permissions.ManagePortal, 'manage_overview') + manage_overview = DTMLFile('explainDomainTool', _dtmldir) + # XXX FIXME method should not be public + # (some users are not able to see resource's price) security.declarePublic('searchPredicateList') - def searchPredicateList(self,context,test=1,sort_method=None, - ignored_category_list=None,filter_method=None, - acquired=1,**kw): + def searchPredicateList(self, context, test=1, sort_method=None, + ignored_category_list=None, filter_method=None, + acquired=1, **kw): """ - Search all predicates wich corresponds to this particular context. + Search all predicates which corresponds to this particular + context. - - The sort_method parameter allows to give a method wich will be + - The sort_method parameter allows to give a method which will be used in order to sort the list of predicates founds. The most important predicate is the first one in the list. - - ignored_category_list : this is the list of category that we do + - ignored_category_list: this is the list of category that we do not want to test. For example, we might want to not test the destination or the source of a predicate. - - the acquired parameter allow to define if we want to use + - the acquired parameter allows to define if we want to use acquisition for categories. By default we want. - """ portal_catalog = context.portal_catalog portal_categories = context.portal_categories @@ -84,47 +77,53 @@ class DomainTool(BaseTool): expression_list = [] checked_column_list = [] sql_kw = {} + # Search the columns of the predicate table for column in portal_catalog.getColumnIds(): if column.startswith('predicate.'): column_list.append(column.split('.')[1]) for column in column_list: - if column in checked_column_list: - continue - range_property = 0 - if column.endswith('_range_min') or column.endswith('_range_max'): - range_property = 1 - property = column[-len('_range_min')] - if '%s_range_min' % column in column_list: - range_property = 1 - property = column - if range_property: - # We have to check a range property - base_name = 'predicate.%s' % property -# LOG('searchPredicateList, getPath',0,context.getPath()) -# LOG('searchPredicateList, base_name',0,base_name) -# LOG('searchPredicateList, property',0,property) -# LOG('searchPredicateList, getProperty',0,context.getProperty(property)) - value = context.getProperty(property) - expression = '' - if value is None: - expression += "%s is NULL AND %s_range_min is NULL AND %s_range_max is NULL" \ - % ((base_name,)*3) - else: - if isinstance(value, DateTime): - value = value.ISO() - expression = "%s is NULL AND %s_range_min is NULL AND %s_range_max is NULL " % ((base_name,)*3) - expression += "OR %s = '%s' " % (base_name,value) - expression += "OR %s_range_min <= '%s' AND %s_range_max is NULL " \ - % (base_name,value,base_name) - expression += "OR %s_range_min is NULL AND %s_range_max > '%s' " \ - % (base_name,base_name,value) - expression += "OR %s_range_min <= '%s' AND %s_range_max > '%s' " \ - % (base_name,value,base_name,value) - expression = '( ' + expression + ' )' - expression_list.append(expression) - checked_column_list.append('%s' % property) - checked_column_list.append('%s_range_min' % property) - checked_column_list.append('%s_range_max' % property) + if column not in checked_column_list: + range_property = 0 + if (column.endswith('_range_min')) or \ + (column.endswith('_range_max')): + range_property = 1 + # XXX FIXME: what means property here ? + property = column[-len('_range_min')] + if ('%s_range_min' % column) in column_list: + range_property = 1 + property = column + if range_property: + # We have to check a range property + base_name = 'predicate.%s' % property +# LOG('searchPredicateList, getPath', 0, context.getPath()) +# LOG('searchPredicateList, base_name', 0, base_name) +# LOG('searchPredicateList, property', 0, property) +# LOG('searchPredicateList, getProperty', 0, +# context.getProperty(property)) + value = context.getProperty(property) + format_dict = {'base_name': base_name} + expression = "(%(base_name)s is NULL) AND " \ + "(%(base_name)s_range_min is NULL) AND " \ + "(%(base_name)s_range_max is NULL)" % format_dict + if value is not None: + # Handle Mysql datetime correctly + if isinstance(value, DateTime): + value = value.ISO() + format_dict['value'] = value + # Generate expression + expression += "OR (%(base_name)s = '%(value)s') " \ + "OR (%(base_name)s_range_min <= '%(value)s') AND " \ + "(%(base_name)s_range_max is NULL) " \ + "OR (%(base_name)s_range_min is NULL) AND " \ + "%(base_name)s_range_max > '%(value)s' " \ + "OR (%(base_name)s_range_min <= '%(value)s') AND " \ + "%(base_name)s_range_max > '%(value)s' " \ + % format_dict + expression = '( %s )' % expression + expression_list.append(expression) + checked_column_list.append('%s' % property) + checked_column_list.append('%s_range_min' % property) + checked_column_list.append('%s_range_max' % property) # Add predicate.uid for automatic join sql_kw['predicate.uid'] = '!=0' where_expression = ' AND '.join(expression_list) @@ -136,9 +135,12 @@ class DomainTool(BaseTool): category_list = context.getCategoryList() if len(category_list)==0: category_list = ['NULL'] - category_expression = portal_categories.buildSQLSelector(category_list,query_table='predicate_category') - if len(where_expression)>0: - where_expression = '(%s) AND (%s)' % (where_expression,category_expression) + category_expression = portal_categories.buildSQLSelector( + category_list, + query_table='predicate_category') + if len(where_expression) > 0: + where_expression = '(%s) AND (%s)' % \ + (where_expression,category_expression) else: where_expression = category_expression sql_kw['where_expression'] = where_expression @@ -148,55 +150,60 @@ class DomainTool(BaseTool): # LOG('searchPredicateList, kw',0,kw) sql_result_list = portal_catalog.searchResults(**kw) - if kw.has_key('src__') and kw['src__']: + if kw.get('src__'): return sql_result_list result_list = [] - #LOG('searchPredicateList, result_list before test',0,[x.getObject() for x in sql_result_list]) +# LOG('searchPredicateList, result_list before test', 0, +# [x.getObject() for x in sql_result_list]) for predicate in [x.getObject() for x in sql_result_list]: if test==0 or predicate.test(context): result_list.append(predicate) - #LOG('searchPredicateList, result_list before sort',0,result_list) +# LOG('searchPredicateList, result_list before sort', 0, result_list) if filter_method is not None: result_list = filter_method(result_list) if sort_method is not None: result_list.sort(sort_method) - #LOG('searchPredicateList, result_list after sort',0,result_list) +# LOG('searchPredicateList, result_list after sort', 0, result_list) return result_list + # XXX FIXME method should not be public + # (some users are not able to see resource's price) security.declarePublic('generateMappedValue') - def generateMappedValue(self,context,test=1,predicate_list=None,**kw): + def generateMappedValue(self, context, test=1, predicate_list=None, **kw): """ - We will generate a mapped value with the list of all predicates founds. Let's say - we have 3 predicates (in the order we want) like this: + We will generate a mapped value with the list of all predicates + founds. + Let's say we have 3 predicates (in the order we want) like this: Predicate 1 [ base_price1, , , , , , ] Predicate 2 [ base_price2, quantity2 , , , , , ] Predicate 3 [ base_price3, quantity3 , , , , , ] - - Our MappedValue generated will have the base_price of the predicate1, and the quantity of - the Predicate2, because Predicate 1 is the first one wich defines a base_price and the - Predicate2 is the first one wich defines a quantity + Our MappedValue generated will have the base_price of the + predicate1, and the quantity of the Predicate2, because Predicate + 1 is the first one which defines a base_price and the Predicate2 + is the first one wich defines a quantity. """ # First get the list of predicates if predicate_list is None: - predicate_list = self.searchPredicateList(context,test=test,**kw) + predicate_list = self.searchPredicateList(context, test=test, **kw) if len(predicate_list)==0: - return None - - #mapped_value = newTempBase(self.getPortalObject(),'new_mapped_value') - from Products.ERP5Type.Document import newTempDeliveryCell - mapped_value = newTempDeliveryCell(self.getPortalObject(),'new_mapped_value') - mapped_value_property_dict = {} - - # Look for each property the first predicate wich defines the property - for predicate in predicate_list: - for mapped_value_property in predicate.getMappedValuePropertyList(): - if not mapped_value_property_dict.has_key(mapped_value_property): - value = predicate.getProperty(mapped_value_property) - if value is not None: - mapped_value_property_dict[mapped_value_property] = value - mapped_value = mapped_value.asContext(**mapped_value_property_dict) + # No predicate, return None + mapped_value = None + else: + # Generate tempDeliveryCell + from Products.ERP5Type.Document import newTempDeliveryCell + mapped_value = newTempDeliveryCell(self.getPortalObject(), + 'new_mapped_value') + mapped_value_property_dict = {} + # Look for each property the first predicate which defines the + # property + for predicate in predicate_list: + for mapped_value_property in predicate.getMappedValuePropertyList(): + if not mapped_value_property_dict.has_key(mapped_value_property): + value = predicate.getProperty(mapped_value_property) + if value is not None: + mapped_value_property_dict[mapped_value_property] = value + # Update mapped value + mapped_value = mapped_value.asContext(**mapped_value_property_dict) return mapped_value - - InitializeClass(DomainTool) -- 2.30.9