find ( array ( 'select' => 'staff', 'asArray' => true ) ); $list = array (); // 判断角色的审批权限 foreach ( $verifyList as $key => $value ) { $ver = json_decode ( $value ['staff'] ); foreach ( $ver as $k => $v ) { if ($v [1] == 'ROLE') { $roleList = json_decode ( $v [3] ); foreach ( $roleList as $t => $g ) { $gList = explode ( "_", $g ); array_push ( $list, $gList [0] ); // print_r($list); } } else array_push ( $list, $v [0] ); } } // 判断执行人的审批权限 $executeList = $execute->find ( array ( 'select' => 'staff', 'asArray' => true ) ); $list2 = array (); foreach ( $executeList as $key => $value ) { $ver = json_decode ( $value ['staff'] ); foreach ( $ver as $k => $v ) { array_push ( $list2, $v [0] ); } } $eidList = file_get_contents ( "protected/config/execute/execute.ini" ); $eidList = array_filter ( explode ( ",", $eidList ) ); $this->executeId = array_merge ( $list2, $eidList ); $this->verifyId = $list; $this->staff = $staff->getUserByIdList ( $_COOKIE ["staff"] ); ReceiptController::$NEW = $this->getReceiptCount (); ReceiptController::$NEW2 = $this->getExeCount (); return "/"; } } Doo::loadCore ( 'uri/DooUriRouter' ); $router = new DooUriRouter (); $routeRs = $router->execute ( Doo::app ()->route, Doo::conf ()->SUBFOLDER ); if ($routeRs ['1'] != "login") { header ( 'Content-Type:text/html;charset=utf-8' ); @header ( "Location: /login" ); } } function invoice() { Doo::loadModel ( 'invoice' ); $invoice = new invoice (); $pendingInvoice = $invoice->getPendingByInvoice (); $data ['pendingInvoice'] = $pendingInvoice; $data ['memu'] = "invoice"; $data ['staff'] = $this->staff; $data ['receiptMemu'] = 'invoice'; $data ['verifyId'] = $this->verifyId; $data ['executeId'] = $this->executeId; $this->render ( "/admin/invoice", $data ); } function invoiceAdd() { Doo::loadModel ( 'L_category' ); $lCategory = new L_category (); $category = $lCategory->find ( array ( 'asArray' => true ) ); $data ['category'] = $category; $data ['memu'] = "invoice"; $data ['staff'] = $this->staff; $data ['receiptMemu'] = 'invoice'; $data ['verifyId'] = $this->verifyId; $data ['executeId'] = $this->executeId; $this->render ( "/admin/invoiceAdd", $data ); } /** * 提交一份开票申请,并记录下操作日志 * * @since 1.0.0 * @var integer cid 办事处ID * @var integer invoiceType 发票类型 * @var integer doPost 是否邮寄 * @var integer invoicePrice 开票金额 * @var string invoiceElement 开票内容 * @var string invoiceTitle 发票抬头 * @var string invoiceCompany 单位名称 * @var string TIN 纳税人识别码 * @var string address 注册地址 * @var string phone 注册电话 * @var string bank 开户银行 * @var string bankAccount 银行账户 * @var string recipients 收件人 * @var string recipientsPhone 收件人手机/电话 * @var string recipientsAddress 收件地址 * @var string mailItems 邮寄物品 * @var string remark 备注 * @return string 返回跳转开票主页路径 */ function invoiceAddDo() { $cid = $this->get_args ( 'cid' ) && is_numeric ( $this->get_args ( 'cid' ) ) ? $this->get_args ( 'cid' ) : 0; $invoiceType = $this->get_args ( 'invoiceType' ) && is_numeric ( $this->get_args ( 'invoiceType' ) ) ? $this->get_args ( 'invoiceType' ) : 0; $doPost = $this->get_args ( 'doPost' ) && is_numeric ( $this->get_args ( 'doPost' ) ) ? $this->get_args ( 'doPost' ) : 0; $invoicePrice = $this->get_args ( 'invoicePrice' ) ? $this->get_args ( 'invoicePrice' ) : ""; $invoiceElement = $this->get_args ( 'invoiceElement' ) ? $this->get_args ( 'invoiceElement' ) : ""; $invoiceTitle = $this->get_args ( 'invoiceTitle' ) ? $this->get_args ( 'invoiceTitle' ) : ""; $invoiceCompany = $this->get_args ( 'invoiceCompany' ) ? $this->get_args ( 'invoiceCompany' ) : ""; $TIN = $this->get_args ( 'TIN' ) ? $this->get_args ( 'TIN' ) : ""; $address = $this->get_args ( 'address' ) ? $this->get_args ( 'address' ) : ""; $phone = $this->get_args ( 'phone' ) ? $this->get_args ( 'phone' ) : ""; $bank = $this->get_args ( 'bank' ) ? $this->get_args ( 'bank' ) : ""; $bankAccount = $this->get_args ( 'bankAccount' ) ? $this->get_args ( 'bankAccount' ) : ""; $recipients = $this->get_args ( 'recipients' ) ? $this->get_args ( 'recipients' ) : ""; $recipientsPhone = $this->get_args ( 'recipientsPhone' ) ? $this->get_args ( 'recipientsPhone' ) : ""; $recipientsAddress = $this->get_args ( 'recipientsAddress' ) ? $this->get_args ( 'recipientsAddress' ) : ""; $mailItems = $this->get_args ( 'mailItems' ) ? $this->get_args ( 'mailItems' ) : ""; $remark = $this->get_args ( 'remark' ) ? $this->get_args ( 'remark' ) : ""; if (! empty ( $cid ) && ! empty ( $invoicePrice ) && ! empty ( $invoiceElement )) { Doo::loadModel ( 'invoice' ); $invoice = new invoice (); Doo::loadModel ( 'L_category' ); $lCategory = new L_category (); Doo::loadModel ( 'invoiceManage' ); $invoiceManage = new invoiceManage (); Doo::loadModel ( 'invoiceOperationLog' ); $invoiceOperationLog = new invoiceOperationLog (); $categoryDetil = $lCategory->getOne ( array ( 'SELECT' => 'title', 'where' => 'cid=' . $cid, 'asArray' => true ) ); $invoiceManageDetail = $invoiceManage->getOne ( array ( 'SELECT' => 'title', 'where' => 'mold="发票审批"', 'asArray' => true ) ); $invoice->cid = $cid; $invoice->categoryName = $categoryDetil ['title']; $invoice->invoiceElement = $invoiceElement; $invoice->invoicePrice = $invoicePrice; $invoice->invoiceType = $invoiceType; if ($invoiceType == 0) $invoice->invoiceTitle = $invoiceTitle; elseif ($invoiceType == 1) { $invoice->invoiceCompany = $invoiceCompany; $invoice->TIN = $TIN; $invoice->address = $address; $invoice->phone = $phone; $invoice->bank = $bank; $invoice->bankAccount = $bankAccount; } $invoice->doPost = $doPost; if ($doPost == 1) { $invoice->recipients = $recipients; $invoice->recipientsPhone = $recipientsPhone; $invoice->recipientsAddress = $recipientsAddress; $invoice->mailItems = $mailItems; } $invoice->status = 1; $invoice->invoiceSerial = "#F" . date ( "Ymd" ) . mt_rand ( 1000, 9999 ); $invoice->date = date ( "Y-m-d H:i:s" ); $invoice->updateTime = date ( "Y-m-d H:i:s" ); $invoice->sid = $this->staff [0] ['sid']; $invoice->userName = $this->staff [0] ['username']; $invoice->invoiceManage = $invoiceManageDetail ['staff']; $staffId = $a = json_decode ( $invoiceManageDetail ['staff'] ); $invoice->pendingApprovals = $staffId [0] [0]; $invoice->remark = $remark; $iid = $invoice->insert (); $item = array ( 'date' => date ( "Y-m-d H:i:s" ), 'operation' => "创建", 'status' => 1, 'img' => $this->staff [0] ['avatar'], 'username' => $this->staff [0] ['username'], 'uid' => $this->staff [0] ['sid'], 'category' => $this->staff [0] ['category'], 'iid' => $iid ); $invoiceOperationLog->setInvoiceOperationLog ( $item ); $item = array ( 'date' => date ( "Y-m-d H:i:s" ), 'operation' => "提交审批", 'status' => 1, 'img' => $this->staff [0] ['avatar'], 'username' => $this->staff [0] ['username'], 'uid' => $this->staff [0] ['sid'], 'category' => $this->staff [0] ['category'], 'iid' => $iid ); $invoiceOperationLog->setInvoiceOperationLog ( $item ); } return "/invoice"; } function invoiceApproval() { Doo::loadModel ( 'invoice' ); $invoice = new invoice (); Doo::loadClass ( 'XDeode' ); $XDeode = new XDeode ( 5 ); Doo::loadModel ( 'staff' ); $staff = new staff (); $invoiceList = $invoice->find ( array ( 'where' => 'status=1 and pendingApprovals=' . $this->staff [0] ['sid'], 'desc' => 'iid', 'asArray' => true ) ); foreach ( $invoiceList as $key => $value ) { $invoiceList [$key] ['iidKey'] = $XDeode->encode ( $value ['iid'] ); $lastApprover = json_decode ( $value ['processApprovals'], true ); if (! empty ( $lastApprover )) { $lastApproverKey = array_keys ( $lastApprover ); $lastApprover = end ( $lastApprover ); $staffDetail = $staff->getOne ( array ( 'where' => 'sid=' . end ( $lastApproverKey ), 'asArray' => true ) ); $lastApprover ['username'] = $staffDetail ['username']; } $invoiceList [$key] ['lastApprover'] = $lastApprover; } $data ['invoiceList'] = $invoiceList; $data ['memu'] = "invoice"; $data ['staff'] = $this->staff; $data ['receiptMemu'] = 'invoiceApproval'; $data ['verifyId'] = $this->verifyId; $data ['executeId'] = $this->executeId; $this->render ( "/admin/invoiceApproval", $data ); } function invoiceDetail() { Doo::loadClass ( 'XDeode' ); $XDeode = new XDeode ( 5 ); $iid = isset ( $this->params ['iid'] ) ? $this->params ['iid'] : ""; $iid = $XDeode->decode ( $iid ); if (! is_numeric ( $iid )) die ( 'illegal request' ); Doo::loadModel ( 'invoice' ); $invoice = new invoice (); Doo::loadModel ( 'invoiceOperationLog' ); $invoiceOperationLog = new invoiceOperationLog (); $invoiceDetail = $invoice->getOne ( array ( 'where' => 'status=1 and pendingApprovals=' . $this->staff [0] ['sid'] . ' and iid=' . $iid, 'asArray' => true ) ); $invoiceOperationLogList = $invoiceOperationLog->getInvoiceOperationLogByIid ( $iid ); $data ['invoiceDetail'] = $invoiceDetail; $data ['invoiceOperationLogList'] = $invoiceOperationLogList; $data ['INVOICEKEY'] = $this->authcode ( $invoiceDetail ['iid'], '' ); $data ['memu'] = "invoice"; $data ['staff'] = $this->staff; $data ['receiptMemu'] = 'invoiceApproval'; $data ['verifyId'] = $this->verifyId; $data ['executeId'] = $this->executeId; $this->render ( "/admin/invoiceApprovalDetail", $data ); } /** * 对发票进行审批,其中操作有终止,退回,同意动作。操作成功并记录下操作日志 * * @since 1.0.0 * @var integer iid 开票ID 已加密 * @var integer status 发票审批状态 * @var integer opintion 审批发票的意见 * @return string 如操作成功返回审批首页 */ function invoiceApprovalDo() { $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' ) : ""; $iid = $this->authcode ( $iid ); if (! is_numeric ( $iid )) die ( 'illegal request' ); if (! empty ( $iid ) && ! empty ( $status ) && ! empty ( $opinion )) { if (! ($status == 2 || $status == 3 || $status == 4)) die ( 'illegal request' ); Doo::loadModel ( 'invoice' ); $invoice = new invoice (); Doo::loadModel ( 'invoiceOperationLog' ); $invoiceOperationLog = new invoiceOperationLog (); $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 ); if ($status == 3) { $invoice->status = $status; $item = array ( 'operation' => "退回" ); } else { if (empty ( $processApprovals )) { $processApprovals = array ( $this->staff [0] ['sid'] => array ( 'date' => date ( "Y-m-d H:i:s" ), 'opinion' => $opinion, 'status' => $status ) ); if ($status != 4 && isset ( $invoiceManage [1] )) $invoice->pendingApprovals = $invoiceManage [1] [0]; $invoice->processApprovals = json_encode ( $processApprovals ); } else { $processApprovals [$this->staff [0] ['sid']] = array ( 'date' => date ( "Y-m-d H:i:s" ), 'opinion' => $opinion, 'status' => $status ); $pendingApprovals = 0; foreach ( $invoiceManage as $key => $value ) { if ($value [0] == $this->staff [0] ['sid']) { if (isset ( $invoiceManage [$key + 1] )) $pendingApprovals = $invoiceManage [$key + 1] [0]; break; } } if ($status != 4 && ! empty ( $pendingApprovals )) $invoice->pendingApprovals = $pendingApprovals; $invoice->processApprovals = json_encode ( $processApprovals ); } $item = array ( 'operation' => "同意" ); if (count ( $processApprovals ) == count ( $invoiceManage ) && $status != 4) { $invoice->status = $status; $invoice->pendingApprovals = 0; } elseif ($status == 4) { $invoice->status = $status; $item = array ( 'operation' => "终止" ); } } $invoice->updateTime = date ( "Y-m-d H:i:s" ); $invoice->update ( array ( 'where' => 'iid=' . $iid ) ); $item += array ( 'date' => date ( "Y-m-d H:i:s" ), 'img' => $this->staff [0] ['avatar'], 'username' => $this->staff [0] ['username'], 'uid' => $this->staff [0] ['sid'], 'category' => $this->staff [0] ['category'], 'status' => $status, 'iid' => $iid ); $invoiceOperationLog->setInvoiceOperationLog ( $item ); return '/invoiceApproval'; } die ( 'illegal request' ); } /** * 展示需要打印的发票数据 * * @since 1.0.0 */ function invoicePrint() { Doo::loadModel ( 'invoice' ); $invoice = new invoice (); Doo::loadClass ( 'XDeode' ); $XDeode = new XDeode ( 5 ); Doo::loadModel ( 'staff' ); $staff = new staff (); $toPrint = $invoice->find ( array ( 'where' => 'status=2 ', 'desc' => 'iid', 'asArray' => true ) ); $printed = $invoice->find ( array ( 'where' => 'status=5 ', 'desc' => 'iid', 'asArray' => true ) ); foreach ( $toPrint as $key => $value ) { $toPrint [$key] ['iidKey'] = $XDeode->encode ( $value ['iid'] ); $lastApprover = json_decode ( $value ['processApprovals'], true ); if (! empty ( $lastApprover )) { $lastApproverKey = array_keys ( $lastApprover ); $lastApprover = end ( $lastApprover ); $staffDetail = $staff->getOne ( array ( 'where' => 'sid=' . end ( $lastApproverKey ), 'asArray' => true ) ); $lastApprover ['username'] = $staffDetail ['username']; } $toPrint [$key] ['lastApprover'] = $lastApprover; } foreach ( $printed as $key => $value ) { $printed [$key] ['iidKey'] = $XDeode->encode ( $value ['iid'] ); $lastApprover = json_decode ( $value ['processApprovals'], true ); if (! empty ( $lastApprover )) { $lastApproverKey = array_keys ( $lastApprover ); $lastApprover = end ( $lastApprover ); $staffDetail = $staff->getOne ( array ( 'where' => 'sid=' . end ( $lastApproverKey ), 'asArray' => true ) ); $lastApprover ['username'] = $staffDetail ['username']; } $printed [$key] ['lastApprover'] = $lastApprover; } $data ['printed'] = $printed; $data ['toPrint'] = $toPrint; $data ['memu'] = "invoice"; $data ['staff'] = $this->staff; $data ['receiptMemu'] = 'invoicePrint'; $data ['verifyId'] = $this->verifyId; $data ['executeId'] = $this->executeId; $this->render ( "/admin/invoicePrint", $data ); } /** * 展示发票打印的详情页面 * * @since 1.0.0 */ function invoicePrintDetail() { Doo::loadClass ( 'XDeode' ); $XDeode = new XDeode ( 5 ); $iid = isset ( $this->params ['iid'] ) ? $this->params ['iid'] : ""; $iid = $XDeode->decode ( $iid ); if (! is_numeric ( $iid )) die ( 'illegal request' ); Doo::loadModel ( 'invoice' ); $invoice = new invoice (); Doo::loadModel ( 'invoiceOperationLog' ); $invoiceOperationLog = new invoiceOperationLog (); $invoiceDetail = $invoice->getOne ( array ( 'where' => 'status=2 and iid=' . $iid, 'asArray' => true ) ); $invoiceOperationLogList = $invoiceOperationLog->getInvoiceOperationLogByIid ( $iid ); $data ['invoiceDetail'] = $invoiceDetail; $data ['invoiceOperationLogList'] = $invoiceOperationLogList; $data ['INVOICEKEY'] = $this->authcode ( $invoiceDetail ['iid'], '' ); $data ['memu'] = "invoice"; $data ['staff'] = $this->staff; $data ['receiptMemu'] = 'invoicePrint'; $data ['verifyId'] = $this->verifyId; $data ['executeId'] = $this->executeId; $this->render ( "/admin/invoicePrintDetail", $data ); } /** * 填写票号并完成打印 * @since 1.0.0 */ function invoicePrintDo() { $iid = $this->get_args ( 'invoiceKey' ) ? $this->get_args ( 'invoiceKey' ) : ""; $invoiceNo = $this->get_args ( 'invoiceNo' ) ? $this->get_args ( 'invoiceNo' ) : ""; $iid = $this->authcode ( $iid ); if (! is_numeric ( $iid )) die ( 'illegal request' ); if (! empty ( $iid ) && ! empty ( $invoiceNo )) { Doo::loadModel ( 'invoice' ); $invoice = new invoice (); Doo::loadModel ( 'invoiceOperationLog' ); $invoiceOperationLog = new invoiceOperationLog (); $invoicePrintDetail = $invoice->getInvoiceByPrint ( $iid ); if (empty ( $invoicePrintDetail )) die ( 'illegal request' ); $item = array ( 'iid' => $iid, 'status' => 5, 'updateTime'=>date ( "Y-m-d H:i:s" ), 'printTime'=>date ( "Y-m-d H:i:s" ), 'invoiceNo' => $invoiceNo ); $invoice->setPrintByInvoice ( $item ); $item = array ( 'date' => date ( "Y-m-d H:i:s" ), 'operation' => $invoiceNo, 'status' => 5, 'img' => $this->staff [0] ['avatar'], 'username' => $this->staff [0] ['username'], 'uid' => $this->staff [0] ['sid'], 'category' => $this->staff [0] ['category'], 'iid' => $iid ); $invoiceOperationLog->setInvoiceOperationLog ( $item ); return "/invoicePrint"; } } /** * 需要邮寄的发票 * @since 1.0.0 */ function invoicePost() { Doo::loadModel ( 'invoice' ); $invoice = new invoice (); $invoicePost=$invoice->getPostByInvoice(); $data ['invoicePost'] = $invoicePost; $data ['memu'] = "invoice"; $data ['staff'] = $this->staff; $data ['receiptMemu'] = 'invoicePost'; $data ['verifyId'] = $this->verifyId; $data ['executeId'] = $this->executeId; $this->render ( "/admin/invoicePost", $data ); } private function getExeCount() { Doo::loadModel ( 'receipt' ); $receipt = new receipt (); $receiptList = $receipt->find ( array ( 'where' => '(executeCopy like \'%["' . $this->staff [0] ['sid'] . '%\' and executeStaff NOT LIKE \'%' . $this->staff [0] ['sid'] . '%\' ) and (status=1 or status=6)', 'desc' => 'rid', 'asArray' => true ) ); return count ( $receiptList ); } private function getReceiptCount() { $status = 2; $year = date ( 'Y' ); Doo::loadModel ( 'receipt' ); $receipt = new receipt (); Doo::loadModel ( 'verify' ); $dateCondition = " and Year(date) =" . $year; $approvalCondition = ' and nowStaff like "%' . $this->staff [0] ['sid'] . '%" '; $receiptList = $receipt->find ( array ( 'where' => ' status=' . $status . $dateCondition . $approvalCondition, 'desc' => 'rid', 'asArray' => true ) ); return count ( $receiptList ); } function _GetFileEXT($filename) { $pics = explode ( '.', $filename ); $num = count ( $pics ); return $pics [$num - 1]; } /** * 获取get或者POST值 * * @param string $name 属性名称 * @return fixed 值 */ function get_args($name) { if (isset ( $_GET [$name] )) { if (is_array ( $_GET [$name] )) return $_GET [$name]; else return addslashes ( $_GET [$name] ); } elseif (isset ( $_POST [$name] )) { if (is_array ( $_POST [$name] )) return $_POST [$name]; else return addslashes ( $_POST [$name] ); } else return false; } /** * 加密或解密指定字符串 * * @param string $string 要加密或解密的字符串 * @param string $operation 当取值为'DECODE'时表示解密,否则为加密 * @param string $key 加解密的key * @param $expiry 超时值 * */ function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; if (! $key) { $key = $this->INVOICEKEY; } $key = md5 ( $key ); $keya = md5 ( substr ( $key, 0, 16 ) ); $keyb = md5 ( substr ( $key, 16, 16 ) ); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr ( $string, 0, $ckey_length ) : substr ( md5 ( microtime () ), - $ckey_length )) : ''; $cryptkey = $keya . md5 ( $keya . $keyc ); $key_length = strlen ( $cryptkey ); $string = $operation == 'DECODE' ? base64_decode ( substr ( $string, $ckey_length ) ) : sprintf ( '%010d', $expiry ? $expiry + time () : 0 ) . substr ( md5 ( $string . $keyb ), 0, 16 ) . $string; $string_length = strlen ( $string ); $result = ''; $box = range ( 0, 255 ); $rndkey = array (); for($i = 0; $i <= 255; $i ++) { $rndkey [$i] = ord ( $cryptkey [$i % $key_length] ); } for($j = $i = 0; $i < 256; $i ++) { $j = ($j + $box [$i] + $rndkey [$i]) % 256; $tmp = $box [$i]; $box [$i] = $box [$j]; $box [$j] = $tmp; } for($a = $j = $i = 0; $i < $string_length; $i ++) { $a = ($a + 1) % 256; $j = ($j + $box [$a]) % 256; $tmp = $box [$a]; $box [$a] = $box [$j]; $box [$j] = $tmp; $result .= chr ( ord ( $string [$i] ) ^ ($box [($box [$a] + $box [$j]) % 256]) ); } if ($operation == 'DECODE') { if ((substr ( $result, 0, 10 ) == 0 || substr ( $result, 0, 10 ) - time () > 0) && substr ( $result, 10, 16 ) == substr ( md5 ( substr ( $result, 26 ) . $keyb ), 0, 16 )) { return substr ( $result, 26 ); } else { return ''; } } else { return $keyc . str_replace ( '=', '', base64_encode ( $result ) ); } } } class ReceiptController { public static $NEW = 0; public static $NEW2 = 0; } ?>