<?php
Doo::loadCore ( 'db/DooModel' );
class receipt extends DooModel {
	public $rid;
	public $accountItem;
	public $loanItem;
	public $staff;
	public $sum;
	public $date;
	public $pastDate;
	public $executeDate;
	public $loanDate;
	public $cid;
	public $status;
	public $Rtype;
	public $isBK;
	public $loanSum;
	public $loanRid;
	public $reviseDetail;
	public $revisePrice;
	public $receiptOrder;
	public $verify;
	public $verifyStaff;
	public $executeCopy;
	public $executeStaff;
	public $verifyBreakup;
	public $nowStaff;
	public $explanation;
	public $implementOpinions;
	public $notice;
	public $amount;
	public $remittanceName;
	public $bankName;
	public $bankNumber;
	public $coupletNumber;
	public $remittanceBankType;
	public $trainId;
	public $trainLoanRid;
	public $invoiceTrainId;
	public $paidStatus;
	public $statusTrain;

	public $_table = 'CLD_receipt';
	public $_primarykey = 'rid';
	public $_fields = array (
			'aid',
			'accountItem',
			'staff',
			'sum',
			'date',
			'pastDate',
			'cid',
			'status',
			'reviseDetail',
			'revisePrice',
			'verify',
			'verifyStaff',
			'nowStaff',
			'receiptOrder',
			'explanation',
			'notice',
			'Rtype',
			'loanItem',
			'loanRid',
			'loanSum',
			'implementOpinions',
			'isBK',
			'executeCopy',
			'executeStaff',
			'verifyBreakup',
			'executeDate',
			'amount',
			'loanDate',
			'remittanceName',
			'bankName',
			'bankNumber',
			'coupletNumber',
			'remittanceBankType',
			'trainId',
			'trainLoanRid',
			'invoiceTrainId' ,
            'paidStatus',
			'statusTrain'
	);

    /**
     * 获得培训班结算未收款
     */
	function getReceiptTrainByPaid($un=0,$limit=5,$cid=''){
	    if (empty($cid)){
	        return array();
        }

        $sql = "select b.* ,a.invoiceTrainId,a.rid,a.executeDate
                from " . $this->_table . " as a left JOIN CLD_receiptTraining as b on (a.trainId=b.rtid) 
                where a.status not in (3,4,5) and a.Rtype=3 and a.trainId!=0 and invoiceTrainId!=0 and a.cid in (".$cid.") and paidStatus=".$un."  limit ".$limit;

       $query = Doo::db ()->query ( $sql );
       $result = $query->fetchAll ();

        Doo::loadModel ( 'invoiceTraining' );
        $invoiceTraining = new invoiceTraining ();
        Doo::loadClass ( 'XDeode' );
        $XDeode = new XDeode ( 7 );

        Doo::loadModel ( 'RItem' );
        $RItem = new RItem ();
        Doo::loadModel ( 'RILecturer' );
        $RILecturer = new RILecturer ();
        Doo::loadModel ( 'accountItem' );
        $accountItem = new accountItem ();

       foreach ($result as $key=>$value){
           $result[$key]['ridKey']= $XDeode->encode ( $value ['rid'] );
           $result[$key]['iTrain']=$invoiceTraining->getInvoiceTrainingByItid ( $value ['invoiceTrainId'] );
           $result[$key]['iTrain']['receivablesAmount']=sprintf ( "%.2f",$result[$key]['iTrain']['invoiceTotalAmount']-$result[$key]['iTrain']['invoiceArriveAmount']);
           $RItemList = $RItem->getRItemByRid ( $value ['rid'] );
           $RILecturerList = $RILecturer->getRILecturerByRid ( $value ['rid'] );
           // 支出项金额详情
           $expendList= $accountItem->getTrainingDetail ( $RItemList, $RILecturerList );
           $result[$key]['iTrain']['expendAmount']=sprintf ( "%.2f",$expendList['total']);
           $result[$key]['iTrain']['profit']= sprintf ( "%.2f",$result[$key]['iTrain']['invoiceTotalAmount']-$expendList['total']);

       }
       return $result;
    }

