summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/invoice_reklas.py
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2025-06-12 16:19:09 +0700
committerit-fixcomart <it@fixcomart.co.id>2025-06-12 16:19:09 +0700
commit741ccc28589388c1214f5da44b9a7d56ef32680c (patch)
tree11d17a2705f82f275b2efc04caa70450fd3736df /indoteknik_custom/models/invoice_reklas.py
parent6616f73259c9e146449af3f2579263b42270bf8b (diff)
Reapply "<hafid> commit"
This reverts commit 6616f73259c9e146449af3f2579263b42270bf8b.
Diffstat (limited to 'indoteknik_custom/models/invoice_reklas.py')
-rw-r--r--indoteknik_custom/models/invoice_reklas.py112
1 files changed, 89 insertions, 23 deletions
diff --git a/indoteknik_custom/models/invoice_reklas.py b/indoteknik_custom/models/invoice_reklas.py
index d10d4c31..5145e098 100644
--- a/indoteknik_custom/models/invoice_reklas.py
+++ b/indoteknik_custom/models/invoice_reklas.py
@@ -11,7 +11,7 @@ _logger = logging.getLogger(__name__)
class InvoiceReklas(models.TransientModel):
_name = 'invoice.reklas'
_description = "digunakan untuk reklas Uang Muka Penjualan"
- reklas_id = fields.Many2one('account.move', string='Nomor CAB')
+ reklas_id = fields.Many2one('account.move', string='Nomor CAB', domain="[('move_type','=','entry')]")
pay_amt = fields.Float(string='Yang dibayarkan')
reklas_type = fields.Selection([
('penjualan', 'Penjualan'),
@@ -20,42 +20,105 @@ class InvoiceReklas(models.TransientModel):
@api.onchange('reklas_type')
def _onchange_reklas_type(self):
- if self.reklas_type == 'penjualan':
- invoices = self.env['account.move'].browse(self._context.get('active_ids', []))
- self.pay_amt = invoices.amount_total
+ active_ids = self._context.get('active_ids', [])
+ if not active_ids:
+ return
+
+ move = self.env['account.move'].browse(active_ids[0])
+ cab = False
+
+ # Deteksi dari mana asal CAB
+ if move.move_type == 'entry':
+ cab = move
+ elif move.move_type == 'in_invoice':
+ if move.reklas_misc_id:
+ cab = move.reklas_misc_id
+ elif move.purchase_order_id and move.purchase_order_id.move_id:
+ cab = move.purchase_order_id.move_id
+
+ # Isi field Nomor CAB jika ditemukan
+ if cab:
+ self.reklas_id = cab.id
+
+ # Nilai yang dibayarkan harus tetap ambil dari invoice/bill
+ self.pay_amt = move.amount_total
+
+
+ @api.model
+ def default_get(self, fields):
+ res = super().default_get(fields)
+ active_ids = self._context.get('active_ids', [])
+ if active_ids:
+ move = self.env['account.move'].browse(active_ids[0])
+ cab = False
+
+ if move.move_type == 'entry':
+ cab = move
+ elif move.move_type == 'in_invoice':
+ if move.reklas_misc_id:
+ cab = move.reklas_misc_id
+ elif move.purchase_order_id and move.purchase_order_id.move_id:
+ cab = move.purchase_order_id.move_id
+
+ if cab:
+ res['reklas_id'] = cab.id
+
+ res['pay_amt'] = move.amount_total
+ return res
+
+
+ # @api.onchange('reklas_type')
+ # def _onchange_reklas_type(self):
+ # if self.reklas_type == 'penjualan':
+ # invoices = self.env['account.move'].browse(self._context.get('active_ids', []))
+ # self.pay_amt = invoices.amount_total
def create_reklas(self):
if not self.reklas_type:
raise UserError('Reklas Tipe harus diisi')
if not self.reklas_id:
raise UserError('Nomor CAB harus diisi')
+
invoices = self.env['account.move'].browse(self._context.get('active_ids', []))
current_time = datetime.now()
+
for invoice in invoices:
- if self.reklas_type == 'penjualan':
- ref_name = 'REKLAS '+self.reklas_id.name+" UANG MUKA PENJUALAN "+invoice.name+" "+invoice.partner_id.name
- else:
- ref_name = 'REKLAS '+self.reklas_id.name+" UANG MUKA PEMBELIAN "+invoice.name+" "+invoice.partner_id.name
- if self.reklas_type == 'penjualan':
- parameters_header = {
- 'ref': ref_name,
- 'date': current_time,
- 'journal_id': 13
- }
- else:
- parameters_header = {
- 'ref': ref_name,
- 'date': current_time,
- 'journal_id': 13
- }
+ # Ambil nama PO jika ada
+ po_name = invoice.purchase_order_id.name if invoice.purchase_order_id else ''
+
+ # Susun nama referensi dengan aman
+ ref_name = 'REKLAS {} UANG MUKA {} {}{} {}'.format(
+ self.reklas_id.name or '',
+ 'PENJUALAN' if self.reklas_type == 'penjualan' else 'PEMBELIAN',
+ invoice.name or '',
+ f" - {po_name}" if po_name else '',
+ invoice.partner_id.name or ''
+ )
+
+ # Header jurnal reklas
+ parameters_header = {
+ 'ref': ref_name,
+ 'date': current_time,
+ 'journal_id': 13
+ }
account_move = request.env['account.move'].create([parameters_header])
_logger.info('Success Reklas with %s' % account_move.name)
+ # ✅ Set Bill asal sebagai source document
+ account_move.bill_id = invoice.id
+
+ # Tambahkan info asal invoice ke jurnal (opsional)
+ account_move.invoice_origin = invoice.name
+
+ # Simpan hubungan balik ke invoice
+ invoice.reklas_misc_id = account_move.id
+
+ # Buat line debit dan kredit
if self.reklas_type == 'penjualan':
parameter_debit = {
'move_id': account_move.id,
- 'account_id': 668, # penerimaan belum alokasi
+ 'account_id': 668, # penerimaan belum alokasi
'partner_id': invoice.partner_id.id,
'currency_id': 12,
'debit': self.pay_amt,
@@ -71,7 +134,7 @@ class InvoiceReklas(models.TransientModel):
'credit': self.pay_amt,
'name': ref_name
}
- else:
+ else: # pembelian
parameter_debit = {
'move_id': account_move.id,
'account_id': 438,
@@ -90,7 +153,11 @@ class InvoiceReklas(models.TransientModel):
'credit': self.pay_amt,
'name': ref_name
}
+
+ # Simpan journal lines
request.env['account.move.line'].create([parameter_debit, parameter_credit])
+
+ # Tampilkan hasil jurnal reklas
return {
'name': _('Journal Entries'),
'view_mode': 'form',
@@ -100,4 +167,3 @@ class InvoiceReklas(models.TransientModel):
'type': 'ir.actions.act_window',
'res_id': account_move.id
}
- \ No newline at end of file