<?php
class Bill extends MY_Controller
{
    var $db_onedev;
    public function index()
    {
        echo "Bill API";
    }
    public function __construct()
    {
        parent::__construct();
        $this->db_onedev = $this->load->database("onedev", true);
    }

    public function add_notes($orderid)
    {
        $sql = "SELECT SupplierPaymentSupplierInvoiceID as note_order_id,
				SupplierPaymentID as note_id,
				SupplierPaymentDetailSupplierInvoiceDetailID as detail_id,
				SupplierPaymentDate as note_date,
				SupplierPaymentNumber as note_number,
				GROUP_CONCAT(DISTINCT coaDescription separator ' , ') as paymenttypes_name,
				SUM(SupplierPaymentDetailAmount) as note_amount,
				n.M_UserUsername as note_user,
				SupplierPaymentDetailIsActive as note_active,
				'xxx' as tests,
				'N' as show_detail,
				SupplierPaymentNote as keterangan,
				SupplierPaymentCoaID,
				coaID,
				coaDescription,
				SupplierPaymentIsConfirm,
				CONCAT('Confirmed by : ',c.M_UserUsername, ' ',DATE_FORMAT(SupplierPaymentConfirmDate,'%d-%m-%Y %H:%i')) as d_confirm,
				SupplierPaymentIsApproved,
				CONCAT('Approved by : ',a.M_UserUsername, ' ',DATE_FORMAT(SupplierPaymentApprovedDate,'%d-%m-%Y %H:%i')) as d_approved,
				CONCAT('Verified by : ',b.M_UserUsername, ' ',DATE_FORMAT(SupplierPaymentVerifDate,'%d-%m-%Y %H:%i')) as d_verif
			FROM supplier_payment
			JOIN supplier_payment_detail ON SupplierPaymentDetailSupplierPaymentID = SupplierPaymentID AND SupplierPaymentDetailIsActive = 'Y'
			LEFT JOIN coa
			    ON SupplierPaymentCoaID = coaID
			LEFT JOIN m_user n
			    ON SupplierPaymentUserID = n.M_UserID
			LEFT JOIN m_user c
			    ON SupplierPaymentConfirmUserID = c.M_UserID
			LEFT JOIN m_user a
			    ON SupplierPaymentApprovedUserID = a.M_UserID
			LEFT JOIN m_user b
			    ON SupplierPaymentVerifUserID = b.M_UserID
			WHERE SupplierPaymentSupplierInvoiceID = {$orderid}
				AND SupplierPaymentIsActive = 'Y'
			GROUP BY SupplierPaymentID";
        $query = $this->db_onedev->query($sql);
        if ($query) {
            $rows = $query->result_array();
            if ($rows) {
                foreach ($rows as $k => $v) {
                    $rows[$k]['tests'] = $this->add_tests($v['note_id']);
                }
            }
            return $rows;
        } else {
            $this->sys_error_db("get notes", $this->db_onedev);
            exit;
        }
    }

