From 350d64d4d4b108976ab8258f65335f77d73c822d Mon Sep 17 00:00:00 2001
From: ced <>
Date: Tue, 19 Dec 2006 13:49:50 +0000
Subject: [PATCH] BASE: add history rate to currency
bzr revid: ced-e35a94e365dbeb426680af23f8c7eb5ba7709244
---
bin/addons/base/base_data.xml | 5 +++-
bin/addons/base/base_demo.xml | 6 ++++-
bin/addons/base/res/res_currency.py | 33 ++++++++++++++++++-----
bin/addons/base/res/res_currency_view.xml | 14 +++++++---
4 files changed, 47 insertions(+), 11 deletions(-)
diff --git a/bin/addons/base/base_data.xml b/bin/addons/base/base_data.xml
index 294a4b080a1..675e72252bb 100644
--- a/bin/addons/base/base_data.xml
+++ b/bin/addons/base/base_data.xml
@@ -1026,10 +1026,13 @@
EUR
EUR
- 1.0
2
4
+
+ 1.0
+
+
Tiny sprl
diff --git a/bin/addons/base/base_demo.xml b/bin/addons/base/base_demo.xml
index 361fe5e5718..38ebd2fdb38 100644
--- a/bin/addons/base/base_demo.xml
+++ b/bin/addons/base/base_demo.xml
@@ -13,11 +13,15 @@
USD
- 0.8400
2
4
+
+ 0.8400
+
+
+
diff --git a/bin/addons/base/res/res_currency.py b/bin/addons/base/res/res_currency.py
index b193144fafc..a4fc0b07eba 100644
--- a/bin/addons/base/res/res_currency.py
+++ b/bin/addons/base/res/res_currency.py
@@ -34,26 +34,32 @@ import ir
from tools.misc import currency
-#from _common import rounding
-
import mx.DateTime
from mx.DateTime import RelativeDateTime, now, DateTime, localtime
class res_currency(osv.osv):
+ def _current_rate(self, cr, uid, ids, name, arg, context):
+ res={}
+ for id in ids:
+ cr.execute("SELECT currency_id, rate FROM res_currency_rate WHERE currency_id = %d AND name <= '%s' ORDER BY name desc LIMIT 1" % (id, time.strftime('%Y-%m-%d')))
+ if cr.rowcount:
+ id, rate=cr.fetchall()[0]
+ res[id]=rate
+ else:
+ res[id]=0
+ return res
_name = "res.currency"
_description = "Currency"
_columns = {
'name': fields.char('Currency', size=32, required=True),
'code': fields.char('Code', size=3),
- 'date': fields.date('Last rate update', readonly=True),
- 'rate': fields.float('Relative Change rate',digits=(12,6)),
- #'digits': fields.integer('Displayed Digits'),
+ 'rate': fields.function(_current_rate, method=True, string='Current rate',digits=(12,6)),
+ 'rate_ids': fields.one2many('res.currency.rate', 'currency_id', 'Rates'),
'accuracy': fields.integer('Computational Accuracy'),
'rounding': fields.float('Rounding factor'),
'active': fields.boolean('Active'),
}
_defaults = {
- 'date': lambda *a: time.strftime('%Y-%m-%d'),
'active': lambda *a: 1,
}
_order = "code"
@@ -63,8 +69,23 @@ class res_currency(osv.osv):
return from_amount
[from_currency]=self.read(cr, uid, [from_currency_id])
[to_currency] = self.read(cr, uid, [to_currency_id])
+ if from_currency['rate'] == 0 or to_currency['rate'] == 0:
+ raise osv.except_osv('Error', 'No rate found for the currency')
return currency(from_amount * from_currency['rate']/to_currency['rate'], to_currency['accuracy'], to_currency['rounding'])
res_currency()
+class res_currency_rate(osv.osv):
+ _name = "res.currency.rate"
+ _description = "Currency Rate"
+ _columns = {
+ 'name': fields.date('Date', required=True, select=True),
+ 'rate': fields.float('Rate', digits=(12,6), required=True),
+ 'currency_id': fields.many2one('res.currency', 'Currency', readonly=True),
+ }
+ _defaults = {
+ 'name': lambda *a: time.strftime('%Y-%m-%d'),
+ }
+ _order = "name desc"
+res_currency_rate()
diff --git a/bin/addons/base/res/res_currency_view.xml b/bin/addons/base/res/res_currency_view.xml
index 314ef905670..10ef253d8cd 100644
--- a/bin/addons/base/res/res_currency_view.xml
+++ b/bin/addons/base/res/res_currency_view.xml
@@ -14,7 +14,6 @@
-
@@ -29,11 +28,20 @@