batchSubmitShemeBillMySubmissionEditEx.js 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. shr.defineClass("shr.customer.gtiit.BatchSubmitShemeBillMySubmissionEditEx", shr.compensation.BatchSubmitShemeBillMySubmissionEdit, {
  2. initalizeDOM:function(){
  3. shr.customer.gtiit.BatchSubmitShemeBillMySubmissionEditEx.superClass.initalizeDOM.call(this);
  4. },
  5. setGridNameEvent: function() {
  6. var _self = this;
  7. $entry = $('#entry');
  8. $entry.jqGrid("option",{
  9. afterSaveCell: function (rowid, cellname, value, iRow, iCol, rowData) {
  10. if(cellname == "startTime" || cellname == "endTime" || cellname == "restStartTime" || cellname == "restEndTime"){
  11. //发生日期
  12. var effectTime = $("#entry").jqGrid("getCell",rowid,"effectDate");
  13. var cellTime = $("#entry").jqGrid("getCell",rowid,cellname);
  14. if(effectTime && cellTime){
  15. var effectDate = _self.convertTimeZone(effectTime);
  16. let year = effectDate.getFullYear(); // 获取年份(4位数)
  17. let month = effectDate.getMonth() + 1; // 获取月份(0-11,需要加1)
  18. let day = effectDate.getDate(); // 获取日期(1-31)
  19. // 格式化为年月日字符串
  20. let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
  21. var cellTimeOfDate = new Date(cellTime);
  22. let hours = cellTimeOfDate.getHours(); // 获取小时(0-23)
  23. let minutes = cellTimeOfDate.getMinutes(); // 获取分钟(0-59)
  24. let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
  25. $("#entry").jqGrid("setCell",rowid,cellname,formattedDate+" "+formattedTime);
  26. }
  27. _self.countHourAndMultiple(rowid);
  28. }
  29. if(cellname == "effectDate"){
  30. //发生日期
  31. var effectTime = $("#entry").jqGrid("getCell",rowid,"effectDate");
  32. var effectDate = new Date();
  33. if(effectTime){
  34. effectDate = new Date(effectTime);
  35. }
  36. effectDate = _self.convertTimeZone(effectTime);
  37. let year = effectDate.getFullYear(); // 获取年份(4位数)
  38. let month = effectDate.getMonth() + 1; // 获取月份(0-11,需要加1)
  39. let day = effectDate.getDate(); // 获取日期(1-31)
  40. // 格式化为年月日字符串
  41. let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
  42. //开始时间
  43. var startTime = $("#entry").jqGrid("getCell",rowid,"startTime");
  44. //结束时间
  45. var endTime = $("#entry").jqGrid("getCell",rowid,"endTime");
  46. //休息开始时间
  47. var restStartTime = $("#entry").jqGrid("getCell",rowid,"restStartTime");
  48. //休息结束时间
  49. var restEndTime = $("#entry").jqGrid("getCell",rowid,"restEndTime");
  50. if(startTime){
  51. var startTimeOfDate = new Date(startTime);
  52. let hours = startTimeOfDate.getHours(); // 获取小时(0-23)
  53. let minutes = startTimeOfDate.getMinutes(); // 获取分钟(0-59)
  54. let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
  55. $("#entry").jqGrid("setCell",rowid,"startTime",formattedDate+" "+formattedTime);
  56. }
  57. if(endTime){
  58. var endTimeOfDate = new Date(endTime);
  59. let hours = endTimeOfDate.getHours(); // 获取小时(0-23)
  60. let minutes = endTimeOfDate.getMinutes(); // 获取分钟(0-59)
  61. let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
  62. $("#entry").jqGrid("setCell",rowid,"endTime",formattedDate+" "+formattedTime);
  63. }
  64. if(restStartTime){
  65. var restStartTimeOfDate = new Date(restStartTime);
  66. let hours = restStartTimeOfDate.getHours(); // 获取小时(0-23)
  67. let minutes = restStartTimeOfDate.getMinutes(); // 获取分钟(0-59)
  68. let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
  69. $("#entry").jqGrid("setCell",rowid,"restStartTime",formattedDate+" "+formattedTime);
  70. }
  71. if(restEndTime){
  72. var restEndTimeOfDate = new Date(restEndTime);
  73. let hours = restEndTimeOfDate.getHours(); // 获取小时(0-23)
  74. let minutes = restEndTimeOfDate.getMinutes(); // 获取分钟(0-59)
  75. let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
  76. $("#entry").jqGrid("setCell",rowid,"restEndTime",formattedDate+" "+formattedTime);
  77. }
  78. _self.countHourAndMultiple(rowid);
  79. }
  80. },
  81. "afterEditCell":function(rowid, colName, value,iRow, iCol,rowData){
  82. if(colName === "person"){
  83. var id = "#"+iRow + "_person";
  84. var option = $(id).shrPromptBox("option");
  85. var subWidgetOptions = option.subWidgetOptions
  86. subWidgetOptions.multiselect = true;
  87. subWidgetOptions.filter = " hrOrgUnit.id = '" + $("#hrOrgUnit").shrPromptBox("getValue").id + "'";
  88. subWidgetOptions.otherParams = {adminOrgId:$("#adminOrg").shrPromptBox("getValue").id,hrOrgUnitId:$("#hrOrgUnit").shrPromptBox("getValue").id};
  89. $(id).shrPromptBox("option",{
  90. "subWidgetOptions":subWidgetOptions,
  91. "onchange":function(e, val) {
  92. var personData = val.current;
  93. var prevPersonData = val.previous;
  94. var length = personData.length;
  95. var newRowData = [];
  96. for(var i =0; i<length; i++){
  97. var item = personData[i];
  98. var updateItem = {};
  99. var oldData = $entry.wafGrid("getRowData",rowid);
  100. if(i==0){
  101. // if(!prevPersonData || prevPersonData.id !== item["person.id"]){
  102. if(item.id !== oldData.cmpEmpORelation.id){
  103. var beginContractDate,endContractDate;
  104. _self.remoteCall({
  105. method: "getContractDate",
  106. param: {positionId:item["position.id"]},
  107. async: false,
  108. success: function(data) {
  109. beginContractDate = data.beginContractDate;
  110. endContractDate = data.endContractDate;
  111. },
  112. error : function(){}
  113. });
  114. updateItem = {
  115. "number": item["person.number"],
  116. "adminOrgUnit":{id : item["adminOrg.id"], name : item["adminOrg.name"]},
  117. "position":{id : item["position.id"], name : item["position.name"]},
  118. "cmpEmpORelation":{id : item.id,name : item.id},
  119. "person":{id : item["person.id"],name : item["person.name"]},
  120. "submitElement":oldData.submitElement,
  121. "id":oldData.id,
  122. "tempId":oldData.tempId,
  123. "effectDate":oldData.effectDate,
  124. "currency":oldData.currency,
  125. "dealStatus":oldData.dealStatus,
  126. "superiorId":item["parentPerson.id"],
  127. "hourlyWage":item["empOrgRelation.hourlywage"],
  128. "beginContractDate":beginContractDate,
  129. "endContractDate":endContractDate,
  130. "superiorName":item["parentPerson.name"]
  131. }
  132. var newData = _self.updateRow(updateItem,oldData);
  133. $entry.wafGrid("setRowData",rowid,newData);
  134. }else{
  135. $entry.wafGrid("setRowData",rowid,oldData);
  136. }
  137. }else{
  138. var beginContractDate,endContractDate;
  139. _self.remoteCall({
  140. method: "getContractDate",
  141. param: {positionId:item["position.id"]},
  142. async: false,
  143. success: function(data) {
  144. beginContractDate = data.beginContractDate;
  145. endContractDate = data.endContractDate;
  146. },
  147. error : function(){}
  148. });
  149. var newData = _self.createNewEntryModel();
  150. newData.number = item["person.number"];
  151. newData.person = {id : item["person.id"],name : item["person.name"]};
  152. newData.adminOrgUnit = {id : item["adminOrg.id"], name : item["adminOrg.name"]};
  153. newData.position = {id : item["position.id"], name : item["position.name"]};
  154. newData.cmpEmpORelation = {id : item.id,name : item.id};
  155. newData.superiorId = item["parentPerson.id"];
  156. newData.hourlyWage = item["empOrgRelation.hourlywage"];
  157. newData.beginContractDate = beginContractDate;
  158. newData.endContractDate = endContractDate;
  159. newData.superiorName = item["parentPerson.name"];
  160. newRowData.push(newData);
  161. }
  162. }
  163. if(newRowData.length){
  164. $entry.jqGrid('addBlockData','id',newRowData);
  165. $("#entry").jqGrid('setGridHeight', 300);
  166. }
  167. setTimeout(function(){
  168. var frozenScrollTop = $(".frozen-bdiv").scrollTop();
  169. $("#entry").parents(".ui-jqgrid-bdiv").scrollTop(frozenScrollTop);
  170. })
  171. _self.countHourAmount();
  172. }
  173. })
  174. }
  175. }
  176. });
  177. $entry.delegate('input', 'focus', function() {
  178. _self.setCellLength();
  179. });
  180. },
  181. //计算分录的工时和总金额
  182. countHourAndMultiple:function(rowid){
  183. //发生日期
  184. var effectTime = $("#entry").jqGrid("getCell",rowid,"effectDate");
  185. //开始时间
  186. var startTime = $("#entry").jqGrid("getCell",rowid,"startTime");
  187. //结束时间
  188. var endTime = $("#entry").jqGrid("getCell",rowid,"endTime");
  189. //休息开始时间
  190. var restStartTime = $("#entry").jqGrid("getCell",rowid,"restStartTime");
  191. //休息结束时间
  192. var restEndTime = $("#entry").jqGrid("getCell",rowid,"restEndTime");
  193. if(startTime != "" && endTime != ""){
  194. var startTimeOfDate = new Date(startTime);
  195. var endTimeOfDate = new Date(endTime);
  196. var times = 0;
  197. if (restStartTime != "" && restEndTime != "") {
  198. var restStartTimeOfDate = new Date(restStartTime);
  199. var restEndTimeOfDate = new Date(restEndTime);
  200. var times = restEndTimeOfDate.getTime() - restStartTimeOfDate.getTime();
  201. if (times < 0) {
  202. times = 0;
  203. }
  204. }
  205. var se = endTimeOfDate.getTime() - startTimeOfDate.getTime() - times;
  206. //工时
  207. var workHours = se / (3600 * 1000);
  208. workHours = workHours.toFixed(2);
  209. //时薪
  210. var hourlyWage = $("#entry").jqGrid("getCell",rowid,"hourlyWage");
  211. if(!hourlyWage){
  212. hourlyWage = 0;
  213. }
  214. //倍数
  215. var multiple = 1;
  216. var note = null;
  217. //判断是否法定节假日和休息日
  218. if(effectTime){
  219. let date = this.convertTimeZone(effectTime);
  220. let year = date.getFullYear(); // 获取年份(4位数)
  221. let month = date.getMonth() + 1; // 获取月份(0-11,需要加1)
  222. let day = date.getDate(); // 获取日期(1-31)
  223. // 格式化为年月日字符串
  224. let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
  225. _self.remoteCall({
  226. type:"post",
  227. async: false,
  228. method:"workMultiple",
  229. param:{"otDate":formattedDate},
  230. success:function(res){
  231. if(res.returnType){
  232. if(res.returnType == "0"){
  233. //法定节假日
  234. multiple = 4;
  235. note = "Statuary Holiday,400%of basic salary";
  236. }else if(res.returnType == "1"){
  237. //休息日
  238. note = "Weekend";
  239. }
  240. }
  241. }
  242. });
  243. }
  244. var amount = workHours*hourlyWage*multiple;
  245. //工时
  246. $("#entry").jqGrid("setCell",rowid,"totalWorkHours",workHours);
  247. //总金额
  248. $("#entry").jqGrid("setCell",rowid,"totalAmount",amount.toFixed(2));
  249. //说明
  250. $("#entry").jqGrid("setCell",rowid,"explain",note);
  251. this.countHourAmount();
  252. }
  253. },
  254. convertTimeZone:function(date){
  255. const inputDate = new Date(date);
  256. const beijingTime = new Date(inputDate.toLocaleString("en-US", {timeZone: "Asia/Shanghai"}));
  257. return beijingTime;
  258. },
  259. //计算单头的总工时和总金额
  260. countHourAmount:function(){
  261. var allRowData = $("#entry").jqGrid("getAllRowData");
  262. var totalWorkHours = 0;
  263. var totalAmount = 0;
  264. for(var i=0; i<allRowData.length; i++){
  265. var workHours = allRowData[i].totalWorkHours;
  266. var amount = allRowData[i].totalAmount;
  267. totalWorkHours = Number(totalWorkHours) + Number(workHours);
  268. totalAmount = Number(totalAmount) + Number(amount);
  269. }
  270. this.getField("totalWorkHours").shrNumberField("setValue",totalWorkHours);
  271. this.getField("totalAmount").shrNumberField("setValue",totalAmount);
  272. },
  273. verify: function() {
  274. //_self.setEntryAttr();
  275. var tds = $("#entry td[class*='dirty-cell']");
  276. for(var i = 0;i < tds.length;i++){
  277. var cur = $(tds[i]);
  278. var value;
  279. if(cur.children().length > 0){
  280. value = cur.children().attr('value');
  281. }
  282. var type = "NUMBER";
  283. if(!_self.checkNumValid(value, type)){
  284. shr.showWarning({
  285. message: $.cmpIntegrateI18n.submitBill.label11 /* 请输入正确格式 */,
  286. hideAfter : 9
  287. });
  288. $(tds[i]).focus();
  289. $(tds[i]).css({
  290. "border" : "solid 2px red"
  291. });
  292. return false;
  293. }else{
  294. $(tds[i]).css({
  295. "border":""
  296. });
  297. }
  298. }
  299. //校验开始时间和结束时间不能有重叠
  300. var allRowData = $("#entry").jqGrid("getAllRowData");
  301. for(var i = 0; i < allRowData.length; i++){
  302. var startTime = new Date(allRowData[i]["startTime"]);
  303. var endTime = new Date(allRowData[i]["endTime"]);
  304. for(var j = i+1; j < allRowData.length; j++){
  305. var nextStartTime = new Date(allRowData[j]["startTime"]);
  306. var nextEndTime = new Date(allRowData[j]["endTime"]);
  307. if (startTime < nextEndTime && nextStartTime < endTime) {
  308. shr.showWarning({message:"Intersection between start and end times"});
  309. return false;
  310. }
  311. }
  312. }
  313. //校验分录只能有一种职位
  314. var positionSet = new Set();
  315. //校验分录只能是同一个直接上级
  316. var superiorSet = new Set();
  317. for(var i = 0; i < allRowData.length; i++){
  318. if(allRowData[i].position){
  319. positionSet.add(allRowData[i].position.id);
  320. }else{
  321. positionSet.add("");
  322. }
  323. if(allRowData[i].superiorId){
  324. superiorSet.add(allRowData[i].superiorId);
  325. }else{
  326. superiorSet.add("");
  327. }
  328. }
  329. if(positionSet.size > 1){
  330. shr.showWarning({message:"Entries cannot have data from different positions"});
  331. return false;
  332. }
  333. if(superiorSet.size > 1){
  334. shr.showWarning({message:"The direct supervisor corresponding to the employee position in the entry must be consistent"});
  335. return false;
  336. }
  337. var calSchemeField = "submitScheme_el";
  338. if (_self.getOperateState() == 'VIEW') {
  339. calSchemeField = "submitScheme";
  340. }
  341. var calSchemeId = $("#"+calSchemeField).val();
  342. //是否勾选校验方案
  343. var isPlanCheck = true;
  344. _self.remoteCall({
  345. type:"post",
  346. async: false,
  347. method:"isTakeCheck",
  348. param:{calSchemeId:calSchemeId},
  349. success:function(res){
  350. isPlanCheck = res.isPlanCheck;
  351. }
  352. });
  353. if(isPlanCheck){
  354. for(var i = 0; i < allRowData.length; i++){
  355. var beginContractDate = new Date(allRowData[i]["beginContractDate"]);
  356. var endContractDate = new Date(allRowData[i]["endContractDate"]);
  357. var effectDate = new Date(allRowData[i]["effectDate"]);
  358. if(beginContractDate && endContractDate){
  359. //发生日期要在合同开始和结束日期之间
  360. if(effectDate<beginContractDate || effectDate>endContractDate){
  361. shr.showWarning({message:"The occurrence date should be between the start and end dates of the contract"});
  362. return false;
  363. }
  364. }
  365. }
  366. var flag = true;
  367. _self.remoteCall({
  368. type:"post",
  369. async: false,
  370. method:"getInductionDate",
  371. param:{},
  372. success:function(res){
  373. if(res.enterDate){
  374. var enterDate = new Date(res.enterDate);
  375. for(var i = 0; i < allRowData.length; i++){
  376. var effectDate = new Date(allRowData[i]["effectDate"]);
  377. //发生日期不能小于入职日期
  378. if(effectDate<enterDate){
  379. shr.showWarning({message:"The occurrence date filled in by the employee cannot be earlier than the start date"});
  380. flag = false;
  381. }
  382. }
  383. }
  384. }
  385. });
  386. if(!flag){
  387. return flag;
  388. }
  389. }
  390. return true;
  391. },
  392. /**
  393. * 删除行
  394. */
  395. deleteRowAction: function(event) {
  396. var $editGrid = this.getEditGrid(event.currentTarget);
  397. var submitSchemeId = '';
  398. var ctrlrole = $('#submitScheme').attr('ctrlrole');
  399. if (ctrlrole == 'promptBox') {
  400. submitSchemeId = $('#submitScheme').shrPromptBox('getValue').id;
  401. } else {
  402. submitSchemeId = $('#submitScheme').val();
  403. }
  404. var ids = $editGrid.jqGrid('getSelectedRows');
  405. if(!ids || ids.length===0){
  406. shr.showWarning({message: $.cmpIntegrateI18n.common.selectRowMust /* 请先选择表格中的数据! */});
  407. return;
  408. }
  409. var deleteRowIds = "";
  410. if (ids) {
  411. for (var i = ids.length - 1; i >= 0; i--) {
  412. deleteRowIds += ids[i] + ",";
  413. $editGrid.jqGrid('delRow', ids[i]);
  414. }
  415. //新增页面,清除缓存数据
  416. $("#entry")[0].p.data = [];
  417. this.clearDelEntryIdsFromDB(submitSchemeId, deleteRowIds);
  418. }
  419. var billId = $("#id").val();
  420. //删除分录时如果这条数据已在数据库中,则会直接删除数据库记录,所以要重新计算单头的总工时和总金额
  421. _self.remoteCall({
  422. type:"post",
  423. async: false,
  424. method:"countHourAmount",
  425. param:{"billId":billId},
  426. success:function(res){
  427. }
  428. });
  429. this.countHourAmount();
  430. },
  431. submitAction: function(event) {
  432. var _self = this;
  433. if (_self.validate() && _self.verify()) {
  434. var allRowData = $("#entry").jqGrid("getAllRowData");
  435. // 获取当前日期
  436. let currentDate = new Date();
  437. // 获取本月的第一天
  438. let firstDayOfCurrentMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
  439. // 获取上个月的第一天
  440. let firstDayOfLastMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1);
  441. if (currentDate.getMonth() === 0) {
  442. // 如果当前月份为1月,需要调整为上一年的12月
  443. firstDayOfLastMonth.setFullYear(currentDate.getFullYear() - 1);
  444. }
  445. var calSchemeField = "submitScheme_el";
  446. if (_self.getOperateState() == 'VIEW') {
  447. calSchemeField = "submitScheme";
  448. }
  449. var calSchemeId = $("#"+calSchemeField).val();
  450. var isPlanCheck = true;
  451. var isCurrentDepart = true;
  452. //获取是否勾选了 校验方案和离职方案
  453. _self.remoteCall({
  454. type:"post",
  455. async: false,
  456. method:"isTakeCheck",
  457. param:{calSchemeId:calSchemeId},
  458. success:function(res){
  459. isPlanCheck = res.isPlanCheck;
  460. isCurrentDepart = res.isCurrentDepart;
  461. }
  462. });
  463. //勾选离职方案
  464. if(isCurrentDepart){
  465. var isDepartMonth = true;
  466. var cmpOrgRelationId = "";
  467. for(var i = 0; i < allRowData.length; i++){
  468. cmpOrgRelationId = allRowData[i].cmpEmpORelation.id;
  469. }
  470. //判断当月是否有离职生效日期或兼职失效日期在本月的数据
  471. _self.remoteCall({
  472. type:"post",
  473. async: false,
  474. method:"checkDepartDate",
  475. param:{cmpOrgRelationId:cmpOrgRelationId},
  476. success:function(res){
  477. isDepartMonth = res.flag;
  478. }
  479. });
  480. //勾选离职方案后只能提交当月的数据
  481. if(isDepartMonth){
  482. for(var i = 0; i < allRowData.length; i++){
  483. var effectDate = new Date(allRowData[i]["effectDate"]);
  484. if(!(effectDate.getFullYear()==currentDate.getFullYear() && effectDate.getMonth()==currentDate.getMonth())){
  485. shr.showWarning({message:"Only allow submission of the occurrence date of the current month"});
  486. return false;
  487. }
  488. }
  489. }else{
  490. //当月没有离职或兼职失效数据时不允许提交
  491. shr.showWarning({message:"The selected position does not have a resignation form that takes effect this month, or the expiration date of the part-time job is not within this month, so it cannot be submitted"});
  492. return false;
  493. }
  494. }else if(isPlanCheck){
  495. //校验XX号之后不允许提交
  496. var submitDateMessage = '';
  497. _self.remoteCall({
  498. type:"post",
  499. async: false,
  500. method:"checkSumbitDate",
  501. param:{},
  502. success:function(res){
  503. submitDateMessage = res.resultMessage;
  504. }
  505. });
  506. if(submitDateMessage){
  507. shr.showWarning({message:submitDateMessage});
  508. return false;
  509. }
  510. //勾选校验方案只能提交上月的数据
  511. for(var i = 0; i < allRowData.length; i++){
  512. var effectDate = new Date(allRowData[i]["effectDate"]);
  513. if(!(effectDate>=firstDayOfLastMonth && effectDate<firstDayOfCurrentMonth)){
  514. shr.showWarning({message:"Only allow submission of work hours from the previous month"});
  515. return false;
  516. }
  517. }
  518. }
  519. _self.preVerify(function(){
  520. $.extend($.verifyRuleTool,_self.getVerifyOptions(submitNodeId))
  521. $.verifyRuleTool.afterVeriyCallBack =function(){
  522. shr.showConfirm($.shrI18n.common.tips.submitConfirm, function() {
  523. _self.doSubmit(event, 'submit');
  524. });
  525. };
  526. $.verifyRuleTool.verifyInto();
  527. $.verifyRuleTool.ip="submitShemeBill"
  528. },'submit')
  529. }
  530. },
  531. initForm: function() {
  532. var _self = this;
  533. _self.assembleNewModelIdForAddNewOperate();
  534. _self.setInitData();
  535. _self.addCopyBtn();
  536. _self.ChangeSubmitScheme_event();
  537. _self.setSubmitSchemeState();
  538. _self.auditPageAdjust();
  539. shr.loadScript("/shr/addon/compensation/web/js/integrate/base/submitverify/cmpVerifyRuleTool.js")
  540. //编辑和查看状态下初始化表格
  541. if (_self.operateState == 'VIEW' || _self.operateState == 'EDIT') {
  542. _self.getEditGridColModel();
  543. _self.initF7TypeFieldArr();
  544. }
  545. if (_self.operateState == 'ADDNEW' || _self.operateState == 'EDIT') {
  546. _self.setSubmitSchemeF7Filter();
  547. _self.setDescriptionLength();
  548. }
  549. if (_self.operateState == 'ADDNEW' || _self.operateState == 'VIEW') {
  550. $("#availableBudget").hide();
  551. }
  552. if(_self.operateState == 'VIEW') {
  553. // 暂时先取消导出功能
  554. _self.addViewBtn();
  555. //排除员工自助提报的情景
  556. if('1' != $("#datasource").val()){
  557. _self.initJumpToPageButton();
  558. }
  559. }
  560. // 字段授权
  561. _self.checkNoPermFields();
  562. // 根据提报方案是否关联了预算额度模板,来决定费用承担组织、预算年度,费用类型是否展示
  563. _self.monitorBudget();
  564. },
  565. renderGridHeader: function(islocaldata) {
  566. var _self = this;
  567. var colModel = _self.colModel;
  568. var colNames = _self.colNames;
  569. var $entry = $('#entry');
  570. //如果表头没数据,默认展示序号
  571. if (!(colNames && colNames[0]) || !(colModel && colModel[0])) {
  572. colNames = ['id'];
  573. colModel = [{
  574. "name": "id",
  575. "label": "id",
  576. "frozen": false,
  577. "width": 150,
  578. "align": "left",
  579. "hidden": true,
  580. "key": true,
  581. "editable": false,
  582. "sorttype": "",
  583. "sortable": false,
  584. "classes": "disabled"
  585. }];
  586. }
  587. var ctrlrole = $entry.attr("ctrlrole");
  588. //表格已初始化,销毁
  589. if (ctrlrole) {
  590. $entry.jqGrid('gridUnload');
  591. }
  592. var columnModel = '';
  593. var hasFrozenColumn = false;
  594. //拼接columnModel字符串
  595. if (colModel && colModel[0]) {
  596. colModel.forEach(function(element, index) {
  597. if(element['frozen']){
  598. hasFrozenColumn = true;
  599. }
  600. columnModel += element.name;
  601. if (index != colModel.length - 1) {
  602. columnModel += ',';
  603. }
  604. });
  605. }
  606. // var grid_readonly = _self.operateState == 'VIEW';
  607. var grid_readonly = _self.operateState === 'VIEW' || _self.operateState === 'EDIT' || _self.operateState === 'ADDNEW';
  608. var grid_celledit = _self.operateState === 'EDIT' || _self.operateState === 'ADDNEW';
  609. var url = _self.getGridDataRequestURL();
  610. var dataGrid_option = {
  611. url: url,
  612. datatype: islocaldata=='1'?"local":"json",
  613. colNames: colNames,
  614. jsonReader: {
  615. repeatitems: false
  616. },
  617. sorterItems: "",
  618. colModel: colModel,
  619. postData: $entry[0].p.postData,
  620. customPager: '#gridPager',
  621. hasPager: grid_readonly,
  622. cellEdit: grid_celledit,
  623. height: 'auto',
  624. rowList: [50, 100, 200, 500],
  625. autowidth: true,
  626. viewrecords: true,
  627. cellsubmit: "clientArray",
  628. multiselect: true,
  629. _type_: "EditGrid",
  630. shrinkToFit: false,
  631. mtype: "get",
  632. recordtext: '({0}-{1})/{2}',
  633. gridview: true,
  634. pginput: true,
  635. rownumbers: true,
  636. footerrow: true,
  637. userDataOnFooter: true,
  638. clientFooter: false,
  639. serverFooter: false,
  640. sumColModel: [],
  641. pagerpos: 'center',
  642. recordpos: 'left',
  643. pginputpos: 'right',
  644. keyOptions: {
  645. addNewRowForLastCell: false,
  646. loop: true
  647. }
  648. };
  649. //查看模式分页查询,编辑默认查全部
  650. if(grid_readonly) {
  651. dataGrid_option.rowNum = 50;
  652. }else {
  653. dataGrid_option.rowNum = 100000;
  654. }
  655. dataGrid_option.loadComplete = function(ret) {
  656. $("#entry")[0].__isDirty = false;
  657. if(grid_readonly) {
  658. //初始化分页
  659. if (!$("#gridPager")[0]) {
  660. var pagerDiv = '<div id="gridPager"></div>';
  661. if ($('.editGrid-toolbar')[0]) {
  662. $('.editGrid-toolbar').after(pagerDiv);
  663. } else {
  664. $('#entry_cont').prepend(pagerDiv);
  665. }
  666. $("#entry").setCustomPager("#gridPager");
  667. }
  668. var datas = $("#entry").jqGrid("getRowData");
  669. if(datas && datas.length>8) { //表格数据超过一定数量,限制高度
  670. $("#entry").jqGrid('setGridHeight', 300);
  671. }
  672. shr.setIframeHeight();
  673. }
  674. };
  675. dataGrid_option.onPaging = function(){
  676. }
  677. dataGrid_option.beforeReloadGrid = function() {
  678. if(!grid_readonly ) {
  679. waf("#entry").find('tr.selected-row').click();
  680. var data = waf("#entry").jqGrid('getGridParam','data');
  681. data.length = 0;
  682. waf("#entry").jqGrid('setGridParam',{data:$("#entry").jqGrid('getAllPageData'),datatype:'local'});
  683. }
  684. shr.setIframeHeight();
  685. }
  686. //选择表格前设置姓名过滤条件
  687. dataGrid_option.beforeSelectRow = function() {
  688. _self.setNameF7Filter();
  689. }
  690. //审批时有滚动条时,把右侧DIV右移了一些挡住了列表的滚动条,现在先给列表的父标签一个右内边距,这样就不会被挡道。
  691. $('#entry_cont').css('padding-right','20px')
  692. waf("#entry").jqGrid(dataGrid_option).jqGrid("setFrozenColumns");
  693. waf("#entry").jqGrid("resizeGrid", {
  694. base: waf("#entry"),
  695. offset: 0
  696. });
  697. waf(window).resize(function() {
  698. waf.ieHack.hackResize(function(e) {
  699. waf("#entry").jqGrid("resizeGrid", {
  700. base: waf("#entry"),
  701. offset: 0
  702. });
  703. }, waf("#entry"));
  704. });
  705. $entry.jqGrid(dataGrid_option).trigger('reloadGrid');
  706. //查看状态初始化分页
  707. if(grid_readonly) {
  708. _self.initPage();
  709. }
  710. if (_self.operateState == 'ADDNEW' || _self.operateState == 'EDIT') {
  711. _self.setGridNameEvent();
  712. }
  713. if(!$("#entry_searchBar").length){
  714. _self.initCmpEntrySearchBar();
  715. }
  716. },
  717. /**
  718. * 分录增加复制按钮
  719. */
  720. addCopyBtn: function() {
  721. var _self = this;
  722. var str = [];
  723. str.push('<button id="copyRow" type="button" onclick="jsBinder.copyRowAction" name="copyRow" class="shrbtn">');
  724. str.push('Copy');
  725. str.push('</button>');
  726. str.push('<script>');
  727. str.push('$(function() {');
  728. str.push(' $("#copyRow").shrButton({');
  729. str.push(' actionBinding: "copyRowAction",');
  730. str.push(' subAction: "",');
  731. str.push(' customData: "",');
  732. str.push(' permItemId:""');
  733. str.push(' });');
  734. str.push('});');
  735. str.push('</script>');
  736. $("#deleteRow_entry").after(str.join(""));
  737. },
  738. copyRowAction: function(event) {
  739. var $editGrid = this.getEditGrid(event.currentTarget);
  740. var ids = $editGrid.jqGrid('getSelectedRows');
  741. if(!ids || ids.length===0){
  742. shr.showWarning({message: $.cmpIntegrateI18n.common.selectRowMust /* 请先选择表格中的数据! */});
  743. return;
  744. }
  745. for(var i = 0; i < ids.length; i++){
  746. var getRowRealData = $("#entry").jqGrid("getRowRealData", ids[i]);
  747. getRowRealData.id = '';
  748. $("#entry").jqGrid("addRow", {data:getRowRealData});
  749. }
  750. }
  751. });