From 7c78a74aeab51bbce6268d996a71f035d585b080 Mon Sep 17 00:00:00 2001 From: qdp Date: Mon, 25 Aug 2008 17:41:01 +0200 Subject: [PATCH] *commited patch of c2c to bugfix multi currencies glitch on wizard_pay_invoice. It now takes in consideration the date and is improved thanks to a comment and a better name for writtes-off. bzr revid: qdp@tinyerp.com-20080825154101-vxnkipmf3nlooxto --- addons/account/account.py | 2 +- addons/account/account_move_line.py | 16 +++++++++--- addons/account/invoice.py | 27 +++++++++++++++------ addons/account/wizard/wizard_pay_invoice.py | 11 ++++++++- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index 04c5c92d98c..34b421c7e6f 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -423,7 +423,7 @@ class account_journal(osv.osv): 'user_id': fields.many2one('res.users', 'User', help="The responsible user of this journal"), 'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'), 'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'), - 'entry_posted': fields.boolean('Skip \'Draft\' State of Created Entries', help='Check this box if you don\'t want that new account moves pass through the draft state'), + 'entry_posted': fields.boolean('Skip \'Draft\' State for Created Entries', help='Check this box if you don\'t want that new account moves pass through the \'draft\' state and goes direclty to the \'posted state\' without any manual validation.'), } _defaults = { 'active': lambda *a: 1, diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 125e3a7d5f0..09e8bccec12 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -404,7 +404,11 @@ class account_move_line(osv.osv): account_id = line['account_id']['id'] partner_id = (line['partner_id'] and line['partner_id']['id']) or False writeoff = debit - credit - date = time.strftime('%Y-%m-%d') + # Ifdate_p in context => take this date + if context.has_key('date_p') and context['date_p']: + date=context['date_p'] + else: + date = time.strftime('%Y-%m-%d') cr.execute('SELECT account_id, reconcile_id \ FROM account_move_line \ @@ -435,9 +439,15 @@ class account_move_line(osv.osv): self_credit = 0.0 self_debit = -writeoff + # If comment exist in context, take it + if context['comment']: + libelle=context['comment'] + else: + libelle='Write-Off' + writeoff_lines = [ (0, 0, { - 'name':'Write-Off', + 'name':libelle, 'debit':self_debit, 'credit':self_credit, 'account_id':account_id, @@ -447,7 +457,7 @@ class account_move_line(osv.osv): 'amount_currency': account.currency_id.id and -currency or 0.0 }), (0, 0, { - 'name':'Write-Off', + 'name':libelle, 'debit':debit, 'credit':credit, 'account_id':writeoff_acc_id, diff --git a/addons/account/invoice.py b/addons/account/invoice.py index 7dabe6fe88d..89e47a1ac43 100644 --- a/addons/account/invoice.py +++ b/addons/account/invoice.py @@ -685,20 +685,30 @@ class account_invoice(osv.osv): invoice = self.browse(cr, uid, ids[0]) src_account_id = invoice.account_id.id journal = self.pool.get('account.journal').browse(cr, uid, pay_journal_id) - if not name: - if journal.sequence_id: - name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id) - else: - raise osv.except_osv(_('No piece number !'), _('Can not create an automatic sequence for this piece !\n\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.')) + if journal.sequence_id: + name = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id) + else: + raise osv.except_osv(_('No piece number !'), _('Can not create an automatic sequence for this piece !\n\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.')) + # Take the seq as name for move + if journal.sequence_id: + seq = self.pool.get('ir.sequence').get_id(cr, uid, journal.sequence_id.id) + else: + raise osv.except_osv('No piece number !', 'Can not create an automatic sequence for this piece !\n\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece.') types = {'out_invoice': -1, 'in_invoice': 1, 'out_refund': 1, 'in_refund': -1} direction = types[invoice.type] + #take the choosen date + if context.has_key('date_p') and context['date_p']: + date=context['date_p'] + else: + date=time.strftime('%Y-%m-%d') l1 = { 'name': name, 'debit': direction * pay_amount>0 and direction * pay_amount, 'credit': direction * pay_amount<0 and - direction * pay_amount, 'account_id': src_account_id, 'partner_id': invoice.partner_id.id, - 'date': time.strftime('%Y-%m-%d'), + 'date': date, + 'ref':invoice.number, } l2 = { 'name':name, @@ -706,11 +716,12 @@ class account_invoice(osv.osv): 'credit': direction * pay_amount>0 and direction * pay_amount, 'account_id': pay_account_id, 'partner_id': invoice.partner_id.id, - 'date': time.strftime('%Y-%m-%d'), + 'date': date, + 'ref':invoice.number, } lines = [(0, 0, l1), (0, 0, l2)] - move = {'name': name, 'line_id': lines, 'journal_id': pay_journal_id, 'period_id': period_id} + move = {'name': seq, 'line_id': lines, 'journal_id': pay_journal_id, 'period_id': period_id} move_id = self.pool.get('account.move').create(cr, uid, move) line_ids = [] diff --git a/addons/account/wizard/wizard_pay_invoice.py b/addons/account/wizard/wizard_pay_invoice.py index c8f1197571e..3503070ee21 100644 --- a/addons/account/wizard/wizard_pay_invoice.py +++ b/addons/account/wizard/wizard_pay_invoice.py @@ -68,6 +68,13 @@ def _pay_and_reconcile(self, cr, uid, data, context): ctx = {'date':data['form']['date']} amount = cur_obj.compute(cr, uid, journal.currency.id, invoice.company_id.currency_id.id, amount, context=ctx) + + # Take the choosen date + if form.has_key('comment'): + context={'date_p':form['date'],'comment':form['comment']} + else: + context={'date_p':form['date'],'comment':False} + acc_id = journal.default_credit_account_id and journal.default_credit_account_id.id if not acc_id: raise wizard.except_wizard(_('Error !'), _('Your journal must have a default credit and debit account.')) @@ -80,7 +87,7 @@ def _wo_check(self, cr, uid, data, context): pool = pooler.get_pool(cr.dbname) invoice = pool.get('account.invoice').browse(cr, uid, data['id'], context) journal = pool.get('account.journal').browse(cr, uid, data['form']['journal_id'], context) - if invoice.company_id.currency_id.id<>journal.currency.id: + if invoice.company_id.currency_id.id<>journal.currency.id or journal.currency.id <> invoice.currency_id.id: return 'addendum' if pool.get('res.currency').is_zero(cr, uid, invoice.currency_id, (data['form']['amount'] - invoice.amount_total)): @@ -92,11 +99,13 @@ _transaction_add_form = ''' + ''' _transaction_add_fields = { 'writeoff_acc_id': {'string':'Write-Off account', 'type':'many2one', 'relation':'account.account', 'required':True}, 'writeoff_journal_id': {'string': 'Write-Off journal', 'type': 'many2one', 'relation':'account.journal', 'required':True}, + 'comment': {'string': 'Entry Name', 'type':'char', 'size': 64, 'required':True}, } def _get_value_addendum(self, cr, uid, data, context={}):