accountItem = new account_item_cld (); Doo::loadModel ( 'cld/verify_cld' ); $this->verify = new verify_cld (); Doo::loadModel ( 'cld/receipt_cld' ); $this->receipt = new receipt_cld (); Doo::loadClass ( 'XDeode' ); $this->XDeode = new XDeode ( 9 ); Doo::loadModel ( 'receiptDetail' ); Doo::loadModel ( 'cld/category_cld' ); $this->category = new category_cld (); Doo::loadModel ( 'cld/traveDate_cld' ); $this->traveDate_cld = new traveDate_cld (); Doo::loadModel ( 'cld/staff_cld' ); $this->staff = new staff_cld (); } // 费用 报销单-创建-参数校验 public function ValidRuleReceiptCreate($data = array()) { if (empty ( $data ['verifyId'] )) { die ( 'illegal request-请选择审批组' ); } $data ['verifyId'] = $this->XDeode->decode ( $data ['verifyId'] ); if (! is_numeric ( $data ['verifyId'] )) { die ( 'illegal request-请选择审批组' ); } if (empty ( $data ['officeId'] )) { die ( 'illegal request-请选择办事处' ); } $data ['officeId'] = $this->XDeode->decode ( $data ['officeId'] ); if (! is_numeric ( $data ['officeId'] )) { die ( 'illegal request-请选择办事处' ); } if ($data ['traveData'] == "" && $data ['officeData'] == "" && $data ['trainData'] == "") { die ( 'illegal request-请选择费用类型' ); } // 字符串转换Json $hasType = 0; if ($data ['traveData'] != "") { $data ['traveJson'] = json_decode ( $data ['traveData'], true ); if ($data ['traveJson'] ['show']) { $hasType ++; // 日期合法性检查 //print_r($data ['traveJson']);die; } } if ($data ['officeData'] != "") { $data ['officeJson'] = json_decode ( $data ['officeData'], true ); if ($data ['officeJson'] ['show']) { $hasType ++; } } if ($data ['trainData'] != "") { $data ['trainJson'] = json_decode ( $data ['trainData'], true ); if ($data ['trainJson'] ['show']) { $hasType ++; } } if ($hasType == 0) { die ( 'illegal request-请选择费用类型' ); } return $data; } // 获得费用的细则 public function GetAccountItem() { $data = $this->accountItem->GetAll (); $list = array ( 'daily' => array (), 'other' => array (), 'trave' => array (), 'train' => array () ); foreach ( $data as $value ) { $value ['price'] = 0; if ($value ['category'] == "日常相关费用") { array_push ( $list ['daily'], $value ); } if ($value ['category'] == "其他") { array_push ( $list ['other'], $value ); } if ($value ['category'] == "内部培训费用") { array_push ( $list ['train'], $value ); } if ($value ['category'] == "差旅相关费用") { $value ['remark'] = ""; array_push ( $list ['trave'], $value ); } } return $list; } // 审批组 public function GetVerifyType($subordinate="",$subordinate2="") { $list = $this->verify->getVerifyBySubordinate($subordinate,$subordinate2); return $list; } // 获得报销单 public function GetReceipt($receiptId) { $detail = $this->receipt->Get ( $receiptId ); $detail ['verify'] = $this->XDeode->encode ( $detail ['verify'] ); $detail ['cid'] = $this->XDeode->encode ( $detail ['cid'] ); $detail ['receiptId'] = $this->XDeode->encode ( $detail ['rid'] ); //费用结算-用于流水 $relust = bcsub ( $detail ['sum'], $detail ['loanSum'], 2 ); $detail ['relust'] = $relust; $detail ['relustABS'] = abs ( $relust ); return $detail; } // 创建报销单 public function ReceiptCreate($data, $staff) { $receipt = new receipt_cld (); // 1.办事处相关费用 $total = 0; if (! empty ( $data ['officeData'] )) { if ($data ['officeJson'] ['show']) { foreach ( $data ['officeJson'] ['daily'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } foreach ( $data ['officeJson'] ['other'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } } } // 差旅相关费用 if (! empty ( $data ['traveData'] )) { if ($data ['traveJson'] ['show']) { foreach ( $data ['traveJson'] ['trave'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } } } // 内部培训费用 if (! empty ( $data ['trainData'] )) { if ($data ['trainJson'] ['show']) { foreach ( $data ['trainJson'] ['train'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } } } $receipt->officeJson = $data ['officeData']; $receipt->traveJson = $data ['traveData']; $receipt->trainJson = $data ['trainData']; $receipt->remittanceName = $data ['remittanceName']; $receipt->bankName = $data ['bankName']; $receipt->bankNumber = $data ['bankNumber']; $receipt->remittanceBankType = $data ['remittanceBankType']; if ($data ['remittanceBankType'] == 1) { $receipt->coupletNumber = $data ['coupletNumber']; } $receipt->status = 5; $receipt->date = date ( "Y-m-d" ); $receipt->staff = $staff ['sid']; $receipt->cid = $data ['officeId']; $receipt->verify = $data ['verifyId']; $receipt->sum = $total; $receipt->receiptOrder = "#B" . date ( "Ymd" ) . mt_rand ( 1000, 9999 ); Doo::loadModel ( 'execute' ); $execute = new execute (); $executeDetail = $execute->getOne ( array ( 'where' => 'mold="报销单执行人"', 'asArray' => true ) ); $receipt->executeCopy = $executeDetail ['staff']; $receipt->version = 1; $rid = $receipt->insert (); // 附件 if (! empty ( $data ['enclosurFiles'] )) { Doo::loadModel ( 'enclosur' ); $data ['enclosurFiles'] = json_decode ( $data ['enclosurFiles'], true ); foreach ( $data ['enclosurFiles'] as $value ) { $enclosur = new enclosur (); $enclosur->name = $value ['path']; $enclosur->rid = $rid; $enclosur->insert (); } } // 创建报销单详情 $this->makeReceiptDetailCreate ( $data, $staff, $rid ); return ""; } // 编辑报销单 public function ReceiptEdi($data, $staff) { $receiptId = $this->XDeode->decode ( $data ['receiptId'] ); if (! is_numeric ( $receiptId )) { die ( 'illegal request-找不到该报销单-参数不正确' ); } $detail = $this->receipt->Get ( $receiptId ); if (empty ( $detail )) { die ( 'illegal request-找不到该报销单' ); } $receipt = new receipt_cld (); // 1.办事处相关费用 $total = 0; if (! empty ( $data ['officeData'] )) { if ($data ['officeJson'] ['show']) { foreach ( $data ['officeJson'] ['daily'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } foreach ( $data ['officeJson'] ['other'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } } } // 差旅相关费用 if (! empty ( $data ['traveData'] )) { if ($data ['traveJson'] ['show']) { foreach ( $data ['traveJson'] ['trave'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } } } // 内部培训费用 if (! empty ( $data ['trainData'] )) { if ($data ['trainJson'] ['show']) { foreach ( $data ['trainJson'] ['train'] as $value ) { $total = bcadd ( $total, $value ['price'], 2 ); } } } $receipt->officeJson = $data ['officeData']; $receipt->traveJson = $data ['traveData']; $receipt->trainJson = $data ['trainData']; $receipt->remittanceName = $data ['remittanceName']; $receipt->bankName = $data ['bankName']; $receipt->bankNumber = $data ['bankNumber']; $receipt->remittanceBankType = $data ['remittanceBankType']; if ($data ['remittanceBankType'] == 1) { $receipt->coupletNumber = $data ['coupletNumber']; } $receipt->cid = $data ['officeId']; if($data ['status']!=4){ $receipt->verify = $data ['verifyId']; } $receipt->sum = $total; Doo::loadModel ( 'execute' ); $execute = new execute (); $executeDetail = $execute->getOne ( array ( 'where' => 'mold="报销单执行人"', 'asArray' => true ) ); $receipt->executeCopy = $executeDetail ['staff']; $receipt->rid = $receiptId; $receipt->update (); // 先删除 $receiptDetail = new receiptDetail (); $receiptDetail->delete ( array ( 'where' => 'rid=' . $receiptId ) ); // 新增报销单详情 $this->makeReceiptDetailCreate ( $data, $staff, $receiptId ); // 附件 if (! empty ( $data ['enclosurFiles'] )) { Doo::loadModel ( 'enclosur' ); $data ['enclosurFiles'] = json_decode ( $data ['enclosurFiles'], true ); foreach ( $data ['enclosurFiles'] as $value ) { $enclosur = new enclosur (); $enclosur->name = $value ['path']; $enclosur->rid = $receiptId; $enclosur->insert (); } } return ""; } //更新借款报销单数据 public function LoanReceiptEdi($receiptId){ $receiptId = $this->XDeode->decode ( $receiptId ); if (! is_numeric ( $receiptId )) { die ( 'illegal request-找不到该报销单-参数不正确' ); } $detail = $this->receipt->Get ( $receiptId ); if (empty ( $detail )) { die ( 'illegal request-找不到该报销单' ); } $receipt = new receipt_cld (); if ($detail['status']!=7){ $receipt->loanSum = $detail ['sum']; } $receipt->date = date ( "Y-m-d" ); $receipt->pastDate = '0000-00-00'; $receipt->verifyStaff = ''; $receipt->executeStaff = ''; $receipt->status = 7; $receipt->version = 1; $receipt->rid = $receiptId; $receipt->update (); } // 获得借款报销单 public function GetLoanReceipt($loanReceiptId,$staff) { Doo::loadModel ( 'loanReceipt' ); $loanReceipt = new loanReceipt (); $loan = $loanReceipt->getOne ( array ( 'where' => 'rid=' . $loanReceiptId, 'desc' => 'rid', 'asArray' => true ) ); $categoryDetil = $this->category->getOne ( array ( 'where' => 'cid=' . $loan ['cid'], 'asArray' => true ) ); $loan ['category'] = $categoryDetil ['title']; $loan ['accountItem'] = json_decode ( $loan ['accountItem'], true ); $loan ['loanItem'] = json_decode ( $loan ['loanItem'], true ); $loan ['BIGsum'] = $this->num_to_rmb ( $loan ['sum'] ); $loan ['verifyList'] = $this->makeVerifyProcess ( $loan ['verify'], $loan ['verifyStaff'],$staff ); return $loan; } // 获得差旅日期 public function GetTraveDateAll($sid){ $traveData=$this->traveDate_cld->GetAllBySid($sid); $data=array(); foreach ($traveData as $key=>$value){ if(!empty($value['start'])&&!empty($value['end'])){ array_push($data, array(strtotime($value['start']),strtotime($value['end']))); } } return $data; } //费用分页 public function GetFeePage($data=array()){ if (!empty($data['categoryId'])){ $data['categoryId']=$this->XDeode->decode($data['categoryId']); } if (!empty($data['staffId'])){ $data['staffId']=$this->XDeode->decode($data['staffId']); } if(empty($data['year'])){ $data['year']=date ( "Y" ); } if(!is_numeric($data['pSize'])){ $data['pSize']=20; } if(!is_numeric($data['cPage'])){ $data['cPage']=0; }else{ $data['cPage']=( $data['cPage']-1) * $data['pSize']; } $data=$this->receipt->GetPage($data); //获得办事处信息 $office=$this->category->GetAll(); //获得员工信息 $staffList=$this->staff->find(array('asArray' => TRUE)); foreach ($data['list'] as $key=>$value){ $data['list'][$key]['ridOld']=$value['rid']; $data['list'][$key]['rid']=$this->XDeode->encode($value['rid']); $data['list'][$key]['cid']=$this->XDeode->encode($value['cid']); $data['list'][$key]['staff']=$this->XDeode->encode($value['staff']); $data['list'][$key]['categoryValue']=""; $data['list'][$key]['statusValue']=$this->feeStatusValue[$value['status']]; foreach ($office as $k=>$v){ if($v['cid']==$data['list'][$key]['cid']){ $data['list'][$key]['categoryValue']=$v['title']; } } $data['list'][$key]['staffName']=""; foreach ($staffList as $k=>$v){ if($v['sid']==$value['staff']){ $data['list'][$key]['staffName']=$v['username']; } } $data['list'][$key]['Rtype']=$this->feeTypeValue[$value['Rtype']]; if($this->getFeeLoanType($value)){ $data['list'][$key]['Rtype'].="报销单"; } if($value['pastDate']=="0000-00-00"){ $data['list'][$key]['pastDate']=""; } if($value['version']==1){ $data['list'][$key]['explanation']=$this->getReceiptVerson1Explanation($value); } } return $data; } private $feeTypeValue=array( 0=>"报销单", 1=>"借款", 2=>"对公汇款", 3=>"培训班费用", ); private $feeStatusValue=array( 1=>"待执行", 2=>"审批中", 3=>"终止", 4=>"撤回", 5=>"待提交", 6=>"待执行", 7=>"待提交", 8=>"执行完成", 9=>"执行完成", 10=>"已锁定", ); //获得借款-报销单类型 0借款 1借款报销单 private function getFeeLoanType($value){ $type=0; if($value['Rtype']==1){ if($value['version']==1){ $type=1; }else{ if(!empty($value['accountItem'])){ $type=1; } } } return $type; } //获得新版报销单费用说明 private function getReceiptVerson1Explanation($value){ $version_1_explanation=""; if($value['version']==1){ if(!empty($value['officeJson'])){ $officeJson=json_decode($value['officeJson'],true); $version_1_explanation.=$officeJson['officeExplain'][0]['officeExplain']."\n"; } if(!empty($value['traveJson'])){ $traveJson=json_decode($value['traveJson'],true); $version_1_explanation.=$traveJson['traveExplain'][0]['traveExplain']."\n"; } if(!empty($value['trainJson'])){ $trainJson=json_decode($value['trainJson'],true); $version_1_explanation.=$trainJson['trainExplain'][0]['trainExplain']."\n"; } } return $version_1_explanation; } // 获得审批流程 private function makeVerifyProcess($verifyId, $verifyStaff,$staffMy) { // 检测编辑状态 $verifyList = $this->verify->getOne ( array ( 'where' => 'vid=' . $verifyId, 'asArray' => true ) ); $verifyList = json_decode ( $verifyList ['staff'], true ); // status opinion $verifyStaff = json_decode ( $verifyStaff, true ); Doo::loadModel ( 'role' ); $role = new role (); Doo::loadModel ( 'staff' ); $staff = new staff (); $flag = true; $roleKey = 0; $endStaffArray = array (); $roleArrayCopy = array (); foreach ( $verifyList as $k => $v ) { // init verifyStaff if ($v [1] == 'ROLE') { if (! empty ( $verifyStaff )) { $endStaffArray = end ( $verifyStaff ); // if ($v[0]==$endStaffArray['nextStaff']){ // $roleId=$v[0]; // } } $roleVerify = json_decode ( $v [3], true ); $roleKey = $k; $roleArray = array (); $rolename = $role->getOne ( array ( 'where' => 'rid=' . $v [0], 'asArray' => true ) ); foreach ( $roleVerify as $o => $p ) { $staffID = explode ( '_', $p ); $staffInfo = $staff->getOne ( array ( 'where' => 'sid=' . $staffID [0], 'asArray' => true ) ); // print_r($staffID); $exp = array ( 0 => $staffInfo ['sid'], 1 => $staffID [1], 2 => $staffInfo ['avatar'], 'date' => '', 'date' => '', 'opinion' => '', 'status' => '', 'rolename' => $rolename ['name'] ); array_push ( $roleArray, $exp ); } $roleArrayCopy [$v [0]] = $roleArray; // $verifyList[$k]['roleArray']=$roleArray; } $verifyList [$k] ['date'] = ""; $verifyList [$k] ['opinion'] = ""; $verifyList [$k] ['status'] = ""; if (empty ( $verifyStaff )) { $verifyList [$k] ['date'] = ""; $verifyList [$k] ['opinion'] = ""; if (($verifyList [0] [0] == $this->staff [0] ['sid']) && $flag) { $verifyList [$k] ['status'] = 4; $flag = false; } } else { foreach ( $verifyStaff as $m => $u ) { if ($v [0] == $m) { $verifyList [$k] ['date'] = $u ['date']; $verifyList [$k] ['opinion'] = $u ['opinion']; $verifyList [$k] ['status'] = $u ['status']; $flag = false; break; } } $endStaffArray = end ( $verifyStaff ); if (isset ( $endStaffArray ['ROLE'] )) { } else { } } } $rolename ['name'] = ''; if (! empty ( $verifyStaff )) $endStaffArray = end ( $verifyStaff ); $KOP = false; foreach ( $roleArrayCopy as $P => $A ) { foreach ( $A as $MKI => $AVL ) { if (! empty ( $verifyStaff )) { // FIXME // print_r($this->staff); // die; // &&$rolename['rid']==$endStaffArray['nextStaff'] if ($staffMy ['sid'] == $AVL [0] && isset ( $endStaffArray ['ROLE'] ) && $rolename ['rid'] == $endStaffArray ['nextStaff']) { $button = 4; $roleArrayCopy [$P] [$MKI] ['status'] = 4; } foreach ( $verifyStaff as $m => $u ) { $AVLFK = $AVL [0] . '_R'; // echo $AVLFK.'=='.$m;var_dump($AVLFK==$m);echo '
'; if (strcmp ( $AVLFK, $m ) == 0) { // &&isset($u['ROLE'])&&$u['ROLE']==1 $roleArrayCopy [$P] [$MKI] ['date'] = $u ['date']; $roleArrayCopy [$P] [$MKI] ['opinion'] = $u ['opinion']; $roleArrayCopy [$P] [$MKI] ['status'] = $u ['status']; break; } } } else { if ($staffMy ['sid'] == $AVL [0] && $verifyList [0] [1] == 'ROLE') { $button = 4; $roleArrayCopy [$P] [$MKI] ['status'] = 4; } } // $roleArray[$MKI]['rolename']=$rolename['name']; $KOP = true; } } foreach ( $roleArrayCopy as $k => $v ) { foreach ( $verifyList as $m => $n ) { if ($n [0] == $k) { array_splice ( $verifyList, $m, 1, $v ); } } } return $verifyList; } private function makeReceiptDetailCreate($data, $staff, $rid) { // 报销单详情 if (! empty ( $data ['officeData'] )) { if ($data ['officeJson'] ['show']) { foreach ( $data ['officeJson'] ['daily'] as $value ) { if ($value ['price'] != 0) { $itemData = array ( "staff" => $staff ['sid'], "itemCategory" => $value ['category'], "item" => $value ['name'], "price" => $value ['price'], "date" => date ( "Y-m-d" ), "cid" => $data ['officeId'], "rid" => $rid, "status" => 4 ); $this->ReceiptDetailCreate ( $itemData ); } } foreach ( $data ['officeJson'] ['other'] as $value ) { if ($value ['price'] != 0) { $itemData = array ( "staff" => $staff ['sid'], "itemCategory" => $value ['category'], "item" => $value ['name'], "price" => $value ['price'], "date" => date ( "Y-m-d" ), "cid" => $data ['officeId'], "rid" => $rid, "status" => 4 ); $this->ReceiptDetailCreate ( $itemData ); } } } } // 差旅相关费用 if (! empty ( $data ['traveData'] )) { if ($data ['traveJson'] ['show']) { foreach ( $data ['traveJson'] ['trave'] as $value ) { if ($value ['price'] != 0) { $itemData = array ( "staff" => $staff ['sid'], "itemCategory" => $value ['category'], "item" => $value ['name'], "price" => $value ['price'], "date" => date ( "Y-m-d" ), "cid" => $data ['officeId'], "rid" => $rid, "status" => 4 ); $this->ReceiptDetailCreate ( $itemData ); } } } } // 内部培训费用 if (! empty ( $data ['trainData'] )) { if ($data ['trainJson'] ['show']) { foreach ( $data ['trainJson'] ['train'] as $value ) { if ($value ['price'] != 0) { $itemData = array ( "staff" => $staff ['sid'], "itemCategory" => $value ['category'], "item" => $value ['name'], "price" => $value ['price'], "date" => date ( "Y-m-d" ), "cid" => $data ['officeId'], "rid" => $rid, "status" => 4 ); $this->ReceiptDetailCreate ( $itemData ); } } } } } // 新增报销单详情 public function ReceiptDetailCreate($data = array()) { $receiptDetail = new receiptDetail (); $receiptDetail->staff = $data ['staff']; $receiptDetail->item = $data ['item']; $receiptDetail->itemCategory = $data ['itemCategory']; $receiptDetail->price = $data ['price']; $receiptDetail->date = $data ['date']; $receiptDetail->cid = $data ['cid']; $receiptDetail->rid = $data ['rid']; $receiptDetail->status = $data ['status']; $receiptDetail->insert (); } public function num_to_rmb($num) { $c1 = "零壹贰叁肆伍陆柒捌玖"; $c2 = "分角元拾佰仟万拾佰仟亿"; // 精确到分后面就不要了,所以只留两个小数位 $num = round ( $num, 2 ); // 将数字转化为整数 $num = $num * 100; if (strlen ( $num ) > 10) { return "金额太大,请检查"; } $i = 0; $c = ""; while ( 1 ) { if ($i == 0) { // 获取最后一位数字 $n = substr ( $num, strlen ( $num ) - 1, 1 ); } else { $n = $num % 10; } // 每次将最后一位数字转化为中文 $p1 = substr ( $c1, 3 * $n, 3 ); $p2 = substr ( $c2, 3 * $i, 3 ); if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) { $c = $p1 . $p2 . $c; } else { $c = $p1 . $c; } $i = $i + 1; // 去掉数字最后一位了 $num = $num / 10; // echo $num.'
'; $num = ( int ) $num; // $num =floor($num); // $num = round ( $num, 0, PHP_ROUND_HALF_DOWN ); // echo $num.'
'; // 结束循环 if ($num == 0) { break; } } // echo $c.'
'; $j = 0; $slen = strlen ( $c ); while ( $j < $slen ) { // utf8一个汉字相当3个字符 $m = substr ( $c, $j, 6 ); // 处理数字中很多0的情况,每次循环去掉一个汉字“零” if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') { $left = substr ( $c, 0, $j ); $right = substr ( $c, $j + 3 ); $c = $left . $right; $j = $j - 3; $slen = $slen - 3; } $j = $j + 3; } // 这个是为了去掉类似23.0中最后一个“零”字 if (substr ( $c, strlen ( $c ) - 3, 3 ) == '零') { $c = substr ( $c, 0, strlen ( $c ) - 3 ); } // 将处理的汉字加上“整” if (empty ( $c )) { return "零元整"; } else { return $c . "整"; } } } ?>