Explorar el Código

开票审批流程50%

caipin hace 8 años
padre
commit
f56a61bb35

+ 75 - 0
protected/class/XDeode.php

@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * 加密解密类
+ * 该算法仅支持加密数字。比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密。
+ * @author 深秋的竹子
+ * @email  81254648@qq.com
+ * @version alpha
+ * @加密原则 标记长度 + 补位 + 数字替换
+ * @加密步骤:
+ * 将a-z,A-Z,0-9 62个字符打乱,取前M(数字最大的位数)位作为 标记长度字符串,取第M+1 到第M+10位为数字替换字符串,剩余的为补位字符串
+ * 1.计算数字长度n,取乱码的第n位作为标记长度。
+ * 2.计算补位的长度,加密串的长度N -1 - n 为补位的长度。根据指定的算法得到补位字符串。
+ * 3.根据数字替换字符串替换数字,得到数字加密字符串。
+ * 标记长度字符 + 补位字符串 + 数字加密字符串 = 加密串
+ * Usage:
+ *      $obj = new XDeode(9);
+ *      $e_txt = $obj->encode(123);
+ *      echo $e_txt.'<br/>';
+ *      echo $key->decode($e_txt);
+ */
+class XDeode {
+    private $strbase = "Flpvf70CsakVjqgeWUPXQxSyJizmNH6B1u3b8cAEKwTd54nRtZOMDhoG2YLrI";
+    private $key,$length,$codelen,$codenums,$codeext;
+    function __construct($length = 9,$key = 2543.5415412812){
+        $this->key = $key;
+        $this->length = $length;
+        $this->codelen = substr($this->strbase,0,$this->length);
+        $this->codenums = substr($this->strbase,$this->length,10);
+        $this->codeext = substr($this->strbase,$this->length + 10);
+    }
+ 
+    function encode($nums){
+        $rtn = "";
+        $numslen = strlen($nums);
+        //密文第一位标记数字的长度
+        $begin = substr($this->codelen,$numslen - 1,1);
+ 
+        //密文的扩展位
+        $extlen = $this->length - $numslen - 1;
+        $temp = str_replace('.', '', $nums / $this->key);
+        $temp = substr($temp,-$extlen);
+ 
+        $arrextTemp = str_split($this->codeext);
+        $arrext = str_split($temp);
+        foreach ($arrext as $v) {
+            $rtn .= $arrextTemp[$v];
+        }
+ 
+        $arrnumsTemp = str_split($this->codenums);
+        $arrnums = str_split($nums);
+        foreach ($arrnums as $v) {
+            $rtn .= $arrnumsTemp[$v];
+        }
+        return $begin.$rtn;
+    }
+ 
+    function decode($code){
+ 
+        $begin = substr($code,0,1);
+        $rtn = '';
+        $len = strpos($this->codelen,$begin);
+        if($len!== false){
+            $len++;
+            $arrnums = str_split(substr($code,-$len));
+            foreach ($arrnums as $v) {
+                $rtn .= strpos($this->codenums,$v);
+            }
+        }
+         
+        return $rtn;
+    }
+}
+
+?>

+ 185 - 4
protected/controller/InvoiceController.php