    /**
     * 获得所有培训班结算
     */
    function getReceiptTrainByPaidAll($un='',$cid='',$dateSql='',$limit='0,18',$cidString="",$where=""){
        $psSql='';
        if(!empty($un)){
            $psSql=" and paidStatus=".$un." ";
        }
        $cidSql="";
        if(!empty($cid)){
            $cidSql=" and a.cid=".$cid." ";
        }elseif(!empty($cidString)){
            $cidSql=" and a.cid in (".$cidString.") ";
        }else{
            return array();
        }

        $sql = "select b.* ,a.invoiceTrainId,a.rid
                from " . $this->_table . " as a left JOIN CLD_receiptTraining as b on (a.trainId=b.rtid) 
                 ".$where.$psSql.$cidSql.$dateSql." limit ".$limit;

        $query = Doo::db ()->query ( $sql );
        $result = $query->fetchAll ();

        Doo::loadModel ( 'invoiceTraining' );
        $invoiceTraining = new invoiceTraining ();
        Doo::loadClass ( 'XDeode' );
        $XDeode = new XDeode ( 7 );

        Doo::loadModel ( 'RItem' );
        $RItem = new RItem ();
        Doo::loadModel ( 'RILecturer' );
        $RILecturer = new RILecturer ();
        Doo::loadModel ( 'accountItem' );
        $accountItem = new accountItem ();

        foreach ($result as $key=>$value){
            $result[$key]['ridKey']= $XDeode->encode ( $value ['rid'] );
            $result[$key]['iTrain']=$invoiceTraining->getInvoiceTrainingByItid ( $value ['invoiceTrainId'] );
            $result[$key]['iTrain']['receivablesAmount']=sprintf ( "%.2f",$result[$key]['iTrain']['invoiceTotalAmount']-$result[$key]['iTrain']['invoiceArriveAmount']);
            $RItemList = $RItem->getRItemByRid ( $value ['rid'] );
            $RILecturerList = $RILecturer->getRILecturerByRid ( $value ['rid'] );

            // 支出项金额详情
            $expendList= $accountItem->getTrainingDetail ( $RItemList, $RILecturerList );
            $result[$key]['iTrain']['expendAmount']=sprintf ( "%.2f",$expendList['total']);
            $result[$key]['iTrain']['profit']= sprintf ( "%.2f",$result[$key]['iTrain']['invoiceTotalAmount']-$expendList['total']);
            //利润
            $result[$key]['iTrain']['companyProfit']=sprintf ( "%.2f",$result[$key]['iTrain']['invoiceTotalAmount']*0.4);
            $result[$key]['iTrain']['categoryProfit']=sprintf ( "%.2f",$result[$key]['iTrain']['invoiceTotalAmount']*0.6);
        }

        return $result;
    }

    /**
     * 获得培训班结算的合计金额
     * @param string $itid 发票培训班ID
     */
    function getReceiptTrainSumByItid($sql=""){
        Doo::loadModel ( 'invoice' );
        $invoice = new invoice ();

        $query = Doo::db ()->query ( $sql );
        $result = $query->fetchAll ();
        //组合发票培训班ID
        $itidList = array ();$ridList=array();
        foreach ($result as $key=>$value){
            array_push ( $itidList, $value ['invoiceTrainId'] );
            array_push ( $ridList, $value ['rid'] );
        }
        $itidList = array_unique($itidList);
        $itidString=implode ( ',', $itidList );
        $ridList = array_unique($ridList);
        $ridString=implode ( ',', $ridList );

        //发票培训班ID-整合出开票金额合计-入账金额合计
        $invoiceList = $invoice->sumOfinvoiceTrain ( $itidString );//开票合计-开票收入
        $invoiceRecelvablesList = $invoice->sumOfInvoiceRecelvablesTrain ( $itidString );//入账合计-实际收入
        $invoiceTotalAmount=0;//开票金额合计
        $receivablesTotalAmount=0;//入账金额合计
        foreach ( $invoiceList as $k => $v ) {
            $invoiceTotalAmount+=$v ['invoicePrice'];
        }
        foreach ( $invoiceRecelvablesList as $i => $o ) {
            $receivablesTotalAmount+=$o ['receivablesPrice'];
        }
        //未收款
        $unReceivablesTotalAmount=sprintf ( "%.2f",$invoiceTotalAmount-$receivablesTotalAmount);
        //获得支出金额合计
        Doo::loadModel ( 'RItem' );
        $RItem = new RItem ();
        Doo::loadModel ( 'RILecturer' );
        $RILecturer = new RILecturer ();
        $RItemPrice=$RItem->getRItemPriceByRids($ridString);
        $RILecturerPrice=$RILecturer->getRILecturerPriceByRids($ridString);
        $payPrice=$RItemPrice+$RILecturerPrice;//支出金额合计
        $profit=$invoiceTotalAmount-$payPrice;

        return array('invoiceTotalAmount'=>sprintf ( "%.2f",$invoiceTotalAmount),
            'payPrice'=>sprintf ( "%.2f",$payPrice),
            'profit'=>sprintf ( "%.2f",$profit),
            'unReceivablesTotalAmount'=>$unReceivablesTotalAmount,
            );

    }

