<?php

// register global/PHP functions to be used with your template files
// You can move this to common.conf.php $config['TEMPLATE_GLOBAL_TAGS'] = array('isset', 'empty');
// Every public static methods in TemplateTag class (or tag classes from modules) are available in templates without the need to define in TEMPLATE_GLOBAL_TAGS
Doo::conf ()->TEMPLATE_GLOBAL_TAGS = array (
		'isTimeTR',
		'isInvoiceNew',
		'isHRNew',
		'upper',
		'tofloat',
		'sample_with_args',
		'debug',
		'url',
		'url2',
		'function_deny',
		'isset',
		'empty',
		'make_date',
		'inarray',
		'getGlobals',
		'countArray',
		'isInvoiceMoldShow',
		'isReceiptAuthorityShow',
		'isInvoiceAggregateCompanyShow',
		'forMatAccess',
		'isShowMenu',
		'isStaffCompleteMsg',
		'isInvoiceCategoryShow',
		'isReceiptTrainShow',
		'isPaymentsShow'
);

function isStaffCompleteMsg(){
	//检测用户信息完成
	Doo::loadModel ( 'staff' );
	$staff = new staff ();
	$isStaffCompleteMsg=false;
	if (!isset($_COOKIE ["staff"]))
		return false;
	$detail = $staff->checkStaffInfoIsComplete ( $_COOKIE ["staff"] );
	if(!empty($detail))
		$isStaffCompleteMsg=true;
	return $isStaffCompleteMsg;
}

function forMatAccess($access=array()){
	$html='';
	$accessMsg = array (
			'INFORMATION' => '信息中心',
			'DIRECTORIES' => '通讯录',
			'LOCK' => '在线锁库',
			'RECEIPTS' => '报销单',
			'INVOICE' => '发票申请',
			'HR' => '人资管理',
			'BUILD'=>'建筑计价'
	);
	if (empty($access))
		return '';
	foreach ($access as $value){
		$html.=$accessMsg[$value].'&nbsp;&nbsp;';
	}
	return $html;
}

function countArray($list=array(),$count=0){
	return count($list)+$count;
}

function isTimeTR($day = 3,$cTime) {
	$flag=false;
	$thenTime=time();
	$futureTime=strtotime('+'.$day.' day',strtotime($cTime));
	if($thenTime<$futureTime)
		$flag=true;
	
	return $flag;
}

function isShowMenu($menu=''){
		Doo::loadModel ( 'staff' );
		$staff = new staff ();
		$st = $staff->getStaffBySid( $_COOKIE ["staff"] );
		$cldAccess=array();
		if (!empty($st['cldAccess']))
			$cldAccess=json_decode($st['cldAccess'],true);
		
		Doo::loadModel ( "staffManage" );
		$staffManage = new staffManage ();
		$smList=$staffManage->getInvoiceCMByStaff($_COOKIE ["staff"]);
		
		//是否有登陆者需要审批的员工
		$list=array();
		if ($menu=='HR'){
		Doo::loadClass ( 'XDeode' );
		$XDeode = new XDeode ( 5 );
		$uid = $XDeode->decode ( $_COOKIE ["staff"] );
		$list=$staff->find ( array (
				'asc' => 'sid',
				'where' => "(pendStatus= '2' or pendStatus='3' or pendStatus='5') and ( pendingApprovalsLeave='".$uid."' or pendingApprovals='".$uid."') ",
				'asArray' => TRUE
		) );
		}
		
		if (in_array($menu,$cldAccess)||($st['sid']==superHR&&$menu=='HR')||(count($list)>0&&$menu=='HR')){
			
			return true;
		}
		
		if (empty($cldAccess)){
				
			return false;
		}
		
		return false;
}

function isHRNew(){
	Doo::loadModel ( 'staff' );
	$staff = new staff ();
	
	Doo::loadClass ( 'XDeode' );
	$XDeode = new XDeode ( 5 );
	
	$uid = $XDeode->decode ( $_COOKIE ["staff"] );
	
	$list=$staff->find ( array (
			'asc' => 'sid',
			'where' => "(pendStatus= '2' or pendStatus='3' or pendStatus='5' or pendStatus='6') and ( pendingApprovalsLeave='".$uid."' or pendingApprovals='".$uid."') ",
			'asArray' => TRUE
	) );
	
	return count($list);
}

