X-Git-Url: https://scm.cri.ensmp.fr/git/photoprint.git/blobdiff_plain/ccaba0f54cbd41250107d36a49154353425da8b3..b521f0db73266a7bd6b69e6a9891046a03c482ee:/Products/photoprint/price.py diff --git a/Products/photoprint/price.py b/Products/photoprint/price.py new file mode 100755 index 0000000..83a23bf --- /dev/null +++ b/Products/photoprint/price.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +####################################################################################### +# Copyright © 2009 Benoît Pin # +# 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