diff --git a/addons/account/tests/test_account_move_in_invoice.py b/addons/account/tests/test_account_move_in_invoice.py
index c9df200825c..e390599c54f 100644
--- a/addons/account/tests/test_account_move_in_invoice.py
+++ b/addons/account/tests/test_account_move_in_invoice.py
@@ -1141,6 +1141,7 @@ class TestAccountMoveInInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2019-02-01'),
'reason': 'no reason',
'refund_method': 'refund',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
@@ -1192,6 +1193,7 @@ class TestAccountMoveInInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2019-02-01'),
'reason': 'no reason again',
'refund_method': 'cancel',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
@@ -1255,6 +1257,7 @@ class TestAccountMoveInInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2017-01-01'),
'reason': 'no reason',
'refund_method': 'refund',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
@@ -1312,6 +1315,7 @@ class TestAccountMoveInInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2017-01-01'),
'reason': 'no reason again',
'refund_method': 'cancel',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
diff --git a/addons/account/tests/test_account_move_out_invoice.py b/addons/account/tests/test_account_move_out_invoice.py
index 198ddbf426a..2d716d54d3f 100644
--- a/addons/account/tests/test_account_move_out_invoice.py
+++ b/addons/account/tests/test_account_move_out_invoice.py
@@ -1746,6 +1746,7 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2019-02-01'),
'reason': 'no reason',
'refund_method': 'refund',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
@@ -1798,6 +1799,7 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2019-02-01'),
'reason': 'no reason',
'refund_method': 'cancel',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
@@ -1861,6 +1863,7 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2017-01-01'),
'reason': 'no reason',
'refund_method': 'refund',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
@@ -1918,6 +1921,7 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.from_string('2017-01-01'),
'reason': 'no reason',
'refund_method': 'cancel',
+ 'journal_id': self.invoice.journal_id.id,
})
reversal = move_reversal.reverse_moves()
reverse_move = self.env['account.move'].browse(reversal['res_id'])
@@ -1978,6 +1982,7 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon):
'date': fields.Date.today() + timedelta(days=7),
'reason': 'no reason',
'refund_method': 'modify',
+ 'journal_id': self.invoice.journal_id.id,
})
move_reversal.reverse_moves()
refund = self.env['account.move'].search([('move_type', '=', 'out_refund'), ('company_id', '=', self.invoice.company_id.id)])
diff --git a/addons/account/wizard/account_move_reversal.py b/addons/account/wizard/account_move_reversal.py
index d532f8bb716..c7e13569c08 100644
--- a/addons/account/wizard/account_move_reversal.py
+++ b/addons/account/wizard/account_move_reversal.py
@@ -26,14 +26,50 @@ class AccountMoveReversal(models.TransientModel):
('modify', 'Full refund and new draft invoice')
], string='Credit Method', required=True,
help='Choose how you want to credit this invoice. You cannot "modify" nor "cancel" if the invoice is already reconciled.')
- journal_id = fields.Many2one('account.journal', string='Use Specific Journal', help='If empty, uses the journal of the journal entry to be reversed.', check_company=True)
+ journal_id = fields.Many2one(
+ comodel_name='account.journal',
+ string='Use Specific Journal',
+ required=True,
+ compute='_compute_journal_id',
+ readonly=False,
+ store=True,
+ check_company=True,
+ help='If empty, uses the journal of the journal entry to be reversed.',
+ )
company_id = fields.Many2one('res.company', required=True, readonly=True)
+ available_journal_ids = fields.Many2many('account.journal', compute='_compute_available_journal_ids')
# computed fields
residual = fields.Monetary(compute="_compute_from_moves")
currency_id = fields.Many2one('res.currency', compute="_compute_from_moves")
move_type = fields.Char(compute="_compute_from_moves")
+ @api.depends('move_ids')
+ def _compute_journal_id(self):
+ for record in self:
+ if record.journal_id:
+ record.journal_id = record.journal_id
+ else:
+ journals = record.move_ids.journal_id.filtered(lambda x: x.active)
+ record.journal_id = journals[0] if journals else None
+
+ @api.depends('move_ids')
+ def _compute_available_journal_ids(self):
+ for record in self:
+ if record.move_ids:
+ record.available_journal_ids = self.env['account.journal'].search([
+ ('company_id', '=', record.company_id.id),
+ ('type', 'in', record.move_ids.journal_id.mapped('type')),
+ ])
+ else:
+ record.available_journal_ids = self.env['account.journal'].search([('company_id', '=', record.company_id.id)])
+
+ @api.constrains('journal_id', 'move_ids')
+ def _check_journal_type(self):
+ for record in self:
+ if record.journal_id.type not in record.move_ids.journal_id.mapped('type'):
+ raise UserError(_('Journal should be of type of reversed entry.'))
+
@api.model
def default_get(self, fields):
res = super(AccountMoveReversal, self).default_get(fields)
@@ -65,7 +101,7 @@ class AccountMoveReversal(models.TransientModel):
else _('Reversal of: %s', move.name),
'date': reverse_date,
'invoice_date': move.is_invoice(include_receipts=True) and (self.date or move.date) or False,
- 'journal_id': self.journal_id and self.journal_id.id or move.journal_id.id,
+ 'journal_id': self.journal_id.id,
'invoice_payment_term_id': None,
'invoice_user_id': move.invoice_user_id.id,
'auto_post': True if reverse_date > fields.Date.context_today(self) else False,
diff --git a/addons/account/wizard/account_move_reversal_view.xml b/addons/account/wizard/account_move_reversal_view.xml
index 2087b5165a4..0aa100b71e5 100644
--- a/addons/account/wizard/account_move_reversal_view.xml
+++ b/addons/account/wizard/account_move_reversal_view.xml
@@ -10,6 +10,7 @@
+
@@ -28,15 +29,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+