--- /dev/null
+# -*- coding: utf-8 -*-
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr> #
+# Plinn - http://plinn.org #
+# #
+# #
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #
+#######################################################################################
+"""
+Pricing types
+
+
+
+"""
+
+from Globals import Persistent
+from AccessControl import ModuleSecurityInfo
+from utils import Message as _
+from utils import translate
+from zope.globalrequest import getRequest
+
+msecurity = ModuleSecurityInfo('Products.photoprint.price')
+msecurity.declarePublic('Price')
+
+class Price(object, Persistent) :
+ """
+ Price of an object which have VAT tax.
+ """
+ __allow_access_to_unprotected_subobjects__ = 1
+
+ def __init__(self, taxedPrice, rate=0) :
+ """price is initialized with taxed value"""
+ self._rate = float(rate)
+ self._setTaxed(taxedPrice)
+
+ @property
+ def rate(self):
+ return self._localeStrNum(self._rate)
+
+ def _setTaxed(self, value) :
+ self._taxed = value
+ self._price = value / (1 + self._rate)
+
+ @property
+ def taxed(self) :
+ return self._localeStrNum(self._taxed)
+
+ @property
+ def value(self) :
+ return self._localeStrNum(self._price)
+
+ @property
+ def tax(self) :
+ tax = self._rate * self._price
+ return self._localeStrNum(tax)
+
+ @property
+ def vat(self) :
+ "returns vat rate in percent"
+ vat = self._rate * 100
+ return self._localeStrNum(vat)
+
+ def _localeStrNum(self, n) :
+ i = int(n)
+ if i == n :
+ return str(i)
+ else :
+ n = str(round(n, 2))
+ i, d = n.split('.')
+ ds = _(u'${i}.${d}', mapping={'i':i, 'd':d}, default=n)
+ return translate(ds).encode('utf-8')
+
+ def getValues(self) :
+ values = {'value':self._price,
+ 'taxed': self._taxed,
+ 'rate':self._rate}
+ return values
+
+
+ def __add__(self, other) :
+ taxed = self._taxed + other._taxed
+ value = self._price + other._price
+ rate = (taxed - value ) / float(value)
+ return Price(taxed, rate)
+
+ def __div__(self, other) :
+ return Price(self._taxed / other, self._rate)
+
+ def __mul__(self, other) :
+ return Price(self._taxed * other, self._rate)
+
+ def __repr__(self):
+ return '%s with VAT' % self.taxed