atsOverTimeBillBatchEditForPerEx.js 19 KB

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