# Copyright 2019 Akretion France (http://www.akretion.com) # @author Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models, _ from odoo.exceptions import UserError class AccountBankStatementSale(models.TransientModel): _name = 'account.bank.statement.sale' _description = 'Account Bank Statement Sale' statement_id = fields.Many2one('account.bank.statement', readonly=True) line_ids = fields.One2many( 'account.bank.statement.sale.line', 'wizard_id', string='Lines') @api.model def _prepare_line(self, move_line): vals = { 'move_line_id': move_line.id, 'sale_id': move_line.sale_id.id or False, 'date': move_line.date, 'credit': move_line.credit, 'partner_id': move_line.partner_id.id, 'account_id': move_line.account_id.id, 'name': move_line.name, 'company_currency_id': move_line.company_currency_id.id, } return vals @api.model def default_get(self, fields_list): res = super(AccountBankStatementSale, self).default_get(fields_list) assert self._context.get('active_model') == 'account.bank.statement' statement_id = self._context.get('active_id') statement = self.env['account.bank.statement'].browse(statement_id) res.update({ 'line_ids': [], 'statement_id': statement_id, }) for st_line in statement.line_ids: if ( st_line.amount > 0 and st_line.partner_id and st_line.journal_entry_ids): for line in st_line.journal_entry_ids: if ( line.account_id.user_type_id.type == 'receivable' and line.partner_id and not line.full_reconcile_id and not line.matched_debit_ids and not line.matched_credit_ids): lvals = self._prepare_line(line) res['line_ids'].append((0, 0, lvals)) if not res['line_ids']: raise UserError(_( "The bank statement '%s' doesn't contain any processed line " "with a positive amount which is not reconciled.") % statement.display_name) return res def validate(self): self.ensure_one() for line in self.line_ids: if line.move_line_id.sale_id != line.sale_id: line.move_line_id.write({'sale_id': line.sale_id.id or False}) if line.sale_id: line.move_line_id._sale_down_payment_hook() class AccountBankStatementSaleLine(models.TransientModel): _name = 'account.bank.statement.sale.line' _description = 'Account Bank Statement Sale Lines' wizard_id = fields.Many2one( 'account.bank.statement.sale', ondelete='cascade') move_line_id = fields.Many2one( 'account.move.line', string='Move Line', required=True) date = fields.Date(related='move_line_id.date') credit = fields.Monetary( related='move_line_id.credit', currency_field='company_currency_id') partner_id = fields.Many2one(related='move_line_id.partner_id') account_id = fields.Many2one(related='move_line_id.account_id') name = fields.Char(related='move_line_id.name') company_currency_id = fields.Many2one( related='move_line_id.company_currency_id') sale_id = fields.Many2one('sale.order', string='Sale Order')