    /**
     * @param string $sql
     */
    function initReceiptTrainRevenue($sql=""){
        Doo::loadModel ( 'invoice' );
        $invoice = new invoice ();

        $query = Doo::db ()->query ( $sql );
        $result = $query->fetchAll ();

        foreach ($result as $key=>$value){

            $invoiceList = $invoice->sumOfinvoiceTrain ( $value['invoiceTrainId'] );//开票合计-开票收入
            $invoiceRecelvablesList = $invoice->sumOfInvoiceRecelvablesTrain ( $value['invoiceTrainId'] );//入账合计-实际收入
            $invoiceTotalAmount=0;//开票金额合计
            $receivablesTotalAmount=0;//入账金额合计
            foreach ( $invoiceList as $k => $v ) {
                $invoiceTotalAmount+=$v ['invoicePrice'];
            }
            foreach ( $invoiceRecelvablesList as $i => $o ) {
                $receivablesTotalAmount+=$o ['receivablesPrice'];
            }
//echo $invoiceTotalAmount.'-'.$receivablesTotalAmount.'</br>';
            if ($invoiceTotalAmount<=$receivablesTotalAmount){
                $itemData = array (
                    'rid' => $value['rid'],
                    'paidStatus' => 1,
                );
                $this->setReceiptByCondition($itemData);
            }
        }

    }

    /**
     * 获得培训班 年营收图表
     */
    function getReceiptTrainByYearChart($cid='',$year=''){
        if (empty($cid)){
            return array();
        }
        if(empty($year)){
            $year=date("Y");
        }

        $sql = "select GROUP_CONCAT(rid) as rid,GROUP_CONCAT(invoiceTrainId) as invoiceTrainId,date_format(date,\"%m\") as month
                from " . $this->_table . " 
                where status not in (3,4,5) and Rtype=3 and trainId!=0 and invoiceTrainId!=0 and cid in (".$cid.") and paidStatus=1 and Year(date) =".$year."
                GROUP BY Month(date)";
//

        $query = Doo::db ()->query ( $sql );
        $result = $query->fetchAll ();

        Doo::loadModel ( 'RItem' );
        $RItem = new RItem ();
        Doo::loadModel ( 'RILecturer' );
        $RILecturer = new RILecturer ();
        Doo::loadModel ( 'invoice' );
        $invoice = new invoice ();

        $MonthPriceList=array();
        foreach ($result as $key=>$value){
            //获得支出金额总和
            $RItemPrice=$RItem->getRItemPriceByRids($value['rid']);
        	$RILecturerPrice=$RILecturer->getRILecturerPriceByRids($value['rid']);
        	$RIprice=$RItemPrice+$RILecturerPrice;//支出金额合计
        	
            //收款金额总和
            $ITprice=$invoice->getInvoicePriceByIids($value['invoiceTrainId']);

            $MonthPriceList[$value['month']]=array(
                'RIprice'=>$RIprice,
                'ITprice'=>$ITprice
            );
        }


        return $MonthPriceList;
    }