    public function add_notes_downpayment($orderid)
    {
        $sql = "SELECT SupplierPaymentSupplierDownpaymentID AS note_order_id,
                SupplierPaymentID AS note_id,
                SupplierDownpaymentID AS detail_id,
                SupplierPaymentDate AS note_date,
                SupplierPaymentNumber AS note_number,
                GROUP_CONCAT(DISTINCT coaDescription separator ' , ') AS paymenttypes_name,
                SUM(SupplierDownpaymentAmount) AS note_amount,
                n.M_UserUsername AS note_user,
                SupplierDownpaymentIsActive AS note_active,
                'N' AS show_detail,
                SupplierPaymentNote AS keterangan,
                SupplierPaymentCoaID,
                coaID,
                coaDescription,
                SupplierPaymentIsConfirm,
                CONCAT(
                    'Confirmed by : ',c.M_UserUsername, ' ',
                    DATE_FORMAT(SupplierPaymentConfirmDate, '%d-%m-%Y %H:%i')
                ) AS d_confirm,
                SupplierPaymentIsApproved,
                CONCAT(
                    'Approved by : ',a.M_UserUsername, ' ',
                    DATE_FORMAT(SupplierPaymentApprovedDate,'%d-%m-%Y %H:%i')
                ) AS d_approved,
                CONCAT(
                    'Verified by : ',b.M_UserUsername, ' ',
                    DATE_FORMAT(SupplierPaymentVerifDate,'%d-%m-%Y %H:%i')
                ) AS d_verif
            FROM supplier_payment
            JOIN supplier_downpayment
                ON SupplierDownpaymentID = SupplierPaymentSupplierDownpaymentID
                AND SupplierDownpaymentIsActive = 'Y'
            LEFT JOIN coa
                ON SupplierPaymentCoaID = coaID
            LEFT JOIN m_user n
                ON SupplierPaymentUserID = n.M_UserID
            LEFT JOIN m_user c
                ON SupplierPaymentConfirmUserID = c.M_UserID
            LEFT JOIN m_user a
                ON SupplierPaymentApprovedUserID = a.M_UserID
            LEFT JOIN m_user b
                ON SupplierPaymentVerifUserID = b.M_UserID
            WHERE SupplierPaymentSupplierDownpaymentID = {$orderid}
                AND SupplierPaymentIsActive = 'Y'
            GROUP BY SupplierPaymentID";
        $query = $this->db_onedev->query($sql);
        if ($query) {
            $rows = $query->result_array();
            return $rows ?: [];
        } else {
            $this->sys_error_db("get DP notes", $this->db_onedev);
            exit;
        }
    }

    public function add_tagihans($orderid)
    {
        $sql = "SELECT SupplierInvoiceID as tagihan_id,
                PurchaseOrderNumber as tagihan_number,
                jurnalTxDescription as pasien,
                jurnalTxCredit as tagihan_total,
                IF(SupplierPaymentDetailID IS NULL , jurnalTxCredit, jurnalTxCredit - SUM(SupplierPaymentDetailAmount)) as tagihan_tagihan,
                0 as tagihan_bayar,
                DATE_FORMAT(SupplierInvoiceDueDate,'%d-%m-%Y') as tagihan_duedate,
                SupplierInvoiceIsActive as tagihan_active,
                'N' as show_detail,
                jurnalTxID SupplierInvoiceDetailID,
                PurchaseOrderID SupplierInvoiceDetailPurchaseOrderID
            FROM supplier_invoice
            JOIN purchase_order
                ON SupplierInvoicePurchaseOrderID = PurchaseOrderID
            JOIN jurnal_addon
                ON jurnalAddOnValue = SupplierInvoiceNumber
            JOIN jurnal_tx
                ON jurnalTxJurnalID = jurnalAddOnJurnalID
                AND jurnalTxCredit <> 0
                AND jurnalTxCoaID <> 563
            LEFT JOIN supplier_payment
                ON SupplierPaymentSupplierInvoiceID = SupplierInvoiceID
                AND SupplierInvoiceIsActive = 'Y'
            LEFT JOIN supplier_payment_detail
                ON SupplierPaymentDetailSupplierPaymentID = SupplierPaymentID
                AND  SupplierPaymentDetailSupplierInvoiceDetailID = jurnalTxID
                AND SupplierPaymentDetailIsActive = 'Y'
            WHERE SupplierInvoiceID = ?
            GROUP BY jurnalTxID";
        $query = $this->db_onedev->query($sql, [$orderid]);
        if ($query) {
            $rows = $query->result_array();
            return $rows;
        } else {
            $this->sys_error_db("get notes", $this->db_onedev);
            exit;
        }
    }

