diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index 35e56f66025..94b6624c137 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -64,6 +64,7 @@ module named account_voucherss 'wizard/account_fiscalyear_close_view.xml', 'wizard/account_state_open_view.xml', 'wizard/account_journal_select_view.xml', + 'wizard/account_change_currency_view.xml', 'project/wizard/project_account_analytic_line_view.xml', 'account_view.xml', 'account_end_fy.xml', diff --git a/addons/account/account_wizard.xml b/addons/account/account_wizard.xml index c3a67180918..b1bd38a45a0 100644 --- a/addons/account/account_wizard.xml +++ b/addons/account/account_wizard.xml @@ -120,6 +120,6 @@ --> - + diff --git a/addons/account/wizard/__init__.py b/addons/account/wizard/__init__.py index 7c7fdada600..4c253d01aea 100644 --- a/addons/account/wizard/__init__.py +++ b/addons/account/wizard/__init__.py @@ -56,7 +56,7 @@ import wizard_statement_from_invoice import account_print_journal import account_central_journal import account_general_journal -import wizard_change_currency +import account_change_currency # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_change_currency.py b/addons/account/wizard/account_change_currency.py new file mode 100644 index 00000000000..707a182a2aa --- /dev/null +++ b/addons/account/wizard/account_change_currency.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from osv import osv, fields +from tools.translate import _ + +class account_change_currency(osv.osv_memory): + _name = 'account.change.currency' + _description = 'Change Currency' + _columns = { + 'currency_id': fields.many2one('res.currency', 'New Currency', required=True), + } + + def view_init(self, cr , uid , fields_list, context=None): + obj_inv = self.pool.get('account.invoice') + if context is None: + context = {} + state = obj_inv.browse(cr, uid, context['active_id']).state + if obj_inv.browse(cr, uid, context['active_id']).state != 'draft': + raise osv.except_osv(_('Error'), _('You can not change currency for Open Invoice !')) + pass + + def change_currency(self, cr, uid, ids, context=None): + obj_inv = self.pool.get('account.invoice') + obj_inv_line = self.pool.get('account.invoice.line') + obj_currency = self.pool.get('res.currency') + if context is None: + context = {} + data = self.read(cr, uid, ids)[0] + new_currency = data['currency_id'] + + for invoice in obj_inv.browse(cr, uid, context['active_ids'], context=context): + if invoice.currency_id.id == new_currency: + continue + + for line in invoice.invoice_line: + rate = obj_currency.browse(cr, uid, new_currency).rate + new_price = 0 + if invoice.company_id.currency_id.id == invoice.currency_id.id: + new_price = line.price_unit * rate + + if invoice.company_id.currency_id.id != invoice.currency_id.id and invoice.company_id.currency_id.id == new_currency: + old_rate = invoice.currency_id.rate + new_price = line.price_unit / old_rate + + if invoice.company_id.currency_id.id != invoice.currency_id.id and invoice.company_id.currency_id.id != new_currency: + old_rate = invoice.currency_id.rate + new_price = (line.price_unit / old_rate ) * rate + + obj_inv_line.write(cr, uid, [line.id], {'price_unit' : new_price}) + obj_inv.write(cr, uid, [invoice.id], {'currency_id' : new_currency}) + return {} + +account_change_currency() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_change_currency_view.xml b/addons/account/wizard/account_change_currency_view.xml new file mode 100644 index 00000000000..33b351bb85c --- /dev/null +++ b/addons/account/wizard/account_change_currency_view.xml @@ -0,0 +1,43 @@ + + + + + + Change Currency + account.change.currency + form + +
+ + + +