diff --git a/addons/account_voucher/models/account_voucher.py b/addons/account_voucher/models/account_voucher.py index c652267ad5d..36636e05731 100644 --- a/addons/account_voucher/models/account_voucher.py +++ b/addons/account_voucher/models/account_voucher.py @@ -23,11 +23,20 @@ class AccountVoucher(models.Model): ] return self.env['account.journal'].search(domain, limit=1) + @api.model + def _default_payment_journal(self): + company_id = self._context.get('company_id', self.env.user.company_id.id) + domain = [ + ('type', 'in', ('bank', 'cash')), + ('company_id', '=', company_id), + ] + return self.env['account.journal'].search(domain, limit=1) + voucher_type = fields.Selection([ ('sale', 'Sale'), ('purchase', 'Purchase') ], string='Type', readonly=True, states={'draft': [('readonly', False)]}, oldname="type") - name = fields.Char('Payment Reference', + name = fields.Char('Payment Memo', readonly=True, states={'draft': [('readonly', False)]}, default='') date = fields.Date("Bill Date", readonly=True, index=True, states={'draft': [('readonly', False)]}, @@ -37,12 +46,11 @@ 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') + payment_journal_id = fields.Many2one('account.journal', string='Payment Method', readonly=True, + states={'draft': [('readonly', False)]}, domain="[('type', 'in', ['cash', 'bank'])]", default=_default_payment_journal) 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'))]") + domain="[('deprecated', '=', False), ('internal_type','=', (voucher_type == 'purchase' and 'payable' or 'receivable'))]") line_ids = fields.One2many('account.voucher.line', 'voucher_id', 'Voucher Lines', readonly=True, copy=True, states={'draft': [('readonly', False)]}) @@ -112,29 +120,6 @@ 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): @@ -154,15 +139,9 @@ class AccountVoucher(models.Model): @api.onchange('partner_id', 'pay_now') def onchange_partner_id(self): - 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 - else: - account_type = self.voucher_type == 'purchase' and 'payable' or 'receivable' - domain = [('deprecated', '=', False), ('internal_type', '=', account_type)] - - self.account_id = self.env['account.account'].search(domain, limit=1) + 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 @api.multi def proforma_voucher(self): @@ -210,7 +189,6 @@ class AccountVoucher(models.Model): if company_currency != current_currency else 0.0), 'date': self.account_date, 'date_maturity': self.date_due, - 'payment_id': self._context.get('payment_id'), } return move_line @@ -261,9 +239,7 @@ class AccountVoucher(models.Model): 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 { - 'name': name, 'payment_type': payment_type, 'payment_method_id': payment_methods and payment_methods[0].id or False, 'partner_type': partner_type, @@ -274,7 +250,6 @@ class AccountVoucher(models.Model): 'journal_id': self.payment_journal_id.id, 'company_id': self.company_id.id, 'communication': self.name, - 'state': 'reconciled', } @api.multi @@ -336,9 +311,6 @@ class AccountVoucher(models.Model): ctx = local_context.copy() ctx['date'] = voucher.account_date ctx['check_move_validity'] = False - # Create a payment to allow the reconciliation when pay_now = 'pay_now'. - if self.pay_now == 'pay_now' and self.amount > 0: - ctx['payment_id'] = self.env['account.payment'].create(self.voucher_pay_now_payment_create()).id # Create the account move record. move = self.env['account.move'].create(voucher.account_move_get()) # Get the name of the account_move just created @@ -352,6 +324,15 @@ class AccountVoucher(models.Model): # Create one move line per voucher line where amount is not 0.0 line_total = voucher.with_context(ctx).voucher_move_line_create(line_total, move.id, company_currency, current_currency) + # Create a payment to allow the reconciliation when pay_now = 'pay_now'. + if self.pay_now == 'pay_now': + payment_id = self.env['account.payment'].create(self.voucher_pay_now_payment_create()) + payment_id.post() + + # Reconcile the receipt with the payment + lines_to_reconcile = (payment_id.move_line_ids + move.line_ids).filtered(lambda l: l.account_id == self.account_id) + lines_to_reconcile.reconcile() + # Add tax correction to move line if any tax correction specified if voucher.tax_correction != 0.0: tax_move_line = self.env['account.move.line'].search([('move_id', '=', move.id), ('tax_line_id', '!=', False)], limit=1) diff --git a/addons/account_voucher/views/account_voucher_views.xml b/addons/account_voucher/views/account_voucher_views.xml index af89a6f84e1..55374c80324 100644 --- a/addons/account_voucher/views/account_voucher_views.xml +++ b/addons/account_voucher/views/account_voucher_views.xml @@ -236,7 +236,7 @@ - + @@ -246,7 +246,6 @@ groups="account.group_account_user"/> - @@ -278,6 +277,7 @@ + @@ -354,12 +354,11 @@ - + - +