software_service.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857
  1. <?php
  2. class software_service {
  3. private $longle_log;
  4. private $action_log;
  5. private $verify;
  6. private $receipt;
  7. private $XDeode;
  8. private $category;
  9. private $staff;
  10. function __construct() {
  11. Doo::loadModel ( 'cld/longle_log_cld' );
  12. $this->longle_log = new longle_log_cld ();
  13. Doo::loadModel ( 'cld/action_log_cld' );
  14. $this->action_log = new action_log_cld ();
  15. Doo::loadModel ( 'cld/receipt_cld' );
  16. $this->receipt = new receipt_cld ();
  17. Doo::loadClass ( 'XDeode' );
  18. $this->XDeode = new XDeode ( 9 );
  19. Doo::loadModel ( 'receiptDetail' );
  20. Doo::loadModel ( 'cld/category_cld' );
  21. $this->category = new category_cld ();
  22. Doo::loadModel ( 'cld/traveDate_cld' );
  23. $this->traveDate_cld = new traveDate_cld ();
  24. Doo::loadModel ( 'cld/staff_cld' );
  25. $this->staff = new staff_cld ();
  26. }
  27. public function ValidRuleSoftwareCount($data = array()){
  28. }
  29. // 2021-01-2-22开始使用longle_log统计 现在使用action_log来统计
  30. public function GetSoftwareCount($data = array()){
  31. $list=array();
  32. // 初始化表格
  33. $result=array(
  34. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-12"),
  35. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-11"),
  36. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-10"),
  37. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-09"),
  38. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-08"),
  39. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-07"),
  40. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-06"),
  41. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-05"),
  42. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-04"),
  43. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-03"),
  44. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-02"),
  45. array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-01"),
  46. // $data['year']."-12"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-12"),
  47. // $data['year']."-11"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-11"),
  48. // $data['year']."-10"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-10"),
  49. // $data['year']."-09"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-09"),
  50. // $data['year']."-08"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-08"),
  51. // $data['year']."-07"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-07"),
  52. // $data['year']."-06"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-06"),
  53. // $data['year']."-05"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-05"),
  54. // $data['year']."-04"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-04"),
  55. // $data['year']."-03"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-03"),
  56. // $data['year']."-02"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-02"),
  57. // $data['year']."-01"=>array("lend"=>0,"sale"=>0,"give"=>0,"upgrade"=>0,"date"=>$data['year']."-01"),
  58. );
  59. if (!empty($data['staffId'])){
  60. $list=$this->action_log->GetSoftwareCountByStaffId($data['staffId'],$data['year']);
  61. }else{
  62. if(!empty($data['categoryId'])){
  63. $list=$this->action_log->GetSoftwareCountByCategoryId($data['categoryId'],$data['year']);
  64. }else{
  65. return $result;
  66. }
  67. }
  68. // 总数统计
  69. foreach ($list as $value){
  70. $resultKey=date("Y-m", strtotime($value['updatetime']) );
  71. foreach ($result as $k=>$v){
  72. if($value['status']==4&&$resultKey==$v["date"]){
  73. $result[$k]["lend"]=$result[$k]["lend"]+1;
  74. break;
  75. }elseif ($value['status']==5&&$resultKey==$v["date"]){
  76. $result[$k]["sale"]=$result[$k]["sale"]+1;
  77. break;
  78. }elseif ($value['status']==6&&$resultKey==$v["date"]){
  79. $result[$k]["give"]=$result[$k]["give"]+1;
  80. break;
  81. }elseif ($value['status']==7&&$resultKey==$v["date"]){
  82. $result[$k]["upgrade"]=$result[$k]["upgrade"]+1;
  83. break;
  84. }
  85. }
  86. }
  87. return $result;
  88. }
  89. // 费用 报销单-创建-参数校验
  90. public function ValidRuleReceiptCreate($data = array()) {
  91. if (empty ( $data ['verifyId'] )) {
  92. die ( 'illegal request-请选择审批组' );
  93. }
  94. $data ['verifyId'] = $this->XDeode->decode ( $data ['verifyId'] );
  95. if (! is_numeric ( $data ['verifyId'] )) {
  96. die ( 'illegal request-请选择审批组' );
  97. }
  98. if (empty ( $data ['officeId'] )) {
  99. die ( 'illegal request-请选择办事处' );
  100. }
  101. $data ['officeId'] = $this->XDeode->decode ( $data ['officeId'] );
  102. if (! is_numeric ( $data ['officeId'] )) {
  103. die ( 'illegal request-请选择办事处' );
  104. }
  105. if ($data ['traveData'] == "" && $data ['officeData'] == "" && $data ['trainData'] == "") {
  106. die ( 'illegal request-请选择费用类型' );
  107. }
  108. // 字符串转换Json
  109. $hasType = 0;
  110. if ($data ['traveData'] != "") {
  111. $data ['traveJson'] = json_decode ( $data ['traveData'], true );
  112. if ($data ['traveJson'] ['show']) {
  113. $hasType ++;
  114. // 日期合法性检查
  115. //print_r($data ['traveJson']);die;
  116. }
  117. }
  118. if ($data ['officeData'] != "") {
  119. $data ['officeJson'] = json_decode ( $data ['officeData'], true );
  120. if ($data ['officeJson'] ['show']) {
  121. $hasType ++;
  122. }
  123. }
  124. if ($data ['trainData'] != "") {
  125. $data ['trainJson'] = json_decode ( $data ['trainData'], true );
  126. if ($data ['trainJson'] ['show']) {
  127. $hasType ++;
  128. }
  129. }
  130. if ($hasType == 0) {
  131. die ( 'illegal request-请选择费用类型' );
  132. }
  133. return $data;
  134. }
  135. // 获得费用的细则
  136. public function GetAccountItem() {
  137. $data = $this->accountItem->GetAll ();
  138. $list = array (
  139. 'daily' => array (),
  140. 'other' => array (),
  141. 'trave' => array (),
  142. 'train' => array ()
  143. );
  144. foreach ( $data as $value ) {
  145. $value ['price'] = 0;
  146. if ($value ['category'] == "日常相关费用") {
  147. array_push ( $list ['daily'], $value );
  148. }
  149. if ($value ['category'] == "其他") {
  150. array_push ( $list ['other'], $value );
  151. }
  152. if ($value ['category'] == "内部培训费用") {
  153. array_push ( $list ['train'], $value );
  154. }
  155. if ($value ['category'] == "差旅相关费用") {
  156. $value ['remark'] = "";
  157. array_push ( $list ['trave'], $value );
  158. }
  159. }
  160. return $list;
  161. }
  162. // 审批组
  163. public function GetVerifyType($subordinate="",$subordinate2="") {
  164. $list = $this->verify->getVerifyBySubordinate($subordinate,$subordinate2);
  165. return $list;
  166. }
  167. // 获得报销单
  168. public function GetReceipt($receiptId) {
  169. $detail = $this->receipt->Get ( $receiptId );
  170. $detail ['verify'] = $this->XDeode->encode ( $detail ['verify'] );
  171. $detail ['cid'] = $this->XDeode->encode ( $detail ['cid'] );
  172. $detail ['receiptId'] = $this->XDeode->encode ( $detail ['rid'] );
  173. //费用结算-用于流水
  174. $relust = bcsub ( $detail ['sum'], $detail ['loanSum'], 2 );
  175. $detail ['relust'] = $relust;
  176. $detail ['relustABS'] = abs ( $relust );
  177. return $detail;
  178. }
  179. // 创建报销单
  180. public function ReceiptCreate($data, $staff) {
  181. $receipt = new receipt_cld ();
  182. // 1.办事处相关费用
  183. $total = 0;
  184. if (! empty ( $data ['officeData'] )) {
  185. if ($data ['officeJson'] ['show']) {
  186. foreach ( $data ['officeJson'] ['daily'] as $value ) {
  187. $total = bcadd ( $total, $value ['price'], 2 );
  188. }
  189. foreach ( $data ['officeJson'] ['other'] as $value ) {
  190. $total = bcadd ( $total, $value ['price'], 2 );
  191. }
  192. }
  193. }
  194. // 差旅相关费用
  195. if (! empty ( $data ['traveData'] )) {
  196. if ($data ['traveJson'] ['show']) {
  197. foreach ( $data ['traveJson'] ['trave'] as $value ) {
  198. $total = bcadd ( $total, $value ['price'], 2 );
  199. }
  200. }
  201. }
  202. // 内部培训费用
  203. if (! empty ( $data ['trainData'] )) {
  204. if ($data ['trainJson'] ['show']) {
  205. foreach ( $data ['trainJson'] ['train'] as $value ) {
  206. $total = bcadd ( $total, $value ['price'], 2 );
  207. }
  208. }
  209. }
  210. $receipt->officeJson = $data ['officeData'];
  211. $receipt->traveJson = $data ['traveData'];
  212. $receipt->trainJson = $data ['trainData'];
  213. $receipt->remittanceName = $data ['remittanceName'];
  214. $receipt->bankName = $data ['bankName'];
  215. $receipt->bankNumber = $data ['bankNumber'];
  216. $receipt->remittanceBankType = $data ['remittanceBankType'];
  217. if ($data ['remittanceBankType'] == 1) {
  218. $receipt->coupletNumber = $data ['coupletNumber'];
  219. }
  220. $receipt->status = 5;
  221. $receipt->date = date ( "Y-m-d" );
  222. $receipt->staff = $staff ['sid'];
  223. $receipt->cid = $data ['officeId'];
  224. $receipt->verify = $data ['verifyId'];
  225. $receipt->sum = $total;
  226. $receipt->receiptOrder = "#B" . date ( "Ymd" ) . mt_rand ( 1000, 9999 );
  227. Doo::loadModel ( 'execute' );
  228. $execute = new execute ();
  229. $executeDetail = $execute->getOne ( array (
  230. 'where' => 'mold="报销单执行人"',
  231. 'asArray' => true
  232. ) );
  233. $receipt->executeCopy = $executeDetail ['staff'];
  234. $receipt->version = 1;
  235. $rid = $receipt->insert ();
  236. // 附件
  237. if (! empty ( $data ['enclosurFiles'] )) {
  238. Doo::loadModel ( 'enclosur' );
  239. $data ['enclosurFiles'] = json_decode ( $data ['enclosurFiles'], true );
  240. foreach ( $data ['enclosurFiles'] as $value ) {
  241. $enclosur = new enclosur ();
  242. $enclosur->name = $value ['path'];
  243. $enclosur->rid = $rid;
  244. $enclosur->insert ();
  245. }
  246. }
  247. // 创建报销单详情
  248. $this->makeReceiptDetailCreate ( $data, $staff, $rid );
  249. return "";
  250. }
  251. // 编辑报销单
  252. public function ReceiptEdi($data, $staff) {
  253. $receiptId = $this->XDeode->decode ( $data ['receiptId'] );
  254. if (! is_numeric ( $receiptId )) {
  255. die ( 'illegal request-找不到该报销单-参数不正确' );
  256. }
  257. $detail = $this->receipt->Get ( $receiptId );
  258. if (empty ( $detail )) {
  259. die ( 'illegal request-找不到该报销单' );
  260. }
  261. $receipt = new receipt_cld ();
  262. // 1.办事处相关费用
  263. $total = 0;
  264. if (! empty ( $data ['officeData'] )) {
  265. if ($data ['officeJson'] ['show']) {
  266. foreach ( $data ['officeJson'] ['daily'] as $value ) {
  267. $total = bcadd ( $total, $value ['price'], 2 );
  268. }
  269. foreach ( $data ['officeJson'] ['other'] as $value ) {
  270. $total = bcadd ( $total, $value ['price'], 2 );
  271. }
  272. }
  273. }
  274. // 差旅相关费用
  275. if (! empty ( $data ['traveData'] )) {
  276. if ($data ['traveJson'] ['show']) {
  277. foreach ( $data ['traveJson'] ['trave'] as $value ) {
  278. $total = bcadd ( $total, $value ['price'], 2 );
  279. }
  280. }
  281. }
  282. // 内部培训费用
  283. if (! empty ( $data ['trainData'] )) {
  284. if ($data ['trainJson'] ['show']) {
  285. foreach ( $data ['trainJson'] ['train'] as $value ) {
  286. $total = bcadd ( $total, $value ['price'], 2 );
  287. }
  288. }
  289. }
  290. $receipt->officeJson = $data ['officeData'];
  291. $receipt->traveJson = $data ['traveData'];
  292. $receipt->trainJson = $data ['trainData'];
  293. $receipt->remittanceName = $data ['remittanceName'];
  294. $receipt->bankName = $data ['bankName'];
  295. $receipt->bankNumber = $data ['bankNumber'];
  296. $receipt->remittanceBankType = $data ['remittanceBankType'];
  297. if ($data ['remittanceBankType'] == 1) {
  298. $receipt->coupletNumber = $data ['coupletNumber'];
  299. }
  300. $receipt->cid = $data ['officeId'];
  301. if($data ['status']!=4){
  302. $receipt->verify = $data ['verifyId'];
  303. }
  304. $receipt->sum = $total;
  305. Doo::loadModel ( 'execute' );
  306. $execute = new execute ();
  307. $executeDetail = $execute->getOne ( array (
  308. 'where' => 'mold="报销单执行人"',
  309. 'asArray' => true
  310. ) );
  311. $receipt->executeCopy = $executeDetail ['staff'];
  312. $receipt->rid = $receiptId;
  313. $receipt->update ();
  314. // 先删除
  315. $receiptDetail = new receiptDetail ();
  316. $receiptDetail->delete ( array (
  317. 'where' => 'rid=' . $receiptId
  318. ) );
  319. // 新增报销单详情
  320. $this->makeReceiptDetailCreate ( $data, $staff, $receiptId );
  321. // 附件
  322. if (! empty ( $data ['enclosurFiles'] )) {
  323. Doo::loadModel ( 'enclosur' );
  324. $data ['enclosurFiles'] = json_decode ( $data ['enclosurFiles'], true );
  325. foreach ( $data ['enclosurFiles'] as $value ) {
  326. $enclosur = new enclosur ();
  327. $enclosur->name = $value ['path'];
  328. $enclosur->rid = $receiptId;
  329. $enclosur->insert ();
  330. }
  331. }
  332. return "";
  333. }
  334. //更新借款报销单数据
  335. public function LoanReceiptEdi($receiptId){
  336. $receiptId = $this->XDeode->decode ( $receiptId );
  337. if (! is_numeric ( $receiptId )) {
  338. die ( 'illegal request-找不到该报销单-参数不正确' );
  339. }
  340. $detail = $this->receipt->Get ( $receiptId );
  341. if (empty ( $detail )) {
  342. die ( 'illegal request-找不到该报销单' );
  343. }
  344. $receipt = new receipt_cld ();
  345. if ($detail['status']!=7){
  346. $receipt->loanSum = $detail ['sum'];
  347. }
  348. $receipt->date = date ( "Y-m-d" );
  349. $receipt->pastDate = '0000-00-00';
  350. $receipt->verifyStaff = '';
  351. $receipt->executeStaff = '';
  352. $receipt->status = 7;
  353. $receipt->version = 1;
  354. $receipt->rid = $receiptId;
  355. $receipt->update ();
  356. }
  357. // 获得借款报销单
  358. public function GetLoanReceipt($loanReceiptId) {
  359. Doo::loadModel ( 'loanReceipt' );
  360. $loanReceipt = new loanReceipt ();
  361. $loan = $loanReceipt->getOne ( array (
  362. 'where' => 'rid=' . $loanReceiptId,
  363. 'desc' => 'rid',
  364. 'asArray' => true
  365. ) );
  366. $categoryDetil = $this->category->getOne ( array (
  367. 'where' => 'cid=' . $loan ['cid'],
  368. 'asArray' => true
  369. ) );
  370. $loan ['category'] = $categoryDetil ['title'];
  371. $loan ['accountItem'] = json_decode ( $loan ['accountItem'], true );
  372. $loan ['loanItem'] = json_decode ( $loan ['loanItem'], true );
  373. $loan ['BIGsum'] = $this->num_to_rmb ( $loan ['sum'] );
  374. $loan ['verifyList'] = $this->makeVerifyProcess ( $loan ['verify'], $loan ['verifyStaff'] );
  375. return $loan;
  376. }
  377. // 获得差旅日期
  378. public function GetTraveDateAll($sid){
  379. $traveData=$this->traveDate_cld->GetAllBySid($sid);
  380. $data=array();
  381. foreach ($traveData as $key=>$value){
  382. if(!empty($value['start'])&&!empty($value['end'])){
  383. array_push($data, array(strtotime($value['start']),strtotime($value['end'])));
  384. }
  385. }
  386. return $data;
  387. }
  388. //费用分页
  389. public function GetFeePage($data=array()){
  390. if (!empty($data['categoryId'])){
  391. $data['categoryId']=$this->XDeode->decode($data['categoryId']);
  392. }
  393. if (!empty($data['staffId'])){
  394. $data['staffId']=$this->XDeode->decode($data['staffId']);
  395. }
  396. if(empty($data['year'])){
  397. $data['year']=date ( "Y" );
  398. }
  399. if(!is_numeric($data['pSize'])){
  400. $data['pSize']=20;
  401. }
  402. if(!is_numeric($data['cPage'])){
  403. $data['cPage']=0;
  404. }else{
  405. $data['cPage']=( $data['cPage']-1) * $data['pSize'];
  406. }
  407. $data=$this->receipt->GetPage($data);
  408. //获得办事处信息
  409. $office=$this->category->GetAll();
  410. //获得员工信息
  411. $staffList=$this->staff->find(array('asArray' => TRUE));
  412. foreach ($data['list'] as $key=>$value){
  413. $data['list'][$key]['ridOld']=$value['rid'];
  414. $data['list'][$key]['rid']=$this->XDeode->encode($value['rid']);
  415. $data['list'][$key]['cid']=$this->XDeode->encode($value['cid']);
  416. $data['list'][$key]['staff']=$this->XDeode->encode($value['staff']);
  417. $data['list'][$key]['categoryValue']="";
  418. $data['list'][$key]['statusValue']=$this->feeStatusValue[$value['status']];
  419. foreach ($office as $k=>$v){
  420. if($v['cid']==$data['list'][$key]['cid']){
  421. $data['list'][$key]['categoryValue']=$v['title'];
  422. }
  423. }
  424. $data['list'][$key]['staffName']="";
  425. foreach ($staffList as $k=>$v){
  426. if($v['sid']==$value['staff']){
  427. $data['list'][$key]['staffName']=$v['username'];
  428. }
  429. }
  430. $data['list'][$key]['Rtype']=$this->feeTypeValue[$value['Rtype']];
  431. if($this->getFeeLoanType($value)){
  432. $data['list'][$key]['Rtype'].="报销单";
  433. }
  434. if($value['pastDate']=="0000-00-00"){
  435. $data['list'][$key]['pastDate']="";
  436. }
  437. if($value['version']==1){
  438. $data['list'][$key]['explanation']=$this->getReceiptVerson1Explanation($value);
  439. }
  440. }
  441. return $data;
  442. }
  443. private $feeTypeValue=array(
  444. 0=>"报销单",
  445. 1=>"借款",
  446. 2=>"对公汇款",
  447. 3=>"培训班费用",
  448. );
  449. private $feeStatusValue=array(
  450. 1=>"待执行",
  451. 2=>"审批中",
  452. 3=>"终止",
  453. 4=>"撤回",
  454. 5=>"待提交",
  455. 6=>"待执行",
  456. 7=>"待提交",
  457. 8=>"执行完成",
  458. 9=>"执行完成",
  459. 10=>"已锁定",
  460. );
  461. //获得借款-报销单类型 0借款 1借款报销单
  462. private function getFeeLoanType($value){
  463. $type=0;
  464. if($value['Rtype']==1){
  465. if($value['version']==1){
  466. $type=1;
  467. }else{
  468. if(!empty($value['accountItem'])){
  469. $type=1;
  470. }
  471. }
  472. }
  473. return $type;
  474. }
  475. //获得新版报销单费用说明
  476. private function getReceiptVerson1Explanation($value){
  477. $version_1_explanation="";
  478. if($value['version']==1){
  479. if(!empty($value['officeJson'])){
  480. $officeJson=json_decode($value['officeJson'],true);
  481. $version_1_explanation.=$officeJson['officeExplain'][0]['officeExplain']."\n";
  482. }
  483. if(!empty($value['traveJson'])){
  484. $traveJson=json_decode($value['traveJson'],true);
  485. $version_1_explanation.=$traveJson['traveExplain'][0]['traveExplain']."\n";
  486. }
  487. if(!empty($value['trainJson'])){
  488. $trainJson=json_decode($value['trainJson'],true);
  489. $version_1_explanation.=$trainJson['trainExplain'][0]['trainExplain']."\n";
  490. }
  491. }
  492. return $version_1_explanation;
  493. }
  494. // 获得审批流程
  495. private function makeVerifyProcess($verifyId, $verifyStaff) {
  496. // 检测编辑状态
  497. $verifyList = $this->verify->getOne ( array (
  498. 'where' => 'vid=' . $verifyId,
  499. 'asArray' => true
  500. ) );
  501. $verifyList = json_decode ( $verifyList ['staff'], true ); // status opinion
  502. $verifyStaff = json_decode ( $verifyStaff, true );
  503. Doo::loadModel ( 'role' );
  504. $role = new role ();
  505. Doo::loadModel ( 'staff' );
  506. $staff = new staff ();
  507. $flag = true;
  508. $roleKey = 0;
  509. $endStaffArray = array ();
  510. $roleArrayCopy = array ();
  511. foreach ( $verifyList as $k => $v ) {
  512. // init verifyStaff
  513. if ($v [1] == 'ROLE') {
  514. if (! empty ( $verifyStaff )) {
  515. $endStaffArray = end ( $verifyStaff );
  516. // if ($v[0]==$endStaffArray['nextStaff']){
  517. // $roleId=$v[0];
  518. // }
  519. }
  520. $roleVerify = json_decode ( $v [3], true );
  521. $roleKey = $k;
  522. $roleArray = array ();
  523. $rolename = $role->getOne ( array (
  524. 'where' => 'rid=' . $v [0],
  525. 'asArray' => true
  526. ) );
  527. foreach ( $roleVerify as $o => $p ) {
  528. $staffID = explode ( '_', $p );
  529. $staffInfo = $staff->getOne ( array (
  530. 'where' => 'sid=' . $staffID [0],
  531. 'asArray' => true
  532. ) );
  533. // print_r($staffID);
  534. $exp = array (
  535. 0 => $staffInfo ['sid'],
  536. 1 => $staffID [1],
  537. 2 => $staffInfo ['avatar'],
  538. 'date' => '',
  539. 'date' => '',
  540. 'opinion' => '',
  541. 'status' => '',
  542. 'rolename' => $rolename ['name']
  543. );
  544. array_push ( $roleArray, $exp );
  545. }
  546. $roleArrayCopy [$v [0]] = $roleArray;
  547. // $verifyList[$k]['roleArray']=$roleArray;
  548. }
  549. $verifyList [$k] ['date'] = "";
  550. $verifyList [$k] ['opinion'] = "";
  551. $verifyList [$k] ['status'] = "";
  552. if (empty ( $verifyStaff )) {
  553. $verifyList [$k] ['date'] = "";
  554. $verifyList [$k] ['opinion'] = "";
  555. if (($verifyList [0] [0] == $this->staff [0] ['sid']) && $flag) {
  556. $verifyList [$k] ['status'] = 4;
  557. $flag = false;
  558. }
  559. } else {
  560. foreach ( $verifyStaff as $m => $u ) {
  561. if ($v [0] == $m) {
  562. $verifyList [$k] ['date'] = $u ['date'];
  563. $verifyList [$k] ['opinion'] = $u ['opinion'];
  564. $verifyList [$k] ['status'] = $u ['status'];
  565. $flag = false;
  566. break;
  567. }
  568. }
  569. $endStaffArray = end ( $verifyStaff );
  570. if (isset ( $endStaffArray ['ROLE'] )) {
  571. } else {
  572. }
  573. }
  574. }
  575. $rolename ['name'] = '';
  576. if (! empty ( $verifyStaff ))
  577. $endStaffArray = end ( $verifyStaff );
  578. $KOP = false;
  579. foreach ( $roleArrayCopy as $P => $A ) {
  580. foreach ( $A as $MKI => $AVL ) {
  581. if (! empty ( $verifyStaff )) {
  582. // &&$rolename['rid']==$endStaffArray['nextStaff']
  583. if ($this->staff [0] ['sid'] == $AVL [0] && isset ( $endStaffArray ['ROLE'] ) && $rolename ['rid'] == $endStaffArray ['nextStaff']) {
  584. $button = 4;
  585. $roleArrayCopy [$P] [$MKI] ['status'] = 4;
  586. }
  587. foreach ( $verifyStaff as $m => $u ) {
  588. $AVLFK = $AVL [0] . '_R';
  589. // echo $AVLFK.'=='.$m;var_dump($AVLFK==$m);echo '<br/>';
  590. if (strcmp ( $AVLFK, $m ) == 0) { // &&isset($u['ROLE'])&&$u['ROLE']==1
  591. $roleArrayCopy [$P] [$MKI] ['date'] = $u ['date'];
  592. $roleArrayCopy [$P] [$MKI] ['opinion'] = $u ['opinion'];
  593. $roleArrayCopy [$P] [$MKI] ['status'] = $u ['status'];
  594. break;
  595. }
  596. }
  597. } else {
  598. if ($this->staff [0] ['sid'] == $AVL [0] && $verifyList [0] [1] == 'ROLE') {
  599. $button = 4;
  600. $roleArrayCopy [$P] [$MKI] ['status'] = 4;
  601. }
  602. }
  603. // $roleArray[$MKI]['rolename']=$rolename['name'];
  604. $KOP = true;
  605. }
  606. }
  607. foreach ( $roleArrayCopy as $k => $v ) {
  608. foreach ( $verifyList as $m => $n ) {
  609. if ($n [0] == $k) {
  610. array_splice ( $verifyList, $m, 1, $v );
  611. }
  612. }
  613. }
  614. return $verifyList;
  615. }
  616. private function makeReceiptDetailCreate($data, $staff, $rid) {
  617. // 报销单详情
  618. if (! empty ( $data ['officeData'] )) {
  619. if ($data ['officeJson'] ['show']) {
  620. foreach ( $data ['officeJson'] ['daily'] as $value ) {
  621. if ($value ['price'] != 0) {
  622. $itemData = array (
  623. "staff" => $staff ['sid'],
  624. "itemCategory" => $value ['category'],
  625. "item" => $value ['name'],
  626. "price" => $value ['price'],
  627. "date" => date ( "Y-m-d" ),
  628. "cid" => $data ['officeId'],
  629. "rid" => $rid,
  630. "status" => 4
  631. );
  632. $this->ReceiptDetailCreate ( $itemData );
  633. }
  634. }
  635. foreach ( $data ['officeJson'] ['other'] as $value ) {
  636. if ($value ['price'] != 0) {
  637. $itemData = array (
  638. "staff" => $staff ['sid'],
  639. "itemCategory" => $value ['category'],
  640. "item" => $value ['name'],
  641. "price" => $value ['price'],
  642. "date" => date ( "Y-m-d" ),
  643. "cid" => $data ['officeId'],
  644. "rid" => $rid,
  645. "status" => 4
  646. );
  647. $this->ReceiptDetailCreate ( $itemData );
  648. }
  649. }
  650. }
  651. }
  652. // 差旅相关费用
  653. if (! empty ( $data ['traveData'] )) {
  654. if ($data ['traveJson'] ['show']) {
  655. foreach ( $data ['traveJson'] ['trave'] as $value ) {
  656. if ($value ['price'] != 0) {
  657. $itemData = array (
  658. "staff" => $staff ['sid'],
  659. "itemCategory" => $value ['category'],
  660. "item" => $value ['name'],
  661. "price" => $value ['price'],
  662. "date" => date ( "Y-m-d" ),
  663. "cid" => $data ['officeId'],
  664. "rid" => $rid,
  665. "status" => 4
  666. );
  667. $this->ReceiptDetailCreate ( $itemData );
  668. }
  669. }
  670. }
  671. }
  672. // 内部培训费用
  673. if (! empty ( $data ['trainData'] )) {
  674. if ($data ['trainJson'] ['show']) {
  675. foreach ( $data ['trainJson'] ['train'] as $value ) {
  676. if ($value ['price'] != 0) {
  677. $itemData = array (
  678. "staff" => $staff ['sid'],
  679. "itemCategory" => $value ['category'],
  680. "item" => $value ['name'],
  681. "price" => $value ['price'],
  682. "date" => date ( "Y-m-d" ),
  683. "cid" => $data ['officeId'],
  684. "rid" => $rid,
  685. "status" => 4
  686. );
  687. $this->ReceiptDetailCreate ( $itemData );
  688. }
  689. }
  690. }
  691. }
  692. }
  693. // 新增报销单详情
  694. public function ReceiptDetailCreate($data = array()) {
  695. $receiptDetail = new receiptDetail ();
  696. $receiptDetail->staff = $data ['staff'];
  697. $receiptDetail->item = $data ['item'];
  698. $receiptDetail->itemCategory = $data ['itemCategory'];
  699. $receiptDetail->price = $data ['price'];
  700. $receiptDetail->date = $data ['date'];
  701. $receiptDetail->cid = $data ['cid'];
  702. $receiptDetail->rid = $data ['rid'];
  703. $receiptDetail->status = $data ['status'];
  704. $receiptDetail->insert ();
  705. }
  706. public function num_to_rmb($num) {
  707. $c1 = "零壹贰叁肆伍陆柒捌玖";
  708. $c2 = "分角元拾佰仟万拾佰仟亿";
  709. // 精确到分后面就不要了,所以只留两个小数位
  710. $num = round ( $num, 2 );
  711. // 将数字转化为整数
  712. $num = $num * 100;
  713. if (strlen ( $num ) > 10) {
  714. return "金额太大,请检查";
  715. }
  716. $i = 0;
  717. $c = "";
  718. while ( 1 ) {
  719. if ($i == 0) {
  720. // 获取最后一位数字
  721. $n = substr ( $num, strlen ( $num ) - 1, 1 );
  722. } else {
  723. $n = $num % 10;
  724. }
  725. // 每次将最后一位数字转化为中文
  726. $p1 = substr ( $c1, 3 * $n, 3 );
  727. $p2 = substr ( $c2, 3 * $i, 3 );
  728. if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
  729. $c = $p1 . $p2 . $c;
  730. } else {
  731. $c = $p1 . $c;
  732. }
  733. $i = $i + 1;
  734. // 去掉数字最后一位了
  735. $num = $num / 10;
  736. // echo $num.'</br>';
  737. $num = ( int ) $num;
  738. // $num =floor($num);
  739. // $num = round ( $num, 0, PHP_ROUND_HALF_DOWN );
  740. // echo $num.'</br>';
  741. // 结束循环
  742. if ($num == 0) {
  743. break;
  744. }
  745. }
  746. // echo $c.'</br>';
  747. $j = 0;
  748. $slen = strlen ( $c );
  749. while ( $j < $slen ) {
  750. // utf8一个汉字相当3个字符
  751. $m = substr ( $c, $j, 6 );
  752. // 处理数字中很多0的情况,每次循环去掉一个汉字“零”
  753. if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {
  754. $left = substr ( $c, 0, $j );
  755. $right = substr ( $c, $j + 3 );
  756. $c = $left . $right;
  757. $j = $j - 3;
  758. $slen = $slen - 3;
  759. }
  760. $j = $j + 3;
  761. }
  762. // 这个是为了去掉类似23.0中最后一个“零”字
  763. if (substr ( $c, strlen ( $c ) - 3, 3 ) == '零') {
  764. $c = substr ( $c, 0, strlen ( $c ) - 3 );
  765. }
  766. // 将处理的汉字加上“整”
  767. if (empty ( $c )) {
  768. return "零元整";
  769. } else {
  770. return $c . "整";
  771. }
  772. }
  773. }
  774. ?>