	function receiptByYear($dateCondition, $sid) {
		$sql = "select sum(sum) as sum from " . $this->_table . " where staff= '" . $sid . "' " . $dateCondition . " and status=2 ";
		// echo '<div style="display:none">'.$sql.'</div>';
		$query = Doo::db ()->query ( $sql );
		$result = $query->fetch ();
		
		return $result;
	}
	function getReceiptBySid($sid = '', $year = '', $month = '') {
		Doo::loadClass ( 'XDeode' );
		$XDeode = new XDeode ( 5 );
		
		if (empty ( $sid ))
			return array ();
		$sql = 'select a.*
				from ' . $this->_table . ' as a left join CLD_receiptDetail as b on b.rid=a.rid
				where b.staff =' . $sid . ' and Month(b.pastDate)=' . $month . ' and Year(b.pastDate)=' . $year . ' and b.status=1
				GROUP BY b.rid';
		
		$query = Doo::db ()->query ( $sql );
		$list = $query->fetchAll ();
		
		foreach ( $list as $key => $value ) {
			$list [$key] ['ridKey'] = $XDeode->encode ( $value ['rid'] );
		}
		return $list;
	}
	function getReceiptByRid($rid = '') {
		Doo::loadClass ( 'XDeode' );
		$XDeode = new XDeode ( 5 );
		
		Doo::loadModel ( 'L_category' );
		$Lcategory = new L_category ();
		Doo::loadModel ( 'staff' );
		$staff = new staff ();
		
		if (! is_numeric ( $rid ))
			$rid = $XDeode->decode ( $rid );
		
		$rinfo = $this->getOne ( array (
				'where' => 'rid=' . $rid,
				'asArray' => true 
		) );
		
		$rinfo ['ridKey'] = $XDeode->encode ( $rinfo ['rid'] );
		$rinfo ['trainLoanRidKey'] = $XDeode->encode ( $rinfo ['trainLoanRid'] );
		$XDeode = new XDeode ( 7 );
		$rinfo ['ridKey7'] = $XDeode->encode ( $rinfo ['rid'] );
		
		$rinfo ['category'] = $Lcategory->getCategoryById ( $rinfo ['cid'] );
		$rinfo ['staffDetail'] = $staff->getStaffBySid ( $rinfo ['staff'] );
		
		// $rinfo['sum']=number_format ($rinfo['sum'],2);
		
		return $rinfo;
	}
	
	function getReceiptByTrainLoanRid($rid = '') {
		Doo::loadClass ( 'XDeode' );
		$XDeode = new XDeode ( 5 );
	
// 		Doo::loadModel ( 'L_category' );
// 		$Lcategory = new L_category ();
// 		Doo::loadModel ( 'staff' );
// 		$staff = new staff ();
	
		if (! is_numeric ( $rid ))
			$rid = $XDeode->decode ( $rid );
	
			$rinfo = $this->getOne ( array (
					'where' => 'trainLoanRid=' . $rid,
					'asArray' => true
			) );
			
			
			$XDeode = new XDeode ( 7 );
			$rinfo ['ridKey7'] = $XDeode->encode ( $rinfo ['rid'] );
			
 			
// 			$rinfo ['ridKey7'] = $XDeode->encode ( $rinfo ['rid'] );
	
// 			$rinfo ['category'] = $Lcategory->getCategoryById ( $rinfo ['cid'] );
// 			$rinfo ['staffDetail'] = $staff->getStaffBySid ( $rinfo ['staff'] );
			// $rinfo['sum']=number_format ($rinfo['sum'],2);
	
			return $rinfo;
	}
	
