From 7f68f0bf910f5ed73a12775fdf517db474592760 Mon Sep 17 00:00:00 2001 From: "Nimesh (Open ERP)" Date: Wed, 22 Jun 2011 11:45:36 +0530 Subject: [PATCH 001/394] change the label of new_password field lp bug: https://launchpad.net/bugs/798681 fixed bzr revid: nco@tinyerp.com-20110622061536-meps01rofci0z5gw --- openerp/addons/base/res/res_user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_user.py b/openerp/addons/base/res/res_user.py index 8a76ba9a6f4..18c9b27fb17 100644 --- a/openerp/addons/base/res/res_user.py +++ b/openerp/addons/base/res/res_user.py @@ -218,7 +218,7 @@ class users(osv.osv): 'password': fields.char('Password', size=64, invisible=True, help="Keep empty if you don't want the user to be able to connect on the system."), 'new_password': fields.function(_get_password, method=True, type='char', size=64, fnct_inv=_set_new_password, - string='Change password', help="Only specify a value if you want to change the user password. " + string='Set password', help="Only specify a value if you want to change the user password. " "This user will have to logout and login again!"), 'email': fields.char('E-mail', size=64, help='If an email is provided, the user will be sent a message ' From 0757ae25abdade0f0f354da3975e549a7c78b510 Mon Sep 17 00:00:00 2001 From: sebastien beau Date: Wed, 6 Jul 2011 02:26:24 +0200 Subject: [PATCH 002/394] [REF] refactor the methode make_po in order to make easier the overwritting bzr revid: sebastien.beau@akretion.com.br-20110706002624-8ag88jv5a5i979iy --- addons/purchase/purchase.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 6ec558acc97..1b3d0eeb839 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -761,6 +761,10 @@ class procurement_order(osv.osv): res = res.values() return len(res) and res[0] or 0 #TO CHECK: why workflow is generated error if return not integer value + def create_procurement_purchase_order(self, cr, uid, procurement, po_vals, line, context=None): + po_vals.update({'order_line': [(0,0,line)]}) + return self.pool.get('purchase.order').create(cr, uid, po_vals, context=context) + def make_po(self, cr, uid, ids, context=None): """ Make purchase order from procurement @return: New created Purchase Orders procurement wise @@ -774,7 +778,6 @@ class procurement_order(osv.osv): pricelist_obj = self.pool.get('product.pricelist') prod_obj = self.pool.get('product.product') acc_pos_obj = self.pool.get('account.fiscal.position') - po_obj = self.pool.get('purchase.order') for procurement in self.browse(cr, uid, ids, context=context): res_id = procurement.move_id.id partner = procurement.product_id.seller_id # Taken Main Supplier of Product of Procurement. @@ -799,6 +802,8 @@ class procurement_order(osv.osv): context.update({'lang': partner.lang, 'partner_id': partner_id}) product = prod_obj.browse(cr, uid, procurement.product_id.id, context=context) + taxes_ids = procurement.product_id.product_tmpl_id.supplier_taxes_id + taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids) line = { 'name': product.partner_ref, @@ -809,25 +814,20 @@ class procurement_order(osv.osv): 'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'), 'move_dest_id': res_id, 'notes': product.description_purchase, + 'taxes_id': [(6,0,taxes)], } - - taxes_ids = procurement.product_id.product_tmpl_id.supplier_taxes_id - taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids) - line.update({ - 'taxes_id': [(6,0,taxes)] - }) - purchase_id = po_obj.create(cr, uid, { + + po_vals = { 'origin': procurement.origin, 'partner_id': partner_id, 'partner_address_id': address_id, 'location_id': procurement.location_id.id, 'pricelist_id': pricelist_id, - 'order_line': [(0,0,line)], 'company_id': procurement.company_id.id, 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False - }) - res[procurement.id] = purchase_id - self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': purchase_id}) + } + res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line, context=context) + self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]}) return res procurement_order() From 9cbccd3f0e94788bba2467597a0d6691632b5816 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 13 Jul 2011 16:05:24 +0200 Subject: [PATCH 003/394] [IMP] account_voucher: added property fields on res.company for auto exchange rate account bzr revid: qdp-launchpad@openerp.com-20110713140524-j1uylbsryd1j0go0 --- addons/account_voucher/__init__.py | 3 +- addons/account_voucher/__openerp__.py | 1 + addons/account_voucher/company.py | 45 +++++++++++++++++++++++++ addons/account_voucher/company_view.xml | 18 ++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 addons/account_voucher/company.py create mode 100644 addons/account_voucher/company_view.xml diff --git a/addons/account_voucher/__init__.py b/addons/account_voucher/__init__.py index 9796f81d5e5..098d82ea361 100644 --- a/addons/account_voucher/__init__.py +++ b/addons/account_voucher/__init__.py @@ -20,8 +20,9 @@ ############################################################################## import account_voucher +import company import invoice import report import wizard -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_voucher/__openerp__.py b/addons/account_voucher/__openerp__.py index ef93be397a0..039d3e067af 100644 --- a/addons/account_voucher/__openerp__.py +++ b/addons/account_voucher/__openerp__.py @@ -47,6 +47,7 @@ Account Voucher module includes all the basic requirements of Voucher Entries fo "wizard/account_voucher_unreconcile_view.xml", "wizard/account_statement_from_invoice_view.xml", "account_voucher_view.xml", + "company_view.xml", "voucher_payment_receipt_view.xml", "voucher_sales_purchase_view.xml", "account_voucher_wizard.xml", diff --git a/addons/account_voucher/company.py b/addons/account_voucher/company.py new file mode 100644 index 00000000000..d8f0409a710 --- /dev/null +++ b/addons/account_voucher/company.py @@ -0,0 +1,45 @@ +# -*- coding: 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 fields, osv + +class res_company(osv.osv): + _inherit = "res.company" + _columns = { + 'property_income_currency_exchange': fields.property( + 'account.account', + type='many2one', + relation='account.account', + string="Income Currency Exchange", + view_load=True, + domain="[('type', '=', 'other')]", + 'property_expense_currency_exchange': fields.property( + 'account.account', + type='many2one', + relation='account.account', + string="Expense Currency Exchange", + view_load=True, + domain="[('type', '=', 'other')]", + } + +res_company() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_voucher/company_view.xml b/addons/account_voucher/company_view.xml new file mode 100644 index 00000000000..97d6edc31b7 --- /dev/null +++ b/addons/account_voucher/company_view.xml @@ -0,0 +1,18 @@ + + + + + res.company.form.inherit + + res.company + form + + + + + + + + + + From bbee50ce0164e36fc0ef46723320efbf4bf7cf93 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 13 Jul 2011 16:06:18 +0200 Subject: [PATCH 004/394] [IMP] account_voucher: imp in customer payment form view bzr revid: qdp-launchpad@openerp.com-20110713140618-kcd3vii57bibsk4g --- .../voucher_payment_receipt_view.xml | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 7be6022c474..88d84a7c7f0 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -288,27 +288,29 @@ form
- - - + + - - - - - + + + + + + + - - + + @@ -356,7 +358,6 @@ - From 7039769b08fe90d70fd0c1b091a3e00bf135dd5d Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 13 Jul 2011 16:59:29 +0200 Subject: [PATCH 005/394] [FIX] account_voucher: syntax error fixed bzr revid: qdp-launchpad@openerp.com-20110713145929-4eheevdmmijncrc4 --- addons/account_voucher/company.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/account_voucher/company.py b/addons/account_voucher/company.py index d8f0409a710..8c877c8b635 100644 --- a/addons/account_voucher/company.py +++ b/addons/account_voucher/company.py @@ -30,14 +30,14 @@ class res_company(osv.osv): relation='account.account', string="Income Currency Exchange", view_load=True, - domain="[('type', '=', 'other')]", + domain="[('type', '=', 'other')]",), 'property_expense_currency_exchange': fields.property( 'account.account', type='many2one', relation='account.account', string="Expense Currency Exchange", view_load=True, - domain="[('type', '=', 'other')]", + domain="[('type', '=', 'other')]",), } res_company() From f2fc1fcd179ec1158490c4e59dd7e8cc5be34c7e Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 14 Jul 2011 15:44:21 +0200 Subject: [PATCH 006/394] [IMP] account_voucher: lots of improvements (part 1) bzr revid: qdp-launchpad@openerp.com-20110714134421-q453j1z6upq03ter --- addons/account_voucher/account_voucher.py | 252 +++++++++++------- .../voucher_payment_receipt_view.xml | 10 +- 2 files changed, 162 insertions(+), 100 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 0e85904dcd7..5b8be1d8a8b 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -142,33 +142,56 @@ class account_voucher(osv.osv): res['arch'] = etree.tostring(doc) return res - def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount): - debit = credit = 0.0 + def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, context=None): + if context is None: + context = {} + ctx = context.copy() + debit = credit = currency_rate_diff = 0.0 + #import pdb;pdb.set_trace() for l in line_dr_ids: + ctx.update({'date': l['date_original']}) + currency_rate_diff += 'amount_in_company_currency' in l and l['amount_in_company_currency'] or self.pool.get('res.currency').compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount_original'], context=ctx) debit += l['amount'] for l in line_cr_ids: + ctx.update({'date': l['date_original']}) + currency_rate_diff -= 'amount_in_company_currency' in l and l['amount_in_company_currency'] or self.pool.get('res.currency').compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount_original'], context=ctx) credit += l['amount'] - return abs(amount - abs(credit - debit)) + return abs(amount - abs(credit - debit)), currency_rate_diff def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, context=None): - context = context or {} if not line_dr_ids and not line_cr_ids: return {'value':{}} line_osv = self.pool.get("account.voucher.line") line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context) line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context) - return {'value': {'writeoff_amount': self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount)}} + currency_pool = self.pool.get('res.currency') + writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, context=context) + return {'value': {'writeoff_amount': writeoff_amount,}}# 'currency_rate_difference': currency_rate_diff}} def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None): if not ids: return {} - res = {} - debit = credit = 0.0 + if context is None: + context = {} + res = {}.fromkeys(ids,{}) + counter_for_writeoff = counter_for_currency_diff = real_amount = expected_amount = 0.0 + currency_pool = self.pool.get('res.currency') for voucher in self.browse(cr, uid, ids, context=context): + ctx = context.copy() for l in voucher.line_dr_ids: - debit += l.amount + real_amount -= l.amount_in_company_currency + ctx.update({'date': l.date_original}) + counter_for_writeoff -= currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) + ctx.update({'date': voucher.date}) + counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) for l in voucher.line_cr_ids: - credit += l.amount - res[voucher.id] = abs(voucher.amount - abs(credit - debit)) + real_amount += l.amount_in_company_currency + ctx.update({'date': l.date_original}) + counter_for_writeoff += currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) + ctx.update({'date': voucher.date}) + counter_for_currency_diff += l.amount and currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) + writeoff_amount = voucher.amount - counter_for_writeoff + res[voucher.id]['writeoff_amount'] = writeoff_amount + res[voucher.id]['currency_rate_difference'] = real_amount - counter_for_currency_diff return res _name = 'account.voucher' @@ -193,8 +216,8 @@ class account_voucher(osv.osv): domain=[('type','=','dr')], context={'default_type':'dr'}, readonly=True, states={'draft':[('readonly',False)]}), 'period_id': fields.many2one('account.period', 'Period', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'narration':fields.text('Notes', readonly=True, states={'draft':[('readonly',False)]}), - 'currency_id':fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}), -# 'currency_id': fields.related('journal_id','currency', type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, states={'draft':[('readonly',False)]}), + #'currency_id':fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}), + 'currency_id': fields.related('journal_id','currency', type='many2one', relation='res.currency', string='Currency', store=True, readonly=True), 'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'state':fields.selection( [('draft','Draft'), @@ -228,7 +251,8 @@ class account_voucher(osv.osv): 'writeoff_acc_id': fields.many2one('account.account', 'Write-Off account', readonly=True, states={'draft': [('readonly', False)]}), 'comment': fields.char('Write-Off Comment', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}), 'analytic_id': fields.many2one('account.analytic.account','Write-Off Analytic Account', readonly=True, states={'draft': [('readonly', False)]}), - 'writeoff_amount': fields.function(_get_writeoff_amount, string='Write-Off Amount', type='float', readonly=True), + 'writeoff_amount': fields.function(_get_writeoff_amount, string='Write-Off Amount', type='float', readonly=True, multi="writeoff"), + 'currency_rate_difference': fields.function(_get_writeoff_amount, string="Currency Rate Difference", type='float', multi="writeoff"), } _defaults = { 'period_id': _get_period, @@ -491,27 +515,30 @@ class account_voucher(osv.osv): if line.debit and line.reconcile_partial_id and ttype == 'payment': continue original_amount = line.credit or line.debit or 0.0 - amount_unreconciled = currency_pool.compute(cr, uid, line.currency_id and line.currency_id.id or company_currency, currency_id, abs(line.amount_residual_currency), context=context_multi_currency) + amount_original, amount_unreconciled = line_pool._get_amounts(cr, uid, line, context=context) + currency_id = line.currency_id and line.currency_id.id or line.company_id.currency_id.id rs = { 'name':line.move_id.name, 'type': line.credit and 'dr' or 'cr', 'move_line_id':line.id, 'account_id':line.account_id.id, - 'amount_original': currency_pool.compute(cr, uid, line.currency_id and line.currency_id.id or company_currency, currency_id, line.currency_id and abs(line.amount_currency) or original_amount, context=context_multi_currency), + 'amount_original': amount_original, + 'amount': 0.0, + 'currency_id': currency_id, 'date_original':line.date, + 'company_currency_id': line.company_id.currency_id.id, 'date_due':line.date_maturity, 'amount_unreconciled': amount_unreconciled, - } - if line.credit: - amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_debit), context=context_multi_currency)) - rs['amount'] = amount - total_debit -= amount - else: - amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_credit), context=context_multi_currency)) - rs['amount'] = amount - total_credit -= amount + #if line.credit: + # amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_debit), context=context_multi_currency)) + # rs['amount'] = amount + # total_debit -= amount + #else: + # amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_credit), context=context_multi_currency)) + # rs['amount'] = amount + # total_credit -= amount default['value']['line_ids'].append(rs) if rs['type'] == 'cr': @@ -523,7 +550,7 @@ class account_voucher(osv.osv): default['value']['pre_line'] = 1 elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0: default['value']['pre_line'] = 1 - default['value']['writeoff_amount'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price) + default['value']['writeoff_amount'], default['value']['currency_rate_difference'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, context=context) return default def onchange_date(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None): @@ -636,44 +663,42 @@ class account_voucher(osv.osv): currency_pool = self.pool.get('res.currency') tax_obj = self.pool.get('account.tax') seq_obj = self.pool.get('ir.sequence') - for inv in self.browse(cr, uid, ids, context=context): - if inv.move_id: + for voucher in self.browse(cr, uid, ids, context=context): + if voucher.move_id: continue context_multi_currency = context.copy() - context_multi_currency.update({'date': inv.date}) + context_multi_currency.update({'date': voucher.date}) - if inv.number: - name = inv.number - elif inv.journal_id.sequence_id: - name = seq_obj.get_id(cr, uid, inv.journal_id.sequence_id.id) + if voucher.number: + name = voucher.number else: - raise osv.except_osv(_('Error !'), _('Please define a sequence on the journal !')) - if not inv.reference: + name = seq_obj.get_id(cr, uid, voucher.journal_id.sequence_id.id) + if not voucher.reference: ref = name.replace('/','') else: - ref = inv.reference + ref = voucher.reference move = { 'name': name, - 'journal_id': inv.journal_id.id, - 'narration': inv.narration, - 'date': inv.date, + 'journal_id': voucher.journal_id.id, + 'narration': voucher.narration, + 'date': voucher.date, 'ref': ref, - 'period_id': inv.period_id and inv.period_id.id or False + 'period_id': voucher.period_id and voucher.period_id.id or False } move_id = move_pool.create(cr, uid, move) #create the first line manually - company_currency = inv.journal_id.company_id.currency_id.id - current_currency = inv.currency_id.id + company_currency = voucher.journal_id.company_id.currency_id.id + current_currency = voucher.currency_id.id debit = 0.0 credit = 0.0 # TODO: is there any other alternative then the voucher type ?? # -for sale, purchase we have but for the payment and receipt we do not have as based on the bank/cash journal we can not know its payment or receipt - if inv.type in ('purchase', 'payment'): - credit = currency_pool.compute(cr, uid, current_currency, company_currency, inv.amount, context=context_multi_currency) - elif inv.type in ('sale', 'receipt'): - debit = currency_pool.compute(cr, uid, current_currency, company_currency, inv.amount, context=context_multi_currency) + if voucher.type in ('purchase', 'payment'): + credit = currency_pool.compute(cr, uid, current_currency, company_currency, voucher.amount, context=context_multi_currency) + elif voucher.type in ('sale', 'receipt'): + debit = currency_pool.compute(cr, uid, current_currency, company_currency, voucher.amount, context=context_multi_currency) if debit < 0: credit = -debit debit = 0.0 @@ -683,28 +708,28 @@ class account_voucher(osv.osv): sign = debit - credit < 0 and -1 or 1 #create the first line of the voucher move_line = { - 'name': inv.name or '/', + 'name': voucher.name or '/', 'debit': debit, 'credit': credit, - 'account_id': inv.account_id.id, + 'account_id': voucher.account_id.id, 'move_id': move_id, - 'journal_id': inv.journal_id.id, - 'period_id': inv.period_id.id, - 'partner_id': inv.partner_id.id, + 'journal_id': voucher.journal_id.id, + 'period_id': voucher.period_id.id, + 'partner_id': voucher.partner_id.id, 'currency_id': company_currency <> current_currency and current_currency or False, - 'amount_currency': company_currency <> current_currency and sign * inv.amount or 0.0, - 'date': inv.date, - 'date_maturity': inv.date_due + 'amount_currency': company_currency <> current_currency and sign * voucher.amount or 0.0, + 'date': voucher.date, + 'date_maturity': voucher.date_due } move_line_pool.create(cr, uid, move_line) rec_list_ids = [] line_total = debit - credit - if inv.type == 'sale': - line_total = line_total - currency_pool.compute(cr, uid, inv.currency_id.id, company_currency, inv.tax_amount, context=context_multi_currency) - elif inv.type == 'purchase': - line_total = line_total + currency_pool.compute(cr, uid, inv.currency_id.id, company_currency, inv.tax_amount, context=context_multi_currency) + if voucher.type == 'sale': + line_total = line_total - currency_pool.compute(cr, uid, voucher.currency_id.id, company_currency, voucher.tax_amount, context=context_multi_currency) + elif voucher.type == 'purchase': + line_total = line_total + currency_pool.compute(cr, uid, voucher.currency_id.id, company_currency, voucher.tax_amount, context=context_multi_currency) - for line in inv.line_ids: + for line in voucher.line_ids: #create one move line per voucher line where amount is not 0.0 if not line.amount: continue @@ -712,21 +737,26 @@ class account_voucher(osv.osv): if line.amount == line.amount_unreconciled: amount = line.move_line_id.amount_residual #residual amount in company currency else: - amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=context_multi_currency) + ctx = context_multi_currency.copy() + ctx.update({'date': line.date_original}) + amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=ctx) move_line = { - 'journal_id': inv.journal_id.id, - 'period_id': inv.period_id.id, + 'journal_id': voucher.journal_id.id, + 'period_id': voucher.period_id.id, 'name': line.name or '/', 'account_id': line.account_id.id, 'move_id': move_id, - 'partner_id': inv.partner_id.id, + 'partner_id': voucher.partner_id.id, 'currency_id': company_currency <> current_currency and current_currency or False, 'analytic_account_id': line.account_analytic_id and line.account_analytic_id.id or False, 'quantity': 1, 'credit': 0.0, 'debit': 0.0, - 'date': inv.date + 'date': voucher.date } + #TODO: assigner le montant de la diff de change sur le bon compte et pas debtor + #TODO: mettre le montant de company currency en onchange + readonly + computed + #TODO: mettre un champ difference de change sur le voucher if amount < 0: amount = -amount if line.type == 'dr': @@ -740,9 +770,9 @@ class account_voucher(osv.osv): line_total -= amount move_line['credit'] = amount - if inv.tax_id and inv.type in ('sale', 'purchase'): + if voucher.tax_id and voucher.type in ('sale', 'purchase'): move_line.update({ - 'account_tax_id': inv.tax_id.id, + 'account_tax_id': voucher.tax_id.id, }) if move_line.get('account_tax_id', False): tax_data = tax_obj.browse(cr, uid, [move_line['account_tax_id']], context=context)[0] @@ -755,35 +785,35 @@ class account_voucher(osv.osv): rec_ids = [voucher_line, line.move_line_id.id] rec_list_ids.append(rec_ids) - if not currency_pool.is_zero(cr, uid, inv.currency_id, line_total): + if not currency_pool.is_zero(cr, uid, voucher.currency_id, line_total): diff = line_total account_id = False write_off_name = '' - if inv.payment_option == 'with_writeoff': - account_id = inv.writeoff_acc_id.id - write_off_name = inv.comment - elif inv.type in ('sale', 'receipt'): - account_id = inv.partner_id.property_account_receivable.id + if voucher.payment_option == 'with_writeoff': + account_id = voucher.writeoff_acc_id.id + write_off_name = voucher.comment + elif voucher.type in ('sale', 'receipt'): + account_id = voucher.partner_id.property_account_receivable.id else: - account_id = inv.partner_id.property_account_payable.id + account_id = voucher.partner_id.property_account_payable.id move_line = { 'name': write_off_name or name, 'account_id': account_id, 'move_id': move_id, - 'partner_id': inv.partner_id.id, - 'date': inv.date, + 'partner_id': voucher.partner_id.id, + 'date': voucher.date, 'credit': diff > 0 and diff or 0.0, 'debit': diff < 0 and -diff or 0.0, #'amount_currency': company_currency <> current_currency and currency_pool.compute(cr, uid, company_currency, current_currency, diff * -1, context=context_multi_currency) or 0.0, #'currency_id': company_currency <> current_currency and current_currency or False, } move_line_pool.create(cr, uid, move_line) - self.write(cr, uid, [inv.id], { + self.write(cr, uid, [voucher.id], { 'move_id': move_id, 'state': 'posted', 'number': name, }) - if inv.journal_id.entry_posted: + if voucher.journal_id.entry_posted: move_pool.post(cr, uid, [move_id], context={}) for rec_ids in rec_list_ids: if len(rec_ids) >= 2: @@ -810,43 +840,71 @@ class account_voucher_line(osv.osv): _description = 'Voucher Lines' _order = "move_line_id" + def _currency_id(self, cr, uid, ids, name, args, context=None): + res = {} + for line in self.browse(cr, uid, ids, context=context): + move_line = line.move_line_id + res[line.id] = move_line.currency_id and move_line.currency_id.id or move_line.company_id.currency_id.id + return res + + def _get_amounts(self, cr, uid, line_browse_rec, context=None): + if line_browse_rec.currency_id: + amount_original = line_browse_rec.amount_currency or 0.0 + amount_unreconciled = line_browse_rec.amount_residual_currency + elif line_browse_rec.credit > 0: + amount_original = line_browse_rec.credit or 0.0 + amount_unreconciled = line_browse_rec.amount_residual + else: + amount_original = line_browse_rec.debit or 0.0 + amount_unreconciled = line_browse_rec.amount_residual + return amount_original, amount_unreconciled + def _compute_balance(self, cr, uid, ids, name, args, context=None): currency_pool = self.pool.get('res.currency') - rs_data = {} + res = {} for line in self.browse(cr, uid, ids, context=context): - ctx = context.copy() - ctx.update({'date': line.voucher_id.date}) - res = {} - company_currency = line.voucher_id.journal_id.company_id.currency_id.id - voucher_currency = line.voucher_id.currency_id.id - move_line = line.move_line_id or False + amount_original, amount_unreconciled = self._get_amounts(cr, uid, line.move_line_id, context) + res[line.id] = { + 'amount_original': amount_original, + 'amount_unreconciled': amount_unreconciled, + } - if not move_line: - res['amount_original'] = 0.0 - res['amount_unreconciled'] = 0.0 + return res - elif move_line.currency_id: - res['amount_original'] = currency_pool.compute(cr, uid, move_line.currency_id.id, voucher_currency, move_line.amount_currency, context=ctx) - elif move_line and move_line.credit > 0: - res['amount_original'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, move_line.credit, context=ctx) - else: - res['amount_original'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, move_line.debit, context=ctx) + def __company_currency_amount(self, cr, uid, line, amount, context=None): + if context is None: + context = {} + ctx = context.copy() + ctx.update({'date': line.date_original}) + currency_pool = self.pool.get('res.currency') + return currency_pool.compute(cr, uid, line.currency_id.id, line.company_currency_id.id, amount, context=ctx) - if move_line: - res['amount_unreconciled'] = currency_pool.compute(cr, uid, move_line.currency_id and move_line.currency_id.id or company_currency, voucher_currency, abs(move_line.amount_residual_currency), context=ctx) - rs_data[line.id] = res - return rs_data + def onchange_amount(self, cr, uid, ids, amount, context=None): + if not amount: + return {'value':{'amount_in_company_currency': 0.0}} + for line in self.browse(cr, uid, ids, context=context): + amount = self.__company_currency_amount(cr, uid, line, amount, context=context) + return {'value': {'amount_in_company_currency': amount}} + + def _get_amount_in_company_currency(self, cr, uid, ids, name, args, context=None): + res = {} + for line in self.browse(cr, uid, ids, context=context): + res[line.id] = self.__company_currency_amount(cr, uid, line, line.amount, context=context) + return res _columns = { 'voucher_id':fields.many2one('account.voucher', 'Voucher', required=1, ondelete='cascade'), 'name':fields.char('Description', size=256), 'account_id':fields.many2one('account.account','Account', required=True), 'partner_id':fields.related('voucher_id', 'partner_id', type='many2one', relation='res.partner', string='Partner'), + 'currency_id': fields.function(_currency_id, string='Currency', type='many2one', relation='res.currency'), 'untax_amount':fields.float('Untax Amount'), 'amount':fields.float('Amount', digits_compute=dp.get_precision('Account')), 'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'), 'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'), - 'move_line_id': fields.many2one('account.move.line', 'Journal Item'), + 'move_line_id': fields.many2one('account.move.line', 'Journal Item', required=True), + 'company_currency_id': fields.related('move_line_id','company_id','currency_id', type='many2one', relation='res.currency', string="Company Currency"), + 'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account')), 'date_original': fields.related('move_line_id','date', type='date', relation='account.move.line', string='Date', readonly=1), 'date_due': fields.related('move_line_id','date_maturity', type='date', relation='account.move.line', string='Due Date', readonly=1), 'amount_original': fields.function(_compute_balance, multi='dc', type='float', string='Original Amount', store=True), diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 88d84a7c7f0..85dfc8f12c0 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -283,7 +283,7 @@ id="menu_action_vendor_payment" parent="account.menu_finance_payables"/> - account.voucher.receipt.form + voucher.form.customer.payment account.voucher form @@ -320,12 +320,15 @@ on_change="onchange_move_line_id(move_line_id)" domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]" /> - + - + + + + @@ -359,6 +362,7 @@ + From bb605efd941ff6aa4cad9a445a8c9074e5fec408 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Thu, 14 Jul 2011 17:48:22 +0200 Subject: [PATCH 007/394] [IMP] account_voucher: multi currency and usability changes (part 2) bzr revid: qdp-launchpad@openerp.com-20110714154822-s5mbl0et1jdw7jty --- addons/account_voucher/account_voucher.py | 77 ++++++++++++------- addons/account_voucher/company.py | 4 +- .../voucher_payment_receipt_view.xml | 4 +- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 5b8be1d8a8b..b3eaa36db21 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -142,30 +142,35 @@ class account_voucher(osv.osv): res['arch'] = etree.tostring(doc) return res - def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, context=None): + def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, voucher_currency_id, context=None): if context is None: context = {} + currency_pool = self.pool.get('res.currency') ctx = context.copy() - debit = credit = currency_rate_diff = 0.0 - #import pdb;pdb.set_trace() + counter_for_writeoff = counter_for_currency_diff = real_amount = 0.0 for l in line_dr_ids: + real_amount -= l.get('amount_in_company_currency', 0.0) ctx.update({'date': l['date_original']}) - currency_rate_diff += 'amount_in_company_currency' in l and l['amount_in_company_currency'] or self.pool.get('res.currency').compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount_original'], context=ctx) - debit += l['amount'] + counter_for_writeoff -= currency_pool.compute(cr, uid, l['company_currency_id'], voucher_currency_id, l.get('amount_in_company_currency',0.0), context=ctx) + ctx.update({'date': voucher_date}) + counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) for l in line_cr_ids: + real_amount += l.get('amount_in_company_currency', 0.0) ctx.update({'date': l['date_original']}) - currency_rate_diff -= 'amount_in_company_currency' in l and l['amount_in_company_currency'] or self.pool.get('res.currency').compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount_original'], context=ctx) - credit += l['amount'] - return abs(amount - abs(credit - debit)), currency_rate_diff + counter_for_writeoff += currency_pool.compute(cr, uid, l['company_currency_id'], voucher_currency_id, l.get('amount_in_company_currency',0.0), context=ctx) + ctx.update({'date': voucher_date}) + counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) + writeoff_amount = amount - counter_for_writeoff + currency_rate_difference = real_amount - counter_for_currency_diff + return writeoff_amount, currency_rate_difference - def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, context=None): + def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, voucher_date, voucher_currency_id, context=None): if not line_dr_ids and not line_cr_ids: return {'value':{}} line_osv = self.pool.get("account.voucher.line") line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context) line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context) - currency_pool = self.pool.get('res.currency') - writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, context=context) + writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, voucher_currency_id, context=context) return {'value': {'writeoff_amount': writeoff_amount,}}# 'currency_rate_difference': currency_rate_diff}} def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None): @@ -173,7 +178,7 @@ class account_voucher(osv.osv): if context is None: context = {} res = {}.fromkeys(ids,{}) - counter_for_writeoff = counter_for_currency_diff = real_amount = expected_amount = 0.0 + counter_for_writeoff = counter_for_currency_diff = real_amount = 0.0 currency_pool = self.pool.get('res.currency') for voucher in self.browse(cr, uid, ids, context=context): ctx = context.copy() @@ -188,7 +193,7 @@ class account_voucher(osv.osv): ctx.update({'date': l.date_original}) counter_for_writeoff += currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) ctx.update({'date': voucher.date}) - counter_for_currency_diff += l.amount and currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) + counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) writeoff_amount = voucher.amount - counter_for_writeoff res[voucher.id]['writeoff_amount'] = writeoff_amount res[voucher.id]['currency_rate_difference'] = real_amount - counter_for_currency_diff @@ -550,7 +555,7 @@ class account_voucher(osv.osv): default['value']['pre_line'] = 1 elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0: default['value']['pre_line'] = 1 - default['value']['writeoff_amount'], default['value']['currency_rate_difference'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, context=context) + default['value']['writeoff_amount'], default['value']['currency_rate_difference'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, date, currency_id, context=context) return default def onchange_date(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None): @@ -722,12 +727,33 @@ class account_voucher(osv.osv): 'date_maturity': voucher.date_due } move_line_pool.create(cr, uid, move_line) + + #create the move line for the currency difference + if voucher.currency_rate_difference: + if voucher.currency_rate_difference > 0: + account_id = voucher.company_id.property_income_currency_exchange + if not account_id: + raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Income Currency Rate' on the company! ")) + else: + account_id = voucher.company_id.property_expense_currency_exchange + if not account_id: + raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Expense Currency Rate' on the company! ")) + + currency_diff_line = { + 'name': _('Currency Difference'), + 'debit': voucher.currency_rate_difference > 0 and voucher.currency_rate_difference or 0.0, + 'credit': voucher.currency_rate_difference < 0 and -voucher.currency_rate_difference or 0.0, + 'account_id': account_id.id, + 'move_id': move_id, + 'journal_id': voucher.journal_id.id, + 'period_id': voucher.period_id.id, + 'partner_id': voucher.partner_id.id, + 'date': voucher.date, + 'date_maturity': voucher.date_due + } + + move_line_pool.create(cr, uid, currency_diff_line, context=context) rec_list_ids = [] - line_total = debit - credit - if voucher.type == 'sale': - line_total = line_total - currency_pool.compute(cr, uid, voucher.currency_id.id, company_currency, voucher.tax_amount, context=context_multi_currency) - elif voucher.type == 'purchase': - line_total = line_total + currency_pool.compute(cr, uid, voucher.currency_id.id, company_currency, voucher.tax_amount, context=context_multi_currency) for line in voucher.line_ids: #create one move line per voucher line where amount is not 0.0 @@ -754,9 +780,6 @@ class account_voucher(osv.osv): 'debit': 0.0, 'date': voucher.date } - #TODO: assigner le montant de la diff de change sur le bon compte et pas debtor - #TODO: mettre le montant de company currency en onchange + readonly + computed - #TODO: mettre un champ difference de change sur le voucher if amount < 0: amount = -amount if line.type == 'dr': @@ -764,10 +787,8 @@ class account_voucher(osv.osv): else: line.type = 'dr' if (line.type=='dr'): - line_total += amount move_line['debit'] = amount else: - line_total -= amount move_line['credit'] = amount if voucher.tax_id and voucher.type in ('sale', 'purchase'): @@ -785,8 +806,8 @@ class account_voucher(osv.osv): rec_ids = [voucher_line, line.move_line_id.id] rec_list_ids.append(rec_ids) - if not currency_pool.is_zero(cr, uid, voucher.currency_id, line_total): - diff = line_total + if not currency_pool.is_zero(cr, uid, voucher.currency_id, voucher.writeoff_amount): + diff = currency_pool.compute(cr, uid, current_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) account_id = False write_off_name = '' if voucher.payment_option == 'with_writeoff': @@ -804,8 +825,8 @@ class account_voucher(osv.osv): 'date': voucher.date, 'credit': diff > 0 and diff or 0.0, 'debit': diff < 0 and -diff or 0.0, - #'amount_currency': company_currency <> current_currency and currency_pool.compute(cr, uid, company_currency, current_currency, diff * -1, context=context_multi_currency) or 0.0, - #'currency_id': company_currency <> current_currency and current_currency or False, + 'amount_currency': voucher.writeoff_amount, + 'currency_id': company_currency <> current_currency and current_currency or False, } move_line_pool.create(cr, uid, move_line) self.write(cr, uid, [voucher.id], { diff --git a/addons/account_voucher/company.py b/addons/account_voucher/company.py index 8c877c8b635..5a5b5d040d7 100644 --- a/addons/account_voucher/company.py +++ b/addons/account_voucher/company.py @@ -28,14 +28,14 @@ class res_company(osv.osv): 'account.account', type='many2one', relation='account.account', - string="Income Currency Exchange", + string="Income Currency Rate", view_load=True, domain="[('type', '=', 'other')]",), 'property_expense_currency_exchange': fields.property( 'account.account', type='many2one', relation='account.account', - string="Expense Currency Exchange", + string="Expense Currency Rate", view_load=True, domain="[('type', '=', 'other')]",), } diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 85dfc8f12c0..1d6e2f19ddc 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -314,7 +314,7 @@ - + - + From 9aa1760fcfa9c03dd48b4a45ae3b0536e352eece Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 15 Jul 2011 10:26:43 +0200 Subject: [PATCH 008/394] [IMP] account_voucher: multi-currency improvements (part 3) bzr revid: qdp-launchpad@openerp.com-20110715082643-0bxv6u0z80wkqozi --- addons/account_voucher/account_voucher.py | 124 ++++++++++-------- .../voucher_payment_receipt_view.xml | 31 +++-- 2 files changed, 92 insertions(+), 63 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index b3eaa36db21..dd3af1139f4 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -142,35 +142,32 @@ class account_voucher(osv.osv): res['arch'] = etree.tostring(doc) return res - def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, voucher_currency_id, context=None): + def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=None): if context is None: context = {} currency_pool = self.pool.get('res.currency') ctx = context.copy() counter_for_writeoff = counter_for_currency_diff = real_amount = 0.0 + ctx.update({'date': voucher_date}) for l in line_dr_ids: real_amount -= l.get('amount_in_company_currency', 0.0) - ctx.update({'date': l['date_original']}) - counter_for_writeoff -= currency_pool.compute(cr, uid, l['company_currency_id'], voucher_currency_id, l.get('amount_in_company_currency',0.0), context=ctx) - ctx.update({'date': voucher_date}) + counter_for_writeoff -= currency_pool.compute(cr, uid, l['company_currency_id'], l['voucher_currency_id'], l.get('amount_in_company_currency',0.0), context=ctx) counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) for l in line_cr_ids: real_amount += l.get('amount_in_company_currency', 0.0) - ctx.update({'date': l['date_original']}) - counter_for_writeoff += currency_pool.compute(cr, uid, l['company_currency_id'], voucher_currency_id, l.get('amount_in_company_currency',0.0), context=ctx) - ctx.update({'date': voucher_date}) + counter_for_writeoff += currency_pool.compute(cr, uid, l['company_currency_id'], l['voucher_currency_id'], l.get('amount_in_company_currency',0.0), context=ctx) counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) writeoff_amount = amount - counter_for_writeoff currency_rate_difference = real_amount - counter_for_currency_diff return writeoff_amount, currency_rate_difference - def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, voucher_date, voucher_currency_id, context=None): + def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, voucher_date, context=None): if not line_dr_ids and not line_cr_ids: return {'value':{}} line_osv = self.pool.get("account.voucher.line") line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context) line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context) - writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, voucher_currency_id, context=context) + writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=context) return {'value': {'writeoff_amount': writeoff_amount,}}# 'currency_rate_difference': currency_rate_diff}} def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None): @@ -182,27 +179,34 @@ class account_voucher(osv.osv): currency_pool = self.pool.get('res.currency') for voucher in self.browse(cr, uid, ids, context=context): ctx = context.copy() + ctx.update({'date': voucher.date}) for l in voucher.line_dr_ids: real_amount -= l.amount_in_company_currency - ctx.update({'date': l.date_original}) - counter_for_writeoff -= currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) - ctx.update({'date': voucher.date}) + counter_for_writeoff -= l.amount_in_voucher_currency + #ctx.update({'date': l.date_original}) + #counter_for_writeoff -= currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) for l in voucher.line_cr_ids: real_amount += l.amount_in_company_currency - ctx.update({'date': l.date_original}) - counter_for_writeoff += currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) - ctx.update({'date': voucher.date}) + counter_for_writeoff += l.amount_in_voucher_currency + #ctx.update({'date': l.date_original}) + #counter_for_writeoff += currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) writeoff_amount = voucher.amount - counter_for_writeoff res[voucher.id]['writeoff_amount'] = writeoff_amount res[voucher.id]['currency_rate_difference'] = real_amount - counter_for_currency_diff return res + def _currency_id(self, cr, uid, ids, name, args, context=None): + res = {} + for voucher in self.browse(cr, uid, ids, context=context): + currency = voucher.journal_id.currency and voucher.journal_id.currency.id or voucher.company_id.currency_id.id + res[voucher.id] = {'currency_id': currency, 'currency_id2': currency} + return res + _name = 'account.voucher' _description = 'Accounting Voucher' _order = "date desc, id desc" -# _rec_name = 'number' _columns = { 'type':fields.selection([ ('sale','Sale'), @@ -221,8 +225,9 @@ class account_voucher(osv.osv): domain=[('type','=','dr')], context={'default_type':'dr'}, readonly=True, states={'draft':[('readonly',False)]}), 'period_id': fields.many2one('account.period', 'Period', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'narration':fields.text('Notes', readonly=True, states={'draft':[('readonly',False)]}), - #'currency_id':fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}), - 'currency_id': fields.related('journal_id','currency', type='many2one', relation='res.currency', string='Currency', store=True, readonly=True), + 'currency_id': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"), + #duplicated field for display purposes + 'currency_id2': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"), 'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'state':fields.selection( [('draft','Draft'), @@ -425,7 +430,7 @@ class account_voucher(osv.osv): return default - def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None): + def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id, price, voucher_currency_id, ttype, date, context=None): """price Returns a dict that contains new values and context @@ -455,9 +460,9 @@ class account_voucher(osv.osv): vals = self.onchange_journal(cr, uid, ids, journal_id, [], False, partner_id, context) vals = vals.get('value') - currency_id = vals.get('currency_id', currency_id) + voucher_currency_id = vals.get('currency_id', voucher_currency_id) default = { - 'value':{'line_ids':[], 'line_dr_ids':[], 'line_cr_ids':[], 'pre_line': False, 'currency_id':currency_id}, + 'value':{'line_ids':[], 'line_dr_ids':[], 'line_cr_ids':[], 'pre_line': False, 'currency_id': voucher_currency_id}, } if not partner_id: @@ -502,10 +507,10 @@ class account_voucher(osv.osv): moves = move_line_pool.browse(cr, uid, ids, context=context) company_currency = journal.company_id.currency_id.id - if company_currency != currency_id and ttype == 'payment': - total_debit = currency_pool.compute(cr, uid, currency_id, company_currency, total_debit, context=context_multi_currency) - elif company_currency != currency_id and ttype == 'receipt': - total_credit = currency_pool.compute(cr, uid, currency_id, company_currency, total_credit, context=context_multi_currency) + if company_currency != voucher_currency_id and ttype == 'payment': + total_debit = currency_pool.compute(cr, uid, voucher_currency_id, company_currency, total_debit, context=context_multi_currency) + elif company_currency != voucher_currency_id and ttype == 'receipt': + total_credit = currency_pool.compute(cr, uid, voucher_currency_id, company_currency, total_credit, context=context_multi_currency) for line in moves: if line.credit and line.reconcile_partial_id and ttype == 'receipt': @@ -530,10 +535,12 @@ class account_voucher(osv.osv): 'amount_original': amount_original, 'amount': 0.0, 'currency_id': currency_id, + 'voucher_currency_id': voucher_currency_id, 'date_original':line.date, 'company_currency_id': line.company_id.currency_id.id, 'date_due':line.date_maturity, 'amount_unreconciled': amount_unreconciled, + 'amount_in_company_currency': 0.0, } #if line.credit: @@ -555,7 +562,7 @@ class account_voucher(osv.osv): default['value']['pre_line'] = 1 elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0: default['value']['pre_line'] = 1 - default['value']['writeoff_amount'], default['value']['currency_rate_difference'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, date, currency_id, context=context) + default['value']['writeoff_amount'], default['value']['currency_rate_difference'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, date, context=context) return default def onchange_date(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None): @@ -695,15 +702,15 @@ class account_voucher(osv.osv): #create the first line manually company_currency = voucher.journal_id.company_id.currency_id.id - current_currency = voucher.currency_id.id + voucher_currency = voucher.currency_id.id debit = 0.0 credit = 0.0 # TODO: is there any other alternative then the voucher type ?? # -for sale, purchase we have but for the payment and receipt we do not have as based on the bank/cash journal we can not know its payment or receipt if voucher.type in ('purchase', 'payment'): - credit = currency_pool.compute(cr, uid, current_currency, company_currency, voucher.amount, context=context_multi_currency) + credit = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.amount, context=context_multi_currency) elif voucher.type in ('sale', 'receipt'): - debit = currency_pool.compute(cr, uid, current_currency, company_currency, voucher.amount, context=context_multi_currency) + debit = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.amount, context=context_multi_currency) if debit < 0: credit = -debit debit = 0.0 @@ -721,8 +728,8 @@ class account_voucher(osv.osv): 'journal_id': voucher.journal_id.id, 'period_id': voucher.period_id.id, 'partner_id': voucher.partner_id.id, - 'currency_id': company_currency <> current_currency and current_currency or False, - 'amount_currency': company_currency <> current_currency and sign * voucher.amount or 0.0, + 'currency_id': company_currency <> voucher_currency and voucher_currency or False, + 'amount_currency': company_currency <> voucher_currency and sign * voucher.amount or 0.0, 'date': voucher.date, 'date_maturity': voucher.date_due } @@ -763,9 +770,10 @@ class account_voucher(osv.osv): if line.amount == line.amount_unreconciled: amount = line.move_line_id.amount_residual #residual amount in company currency else: - ctx = context_multi_currency.copy() - ctx.update({'date': line.date_original}) - amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=ctx) + #ctx = context_multi_currency.copy() + #ctx.update({'date': line.date_original}) + #amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=ctx) + amount = line.amount_in_company_currency move_line = { 'journal_id': voucher.journal_id.id, 'period_id': voucher.period_id.id, @@ -773,7 +781,7 @@ class account_voucher(osv.osv): 'account_id': line.account_id.id, 'move_id': move_id, 'partner_id': voucher.partner_id.id, - 'currency_id': company_currency <> current_currency and current_currency or False, + 'currency_id': company_currency <> line.currency_id.id and line.currency_id.id or False, 'analytic_account_id': line.account_analytic_id and line.account_analytic_id.id or False, 'quantity': 1, 'credit': 0.0, @@ -800,14 +808,14 @@ class account_voucher(osv.osv): if not (tax_data.base_code_id and tax_data.tax_code_id): raise osv.except_osv(_('No Account Base Code and Account Tax Code!'),_("You have to configure account base code and account tax code on the '%s' tax!") % (tax_data.name)) sign = (move_line['debit'] - move_line['credit']) < 0 and -1 or 1 - move_line['amount_currency'] = company_currency <> current_currency and sign * line.amount or 0.0 + move_line['amount_currency'] = company_currency <> line.currency_id.id and sign * line.amount or 0.0 voucher_line = move_line_pool.create(cr, uid, move_line) if line.move_line_id.id: rec_ids = [voucher_line, line.move_line_id.id] rec_list_ids.append(rec_ids) if not currency_pool.is_zero(cr, uid, voucher.currency_id, voucher.writeoff_amount): - diff = currency_pool.compute(cr, uid, current_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) + diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) account_id = False write_off_name = '' if voucher.payment_option == 'with_writeoff': @@ -825,8 +833,8 @@ class account_voucher(osv.osv): 'date': voucher.date, 'credit': diff > 0 and diff or 0.0, 'debit': diff < 0 and -diff or 0.0, - 'amount_currency': voucher.writeoff_amount, - 'currency_id': company_currency <> current_currency and current_currency or False, + 'amount_currency': company_currency <> voucher_currency and voucher.writeoff_amount or 0.0, + 'currency_id': company_currency <> voucher_currency and voucher_currency or False, } move_line_pool.create(cr, uid, move_line) self.write(cr, uid, [voucher.id], { @@ -898,34 +906,46 @@ class account_voucher_line(osv.osv): ctx = context.copy() ctx.update({'date': line.date_original}) currency_pool = self.pool.get('res.currency') - return currency_pool.compute(cr, uid, line.currency_id.id, line.company_currency_id.id, amount, context=ctx) + amount_company_cur = currency_pool.compute(cr, uid, line.currency_id.id, line.company_currency_id.id, amount, context=ctx) + ctx.update({'date': line.voucher_id.date}) + amount_voucher_cur = currency_pool.compute(cr, uid, line.currency_id.id, line.voucher_currency_id.id, amount, context=ctx) + return amount_company_cur, amount_voucher_cur def onchange_amount(self, cr, uid, ids, amount, context=None): - if not amount: - return {'value':{'amount_in_company_currency': 0.0}} + if not amount or not ids: + return {'value':{'amount_in_company_currency': 0.0, 'amount_in_voucher_currency': 0.0}} for line in self.browse(cr, uid, ids, context=context): - amount = self.__company_currency_amount(cr, uid, line, amount, context=context) - return {'value': {'amount_in_company_currency': amount}} + amount_company_cur, amount_voucher_cur = self.__company_currency_amount(cr, uid, line, amount, context=context) + return {'value': {'amount_in_company_currency': amount_company_cur, 'amount_in_voucher_currency': amount_voucher_cur}} def _get_amount_in_company_currency(self, cr, uid, ids, name, args, context=None): res = {} for line in self.browse(cr, uid, ids, context=context): - res[line.id] = self.__company_currency_amount(cr, uid, line, line.amount, context=context) + amount_in_company_currency, amount_in_voucher_currency = self.__company_currency_amount(cr, uid, line, line.amount, context=context) + res[line.id] = { + 'amount_in_company_currency': amount_in_company_currency, + 'amount_in_voucher_currency': amount_in_voucher_currency, + } return res _columns = { 'voucher_id':fields.many2one('account.voucher', 'Voucher', required=1, ondelete='cascade'), + 'move_line_id': fields.many2one('account.move.line', 'Journal Item', required=True), + 'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'), 'name':fields.char('Description', size=256), 'account_id':fields.many2one('account.account','Account', required=True), - 'partner_id':fields.related('voucher_id', 'partner_id', type='many2one', relation='res.partner', string='Partner'), - 'currency_id': fields.function(_currency_id, string='Currency', type='many2one', relation='res.currency'), - 'untax_amount':fields.float('Untax Amount'), - 'amount':fields.float('Amount', digits_compute=dp.get_precision('Account')), - 'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'), 'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'), - 'move_line_id': fields.many2one('account.move.line', 'Journal Item', required=True), + 'partner_id':fields.related('voucher_id', 'partner_id', type='many2one', relation='res.partner', string='Partner'), + 'untax_amount':fields.float('Untax Amount'), + + 'currency_id': fields.function(_currency_id, string='Currency', type='many2one', relation='res.currency'), 'company_currency_id': fields.related('move_line_id','company_id','currency_id', type='many2one', relation='res.currency', string="Company Currency"), - 'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account')), + 'voucher_currency_id': fields.related('voucher_id', 'currency_id', type='many2one', relation='res.currency', string="Voucher Currency"), + + 'amount':fields.float('Amount', digits_compute=dp.get_precision('Account')), + 'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), + 'amount_in_voucher_currency': fields.function(_get_amount_in_company_currency, string='Amount in Voucher Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), + 'date_original': fields.related('move_line_id','date', type='date', relation='account.move.line', string='Date', readonly=1), 'date_due': fields.related('move_line_id','date_maturity', type='date', relation='account.move.line', string='Due Date', readonly=1), 'amount_original': fields.function(_compute_balance, multi='dc', type='float', string='Original Amount', store=True), diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index 1d6e2f19ddc..b4e249a0d33 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -301,7 +301,7 @@ invisible="context.get('line_type', False)" string="Paid Amount" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/> - + @@ -314,7 +314,7 @@ - + - + + + - + - + + + + + + + @@ -345,19 +353,20 @@ - - - + + + + + domain="[('type','=','other')]" colspan="4"/> + attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" colspan="4"/> + groups="analytic.group_analytic_accounting" colspan="4"/> From 69e5946d0f285e23735ac82f2088c006177533c2 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 15 Jul 2011 14:44:33 +0200 Subject: [PATCH 009/394] [IMP] account: display currency in name get of journals also for the ones in company currency bzr revid: qdp-launchpad@openerp.com-20110715124433-f61h47m09l83c07d --- addons/account/account.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/account/account.py b/addons/account/account.py index 03a9b628922..ad7b60ada4d 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -711,6 +711,8 @@ class account_journal(osv.osv): name = rs.name if rs.currency: name = "%s (%s)" % (rs.name, rs.currency.name) + else: + name = "%s (%s)" % (rs.name, rs.company_id.currency_id.name) res += [(rs.id, name)] return res From 3ff98eff3648564be8cbf6a5479498e524dc7a21 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 15 Jul 2011 14:47:12 +0200 Subject: [PATCH 010/394] [IMP] account: added move_id in tree view of payment in invoices form view, to allow the 'click and relate' feature to see the move line bzr revid: qdp-launchpad@openerp.com-20110715124712-8nnptyr3yy30nlse --- addons/account/account_invoice_view.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index be431c9b2e7..99a82e38485 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -238,6 +238,7 @@ + @@ -336,6 +337,7 @@ + From 930def9cfc58d3b8b5ad775fa642e4905df55b89 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 15 Jul 2011 14:47:38 +0200 Subject: [PATCH 011/394] [IMP] account_voucher: multi currency improvements (part 4) bzr revid: qdp-launchpad@openerp.com-20110715124738-q64m7ev5yk0denge --- addons/account_voucher/account_voucher.py | 56 ++++++++----------- .../voucher_payment_receipt_view.xml | 47 +++++++++------- 2 files changed, 49 insertions(+), 54 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index dd3af1139f4..a409092ed16 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -182,13 +182,13 @@ class account_voucher(osv.osv): ctx.update({'date': voucher.date}) for l in voucher.line_dr_ids: real_amount -= l.amount_in_company_currency - counter_for_writeoff -= l.amount_in_voucher_currency + counter_for_writeoff -= (l.voucher_currency_id.id == l.company_currency_id.id) and l.amount_in_company_currency or l.amount_in_voucher_currency #ctx.update({'date': l.date_original}) #counter_for_writeoff -= currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) for l in voucher.line_cr_ids: real_amount += l.amount_in_company_currency - counter_for_writeoff += l.amount_in_voucher_currency + counter_for_writeoff += (l.voucher_currency_id.id == l.company_currency_id.id) and l.amount_in_company_currency or l.amount_in_voucher_currency #ctx.update({'date': l.date_original}) #counter_for_writeoff += currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) @@ -216,7 +216,7 @@ class account_voucher(osv.osv): ],'Default Type', readonly=True, states={'draft':[('readonly',False)]}), 'name':fields.char('Memo', size=256, readonly=True, states={'draft':[('readonly',False)]}), 'date':fields.date('Date', readonly=True, select=True, states={'draft':[('readonly',False)]}, help="Effective date for accounting entries"), - 'journal_id':fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}), + 'journal_id':fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}, change_default=1), 'account_id':fields.many2one('account.account', 'Account', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'line_ids':fields.one2many('account.voucher.line','voucher_id','Voucher Lines', readonly=True, states={'draft':[('readonly',False)]}), 'line_cr_ids':fields.one2many('account.voucher.line','voucher_id','Credits', @@ -229,6 +229,7 @@ class account_voucher(osv.osv): #duplicated field for display purposes 'currency_id2': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"), 'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}), + 'company_currency': fields.related('company_id','currency_id', type='many2one', relation='res.currency', string='Currency', readonly=True), 'state':fields.selection( [('draft','Draft'), ('proforma','Pro-forma'), @@ -256,7 +257,7 @@ class account_voucher(osv.osv): 'date_due': fields.date('Due Date', readonly=True, select=True, states={'draft':[('readonly',False)]}), 'payment_option':fields.selection([ ('without_writeoff', 'Keep Open'), - ('with_writeoff', 'Reconcile with Write-Off'), + ('with_writeoff', 'Reconcile'), ], 'Payment Difference', required=True, readonly=True, states={'draft': [('readonly', False)]}), 'writeoff_acc_id': fields.many2one('account.account', 'Write-Off account', readonly=True, states={'draft': [('readonly', False)]}), 'comment': fields.char('Write-Off Comment', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}), @@ -440,38 +441,33 @@ class account_voucher(osv.osv): @return: Returns a dict which contains new values, and context """ - if context is None: - context = {} if not journal_id: return {} + if context is None: + context = {} context_multi_currency = context.copy() if date: context_multi_currency.update({'date': date}) - line_pool = self.pool.get('account.voucher.line') - line_ids = ids and line_pool.search(cr, uid, [('voucher_id', '=', ids[0])]) or False - if line_ids: - line_pool.unlink(cr, uid, line_ids) - currency_pool = self.pool.get('res.currency') move_line_pool = self.pool.get('account.move.line') partner_pool = self.pool.get('res.partner') journal_pool = self.pool.get('account.journal') - - vals = self.onchange_journal(cr, uid, ids, journal_id, [], False, partner_id, context) - vals = vals.get('value') + line_pool = self.pool.get('account.voucher.line') + #get default values + vals = self.onchange_journal(cr, uid, ids, journal_id, [], False, partner_id, context=context) + vals = vals.get('value',{}) voucher_currency_id = vals.get('currency_id', voucher_currency_id) default = { 'value':{'line_ids':[], 'line_dr_ids':[], 'line_cr_ids':[], 'pre_line': False, 'currency_id': voucher_currency_id}, } - if not partner_id: - return default + #drop existing lines + line_ids = ids and line_pool.search(cr, uid, [('voucher_id', 'in', ids)]) or [] + if line_ids: + line_pool.unlink(cr, uid, line_ids, context=context) - if not partner_id and ids: - line_ids = line_pool.search(cr, uid, [('voucher_id', '=', ids[0])]) - if line_ids: - line_pool.unlink(cr, uid, line_ids) + if not partner_id: return default journal = journal_pool.browse(cr, uid, journal_id, context=context) @@ -583,7 +579,7 @@ class account_voucher(osv.osv): def onchange_journal(self, cr, uid, ids, journal_id, line_ids, tax_id, partner_id, context=None): if not journal_id: - return False + return {} journal_pool = self.pool.get('account.journal') journal = journal_pool.browse(cr, uid, journal_id, context=context) account_id = journal.default_credit_account_id or journal.default_debit_account_id @@ -640,7 +636,6 @@ class account_voucher(osv.osv): raise osv.except_osv(_('Invalid action !'), _('Cannot delete Voucher(s) which are already opened or paid !')) return super(account_voucher, self).unlink(cr, uid, ids, context=context) - # TODO: may be we can remove this method if not used anyware def onchange_payment(self, cr, uid, ids, pay_now, journal_id, partner_id, ttype='sale'): res = {} if not partner_id: @@ -705,8 +700,6 @@ class account_voucher(osv.osv): voucher_currency = voucher.currency_id.id debit = 0.0 credit = 0.0 - # TODO: is there any other alternative then the voucher type ?? - # -for sale, purchase we have but for the payment and receipt we do not have as based on the bank/cash journal we can not know its payment or receipt if voucher.type in ('purchase', 'payment'): credit = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.amount, context=context_multi_currency) elif voucher.type in ('sale', 'receipt'): @@ -738,11 +731,11 @@ class account_voucher(osv.osv): #create the move line for the currency difference if voucher.currency_rate_difference: if voucher.currency_rate_difference > 0: - account_id = voucher.company_id.property_income_currency_exchange + account_id = voucher.company_id.property_expense_currency_exchange if not account_id: raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Income Currency Rate' on the company! ")) else: - account_id = voucher.company_id.property_expense_currency_exchange + account_id = voucher.company_id.property_income_currency_exchange if not account_id: raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Expense Currency Rate' on the company! ")) @@ -758,10 +751,9 @@ class account_voucher(osv.osv): 'date': voucher.date, 'date_maturity': voucher.date_due } - move_line_pool.create(cr, uid, currency_diff_line, context=context) - rec_list_ids = [] + rec_list_ids = [] for line in voucher.line_ids: #create one move line per voucher line where amount is not 0.0 if not line.amount: @@ -770,9 +762,6 @@ class account_voucher(osv.osv): if line.amount == line.amount_unreconciled: amount = line.move_line_id.amount_residual #residual amount in company currency else: - #ctx = context_multi_currency.copy() - #ctx.update({'date': line.date_original}) - #amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=ctx) amount = line.amount_in_company_currency move_line = { 'journal_id': voucher.journal_id.id, @@ -815,6 +804,7 @@ class account_voucher(osv.osv): rec_list_ids.append(rec_ids) if not currency_pool.is_zero(cr, uid, voucher.currency_id, voucher.writeoff_amount): + #create one line for the write off if needed diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) account_id = False write_off_name = '' @@ -831,9 +821,9 @@ class account_voucher(osv.osv): 'move_id': move_id, 'partner_id': voucher.partner_id.id, 'date': voucher.date, - 'credit': diff > 0 and diff or 0.0, 'debit': diff < 0 and -diff or 0.0, - 'amount_currency': company_currency <> voucher_currency and voucher.writeoff_amount or 0.0, + 'credit': diff > 0 and diff or 0.0, + 'amount_currency': company_currency <> voucher_currency and -voucher.writeoff_amount or 0.0, 'currency_id': company_currency <> voucher_currency and voucher_currency or False, } move_line_pool.create(cr, uid, move_line) diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index b4e249a0d33..c2344d681c1 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -301,7 +301,7 @@ invisible="context.get('line_type', False)" string="Paid Amount" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/> - + @@ -320,32 +320,36 @@ on_change="onchange_move_line_id(move_line_id)" domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]" /> - + - - - - - - - + + + + + + + - - - - - - + + + + - - - - + + + + + + + @@ -356,9 +360,11 @@ + + - + @@ -371,7 +377,6 @@ - From db61756ea7069646b61cd83d854284978c4ad816 Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Fri, 15 Jul 2011 16:41:26 +0200 Subject: [PATCH 012/394] [IMP] account_voucher: onchange of the amount must assign it correctly if the same amount is found in move line list. If not, it must split it only on the lines with the same curerncy (not working yet). (improvements part 5) bzr revid: qdp-launchpad@openerp.com-20110715144126-6mq2dhkchwcxh51j --- addons/account_voucher/account_voucher.py | 52 +++++++++++++++++------ 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index a409092ed16..17940aa6f25 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -499,22 +499,38 @@ class account_voucher(osv.osv): ids = move_line_pool.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id)], context=context) else: ids = context['move_line_ids'] + #order the lines by most old first ids.reverse() - moves = move_line_pool.browse(cr, uid, ids, context=context) + moves = move_line_pool.browse(cr, uid, ids, context=context) company_currency = journal.company_id.currency_id.id if company_currency != voucher_currency_id and ttype == 'payment': total_debit = currency_pool.compute(cr, uid, voucher_currency_id, company_currency, total_debit, context=context_multi_currency) elif company_currency != voucher_currency_id and ttype == 'receipt': total_credit = currency_pool.compute(cr, uid, voucher_currency_id, company_currency, total_credit, context=context_multi_currency) + invoice_id = context.get('invoice_id', False) + move_line_found = False for line in moves: if line.credit and line.reconcile_partial_id and ttype == 'receipt': continue if line.debit and line.reconcile_partial_id and ttype == 'payment': continue - total_credit += line.credit or 0.0 - total_debit += line.debit or 0.0 + if invoice_id and line.move_id.invoice_id.id == invoice_id: + move_line_found = line.id + break + if voucher_currency_id == company_currency: + if line.amount_residual == price: + move_line_found = line.id + break + total_credit += line.credit or 0.0 + total_debit += line.debit or 0.0 + elif voucher_currency_id == line.currency_id.id: + if line.amount_residual_currency == price: + move_line_found = line.id + break + total_credit += line.amount_currency or 0.0 + total_debit += line.amount_currency or 0.0 for line in moves: if line.credit and line.reconcile_partial_id and ttype == 'receipt': continue @@ -529,7 +545,7 @@ class account_voucher(osv.osv): 'move_line_id':line.id, 'account_id':line.account_id.id, 'amount_original': amount_original, - 'amount': 0.0, + 'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0, 'currency_id': currency_id, 'voucher_currency_id': voucher_currency_id, 'date_original':line.date, @@ -539,14 +555,26 @@ class account_voucher(osv.osv): 'amount_in_company_currency': 0.0, } - #if line.credit: - # amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_debit), context=context_multi_currency)) - # rs['amount'] = amount - # total_debit -= amount - #else: - # amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_credit), context=context_multi_currency)) - # rs['amount'] = amount - # total_credit -= amount + if not move_line_found: + #TODO: this part isn't working really: we should assign the voucher amount on only lines that are or the same currency + if company_currency == voucher_currency_id: + if line.credit: + amount = min(amount_unreconciled, abs(total_debit)) + rs['amount'] = amount + total_debit -= amount + else: + amount = min(amount_unreconciled, abs(total_credit)) + rs['amount'] = amount + total_credit -= amount + elif voucher_currency_id == line.currency_id.id: + if line.credit: + amount = min(amount_unreconciled, abs(total_debit)) + rs['amount'] = amount + total_debit -= amount + else: + amount = min(amount_unreconciled, abs(total_credit)) + rs['amount'] = amount + total_credit -= amount default['value']['line_ids'].append(rs) if rs['type'] == 'cr': From 0e614785f9d10c65e2b9cc8479d8a5fe4762f0bb Mon Sep 17 00:00:00 2001 From: Mustufa Rangwala Date: Thu, 21 Jul 2011 14:31:17 +0530 Subject: [PATCH 013/394] [FIX] Account voucher: payment date refused when check date not in the period is checked lp bug: https://launchpad.net/bugs/808751 fixed bzr revid: mra@mra-laptop-20110721090117-n3uhdgxvyrkmii7d --- addons/account_voucher/account_voucher.py | 30 +++++++++---------- .../wizard/account_statement_from_invoice.py | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 17940aa6f25..56f1c719624 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -152,11 +152,11 @@ class account_voucher(osv.osv): for l in line_dr_ids: real_amount -= l.get('amount_in_company_currency', 0.0) counter_for_writeoff -= currency_pool.compute(cr, uid, l['company_currency_id'], l['voucher_currency_id'], l.get('amount_in_company_currency',0.0), context=ctx) - counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) + counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) for l in line_cr_ids: real_amount += l.get('amount_in_company_currency', 0.0) counter_for_writeoff += currency_pool.compute(cr, uid, l['company_currency_id'], l['voucher_currency_id'], l.get('amount_in_company_currency',0.0), context=ctx) - counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) + counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) writeoff_amount = amount - counter_for_writeoff currency_rate_difference = real_amount - counter_for_currency_diff return writeoff_amount, currency_rate_difference @@ -167,7 +167,7 @@ class account_voucher(osv.osv): line_osv = self.pool.get("account.voucher.line") line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context) line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context) - writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=context) + writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=context) return {'value': {'writeoff_amount': writeoff_amount,}}# 'currency_rate_difference': currency_rate_diff}} def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None): @@ -185,15 +185,15 @@ class account_voucher(osv.osv): counter_for_writeoff -= (l.voucher_currency_id.id == l.company_currency_id.id) and l.amount_in_company_currency or l.amount_in_voucher_currency #ctx.update({'date': l.date_original}) #counter_for_writeoff -= currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) - counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) + counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) for l in voucher.line_cr_ids: real_amount += l.amount_in_company_currency counter_for_writeoff += (l.voucher_currency_id.id == l.company_currency_id.id) and l.amount_in_company_currency or l.amount_in_voucher_currency #ctx.update({'date': l.date_original}) #counter_for_writeoff += currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) - counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) + counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) writeoff_amount = voucher.amount - counter_for_writeoff - res[voucher.id]['writeoff_amount'] = writeoff_amount + res[voucher.id]['writeoff_amount'] = writeoff_amount res[voucher.id]['currency_rate_difference'] = real_amount - counter_for_currency_diff return res @@ -545,9 +545,9 @@ class account_voucher(osv.osv): 'move_line_id':line.id, 'account_id':line.account_id.id, 'amount_original': amount_original, - 'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0, + 'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0, 'currency_id': currency_id, - 'voucher_currency_id': voucher_currency_id, + 'voucher_currency_id': voucher_currency_id, 'date_original':line.date, 'company_currency_id': line.company_id.currency_id.id, 'date_due':line.date_maturity, @@ -766,7 +766,7 @@ class account_voucher(osv.osv): account_id = voucher.company_id.property_income_currency_exchange if not account_id: raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Expense Currency Rate' on the company! ")) - + currency_diff_line = { 'name': _('Currency Difference'), 'debit': voucher.currency_rate_difference > 0 and voucher.currency_rate_difference or 0.0, @@ -833,7 +833,7 @@ class account_voucher(osv.osv): if not currency_pool.is_zero(cr, uid, voucher.currency_id, voucher.writeoff_amount): #create one line for the write off if needed - diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) + diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) account_id = False write_off_name = '' if voucher.payment_option == 'with_writeoff': @@ -939,7 +939,7 @@ class account_voucher_line(osv.osv): def _get_amount_in_company_currency(self, cr, uid, ids, name, args, context=None): res = {} for line in self.browse(cr, uid, ids, context=context): - amount_in_company_currency, amount_in_voucher_currency = self.__company_currency_amount(cr, uid, line, line.amount, context=context) + amount_in_company_currency, amount_in_voucher_currency = self.__company_currency_amount(cr, uid, line, line.amount, context=context) res[line.id] = { 'amount_in_company_currency': amount_in_company_currency, 'amount_in_voucher_currency': amount_in_voucher_currency, @@ -961,8 +961,8 @@ class account_voucher_line(osv.osv): 'voucher_currency_id': fields.related('voucher_id', 'currency_id', type='many2one', relation='res.currency', string="Voucher Currency"), 'amount':fields.float('Amount', digits_compute=dp.get_precision('Account')), - 'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), - 'amount_in_voucher_currency': fields.function(_get_amount_in_company_currency, string='Amount in Voucher Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), + 'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), + 'amount_in_voucher_currency': fields.function(_get_amount_in_company_currency, string='Amount in Voucher Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), 'date_original': fields.related('move_line_id','date', type='date', relation='account.move.line', string='Date', readonly=1), 'date_due': fields.related('move_line_id','date_maturity', type='date', relation='account.move.line', string='Due Date', readonly=1), @@ -1062,7 +1062,7 @@ class account_bank_statement(osv.osv): bank_st_line_obj = self.pool.get('account.bank.statement.line') st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context) if st_line.voucher_id: - voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context) + voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number, 'date': st_line.date}, context=context) if st_line.voucher_id.state == 'cancel': voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context) wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr) @@ -1072,7 +1072,7 @@ class account_bank_statement(osv.osv): 'move_ids': [(4, v.move_id.id, False)] }) - return move_line_obj.write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id}, context=context) + return move_line_obj.write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id, 'date': st_line.date}, update_check=False, context=context) return super(account_bank_statement, self).create_move_from_st_line(cr, uid, st_line.id, company_currency_id, next_number, context=context) account_bank_statement() diff --git a/addons/account_voucher/wizard/account_statement_from_invoice.py b/addons/account_voucher/wizard/account_statement_from_invoice.py index e4d728c8867..3509ac846b5 100644 --- a/addons/account_voucher/wizard/account_statement_from_invoice.py +++ b/addons/account_voucher/wizard/account_statement_from_invoice.py @@ -75,7 +75,7 @@ class account_statement_from_invoice_lines(osv.osv_memory): statement.currency.id, amount, context=ctx) context.update({'move_line_ids': [line.id]}) - result = voucher_obj.onchange_partner_id(cr, uid, [], partner_id=line.partner_id.id, journal_id=statement.journal_id.id, price=abs(amount), currency_id= statement.currency.id, ttype=(amount < 0 and 'payment' or 'receipt'), date=line_date, context=context) + result = voucher_obj.onchange_partner_id(cr, uid, [], partner_id=line.partner_id.id, journal_id=statement.journal_id.id, price=abs(amount), voucher_currency_id= statement.currency.id, ttype=(amount < 0 and 'payment' or 'receipt'), date=line_date, context=context) voucher_res = { 'type':(amount < 0 and 'payment' or 'receipt'), 'name': line.name, 'partner_id': line.partner_id.id, From 2b46bc9925f09cec83f976b0dfde95e419916f1b Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Thu, 28 Jul 2011 15:21:52 +0530 Subject: [PATCH 014/394] [ADD] add basic directory structure of kanban view. bzr revid: ysa@tinyerp.com-20110728095152-l8g2zqqro2mkr7ne --- addons/base_kanban/__init__.py | 1 + addons/base_kanban/__openerp__.py | 10 ++++++++ addons/base_kanban/controllers/__init__.py | 1 + addons/base_kanban/controllers/main.py | 11 ++++++++ addons/base_kanban/static/src/js/kanban.js | 30 ++++++++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 addons/base_kanban/__init__.py create mode 100644 addons/base_kanban/__openerp__.py create mode 100644 addons/base_kanban/controllers/__init__.py create mode 100644 addons/base_kanban/controllers/main.py create mode 100644 addons/base_kanban/static/src/js/kanban.js diff --git a/addons/base_kanban/__init__.py b/addons/base_kanban/__init__.py new file mode 100644 index 00000000000..355939a4922 --- /dev/null +++ b/addons/base_kanban/__init__.py @@ -0,0 +1 @@ +import controllers \ No newline at end of file diff --git a/addons/base_kanban/__openerp__.py b/addons/base_kanban/__openerp__.py new file mode 100644 index 00000000000..81f7228c1cb --- /dev/null +++ b/addons/base_kanban/__openerp__.py @@ -0,0 +1,10 @@ +{ + "name" : "Base Kanban", + "version" : "2.0", + "depends" : ["base"], + "js": [ + "static/src/js/kanban.js" + ], + "css": [], + 'active': True +} diff --git a/addons/base_kanban/controllers/__init__.py b/addons/base_kanban/controllers/__init__.py new file mode 100644 index 00000000000..039d9715fab --- /dev/null +++ b/addons/base_kanban/controllers/__init__.py @@ -0,0 +1 @@ +import main \ No newline at end of file diff --git a/addons/base_kanban/controllers/main.py b/addons/base_kanban/controllers/main.py new file mode 100644 index 00000000000..ba2ee948f34 --- /dev/null +++ b/addons/base_kanban/controllers/main.py @@ -0,0 +1,11 @@ +from base.controllers.main import View +import openerpweb + +class KanbanView(View): + _cp_path = "/base_kanban/kanbanview" + + @openerpweb.jsonrequest + def load(self, req, model, view_id): + fields_view = self.fields_view_get(req, model, view_id, 'kanban') + all_fields = req.session.model(model).fields_get() + return {'fields_view': fields_view, 'all_fields':all_fields} diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js new file mode 100644 index 00000000000..f10b0d45c37 --- /dev/null +++ b/addons/base_kanban/static/src/js/kanban.js @@ -0,0 +1,30 @@ +openerp.base_kanban = function (openerp) { +openerp.base.views.add('kanban', 'openerp.base_kanban.KanbanView'); +openerp.base_kanban.KanbanView = openerp.base.View.extend({ + + init: function(parent, element_id, dataset, view_id) { + this._super(parent, element_id); + this.view_manager = parent; + this.dataset = dataset; + this.model = this.dataset.model; + this.view_id = view_id; + }, + + start: function() { + this.rpc("/base_kanban/kanbanview/load", + {"model": this.model, "view_id": this.view_id}, this.on_loaded); + }, + + on_loaded: function(data) { + var template_xml = ''; + _.each(data.fields_view.arch.children, function(child) { + if (child.tag == "template"){ + template_xml = openerp.base.json_node_to_xml(child, true) + } + }); + console.log(":template_xml:::",template_xml); + }, +}); +}; + +// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: From bf57289f89185e2b1c8179b52287f193f2e8d42b Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Fri, 29 Jul 2011 14:34:30 +0530 Subject: [PATCH 015/394] [IMP] improve kanban view. simple display all records. bzr revid: ysa@tinyerp.com-20110729090430-ilaaxzpl0waes3a2 --- addons/base/static/src/js/views.js | 10 ++-- addons/base_kanban/__openerp__.py | 6 ++- addons/base_kanban/static/src/js/kanban.js | 56 +++++++++++++++++++++- 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 5e1d6be4f61..1bc0f896ee6 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -219,7 +219,7 @@ openerp.base.ViewManager = openerp.base.Controller.extend({ }, /** * Event launched when a controller has been inited. - * + * * @param {String} view_type type of view * @param {String} view the inited controller */ @@ -525,7 +525,7 @@ openerp.base.View = openerp.base.Controller.extend({ * Directly set a view to use instead of calling fields_view_get. This method must * be called before start(). When an embedded view is set, underlying implementations * of openerp.base.View must use the provided view instead of any other one. - * + * * @param embedded_view A view. */ set_embedded_view: function(embedded_view) { @@ -541,7 +541,11 @@ openerp.base.views = new openerp.base.Registry(); openerp.base.json_node_to_xml = function(node, single_quote, indent) { // For debugging purpose, this function will convert a json node back to xml // Maybe usefull for xml view editor - if (typeof(node.tag) !== 'string' || !node.children instanceof Array || !node.attrs instanceof Object) { + + if (typeof(node) === 'string') { + return node; + } + else if (typeof(node.tag) !== 'string' || !node.children instanceof Array || !node.attrs instanceof Object) { throw("Node a json node"); } indent = indent || 0; diff --git a/addons/base_kanban/__openerp__.py b/addons/base_kanban/__openerp__.py index 81f7228c1cb..df1fe37564c 100644 --- a/addons/base_kanban/__openerp__.py +++ b/addons/base_kanban/__openerp__.py @@ -3,8 +3,10 @@ "version" : "2.0", "depends" : ["base"], "js": [ - "static/src/js/kanban.js" + "static/src/js/kanban.js" + ], + "css": [ + "static/src/css/kanban.css" ], - "css": [], 'active': True } diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index f10b0d45c37..72b47b4c99e 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -1,4 +1,5 @@ openerp.base_kanban = function (openerp) { +QWeb.add_template('/base_kanban/static/src/xml/base_kanban.xml'); openerp.base.views.add('kanban', 'openerp.base_kanban.KanbanView'); openerp.base_kanban.KanbanView = openerp.base.View.extend({ @@ -8,22 +9,73 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ this.dataset = dataset; this.model = this.dataset.model; this.view_id = view_id; + this.element_id = element_id; }, start: function() { this.rpc("/base_kanban/kanbanview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, - on_loaded: function(data) { + var self = this; var template_xml = ''; + _.each(data.fields_view.arch.children, function(child) { if (child.tag == "template"){ template_xml = openerp.base.json_node_to_xml(child, true) } }); - console.log(":template_xml:::",template_xml); + + if(template_xml){ + self.dataset.read_slice([], 0, false, function (records) { + self.on_show_data(records, template_xml); + }); + } }, + + on_show_data: function(records, template_xml) { + var self = this; + var new_qweb = new QWeb2.Engine(); + new_qweb.add_template('' + template_xml + '') + + self.$element.html(QWeb.render("KanbanBiew", {"records" :records})); + _.each(records, function(record) { + self.$element.find("#data_" + record.id).append(new_qweb.render('custom_template', record)); + }); + + this.$element.find(".column").sortable({ + connectWith: ".column" + }); + this.$element.find(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") + .find(".portlet-header") + .addClass("ui-widget-header ui-corner-all") + .prepend( "") + .end() + .find( ".portlet-content" ); + + this.$element.find(".portlet-header .ui-icon").click(function() { + $(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick"); + $(this).parents(".portlet:first").find(".portlet-content").toggle(); + }); + this.$element.find('.portlet .ui-icon-closethick').click(this.on_close_action); + this.$element.find(".column").disableSelection(); + this.$element.find(".ui.item").css("background-color","#c3dAf9"); + + //self.$element.find( ".column" ).css("width",column_width); + }, + + on_close_action: function(e) { + $(e.currentTarget).parents('.portlet:first').remove(); + }, + + do_show: function () { + this.$element.show(); + }, + + do_hide: function () { + this.$element.hide(); + }, + }); }; From a64d060b1afead17137155b3de1a8889e1bc27de Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Mon, 1 Aug 2011 15:45:28 +0530 Subject: [PATCH 016/394] [IMP] Impliment basic structure of kanban view. bzr revid: ysa@tinyerp.com-20110801101528-gcq9rf58hr7e2ejz --- addons/base_kanban/static/src/css/kanban.css | 40 +++++++++++ addons/base_kanban/static/src/js/kanban.js | 72 ++++++++++++++----- .../static/src/xml/base_kanban.xml | 21 ++++++ 3 files changed, 117 insertions(+), 16 deletions(-) create mode 100644 addons/base_kanban/static/src/css/kanban.css create mode 100644 addons/base_kanban/static/src/xml/base_kanban.xml diff --git a/addons/base_kanban/static/src/css/kanban.css b/addons/base_kanban/static/src/css/kanban.css new file mode 100644 index 00000000000..16f46f849a8 --- /dev/null +++ b/addons/base_kanban/static/src/css/kanban.css @@ -0,0 +1,40 @@ +.openerp .oe_column { + width: 100%; + float: left; + padding-bottom: 100px; +} + +.portlet { + width: 100%; + margin: 0 1em 1em 0; +} + +.portlet-header { + margin: 0.3em; + padding-bottom: 4px; + padding-left: 0.2em; +} + +.portlet-header .ui-icon { + float: right; +} + +.portlet-content { + padding: 0.4em; +} + +.ui-sortable-placeholder { + border: 1px dotted black; + visibility: visible !important; + height: 50px !important; +} + +.ui-sortable-placeholder * { + visibility: hidden; +} + +.openerp .oe_column_heading{ + color: #000000; + font-size: 1.5em; + font-weight: bold; +} diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index 72b47b4c99e..ee60d91be35 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -18,33 +18,33 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ }, on_loaded: function(data) { var self = this; - var template_xml = ''; + this.template_xml = ''; _.each(data.fields_view.arch.children, function(child) { if (child.tag == "template"){ - template_xml = openerp.base.json_node_to_xml(child, true) + self.template_xml = openerp.base.json_node_to_xml(child, true) } }); - - if(template_xml){ + if(this.template_xml){ self.dataset.read_slice([], 0, false, function (records) { - self.on_show_data(records, template_xml); + self.on_show_data([{'records': records, 'value':false}]); }); } }, - on_show_data: function(records, template_xml) { + on_show_data: function(datas) { var self = this; var new_qweb = new QWeb2.Engine(); - new_qweb.add_template('' + template_xml + '') - - self.$element.html(QWeb.render("KanbanBiew", {"records" :records})); - _.each(records, function(record) { - self.$element.find("#data_" + record.id).append(new_qweb.render('custom_template', record)); + new_qweb.add_template('' + this.template_xml + '') + self.$element.html(QWeb.render("KanbanBiew", {"datas" :datas})); + _.each(datas, function(data) { + _.each(data.records, function(record) { + self.$element.find("#data_" + record.id).append(new_qweb.render('custom_template', record)); + }); }); - this.$element.find(".column").sortable({ - connectWith: ".column" + this.$element.find(".oe_column").sortable({ + connectWith: ".oe_column" }); this.$element.find(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") .find(".portlet-header") @@ -58,16 +58,56 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ $(this).parents(".portlet:first").find(".portlet-content").toggle(); }); this.$element.find('.portlet .ui-icon-closethick').click(this.on_close_action); - this.$element.find(".column").disableSelection(); + this.$element.find(".oe_column").disableSelection(); this.$element.find(".ui.item").css("background-color","#c3dAf9"); - - //self.$element.find( ".column" ).css("width",column_width); + self.$element.find( ".oe_column" ).css("width", 99 / datas.length +"%"); }, on_close_action: function(e) { $(e.currentTarget).parents('.portlet:first').remove(); }, + do_search: function (domains, contexts, group_by) { + var self = this; + this.rpc('/base/session/eval_domain_and_context', { + domains: domains, + contexts: contexts, + group_by_seq: group_by + }, function (results) { + self.dataset.context = results.context; + self.dataset.domain = results.domain; + self.groups = new openerp.base.DataGroup( + self, self.model, results.domain, results.context, results.group_by); + self.groups.list([], + function (groups) { + self.do_render_group(groups); + }, + function (dataset) { + self.dataset.read_slice(false, false, false, function(records) { + self.on_show_data([{'records': records, 'value':false}]); + }); + }); + }); + }, + + do_render_group : function(datagroups){ + this.columns = []; + var self = this; + _.each(datagroups, function (group) { + self.dataset.context = group.context; + self.dataset.domain = group.domain; + if(!group.value) { + group.value = "Undefined" + } + self.dataset.read_slice(false, false, false, function(records) { + self.columns.push({"value" : group.value, "records": records}); + if (datagroups.length == self.columns.length) { + self.on_show_data(self.columns); + } + }); + }); + }, + do_show: function () { this.$element.show(); }, diff --git a/addons/base_kanban/static/src/xml/base_kanban.xml b/addons/base_kanban/static/src/xml/base_kanban.xml new file mode 100644 index 00000000000..8a234ed6dae --- /dev/null +++ b/addons/base_kanban/static/src/xml/base_kanban.xml @@ -0,0 +1,21 @@ + \ No newline at end of file From 9bdcc4d37934601f91f4f96eeeae655f8e8f2c0c Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Mon, 1 Aug 2011 17:15:23 +0530 Subject: [PATCH 017/394] [IMP] Improve code. bzr revid: ysa@tinyerp.com-20110801114523-xk5jyx2iwn9ptj9n --- addons/base_kanban/static/src/css/kanban.css | 8 +++--- addons/base_kanban/static/src/js/kanban.js | 26 +++++++++++-------- .../static/src/xml/base_kanban.xml | 6 ++--- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/addons/base_kanban/static/src/css/kanban.css b/addons/base_kanban/static/src/css/kanban.css index 16f46f849a8..6e6a8bebcef 100644 --- a/addons/base_kanban/static/src/css/kanban.css +++ b/addons/base_kanban/static/src/css/kanban.css @@ -4,22 +4,22 @@ padding-bottom: 100px; } -.portlet { +.record { width: 100%; margin: 0 1em 1em 0; } -.portlet-header { +.record-header { margin: 0.3em; padding-bottom: 4px; padding-left: 0.2em; } -.portlet-header .ui-icon { +.record-header .ui-icon { float: right; } -.portlet-content { +.record-content { padding: 0.4em; } diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index ee60d91be35..e03d89c7cdf 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -46,25 +46,25 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ this.$element.find(".oe_column").sortable({ connectWith: ".oe_column" }); - this.$element.find(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") - .find(".portlet-header") + this.$element.find(".record").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") + .find(".record-header") .addClass("ui-widget-header ui-corner-all") .prepend( "") .end() - .find( ".portlet-content" ); + .find( ".record-content" ); - this.$element.find(".portlet-header .ui-icon").click(function() { + this.$element.find(".record-header .ui-icon").click(function() { $(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick"); - $(this).parents(".portlet:first").find(".portlet-content").toggle(); + $(this).parents(".record:first").find(".record-content").toggle(); }); - this.$element.find('.portlet .ui-icon-closethick').click(this.on_close_action); + this.$element.find('.record .ui-icon-closethick').click(this.on_close_action); this.$element.find(".oe_column").disableSelection(); - this.$element.find(".ui.item").css("background-color","#c3dAf9"); + this.$element.find(".ui.item").css("background-color","red"); self.$element.find( ".oe_column" ).css("width", 99 / datas.length +"%"); }, on_close_action: function(e) { - $(e.currentTarget).parents('.portlet:first').remove(); + $(e.currentTarget).parents('.record:first').remove(); }, do_search: function (domains, contexts, group_by) { @@ -96,11 +96,15 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ _.each(datagroups, function (group) { self.dataset.context = group.context; self.dataset.domain = group.domain; - if(!group.value) { - group.value = "Undefined" + var group_name = group.value; + if(!group_name) { + group_name = "Undefined" + } + else if(group_name instanceof Array) { + group_name = group_name[1] } self.dataset.read_slice(false, false, false, function(records) { - self.columns.push({"value" : group.value, "records": records}); + self.columns.push({"value" : group_name, "records": records}); if (datagroups.length == self.columns.length) { self.on_show_data(self.columns); } diff --git a/addons/base_kanban/static/src/xml/base_kanban.xml b/addons/base_kanban/static/src/xml/base_kanban.xml index 8a234ed6dae..a552a93efa3 100644 --- a/addons/base_kanban/static/src/xml/base_kanban.xml +++ b/addons/base_kanban/static/src/xml/base_kanban.xml @@ -8,9 +8,9 @@
-
-
-
+
+
+
From 0465909c92d248e0a434dd85f8d78e7ff0be2c7a Mon Sep 17 00:00:00 2001 From: mtr Date: Mon, 1 Aug 2011 18:31:43 +0530 Subject: [PATCH 018/394] [ADD] account_voucher: added yaml for multicurrency i.e. USD-EUR, EUR-EUR, CAD-CHF bzr revid: mtr@mtr-20110801130143-wygzy83cztuqw3ub --- addons/account_voucher/__openerp__.py | 5 +- addons/account_voucher/test/case2_usd_eur.yml | 360 ++++++++++++++++++ addons/account_voucher/test/case3_eur_eur.yml | 331 ++++++++++++++++ addons/account_voucher/test/case4_cad_chf.yml | 181 +++++++++ 4 files changed, 876 insertions(+), 1 deletion(-) create mode 100644 addons/account_voucher/test/case2_usd_eur.yml create mode 100644 addons/account_voucher/test/case3_eur_eur.yml create mode 100644 addons/account_voucher/test/case4_cad_chf.yml diff --git a/addons/account_voucher/__openerp__.py b/addons/account_voucher/__openerp__.py index 039d3e067af..d4331a81923 100644 --- a/addons/account_voucher/__openerp__.py +++ b/addons/account_voucher/__openerp__.py @@ -59,7 +59,10 @@ Account Voucher module includes all the basic requirements of Voucher Entries fo "test/account_voucher.yml", "test/sales_receipt.yml", "test/sales_payment.yml", - "test/account_voucher_report.yml" + "test/account_voucher_report.yml", + "test/case2_usd_eur.yml", + "test/case3_eur_eur.yml", + "test/case4_cad_chf.yml", ], 'certificate': '0037580727101', "active": False, diff --git a/addons/account_voucher/test/case2_usd_eur.yml b/addons/account_voucher/test/case2_usd_eur.yml new file mode 100644 index 00000000000..39b0eb0edbb --- /dev/null +++ b/addons/account_voucher/test/case2_usd_eur.yml @@ -0,0 +1,360 @@ +- + I create a currency rate for USD for january of 1.333333 +- + !record {model: res.currency.rate, id: janu_usd}: + currency_id: base.USD + name: !eval "'%s-01-01' %(datetime.now().year)" + rate: 1.333333 +- + I create a currency rate for USD for february of 1.250000 +- + !record {model: res.currency.rate, id: febr_usd}: + currency_id: base.USD + name: !eval "'%s-02-01' %(datetime.now().year)" + rate: 1.250000 +- + I create a currency rate for USD for march of 1.111111 +- + !record {model: res.currency.rate, id: marc_usd}: + currency_id: base.USD + name: !eval "'%s-03-01' %(datetime.now().year)" + rate: 1.111111 +- + I create a currency rate for USD for april of 1.052632 +- + !record {model: res.currency.rate, id: apri_usd}: + currency_id: base.USD + name: !eval "'%s-04-01' %(datetime.now().year)" + rate: 1.052632 +- + I create a bank journal with EUR as currency +- + !record {model: account.journal, id: bank_journal_EUR}: + name: Bank Journal(EUR) + code: BEUR + type: bank + analytic_journal_id: account.sit + sequence_id: account.sequence_bank_journal + default_debit_account_id: account.cash + default_credit_account_id: account.cash + currency: base.EUR + company_id: base.main_company + view_id: account.account_journal_bank_view +- + I create a bank journal with USD as currency +- + !record {model: account.journal, id: bank_journal_USD}: + name: Bank Journal(USD) + code: BUSD + type: bank + analytic_journal_id: account.sit + sequence_id: account.sequence_bank_journal + default_debit_account_id: account.cash + default_credit_account_id: account.cash + currency: base.USD + company_id: base.main_company + view_id: account.account_journal_bank_view +- + I assign accounts for 'Income Curreny Rate' and 'Expense Currency Rate' +- + !record {model: res.company, id: base.main_company}: + property_expense_currency_exchange: account.o_expense + property_income_currency_exchange: account.o_income +- + I create a new partner Michael Geller +- + !record {model: res.partner, id: res_partner_michael0}: + address: + - city: paris + country_id: base.fr + name: Michael + street: 1 rue Rockfeller + type: invoice + zip: '75016' + name: Mr.Michael Geller +- + I create the first invoice on 1st January for 200 USD +- + !record {model: account.invoice, id: account_first_invoice_jan}: + account_id: account.a_recv + address_contact_id: base.res_partner_address_3000 + address_invoice_id: base.res_partner_address_3000 + company_id: base.main_company + currency_id: base.USD + date_invoice: !eval "'%s-01-01' %(datetime.now().year)" + period_id: account.period_1 + invoice_line: + - account_id: account.a_sale + name: '[PC1] Basic PC' + price_unit: 200.0 + quantity: 1.0 + product_id: product.product_product_pc1 + uos_id: product.product_uom_unit + journal_id: account.sales_journal + partner_id: res_partner_michael0 + reference_type: none +- + I Validate invoice by clicking on Validate button +- + !workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan} +- + I check that first invoice move is correct +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) + assert invoice_id.move_id, "Move not created for open invoice" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.debit - move_line.credit == 150.00), "Invoice move is incorrect for debtors account" +- + I create the second invoice on 1st February for 100 USD +- + !record {model: account.invoice, id: account_second_invoice_feb}: + account_id: account.a_recv + address_contact_id: base.res_partner_address_3000 + address_invoice_id: base.res_partner_address_3000 + company_id: base.main_company + currency_id: base.USD + date_invoice: !eval "'%s-02-01' %(datetime.now().year)" + period_id: account.period_2 + invoice_line: + - account_id: account.a_sale + name: '[PC1] Basic PC' + price_unit: 100.0 + quantity: 1.0 + product_id: product.product_product_pc1 + uos_id: product.product_uom_unit + journal_id: account.sales_journal + partner_id: res_partner_michael0 + reference_type: none +- + I Validate invoice by clicking on Validate button +- + !workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb} +- + I check that second invoice move is correct for debtor account (debit - credit == 80) +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb")) + assert invoice_id.move_id, "Move not created for open invoice" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.debit - move_line.credit == 80), "Invoice move is incorrect for debtors account" +- + I create the first voucher of payment with values 240 EUR, journal EUR, and fill amount 180 for the invoice of 200$ and 70 for the 100$ invoice. +- + !python {model: account.voucher}: | + import netsvc, time + vals = {} + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_EUR'), 240.0, 2, ttype='receipt', date=False) + vals = { + 'account_id': ref('account.cash'), + 'amount': 240.0, + 'company_id': ref('base.main_company'), + 'currency_id': ref('base.EUR'), + 'journal_id': ref('bank_journal_EUR'), + 'partner_id': ref('res_partner_michael0'), + 'period_id': ref('account.period_3'), + 'type': 'receipt', + 'date': time.strftime("%Y-03-01"), + 'payment_option': 'with_writeoff', + 'writeoff_acc_id': ref('account.a_expense'), + 'comment': 'Write Off', + 'name': 'First payment', + } + if not res['value']['line_cr_ids']: + res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + for item in res['value']['line_cr_ids']: + if item['amount_unreconciled'] == 200: + item['amount'] = 180 + else: + item['amount'] = 70 + vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] + id = self.create(cr, uid, vals) + voucher_id = self.browse(cr, uid, id) + assert (voucher_id.state=='draft'), "Voucher is not in draft state" +- + I check that writeoff amount computed is 15 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.writeoff_amount == 15), "writeoff amount is not 15" +- + I check that currency rate difference is -34 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.currency_rate_difference == -34), "currency rate difference is not -34" +- + I confirm the voucher +- + !python {model: account.voucher}: | + import netsvc + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) +- + I check that my voucher state is posted +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert voucher_id.state == 'posted', "Voucher state is not posted" +- + I check that my debtor account is correct +- + I check that the debtor account has 2 new lines with -180 and -70 as amount_currency columns and their credit columns are respectively 135 and 56 and currency is USD($). +- + I check that my Currency Difference entry is created with a credit of 34, amount currency as 0.0 +- + I check that my write-off entry is created with a credit of 15.00 and amount currency as 0.0 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + if move_line.amount_currency == -180: + assert move_line.credit == 135, "Debtor account has wrong entry." + if move_line.amount_currency == -70: + assert move_line.credit == 56.00, "Debtor account has wrong entry." + if move_line.credit == 34: + assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." + if move_line.credit == 15.00: + assert move_line.credit == 0.00, "Writeoff amount is wrong." +- + I check the residual amount of Invoice1, should be 20 in residual currency and 15 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" +- + I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" +- + I create the second voucher of payment with values, 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$ +- + !python {model: account.voucher}: | + import netsvc, time + vals = {} + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_EUR'), 45.0, 2, ttype='receipt', date=False) + vals = { + 'account_id': ref('account.cash'), + 'amount': 45.0, + 'company_id': ref('base.main_company'), + 'currency_id': ref('base.USD'), + 'journal_id': ref('bank_journal_USD'), + 'partner_id': ref('res_partner_michael0'), + 'period_id': ref('account.period_3'), + 'type': 'receipt', + 'date': time.strftime("%Y-04-01"), + 'payment_option': 'with_writeoff', + 'writeoff_acc_id': ref('account.a_expense'), + 'comment': 'Write Off', + 'name': 'Second payment', + } + if not res['value']['line_cr_ids']: + res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + for item in res['value']['line_cr_ids']: + if item['amount_unreconciled'] == 20: + item['amount'] = 20 + else: + item['amount'] = 30 + vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] + id = self.create(cr, uid, vals) + voucher_id = self.browse(cr, uid, id) + assert (voucher_id.state=='draft'), "Voucher is not in draft state" +- + I check that writeoff amount computed is -5 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.writeoff_amount == -5), "writeoff amount is not -5" +- + I check that currency rate difference is -8.50 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + curr_diff = voucher_id.currency_rate_difference + assert (voucher_id.currency_rate_difference == curr_diff), "currency rate difference is not -8.50" +- + I confirm the voucher +- + !python {model: account.voucher}: | + import netsvc + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) +- + I check that my voucher state is posted +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert voucher_id.state == 'posted', "Voucher state is not posted" +- + I check that my debtor account is correct +- + I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($). +- + I check that my Currency Difference entry is created with a credit of 8.5 +- + I check that my write-off entry is created with a debit of 4.75 and amount currency as 0.0 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + d + if move_line.amount_currency == -20: + assert move_line.credit == 15, "Debtor account has wrong entry." + if move_line.amount_currency == -30: + assert move_line.credit == 24, "Debtor account has wrong entry." + if move_line.credit == 8.5: + assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." + if move_line.credit == 5: + assert move_line.credit == 4.75, "Writeoff amount is wrong." +- + I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" +- + I check the residual amuont of invoice 2, should be 0 in residual currency and 0 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" \ No newline at end of file diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml new file mode 100644 index 00000000000..bce4feb5a3d --- /dev/null +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -0,0 +1,331 @@ +- + I create a currency rate for EUR for january of 1.000000 +- + !record {model: res.currency.rate, id: jan_eur}: + currency_id: base.EUR + name: !eval "'%s-01-01' %(datetime.now().year)" + rate: 1.000000 +- + I create a currency rate for EUR for february of 1.000000 +- + !record {model: res.currency.rate, id: feb_eur}: + currency_id: base.EUR + name: !eval "'%s-02-01' %(datetime.now().year)" + rate: 1.000000 +- + I create a currency rate for EUR for march of 1.000000 +- + !record {model: res.currency.rate, id: mar_eur}: + currency_id: base.EUR + name: !eval "'%s-03-01' %(datetime.now().year)" + rate: 1.000000 +- + I create a currency rate for EUR for april of 1.000000 +- + !record {model: res.currency.rate, id: apr_eur}: + currency_id: base.EUR + name: !eval "'%s-04-01' %(datetime.now().year)" + rate: 1.000000 +- + I create a bank journal with EUR as currency +- + !record {model: account.journal, id: bank_journal_EUR}: + name: Bank Journal(EUR) + code: BEUR + type: bank + analytic_journal_id: account.sit + sequence_id: account.sequence_bank_journal + default_debit_account_id: account.cash + default_credit_account_id: account.cash + currency: base.EUR + company_id: base.main_company + view_id: account.account_journal_bank_view +- + I assign accounts for 'Income Curreny Rate' and 'Expense Currency Rate' +- + !record {model: res.company, id: base.main_company}: + property_expense_currency_exchange: account.o_expense + property_income_currency_exchange: account.o_income +- + I create a new partner Peter Lawson. +- + !record {model: res.partner, id: res_partner_peter0}: + address: + - city: paris + country_id: base.fr + name: Peter + street: 1 rue Rockfeller + type: invoice + zip: '75016' + name: Mr.Peter Lawson +- + I create the first invoice on 1st January for 150 EUR +- + !record {model: account.invoice, id: account_first_invoice_jan_eur}: + account_id: account.a_recv + address_contact_id: base.res_partner_address_3000 + address_invoice_id: base.res_partner_address_3000 + company_id: base.main_company + currency_id: base.EUR + date_invoice: !eval "'%s-01-01' %(datetime.now().year)" + period_id: account.period_1 + invoice_line: + - account_id: account.a_sale + name: '[PC1] Basic PC' + price_unit: 150.0 + quantity: 1.0 + product_id: product.product_product_pc1 + uos_id: product.product_uom_unit + journal_id: account.sales_journal + partner_id: res_partner_peter0 + reference_type: none +- + I Validate invoice by clicking on Validate button +- + !workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_eur} +- + I check that first invoice move is correct +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur")) + assert invoice_id.move_id, "Move not created for open invoice" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.debit - move_line.credit == 150.00), "Invoice move is incorrect for debtors account" +- + I create the first invoice on 1st February for 80 EUR +- + !record {model: account.invoice, id: account_second_invoice_feb_eur}: + account_id: account.a_recv + address_contact_id: base.res_partner_address_3000 + address_invoice_id: base.res_partner_address_3000 + company_id: base.main_company + currency_id: base.EUR + date_invoice: !eval "'%s-02-01' %(datetime.now().year)" + period_id: account.period_1 + invoice_line: + - account_id: account.a_sale + name: '[PC1] Basic PC' + price_unit: 80.0 + quantity: 1.0 + product_id: product.product_product_pc1 + uos_id: product.product_uom_unit + journal_id: account.sales_journal + partner_id: res_partner_peter0 + reference_type: none +- + I Validate invoice by clicking on Validate button +- + !workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb_eur} +- + I check that second invoice move is correct +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur")) + assert invoice_id.move_id, "Move not created for open invoice" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.debit - move_line.credit == 80.00), "Invoice move is incorrect for debtors account" +- + I create the first voucher of payment with values 120 EUR, journal EUR, and fill amounts 100 for the invoice of 150 and 20 for the 80 EUR invoice. +- + !python {model: account.voucher}: | + import netsvc, time + vals = {} + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, 2, ttype='receipt', date=False) + vals = { + 'account_id': ref('account.cash'), + 'amount': 120.0, + 'company_id': ref('base.main_company'), + 'currency_id': ref('base.EUR'), + 'journal_id': ref('bank_journal_EUR'), + 'partner_id': ref('res_partner_peter0'), + 'period_id': ref('account.period_3'), + 'type': 'receipt', + 'date': time.strftime("%Y-03-01"), + 'payment_option': 'with_writeoff', + 'writeoff_acc_id': ref('account.a_expense'), + 'comment': 'Write Off', + 'name': 'First payment', + } + if not res['value']['line_cr_ids']: + res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + for item in res['value']['line_cr_ids']: + if item['amount_unreconciled'] == 150: + item['amount'] = 100 + else: + item['amount'] = 20 + vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] + id = self.create(cr, uid, vals) + voucher_id = self.browse(cr, uid, id) + assert (voucher_id.state=='draft'), "Voucher is not in draft state" +- + I check that writeoff amount computed is 0 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.writeoff_amount == 0), "writeoff amount is not 0" +- + I check that currency rate difference is 0.00 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.currency_rate_difference == 0.00), "currency rate difference is not 0.00" +- + I confirm the voucher +- + !python {model: account.voucher}: | + import netsvc + voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) +- + I check that my voucher state is posted +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert voucher_id.state == 'posted', "Voucher state is not posted" +- + I check that my debtor account is correct +- + I check that the debtor account has 2 new lines with 0.00 and 0.00 as amount_currency columns and their credit are 20 and 100 respectively +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + if move_line.credit == 20: + assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." + if move_line.credit == 100: + assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." +- + I check the residual amount of Invoice1 is 50 +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" +- + I check the residual amuont of Invoice2 is 60 +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" +- + I create the second voucher of payment and check to let open the debtor overpaid amount. +- + I create the second voucher of payment with Paid Amount as 120, journal EUR, and fill amount 50 for the residual amount 50 for the invoice of 150 and 70 for the residual amount 60 for the invoice of 80 +- + !python {model: account.voucher}: | + import netsvc, time + vals = {} + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.0, 2, ttype='receipt', date=False) + vals = { + 'account_id': ref('account.cash'), + 'amount': 120.0, + 'company_id': ref('base.main_company'), + 'currency_id': ref('base.EUR'), + 'journal_id': ref('bank_journal_EUR'), + 'partner_id': ref('res_partner_peter0'), + 'period_id': ref('account.period_3'), + 'type': 'receipt', + 'date': time.strftime("%Y-04-01"), + 'payment_option': 'with_writeoff', + 'writeoff_acc_id': ref('account.a_expense'), + 'comment': 'Write Off', + 'name': 'Second payment', + } + if not res['value']['line_cr_ids']: + res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + for item in res['value']['line_cr_ids']: + if item['amount_unreconciled'] == 50.00: + item['amount'] = 50.00 + elif item['amount_unreconciled'] == 60.00: + item['amount'] = 70.00 + vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] + id = self.create(cr, uid, vals) + voucher_id = self.browse(cr, uid, id) + assert (voucher_id.state=='draft'), "Voucher is not in draft state" +- + I check that writeoff amount computed is 0.00 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'),('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.writeoff_amount == 0.00), "writeoff amount is not 0" +- + I check that currency rate difference is 0.00 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + curr_diff = voucher_id.currency_rate_difference + assert (voucher_id.currency_rate_difference == curr_diff), "currency rate difference is not 0" +- + I confirm the voucher +- + !python {model: account.voucher}: | + import netsvc + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) +- + I check that my voucher state is posted +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert voucher_id.state == 'posted', "Voucher state is not posted" +- + I check that my debtor account is correct +- + I check that the debtor account has 2 new lines with 0.00 and 0.00 as amount_currency columns and their credit are 70 and 50 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + if move_line.credit == 70.00: + assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." + if move_line.credit == 50.00: + assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." +- + I check the residual amount of Invoice1 is 0 +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" +- + I check the residual amuont of Invoice2 is -10 +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" \ No newline at end of file diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml new file mode 100644 index 00000000000..2156ec813ff --- /dev/null +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -0,0 +1,181 @@ +- + I create a currency rate for CAD for january of 1.338800 +- + !record {model: res.currency.rate, id: jan_cad}: + currency_id: base.CAD + name: !eval "'%s-01-01' %(datetime.now().year)" + rate: 1.338800 +- + I create a currency rate for CAD for march of 0.500000 +- + !record {model: res.currency.rate, id: mar_cad}: + currency_id: base.CAD + name: !eval "'%s-03-01' %(datetime.now().year)" + rate: 0.500000 +- + I create a currency rate for CHF for january of 1.308600 +- + !record {model: res.currency.rate, id: jan_chf}: + currency_id: base.CHF + name: !eval "'%s-01-01' %(datetime.now().year)" + rate: 1.308600 +- + I create a bank journal with CHF as currency +- + !record {model: account.journal, id: bank_journal_CHF}: + name: Bank Journal(CHF) + code: BCHF + type: bank + analytic_journal_id: account.sit + sequence_id: account.sequence_bank_journal + default_debit_account_id: account.cash + default_credit_account_id: account.cash + currency: base.CHF + company_id: base.main_company + view_id: account.account_journal_bank_view +- + I assign accounts for 'Income Curreny Rate' and 'Expense Currency Rate' +- + !record {model: res.company, id: base.main_company}: + property_expense_currency_exchange: account.o_expense + property_income_currency_exchange: account.o_income +- + I create a new partner John Armani. +- + !record {model: res.partner, id: res_partner_john0}: + address: + - city: paris + country_id: base.fr + name: John + street: 1 rue Rockfeller + type: invoice + zip: '75016' + name: Mr.John Armani +- + I create the first invoice on 1st January for 200 CAD +- + !record {model: account.invoice, id: account_first_invoice_jan_cad}: + account_id: account.a_recv + address_contact_id: base.res_partner_address_3000 + address_invoice_id: base.res_partner_address_3000 + company_id: base.main_company + currency_id: base.CAD + date_invoice: !eval "'%s-01-01' %(datetime.now().year)" + period_id: account.period_1 + invoice_line: + - account_id: account.a_sale + name: '[PC1] Basic PC' + price_unit: 200.0 + quantity: 1.0 + product_id: product.product_product_pc1 + uos_id: product.product_uom_unit + journal_id: account.sales_journal + partner_id: res_partner_john0 + reference_type: none +- + I Validate invoice by clicking on Validate button +- + !workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_cad} +- + I check that accounting move for first invoice is correct +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_cad")) + assert invoice_id.move_id, "Move not created for open invoice" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.debit - move_line.credit == 149.39), "Invoice move is incorrect for debtors account" +- + I create the first voucher of payment with Paid amount as 300, journal CHF, and fill amounts 200 for the invoice of 200. +- + !python {model: account.voucher}: | + import netsvc, time + vals = {} + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_john0"), ref('bank_journal_CHF'), 300.0, 2, ttype='receipt', date=False) + vals = { + 'account_id': ref('account.cash'), + 'amount': 120.0, + 'company_id': ref('base.main_company'), + 'currency_id': ref('base.CHF'), + 'journal_id': ref('bank_journal_CHF'), + 'partner_id': ref('res_partner_john0'), + 'period_id': ref('account.period_3'), + 'type': 'receipt', + 'date': time.strftime("%Y-03-01"), + 'payment_option': 'with_writeoff', + 'writeoff_acc_id': ref('account.a_expense'), + 'comment': 'Write Off', + 'name': 'First payment', + } + if not res['value']['line_cr_ids']: + res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + for item in res['value']['line_cr_ids']: + if item['amount_unreconciled'] == 200: + item['amount'] = 200 + vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] + id = self.create(cr, uid, vals) + voucher_id = self.browse(cr, uid, id) + assert (voucher_id.state=='draft'), "Voucher is not in draft state" +- + I check that writeoff amount computed is 175 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.writeoff_amount == 175), "writeoff amount is not 175" +- + I check that currency rate difference is 49.39 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.currency_rate_difference == 49.39), "currency rate difference is not 0.00" +- + I confirm the voucher +- + !python {model: account.voucher}: | + import netsvc + voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) +- + I check that my voucher state is posted +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert voucher_id.state == 'posted', "Voucher state is not posted" +- + I check that my debtor account is correct +- + I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($). +- + I check that my Currency Difference entry is created with a credit of 8.5 +- + I check that my write-off entry is created with a debit of 4.75 and amount currency as 0.0 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment')]) + voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + if move_line.amount_currency == -200: + assert move_line.credit == 149.39, "Debtor account has wrong entry." + if move_line.credit == 49.39: + assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." + if move_line.credit == -140.00: + assert move_line.credit == -175, "Writeoff amount is wrong." +- + I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + residual_curr = move_line.amount_residual_currency + residual = move_line.amount_residual + assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" +- \ No newline at end of file From 97e4c6efb0457103ba9495890eca6ffcdbebe945 Mon Sep 17 00:00:00 2001 From: "psi(OpenERP),mtr(OpenERP)" <> Date: Tue, 2 Aug 2011 11:49:50 +0530 Subject: [PATCH 019/394] [ADD] account_voucher: added yaml for multi-currency i.e. USD-USD bzr revid: mtr@mtr-20110802061950-t0eah4pcj1vs1yp6 --- addons/account_voucher/__openerp__.py | 1 + addons/account_voucher/test/case1_usd_usd.yml | 345 ++++++++++++++++++ 2 files changed, 346 insertions(+) create mode 100755 addons/account_voucher/test/case1_usd_usd.yml diff --git a/addons/account_voucher/__openerp__.py b/addons/account_voucher/__openerp__.py index d4331a81923..dc7747fb593 100644 --- a/addons/account_voucher/__openerp__.py +++ b/addons/account_voucher/__openerp__.py @@ -60,6 +60,7 @@ Account Voucher module includes all the basic requirements of Voucher Entries fo "test/sales_receipt.yml", "test/sales_payment.yml", "test/account_voucher_report.yml", + "test/case1_usd_usd.yml", "test/case2_usd_eur.yml", "test/case3_eur_eur.yml", "test/case4_cad_chf.yml", diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml new file mode 100755 index 00000000000..7751849120e --- /dev/null +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -0,0 +1,345 @@ +- + I create a currency rate for USD for january of 1.333333 +- + !record {model: res.currency.rate, id: jan_usd}: + currency_id: base.USD + name: !eval "'%s-01-01' %(datetime.now().year)" + rate: 1.333333 + +- + I create a currency rate for USD for february of 1.250000 +- + !record {model: res.currency.rate, id: feb_usd}: + currency_id: base.USD + name: !eval "'%s-02-01' %(datetime.now().year)" + rate: 1.250000 + +- + I create a currency rate for USD for march of 1.111111 +- + !record {model: res.currency.rate, id: mar_usd}: + currency_id: base.USD + name: !eval "'%s-03-01' %(datetime.now().year)" + rate: 1.111111 + +- + I create a currency rate for USD for april of 1.052632 +- + !record {model: res.currency.rate, id: apr_usd}: + currency_id: base.USD + name: !eval "'%s-04-01' %(datetime.now().year)" + rate: 1.052632 + +- + I create a bank journal with USD as currency +- + !record {model: account.journal, id: bank_journal_USD}: + name: Bank Journal(USD) + code: BUSD + type: bank + analytic_journal_id: account.sit + sequence_id: account.sequence_bank_journal + default_debit_account_id: account.cash + default_credit_account_id: account.cash + currency: base.USD + company_id: base.main_company + view_id: account.account_journal_bank_view + +- + I set up some accounts for currency rate expense/income in my company +- + !record {model: res.company, id: base.main_company}: + property_expense_currency_exchange: account.o_expense + property_income_currency_exchange: account.o_income +- + I'm creating new partner "Mr. strauss". +- + !record {model: res.partner, id: res_partner_strauss0}: + address: + - city: paris + country_id: base.fr + name: Mark Strauss + street: 1 rue Rockfeller + type: invoice + zip: '75016' + name: Mr. Mark Strauss +- + I create the first invoice on 1st January for 200 USD +- + !record {model: account.invoice, id: account_invoice_jan}: + account_id: account.a_recv + address_contact_id: base.res_partner_address_3000 + address_invoice_id: base.res_partner_address_3000 + company_id: base.main_company + currency_id: base.USD + date_invoice: !eval "'%s-01-01' %(datetime.now().year)" + period_id: account.period_1 + invoice_line: + - account_id: account.a_sale + name: '[PC1] Basic PC' + price_unit: 200.0 + quantity: 1.0 + product_id: product.product_product_pc1 + uos_id: product.product_uom_unit + journal_id: account.sales_journal + partner_id: res_partner_strauss0 + reference_type: none +- + I Validate invoice by clicking on Validate button +- + !workflow {model: account.invoice, action: invoice_open, ref: account_invoice_jan} +- + I check that first invoice move is correct for debtor account (debit - credit == 150.0) +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_invoice_jan")) + assert invoice_id.move_id, "Move not created for open invoice" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.debit - move_line.credit == 150.0), "Invoice move is correct for debtors account" +- + I create the second invoice on 1st February for 100 USD +- + !record {model: account.invoice, id: account_invoice_feb}: + account_id: account.a_recv + address_contact_id: base.res_partner_address_3000 + address_invoice_id: base.res_partner_address_3000 + company_id: base.main_company + currency_id: base.USD + date_invoice: !eval "'%s-02-01' %(datetime.now().year)" + period_id: account.period_2 + invoice_line: + - account_id: account.a_sale + name: '[PC1] Basic PC' + price_unit: 100.0 + quantity: 1.0 + product_id: product.product_product_pc1 + uos_id: product.product_uom_unit + journal_id: account.sales_journal + partner_id: res_partner_strauss0 + reference_type: none +- + I Validate invoice by clicking on Validate button +- + !workflow {model: account.invoice, action: invoice_open, ref: account_invoice_feb} +- + I check that second invoice move is correct for debtor account (debit - credit == 80) +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_invoice_feb")) + assert invoice_id.move_id, "Move not created for open invoice" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.debit - move_line.credit == 80), "Invoice move is correct for debtors account" + +- + I create the first voucher of payment + +- + !python {model: account.voucher}: | + import netsvc, time + vals = {} + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 240.0, 2, ttype='receipt', date=False) + vals = { + 'account_id': ref('account.cash'), + 'amount': 240.0, + 'company_id': ref('base.main_company'), + 'currency_id': ref('base.USD'), + 'journal_id': ref('bank_journal_USD'), + 'partner_id': ref('res_partner_strauss0'), + 'period_id': ref('account.period_3'), + 'type': 'receipt', + 'date': time.strftime("%Y-03-01"), + 'payment_option': 'with_writeoff', + 'writeoff_acc_id': ref('account.a_expense'), + 'comment': 'Write Off', + 'name': 'First payment', + } + if not res['value']['line_cr_ids']: + res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + for item in res['value']['line_cr_ids']: + if item['amount_unreconciled'] == 200: + item['amount'] = 180 + else: + item['amount'] = 70 + vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] + id = self.create(cr, uid, vals) + voucher_id = self.browse(cr, uid, id) + assert (voucher_id.state=='draft'), "Voucher is not in draft state" +- + I check that writeoff amount computed is -10 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.writeoff_amount == -10), "writeoff amount is not -10" +- + I check that currency rate difference is -34 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.currency_rate_difference == -34), "currency rate difference is not -34" +- + I confirm the voucher +- + !python {model: account.voucher}: | + import netsvc + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) +- + I check that my voucher is valid +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert voucher_id.state == 'posted', "Voucher is not balanced" + +- + I check that my debtor account is correct +- + I check that the debtor account has 2 new lines with -180 and -70 as amount_currency columns and that their credit columns are respectively 135 and 56 +- + I check that my currency rate difference is correct. 34 in credit with no amount_currency +- + I check that my write-off is correct. 9 debit and 10 amount_currency +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + if move_line.amount_currency == -180: + assert move_line.credit == 135.00, "Debtor account has wrong entry." + if move_line.amount_currency == -70: + assert move_line.credit == 56.00, "Debtor account has wrong entry." + if move_line.credit == 34.00: + assert move_line.amount_currency == 0, "Incorrect currency rate difference." + if move_line.amount_currency == 10: + assert move_line.debit == 9.0, "Writeoff amount is wrong." +- + I check the residual amount of Invoice1, should be 20 in amount_currency and 15 in company currency +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_invoice_jan")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.amount_residual_currency == 20.0 and move_line.amount_residual == 15.0) , "Residual amount is not correct for first Invoice" +- + I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_invoice_feb")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.amount_residual_currency == 30.0 and move_line.amount_residual == 24.0) , "Residual amount is not correct for first Invoice" +- + I create the second voucher of payment with Paid Amount as 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$ +- + !python {model: account.voucher}: | + import netsvc, time + vals = {} + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 45.0, 2, ttype='receipt', date=False) + vals = { + 'account_id': ref('account.cash'), + 'amount': 45.0, + 'company_id': ref('base.main_company'), + 'currency_id': ref('base.USD'), + 'journal_id': ref('bank_journal_USD'), + 'partner_id': ref('res_partner_strauss0'), + 'period_id': ref('account.period_3'), + 'type': 'receipt', + 'date': time.strftime("%Y-04-01"), + 'payment_option': 'with_writeoff', + 'writeoff_acc_id': ref('account.a_expense'), + 'comment': 'Write Off', + 'name': 'Second payment', + } + if not res['value']['line_cr_ids']: + res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] + for item in res['value']['line_cr_ids']: + if item['amount_unreconciled'] == 20: + item['amount'] = 20 + else: + item['amount'] = 30 + vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] + id = self.create(cr, uid, vals) + voucher_id = self.browse(cr, uid, id) + assert (voucher_id.state=='draft'), "Voucher is not in draft state" +- + I check that writeoff amount computed is -5 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert (voucher_id.writeoff_amount == -5), "writeoff amount is not -5" +- + I check that currency rate difference is -8.50 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + curr_diff = voucher_id.currency_rate_difference + assert (voucher_id.currency_rate_difference == curr_diff), "currency rate difference is not -8.50" +- + I confirm the voucher +- + !python {model: account.voucher}: | + import netsvc + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + wf_service = netsvc.LocalService("workflow") + wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) +- + I check that my voucher state is posted +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + assert voucher_id.state == 'posted', "Voucher state is not posted" +- + I check that my debtor account is correct +- + I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($). +- + I check that my Currency Difference entry is created with a credit of 8.5 +- + I check that my write-off entry is created with a debit of 4.75 and amount currency as 0.0 +- + !python {model: account.voucher}: | + voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) + voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + if move_line.amount_currency == -20: + assert move_line.credit == 15, "Debtor account has wrong entry." + if move_line.amount_currency == -30: + assert move_line.credit == 24, "Debtor account has wrong entry." + if move_line.credit == 8.5: + assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." + if move_line.credit == 5: + assert move_line.credit == 4.75, "Writeoff amount is wrong." +- + I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_invoice_jan")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for first Invoice" +- + I check the residual amuont of Invoice2, should be 0 in residual currency and 0 in amount_residual +- + !python {model: account.invoice}: | + invoice_id = self.browse(cr, uid, ref("account_invoice_feb")) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) + move_line = move_line_obj.browse(cr, uid, move_lines[0]) + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for second Invoice" \ No newline at end of file From 437c84191e4b16681177f62cb6f5ac1c47ca1ece Mon Sep 17 00:00:00 2001 From: mtr Date: Tue, 2 Aug 2011 12:23:44 +0530 Subject: [PATCH 020/394] [IMP] account_voucher: minor changes in yaml bzr revid: mtr@mtr-20110802065344-ewaqf3etl687gjlg --- addons/account_voucher/test/case2_usd_eur.yml | 18 +++++------------- addons/account_voucher/test/case3_eur_eur.yml | 16 ++++------------ addons/account_voucher/test/case4_cad_chf.yml | 6 ++---- 3 files changed, 11 insertions(+), 29 deletions(-) diff --git a/addons/account_voucher/test/case2_usd_eur.yml b/addons/account_voucher/test/case2_usd_eur.yml index 39b0eb0edbb..25d69a95bb1 100644 --- a/addons/account_voucher/test/case2_usd_eur.yml +++ b/addons/account_voucher/test/case2_usd_eur.yml @@ -214,7 +214,7 @@ I check that my write-off entry is created with a credit of 15.00 and amount currency as 0.0 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -235,9 +235,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 20.0 and move_line.amount_residual == 15) , "Residual amount is not correct for first Invoice" - I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual - @@ -246,9 +244,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" + assert (move_line.amount_residual_currency == 30 and move_line.amount_residual == 24) , "Residual amount is not correct for second Invoice" - I create the second voucher of payment with values, 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$ - @@ -344,9 +340,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for first Invoice" - I check the residual amuont of invoice 2, should be 0 in residual currency and 0 in amount_residual - @@ -355,6 +349,4 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" \ No newline at end of file + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for second Invoice" \ No newline at end of file diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml index bce4feb5a3d..d1b5de784a9 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -213,9 +213,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 50.0 and move_line.amount_residual == 50.0) , "Residual amount is not correct for first Invoice" - I check the residual amuont of Invoice2 is 60 - @@ -224,9 +222,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" + assert (move_line.amount_residual_currency == 60.0 and move_line.amount_residual == 60.0) , "Residual amount is not correct for second Invoice" - I create the second voucher of payment and check to let open the debtor overpaid amount. - @@ -315,9 +311,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 0 and move_line.amount_residual == 0) , "Residual amount is not correct for first Invoice" - I check the residual amuont of Invoice2 is -10 - @@ -326,6 +320,4 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for second Invoice" \ No newline at end of file + assert (move_line.amount_residual_currency == -10.0 and move_line.amount_residual == -10.0) , "Residual amount is not correct for second Invoice" \ No newline at end of file diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml index 2156ec813ff..6ba92f6c8f3 100644 --- a/addons/account_voucher/test/case4_cad_chf.yml +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -168,14 +168,12 @@ if move_line.credit == -140.00: assert move_line.credit == -175, "Writeoff amount is wrong." - - I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual + I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - residual_curr = move_line.amount_residual_currency - residual = move_line.amount_residual - assert (move_line.amount_residual_currency == residual_curr and move_line.amount_residual == residual) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for first Invoice" - \ No newline at end of file From dde6191c15e0ffe1f0ecaedbf1bfaae5592ffa2d Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 2 Aug 2011 15:06:59 +0530 Subject: [PATCH 021/394] [ADD] add new kanban view. bzr revid: ysa@tinyerp.com-20110802093659-btfev13seawo2d46 --- openerp/addons/base/ir/ir_ui_view.py | 1 + openerp/addons/base/rng/view.rng | 39 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index ee23a2f52f1..c112d799342 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -73,6 +73,7 @@ class view(osv.osv): ('calendar', 'Calendar'), ('diagram','Diagram'), ('gantt', 'Gantt'), + ('kanban', 'Kanban'), ('search','Search')), 'View Type', required=True, select=True), 'arch': fields.text('View Architecture', required=True), 'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade', select=True), diff --git a/openerp/addons/base/rng/view.rng b/openerp/addons/base/rng/view.rng index 943b533e2e3..d4ef442e2f8 100644 --- a/openerp/addons/base/rng/view.rng +++ b/openerp/addons/base/rng/view.rng @@ -119,6 +119,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -469,6 +506,7 @@ + @@ -628,6 +666,7 @@ + From 877f9c70a8e754469b786517b85149e6f31289a5 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Tue, 2 Aug 2011 17:41:30 +0530 Subject: [PATCH 022/394] [IMP] Remove colors tag in kanban view. bzr revid: ysa@tinyerp.com-20110802121130-l33fu0c279xztwgl --- openerp/addons/base/rng/view.rng | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/openerp/addons/base/rng/view.rng b/openerp/addons/base/rng/view.rng index d4ef442e2f8..f3c8b15415c 100644 --- a/openerp/addons/base/rng/view.rng +++ b/openerp/addons/base/rng/view.rng @@ -123,29 +123,12 @@ - - - - - - - - - - - - - - - - - From efe8967203af580c69fa3cda873ed592ea993021 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 3 Aug 2011 10:55:08 +0530 Subject: [PATCH 023/394] [IMP] Improve header and css in kanban view. bzr revid: ysa@tinyerp.com-20110803052508-ru7wnpjhfgohxb9u --- addons/base_kanban/static/src/css/kanban.css | 12 +++--------- addons/base_kanban/static/src/js/kanban.js | 1 - addons/base_kanban/static/src/xml/base_kanban.xml | 4 ++-- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/addons/base_kanban/static/src/css/kanban.css b/addons/base_kanban/static/src/css/kanban.css index 6e6a8bebcef..d7344ee1e55 100644 --- a/addons/base_kanban/static/src/css/kanban.css +++ b/addons/base_kanban/static/src/css/kanban.css @@ -1,16 +1,14 @@ .openerp .oe_column { width: 100%; float: left; - padding-bottom: 100px; } .record { - width: 100%; - margin: 0 1em 1em 0; + margin: 0 0 0.5em 0; } .record-header { - margin: 0.3em; + margin: 0.05em; padding-bottom: 4px; padding-left: 0.2em; } @@ -19,10 +17,6 @@ float: right; } -.record-content { - padding: 0.4em; -} - .ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; @@ -33,7 +27,7 @@ visibility: hidden; } -.openerp .oe_column_heading{ +.openerp .oe_column_heading { color: #000000; font-size: 1.5em; font-weight: bold; diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index e03d89c7cdf..cc6fcfae79a 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -59,7 +59,6 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ }); this.$element.find('.record .ui-icon-closethick').click(this.on_close_action); this.$element.find(".oe_column").disableSelection(); - this.$element.find(".ui.item").css("background-color","red"); self.$element.find( ".oe_column" ).css("width", 99 / datas.length +"%"); }, diff --git a/addons/base_kanban/static/src/xml/base_kanban.xml b/addons/base_kanban/static/src/xml/base_kanban.xml index a552a93efa3..2c4fde2663c 100644 --- a/addons/base_kanban/static/src/xml/base_kanban.xml +++ b/addons/base_kanban/static/src/xml/base_kanban.xml @@ -5,11 +5,11 @@ -
+
()
-
+
From 1a3ac2facc5fd1304adeeccae4dffa02e0f4ff23 Mon Sep 17 00:00:00 2001 From: mtr Date: Wed, 3 Aug 2011 15:36:33 +0530 Subject: [PATCH 024/394] [IMP] account_voucher: improved string/sentence and code in yml bzr revid: mtr@mtr-20110803100633-xsh3olpk5bhc00at --- addons/account_voucher/test/case1_usd_usd.yml | 57 +++++++++++-------- addons/account_voucher/test/case2_usd_eur.yml | 57 ++++++++++--------- addons/account_voucher/test/case3_eur_eur.yml | 38 +++++++------ addons/account_voucher/test/case4_cad_chf.yml | 44 ++++++++------ 4 files changed, 112 insertions(+), 84 deletions(-) diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml index 7751849120e..a4e59ccc4b3 100755 --- a/addons/account_voucher/test/case1_usd_usd.yml +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -52,7 +52,7 @@ property_expense_currency_exchange: account.o_expense property_income_currency_exchange: account.o_income - - I'm creating new partner "Mr. strauss". + I create new partner Mark Strauss. - !record {model: res.partner, id: res_partner_strauss0}: address: @@ -97,7 +97,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - assert (move_line.debit - move_line.credit == 150.0), "Invoice move is correct for debtors account" + assert (move_line.debit - move_line.credit == 150.0), "Invoice move is not correct for debtors account" - I create the second invoice on 1st February for 100 USD - @@ -132,7 +132,7 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - assert (move_line.debit - move_line.credit == 80), "Invoice move is correct for debtors account" + assert (move_line.debit - move_line.credit == 80), "Invoice move is not correct for debtors account" - I create the first voucher of payment @@ -191,13 +191,15 @@ wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - - I check that my voucher is valid + I check that the move of my first voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert voucher_id.state == 'posted', "Voucher is not balanced" - + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + assert move_line.state == 'valid', "Voucher move is not valid" - I check that my debtor account is correct - @@ -215,11 +217,11 @@ for move_line in move_line_obj.browse(cr, uid, move_lines): if move_line.amount_currency == -180: assert move_line.credit == 135.00, "Debtor account has wrong entry." - if move_line.amount_currency == -70: + elif move_line.amount_currency == -70: assert move_line.credit == 56.00, "Debtor account has wrong entry." - if move_line.credit == 34.00: + elif move_line.credit == 34.00: assert move_line.amount_currency == 0, "Incorrect currency rate difference." - if move_line.amount_currency == 10: + elif move_line.amount_currency == 10: assert move_line.debit == 9.0, "Writeoff amount is wrong." - I check the residual amount of Invoice1, should be 20 in amount_currency and 15 in company currency @@ -231,7 +233,7 @@ move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.amount_residual_currency == 20.0 and move_line.amount_residual == 15.0) , "Residual amount is not correct for first Invoice" - - I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual + I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_invoice_feb")) @@ -240,7 +242,9 @@ move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.amount_residual_currency == 30.0 and move_line.amount_residual == 24.0) , "Residual amount is not correct for first Invoice" - - I create the second voucher of payment with Paid Amount as 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$ + I create the second voucher of payment + + - !python {model: account.voucher}: | import netsvc, time @@ -296,20 +300,23 @@ wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - - I check that my voucher state is posted + I check that the move of my second voucher is valid - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert voucher_id.state == 'posted', "Voucher state is not posted" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + assert move_line.state == 'valid', "Voucher move is not valid" - I check that my debtor account is correct - - I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($). + I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24. - - I check that my Currency Difference entry is created with a credit of 8.5 + I check that my currency rate difference is correct. 8.5 in credit with no amount_currency - - I check that my write-off entry is created with a debit of 4.75 and amount currency as 0.0 + I check that my writeoff is correct. 4.75 debit and 5 amount_currency - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) @@ -319,27 +326,27 @@ for move_line in move_line_obj.browse(cr, uid, move_lines): if move_line.amount_currency == -20: assert move_line.credit == 15, "Debtor account has wrong entry." - if move_line.amount_currency == -30: + elif move_line.amount_currency == -30: assert move_line.credit == 24, "Debtor account has wrong entry." - if move_line.credit == 8.5: + elif move_line.credit == 8.5: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." - if move_line.credit == 5: - assert move_line.credit == 4.75, "Writeoff amount is wrong." + elif move_line.amount_currency == 5: + assert move_line.debit == 4.75, "Writeoff amount is wrong." - - I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual + I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual and paid - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_invoice_jan")) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice" - - I check the residual amuont of Invoice2, should be 0 in residual currency and 0 in amount_residual + I check the residual amuont of Invoice2, should be 0 in residual currency and 0 in amount_residual and paid - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_invoice_feb")) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for second Invoice" \ No newline at end of file + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for second Invoice" \ No newline at end of file diff --git a/addons/account_voucher/test/case2_usd_eur.yml b/addons/account_voucher/test/case2_usd_eur.yml index 25d69a95bb1..35e0bf86231 100644 --- a/addons/account_voucher/test/case2_usd_eur.yml +++ b/addons/account_voucher/test/case2_usd_eur.yml @@ -55,7 +55,7 @@ company_id: base.main_company view_id: account.account_journal_bank_view - - I assign accounts for 'Income Curreny Rate' and 'Expense Currency Rate' + I set up some accounts for currency rate expense/income in my company - !record {model: res.company, id: base.main_company}: property_expense_currency_exchange: account.o_expense @@ -98,7 +98,7 @@ - !workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan} - - I check that first invoice move is correct + I check that first invoice move is correct for debtor account(debit - credit == 150) - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) @@ -143,7 +143,8 @@ move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.debit - move_line.credit == 80), "Invoice move is incorrect for debtors account" - - I create the first voucher of payment with values 240 EUR, journal EUR, and fill amount 180 for the invoice of 200$ and 70 for the 100$ invoice. + I create the first voucher of payment + - !python {model: account.voucher}: | import netsvc, time @@ -198,20 +199,23 @@ wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - - I check that my voucher state is posted + I check that the move of my voucher is valid - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert voucher_id.state == 'posted', "Voucher state is not posted" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + assert move_line.state == 'valid', "Voucher move is not valid" - I check that my debtor account is correct - - I check that the debtor account has 2 new lines with -180 and -70 as amount_currency columns and their credit columns are respectively 135 and 56 and currency is USD($). + I check that the debtor account has 2 new lines with -180 and -70 in amount_currency columns and their credit columns are respectively 135 and 56 and currency is USD($). - - I check that my Currency Difference entry is created with a credit of 34, amount currency as 0.0 + I check that my currency rate difference is correct. 34 in credit with no amount_currency - - I check that my write-off entry is created with a credit of 15.00 and amount currency as 0.0 + I check that my writeoff is correct. 15 in credit with no amount_currency - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) @@ -221,12 +225,12 @@ for move_line in move_line_obj.browse(cr, uid, move_lines): if move_line.amount_currency == -180: assert move_line.credit == 135, "Debtor account has wrong entry." - if move_line.amount_currency == -70: + elif move_line.amount_currency == -70: assert move_line.credit == 56.00, "Debtor account has wrong entry." - if move_line.credit == 34: + elif move_line.credit == 34: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." - if move_line.credit == 15.00: - assert move_line.credit == 0.00, "Writeoff amount is wrong." + elif move_line.credit == 15.00: + assert move_line.amount_currency == 0.00, "Writeoff amount is wrong." - I check the residual amount of Invoice1, should be 20 in residual currency and 15 in amount_residual - @@ -246,7 +250,8 @@ move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.amount_residual_currency == 30 and move_line.amount_residual == 24) , "Residual amount is not correct for second Invoice" - - I create the second voucher of payment with values, 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$ + I create the second voucher of payment + - !python {model: account.voucher}: | import netsvc, time @@ -291,8 +296,7 @@ !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - curr_diff = voucher_id.currency_rate_difference - assert (voucher_id.currency_rate_difference == curr_diff), "currency rate difference is not -8.50" + assert (voucher_id.currency_rate_difference == -8.50), "currency rate difference is not -8.50" - I confirm the voucher - @@ -311,11 +315,11 @@ - I check that my debtor account is correct - - I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($). + I check that the debtor account has 2 new lines with -20 and -30 in amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($). - - I check that my Currency Difference entry is created with a credit of 8.5 + I check that my currency rate difference is correct. 8.50 in credit with no amount_currency - - I check that my write-off entry is created with a debit of 4.75 and amount currency as 0.0 + I check that my writeoff is correct. 4.75 in debit and 5 in amount_currency - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) @@ -323,30 +327,29 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) for move_line in move_line_obj.browse(cr, uid, move_lines): - d if move_line.amount_currency == -20: assert move_line.credit == 15, "Debtor account has wrong entry." - if move_line.amount_currency == -30: + elif move_line.amount_currency == -30: assert move_line.credit == 24, "Debtor account has wrong entry." - if move_line.credit == 8.5: + elif move_line.credit == 8.5: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." - if move_line.credit == 5: - assert move_line.credit == 4.75, "Writeoff amount is wrong." + elif move_line.amount_currency == 5: + assert move_line.debit == 4.75, "Writeoff amount is wrong." - - I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual + I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual and paid - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice" - - I check the residual amuont of invoice 2, should be 0 in residual currency and 0 in amount_residual + I check the residual amuont of invoice 2, should be 0 in residual currency and 0 in amount_residual and paid - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb")) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for second Invoice" \ No newline at end of file + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for second Invoice" \ No newline at end of file diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml index d1b5de784a9..5779028641e 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -41,7 +41,7 @@ company_id: base.main_company view_id: account.account_journal_bank_view - - I assign accounts for 'Income Curreny Rate' and 'Expense Currency Rate' + I set up some accounts for currency rate expense/income in my company - !record {model: res.company, id: base.main_company}: property_expense_currency_exchange: account.o_expense @@ -84,7 +84,7 @@ - !workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_eur} - - I check that first invoice move is correct + I check that first invoice move is correct for debtor account(debit - credit == 150) - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur")) @@ -94,7 +94,7 @@ move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.debit - move_line.credit == 150.00), "Invoice move is incorrect for debtors account" - - I create the first invoice on 1st February for 80 EUR + I create the second invoice on 1st February for 80 EUR - !record {model: account.invoice, id: account_second_invoice_feb_eur}: account_id: account.a_recv @@ -119,7 +119,7 @@ - !workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb_eur} - - I check that second invoice move is correct + I check that second invoice move is correct for debtor account (debit - credit == 80) - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur")) @@ -129,7 +129,8 @@ move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.debit - move_line.credit == 80.00), "Invoice move is incorrect for debtors account" - - I create the first voucher of payment with values 120 EUR, journal EUR, and fill amounts 100 for the invoice of 150 and 20 for the 80 EUR invoice. + I create the first voucher of payment + - !python {model: account.voucher}: | import netsvc, time @@ -162,7 +163,7 @@ voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - - I check that writeoff amount computed is 0 + I check that writeoff amount computed is 0.00 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) @@ -184,16 +185,19 @@ wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - - I check that my voucher state is posted + I check that the move of my first voucher is valid - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert voucher_id.state == 'posted', "Voucher state is not posted" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + assert move_line.state == 'valid', "Voucher move is not valid" - I check that my debtor account is correct - - I check that the debtor account has 2 new lines with 0.00 and 0.00 as amount_currency columns and their credit are 20 and 100 respectively + I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 20 and 100 respectively - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) @@ -203,7 +207,7 @@ for move_line in move_line_obj.browse(cr, uid, move_lines): if move_line.credit == 20: assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." - if move_line.credit == 100: + elif move_line.credit == 100: assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." - I check the residual amount of Invoice1 is 50 @@ -225,8 +229,7 @@ assert (move_line.amount_residual_currency == 60.0 and move_line.amount_residual == 60.0) , "Residual amount is not correct for second Invoice" - I create the second voucher of payment and check to let open the debtor overpaid amount. -- - I create the second voucher of payment with Paid Amount as 120, journal EUR, and fill amount 50 for the residual amount 50 for the invoice of 150 and 70 for the residual amount 60 for the invoice of 80 + - !python {model: account.voucher}: | import netsvc, time @@ -282,16 +285,19 @@ wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - - I check that my voucher state is posted + I check that the move of my second voucher is valid - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert voucher_id.state == 'posted', "Voucher state is not posted" + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + assert move_line.state == 'valid', "Voucher move is not valid" - I check that my debtor account is correct - - I check that the debtor account has 2 new lines with 0.00 and 0.00 as amount_currency columns and their credit are 70 and 50 + I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 70 and 50 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) @@ -301,7 +307,7 @@ for move_line in move_line_obj.browse(cr, uid, move_lines): if move_line.credit == 70.00: assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." - if move_line.credit == 50.00: + elif move_line.credit == 50.00: assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." - I check the residual amount of Invoice1 is 0 diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml index 6ba92f6c8f3..3d989eaee7a 100644 --- a/addons/account_voucher/test/case4_cad_chf.yml +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -6,7 +6,7 @@ name: !eval "'%s-01-01' %(datetime.now().year)" rate: 1.338800 - - I create a currency rate for CAD for march of 0.500000 + I create a currency rate for CAD for march of 2.000000 - !record {model: res.currency.rate, id: mar_cad}: currency_id: base.CAD @@ -19,6 +19,13 @@ currency_id: base.CHF name: !eval "'%s-01-01' %(datetime.now().year)" rate: 1.308600 +- + I create a currency rate for CHF for march of 1.250000 +- + !record {model: res.currency.rate, id: jan_chf}: + currency_id: base.CHF + name: !eval "'%s-01-01' %(datetime.now().year)" + rate: 1.250000 - I create a bank journal with CHF as currency - @@ -34,7 +41,7 @@ company_id: base.main_company view_id: account.account_journal_bank_view - - I assign accounts for 'Income Curreny Rate' and 'Expense Currency Rate' + I set up some accounts for currency rate expense/income in my company - !record {model: res.company, id: base.main_company}: property_expense_currency_exchange: account.o_expense @@ -77,7 +84,7 @@ - !workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_cad} - - I check that accounting move for first invoice is correct + I check that first invoice move is correct for debtor account (debit - credit == 149.39) - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_cad")) @@ -87,7 +94,8 @@ move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.debit - move_line.credit == 149.39), "Invoice move is incorrect for debtors account" - - I create the first voucher of payment with Paid amount as 300, journal CHF, and fill amounts 200 for the invoice of 200. + I create the first voucher of payment + - !python {model: account.voucher}: | import netsvc, time @@ -95,7 +103,7 @@ res = self.onchange_partner_id(cr, uid, [], ref("res_partner_john0"), ref('bank_journal_CHF'), 300.0, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), - 'amount': 120.0, + 'amount': 300.0, 'company_id': ref('base.main_company'), 'currency_id': ref('base.CHF'), 'journal_id': ref('bank_journal_CHF'), @@ -130,7 +138,7 @@ !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment')]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.currency_rate_difference == 49.39), "currency rate difference is not 0.00" + assert (voucher_id.currency_rate_difference == 49.39), "currency rate difference is not 49.39" - I confirm the voucher - @@ -140,40 +148,44 @@ wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - - I check that my voucher state is posted + I check that the move of my voucher is valid - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment')]) voucher_id = self.browse(cr, uid, voucher[0]) + move_line_obj = self.pool.get('account.move.line') + move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) + for move_line in move_line_obj.browse(cr, uid, move_lines): + assert move_line.state == 'valid', "Voucher move is not valid" assert voucher_id.state == 'posted', "Voucher state is not posted" - I check that my debtor account is correct - - I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($). + I check that the debtor account has 1 new line with -200 as amount_currency columns and 149.39 of credit and currency is CAD($). - - I check that my Currency Difference entry is created with a credit of 8.5 + I check that my currency rate difference is correct. 49.39 in debit with no amount_currency - - I check that my write-off entry is created with a debit of 4.75 and amount currency as 0.0 + I check that my writeoff is correct. 140 credit and -175 amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'Second payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment')]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) for move_line in move_line_obj.browse(cr, uid, move_lines): if move_line.amount_currency == -200: assert move_line.credit == 149.39, "Debtor account has wrong entry." - if move_line.credit == 49.39: + elif move_line.debit == 49.39: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." - if move_line.credit == -140.00: - assert move_line.credit == -175, "Writeoff amount is wrong." + elif move_line.credit == 140.00: + assert move_line.amount_currency == -175, "Writeoff amount is wrong." - - I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual + I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual and paid - !python {model: account.invoice}: | invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) - assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0) , "Residual amount is not correct for first Invoice" + assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice" - \ No newline at end of file From c17a58e199f2f26b40d157bf361899b1d570e390 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 3 Aug 2011 15:56:53 +0530 Subject: [PATCH 025/394] [IMP] change field value based on drag and drop record in kanban view. bzr revid: ysa@tinyerp.com-20110803102653-av8rt9fhcrgjlg4i --- addons/base_kanban/static/src/css/kanban.css | 2 +- addons/base_kanban/static/src/js/kanban.js | 52 +++++++++++++++---- .../static/src/xml/base_kanban.xml | 2 +- 3 files changed, 43 insertions(+), 13 deletions(-) diff --git a/addons/base_kanban/static/src/css/kanban.css b/addons/base_kanban/static/src/css/kanban.css index d7344ee1e55..b557709dcf0 100644 --- a/addons/base_kanban/static/src/css/kanban.css +++ b/addons/base_kanban/static/src/css/kanban.css @@ -20,7 +20,7 @@ .ui-sortable-placeholder { border: 1px dotted black; visibility: visible !important; - height: 50px !important; + height: 60px !important; } .ui-sortable-placeholder * { diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index cc6fcfae79a..6a5d72ae32b 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -10,6 +10,10 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ this.model = this.dataset.model; this.view_id = view_id; this.element_id = element_id; + this.group_by_field = false; + this.domains = this.dataset.domain; + this.contexts = this.dataset.context; + this.group_by = false; }, start: function() { @@ -27,7 +31,7 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ }); if(this.template_xml){ self.dataset.read_slice([], 0, false, function (records) { - self.on_show_data([{'records': records, 'value':false}]); + self.on_show_data([{'records': records, 'value':false, 'header': false}]); }); } }, @@ -42,9 +46,9 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ self.$element.find("#data_" + record.id).append(new_qweb.render('custom_template', record)); }); }); - this.$element.find(".oe_column").sortable({ - connectWith: ".oe_column" + connectWith: ".oe_column", + receive: self.on_recieve_record }); this.$element.find(".record").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") .find(".record-header") @@ -66,7 +70,26 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ $(e.currentTarget).parents('.record:first').remove(); }, + on_recieve_record: function(event, ui) { + if(ui.item.attr("id") && this.group_by_field) { + var value = this.$element.find("#" + ui.item.attr("id")).closest("td").attr("id") + if(value) { + var data_val = {}; + value = value.split("_")[1]; + if(value == 'false') { + value = false; + } + data_val[this.group_by_field] = value; + this.dataset.write(parseInt(ui.item.attr("id").split("_")[1]), data_val); + this.do_search(this.domains, this.contexts, this.group_by); + } + } + }, + do_search: function (domains, contexts, group_by) { + this.contexts = contexts; + this.domains = domains; + this.group_by = group_by; var self = this; this.rpc('/base/session/eval_domain_and_context', { domains: domains, @@ -79,13 +102,17 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ self, self.model, results.domain, results.context, results.group_by); self.groups.list([], function (groups) { - self.do_render_group(groups); + if (group_by.length >= 1) { + self.group_by_field = group_by[0].group_by + self.do_render_group(groups); + } }, function (dataset) { self.dataset.read_slice(false, false, false, function(records) { - self.on_show_data([{'records': records, 'value':false}]); + self.on_show_data([{'records': records, 'value':false, 'header' : false}]); }); - }); + } + ); }); }, @@ -96,14 +123,17 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ self.dataset.context = group.context; self.dataset.domain = group.domain; var group_name = group.value; - if(!group_name) { - group_name = "Undefined" + var group_value = group.value; + if(!group.value) { + group_name = "Undefined"; + group_value = 'false'; } - else if(group_name instanceof Array) { - group_name = group_name[1] + else if(group.value instanceof Array) { + group_name = group.value[1] + group_value = group.value[0] } self.dataset.read_slice(false, false, false, function(records) { - self.columns.push({"value" : group_name, "records": records}); + self.columns.push({"value" : group_value, "records": records, 'header':group_name}); if (datagroups.length == self.columns.length) { self.on_show_data(self.columns); } diff --git a/addons/base_kanban/static/src/xml/base_kanban.xml b/addons/base_kanban/static/src/xml/base_kanban.xml index 2c4fde2663c..8456add75d4 100644 --- a/addons/base_kanban/static/src/xml/base_kanban.xml +++ b/addons/base_kanban/static/src/xml/base_kanban.xml @@ -5,7 +5,7 @@ -
()
+
()
From 1304203349c4eef2700c42a73c1dcec1e6259703 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 3 Aug 2011 18:43:37 +0530 Subject: [PATCH 026/394] [IMP] Improve template. bzr revid: ysa@tinyerp.com-20110803131337-2yit2j7y9ekud4q7 --- addons/base_kanban/static/src/css/kanban.css | 1 - addons/base_kanban/static/src/js/kanban.js | 3 ++- addons/base_kanban/static/src/xml/base_kanban.xml | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/addons/base_kanban/static/src/css/kanban.css b/addons/base_kanban/static/src/css/kanban.css index b557709dcf0..d194ce62ff1 100644 --- a/addons/base_kanban/static/src/css/kanban.css +++ b/addons/base_kanban/static/src/css/kanban.css @@ -1,5 +1,4 @@ .openerp .oe_column { - width: 100%; float: left; } diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index 6a5d72ae32b..9a9caeee713 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -63,7 +63,8 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ }); this.$element.find('.record .ui-icon-closethick').click(this.on_close_action); this.$element.find(".oe_column").disableSelection(); - self.$element.find( ".oe_column" ).css("width", 99 / datas.length +"%"); + this.$element.find( ".oe_column" ).css("width", 99 / datas.length +"%"); + }, on_close_action: function(e) { diff --git a/addons/base_kanban/static/src/xml/base_kanban.xml b/addons/base_kanban/static/src/xml/base_kanban.xml index 8456add75d4..7947254f1de 100644 --- a/addons/base_kanban/static/src/xml/base_kanban.xml +++ b/addons/base_kanban/static/src/xml/base_kanban.xml @@ -3,10 +3,16 @@ - + + + + +
+ -
()
+ () +
From 1f4c3d2fbba83515f07d68193f67a2492bb0a3a7 Mon Sep 17 00:00:00 2001 From: "ARA (OpenERP)" Date: Thu, 4 Aug 2011 15:25:50 +0530 Subject: [PATCH 027/394] [IMP] improve find method of account period and make comapny_id as related on account voucher bzr revid: ara@tinyerp.com-20110804095550-xu04lz4wkfhusvg0 --- addons/account/account.py | 9 ++++++++- addons/account_voucher/account_voucher.py | 17 ++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index ad7b60ada4d..0c825b40b60 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -918,10 +918,17 @@ class account_period(osv.osv): return False def find(self, cr, uid, dt=None, context=None): + if context is None: context = {} if not dt: dt = time.strftime('%Y-%m-%d') #CHECKME: shouldn't we check the state of the period? - ids = self.search(cr, uid, [('date_start','<=',dt),('date_stop','>=',dt)]) + args = [('date_start', '<=' ,dt), ('date_stop', '>=', dt)] + if context.get('company_id', False): + args.append(('company_id', '=', context['company_id'])) + else: + company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id + args.append(('company_id', '=', company_id)) + ids = self.search(cr, uid, args, context=context) if not ids: raise osv.except_osv(_('Error !'), _('No period defined for this date: %s !\nPlease create one.')%dt) return ids diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 17940aa6f25..49972b25233 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -39,7 +39,10 @@ class account_voucher(osv.osv): if context is None: context = {} if context.get('period_id', False): return context.get('period_id') - periods = self.pool.get('account.period').find(cr, uid) + if context.get('invoice_id', False): + company_id = self.pool.get('account.invoice').browse(cr, uid, context['invoice_id'], context=context).company_id.id + context.update({'company_id': company_id}) + periods = self.pool.get('account.period').find(cr, uid, context=context) return periods and periods[0] or False def _get_journal(self, cr, uid, context=None): @@ -228,7 +231,7 @@ class account_voucher(osv.osv): 'currency_id': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"), #duplicated field for display purposes 'currency_id2': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"), - 'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}), + 'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True), 'company_currency': fields.related('company_id','currency_id', type='many2one', relation='res.currency', string='Currency', readonly=True), 'state':fields.selection( [('draft','Draft'), @@ -596,9 +599,13 @@ class account_voucher(osv.osv): @param context: context arguments, like lang, time zone @return: Returns a dict which contains new values, and context """ + if context is None: context = {} period_pool = self.pool.get('account.period') res = self.onchange_partner_id(cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=context) - pids = period_pool.search(cr, uid, [('date_start', '<=', date), ('date_stop', '>=', date)]) + if context.get('invoice_id', False): + company_id = self.pool.get('account.invoice').browse(cr, uid, context['invoice_id'], context=context).company_id.id + context.update({'company_id': company_id}) + pids = period_pool.find(cr, uid, date, context=context) if pids: if not 'value' in res: res['value'] = {} @@ -606,6 +613,7 @@ class account_voucher(osv.osv): return res def onchange_journal(self, cr, uid, ids, journal_id, line_ids, tax_id, partner_id, context=None): + if context is None: context = {} if not journal_id: return {} journal_pool = self.pool.get('account.journal') @@ -621,6 +629,9 @@ class account_voucher(osv.osv): if journal.currency: currency_id = journal.currency.id vals['value'].update({'currency_id':currency_id}) + context.update({'company_id': journal.company_id.id}) + periods = self.pool.get('account.period').find(cr, uid, context=context) + vals['value'].update({'period_id':periods[0]}) return vals def proforma_voucher(self, cr, uid, ids, context=None): From effaa191dcb673293bcb1c80a0ce2a07cf3dabd5 Mon Sep 17 00:00:00 2001 From: "ARA (OpenERP)" Date: Thu, 4 Aug 2011 15:34:57 +0530 Subject: [PATCH 028/394] [IMP] make move_line_id as required in account_voucher bzr revid: ara@tinyerp.com-20110804100457-50i5xn7dynpo1clg --- addons/account_voucher/account_voucher.py | 28 +++++++++---------- .../voucher_payment_receipt_view.xml | 14 +++++----- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py index 49972b25233..f30f04406a3 100644 --- a/addons/account_voucher/account_voucher.py +++ b/addons/account_voucher/account_voucher.py @@ -155,11 +155,11 @@ class account_voucher(osv.osv): for l in line_dr_ids: real_amount -= l.get('amount_in_company_currency', 0.0) counter_for_writeoff -= currency_pool.compute(cr, uid, l['company_currency_id'], l['voucher_currency_id'], l.get('amount_in_company_currency',0.0), context=ctx) - counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) + counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) for l in line_cr_ids: real_amount += l.get('amount_in_company_currency', 0.0) counter_for_writeoff += currency_pool.compute(cr, uid, l['company_currency_id'], l['voucher_currency_id'], l.get('amount_in_company_currency',0.0), context=ctx) - counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) + counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx) writeoff_amount = amount - counter_for_writeoff currency_rate_difference = real_amount - counter_for_currency_diff return writeoff_amount, currency_rate_difference @@ -170,7 +170,7 @@ class account_voucher(osv.osv): line_osv = self.pool.get("account.voucher.line") line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context) line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context) - writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=context) + writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=context) return {'value': {'writeoff_amount': writeoff_amount,}}# 'currency_rate_difference': currency_rate_diff}} def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None): @@ -188,15 +188,15 @@ class account_voucher(osv.osv): counter_for_writeoff -= (l.voucher_currency_id.id == l.company_currency_id.id) and l.amount_in_company_currency or l.amount_in_voucher_currency #ctx.update({'date': l.date_original}) #counter_for_writeoff -= currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) - counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) + counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) for l in voucher.line_cr_ids: real_amount += l.amount_in_company_currency counter_for_writeoff += (l.voucher_currency_id.id == l.company_currency_id.id) and l.amount_in_company_currency or l.amount_in_voucher_currency #ctx.update({'date': l.date_original}) #counter_for_writeoff += currency_pool.compute(cr, uid, voucher.company_id.currency_id.id, voucher.currency_id.id, l.amount_in_company_currency, context=ctx) - counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) + counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx) writeoff_amount = voucher.amount - counter_for_writeoff - res[voucher.id]['writeoff_amount'] = writeoff_amount + res[voucher.id]['writeoff_amount'] = writeoff_amount res[voucher.id]['currency_rate_difference'] = real_amount - counter_for_currency_diff return res @@ -548,9 +548,9 @@ class account_voucher(osv.osv): 'move_line_id':line.id, 'account_id':line.account_id.id, 'amount_original': amount_original, - 'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0, + 'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0, 'currency_id': currency_id, - 'voucher_currency_id': voucher_currency_id, + 'voucher_currency_id': voucher_currency_id, 'date_original':line.date, 'company_currency_id': line.company_id.currency_id.id, 'date_due':line.date_maturity, @@ -777,7 +777,7 @@ class account_voucher(osv.osv): account_id = voucher.company_id.property_income_currency_exchange if not account_id: raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Expense Currency Rate' on the company! ")) - + currency_diff_line = { 'name': _('Currency Difference'), 'debit': voucher.currency_rate_difference > 0 and voucher.currency_rate_difference or 0.0, @@ -844,7 +844,7 @@ class account_voucher(osv.osv): if not currency_pool.is_zero(cr, uid, voucher.currency_id, voucher.writeoff_amount): #create one line for the write off if needed - diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) + diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency) account_id = False write_off_name = '' if voucher.payment_option == 'with_writeoff': @@ -950,7 +950,7 @@ class account_voucher_line(osv.osv): def _get_amount_in_company_currency(self, cr, uid, ids, name, args, context=None): res = {} for line in self.browse(cr, uid, ids, context=context): - amount_in_company_currency, amount_in_voucher_currency = self.__company_currency_amount(cr, uid, line, line.amount, context=context) + amount_in_company_currency, amount_in_voucher_currency = self.__company_currency_amount(cr, uid, line, line.amount, context=context) res[line.id] = { 'amount_in_company_currency': amount_in_company_currency, 'amount_in_voucher_currency': amount_in_voucher_currency, @@ -959,7 +959,7 @@ class account_voucher_line(osv.osv): _columns = { 'voucher_id':fields.many2one('account.voucher', 'Voucher', required=1, ondelete='cascade'), - 'move_line_id': fields.many2one('account.move.line', 'Journal Item', required=True), + 'move_line_id': fields.many2one('account.move.line', 'Journal Item'), 'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'), 'name':fields.char('Description', size=256), 'account_id':fields.many2one('account.account','Account', required=True), @@ -972,8 +972,8 @@ class account_voucher_line(osv.osv): 'voucher_currency_id': fields.related('voucher_id', 'currency_id', type='many2one', relation='res.currency', string="Voucher Currency"), 'amount':fields.float('Amount', digits_compute=dp.get_precision('Account')), - 'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), - 'amount_in_voucher_currency': fields.function(_get_amount_in_company_currency, string='Amount in Voucher Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), + 'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), + 'amount_in_voucher_currency': fields.function(_get_amount_in_company_currency, string='Amount in Voucher Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"), 'date_original': fields.related('move_line_id','date', type='date', relation='account.move.line', string='Date', readonly=1), 'date_due': fields.related('move_line_id','date_maturity', type='date', relation='account.move.line', string='Due Date', readonly=1), diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml index c2344d681c1..0e2ac917153 100644 --- a/addons/account_voucher/voucher_payment_receipt_view.xml +++ b/addons/account_voucher/voucher_payment_receipt_view.xml @@ -108,7 +108,7 @@ - @@ -122,7 +122,7 @@ - + @@ -173,7 +173,7 @@ - @@ -187,7 +187,7 @@ - + @@ -306,7 +306,7 @@ - @@ -316,7 +316,7 @@ - @@ -335,7 +335,7 @@ - From 07c4f41e31fa29cc8bc17ae818a5be60e64c6ca9 Mon Sep 17 00:00:00 2001 From: kbh Date: Thu, 4 Aug 2011 16:39:22 +0530 Subject: [PATCH 029/394] [FIX] Implemented Clear button for search view. bzr revid: kbh@bde-desktop-20110804110922-chcld5vyoovumzha --- addons/base/static/src/js/search.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index 0a1f2396123..76cfb5864e8 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -315,10 +315,26 @@ openerp.base.SearchView = openerp.base.Widget.extend({ on_invalid: function (errors) { this.notification.notify("Invalid Search", "triggered from search view"); }, - do_clear: function (e) { - if (e && e.preventDefault) { e.preventDefault(); } - this.on_clear(); - }, + do_clear: function () { + this.$element.find(':input').each(function(){ + switch(this.type) { + case 'text': + case 'string': + $(this).val(''); + break; + } + }); + var string = ($("div.expanded").not("#oe_app_search table:first-child .expanded")); + if (string){ + $(string).removeClass('expanded'); + $(string).addClass('folded'); + } + $('#oe_app_search table:last').css('display', 'none'); + $('.searchview_extended_groups_list').empty(); + $('.filter_label').removeClass('enabled'); + this.$element.find('form').submit(); + + }, /** * Triggered when the search view gets cleared * From 75063083b964888176e4e9355a142ff833cfc618 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Thu, 4 Aug 2011 16:59:07 +0530 Subject: [PATCH 030/394] [IMP] Improve code. bzr revid: ysa@tinyerp.com-20110804112907-jqoldgypm3xi7k8t --- addons/base_kanban/static/src/css/kanban.css | 1 + addons/base_kanban/static/src/js/kanban.js | 7 +++---- .../base_kanban/static/src/xml/base_kanban.xml | 18 ++++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/addons/base_kanban/static/src/css/kanban.css b/addons/base_kanban/static/src/css/kanban.css index d194ce62ff1..7b8305a762e 100644 --- a/addons/base_kanban/static/src/css/kanban.css +++ b/addons/base_kanban/static/src/css/kanban.css @@ -1,5 +1,6 @@ .openerp .oe_column { float: left; + width: 100%; } .record { diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index 9a9caeee713..9e70a0d62a6 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -46,9 +46,10 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ self.$element.find("#data_" + record.id).append(new_qweb.render('custom_template', record)); }); }); + this.$element.find( ".oe_table_column " ).css("width", 99 / datas.length +"%"); this.$element.find(".oe_column").sortable({ connectWith: ".oe_column", - receive: self.on_recieve_record + stop: self.on_recieve_record, }); this.$element.find(".record").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") .find(".record-header") @@ -63,8 +64,6 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ }); this.$element.find('.record .ui-icon-closethick').click(this.on_close_action); this.$element.find(".oe_column").disableSelection(); - this.$element.find( ".oe_column" ).css("width", 99 / datas.length +"%"); - }, on_close_action: function(e) { @@ -73,7 +72,7 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ on_recieve_record: function(event, ui) { if(ui.item.attr("id") && this.group_by_field) { - var value = this.$element.find("#" + ui.item.attr("id")).closest("td").attr("id") + var value = ui.item.closest("td").attr("id") if(value) { var data_val = {}; value = value.split("_")[1]; diff --git a/addons/base_kanban/static/src/xml/base_kanban.xml b/addons/base_kanban/static/src/xml/base_kanban.xml index 7947254f1de..42caccc649b 100644 --- a/addons/base_kanban/static/src/xml/base_kanban.xml +++ b/addons/base_kanban/static/src/xml/base_kanban.xml @@ -3,7 +3,7 @@ - - From b505b056e81c20589eb386a1c4053e032be48883 Mon Sep 17 00:00:00 2001 From: mtr Date: Thu, 4 Aug 2011 17:18:57 +0530 Subject: [PATCH 031/394] [IMP] account_voucher: corrected values and currency rate records so that demo data rates doesn't over shadow it bzr revid: mtr@mtr-20110804114857-zditm8vsx2hxr348 --- addons/account_voucher/test/case1_usd_usd.yml | 68 +++++++++---------- addons/account_voucher/test/case2_usd_eur.yml | 56 +++++++-------- addons/account_voucher/test/case3_eur_eur.yml | 25 ++++--- addons/account_voucher/test/case4_cad_chf.yml | 34 +++++----- 4 files changed, 92 insertions(+), 91 deletions(-) diff --git a/addons/account_voucher/test/case1_usd_usd.yml b/addons/account_voucher/test/case1_usd_usd.yml index a4e59ccc4b3..123a4463172 100755 --- a/addons/account_voucher/test/case1_usd_usd.yml +++ b/addons/account_voucher/test/case1_usd_usd.yml @@ -1,11 +1,12 @@ - I create a currency rate for USD for january of 1.333333 - - !record {model: res.currency.rate, id: jan_usd}: - currency_id: base.USD - name: !eval "'%s-01-01' %(datetime.now().year)" - rate: 1.333333 - + !python {model: res.currency.rate}: | + from datetime import datetime + curr_id = self.pool.get('res.currency').search(cr, uid, [('name', '=', 'USD')]) + date = '%s-01-01' %(datetime.now().year) + ids = self.search(cr, uid, [('currency_id','=',curr_id), ('name', '=', date)]) + self.write(cr, uid, ids, {'rate': 1.333333}) - I create a currency rate for USD for february of 1.250000 - @@ -141,10 +142,10 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 240.0, 2, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 240.00, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), - 'amount': 240.0, + 'amount': 240.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.USD'), 'journal_id': ref('bank_journal_USD'), @@ -160,28 +161,28 @@ if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] for item in res['value']['line_cr_ids']: - if item['amount_unreconciled'] == 200: - item['amount'] = 180 + if item['amount_unreconciled'] == 200.00: + item['amount'] = 180.00 else: - item['amount'] = 70 + item['amount'] = 70.00 vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - - I check that writeoff amount computed is -10 + I check that writeoff amount computed is -10.0 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.writeoff_amount == -10), "writeoff amount is not -10" + assert (voucher_id.writeoff_amount == -10.0), "Writeoff amount is not -10.0" - - I check that currency rate difference is -34 + I check that currency rate difference is -34.0 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.currency_rate_difference == -34), "currency rate difference is not -34" + assert (voucher_id.currency_rate_difference == -34.0), "Currency rate difference is not -34.0" - I confirm the voucher - @@ -215,14 +216,14 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) for move_line in move_line_obj.browse(cr, uid, move_lines): - if move_line.amount_currency == -180: + if move_line.amount_currency == -180.00: assert move_line.credit == 135.00, "Debtor account has wrong entry." - elif move_line.amount_currency == -70: + elif move_line.amount_currency == -70.00: assert move_line.credit == 56.00, "Debtor account has wrong entry." elif move_line.credit == 34.00: - assert move_line.amount_currency == 0, "Incorrect currency rate difference." - elif move_line.amount_currency == 10: - assert move_line.debit == 9.0, "Writeoff amount is wrong." + assert move_line.amount_currency == 0.00, "Incorrect currency rate difference." + elif move_line.amount_currency == 10.00: + assert move_line.debit == 9.00, "Writeoff amount is wrong." - I check the residual amount of Invoice1, should be 20 in amount_currency and 15 in company currency - @@ -249,10 +250,10 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 45.0, 2, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 45.00, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), - 'amount': 45.0, + 'amount': 45.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.USD'), 'journal_id': ref('bank_journal_USD'), @@ -268,29 +269,28 @@ if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] for item in res['value']['line_cr_ids']: - if item['amount_unreconciled'] == 20: - item['amount'] = 20 + if item['amount_unreconciled'] == 20.00: + item['amount'] = 20.00 else: - item['amount'] = 30 + item['amount'] = 30.00 vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - - I check that writeoff amount computed is -5 + I check that writeoff amount computed is -5.0 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.writeoff_amount == -5), "writeoff amount is not -5" + assert (voucher_id.writeoff_amount == -5.0), "Writeoff amount is not -5.0" - I check that currency rate difference is -8.50 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - curr_diff = voucher_id.currency_rate_difference - assert (voucher_id.currency_rate_difference == curr_diff), "currency rate difference is not -8.50" + assert (voucher_id.currency_rate_difference == -8.50), "Currency rate difference is not -8.50" - I confirm the voucher - @@ -324,13 +324,13 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) for move_line in move_line_obj.browse(cr, uid, move_lines): - if move_line.amount_currency == -20: - assert move_line.credit == 15, "Debtor account has wrong entry." - elif move_line.amount_currency == -30: - assert move_line.credit == 24, "Debtor account has wrong entry." - elif move_line.credit == 8.5: + if move_line.amount_currency == -20.00: + assert move_line.credit == 15.00, "Debtor account has wrong entry." + elif move_line.amount_currency == -30.00: + assert move_line.credit == 24.00, "Debtor account has wrong entry." + elif move_line.credit == 8.50: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." - elif move_line.amount_currency == 5: + elif move_line.amount_currency == 5.00: assert move_line.debit == 4.75, "Writeoff amount is wrong." - I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual and paid diff --git a/addons/account_voucher/test/case2_usd_eur.yml b/addons/account_voucher/test/case2_usd_eur.yml index 35e0bf86231..e6d24fb5a1b 100644 --- a/addons/account_voucher/test/case2_usd_eur.yml +++ b/addons/account_voucher/test/case2_usd_eur.yml @@ -1,10 +1,12 @@ - I create a currency rate for USD for january of 1.333333 - - !record {model: res.currency.rate, id: janu_usd}: - currency_id: base.USD - name: !eval "'%s-01-01' %(datetime.now().year)" - rate: 1.333333 + !python {model: res.currency.rate}: | + from datetime import datetime + curr_id = self.pool.get('res.currency').search(cr, uid, [('name', '=', 'USD')]) + date = '%s-01-01' %(datetime.now().year) + ids = self.search(cr, uid, [('currency_id', '=', curr_id), ('name', '=', date)]) + self.write(cr, uid, ids, {'rate': 1.333333}) - I create a currency rate for USD for february of 1.250000 - @@ -168,28 +170,28 @@ if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] for item in res['value']['line_cr_ids']: - if item['amount_unreconciled'] == 200: - item['amount'] = 180 + if item['amount_unreconciled'] == 200.00: + item['amount'] = 180.00 else: - item['amount'] = 70 + item['amount'] = 70.00 vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - - I check that writeoff amount computed is 15 + I check that writeoff amount computed is 15.0 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.writeoff_amount == 15), "writeoff amount is not 15" + assert (voucher_id.writeoff_amount == 15.0), "Writeoff amount is not 15.0" - - I check that currency rate difference is -34 + I check that currency rate difference is -34.0 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.currency_rate_difference == -34), "currency rate difference is not -34" + assert (voucher_id.currency_rate_difference == -34.0), "Currency rate difference is not -34.0" - I confirm the voucher - @@ -223,11 +225,11 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) for move_line in move_line_obj.browse(cr, uid, move_lines): - if move_line.amount_currency == -180: - assert move_line.credit == 135, "Debtor account has wrong entry." - elif move_line.amount_currency == -70: + if move_line.amount_currency == -180.00: + assert move_line.credit == 135.00, "Debtor account has wrong entry." + elif move_line.amount_currency == -70.00: assert move_line.credit == 56.00, "Debtor account has wrong entry." - elif move_line.credit == 34: + elif move_line.credit == 34.00: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." elif move_line.credit == 15.00: assert move_line.amount_currency == 0.00, "Writeoff amount is wrong." @@ -275,28 +277,28 @@ if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] for item in res['value']['line_cr_ids']: - if item['amount_unreconciled'] == 20: - item['amount'] = 20 + if item['amount_unreconciled'] == 20.00: + item['amount'] = 20.00 else: - item['amount'] = 30 + item['amount'] = 30.00 vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - - I check that writeoff amount computed is -5 + I check that writeoff amount computed is -5.0 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.writeoff_amount == -5), "writeoff amount is not -5" + assert (voucher_id.writeoff_amount == -5.0), "Writeoff amount is not -5.0" - I check that currency rate difference is -8.50 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.currency_rate_difference == -8.50), "currency rate difference is not -8.50" + assert (voucher_id.currency_rate_difference == -8.50), "Currency rate difference is not -8.50" - I confirm the voucher - @@ -327,13 +329,13 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) for move_line in move_line_obj.browse(cr, uid, move_lines): - if move_line.amount_currency == -20: - assert move_line.credit == 15, "Debtor account has wrong entry." - elif move_line.amount_currency == -30: - assert move_line.credit == 24, "Debtor account has wrong entry." - elif move_line.credit == 8.5: + if move_line.amount_currency == -20.00: + assert move_line.credit == 15.00, "Debtor account has wrong entry." + elif move_line.amount_currency == -30.00: + assert move_line.credit == 24.00, "Debtor account has wrong entry." + elif move_line.credit == 8.50: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." - elif move_line.amount_currency == 5: + elif move_line.amount_currency == 5.00: assert move_line.debit == 4.75, "Writeoff amount is wrong." - I check the residual amount of invoice 1, should be 0 in residual currency and 0 in amount_residual and paid diff --git a/addons/account_voucher/test/case3_eur_eur.yml b/addons/account_voucher/test/case3_eur_eur.yml index 5779028641e..904abb7f0db 100644 --- a/addons/account_voucher/test/case3_eur_eur.yml +++ b/addons/account_voucher/test/case3_eur_eur.yml @@ -138,7 +138,7 @@ res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), - 'amount': 120.0, + 'amount': 120.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.EUR'), 'journal_id': ref('bank_journal_EUR'), @@ -154,10 +154,10 @@ if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] for item in res['value']['line_cr_ids']: - if item['amount_unreconciled'] == 150: - item['amount'] = 100 + if item['amount_unreconciled'] == 150.00: + item['amount'] = 100.00 else: - item['amount'] = 20 + item['amount'] = 20.00 vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) @@ -168,14 +168,14 @@ !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.writeoff_amount == 0), "writeoff amount is not 0" + assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0.00" - I check that currency rate difference is 0.00 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.currency_rate_difference == 0.00), "currency rate difference is not 0.00" + assert (voucher_id.currency_rate_difference == 0.00), "Currency rate difference is not 0.00" - I confirm the voucher - @@ -205,9 +205,9 @@ move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) for move_line in move_line_obj.browse(cr, uid, move_lines): - if move_line.credit == 20: + if move_line.credit == 20.00: assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." - elif move_line.credit == 100: + elif move_line.credit == 100.00: assert move_line.amount_currency == 0.00, "Debtor account has wrong entry." - I check the residual amount of Invoice1 is 50 @@ -234,10 +234,10 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.0, 2, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), - 'amount': 120.0, + 'amount': 120.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.EUR'), 'journal_id': ref('bank_journal_EUR'), @@ -267,15 +267,14 @@ !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'),('partner_id', '=', ref('res_partner_peter0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.writeoff_amount == 0.00), "writeoff amount is not 0" + assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0" - I check that currency rate difference is 0.00 - !python {model: account.voucher}: | voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - curr_diff = voucher_id.currency_rate_difference - assert (voucher_id.currency_rate_difference == curr_diff), "currency rate difference is not 0" + assert (voucher_id.currency_rate_difference == 0.00), "Currency rate difference is not 0" - I confirm the voucher - diff --git a/addons/account_voucher/test/case4_cad_chf.yml b/addons/account_voucher/test/case4_cad_chf.yml index 3d989eaee7a..56795fa127a 100644 --- a/addons/account_voucher/test/case4_cad_chf.yml +++ b/addons/account_voucher/test/case4_cad_chf.yml @@ -11,7 +11,7 @@ !record {model: res.currency.rate, id: mar_cad}: currency_id: base.CAD name: !eval "'%s-03-01' %(datetime.now().year)" - rate: 0.500000 + rate: 2.000000 - I create a currency rate for CHF for january of 1.308600 - @@ -24,7 +24,7 @@ - !record {model: res.currency.rate, id: jan_chf}: currency_id: base.CHF - name: !eval "'%s-01-01' %(datetime.now().year)" + name: !eval "'%s-03-01' %(datetime.now().year)" rate: 1.250000 - I create a bank journal with CHF as currency @@ -100,10 +100,10 @@ !python {model: account.voucher}: | import netsvc, time vals = {} - res = self.onchange_partner_id(cr, uid, [], ref("res_partner_john0"), ref('bank_journal_CHF'), 300.0, 2, ttype='receipt', date=False) + res = self.onchange_partner_id(cr, uid, [], ref("res_partner_john0"), ref('bank_journal_CHF'), 300.00, 2, ttype='receipt', date=False) vals = { 'account_id': ref('account.cash'), - 'amount': 300.0, + 'amount': 300.00, 'company_id': ref('base.main_company'), 'currency_id': ref('base.CHF'), 'journal_id': ref('bank_journal_CHF'), @@ -119,39 +119,40 @@ if not res['value']['line_cr_ids']: res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}] for item in res['value']['line_cr_ids']: - if item['amount_unreconciled'] == 200: - item['amount'] = 200 + if item['amount_unreconciled'] == 200.00: + item['amount'] = 200.00 vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']] id = self.create(cr, uid, vals) voucher_id = self.browse(cr, uid, id) assert (voucher_id.state=='draft'), "Voucher is not in draft state" - - I check that writeoff amount computed is 175 + I check that writeoff amount computed is 175.0 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.writeoff_amount == 175), "writeoff amount is not 175" + assert (voucher_id.writeoff_amount == 175.0), "Writeoff amount is not 175.0" - I check that currency rate difference is 49.39 - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) voucher_id = self.browse(cr, uid, voucher[0]) - assert (voucher_id.currency_rate_difference == 49.39), "currency rate difference is not 49.39" + curr_diff = float(str(voucher_id.currency_rate_difference)) + assert (curr_diff == 49.39), "Currency rate difference is not 49.39" - I confirm the voucher - !python {model: account.voucher}: | import netsvc - voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) wf_service = netsvc.LocalService("workflow") wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr) - I check that the move of my voucher is valid - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -168,7 +169,7 @@ I check that my writeoff is correct. 140 credit and -175 amount_currency - !python {model: account.voucher}: | - voucher = self.search(cr, uid, [('name', '=', 'First payment')]) + voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))]) voucher_id = self.browse(cr, uid, voucher[0]) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)]) @@ -178,14 +179,13 @@ elif move_line.debit == 49.39: assert move_line.amount_currency == 0.00, "Incorrect Currency Difference." elif move_line.credit == 140.00: - assert move_line.amount_currency == -175, "Writeoff amount is wrong." + assert move_line.amount_currency == -175.00, "Writeoff amount is wrong." - I check the residual amount of Invoice1, should be 0 in residual currency and 0 in amount_residual and paid - !python {model: account.invoice}: | - invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan")) + invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_cad")) move_line_obj = self.pool.get('account.move.line') move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)]) move_line = move_line_obj.browse(cr, uid, move_lines[0]) assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for first Invoice" -- \ No newline at end of file From 9824b8a3f7d9e2b853f3a4bc2ddaaeb129d9034b Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Thu, 4 Aug 2011 18:57:51 +0530 Subject: [PATCH 032/394] [IMP] kanban view:- add drag and drop functionality. drag record and release that record then resequence record list. bzr revid: ysa@tinyerp.com-20110804132751-hugtndsbdpf12stx --- addons/base_kanban/static/src/js/kanban.js | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index 9e70a0d62a6..b0817550cd7 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -38,12 +38,14 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ on_show_data: function(datas) { var self = this; + this.all_records = []; var new_qweb = new QWeb2.Engine(); new_qweb.add_template('' + this.template_xml + '') self.$element.html(QWeb.render("KanbanBiew", {"datas" :datas})); _.each(datas, function(data) { _.each(data.records, function(record) { self.$element.find("#data_" + record.id).append(new_qweb.render('custom_template', record)); + self.all_records.push(record); }); }); this.$element.find( ".oe_table_column " ).css("width", 99 / datas.length +"%"); @@ -71,6 +73,30 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ }, on_recieve_record: function(event, ui) { + var self = this; + var from = ui.item.index(), + to = ui.item.prev().index() || 0; + var child_record = ui.item.parent().children(); + child_record.splice(0, to); + + var data, sequence=0, index = to; + if(to >= 0) { + var record_id = parseInt(child_record.attr('id').split("_")[1]); + _.each(this.all_records, function(record){ + if(record_id == record.id && record.sequence) { + sequence = record.sequence; + } + }); + } + + _.each(child_record, function (child) { + var child_id = parseInt($(child).attr("id").split("_")[1]); + self.dataset.write(child_id, {sequence: sequence}); + sequence++; + + }); + this.do_search(this.domains, this.contexts, this.group_by); + if(ui.item.attr("id") && this.group_by_field) { var value = ui.item.closest("td").attr("id") if(value) { From 3eb38c4501f8293bc5114953775fc7c8ba58edbe Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Fri, 5 Aug 2011 14:02:30 +0530 Subject: [PATCH 033/394] [IMP] improve kanban view. resequence field on drag and drop record. bzr revid: ysa@tinyerp.com-20110805083230-c7rue7yxujlskwcf --- addons/base_kanban/static/src/js/kanban.js | 98 +++++++++++-------- .../static/src/xml/base_kanban.xml | 2 +- 2 files changed, 59 insertions(+), 41 deletions(-) diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index b0817550cd7..850604d6fcd 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -31,7 +31,7 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ }); if(this.template_xml){ self.dataset.read_slice([], 0, false, function (records) { - self.on_show_data([{'records': records, 'value':false, 'header': false}]); + self.on_reload_kanban([{'records': records, 'value':false, 'header': false}]); }); } }, @@ -74,31 +74,33 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ on_recieve_record: function(event, ui) { var self = this; - var from = ui.item.index(), - to = ui.item.prev().index() || 0; + var from = ui.item.index(), to = ui.item.prev().index() || 0; var child_record = ui.item.parent().children(); + var data, sequence=1, index = to; + this.flag = false; child_record.splice(0, to); - - var data, sequence=0, index = to; - if(to >= 0) { - var record_id = parseInt(child_record.attr('id').split("_")[1]); - _.each(this.all_records, function(record){ - if(record_id == record.id && record.sequence) { - sequence = record.sequence; - } - }); + if(to >= 0 && child_record) { + var record_id = child_record.attr('id').split("_"); + if(record_id.length >= 2) { + _.each(this.all_records, function(record){ + if(parseInt(record_id[1]) == record.id && record.sequence) { + sequence = record.sequence; + } + }); + } } - _.each(child_record, function (child) { var child_id = parseInt($(child).attr("id").split("_")[1]); - self.dataset.write(child_id, {sequence: sequence}); - sequence++; - + if(child_id) { + self.dataset.write(child_id, {sequence: sequence}); + sequence++; + self.flag = true; + } }); - this.do_search(this.domains, this.contexts, this.group_by); - + console.log(":this.group_by_field:::",this.group_by_field); if(ui.item.attr("id") && this.group_by_field) { var value = ui.item.closest("td").attr("id") + console.log("value:::",value); if(value) { var data_val = {}; value = value.split("_")[1]; @@ -106,42 +108,58 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ value = false; } data_val[this.group_by_field] = value; + console.log("D:D:::::",data_val, parseInt(ui.item.attr("id").split("_")[1])); this.dataset.write(parseInt(ui.item.attr("id").split("_")[1]), data_val); - this.do_search(this.domains, this.contexts, this.group_by); + this.flag = true; } } + if(this.flag) { + this.do_actual_search(this.domains, this.contexts, this.group_by); + } + }, + + on_reload_kanban: function(datas){ + this.$element.find("#kanbanview").remove(); + this.on_show_data(datas); }, do_search: function (domains, contexts, group_by) { - this.contexts = contexts; - this.domains = domains; - this.group_by = group_by; var self = this; this.rpc('/base/session/eval_domain_and_context', { domains: domains, contexts: contexts, group_by_seq: group_by }, function (results) { - self.dataset.context = results.context; - self.dataset.domain = results.domain; - self.groups = new openerp.base.DataGroup( - self, self.model, results.domain, results.context, results.group_by); - self.groups.list([], - function (groups) { - if (group_by.length >= 1) { - self.group_by_field = group_by[0].group_by - self.do_render_group(groups); - } - }, - function (dataset) { - self.dataset.read_slice(false, false, false, function(records) { - self.on_show_data([{'records': records, 'value':false, 'header' : false}]); - }); - } - ); + self.contexts = results.context; + self.domains = results.domain; + self.group_by = results.group_by; + self.do_actual_search(results.domain, results.context, results.group_by); }); }, + do_actual_search: function (domain, context, group_by) { + var self = this; + + this.group_by_field = false; + + self.dataset.context = context; + self.dataset.domain = domain; + this.groups = new openerp.base.DataGroup(this, this.model, domain, context, group_by || []); + this.groups.list([], + function (groups) { + if (group_by.length >= 1) { + self.group_by_field = group_by[0]; + self.do_render_group(groups); + } + }, + function (dataset) { + self.dataset.read_slice(false, false, false, function(records) { + self.on_reload_kanban([{'records': records, 'value':false, 'header' : false}]); + }); + } + ); + + }, do_render_group : function(datagroups){ this.columns = []; var self = this; @@ -161,7 +179,7 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ self.dataset.read_slice(false, false, false, function(records) { self.columns.push({"value" : group_value, "records": records, 'header':group_name}); if (datagroups.length == self.columns.length) { - self.on_show_data(self.columns); + self.on_reload_kanban(self.columns); } }); }); diff --git a/addons/base_kanban/static/src/xml/base_kanban.xml b/addons/base_kanban/static/src/xml/base_kanban.xml index 42caccc649b..4b1ca3f44b4 100644 --- a/addons/base_kanban/static/src/xml/base_kanban.xml +++ b/addons/base_kanban/static/src/xml/base_kanban.xml @@ -1,6 +1,6 @@
+ () @@ -12,13 +12,15 @@
- -
-
-
-
-
+
+
+ +
+
+
+
+
+