# -*- coding: utf-8 -*- ############################################################################## # # Cybrosys Technologies Pvt. Ltd. # Copyright (C) 2018-TODAY Cybrosys Technologies(). # Author: Fasluca() # you can modify it under the terms of the GNU AFFERO # GENERAL PUBLIC LICENSE (AGPL v3), Version 3. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. # # You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE # GENERAL PUBLIC LICENSE (AGPL v3) along with this program. # If not, see . # ############################################################################## from odoo import models, fields, api, _ from odoo.exceptions import UserError class AccountRegisterPayments(models.TransientModel): _inherit = "account.register.payments" bank_reference = fields.Char(copy=False) cheque_reference = fields.Char(copy=False) effective_date = fields.Date('Effective Date', help='Effective date of PDC', copy=False, default=False) def get_payment_vals(self): res = super(AccountRegisterPayments, self).get_payment_vals() if self.payment_method_id == self.env.ref('account_check_printing.account_payment_method_check'): res.update({ 'check_amount_in_words': self.check_amount_in_words, 'check_manual_sequencing': self.check_manual_sequencing, 'effective_date': self.effective_date, }) return res class AccountPayment(models.Model): _inherit = "account.payment" bank_reference = fields.Char(copy=False) cheque_reference = fields.Char(copy=False) effective_date = fields.Date('Effective Date', help='Effective date of PDC', copy=False, default=False) @api.multi def print_checks(self): """ Check that the recordset is valid, set the payments state to sent and call print_checks() """ # Since this method can be called via a client_action_multi, we need to make sure the received records are what we expect self = self.filtered(lambda r: r.payment_method_id.code in ['check_printing', 'pdc'] and r.state != 'reconciled') if len(self) == 0: raise UserError(_("Payments to print as a checks must have 'Check' or 'PDC' selected as payment method and " "not have already been reconciled")) if any(payment.journal_id != self[0].journal_id for payment in self): raise UserError(_("In order to print multiple checks at once, they must belong to the same bank journal.")) if not self[0].journal_id.check_manual_sequencing: # The wizard asks for the number printed on the first pre-printed check # so payments are attributed the number of the check the'll be printed on. last_printed_check = self.search([ ('journal_id', '=', self[0].journal_id.id), ('check_number', '!=', 0)], order="check_number desc", limit=1) next_check_number = last_printed_check and last_printed_check.check_number + 1 or 1 return { 'name': _('Print Pre-numbered Checks'), 'type': 'ir.actions.act_window', 'res_model': 'print.prenumbered.checks', 'view_type': 'form', 'view_mode': 'form', 'target': 'new', 'context': { 'payment_ids': self.ids, 'default_next_check_number': next_check_number, } } else: self.filtered(lambda r: r.state == 'draft').post() self.write({'state': 'sent'}) return self.do_print_checks() def _get_move_vals(self, journal=None): """ Return dict to create the payment move """ journal = journal or self.journal_id if not journal.sequence_id: raise UserError(_('Configuration Error !'), _('The journal %s does not have a sequence, please specify one.') % journal.name) if not journal.sequence_id.active: raise UserError(_('Configuration Error !'), _('The sequence of journal %s is deactivated.') % journal.name) name = self.move_name or journal.with_context(ir_sequence_date=self.payment_date).sequence_id.next_by_id() if self.payment_method_code =='pdc': date = self.effective_date else: date = self.payment_date return { 'name': name, 'date': date, 'ref': self.communication or '', 'company_id': self.company_id.id, 'journal_id': journal.id, }