from odoo import models, api, fields from odoo.exceptions import AccessError, UserError, ValidationError class AccountMoveLine(models.Model): _inherit = "account.move.line" cost_centre_id = fields.Many2one('cost.centre', string='Cost Centre') is_required = fields.Boolean(string='Is Required', compute='_compute_is_required') analytic_account_ids = fields.Many2many('account.analytic.account', string='Analytic Account') line_no = fields.Integer('No', default=0) def action_gl_reconcile(self): lines = self journal = self.env['account.journal'].search([ ('suspense_account_id', '=', lines[0].account_id.id) ], limit=1) if not journal: raise UserError('Journal dengan suspense account ini tidak ditemukan!') statement = self.env['account.bank.statement'].create({ 'journal_id': journal.id, 'name': f'REKONSIL {journal.name} {lines[0].date.strftime("%d-%m-%Y")}', 'company_id': self.env.company.id, 'date': lines[0].date, }) widget_vals = [] st_line_ids = [] for line in lines: amount = line.debit - line.credit st_line = self.env['account.bank.statement.line'].create({ 'statement_id': statement.id, 'date': line.date or fields.Date.today(), 'payment_ref': line.name, 'partner_id': line.partner_id.id, 'amount': amount, 'ref': line.name, }) st_line_ids.append(st_line.id) widget_vals.append({ 'partner_id': st_line.partner_id.id, 'counterpart_aml_dicts': [{ 'counterpart_aml_id': line.id, 'debit': abs(amount) if amount < 0 else 0, 'credit': abs(amount) if amount > 0 else 0, 'name': line.name or '/', }], 'payment_aml_ids': [], 'new_aml_dicts': [], 'to_check': False, }) statement.button_post() self.env['account.reconciliation.widget'].process_bank_statement_line( st_line_ids, widget_vals ) # statement.button_validate_or_action() return { 'effect': { 'fadeout': 'slow', 'message': 'Statement + Auto Reconcile sukses besar 😎🔥', 'type': 'rainbow_man', } } @api.onchange('account_id') def _onchange_account_id(self): for account in self: analytic_account = account.account_id.analytic_tag_ids account.analytic_tag_ids = analytic_account @api.onchange('account_id') def _compute_is_required(self): for account in self: if account.account_id.code and account.account_id.code[0] in ['6', '7']: account.is_required = True else: account.is_required = False @api.model_create_multi def create(self, vals_list): for vals in vals_list: if 'move_id' in vals: move = self.env['account.move'].browse(vals['move_id']) if move.move_type == 'entry' and move.is_hr == True: vals['name'] = move.ref return super().create(vals_list)