@@ -177,10 +177,12 @@ class InvoiceController extends DooController {
 		$invoice=new invoice();
 		Doo::loadModel('invoiceManage');
 		$invoiceManage=new invoiceManage();
+		Doo::loadClass('XDeode');
+		$XDeode=new XDeode(5);
 		
 		$invoiceList=$invoice->find(array('where'=>'status=1 and pendingApprovals='.$this->staff[0]['sid'],'asArray'=>true));
 		foreach ($invoiceList as $key=>$value){
-			$invoiceList[$key]['iidKey']=base64_encode($value['iid']);
+			$invoiceList[$key]['iidKey']=$XDeode->encode($value['iid']);//base64_encode($value['iid']);
 		}
 		
 		$data['invoiceList']=$invoiceList;
@@ -194,15 +196,18 @@ class InvoiceController extends DooController {
 	}
 	
 	function invoiceDetail(){
+		Doo::loadClass('XDeode');
+		$XDeode=new XDeode(5);
 		
 		$iid=isset($this->params['iid'])?$this->params['iid']:"";
-		$iid=base64_decode($iid);
+		$iid=$XDeode->decode($iid);//base64_decode($iid);
 		
 		Doo::loadModel('invoice');
 		$invoice=new invoice();
 		Doo::loadModel('invoiceManage');
 		$invoiceManage=new invoiceManage();
 		
+		
 		$invoiceDetail=$invoice->getOne(array('where'=>'status=1 and pendingApprovals='.$this->staff[0]['sid'].' and iid='.$iid,'asArray'=>true));
 		
 		$invoiceManageDetail=$invoiceManage->getOne(array('SELECT'=>'title','where'=>'mold="发票审批"','asArray'=>true));
@@ -222,7 +227,7 @@ class InvoiceController extends DooController {
 	}
 	
 	function invoiceApprovalDo(){
-		$iid=$this->get_args('iid')?$this->get_args('iid'):"";
+		$iid=$this->get_args('invoiceKey')?$this->get_args('invoiceKey'):"";
 		$status=$this->get_args('status')&&is_numeric($this->get_args('status'))?$this->get_args('status'):0;
 		$opinion=$this->get_args('opinion')?$this->get_args('opinion'):"";
 		
@@ -233,10 +238,186 @@ class InvoiceController extends DooController {
 			$invoice=new invoice();
 			
 			$iid=$this->authcode($iid);
+			$invoiceDetail=$invoice->getOne(array('where'=>'status=1 and iid='.$iid.' and pendingApprovals='.$this->staff[0]['sid'],'asArray'=>true));
+			if (empty($invoiceDetail))
+				die('illegal request');
+
+			$processApprovals=json_decode($invoiceDetail['processApprovals'],true);	
+			$invoiceManage=json_decode($invoiceDetail['invoiceManage'],true);	
 			
-			$invoice->getOne(array('where'=>'status=1 and iid='.$iid.' and pendingApprovals='.$this->staff[0]['sid'],'asArray'=>true));
+			$invoice->status=$status;
+			if ($status==3){
+				//操作日志
+			}else{
+				if(empty($processApprovals)){//记录下一个IDKEY
+					$processApprovals=array($this->staff[0]['sid']=>array('date'=>date('Y-m-d'),'opinion'=>$opinion,'status'=>$status));
+					//if($status==4)
+					//	$processApprovals=array('final'=>$status,$this->staff[0]['sid']=>array('date'=>date('Y-m-d'),'opinion'=>$opinion,'status'=>$status));
+					if ($status!=4)
+						$invoice->pendingApprovals=$invoiceManage[1][0];
+					$invoice->processApprovals=$processApprovals;
+				}else{
+					
+					$processApprovals[$this->staff[0]['sid']]=array('date'=>date('Y-m-d'),'opinion'=>$opinion,'status'=>$status);
+					if($status!=4)
+						$invoice->pendingApprovals=$invoiceManage[1][0];
+						
+					$invoice->processApprovals=$processApprovals;
+				}
+			}	
 			
+			print_r($processApprovals);
 			
+			//$invoice->
+			/*
+			if (isset($verifyStaff['final'])){//rDetail
+				$receipt->verifyBreakup=$verifyString;
+				$receipt->status=3;
+				$receiptDetailObj->status=3;
+				$receiptDetailObj->update(array('where'=>'rid='.$rid));
+				
+				
+				
+				
+				if (!empty($roleId)){
+					Doo::loadModel("role");
+					$role=new role();
+					$roleInfo=$role->getOne(array('where'=>'rid='.$roleId,'asArray'=>true));
+					
+					$receiptLog->rolename=$roleInfo['name'];
+				}
+				
+				$receiptLog->username=$this->staff[0]['username'];
+				$receiptLog->uid=$this->staff[0]['sid'];
+				$receiptLog->date=date("Y-m-d");
+				$receiptLog->opinion=$opinion;
+				$receiptLog->img=$this->staff[0]['avatar'];
+				$receiptLog->status=3;
+				$receiptLog->rid=$rid;
+				$receiptLog->insert();
+				
+				
+			}elseif(count($verifyStaff)==count($verifyDetail)){//要修改 角色的数量
+				$receipt->status=1;$reviseSum=0;
+				$receipt->verifyBreakup=$verifyString;
+				if(!empty($receiptDetail['reviseDetail'])){//statistics item rDetail
+					$reviseDetail=json_decode($receiptDetail['reviseDetail'],true);
+					
+					foreach ($reviseDetail as $key=>$value){
+						$receiptDetailObj=new receiptDetail();
+						$receiptDetailObj->staff=$receiptDetail['staff'];// $this->staff[0]['sid'];
+						$receiptDetailObj->item=$value['description'];
+						$receiptDetailObj->itemCategory="报销金额调整";
+						$receiptDetailObj->price=$value['price'];
+						$receiptDetailObj->date=$receiptDetail['date'];
+						$receiptDetailObj->cid=$this->staff[0]['cid'];
+						$receiptDetailObj->rid=$rid;
+						$receiptDetailObj->status=1;
+						$receiptDetailObj->insert();
+						$reviseSum+=$value['price'];
+					}
+					
+					$itemStatistics=new itemStatistics();
+					$itemStatistics->cid=$receiptDetail['cid'];//$this->staff[0]['cid'];
+					$itemStatistics->staff=$receiptDetail['staff'];//$this->staff[0]['sid'];
+					$itemStatistics->price=$reviseSum;
+					$itemStatistics->itemCategory="报销金额调整";
+					$itemStatistics->date=$receiptDetail['date'];
+					$itemStatistics->insert();
+				}
+				$receiptDetailObj=new receiptDetail();
+				$receiptDetailObj->status=1;
+				$receiptDetailObj->pastDate=date("Y-m-d");
+				$receiptDetailObj->update(array('where'=>'rid='.$rid));
+				
+				$dateArray=explode("-", $receiptDetail['date']);
+				$dateCondition=" and Year(date) =".$dateArray[0]." and Month(date) = ".$dateArray[1];
+				$stat=$statistics->getOne(array('where'=>'staff='.$receiptDetail['staff'].$dateCondition,'asArray'=>true));
+				if(empty($stat)){
+					$statistics->date=$receiptDetail['date'];
+					$statistics->cid=$receiptDetail['cid'];//$this->staff[0]['cid'];
+					$statistics->staff=$receiptDetail['staff'];//$this->staff[0]['sid'];
+					$statistics->agPrice=$receiptDetail['sum'];
+					$statistics->rePrice=$reviseSum;
+					$statistics->insert();
+				}else{
+					$statistics->agPrice=$stat['agPrice']+$receiptDetail['sum'];
+					$statistics->rePrice=$stat['rePrice']+$reviseSum;
+					$statistics->update(array('where'=>'sid='.$stat['sid']));
+				}
+				
+				$dateArray=explode("-", $receiptDetail['date']);
+				$dateCondition=" and Year(date) =".$dateArray[0]." and Month(date) = ".$dateArray[1];	
+				$accountItem=json_decode($receiptDetail['accountItem'],true);
+				foreach ($accountItem['cSum'] as $key=>$value){
+				if($key=="agencySum"){
+					$iStatistics=$itemStatistics->getOne(array('where'=>'staff='.$receiptDetail['staff'].' and itemCategory="'.$this->AGENCY.'"'.$dateCondition,'asArray'=>true));
+					if(empty($iStatistics)){
+						$itemStatistics->cid=$receiptDetail['cid'];;
+						$itemStatistics->staff=$receiptDetail['staff'];
+						$itemStatistics->price=$value;
+						$itemStatistics->itemCategory=$this->AGENCY;
+						$itemStatistics->date=$receiptDetail['date'];
+						$itemStatistics->insert();
+					}else{
+						if (!empty($value)){
+							$itemStatistics->price=$value+$iStatistics['price'];
+							$itemStatistics->update(array('where'=>'sid='.$iStatistics['sid']));
+						}
+					}
+				}elseif($key=="travelSum"){
+					$iStatistics=$itemStatistics->getOne(array('where'=>'staff='.$receiptDetail['staff'].' and itemCategory="'.$this->TRAVEL.'"'.$dateCondition,'asArray'=>true));
+					if(empty($iStatistics)){
+						$itemStatistics->cid=$receiptDetail['cid'];
+						$itemStatistics->staff=$receiptDetail['staff'];
+						$itemStatistics->price=$value;
+						$itemStatistics->itemCategory=$this->TRAVEL;
+						$itemStatistics->date=$receiptDetail['date'];
+						$itemStatistics->insert();
+					}else{
+						if (!empty($value)){
+							$itemStatistics->price=$value+$iStatistics['price'];
+							$itemStatistics->update(array('where'=>'sid='.$iStatistics['sid']));
+						}
+					}
+				}elseif($key=="trainSum"){
+					$iStatistics=$itemStatistics->getOne(array('where'=>'staff='.$receiptDetail['staff'].' and itemCategory="'.$this->TRAIN.'"'.$dateCondition,'asArray'=>true));
+					if(empty($iStatistics)){
+						$itemStatistics->cid=$receiptDetail['cid'];
+						$itemStatistics->staff=$receiptDetail['staff'];
+						$itemStatistics->price=$value;
+						$itemStatistics->itemCategory=$this->TRAIN;
+						$itemStatistics->date=$receiptDetail['date'];
+						$itemStatistics->insert();
+					}else{
+						if (!empty($value)){
+							$itemStatistics->price=$value+$iStatistics['price'];
+							$itemStatistics->update(array('where'=>'sid='.$iStatistics['sid']));
+						}
+					}
+				}elseif($key=="otherSum"){
+					$iStatistics=$itemStatistics->getOne(array('where'=>'staff='.$receiptDetail['staff'].' and itemCategory="'.$this->OTHER.'"'.$dateCondition,'asArray'=>true));
+					if(empty($iStatistics)){
+						$itemStatistics->cid=$receiptDetail['cid'];
+						$itemStatistics->staff=$receiptDetail['staff'];
+						$itemStatistics->price=$value;
+						$itemStatistics->itemCategory=$this->OTHER;
+						$itemStatistics->date=$receiptDetail['date'];
+						$itemStatistics->insert();
+					}else{
+						if (!empty($value)){
+							$itemStatistics->price=$value+$iStatistics['price'];
+							$itemStatistics->update(array('where'=>'sid='.$iStatistics['sid']));
+						}
+					}
+				}
+			}
+				$receipt->pastDate=date("Y-m-d");
+			}
+				
+				*/
+				
+				
 			echo $iid.$status.$opinion;
 			
 		}

+ 1 - 1
protected/view/admin/invoiceApprovalDetail.html

@@ -100,7 +100,7 @@
 						</table>
 						<!-- endif -->
 						<form action="/invoiceApprovalDo" method="post"  name="invoiceApproval">
-						<input type="hidden" name="iid" value="{{INVOICEKEY}}">
+						<input type="hidden" name="invoiceKey" value="{{INVOICEKEY}}">
 						<input type="hidden" name="status" value="">
 						<table class="table table-bordered table-condensed">
 							<tbody>