<?php
class Withdraw{
	var $id;
	private $db;
	private $username, $email;
	
	function __construct(){
		global $db, $username, $usermail;
		$this->db = $db;
		$this->username = $username;
		$this->email = $usermail;
	}	
	function setId($id){
		$this->id = $id;
	}
	
	function getWithdrawDetail(){
		$sqls = array();
		$dbdata = array();
		if (!empty($this->id)){
			array_push($sqls,'d.withdraw_id = \''.$this->id.'\'');
		}
		
		$innerjoin = ' INNER JOIN user u ON u.userid = d.userid';
		
		$sql = '';
		if (sizeof($sqls) > 0){
			$sql = ' WHERE '.implode(' AND ',$sqls);
		}
		$dbdata = $this->db->fetch_one("SELECT d.*, u.firstname, u.lastname, u.email FROM withdraw d".$innerjoin.$sql);

		return $dbdata;
	}
	
	function getNumber($year){
		$theids = '';
		$valid = 'withdraw';
		if (!empty($year)){
			$getpoint = $this->db->fetch_one("SELECT number_val FROM number_setup WHERE number_tag = '".$this->db->clean($valid)."' AND year = '".$this->db->clean($year)."'");
			if (!empty($getpoint['number_val'])){
				$theids = $getpoint['number_val'] + 1;
				$this->db->query("UPDATE number_setup SET number_val = '".$this->db->clean($theids)."' WHERE number_tag = '".$this->db->clean($valid)."' AND year = '".$this->db->clean($year)."'");
			}
			else{
				$theids = 1;
				$inserts['number_tag'] = $valid;
				$inserts['number_val'] = $theids;
				$inserts['year'] = $year;
				$this->db->insert("number_setup",$inserts);
			}
		}
		
		return $theids;
	}

	function saveWithdraw($amount, $type, $status, $payment){
		global $userid, $yearnow, $monthnow, $transactionsetting;
		
		$lastnumber = $this->getNumber($yearnow);
		$totaldigit = empty($transactionsetting['autonumberdigit'])?0:$transactionsetting['autonumberdigit'];
		
		$inserts['transaction_number'] = 'WD/'.$yearnow.'/'.$monthnow.'/'.str_pad($lastnumber,$totaldigit,"0",STR_PAD_LEFT);
		$inserts['date'] = date('Y-m-d');
		$inserts['amount'] = $amount;
		$inserts['type'] = $type;
		$inserts['withdraw_to'] = $payment;
		$inserts['status'] = $status;
		$inserts['userid'] = $userid;
		$inserts['created_date'] = 'now()';
		
 		$lastid = $this->db->insert("withdraw",$inserts);	
		return true;		
	}
	
	function saveWithdrawHistory($transactionnumber, $nominal, $type, $notes, $userid){
		$inserts['transactionnumber'] = $transactionnumber;
		$inserts['transaction_type'] = $type;
		$inserts['notes'] = $notes;
		$inserts['transactiondate'] = 'now()';
		$inserts['nominal'] = $nominal;
		$inserts['userid'] = $userid;
				
		$this->db->insert("transaction_history", $inserts);	
		return true;		
	}

	function updateWithdraw($status){
		global $userid;
		if (!empty($this->id)){			
			$updates['status'] = $status;
			$updates['modified_date'] = 'now()';
			$updates['modified_by'] = $userid;
			
			if($status == 2){
				$updates['approved_date'] = 'now()';
				$updates['approved_by'] = $userid;
			}
			
			$this->db->update("withdraw",$updates,"withdraw_id='".$this->id."'");
 		}
	}
	
	function saveWithdrawSummary($nominal_in, $nominal_out){
		global $userid;
		
		$check_db = $this->db->fetch_one("SELECT id FROM transaction_summary WHERE month_year = '".$this->db->clean(date('Ym'))."'");
		
		if(empty($check_db['id'])){
			$inserts['month_year'] = date('Ym');
			$inserts['nominal_in'] = $nominal_in;
			$inserts['nominal_out'] = $nominal_out;
			
			$this->db->insert("transaction_summary", $inserts);	
		}
		else{
			$this->db->query("UPDATE transaction_summary SET nominal_in = nominal_in + ".$this->db->clean($nominal_in).", nominal_out = nominal_out + ".$this->db->clean($nominal_out)." WHERE id = '".$this->db->clean($check_db['id'])."'");
		}
		return true;
	}
	
