from odoo import models, api, fields, _ from odoo.exceptions import AccessError, UserError, ValidationError class AccountMoveLine(models.Model): _inherit = "account.move.line" qty_outstanding = fields.Float(string='Qty Outstanding', compute='_compute_qty_outstanding') invoice_marketplace = fields.Text("Invoice Mearketplace", compute='_compute_invoice_marketplace') def action_gl_reconcile(self): lines = self # 1️⃣ Create header bank statement account_bank_statement = self.env['account.bank.statement'].create({ 'journal_id': 25, # pastiin ini journal bank 'name': 'REKONSIL KAS IN {}'.format(fields.Datetime.now()), 'company_id': 4, 'date': fields.Date.today(), }) # 2️⃣ Create statement lines dari GL statement_lines_vals = [] for line in lines: # amount logic: # debit = uang masuk # credit = uang keluar amount = line.debit - line.credit statement_lines_vals.append({ 'statement_id': account_bank_statement.id, 'date': line.date or fields.Date.today(), 'payment_ref': line.name, 'partner_id': line.partner_id.id if line.partner_id else False, 'amount': amount, 'ref': line.move_id.name, }) self.env['account.bank.statement.line'].create(statement_lines_vals) return { 'effect': { 'fadeout': 'slow', 'message': 'Statement + lines berhasil dibuat! Tinggal reconcile 😎🔥', 'type': 'rainbow_man', } } @api.depends( 'move_id', 'move_id.line_ids.matched_debit_ids', 'move_id.line_ids.matched_credit_ids', ) def _compute_invoice_marketplace(self): for line in self: line.invoice_marketplace = False move = line.move_id if not move: continue # invoice if move.move_type in ('out_invoice', 'in_invoice'): line.invoice_marketplace = move.invoice_marketplace # kas?/entries else: line.invoice_marketplace = move.reklas_used_by.invoice_marketplace if move.reklas_used_by else False def _compute_qty_outstanding(self): for line in self: qty_received = line.purchase_line_id.qty_received qty_billed = line.purchase_line_id.qty_invoiced line.qty_outstanding = qty_received - qty_billed @api.onchange('quantity') def _onchange_quantity(self): for line in self: if line.move_id.move_type == 'in_invoice' and line.id.origin: if line and line.quantity > line.qty_outstanding and line.qty_outstanding > 0: raise UserError(_("Quantity Tidak Boleh Melebihi Qty Outstanding"))