invoice_pool = self.pool.get('account.invoice')
journal_pool = self.pool.get('account.journal')
if context.get('invoice_id', False):
- currency_id = invoice_pool.browse(cr, uid, context['invoice_id'], context=context).currency_id.id
- journal_id = journal_pool.search(cr, uid, [('currency', '=', currency_id)], limit=1)
+ invoice = invoice_pool.browse(cr, uid, context['invoice_id'], context=context)
+ journal_id = journal_pool.search(cr, uid, [
+ ('currency', '=', invoice.currency_id.id), ('company_id', '=', invoice.company_id.id)
+ ], limit=1, context=context)
return journal_id and journal_id[0] or False
if context.get('journal_id', False):
return context.get('journal_id')
journal_pool = self.pool.get('account.journal')
journal_id = context.get('journal_id', False)
if journal_id:
+ if isinstance(journal_id, (list, tuple)):
+ # sometimes journal_id is a pair (id, display_name)
+ journal_id = journal_id[0]
journal = journal_pool.browse(cr, uid, journal_id, context=context)
if journal.currency:
return journal.currency.id
'pre_line':fields.boolean('Previous Payments ?', required=False),
'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 Payment Balance'),
+ ('without_writeoff', 'Keep it open'),
+ ('with_writeoff', 'Reconcile payment balance'),
], 'Payment Difference', required=True, readonly=True, states={'draft': [('readonly', False)]}, help="This field helps you to choose what you want to do with the eventual difference between the paid amount and the sum of allocated amounts. You can either choose to keep open this difference on the partner's account, or reconcile it with the payment(s)"),
'writeoff_acc_id': fields.many2one('account.account', 'Counterpart Account', readonly=True, states={'draft': [('readonly', False)]}),
'comment': fields.char('Counterpart Comment', required=True, readonly=True, states={'draft': [('readonly', False)]}),
currency_id = journal.currency.id
else:
currency_id = journal.company_id.currency_id.id
- vals['value'].update({'currency_id': currency_id, 'payment_rate_currency_id': currency_id})
+
+ period_ids = self.pool['account.period'].find(cr, uid, context=dict(context, company_id=company_id))
+ vals['value'].update({
+ 'currency_id': currency_id,
+ 'payment_rate_currency_id': currency_id,
+ 'period_id': period_ids and period_ids[0] or False
+ })
#in case we want to register the payment directly from an invoice, it's confusing to allow to switch the journal
#without seeing that the amount is expressed in the journal currency, and not in the invoice currency. So to avoid
#this common mistake, we simply reset the amount to 0 if the currency is not the invoice currency.
vals[key].update(res[key])
return vals
+ def onchange_company(self, cr, uid, ids, partner_id, journal_id, currency_id, company_id, context=None):
+ """
+ If the company changes, check that the journal is in the right company.
+ If not, fetch a new journal.
+ """
+ journal_pool = self.pool['account.journal']
+ journal = journal_pool.browse(cr, uid, journal_id, context=context)
+ if journal.company_id.id != company_id:
+ # can not guess type of journal, better remove it
+ return {'value': {'journal_id': False}}
+ return {}
+
def button_proforma_voucher(self, cr, uid, ids, context=None):
self.signal_workflow(cr, uid, ids, 'proforma_voucher')
return {'type': 'ir.actions.act_window_close'}