<?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_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 receive_order_po ON ReceiveOrderPoID = SupplierInvoiceReceiveOrderPoID
			 JOIN receive_order_po_detail ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID
			 JOIN purchase_order ON ReceiveOrderPoDetailPurchaseOrderID = 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 = {$orderid}
			 GROUP BY jurnalTxID
			 ";
	 $query = $this->db_onedev->query($sql);
	 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
			 LEFT 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()
   {
	    //# cek token valid
        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 = ($prm['current_page'] - 1) * $number_limit ;

	  $where = "SupplierInvoiceIsActive = 'Y'
	  AND SupplierInvoiceStatus = 'Approved'
	  AND SupplierInvoiceGrandTotal > 0 
	  AND IF(SupplierPaymentID IS NULL,'N','Y') = '{$status}' 
	  AND (SupplierInvoiceNumber LIKE '%{$search}%' AND SupplierName LIKE '%{$supplier}%')
	  AND ReceiveOrderPoS_RegionalID = {$regionalid}
	  AND SupplierInvoiceDraftPaymentDate BETWEEN '{$startdate}' AND '{$enddate}'";
		
	  
	    

      $sql = "	SELECT count(*) as total
				FROM supplier_invoice
				JOIN jurnal_addon ON jurnalAddOnValue = SupplierInvoiceNumber
				LEFT JOIN supplier_payment ON SupplierInvoiceID = SupplierPaymentSupplierInvoiceID AND SupplierPaymentIsActive = 'Y'
				LEFT JOIN supplier ON SupplierInvoiceSupplierID = SupplierID
				JOIN receive_order_po ON SupplierInvoiceReceiveOrderPoID = ReceiveOrderPoID
				WHERE
				$where 
				";
 // echo $sql;
		$query = $this->db_onedev->query($sql, $sql_param);

		
		$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;
		}    
	  
	  
		$sql = 	"SELECT supplier_invoice.*,
				SupplierName,
				'' M_MouName,
				0 as totalbill,
				0 as paid,
				0 as unpaid,
				SupplierInvoiceIsLunas as flaglunas,
				0 as SupplierPaymentID,
				'' as SupplierPaymentNumber,
				0 as SupplierPaymentAmount,			
				'' as SupplierPaymentDate,
				'' as SupplierInvoiceIssueRefNumber,
				'' as notes,
				'' as tagihans,
				'N' as isbillterpusat,
				DATE_FORMAT(SupplierInvoiceDraftPaymentDate,'%d-%m-%Y') as tanggalbayar,
				DATE_FORMAT(SupplierInvoiceDraftPaymentDate,'%d%m%Y') as tanggalbayartext,
				IF(SupplierPaymentID IS NULL,'N','Y') as status_invoice,
				IFNULL(SupplierPaymentIsApproved,'N') as SupplierPaymentIsApproved,
				IFNULL(SupplierPaymentIsVerif,'N') as SupplierPaymentIsVerif,
				IFNULL(SupplierPaymentCashierNumber,'') SupplierPaymentCashierNumber

				FROM supplier_invoice
				LEFT JOIN supplier ON SupplierInvoiceSupplierID = SupplierID
				JOIN jurnal_addon ON jurnalAddOnValue = SupplierInvoiceNumber
				JOIN receive_order_po ON SupplierInvoiceReceiveOrderPoID = ReceiveOrderPoID
				LEFT JOIN supplier_payment ON SupplierPaymentSupplierInvoiceID = SupplierInvoiceID AND SupplierPaymentIsActive = 'Y'
				WHERE
				$where 
				GROUP BY SupplierInvoiceID
				ORDER BY SupplierInvoiceID ASC
				limit $number_limit offset $number_offset";
		//echo $sql;
		$query = $this->db_onedev->query($sql, $sql_param);
		$rows = $query->result_array();
		if($rows){
			foreach($rows as $k => $v){
				$s_payment = $this->db_onedev->query("SELECT GROUP_CONCAT(SupplierPaymentNumber SEPARATOR ', ') as SupplierPaymentNumber,
				SUM(IFNULL(SupplierPaymentAmount,0)) as SupplierPaymentAmount,
				IFNULL(SupplierPaymentID,0) SupplierPaymentID,
				GROUP_CONCAT(DATE_FORMAT(SupplierPaymentDate,'%d-%m-%Y') SEPARATOR ', ') as SupplierPaymentDate
				FROM supplier_payment
				WHERE SupplierPaymentIsActive = 'Y' AND SupplierPaymentSupplierInvoiceID = {$v['SupplierInvoiceID']}")->row();

				$s_jurnal = $this->db_onedev->query("SELECT SUM(jurnalTxCredit) totalbill
				FROM supplier_invoice
				JOIN jurnal_addon ON jurnalAddOnValue = SupplierInvoiceNumber
			 	JOIN jurnal_tx ON jurnalTxJurnalID = jurnalAddOnJurnalID AND jurnalTxCredit <> 0 AND jurnalTxCoaID <> 563
				WHERE SupplierInvoiceID = {$v['SupplierInvoiceID']}
				GROUP BY SupplierInvoiceID")->row();
				$amount = $s_payment->SupplierPaymentAmount ? $s_payment->SupplierPaymentAmount : "0.00";
				$unpaid = (float)$s_jurnal->totalbill - (float)$amount;
				$rows[$k]['SupplierPaymentID'] = $s_payment->SupplierPaymentID ? $s_payment->SupplierPaymentID : '0';
				$rows[$k]['SupplierPaymentNumber'] = $s_payment->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($v['SupplierInvoiceID']);
				$rows[$k]['tagihans'] = $this->add_tagihans($v['SupplierInvoiceID']);

			}
		}
	  

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


}
