atsOverTimeBillBatchEditForPerEx.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  1. shr.defineClass("shr.customer.gtiit.AtsOverTimeBillBatchEditForPerEx", shr.ats.atsOverTimeBillBatchEditForPer, {
  2. initalizeDOM:function(){
  3. shr.customer.gtiit.AtsOverTimeBillBatchEditForPerEx.superClass.initalizeDOM.call(this);
  4. var that = this;
  5. if(jsBinder.operateState == 'VIEW'){
  6. $('[aria-describedby="entries_todescription"]').css({'white-space':'break-spaces'});
  7. }
  8. var entries_cont=waf("#entries");
  9. entries_cont.jqGrid("option", {
  10. beforeSaveCell:function (rowid, cellname, value, iRow, iCol) {
  11. },
  12. beforeEditCell: function (rowid, cellname, value, iRow, iCol) {
  13. console.log("进入编辑前:", rowid, cellname, value, iRow, iCol);
  14. },
  15. afterEditCell: function (rowid, cellname, value, iRow, iCol) {
  16. console.log("进入编辑后:", rowid, cellname, value, iRow, iCol);
  17. // 在这里可以进行一些后续操作,如设置焦点
  18. // that.updateCalWidth(90)
  19. },
  20. afterSaveCell:function (rowid, cellname, value, iRow, iCol) {
  21. if(value["adminOrgUnit.id"]){
  22. $("#entries").jqGrid('setCell',rowid,"adminOrgUnit.id",value["adminOrgUnit.id"]);
  23. }
  24. _self.afterSaveCellTrigger(rowid, cellname, value, iRow, iCol);
  25. }
  26. ,afterEditCell:function (rowid, cellname, value, iRow, iCol)
  27. {
  28. that.getOTContrlParams(rowid);
  29. if(cellname=="otType" && that.OTContrlParams[rowid].isOtrolByDateType){
  30. $("#"+iRow+"_otType").shrPromptBox("disable");
  31. }
  32. //因为需求只是提了第一个时间时改变业务组织
  33. $("#1_otDate").change(function(){
  34. that.changeOverHrOrgUnit();
  35. });
  36. if(cellname=="otCompens"){
  37. if(that.filter[rowid]==undefined){
  38. // // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
  39. // that.changeOTCompens(rowid);
  40. }
  41. if(that.filter[rowid]){
  42. // $("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
  43. $("#"+$("#entries").jqGrid('getCell',rowid,"rn")+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
  44. }
  45. }
  46. if(cellname == "attAdminOrgUnit"){
  47. var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
  48. var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
  49. if(!(personId && attendanceDate)){
  50. shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
  51. return false;
  52. }else{
  53. //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
  54. $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
  55. personId: personId,
  56. attendanceDate: attendanceDate
  57. });
  58. }
  59. }
  60. _self.saveEditCellValue(rowid,cellname, value,iRow,iCol) ;
  61. }
  62. });
  63. this.updateCalWidth();
  64. },
  65. updateCalWidth:function(inWidth){
  66. // 获取jqGrid的引用
  67. var $grid = $("#entries");
  68. // 获取列模型
  69. var colModel = $grid.jqGrid('getGridParam', 'colModel');
  70. // 找到 'startTime' 列的索引
  71. var columnIndex = -1;
  72. $.each(colModel, function (i, col) {
  73. if (col.name === 'startTime' || col.name === 'endTime'
  74. || col.name === 'restStartTime' || col.name === 'restEndTime'
  75. || col.name === 'restStartTime2' || col.name === 'restEndTime2'
  76. || col.name === 'realStartTime' || col.name === 'realEndTime') {
  77. columnIndex = i;
  78. // 设置新的列宽
  79. var newWidth = inWidth?inWidth:75; // 新的宽度值
  80. // 调整列标题的宽度
  81. $('.ui-jqgrid-labels > th:eq(' + columnIndex + ')').css('width', newWidth + 'px');
  82. // 调整列内容的宽度
  83. $grid.find('tbody tr').each(function () {
  84. var $td = $(this).find('td:eq(' + columnIndex + ')');
  85. $td.css('width', newWidth + 'px');
  86. });
  87. // 调整jqGrid的列宽(确保jqGrid内部状态更新)
  88. $grid.jqGrid('setColProp', col.name, { width: newWidth });
  89. }
  90. });
  91. },
  92. afterSaveCellTrigger: function(rowid, cellname, value, iRow, iCol)
  93. {
  94. var that = this ;
  95. var entries_cont=waf("#entries");
  96. that.removePreShowError(rowid);
  97. if(cellname=="otDate"){
  98. var val = value;
  99. if (val.length <= 10) {
  100. val = val + " 00:00:00";
  101. }
  102. val && $("#entries").jqGrid('setCell',rowid,"startTime",val);
  103. val && $("#entries").jqGrid('setCell',rowid,"endTime",val);
  104. that.changeOverTimeType(rowid);
  105. that.calRestTimeLen(rowid);
  106. }
  107. if(cellname=="otType"){
  108. that.changeOTCompens(rowid);
  109. that.countOvertimeHourAction();
  110. }
  111. // 添加 开始时间 结束时间 休息时长(分钟) 响应时间
  112. if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
  113. if(cellname!="restTime"){
  114. that.calRestTimeLen(rowid);
  115. }
  116. that.calculateOTtimes(rowid);
  117. }
  118. if(cellname=="person"){
  119. that.calRestTimeLen(rowid);
  120. }
  121. if(cellname=="applyOTTime"){ // 加班小时数 发生改变就给予提示
  122. that.changOtTimeTipInfo(rowid);
  123. that.countOvertimeHourAction();
  124. }
  125. if (cellname == "otCompens") {
  126. that.countOvertimeHourAction();
  127. }
  128. if (cellname=="restStartTime" || cellname=="restStartTime2" || cellname=="restEndTime" ||cellname=="restEndTime2"){
  129. //计算休息时间,加班时间
  130. var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
  131. var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
  132. var restStartTime = $("#entries").jqGrid('getCell',rowid,"restStartTime") ;
  133. var restEndTime = $("#entries").jqGrid('getCell',rowid,"restEndTime") ;
  134. var restStartTime2 = $("#entries").jqGrid('getCell',rowid,"restStartTime2") ;
  135. var restEndTime2 = $("#entries").jqGrid('getCell',rowid,"restEndTime2") ;
  136. if (startTime=="" || endTime==""){
  137. return
  138. }
  139. var totalRestTime=0;
  140. var restStartTimeOfDate;
  141. var restEndTimeOfDate;
  142. if (restStartTime!="" && restEndTime!=""){
  143. restStartTimeOfDate = new Date(restStartTime);
  144. restEndTimeOfDate = new Date(restEndTime);
  145. var times =restEndTimeOfDate.getTime()-restStartTimeOfDate.getTime();
  146. if (times<0){
  147. times=0;
  148. }
  149. times=times/1000/60;
  150. totalRestTime+=times;
  151. }
  152. if (restStartTime2!="" && restEndTime2!=""){
  153. var restStartTime2OfDate = new Date(restStartTime2);
  154. var restEndTime2OfDate = new Date(restEndTime2);
  155. if ((restStartTime!="" && restEndTime2OfDate.getTime()>restStartTimeOfDate.getTime() && restStartTimeOfDate.getTime()>=restStartTime2OfDate.getTime())
  156. ||(restEndTime!="" && restEndTimeOfDate.getTime()<=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()<restEndTimeOfDate.getTime())
  157. ||(restStartTime!="" && restEndTime!="" && restEndTimeOfDate.getTime()>=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()>=restStartTimeOfDate.getTime())
  158. ){
  159. //时间有交叉
  160. $("#entries").jqGrid('setCell',rowid,"restEndTime2",restStartTime2) ;
  161. } else {
  162. var times =restEndTime2OfDate.getTime()-restStartTime2OfDate.getTime();
  163. if (times<0){
  164. times=0;
  165. }
  166. times=times/1000/60;
  167. totalRestTime+=times;
  168. }
  169. }
  170. var t1 = totalRestTime.toFixed(atsMlUtile.getSysDecimalPlace());
  171. $("#entries").jqGrid('setCell',rowid,"restTime",t1) ;
  172. var startTime =new Date(startTime+":00");
  173. var endTime =new Date(endTime+":00");
  174. var se = endTime.getTime()-startTime.getTime() -totalRestTime; // 毫秒
  175. var tfl = se/(3600*1000) ;
  176. $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl) ;
  177. that.calculateOTtimes(rowid);
  178. that.getOTContrlParams(rowid);
  179. that.countOvertimeHourAction();
  180. }
  181. },
  182. calculateOTtimes : function(rowid){
  183. var that = this ;
  184. var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
  185. var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
  186. var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
  187. if(startTime =="[object Object]"){
  188. $("#"+rowid).find('td').eq('5').text("");
  189. $("#"+rowid).find('td').eq('5').attr("title","");
  190. }
  191. if(endTime =="[object Object]"){
  192. $("#"+rowid).find('td').eq('6').text("");
  193. $("#"+rowid).find('td').eq('6').attr("title","");
  194. }
  195. startTime = that.addTimeToDate(startTime);
  196. endTime = that.addTimeToDate(endTime);
  197. if(startTime!="" && endTime!=""){
  198. var restVal = 0;
  199. if(restTime!="" && (/^[0-9]*$/.test(restTime))){
  200. restVal = restTime; // 分钟数
  201. }
  202. var startTime = NewDate(startTime+":00");
  203. var endTime = NewDate(endTime+":00");
  204. var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
  205. var tfl = (se/(3600*1000)).toFixed(fixedNum) ;
  206. $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl);
  207. this.countOvertimeHourAction();
  208. }
  209. },
  210. getOverTimeType:function(rowid,otDate,personId){
  211. var _self = this;
  212. var url = shr.getContextPath() + "/dynamic.do?method=getOverTimeTypeAndOtCompens";
  213. url += '&otDate=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
  214. $.ajax({
  215. url: url,
  216. async:false,
  217. success: function(response){
  218. if(response.otTypeValue!=null && response.otTypeValue !=undefined && response.otTypeValue!=''){
  219. var responseObejct = {id:response.otTypeValue,name:response.otTypeText }
  220. if (_self.isOtTypeEffective(response.otTypeValue)){
  221. // $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
  222. $("#entries").jqGrid('setCell',rowid,"otType",responseObejct);
  223. //设置该加班类型的补偿方式过滤
  224. var otCompensIds = _self.getOTCompensByOTType(personId,response.otTypeValue);
  225. if(otCompensIds){
  226. var otCompensIdsStr = _self.getOTCompensByOTType(personId,response.otTypeValue).replace(/(,)/g, "','");
  227. _self.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
  228. }
  229. var compens = response.compensInfo ;
  230. var defaultJson = {id:compens.id , name:compens.name} ;
  231. $("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
  232. }
  233. else {
  234. $("#entries").jqGrid('setCell',rowid,"otType",null);
  235. }
  236. }else{
  237. $("#entries").jqGrid('setCell',rowid,"otType",null);
  238. }
  239. }
  240. ,error: function(response) {
  241. }
  242. });
  243. _self.changeWorkType(rowid);
  244. _self.countOvertimeHourAction();
  245. },
  246. changeOTCompens:function(rowid){
  247. var that=this;
  248. var otCompensId ;
  249. if(!$("#entries").jqGrid('getCell',rowid,"otType")){
  250. return;
  251. }else{
  252. otTypeId = $("#entries").jqGrid('getCell',rowid,"otType").id;
  253. }
  254. if(!$("#entries").jqGrid('getCell',rowid,"person")){
  255. return;
  256. }else{
  257. var personId = $("#entries").jqGrid('getCell',rowid,"person").id;
  258. }
  259. var otCompensIds = that.getOTCompensByOTType(personId,otTypeId);
  260. var url = shr.getContextPath()+'/dynamic.do';
  261. that.remoteCall({
  262. type:"post",
  263. method:"getDefaultOTCompens",
  264. url:url,
  265. param:{personId:personId,otTypeId:otTypeId},
  266. async: false,
  267. success:function(res){
  268. var info = res;
  269. if (info.defaultId == "" || info.defaultId ==undefined ){
  270. shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_24});
  271. }else {
  272. var defaultOTCompens = {id:info.defaultId,name:info.defaultName};
  273. $("#entries").jqGrid('setCell',rowid,"otCompens",defaultOTCompens);
  274. if(otCompensIds){
  275. var otCompensIdsStr = otCompensIds.replace(/(,)/g, "','")
  276. that.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
  277. }
  278. }
  279. }
  280. });
  281. that.countOvertimeHourAction();
  282. },
  283. verify:function(){
  284. var _self = this ;
  285. var obj = $("#entries").jqGrid("getRowData");
  286. var errorString = "";
  287. var errorFlag = 0 ;
  288. if(obj.length == 0){
  289. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_7});
  290. return false;
  291. }
  292. if(!_self.checkRowIsOver()){
  293. return false;
  294. }
  295. _rowMap = {} ;
  296. jQuery(obj).each(function(n){
  297. errorString = _self.checkEveryRow(n + 1 , this);
  298. if(errorString){
  299. _self.preShowError( n + 1 ,this.person.name + " " + errorString);
  300. errorFlag = 1 ;
  301. }
  302. });
  303. if(!_self.verifyCheck()){
  304. return false;
  305. }
  306. errorString = _self.validateOTEntry();
  307. if(errorString && errorString != ""){
  308. shr.showWarning({message: errorString});
  309. closeLoader();
  310. return false;
  311. }
  312. if(errorFlag == 0){
  313. //工作流审批界面,加班补提控制。
  314. var boo = true;
  315. boo = _self.validateIsFillOtVerify();
  316. return boo;
  317. }else{
  318. return false;
  319. }
  320. },
  321. changeWorkType: function (rowid) {
  322. var that = this;
  323. var otDate;
  324. if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
  325. return;
  326. } else {
  327. otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
  328. }
  329. _self.remoteCall({
  330. type:"post",
  331. async: false,
  332. method:"workMultiple",
  333. param:{otDate:otDate},
  334. success:function(res){
  335. if(res.otTypeValue){
  336. var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
  337. $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
  338. }
  339. }
  340. });
  341. var otType = $("#entries").jqGrid("getCell",rowid,"otType");
  342. if(!otType){
  343. _self.remoteCall({
  344. type:"post",
  345. async: false,
  346. method:"jobType",
  347. param:{otDate:otDate},
  348. success:function(res){
  349. if(res.otTypeValue){
  350. var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
  351. $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
  352. }
  353. }
  354. });
  355. }
  356. },
  357. /**
  358. * 删除行
  359. */
  360. deleteRowAction: function(event) {
  361. var $editGrid = this.getEditGrid(event.currentTarget);
  362. var ids = $editGrid.jqGrid('getSelectedRows');
  363. if (ids.length > 0) {
  364. for (var i = ids.length - 1; i >= 0; i--) {
  365. $editGrid.jqGrid('delRow', ids[i]);
  366. }
  367. this.countOvertimeHourAction();
  368. }else{
  369. shr.showInfo({
  370. message: $.shrI18n.common.tips.chooseTableDataFirst,
  371. hideAfter: 3
  372. });
  373. }
  374. },
  375. countOvertimeHourAction:function(){
  376. var allRowData = $("#entries").jqGrid("getAllRowData");
  377. var length = allRowData.length;
  378. var weekdayHour = 0;//工作日加班小时数
  379. var restdayHour = 0;//休息日加班小时数
  380. var holidayHour = 0;//法定节假日加班小时数
  381. var totalDuration = 0;//加班总时长
  382. var compensatoryTotal = 0;//调休加班总时长
  383. var totalOvertimePay = 0;//加班费加班总时长
  384. for(var i=0; i<length; i++){
  385. var otType = allRowData[i].otType.id;
  386. var applyOTTime = allRowData[i].applyOTTime;
  387. var otCompens = allRowData[i].otCompens.id;
  388. if(applyOTTime == ""){
  389. continue;
  390. }
  391. if(otType == "rBy0u1YgQ9C1OxcM85mxyY6C/nU="){
  392. weekdayHour = Number(weekdayHour)+Number(applyOTTime);
  393. }else if(otType == "zr+ur5D4RA+2bdVZ2VPqp46C/nU="){
  394. restdayHour = Number(restdayHour)+Number(applyOTTime);
  395. }else if(otType == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){
  396. holidayHour = Number(holidayHour)+Number(applyOTTime);
  397. }
  398. if(otCompens == "AERg0TIcSnaM40EKvJCdRKlrTmA="){
  399. compensatoryTotal = Number(compensatoryTotal)+Number(applyOTTime);
  400. }else if(otCompens == "zkbt5bMLQ3ehUivmKbtBOqlrTmA="){
  401. totalOvertimePay = Number(totalOvertimePay)+Number(applyOTTime);
  402. }
  403. }
  404. totalDuration = Number(weekdayHour)+Number(restdayHour)+Number(holidayHour);
  405. // $("#weekdayHour").val(weekdayHour);
  406. // $("#restdayHour").val(restdayHour);
  407. // $("#holidayHour").val(holidayHour);
  408. // $("#totalDuration").val(totalDuration);
  409. // $("#compensatoryTotal").val(compensatoryTotal);
  410. // $("#totalOvertimePay").val(totalOvertimePay);
  411. this.getField("weekdayHour").shrNumberField("setValue",weekdayHour);
  412. this.getField("restdayHour").shrNumberField("setValue",restdayHour);
  413. this.getField("holidayHour").shrNumberField("setValue",holidayHour);
  414. this.getField("totalDuration").shrNumberField("setValue",totalDuration);
  415. this.getField("compensatoryTotal").shrNumberField("setValue",compensatoryTotal);
  416. this.getField("totalOvertimePay").shrNumberField("setValue",totalOvertimePay);
  417. },
  418. submitAction: function(event) {
  419. var _self = this,
  420. workArea = _self.getWorkarea(),
  421. $form = $('form', workArea);
  422. if(!_self.validate()){
  423. return ;
  424. }
  425. if(!_self.checkOtDate()){
  426. return false;
  427. }
  428. if ($form.valid() && _self.verify()) {
  429. shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_14, function() {
  430. _self.doSubmit(event, 'submit');
  431. });
  432. }
  433. },
  434. checkOtDate:function(){
  435. var allRowData = $("#entries").jqGrid("getAllRowData");
  436. for(var i=0; i<allRowData.length; i++){
  437. var otDate = allRowData[i].otDate;
  438. otDate = new Date(otDate);
  439. const currentDate = new Date();
  440. const lastMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, currentDate.getDate());
  441. var lastYear = lastMonthDate.getFullYear();
  442. var lastMonth = lastMonthDate.getMonth();
  443. if(otDate.getMonth() != lastMonth || otDate.getFullYear() != lastYear){
  444. shr.showWarning({message: "Only overtime records with the previous month's overtime date can be submitted for the current month"});
  445. return false;
  446. }
  447. }
  448. return true;
  449. }
  450. });
  451. waf.defineCustomeClass("cellformatter.shrTextArea", cellformatter.defaultFormatter, {
  452. unformat: function (cell, rowId) {
  453. return $.trim($(cell).text());
  454. },
  455. format: function (cellval, rwd) {
  456. if (!$.type.isEmpty(cellval)) {
  457. return "<pre class='required' style='width:98%;color:rgb(153, 153, 153)'>" + cellval + "</pre>";
  458. } else {
  459. return cellformatter.defaultFormatter.prototype.format.call(this, cellval, rwd);
  460. }
  461. },
  462. });