Files
2026-09-15 10:38:43 +07:00

72 lines
2.2 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class JournalModel extends CI_Model
{
public function createHeader(array $data)
{
if (!$this->db->insert('journals', $data)) {
throw new RuntimeException('Gagal membuat header jurnal.');
}
return (int) $this->db->insert_id();
}
public function addLines(array $lines)
{
if (empty($lines) || !$this->db->insert_batch('journal_details', $lines)) {
throw new RuntimeException('Gagal membuat detail jurnal.');
}
}
public function referenceExists($reference, $excludeId = 0)
{
$this->db->where('no_ref', $reference);
if ((int) $excludeId > 0) $this->db->where('id !=', (int) $excludeId);
return $this->db->count_all_results('journals') > 0;
}
public function sourceExists($type, $id)
{
return $this->db
->where('ref_type', $type)
->where('ref_id', $id)
->count_all_results('journals') > 0;
}
public function find($id)
{
return $this->db->get_where('journals', array('id' => (int) $id))->row();
}
public function findForUpdate($id)
{
return $this->db->query('SELECT * FROM journals WHERE id = ? FOR UPDATE', array((int) $id))->row();
}
public function lines($journalId)
{
return $this->db->where('journal_id', (int) $journalId)->order_by('id', 'ASC')->get('journal_details')->result_array();
}
public function updateStatus($journalId, $status, array $extra = array())
{
return $this->db->where('id', (int) $journalId)->update('journals', array_merge(array(
'status' => $status,
'updated_at' => date('Y-m-d H:i:s')
), $extra));
}
public function addStatusHistory($journalId, $from, $to, $userId, $notes = null)
{
return $this->db->insert('journal_status_histories', array(
'journal_id' => (int) $journalId,
'from_status' => $from,
'to_status' => $to,
'notes' => $notes,
'changed_by' => (int) $userId,
'changed_at' => date('Y-m-d H:i:s')
));
}
}