Files
bank-payment/account_payment_order/models/account_payment_mode.py
Jordi Ballester ee3c27b747 When the user looks for open payables or receivables, in the
context of payment orders, she should ocus on the amount that
is due to be paid. In this method we are forcing to display both
the amount due in company and in the invoice currency.

We then hide the fields debit and credit, because they add no value.
2017-11-15 14:58:18 +01:00

149 lines
6.4 KiB
Python

# © 2009 EduSense BV (<http://www.edusense.nl>)
# © 2011-2013 Therp BV (<https://therp.nl>)
# © 2014-2016 Serv. Tecnol. Avanzados - Pedro M. Baeza
# © 2016 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class AccountPaymentMode(models.Model):
"""This corresponds to the object payment.mode of v8 with some
important changes"""
_inherit = "account.payment.mode"
payment_order_ok = fields.Boolean(
string='Selectable in Payment Orders', default=True)
no_debit_before_maturity = fields.Boolean(
string="Disallow Debit Before Maturity Date",
help="If you activate this option on an Inbound payment mode, "
"you will have an error message when you confirm a debit order "
"that has a payment line with a payment date before the maturity "
"date.")
# Default options for the "payment.order.create" wizard
default_payment_mode = fields.Selection([
('same', 'Same'),
('same_or_null', 'Same or empty'),
('any', 'Any'),
], string='Payment Mode on Invoice', default='same')
default_journal_ids = fields.Many2many(
'account.journal',
string="Journals Filter",
domain="[('company_id', '=', company_id)]"
)
default_invoice = fields.Boolean(
string='Linked to an Invoice or Refund', default=False)
default_target_move = fields.Selection([
('posted', 'All Posted Entries'),
('all', 'All Entries'),
], string='Target Moves', default='posted')
default_date_type = fields.Selection([
('due', 'Due'),
('move', 'Move'),
], default='due', string="Type of Date Filter")
# default option for account.payment.order
default_date_prefered = fields.Selection([
('now', 'Immediately'),
('due', 'Due Date'),
('fixed', 'Fixed Date'),
], string='Default Payment Execution Date')
group_lines = fields.Boolean(
string="Group Transactions in Payment Orders", default=True,
help="If this mark is checked, the transaction lines of the "
"payment order will be grouped upon confirmation of the payment "
"order.The grouping will be done only if the following "
"fields matches:\n"
"* Partner\n"
"* Currency\n"
"* Destination Bank Account\n"
"* Payment Date\n"
"and if the 'Communication Type' is 'Free'\n"
"(other modules can set additional fields to restrict the "
"grouping.)")
generate_move = fields.Boolean(
string='Generate Accounting Entries On File Upload', default=True)
offsetting_account = fields.Selection([
('bank_account', 'Bank Account'),
('transfer_account', 'Transfer Account'),
], string='Offsetting Account', default='bank_account')
transfer_account_id = fields.Many2one(
'account.account', string='Transfer Account',
domain=[('reconcile', '=', True)],
help="Pay off lines in 'file uploaded' payment orders with a move on "
"this account. You can only select accounts "
"that are marked for reconciliation")
transfer_journal_id = fields.Many2one(
'account.journal', string='Transfer Journal',
help='Journal to write payment entries when confirming '
'payment/debit orders of this mode')
move_option = fields.Selection([
('date', 'One move per payment date'),
('line', 'One move per payment line'),
], string='Move Option', default='date')
post_move = fields.Boolean(string='Post Move', default=True)
@api.multi
@api.constrains(
'generate_move', 'offsetting_account',
'transfer_account_id', 'transfer_journal_id', 'move_option')
def transfer_move_constrains(self):
for mode in self:
if mode.generate_move:
if not mode.offsetting_account:
raise ValidationError(_(
"On the payment mode '%s', you must select an "
"option for the 'Offsetting Account' parameter")
% mode.name)
elif mode.offsetting_account == 'transfer_account':
if not mode.transfer_account_id:
raise ValidationError(_(
"On the payment mode '%s', you must "
"select a value for the 'Transfer Account'.")
% mode.name)
if not mode.transfer_journal_id:
raise ValidationError(_(
"On the payment mode '%s', you must "
"select a value for the 'Transfer Journal'.")
% mode.name)
if not mode.move_option:
raise ValidationError(_(
"On the payment mode '%s', you must "
"choose an option for the 'Move Option' "
"parameter.") % mode.name)
@api.onchange('payment_method_id')
def payment_method_id_change(self):
if self.payment_method_id:
ajo = self.env['account.journal']
aj_ids = []
if self.payment_method_id.payment_type == 'outbound':
aj_ids = ajo.search([
('type', 'in', ('purchase_refund', 'purchase')),
('company_id', '=', self.company_id.id)
]).ids
elif self.payment_method_id.payment_type == 'inbound':
aj_ids = ajo.search([
('type', 'in', ('sale_refund', 'sale')),
('company_id', '=', self.company_id.id)
]).ids
self.default_journal_ids = [(6, 0, aj_ids)]
@api.onchange('generate_move')
def generate_move_change(self):
if self.generate_move:
# default values
self.offsetting_account = 'bank_account'
self.move_option = 'date'
else:
self.offsetting_account = False
self.transfer_account_id = False
self.transfer_journal_id = False
self.move_option = False
@api.onchange('offsetting_account')
def offsetting_account_change(self):
if self.offsetting_account == 'bank_account':
self.transfer_account_id = False
self.transfer_journal_id = False