diff --git a/addons/account_voucher/models/account_voucher.py b/addons/account_voucher/models/account_voucher.py
index a022f72e66c..2dfcd06835a 100644
--- a/addons/account_voucher/models/account_voucher.py
+++ b/addons/account_voucher/models/account_voucher.py
@@ -37,6 +37,9 @@ class AccountVoucher(models.Model):
help="Effective date for accounting entries", copy=False, default=fields.Date.context_today)
journal_id = fields.Many2one('account.journal', 'Journal',
required=True, readonly=True, states={'draft': [('readonly', False)]}, default=_default_journal)
+ payment_journal_id = fields.Many2one('account.journal', string='Payment Method', readonly=True, store=False,
+ states={'draft': [('readonly', False)]}, domain="[('type', 'in', ['cash', 'bank'])]",
+ compute='_compute_payment_journal_id', inverse='_inverse_payment_journal_id')
account_id = fields.Many2one('account.account', 'Account',
required=True, readonly=True, states={'draft': [('readonly', False)]},
domain="[('deprecated', '=', False), ('internal_type','=', (pay_now == 'pay_now' and 'liquidity' or voucher_type == 'purchase' and 'payable' or 'receivable'))]")
@@ -101,6 +104,29 @@ class AccountVoucher(models.Model):
def _get_journal_currency(self):
self.currency_id = self.journal_id.currency_id.id or self.company_id.currency_id.id
+ @api.depends('company_id', 'pay_now', 'account_id')
+ def _compute_payment_journal_id(self):
+ for voucher in self:
+ if voucher.pay_now != 'pay_now':
+ continue
+ domain = [
+ ('type', 'in', ('bank', 'cash')),
+ ('company_id', '=', voucher.company_id.id),
+ ]
+ if voucher.account_id and voucher.account_id.internal_type == 'liquidity':
+ field = 'default_debit_account_id' if voucher.voucher_type == 'sale' else 'default_credit_account_id'
+ domain.append((field, '=', voucher.account_id.id))
+ voucher.payment_journal_id = self.env['account.journal'].search(domain, limit=1)
+
+ def _inverse_payment_journal_id(self):
+ for voucher in self:
+ if voucher.pay_now != 'pay_now':
+ continue
+ if voucher.voucher_type == 'sale':
+ voucher.account_id = voucher.payment_journal_id.default_debit_account_id
+ else:
+ voucher.account_id = voucher.payment_journal_id.default_credit_account_id
+
@api.multi
@api.depends('tax_correction', 'line_ids.price_subtotal')
def _compute_total(self):
@@ -114,22 +140,13 @@ class AccountVoucher(models.Model):
voucher.amount = total + voucher.tax_correction
voucher.tax_amount = tax_amount
- @api.one
- @api.depends('account_pay_now_id', 'account_pay_later_id', 'pay_now')
- def _get_account(self):
- self.account_id = self.account_pay_now_id if self.pay_now == 'pay_now' else self.account_pay_later_id
-
@api.onchange('date')
def onchange_date(self):
self.account_date = self.date
@api.onchange('partner_id', 'pay_now')
def onchange_partner_id(self):
- if self.pay_now == 'pay_now':
- liq_journal = self.env['account.journal'].search([('type', 'in', ('bank', 'cash'))], limit=1)
- self.account_id = liq_journal.default_debit_account_id \
- if self.voucher_type == 'sale' else liq_journal.default_credit_account_id
- else:
+ if self.pay_now != 'pay_now':
if self.partner_id:
self.account_id = self.partner_id.property_account_receivable_id \
if self.voucher_type == 'sale' else self.partner_id.property_account_payable_id
@@ -177,7 +194,7 @@ class AccountVoucher(models.Model):
'account_id': self.account_id.id,
'move_id': move_id,
'journal_id': self.journal_id.id,
- 'partner_id': self.partner_id.id,
+ 'partner_id': self.partner_id.commercial_partner_id.id,
'currency_id': company_currency != current_currency and current_currency or False,
'amount_currency': (sign * abs(self.amount) # amount < 0 for refunds
if company_currency != current_currency else 0.0),
@@ -224,19 +241,29 @@ class AccountVoucher(models.Model):
@api.multi
def voucher_pay_now_payment_create(self):
- payment_methods = self.journal_id.outbound_payment_method_ids
+ if self.voucher_type == 'sale':
+ payment_methods = self.journal_id.inbound_payment_method_ids
+ payment_type = 'inbound'
+ partner_type = 'customer'
+ sequence_code = 'account.payment.customer.invoice'
+ else:
+ payment_methods = self.journal_id.outbound_payment_method_ids
+ payment_type = 'outbound'
+ partner_type = 'supplier'
+ sequence_code = 'account.payment.supplier.invoice'
+ name = self.env['ir.sequence'].with_context(ir_sequence_date=self.date).next_by_code(sequence_code)
return {
- 'payment_type': 'outbound',
+ 'name': name,
+ 'payment_type': payment_type,
'payment_method_id': payment_methods and payment_methods[0].id or False,
- 'partner_type': 'supplier',
- 'partner_id': self.partner_id.id,
+ 'partner_type': partner_type,
+ 'partner_id': self.partner_id.commercial_partner_id.id,
'amount': self.amount,
'currency_id': self.currency_id.id,
'payment_date': self.date,
- 'journal_id': self.journal_id.id,
+ 'journal_id': self.payment_journal_id.id,
'company_id': self.company_id.id,
'communication': self.name,
- 'name': self.name,
'state': 'reconciled',
}
@@ -268,7 +295,7 @@ class AccountVoucher(models.Model):
'name': line.name or '/',
'account_id': line.account_id.id,
'move_id': move_id,
- 'partner_id': self.partner_id.id,
+ 'partner_id': self.partner_id.commercial_partner_id.id,
'analytic_account_id': line.account_analytic_id and line.account_analytic_id.id or False,
'quantity': 1,
'credit': abs(amount) if self.voucher_type == 'sale' else 0.0,
diff --git a/addons/account_voucher/views/account_voucher_views.xml b/addons/account_voucher/views/account_voucher_views.xml
index 15c2d0a1749..afa96520085 100644
--- a/addons/account_voucher/views/account_voucher_views.xml
+++ b/addons/account_voucher/views/account_voucher_views.xml
@@ -230,13 +230,18 @@
-
-
+
+
+
-
+
@@ -338,25 +343,27 @@
-
+
+
-
-
-
+
+
+
+
+
-
-