function isInvoiceNew($type = "GLOBAL") {
	Doo::loadModel ( 'invoice' );
	$invoice = new invoice ();
	Doo::loadModel ( 'invoiceReceivables' );
	$invoiceReceivables = new invoiceReceivables ();
	Doo::loadModel ( 'staff' );
	$staff = new staff ();
	Doo::loadModel ( "invoiceManage" );
	$execute = new invoiceManage ();
	
	$st = $staff->getUserByIdList ( $_COOKIE ["staff"] );
	
	$exeGlobal=$execute->getInvoiceByStaff($st[0]['sid']);
	
	// 我的发票待处理
	$pendingInvoice = $invoice->getOne ( array (//or (status=2 and printStatus=1 and untreadStatus=0 ) or (status=2 and printStatus=1 and untreadStatus=2 )
			'where' => "(status=3 or status=4   )  and isDelete=0 and sid=" . $st[0]['sid'],
			'desc' => 'iid',
			'asArray' => TRUE 
	) );
	// 我的收款待入账
// 	$myClaim = $invoiceReceivables->getOne ( array (
// 			'where' => " receivablesStaff like '" . $st[0]['sid'] . "-%' and receivablesCategory like '" . $st [0] ['cid'] . ":%' and bindStatus=0",
// 			'desc' => 'irid',
// 			'asArray' => TRUE 
// 	) );
	
	
	
	// 发票审批
	$approval = $invoice->getOne ( array (
			'where' => 'status=1 and pendingApprovals=' . $st[0]['sid'],
			'desc' => 'iid',
			'asArray' => true 
	) );
	// 发票邮寄
	$post = $invoice->getOne ( array (
			'where' => "postStatus=0 and  printStatus=1 and isDelete=0 and doPost=1 and status=2",
			'asArray' => TRUE 
	) );
	// 发票打印
	$print = $invoice->getOne ( array (
			'where' => "status=2 and printStatus=0 and untreadStatus=0 and moldManage like '%[\"" . $st[0]['sid'] . "\",%'",
			'desc' => 'iid',
			'asArray' => TRUE 
	) );
	
	// 发票退票 printStatus=1 and
	$untread = $invoice->getOne ( array (
			'where' => "  untreadStatus=1 and status=2 ",
			'asArray' => TRUE 
	) );
	
	$new = array (
			'GLOBAL' => FALSE,
			'pendingInvoice' => FALSE,
			'myClaim' => FALSE,
			'approval' => FALSE,
			'post' => FALSE,
			'print' => FALSE,
			'untread' => FALSE 
	);
	
	
	//|| ! empty ( $myClaim )
	if (!empty($exeGlobal)){
		if (! empty ( $pendingInvoice ))
			$new ['GLOBAL'] = TRUE;
		
		foreach ($exeGlobal as $value){
			if ($value['mold']=='发票审批'){
				if(! empty ( $approval )){
					$new ['GLOBAL'] = TRUE;
					break;
				}
			}
			
			if ($value['mold']=='发票打印'){
				if(! empty ( $print )){
					$new ['GLOBAL'] = TRUE;
					break;
				}
			}
			
			if ($value['mold']=='发票邮寄'){
				if(! empty ( $post )){
					$new ['GLOBAL'] = TRUE;
					break;
				}
			}
			
			if ($value['mold']=='发票退票'){
				if(! empty ( $untread )){
					$new ['GLOBAL'] = TRUE;
					break;
				}
			}
		}
		
// 		print_r($exeGlobal);die;
// 		if (! empty ( $pendingInvoice )  || ! empty ( $approval ) || ! empty ( $post ) || ! empty ( $print ) || ! empty ( $untread ))
// 			$new ['GLOBAL'] = TRUE;
	}else{
		if (! empty ( $pendingInvoice )  )
			$new ['GLOBAL'] = TRUE;
	}
		
	if (! empty ( $pendingInvoice ))
		$new ['pendingInvoice'] = TRUE;
	if (! empty ( $myClaim ))
		$new ['myClaim'] = TRUE;
	if (! empty ( $approval ))
		$new ['approval'] = TRUE;
	if (! empty ( $post ))
		$new ['post'] = TRUE;
	if (! empty ( $print ))
		$new ['print'] = TRUE;
	if (! empty ( $untread ))
		$new ['untread'] = TRUE;
	return $new [$type];
}

