summaryrefslogtreecommitdiff
path: root/fixco_custom/models/invoice_reklas.py
diff options
context:
space:
mode:
Diffstat (limited to 'fixco_custom/models/invoice_reklas.py')
-rw-r--r--fixco_custom/models/invoice_reklas.py173
1 files changed, 173 insertions, 0 deletions
diff --git a/fixco_custom/models/invoice_reklas.py b/fixco_custom/models/invoice_reklas.py
new file mode 100644
index 0000000..d97d868
--- /dev/null
+++ b/fixco_custom/models/invoice_reklas.py
@@ -0,0 +1,173 @@
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError
+from datetime import datetime
+from odoo.http import request
+
+import logging
+
+_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', domain="[('move_type','=','entry')]")
+ pay_amt = fields.Float(string='Yang dibayarkan')
+ reklas_type = fields.Selection([
+ ('penjualan', 'Penjualan'),
+ ('pembelian', 'Pembelian'),
+ ], string='Reklas Tipe')
+
+ @api.onchange('reklas_type')
+ def _onchange_reklas_type(self):
+ 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_id and move.purchase_id.move_id:
+ cab = move.purchase_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_id and move.purchase_id.move_id:
+ cab = move.purchase_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:
+ # Ambil nama PO jika ada
+ po_name = invoice.purchase_id.name if invoice.purchase_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',
+ f" {invoice.name}" if invoice.name != self.reklas_id.name else '',
+ 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': 19
+ }
+
+ if invoice.purchase_id:
+ parameters_header['purchase_id'] = invoice.purchase_id.id
+
+ account_move = request.env['account.move'].create([parameters_header])
+ _logger.info('Success Reklas with %s' % account_move.name)
+
+ # ✅ Set Bill asal sebagai source document
+ if invoice.move_type == 'in_invoice':
+ 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': 578, # penerimaan belum alokasi
+ 'partner_id': invoice.partner_id.id,
+ 'currency_id': 12,
+ 'debit': self.pay_amt,
+ 'credit': 0,
+ 'name': ref_name
+ }
+ parameter_credit = {
+ 'move_id': account_move.id,
+ 'account_id': 347,
+ 'partner_id': invoice.partner_id.id,
+ 'currency_id': 12,
+ 'debit': 0,
+ 'credit': self.pay_amt,
+ 'name': ref_name
+ }
+ else: # pembelian
+ parameter_debit = {
+ 'move_id': account_move.id,
+ 'account_id': 388,
+ 'partner_id': invoice.partner_id.id,
+ 'currency_id': 12,
+ 'debit': self.pay_amt,
+ 'credit': 0,
+ 'name': ref_name
+ }
+ parameter_credit = {
+ 'move_id': account_move.id,
+ 'account_id': 579,
+ 'partner_id': invoice.partner_id.id,
+ 'currency_id': 12,
+ 'debit': 0,
+ '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',
+ 'res_model': 'account.move',
+ 'target': 'current',
+ 'view_id': False,
+ 'type': 'ir.actions.act_window',
+ 'res_id': account_move.id
+ }