TradeModelLine.py 3.95 KB
Newer Older
Yusei Tahara's avatar
Yusei Tahara committed
1
# -*- coding: utf-8 -*-
2 3 4 5
##############################################################################
#
# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
#                    Łukasz Nowak <luke@nexedi.com>
6
#                    Fabien Morin <fabien@nexedi.com>
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#
# 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.
#
##############################################################################

31
import zope.interface
32
from AccessControl import ClassSecurityInfo
33
from Products.CMFCore.utils import getToolByName
34
from Products.ERP5Type import Permissions, PropertySheet, interfaces
35
from Products.ERP5Type.XMLMatrix import XMLMatrix
36
from Products.ERP5.Document.Amount import Amount
37
from Products.ERP5.Document.MappedValue import MappedValue
38
from Products.ERP5.AggregatedAmountList import AggregatedAmountList
39
from Products.ERP5.Document.TradeCondition import TradeCondition
40
from Products.ERP5.mixin.amount_generator import AmountGeneratorMixin
41 42
import zope.interface

43
class TradeModelLine(MappedValue, XMLMatrix, Amount, AmountGeneratorMixin):
Łukasz Nowak's avatar
Łukasz Nowak committed
44 45 46 47 48 49 50 51 52 53
  """Trade Model Line is a way to represent trade transformation for movements"""
  meta_type = 'ERP5 Trade Model Line'
  portal_type = 'Trade Model Line'

  # Declarative security
  security = ClassSecurityInfo()
  security.declareObjectProtected(Permissions.AccessContentsInformation)

  # Declarative interfaces
  zope.interface.implements(
54
      interfaces.IAmountGenerator,
Łukasz Nowak's avatar
Łukasz Nowak committed
55 56 57 58 59 60 61 62 63 64 65 66
      interfaces.IVariated
  )

  # Declarative properties
  property_sheets = ( PropertySheet.Base
                  , PropertySheet.SimpleItem
                  , PropertySheet.CategoryCore
                  , PropertySheet.Amount
                  , PropertySheet.Price
                  , PropertySheet.TradeModelLine
                  , PropertySheet.Reference
                  , PropertySheet.Predicate
67
                  , PropertySheet.MappedValue
Łukasz Nowak's avatar
Łukasz Nowak committed
68 69
                  )

70 71 72 73 74 75 76
  # XXX to be specificied in an interface (IAmountGeneratorLine ?)
  def getAmountProperty(self, amount, base_application, amount_list, rounding):
    """
    Produced amount quantity is needed to initialize transformation
    """
    return amount.getTotalPrice()

77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
  ### Mapped Value Definition
  # Provide default mapped value properties and categories if
  # not defined
  def getMappedValuePropertyList(self):
    """
    """
    result = self._baseGetMappedValuePropertyList()
    if result:
      return result
    if self._baseGetQuantity(): # If quantity is defined, then tax works as transformed resource
      return ('quantity', 'price', )
    # Else tax provides only a ratio on amount
    return ('price', 'efficiency')

  def getMappedValueBaseCategoryList(self):
    result = self._baseGetMappedValueBaseCategoryList()
    if result:
      return result
    return ('base_contribution', 'trade_phase', )

  #
Łukasz Nowak's avatar
Łukasz Nowak committed
98 99 100
  security.declareProtected(Permissions.AccessContentsInformation,
                            'getPrice')
  def getPrice(self):
101 102
    """
    """
Łukasz Nowak's avatar
Łukasz Nowak committed
103
    return self._baseGetPrice()