	function getReceiptByinvoiceTrainId($invoiceTrainId = 0) {
		Doo::loadClass ( 'XDeode' );
		$XDeode = new XDeode ( 5 );
		
		Doo::loadModel ( 'L_category' );
		$Lcategory = new L_category ();
		Doo::loadModel ( 'staff' );
		$staff = new staff ();
		
		if (! is_numeric ( $invoiceTrainId ))
			$invoiceTrainId = $XDeode->decode ( $invoiceTrainId );
		
		$rinfo = $this->getOne ( array (
				'where' => 'invoiceTrainId=' . $invoiceTrainId,
				'asArray' => true 
		) );
		
		if (empty ( $rinfo )) {
			return array ();
		}
		
		$rinfo ['ridKey'] = $XDeode->encode ( $rinfo ['rid'] );
		$rinfo ['trainLoanRidKey'] = $XDeode->encode ( $rinfo ['trainLoanRid'] );
		$XDeode = new XDeode ( 7 );
		$rinfo ['ridKey7'] = $XDeode->encode ( $rinfo ['rid'] );
		
		$rinfo ['category'] = $Lcategory->getCategoryById ( $rinfo ['cid'] );
		$rinfo ['staffDetail'] = $staff->getStaffBySid ( $rinfo ['staff'] );
		
		return $rinfo;
	}
	
	/**
	 * 默认获得10条
	 * @param unknown $sid
	 * @param unknown $cid
	 * @param unknown $limit
	 */
	function getReceiptLoanByStatus($sid, $cid, $status, $limit = 10) {
		$sql = '';
		if ($sid !== false && is_numeric ( $sid )) {
			$sql .= ' and staff=' . $sid;
		}
		if ($cid !== false && is_numeric ( $cid )) {
			$sql .= ' and cid=' . $cid;
		}
		
		$list = $this->find ( array (
				'where' => 'Rtype=1 and status=' . $status . $sql,
				'asArray' => true 
		) );
		Doo::loadClass ( 'XDeode' );
		$XDeode = new XDeode ( 5 );
		foreach ( $list as $key => $value ) {
			$list [$key] ['ridKey'] = $XDeode->encode ( $list [$key] ['rid'] );
		}
		return $list;
	}
	
	/**
	 * 获得需要记录流水的费用
	 * @param unknown $status
	 * @return string
	 */
	function getReceiptByWaste() {
		$list = $this->find ( array (
				'where' => 'status=2 or status=6 or status=1',
				'asArray' => true 
		) );
		Doo::loadClass ( 'XDeode' );
		$XDeode = new XDeode ( 5 );
		$XDeode7 = new XDeode ( 7 );
		Doo::loadModel ( 'wasteBook' );
		$wasteBook = new wasteBook ();
		
		$accountType = 0;
		foreach ( $list as $key => $value ) {
			$list [$key] ['ridKey7'] = $XDeode7->encode ( $list [$key] ['rid'] );
			$list [$key] ['ridKey'] = $XDeode->encode ( $list [$key] ['rid'] );
			
			if ($list [$key] ['Rtype'] == 0) {
				$accountType = 3;
			} elseif ($list [$key] ['Rtype'] == 1) {
				if (! empty ( $list [$key] ['accountItem'] ))
					$accountType = 2;
				else
					$accountType = 1;
			} elseif ($list [$key] ['Rtype'] == 2) {
				$accountType = 4;
			} elseif ($list [$key] ['Rtype'] == 3) {
				$accountType = 12;
			}
			
			// 是否已经生成流水
			$wbDetail = array ();
			if (! empty ( $accountType )) {
				$wbDetail = $wasteBook->getWateBookByAD ( $accountType, $list [$key] ['rid'] );
				if (! empty ( $wbDetail )) {
					unset ( $list [$key] );
				}
			} else {
				unset ( $list [$key] );
			}
		}
		return $list;
	}
	
	/**
	 * 根据参数字段更新相应字段（主键ID必须传）
	 * @param array $item 相关需要更新的字段信息
	 * @return number 返回发票ID
	 */
	public function setReceiptByCondition($item = array(), $rid = "") {
		$lid = 0;
		
		if (is_array ( $item ) && ! empty ( $item )) {
			foreach ( $item as $key => $value ) {
				$this->$key = $value;
			}
			
			if (! empty ( $isid )) {
				$condition = array (
						'where' => "rid in (" . $rid . ")",
						'asArray' => TRUE 
				);
				$this->update ( $condition );
			} else
				$lid = $this->update ();
		}
		return $lid;
	}
}

?>