MappedValue.py 3.78 KB
Newer Older
Jean-Paul Smets's avatar
Jean-Paul Smets committed
1 2 3
##############################################################################
#
# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
4
#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
Jean-Paul Smets's avatar
Jean-Paul Smets committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability 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
# garantees 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
##############################################################################

29 30
import zope.interface

Jean-Paul Smets's avatar
Jean-Paul Smets committed
31 32 33
from Globals import InitializeClass
from AccessControl import ClassSecurityInfo

34
from Products.ERP5Type import Permissions, PropertySheet, Constraint, interfaces
Jean-Paul Smets's avatar
Jean-Paul Smets committed
35 36
from Products.ERP5Type.Utils import UpperCase

37
from Products.ERP5.Document.Predicate import Predicate
38
from Products.ERP5.Document.Amount import Amount
Jean-Paul Smets's avatar
Jean-Paul Smets committed
39 40 41

from zLOG import LOG

42
class MappedValue(Predicate, Amount):
Jean-Paul Smets's avatar
Jean-Paul Smets committed
43 44 45 46 47 48 49 50 51 52 53
  """
    A MappedValue allows to associate a value to a domain

    Although MappedValue are supposed to be independent of any
    design choice, we have to implement them as subclasses of
    Amount in order to make sure they provide a complete
    variation interface. In particular, we want to be able
    to call getVariationValue / setVariationValue on a
    MappedValue.

    XXX - Amount should be remove from here
Jean-Paul Smets's avatar
Jean-Paul Smets committed
54 55 56 57 58
    
    
    Interesting Idea: properties and categories of the mapped value
    (not of the predicate) could be handled through additional matrix
    dimensions rather than through ad-hoc definition.    
Jean-Paul Smets's avatar
Jean-Paul Smets committed
59 60 61
  """
  meta_type = 'ERP5 Mapped Value'
  portal_type = 'Mapped Value'
62
  add_permission = Permissions.AddPortalContent
Jean-Paul Smets's avatar
Jean-Paul Smets committed
63 64 65 66 67
  isPortalContent = 1
  isRADContent = 1

  # Declarative security
  security = ClassSecurityInfo()
68
  security.declareObjectProtected(Permissions.AccessContentsInformation)
Jean-Paul Smets's avatar
Jean-Paul Smets committed
69 70

  # Declarative interfaces
71
  zope.interface.implements( interfaces.IPredicate, interfaces.IVariated,)
Jean-Paul Smets's avatar
Jean-Paul Smets committed
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91

  # Declarative properties
  property_sheets = ( PropertySheet.Base
                      , PropertySheet.SimpleItem
                      , PropertySheet.CategoryCore
                      , PropertySheet.Predicate
                      , PropertySheet.MappedValue
                    )

  security.declarePrivate( '_edit' )
  def _edit(self, REQUEST=None, force_update = 0, **kw):
    # We must first prepare the mapped value before we do the edit
    if kw.has_key('mapped_value_property_list'):
      self._setProperty('mapped_value_property_list', kw['mapped_value_property_list'])
    if kw.has_key('default_mapped_value_property'):
      self._setProperty('default_mapped_value_property', kw['default_mapped_value_property'])
    if kw.has_key('mapped_value_property'):
      self._setProperty('mapped_value_property', kw['mapped_value_property'])
    if kw.has_key('mapped_value_property_set'):
      self._setProperty('mapped_value_property_set', kw['mapped_value_property_set'])
92
    Predicate._edit(self, REQUEST=REQUEST, force_update = force_update, **kw)
Jean-Paul Smets's avatar
Jean-Paul Smets committed
93