    public function add_tests($orderid)
    {
        $sql = "SELECT
                SupplierPaymentSupplierInvoiceID as note_order_id,
                SupplierPaymentID as note_id,
                SupplierPaymentDate as note_date,
                SupplierPaymentNumber as note_number,
                GROUP_CONCAT(coaDescription separator ' , ') as paymenttypes_name,
                SUM(SupplierPaymentDetailAmount) as note_amount,
                M_UserUsername as note_user,
                SupplierPaymentDetailIsActive as note_active,
                PurchaseOrderNumber,
                SupplierInvoiceDetailTotal,
                SupplierPaymentDetailAmount
            FROM supplier_payment
            JOIN supplier_payment_detail
                ON SupplierPaymentDetailSupplierPaymentID = SupplierPaymentID
            LEFT JOIN supplier_invoice_detail
                ON SupplierPaymentDetailSupplierInvoiceDetailID = SupplierInvoiceDetailID
            LEFT JOIN purchase_order
                ON SupplierInvoiceDetailPurchaseOrderID = PurchaseOrderID
            JOIN coa
                ON SupplierPaymentCoaID = coaID
            LEFT JOIN m_user
                ON SupplierPaymentDetailUserID = M_UserID
            WHERE SupplierPaymentID = {$orderid}
            GROUP BY SupplierPaymentDetailID";
        $query = $this->db_onedev->query($sql);
        if ($query) {
            $rows = $query->result_array();
            if ($rows) {
            }
            return $rows;
        } else {
            $this->sys_error_db("get notes", $this->db_onedev);
            exit;
        }
    }