/**
 * 是否有查看汇总的权限
 * @param unknown $sid
 */
function isInvoiceCategoryShow($sid){
	Doo::loadModel ( "invoiceCategoryManage" );
	$invoiceCategoryManage = new invoiceCategoryManage ();
	
	$icm=$invoiceCategoryManage->getInvoiceCMByStaff($sid);
	if (!empty($icm))
		return true;
	else 
		return false;
}

/**
 * 是否有查看培训班结算营收的权限
 * @param unknown $sid
 */
function isReceiptTrainShow($sid){
	Doo::loadModel ( "receiptTrainManage" );
	$invoiceCategoryManage = new receiptTrainManage ();

	$icm=$invoiceCategoryManage->getInvoiceCMByStaff($sid);
	if (!empty($icm))
		return true;
		else
			return false;
}


/**
 * 是否有查看日常收支的权限
 */
function isPaymentsShow($sid){
	Doo::loadModel ( "execute" );
	$execute = new execute ();
	
	$list = $execute->find ( array (
			'where' => '(staff like \'%["' . $sid . '%\'  ) and mold="日常收支"',
				'asArray' => true
		) );
	if (empty($list)){
		return false;
	}else {
		return true;
	}
}

/**
 * 是否有查看应收款的权限
 * @param unknown $sid
 */
function isInvoiceAggregateCompanyShow($sid){
	Doo::loadModel ( "invoiceCompanyManage" );
	$receiptAuthorityManage = new invoiceCompanyManage ();

	$icm=$receiptAuthorityManage->getInvoiceCMByStaff($sid);
	if (!empty($icm))
		return true;
		else
			return false;
}

/**
 * 是否有查看报销单汇总的权限
 * @param unknown $sid
 */
function isReceiptAuthorityShow($sid){
	Doo::loadModel ( "receiptAuthorityManage" );
	$receiptAuthorityManage = new receiptAuthorityManage ();
	
	
	$icm=$receiptAuthorityManage->getInvoiceCMByStaff($sid);
	
	if (!empty($icm))
		return true;
		else
			return false;
}

function isInvoiceCompanyShow($sid){
	
}

/**
 * 判断发票的审批权限
 * @param number $sid 用户ID
 * @param string $mold 项目类型
 * @return boolean
 */
function isInvoiceMoldShow($sid = 0, $mold = '') {
	if (! empty ( $sid ) && ! empty ( $mold )) {
		Doo::loadModel ( "invoiceManage" );
		$invoiceManage = new invoiceManage ();
		$imList = $invoiceManage->getInvoiceByMold ( $mold );
		$list = array ();
		
		foreach ( $imList ['staffList'] as $k => $v ) {
			array_push ( $list, $v [0] );
		}
		$fileInvoice = file_get_contents ( "protected/config/invoice/invoice.ini" );
		$fileInvoice = json_decode ( $fileInvoice, true );
		$delIM = array ();
		if (isset ( $fileInvoice [$mold] ))
			$delIM = explode ( ',', $fileInvoice [$mold] );
		foreach ( $delIM as $key => $value ) {
			if (! empty ( $value ))
				array_push ( $list, $value );
		}
		$list = array_unique ( $list );
		return inarray ( $sid, $list );
	} else
		return false;
}
function getGlobals($var) {
	if ($var == 'NEW')
		getReceiptCount ();
	elseif ($var == 'NEW2')
		getExeCount ();
		// echo $GLOBALS[$var].'/'.$var.'<br/>';
	return $GLOBALS [$var];
}
function inarray($v1, $v2) {
	return in_array ( $v1, $v2 );
}
function make_date() {
	return date ( "Y-m" );
}
function upper($str) {
	return strtoupper ( $str );
}
function tofloat($str) {
	return sprintf ( "%.2f", $str );
}
function sample_with_args($str, $prefix) {
	return $str . ' with args: ' . $prefix;
}
function debug($var) {
	if (! empty ( $var )) {
		echo '<pre>';
		print_r ( $var );
		echo '</pre>';
	}
}