	function searchWithdraw($keyword,$field,$sortfield,$sortdetail,$getreturn,$page = -1, $usergroup=''){
		global $general,$category,$userid;
		
		$addlimit = '';
		if ($page > 0){
			if ($usergroup == 'member'){
				$addlimit = ' LIMIT ' . ($page - 1) * $general['showperpage'] . ',' . $general['showperpage'];
			}
			else{
				$addlimit = ' LIMIT ' . ($page - 1) * $general['showperpageadmin'] . ',' . $general['showperpageadmin'];
			}
		}
		
		$sqls = array();
		
		$innerjoin = ' INNER JOIN user u ON u.userid = d.userid';
			
		$fields = 'd.withdraw_id';
		
		if (isset($keyword)){
			$strinarr = '';
			$groupby = '';
			
			$arr1 = array_search('amount',$field);
			if ($arr1 !== false){
				$strinarr = 'd.amount LIKE (\'%'.$this->db->clean($keyword[$arr1]).'%\')';
				array_push($sqls,$strinarr);
				$fields = 'd.withdraw_id';
			}
			$arr2 = array_search('user',$field);
			if ($arr2 !== false){
				$strinarr = '(u.firstname LIKE (\'%'.$this->db->clean($keyword[$arr2]).'%\') OR u.lastname LIKE (\'%'.$this->db->clean($keyword[$arr2]).'%\'))';
				array_push($sqls,$strinarr);
				$fields = 'd.withdraw_id';
			}
			$arr3 = array_search('email',$field);
			if ($arr3 !== false){
				$strinarr = 'u.email LIKE (\'%'.$this->db->clean($keyword[$arr3]).'%\')';
				array_push($sqls,$strinarr);
				$fields = 'd.withdraw_id';
			}
			$arr4 = array_search('transaction_number',$field);
			if ($arr4 !== false){
				$strinarr = 'd.transaction_number LIKE (\'%'.$this->db->clean($keyword[$arr4]).'%\')';
				array_push($sqls,$strinarr);
				$fields = 'd.withdraw_id';
			}
			$arrf7 = array_search('startdate',$field);
			$arrf8 = array_search('enddate',$field);
			if ($arrf7 !== false && $arrf8 !== false){
				$startdate = $keyword[$arrf7].' 00:00:00';
				$enddate = $keyword[$arrf8].' 23:59:59';
				if (!empty($startdate) && !empty($enddate)){
					$strinarr = 'd.`date` >= \''.$this->db->clean($startdate).'\' AND d.`date` <= \''.$this->db->clean($enddate).'\'';
					array_push($sqls,$strinarr);
				}
			}
			else if ($arrf7 !== false){
				$startdate = $keyword[$arrf7].' 00:00:00';
				$enddate = $keyword[$arrf7].' 23:59:59';
				if (!empty($startdate) && !empty($enddate)){
					$strinarr = 'd.`date` >= \''.$this->db->clean($startdate).'\' AND d.`date` <= \''.$this->db->clean($enddate).'\'';
					array_push($sqls,$strinarr);
				}
			}
			else if ($arrf8 !== false){
				$startdate = $keyword[$arrf8].' 00:00:00';
				$enddate = $keyword[$arrf8].' 23:59:59';
				if (!empty($startdate) && !empty($enddate)){
					$strinarr = 'd.`date` >= \''.$this->db->clean($startdate).'\' AND d.`date` <= \''.$this->db->clean($enddate).'\'';
					array_push($sqls,$strinarr);
				}
			}
			$arr6 = array_search('status',$field);
			if ($arr6 !== false){
				$strinarr = 'd.status = \''.$this->db->clean($keyword[$arr6]).'\'';
				array_push($sqls,$strinarr);
				$fields = 'd.withdraw_id';
			}
		}
		
		if($usergroup == 'member')
		{
			$strinarr = 'd.userid = \''.$this->db->clean($userid).'\'';
			array_push($sqls,$strinarr);
		}
		
		$sql = '';
		if (sizeof($sqls) > 0){
			$sql = ' WHERE '.implode(' AND ',$sqls);
		}
		
		if ($getreturn == 'data'){
			$orders = 'DESC';
			if (!empty($sortdetail)){
				$orders = $sortdetail;
			}
		
			if (!empty($sortfield)){
				switch ($sortfield){
					case 'sortuser': $fields = 'u.firstname '.$orders.', u.lastname'; break;
					case 'sortemail': $fields = 'u.email'; break;
					case 'sorttransactionnumber': $fields = 'd.transaction_number'; break;
					case 'sortdate': $fields = 'd.date'; break;
					case 'sortamount': $fields = 'd.amount'; break;
					case 'sortstatus': $fields = 'd.status'; break;
					default: $fields = 'd.date'; break;
				}
			}
			
			$dball = $this->db->fetch_all("SELECT d.*, u.firstname, u.lastname, u.email FROM withdraw d".$innerjoin." ".$sql." ORDER BY ".$fields." ".$orders.$addlimit);
			
			return $dball;
		}
		else if ($getreturn == 'pagenav'){
			$dball = $this->db->fetch_one("SELECT COUNT(d.withdraw_id) AS totalrecord FROM withdraw d".$innerjoin." ".$sql);
			
			if ($dball['totalrecord'] > 0){
				$totalrecord = $dball['totalrecord'];
				$totalpage = ceil($totalrecord / $general['showperpageadmin']);
				$page = handlepage($page,$totalpage);
				$startrecord = ($page - 1) * $general['showperpageadmin'] + 1;
				$endrecord = $startrecord + $general['showperpageadmin'] - 1;
				if ($endrecord > $totalrecord){
					$endrecord = $totalrecord;
				}
			}
			else{
				$page = 0;
				$totalrecord = 0;
				$totalpage = 0;
				$startrecord = 0;
				$endrecord = 0;
			}
			
			return $page.'|^|'.$totalrecord.'|^|'.$totalpage.'|^|'.$startrecord.'|^|'.$endrecord;
		}
	}
}
?>