    public function search_old()
    {
        if (! $this->isLogin) {
            $this->sys_error("Invalid Token");
            exit;
        }

        $prm = $this->sys_input;
        $supplier   = $prm["supplier"];
        $search     = $prm["search"];
        $status     = $prm["status"];
        $startdate  = $prm["startdate"];
        $enddate    = $prm["enddate"];
        $regionalid = $this->sys_user['S_RegionalID'];

        $number_limit  = 10;
        $number_offset = ((int)$prm['current_page'] - 1) * $number_limit;

        // ── WHERE ────────────────────────────────────────────────
        $where = " si.SupplierInvoiceIsActive = 'Y'
            AND sp.SupplierPaymentIsApproved = 'Y'
            AND sp.SupplierPaymentIsVerif = 'Y'
            AND sp.SupplierPaymentIsConfirm = ?
            AND (si.SupplierInvoiceNumber LIKE ?
                 OR si.SupplierInvoiceSupplierInvoiceNumber LIKE ?)
            AND sup.SupplierName LIKE ?
            AND rop.ReceiveOrderPoS_RegionalID = ?
            AND si.SupplierInvoiceDraftPaymentDate BETWEEN ? AND ? ";

        $where_params = [
            $status,
            '%' . $search . '%',
            '%' . $search . '%',
            '%' . $supplier . '%',
            $regionalid,
            $startdate,
            $enddate,
        ];

        // ── COUNT ────────────────────────────────────────────────
        $sql_count = "
            SELECT count(*) as total
            FROM supplier_invoice si
            JOIN jurnal_addon ja ON ja.jurnalAddOnValue = si.SupplierInvoiceNumber
            JOIN receive_order_po rop ON rop.ReceiveOrderPoID = si.SupplierInvoiceReceiveOrderPoID
            LEFT JOIN supplier_payment sp
                ON sp.SupplierPaymentSupplierInvoiceID = si.SupplierInvoiceID
                AND sp.SupplierPaymentIsActive = 'Y'
            LEFT JOIN supplier sup ON sup.SupplierID = si.SupplierInvoiceSupplierID
            WHERE $where";

        $query = $this->db_onedev->query($sql_count, $where_params);

        $tot_count = 0;
        $tot_page  = 0;
        if ($query) {
            $tot_count = $query->result_array()[0]["total"];
            $tot_page  = ceil($tot_count / $number_limit);
        } else {
            $this->sys_error_db("supplier_invoice count", $this->db_onedev);
            exit;
        }

        // ── DATA — only columns the frontend actually reads ──────
        $sql_data = "
            SELECT
                si.SupplierInvoiceID,
                si.SupplierInvoiceNumber,
                si.SupplierInvoiceDraftPaymentDate,
                si.SupplierInvoiceIsLunas                    AS flaglunas,
                si.SupplierInvoiceSupplierInvoiceNumber,
                DATE_FORMAT(
                    IFNULL(si.SupplierInvoiceSupplierInvoiceDate,''),'%d-%m-%Y'
                )                                             AS tanggalinvoice,
                sup.SupplierName,
                sp.SupplierPaymentID,
                sp.SupplierPaymentIsConfirm,
                IFNULL(sp.SupplierPaymentCashierNumber,'')    AS SupplierPaymentCashierNumber,
                DATE_FORMAT(
                    si.SupplierInvoiceDraftPaymentDate,'%d-%m-%Y'
                )                                             AS tanggalbayar,
                0                                             AS totalbill,
                0                                             AS paid,
                0                                             AS unpaid,
                ''                                            AS SupplierPaymentNumber,
                0                                             AS SupplierPaymentAmount,
                ''                                            AS SupplierPaymentDate,
                ''                                            AS notes,
                ''                                            AS tagihans,
                0                                             AS xrounding,
                ''                                            AS chex
            FROM supplier_invoice si
            JOIN jurnal_addon ja ON ja.jurnalAddOnValue = si.SupplierInvoiceNumber
            JOIN receive_order_po rop ON rop.ReceiveOrderPoID = si.SupplierInvoiceReceiveOrderPoID
            LEFT JOIN supplier_payment sp
                ON sp.SupplierPaymentSupplierInvoiceID = si.SupplierInvoiceID
                AND sp.SupplierPaymentIsActive = 'Y'
            LEFT JOIN supplier sup ON sup.SupplierID = si.SupplierInvoiceSupplierID
            WHERE $where
            GROUP BY si.SupplierInvoiceID
            ORDER BY si.SupplierInvoiceID ASC
            LIMIT ? OFFSET ?";

        $data_params = array_merge($where_params, [$number_limit, $number_offset]);
        $query = $this->db_onedev->query($sql_data, $data_params);
        $rows  = $query->result_array();

        // ── ENRICH ───────────────────────────────────────────────
        if ($rows) {
            foreach ($rows as $k => $v) {
                $rows[$k]['chex'] = false;
                $inv_id = $v['SupplierInvoiceID'];

                $s_payment = $this->db_onedev->query("
                    SELECT
                        GROUP_CONCAT(SupplierPaymentNumber SEPARATOR ', ') as SupplierPaymentNumber,
                        SUM(IFNULL(SupplierPaymentAmount,0))                as SupplierPaymentAmount,
                        GROUP_CONCAT(
                            DATE_FORMAT(SupplierPaymentDate,'%d-%m-%Y')
                            SEPARATOR ', '
                        )                                                   as SupplierPaymentDate
                    FROM supplier_payment
                    WHERE SupplierPaymentIsActive = 'Y'
                        AND SupplierPaymentSupplierInvoiceID = ?",
                    [$inv_id]
                )->row();

                $s_jurnal = $this->db_onedev->query("
                    SELECT SUM(jurnalTxCredit) totalbill
                    FROM supplier_invoice si
                    JOIN jurnal_addon ja ON ja.jurnalAddOnValue = si.SupplierInvoiceNumber
                    JOIN jurnal_tx jt
                        ON jt.jurnalTxJurnalID = ja.jurnalAddOnJurnalID
                        AND jt.jurnalTxCredit <> 0
                        AND jt.jurnalTxCoaID <> 563
                    WHERE si.SupplierInvoiceID = ?
                    GROUP BY si.SupplierInvoiceID",
                    [$inv_id]
                )->row();

                $amount = $s_payment->SupplierPaymentAmount
                    ? $s_payment->SupplierPaymentAmount
                    : "0.00";
                $unpaid = (float)$s_jurnal->totalbill - (float)$amount;

                $rows[$k]['SupplierPaymentNumber'] = $s_payment->SupplierPaymentNumber;
                $rows[$k]['SupplierPaymentAmount'] = $amount;
                $rows[$k]['SupplierPaymentDate']   = $s_payment->SupplierPaymentDate;
                $rows[$k]['paid']                  = $amount;
                $rows[$k]['totalbill']             = $s_jurnal->totalbill
                    ? $s_jurnal->totalbill
                    : "0.00";
                $rows[$k]['unpaid']                = number_format($unpaid, 2, '.', '');

                $rows[$k]['notes']    = $this->add_notes($inv_id);
                $rows[$k]['tagihans'] = $this->add_tagihans($inv_id);
            }
        }

        $result = array("total" => $tot_page, "records" => $rows);
        $this->sys_ok($result);
        exit;
    }