// This will be called when a function NOT Registered is used in IF or ElseIF statment
function function_deny($var = null) {
	echo '<span style="color:#ff0000;">Function denied in IF or ElseIF statement!</span>';
	exit ();
}

// Build URL based on route id
function url($id, $param = null, $addRootUrl = false) {
	Doo::loadHelper ( 'DooUrlBuilder' );
	// param pass in as string with format
	// 'param1=>this_is_my_value, param2=>something_here'
	
	if ($param != null) {
		$param = explode ( ', ', $param );
		$param2 = null;
		foreach ( $param as $p ) {
			$splited = explode ( '=>', $p );
			$param2 [$splited [0]] = $splited [1];
		}
		return DooUrlBuilder::url ( $id, $param2, $addRootUrl );
	}
	
	return DooUrlBuilder::url ( $id, null, $addRootUrl );
}

// Build URL based on controller and method name
function url2($controller, $method, $param = null, $addRootUrl = false) {
	Doo::loadHelper ( 'DooUrlBuilder' );
	// param pass in as string with format
	// 'param1=>this_is_my_value, param2=>something_here'
	
	if ($param != null) {
		$param = explode ( ', ', $param );
		$param2 = null;
		foreach ( $param as $p ) {
			$splited = explode ( '=>', $p );
			$param2 [$splited [0]] = $splited [1];
		}
		return DooUrlBuilder::url2 ( $controller, $method, $param2, $addRootUrl );
	}
	
	return DooUrlBuilder::url2 ( $controller, $method, null, $addRootUrl );
}
/**
 * 获得正在审批的费用单数量
 */
function getReceiptCount() {
	$status = 2;
	$year = date ( 'Y' );
	
	Doo::loadModel ( 'receipt' );
	$receipt = new receipt ();
	Doo::loadClass ( 'XDeode' );
	$XDeode = new XDeode ( 5 );
	Doo::loadModel ( 'verify' );
	$verify = new verify ();
	
	$st[0]['sid'] = $XDeode->decode ( $_COOKIE["staff"] );
	$vidList = array ();
	$verifyDetail = $verify->find ( array (
			'where' => ' (staff not like "%\"' . $st [0] ['sid'] . '\",\"ROLE%") and (staff like "%[\"' . $st [0] ['sid'] . '\",%" or staff like "%\"' . $st [0] ['sid'] . '\_%" )',
			'asArray' => true
	) );
	foreach ( $verifyDetail as $key => $value ) {
		array_push ( $vidList, $value ['vid'] );
	}
	$vid = implode ( ",", $vidList );
	if (empty ( $verifyDetail ))
		$vid = 0;
	
	
	
	$dateCondition = " and Year(date) =" . $year;
	$approvalCondition = ' and (nowStaff like "%,' . $st[0]['sid'] . '%" or nowStaff like "%' . $st[0]['sid'] . ',%" or nowStaff=' . $st[0]['sid'] . ' ) ';
	$receiptList = $receipt->find ( array (
			'where' => ' status=' . $status . $dateCondition . $approvalCondition. ' and verify in (' . $vid . ')',
			'desc' => 'rid',
			'asArray' => true 
	) );
	
	$GLOBALS ['NEW'] = count ( $receiptList );
}
/**
 * 获得执行费用的数量
 */
function getExeCount() {
	Doo::loadModel ( 'receipt' );
	$receipt = new receipt ();
	Doo::loadClass ( 'XDeode' );
	$XDeode = new XDeode ( 5 );
	$st[0]['sid'] = $XDeode->decode ( $_COOKIE["staff"] );
	$receiptList = $receipt->find ( array (
			'where' => '(executeCopy like \'%["' . $st[0]['sid'] . '%\' and executeStaff NOT LIKE \'%' . $st[0]['sid'] . '%\' ) and (status=1 or status=6)',
			'desc' => 'rid',
			'asArray' => true 
	) );
	
	$GLOBALS ['NEW2'] = count ( $receiptList );
}
?>