    public function search()
    {
        if (! $this->isLogin) {
            $this->sys_error("Invalid Token");
            exit;
        }

        $prm = $this->sys_input;
        $supplier   = $prm["supplier"];
        $search     = $prm["search"];
        $status     = $prm["status"];
        $startdate  = $prm["startdate"];
        $enddate    = $prm["enddate"];
        $regionalid = $this->sys_user['S_RegionalID'];

        $number_limit  = 10;
        $number_offset = ((int)$prm['current_page'] - 1) * $number_limit;

        // ── INVOICE branch WHERE ─────────────────────────────────
        $inv_where = " si.SupplierInvoiceIsActive = 'Y'
            AND rop.ReceiveOrderPoS_RegionalID = ? ";

        $inv_params = [$regionalid];

        // ── DOWNPAYMENT branch WHERE ─────────────────────────────
        $dp_where = " dp.SupplierDownpaymentIsActive = 'Y'
            AND po.PurchaseOrderS_RegionalID = ? ";

        $dp_params = [$regionalid];

        // ── UNION base ───────────────────────────────────────────
        $sql_base = "
            SELECT
                si.SupplierInvoiceID,
                si.SupplierInvoiceNumber,
                si.SupplierInvoiceDraftPaymentDate,
                si.SupplierInvoiceDraftPaymentDate                 AS filter_date,
                si.SupplierInvoiceIsLunas                          AS flaglunas,
                si.SupplierInvoiceSupplierInvoiceNumber,
                DATE_FORMAT(
                    IFNULL(si.SupplierInvoiceSupplierInvoiceDate,''),'%d-%m-%Y'
                )                                                   AS tanggalinvoice,
                sup.SupplierName,
                sp.SupplierPaymentID,
                sp.SupplierPaymentIsConfirm,
                sp.SupplierPaymentIsApproved,
                sp.SupplierPaymentIsVerif,
                sp.SupplierPaymentIsActive,
                IFNULL(sp.SupplierPaymentCashierNumber,'')          AS SupplierPaymentCashierNumber,
                DATE_FORMAT(
                    si.SupplierInvoiceDraftPaymentDate,'%d-%m-%Y'
                )                                                   AS tanggalbayar,
                0                                                   AS totalbill,
                0                                                   AS paid,
                0                                                   AS unpaid,
                ''                                                  AS SupplierPaymentNumber,
                0                                                   AS SupplierPaymentAmount,
                ''                                                  AS SupplierPaymentDate,
                ''                                                  AS notes,
                ''                                                  AS tagihans,
                0                                                   AS xrounding,
                ''                                                  AS chex,
                'INVOICE'                                           AS type
            FROM supplier_invoice si
            JOIN jurnal_addon ja ON ja.jurnalAddOnValue = si.SupplierInvoiceNumber
            JOIN receive_order_po rop ON rop.ReceiveOrderPoID = si.SupplierInvoiceReceiveOrderPoID
            LEFT JOIN supplier_payment sp
                ON sp.SupplierPaymentSupplierInvoiceID = si.SupplierInvoiceID
                AND sp.SupplierPaymentIsActive = 'Y'
            LEFT JOIN supplier sup ON sup.SupplierID = si.SupplierInvoiceSupplierID
            WHERE $inv_where
            GROUP BY si.SupplierInvoiceID

            UNION ALL

            SELECT
                dp.SupplierDownpaymentID * -1                      AS SupplierInvoiceID,
                CONCAT('DP-', po.PurchaseOrderNumber)              AS SupplierInvoiceNumber,
                dp.SupplierDownpaymentDueDate                      AS SupplierInvoiceDraftPaymentDate,
                dp.SupplierDownpaymentDueDate                      AS filter_date,
                dp.SupplierDownpaymentIsLunas                      AS flaglunas,
                ''                                                 AS SupplierInvoiceSupplierInvoiceNumber,
                DATE_FORMAT(dp.SupplierDownpaymentDate,'%d-%m-%Y') AS tanggalinvoice,
                dp_sup.SupplierName                                AS SupplierName,
                sp.SupplierPaymentID,
                sp.SupplierPaymentIsConfirm,
                sp.SupplierPaymentIsApproved,
                sp.SupplierPaymentIsVerif,
                sp.SupplierPaymentIsActive,
                IFNULL(sp.SupplierPaymentCashierNumber,'')          AS SupplierPaymentCashierNumber,
                DATE_FORMAT(
                    dp.SupplierDownpaymentDueDate,'%d-%m-%Y'
                )                                                   AS tanggalbayar,
                dp.SupplierDownpaymentAmount                        AS totalbill,
                CASE WHEN dp.SupplierDownpaymentStatus = 'Paid'
                     THEN dp.SupplierDownpaymentAmount
                     ELSE 0 END                                     AS paid,
                CASE WHEN dp.SupplierDownpaymentStatus = 'Paid'
                     THEN 0
                     ELSE dp.SupplierDownpaymentAmount END          AS unpaid,
                ''                                                  AS SupplierPaymentNumber,
                0                                                   AS SupplierPaymentAmount,
                ''                                                  AS SupplierPaymentDate,
                ''                                                  AS notes,
                ''                                                  AS tagihans,
                0                                                   AS xrounding,
                ''                                                  AS chex,
                'DP'                                                AS type
            FROM supplier_payment sp
            JOIN supplier_downpayment dp
                ON dp.SupplierDownpaymentID = sp.SupplierPaymentSupplierDownpaymentID
            JOIN supplier dp_sup
                ON dp_sup.SupplierID = dp.SupplierDownpaymentSupplierID
            JOIN purchase_order po
                ON po.PurchaseOrderID = dp.SupplierDownpaymentPurchasOrderID
            WHERE $dp_where";

        // ── Outer common filters ─────────────────────────────────
        $outer_where = " SupplierPaymentIsActive = 'Y'
            AND SupplierPaymentIsApproved = 'Y'
            AND SupplierPaymentIsVerif = 'Y'
            AND SupplierPaymentIsConfirm = ?
            AND (SupplierInvoiceNumber LIKE ? OR SupplierInvoiceSupplierInvoiceNumber LIKE ?)
            AND SupplierName LIKE ?
            AND filter_date BETWEEN ? AND ? ";

        $outer_params = [
            $status,
            '%' . $search . '%',
            '%' . $search . '%',
            '%' . $supplier . '%',
            $startdate,
            $enddate,
        ];

        // ── COUNT ────────────────────────────────────────────────
        $sql_count = "
            SELECT COUNT(*) AS total
            FROM ($sql_base) AS combined
            WHERE $outer_where";

        $count_params = array_merge($inv_params, $dp_params, $outer_params);
        $query = $this->db_onedev->query($sql_count, $count_params);

        $tot_count = 0;
        $tot_page  = 0;
        if ($query) {
            $tot_count = $query->result_array()[0]["total"];
            $tot_page  = ceil($tot_count / $number_limit);
        } else {
            $this->sys_error_db("supplier payment count", $this->db_onedev);
            exit;
        }

        // ── DATA ─────────────────────────────────────────────────
        $sql_data = "
            SELECT * FROM ($sql_base) AS combined
            WHERE $outer_where
            ORDER BY SupplierInvoiceID ASC
            LIMIT ? OFFSET ?";

        $data_params = array_merge($inv_params, $dp_params, $outer_params, [$number_limit, $number_offset]);
        $query = $this->db_onedev->query($sql_data, $data_params);
        $rows  = $query->result_array();

        // ── ENRICH ───────────────────────────────────────────────
        if ($rows) {
            foreach ($rows as $k => $v) {

                // ── Downpayment branch ──────────────────────────
                if ($v['type'] === 'DP') {
                    $rows[$k]['chex'] = false;
                    $dp_id = abs($v['SupplierInvoiceID']);

                    $s_payment = $this->db_onedev->query("
                        SELECT
                            GROUP_CONCAT(SupplierPaymentNumber SEPARATOR ', ') as SupplierPaymentNumber,
                            SUM(IFNULL(SupplierPaymentAmount,0))                as SupplierPaymentAmount,
                            GROUP_CONCAT(
                                DATE_FORMAT(SupplierPaymentDate,'%d-%m-%Y')
                                SEPARATOR ', '
                            )                                                   as SupplierPaymentDate
                        FROM supplier_payment
                        WHERE SupplierPaymentIsActive = 'Y'
                            AND SupplierPaymentSupplierDownpaymentID = ?",
                        [$dp_id]
                    )->row();

                    $amount = $s_payment->SupplierPaymentAmount
                        ? $s_payment->SupplierPaymentAmount
                        : "0.00";

                    $rows[$k]['SupplierPaymentNumber'] = $s_payment->SupplierPaymentNumber;
                    $rows[$k]['SupplierPaymentAmount'] = $amount;
                    $rows[$k]['SupplierPaymentDate']   = $s_payment->SupplierPaymentDate;
                    $rows[$k]['paid']                  = $amount;
                    $rows[$k]['notes']                 = $this->add_notes_downpayment($dp_id);
                    $rows[$k]['tagihans']              = [];
                    continue;
                }

                // ── Invoice branch ──────────────────────────────
                $rows[$k]['chex'] = false;
                $inv_id = $v['SupplierInvoiceID'];

                $s_payment = $this->db_onedev->query("
                    SELECT
                        GROUP_CONCAT(SupplierPaymentNumber SEPARATOR ', ') as SupplierPaymentNumber,
                        SUM(IFNULL(SupplierPaymentAmount,0))                as SupplierPaymentAmount,
                        GROUP_CONCAT(
                            DATE_FORMAT(SupplierPaymentDate,'%d-%m-%Y')
                            SEPARATOR ', '
                        )                                                   as SupplierPaymentDate
                    FROM supplier_payment
                    WHERE SupplierPaymentIsActive = 'Y'
                        AND SupplierPaymentSupplierInvoiceID = ?",
                    [$inv_id]
                )->row();

                $s_jurnal = $this->db_onedev->query("
                    SELECT SUM(jurnalTxCredit) totalbill
                    FROM supplier_invoice si
                    JOIN jurnal_addon ja ON ja.jurnalAddOnValue = si.SupplierInvoiceNumber
                    JOIN jurnal_tx jt
                        ON jt.jurnalTxJurnalID = ja.jurnalAddOnJurnalID
                        AND jt.jurnalTxCredit <> 0
                        AND jt.jurnalTxCoaID <> 563
                    WHERE si.SupplierInvoiceID = ?
                    GROUP BY si.SupplierInvoiceID",
                    [$inv_id]
                )->row();

                $amount = $s_payment->SupplierPaymentAmount
                    ? $s_payment->SupplierPaymentAmount
                    : "0.00";
                $unpaid = (float)$s_jurnal->totalbill - (float)$amount;

                $rows[$k]['SupplierPaymentNumber'] = $s_payment->SupplierPaymentNumber;
                $rows[$k]['SupplierPaymentAmount'] = $amount;
                $rows[$k]['SupplierPaymentDate']   = $s_payment->SupplierPaymentDate;
                $rows[$k]['paid']                  = $amount;
                $rows[$k]['totalbill']             = $s_jurnal->totalbill
                    ? $s_jurnal->totalbill
                    : "0.00";
                $rows[$k]['unpaid']                = number_format($unpaid, 2, '.', '');

                $rows[$k]['notes']    = $this->add_notes($inv_id);
                $rows[$k]['tagihans'] = $this->add_tagihans($inv_id);
            }
        }

        $result = array("total" => $tot_page, "records" => $rows);
        $this->sys_ok($result);
        exit;
    }
}
