atsOverTimeBillBatchEditEx.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  1. shr.defineClass("shr.customer.gtiit.AtsOverTimeBillBatchEditEx", shr.ats.AtsOverTimeBillBatchEdit, {
  2. initalizeDOM:function(){
  3. shr.customer.gtiit.AtsOverTimeBillBatchEditEx.superClass.initalizeDOM.call(this);
  4. var that = this;
  5. var entries_cont = waf("#entries");
  6. entries_cont.jqGrid("option", {
  7. onChange: function (rowid, cellname, value, iRow, iCol) {
  8. console.log(rowid, cellname, value, iRow, iCol, 123123);
  9. },
  10. beforeSaveCell: function (
  11. rowid,
  12. cellname,
  13. value,
  14. iRow,
  15. iCol
  16. ) {},
  17. afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
  18. if (value["adminOrgUnit.id"]) {
  19. $("#entries").jqGrid(
  20. "setCell",
  21. rowid,
  22. "adminOrgUnit.id",
  23. value["adminOrgUnit.id"]
  24. );
  25. }
  26. that.removePreShowError(rowid);
  27. if (cellname == "otDate") {
  28. var val = value;
  29. if (val.length <= 10) {
  30. val = val + " 00:00:00";
  31. }
  32. val &&
  33. $("#entries").jqGrid(
  34. "setCell",
  35. rowid,
  36. "startTime",
  37. val
  38. );
  39. val &&
  40. $("#entries").jqGrid(
  41. "setCell",
  42. rowid,
  43. "endTime",
  44. val
  45. );
  46. that.changeOverTimeType(rowid);
  47. that.calRestTimeLen(rowid);
  48. that.getOTContrlParams(rowid);
  49. }
  50. if (cellname == "otType") {
  51. that.changeOTCompens(rowid);
  52. that.countOvertimeHourAction();
  53. }
  54. // 添加 开始时间 结束时间 休息时长(分钟) 响应时间
  55. if (
  56. cellname == "startTime" ||
  57. cellname == "endTime" ||
  58. cellname == "restTime"
  59. ) {
  60. if (cellname != "restTime") {
  61. that.calRestTimeLen(rowid);
  62. }
  63. that.calculateOTtimes(rowid);
  64. }
  65. if (cellname == "person") {
  66. that.calRestTimeLen(rowid);
  67. that.getOTContrlParams(rowid);
  68. }
  69. if (cellname == "applyOTTime") {
  70. // 加班小时数 发生改变就给予提示
  71. that.changOtTimeTipInfo(rowid);
  72. that.countOvertimeHourAction();
  73. }
  74. if (cellname == "otCompens") {
  75. that.countOvertimeHourAction();
  76. }
  77. if (
  78. cellname == "restStartTime" ||
  79. cellname == "restStartTime2" ||
  80. cellname == "restEndTime" ||
  81. cellname == "restEndTime2"
  82. ) {
  83. //计算休息时间,加班时间
  84. var startTime = $("#entries").jqGrid(
  85. "getCell",
  86. rowid,
  87. "startTime"
  88. );
  89. var endTime = $("#entries").jqGrid(
  90. "getCell",
  91. rowid,
  92. "endTime"
  93. );
  94. var restStartTime = $("#entries").jqGrid(
  95. "getCell",
  96. rowid,
  97. "restStartTime"
  98. );
  99. var restEndTime = $("#entries").jqGrid(
  100. "getCell",
  101. rowid,
  102. "restEndTime"
  103. );
  104. var restStartTime2 = $("#entries").jqGrid(
  105. "getCell",
  106. rowid,
  107. "restStartTime2"
  108. );
  109. var restEndTime2 = $("#entries").jqGrid(
  110. "getCell",
  111. rowid,
  112. "restEndTime2"
  113. );
  114. if (startTime == "" || endTime == "") {
  115. return;
  116. }
  117. var totalRestTime = 0;
  118. var totalRestTimeLong = 0;
  119. var restStartTimeOfDate;
  120. var restEndTimeOfDate;
  121. if(shr.getBowserInfo().browser === 'IE' || shr.getBowserInfo().browser === 'Safari'){
  122. restStartTime = restStartTime.replace(/-/g,'/');
  123. restEndTime = restEndTime.replace(/-/g,'/');
  124. restStartTime2 = restStartTime2.replace(/-/g,'/');
  125. restEndTime2 = restEndTime2.replace(/-/g,'/');
  126. }
  127. if (restStartTime != "" && restEndTime != "") {
  128. restStartTimeOfDate = new Date(restStartTime);
  129. restEndTimeOfDate = new Date(restEndTime);
  130. var times =
  131. restEndTimeOfDate.getTime() -
  132. restStartTimeOfDate.getTime();
  133. if (times < 0) {
  134. times = 0;
  135. }
  136. totalRestTimeLong += times;
  137. times = times / 1000 / 60;
  138. totalRestTime += times;
  139. }
  140. if (restStartTime2 != "" && restEndTime2 != "") {
  141. var restStartTime2OfDate = new Date(restStartTime2);
  142. var restEndTime2OfDate = new Date(restEndTime2);
  143. if (
  144. (restStartTime != "" &&
  145. restEndTime2OfDate.getTime() >
  146. restStartTimeOfDate.getTime() &&
  147. restStartTimeOfDate.getTime() >=
  148. restStartTime2OfDate.getTime()) ||
  149. (restEndTime != "" &&
  150. restEndTimeOfDate.getTime() <=
  151. restEndTime2OfDate.getTime() &&
  152. restStartTime2OfDate.getTime() <
  153. restEndTimeOfDate.getTime()) ||
  154. (restStartTime != "" &&
  155. restEndTime != "" &&
  156. restEndTimeOfDate.getTime() >=
  157. restEndTime2OfDate.getTime() &&
  158. restStartTime2OfDate.getTime() >=
  159. restStartTimeOfDate.getTime())
  160. ) {
  161. //时间有交叉
  162. $("#entries").jqGrid(
  163. "setCell",
  164. rowid,
  165. "restEndTime2",
  166. restStartTime2
  167. );
  168. } else {
  169. var times =
  170. restEndTime2OfDate.getTime() -
  171. restStartTime2OfDate.getTime();
  172. if (times < 0) {
  173. times = 0;
  174. }
  175. totalRestTimeLong += times;
  176. times = times / 1000 / 60;
  177. totalRestTime += times;
  178. }
  179. }
  180. var t1 = totalRestTime.toFixed(
  181. atsMlUtile.getSysDecimalPlace()
  182. );
  183. $("#entries").jqGrid("setCell", rowid, "restTime", t1);
  184. var startTime = NewDate(startTime + ":00");
  185. var endTime = NewDate(endTime + ":00");
  186. var se =
  187. endTime.getTime() -
  188. startTime.getTime() -
  189. totalRestTimeLong; // 毫秒
  190. var tfl = se / (3600 * 1000);
  191. $("#entries").jqGrid(
  192. "setCell",
  193. rowid,
  194. "applyOTTime",
  195. tfl
  196. );
  197. that.getOTContrlParams(rowid);
  198. that.countOvertimeHourAction();
  199. }
  200. },
  201. afterEditCell: function (rowid, cellname, value, iRow, iCol) {
  202. if (
  203. cellname == "otType" &&
  204. that.OTContrlParams[rowid] &&
  205. that.OTContrlParams[rowid].isOtrolByDateType
  206. ) {
  207. $("#" + iRow + "_otType").shrPromptBox("disable");
  208. }
  209. if (cellname == "otCompens") {
  210. if (that.filter[rowid] == undefined) {
  211. // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
  212. // that.changeOTCompens(rowid);
  213. }
  214. if (that.filter[rowid]) {
  215. // $("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
  216. $(
  217. "#" +
  218. $("#entries").jqGrid(
  219. "getCell",
  220. rowid,
  221. "rn"
  222. ) +
  223. "_otCompens"
  224. ).shrPromptBox("setFilter", that.filter[rowid]);
  225. }
  226. }
  227. if (cellname == "person") {
  228. var hrOrgUnitId = $("#hrOrgUnit_el").val();
  229. $("#" + rowid + "_person")
  230. .shrPromptBox()
  231. .attr("data-params", hrOrgUnitId);
  232. $("#" + iRow + "_person").shrPromptBox("option", {
  233. onchange: function (e, value) {
  234. $("#entries").jqGrid(
  235. "setCell",
  236. rowid,
  237. "person.number",
  238. value.current
  239. ? value.current["person.number"]
  240. : ""
  241. );
  242. }
  243. });
  244. }
  245. if(cellname == "attAdminOrgUnit"){
  246. var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
  247. var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
  248. if(!(personId && attendanceDate)){
  249. shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
  250. return false;
  251. }else{
  252. //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
  253. $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
  254. personId: personId,
  255. attendanceDate: attendanceDate
  256. });
  257. }
  258. }
  259. }
  260. });
  261. },
  262. calculateOTtimes: function (rowid) {
  263. var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
  264. var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
  265. var restTime = $("#entries").jqGrid("getCell", rowid, "restTime");
  266. if (startTime == "[object Object]") {
  267. $("#" + rowid)
  268. .find("td")
  269. .eq("5")
  270. .text("");
  271. $("#" + rowid)
  272. .find("td")
  273. .eq("5")
  274. .attr("title", "");
  275. }
  276. if (endTime == "[object Object]") {
  277. $("#" + rowid)
  278. .find("td")
  279. .eq("6")
  280. .text("");
  281. $("#" + rowid)
  282. .find("td")
  283. .eq("6")
  284. .attr("title", "");
  285. }
  286. if (startTime != "" && endTime != "") {
  287. var restVal = 0;
  288. if (restTime != "" && /^[0-9]*$/.test(restTime)) {
  289. restVal = restTime; // 分钟数
  290. }
  291. var startTime = NewDate(startTime + ":00");
  292. var endTime = NewDate(endTime + ":00");
  293. var se =
  294. endTime.getTime() -
  295. startTime.getTime() -
  296. restVal * 1000 * 60; // 毫秒
  297. var tfl = se / (3600 * 1000);
  298. $("#entries").jqGrid(
  299. "setCell",
  300. rowid,
  301. "applyOTTime",
  302. tfl.toFixed(fixedNum)
  303. );
  304. this.countOvertimeHourAction();
  305. }
  306. },
  307. getOverTimeType: function (rowid, otDate, personId) {
  308. var _self = this;
  309. var tDate = otDate;
  310. var url =
  311. shr.getContextPath() +
  312. "/dynamic.do?method=getOverTimeTypeAndOtCompens";
  313. url +=
  314. "&otDate=" +
  315. encodeURIComponent(otDate) +
  316. "&personId=" +
  317. encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
  318. $.ajax({
  319. url: url,
  320. async: false,
  321. success: function (response) {
  322. if (
  323. response.otTypeValue != null &&
  324. response.otTypeValue != undefined &&
  325. response.otTypeValue != ""
  326. ) {
  327. var responseObejct = {
  328. id: response.otTypeValue,
  329. name: response.otTypeText
  330. };
  331. if (_self.isOtTypeEffective(response.otTypeValue)) {
  332. // $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
  333. $("#entries").jqGrid(
  334. "setCell",
  335. rowid,
  336. "otType",
  337. responseObejct
  338. );
  339. //设置该加班类型的补偿方式过滤
  340. var otCompensIds = _self.getOTCompensByOTType(
  341. personId,
  342. response.otTypeValue,
  343. tDate
  344. );
  345. if (otCompensIds) {
  346. var otCompensIdsStr = _self
  347. .getOTCompensByOTType(
  348. personId,
  349. response.otTypeValue,
  350. tDate
  351. )
  352. .replace(/(,)/g, "','");
  353. _self.filter[rowid] =
  354. "BaseInfo.id in ('" +
  355. otCompensIdsStr +
  356. "')";
  357. }
  358. var compens = response.compensInfo;
  359. if (compens != null) {
  360. var defaultJson = {
  361. id: compens.id,
  362. name: compens.name
  363. };
  364. $("#entries").jqGrid(
  365. "setCell",
  366. rowid,
  367. "otCompens",
  368. defaultJson
  369. );
  370. }
  371. } else {
  372. $("#entries").jqGrid(
  373. "setCell",
  374. rowid,
  375. "otType",
  376. null
  377. );
  378. }
  379. }else{
  380. $("#entries").jqGrid('setCell',rowid,"otType",null);
  381. }
  382. },
  383. error: function (response) {}
  384. });
  385. _self.changeWorkType(rowid);
  386. _self.countOvertimeHourAction();
  387. },
  388. changeOTCompens: function (rowid) {
  389. var that = this;
  390. var otCompensId;
  391. if (!$("#entries").jqGrid("getCell", rowid, "otType")) {
  392. return;
  393. } else {
  394. otTypeId = $("#entries").jqGrid("getCell", rowid, "otType").id;
  395. }
  396. if (!$("#entries").jqGrid("getCell", rowid, "person")) {
  397. return;
  398. } else {
  399. var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
  400. }
  401. if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
  402. return;
  403. } else {
  404. var otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
  405. }
  406. var otCompensIds = that.getOTCompensByOTTypes(personId, otTypeId);
  407. var url =
  408. shr.getContextPath() +
  409. "/dynamic.do";
  410. that.remoteCall({
  411. type: "post",
  412. method: "getDefaultOTCompens",
  413. url: url,
  414. param: {
  415. personId: personId,
  416. otTypeId: otTypeId,
  417. otDate: otDate
  418. },
  419. async: false,
  420. success: function (res) {
  421. var info = res;
  422. if (info.defaultId == "" || info.defaultId == undefined) {
  423. shr.showWarning({
  424. message:
  425. jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_28
  426. });
  427. } else {
  428. var defaultOTCompens = {
  429. id: info.defaultId,
  430. name: info.defaultName
  431. };
  432. $("#entries").jqGrid(
  433. "setCell",
  434. rowid,
  435. "otCompens",
  436. defaultOTCompens
  437. );
  438. if (otCompensIds) {
  439. var otCompensIdsStr = otCompensIds.replace(
  440. /(,)/g,
  441. "','"
  442. );
  443. that.filter[rowid] =
  444. "BaseInfo.id in ('" + otCompensIdsStr + "')";
  445. }
  446. }
  447. }
  448. });
  449. that.countOvertimeHourAction();
  450. },
  451. verify: function () {
  452. var _self = this;
  453. var obj = $("#entries").jqGrid("getRowData");
  454. var errorString = "";
  455. var errorFlag = 0;
  456. var billerrorString = "";
  457. if (obj.length == 0) {
  458. shr.showWarning({
  459. message:
  460. jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_7
  461. });
  462. return false;
  463. }
  464. if (!_self.checkRowIsOver()) {
  465. // closeLoader();
  466. return false;
  467. }
  468. _rowMap = {};
  469. openLoader(
  470. 1,
  471. jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_29
  472. );
  473. jQuery(obj).each(function (n) {
  474. errorString = _self.checkEveryRow(n + 1, this);
  475. if (errorString) {
  476. _self.preShowError(
  477. n + 1,
  478. this.person.name + " " + errorString
  479. );
  480. billerrorString =
  481. billerrorString +
  482. shr.formatMsg(
  483. jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_44,
  484. [n + 1]
  485. ) +
  486. errorString;
  487. errorFlag = 1;
  488. }
  489. });
  490. if (errorString && errorString != "") {
  491. var showMes = "";
  492. showMes += billerrorString.replace(/。/g, "。</br>");
  493. shr.showWarning({ message: showMes });
  494. closeLoader();
  495. return false;
  496. }
  497. errorString = _self.validateOTEntry();
  498. if (errorString && errorString != "") {
  499. shr.showWarning({ message: errorString });
  500. closeLoader();
  501. return false;
  502. }
  503. var hasOtType = _self.checkOtType();
  504. if (!hasOtType) {
  505. return false;
  506. }
  507. if (errorFlag == 0) {
  508. //工作流审批界面,加班补提控制。
  509. var boo = true;
  510. boo = _self.validateIsFillOtVerify();
  511. closeLoader();
  512. // if(!_self.checkOtDate()){
  513. // return false;
  514. // }
  515. return boo;
  516. } else {
  517. closeLoader();
  518. return false;
  519. }
  520. },
  521. changeWorkType: function (rowid) {
  522. var that = this;
  523. var otDate;
  524. if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
  525. return;
  526. } else {
  527. otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
  528. }
  529. _self.remoteCall({
  530. type:"post",
  531. async: false,
  532. method:"workMultiple",
  533. param:{otDate:otDate},
  534. success:function(res){
  535. if(res.otTypeValue){
  536. var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
  537. $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
  538. }
  539. }
  540. });
  541. var otType = $("#entries").jqGrid("getCell",rowid,"otType");
  542. if(!otType){
  543. _self.remoteCall({
  544. type:"post",
  545. async: false,
  546. method:"jobType",
  547. param:{otDate:otDate},
  548. success:function(res){
  549. if(res.otTypeValue){
  550. var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
  551. $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
  552. }
  553. }
  554. });
  555. }
  556. },
  557. /**
  558. * 删除行
  559. */
  560. deleteRowAction: function(event) {
  561. var $editGrid = this.getEditGrid(event.currentTarget);
  562. var ids = $editGrid.jqGrid('getSelectedRows');
  563. if (ids.length > 0) {
  564. for (var i = ids.length - 1; i >= 0; i--) {
  565. $editGrid.jqGrid('delRow', ids[i]);
  566. }
  567. this.countOvertimeHourAction();
  568. }else{
  569. shr.showInfo({
  570. message: $.shrI18n.common.tips.chooseTableDataFirst,
  571. hideAfter: 3
  572. });
  573. }
  574. },
  575. countOvertimeHourAction:function(){
  576. var allRowData = $("#entries").jqGrid("getAllRowData");
  577. var length = allRowData.length;
  578. var weekdayHour = 0;//工作日加班小时数
  579. var restdayHour = 0;//休息日加班小时数
  580. var holidayHour = 0;//法定节假日加班小时数
  581. var totalDuration = 0;//加班总时长
  582. var compensatoryTotal = 0;//调休加班总时长
  583. var totalOvertimePay = 0;//加班费加班总时长
  584. for(var i=0; i<length; i++){
  585. var otType = allRowData[i].otType.id;
  586. var applyOTTime = allRowData[i].applyOTTime;
  587. var otCompens = allRowData[i].otCompens.id;
  588. if(applyOTTime == ""){
  589. continue;
  590. }
  591. if(otType == "rBy0u1YgQ9C1OxcM85mxyY6C/nU="){
  592. weekdayHour = Number(weekdayHour)+Number(applyOTTime);
  593. }else if(otType == "zr+ur5D4RA+2bdVZ2VPqp46C/nU="){
  594. restdayHour = Number(restdayHour)+Number(applyOTTime);
  595. }else if(otType == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){
  596. holidayHour = Number(holidayHour)+Number(applyOTTime);
  597. }
  598. if(otCompens == "AERg0TIcSnaM40EKvJCdRKlrTmA="){
  599. compensatoryTotal = Number(compensatoryTotal)+Number(applyOTTime);
  600. }else if(otCompens == "zkbt5bMLQ3ehUivmKbtBOqlrTmA="){
  601. totalOvertimePay = Number(totalOvertimePay)+Number(applyOTTime);
  602. }
  603. }
  604. totalDuration = Number(weekdayHour)+Number(restdayHour)+Number(holidayHour);
  605. // $("#weekdayHour").val(weekdayHour);
  606. // $("#restdayHour").val(restdayHour);
  607. // $("#holidayHour").val(holidayHour);
  608. // $("#totalDuration").val(totalDuration);
  609. // $("#compensatoryTotal").val(compensatoryTotal);
  610. // $("#totalOvertimePay").val(totalOvertimePay);
  611. this.getField("weekdayHour").shrNumberField("setValue",weekdayHour);
  612. this.getField("restdayHour").shrNumberField("setValue",restdayHour);
  613. this.getField("holidayHour").shrNumberField("setValue",holidayHour);
  614. this.getField("totalDuration").shrNumberField("setValue",totalDuration);
  615. this.getField("compensatoryTotal").shrNumberField("setValue",compensatoryTotal);
  616. this.getField("totalOvertimePay").shrNumberField("setValue",totalOvertimePay);
  617. },
  618. checkOtDate:function(){
  619. var allRowData = $("#entries").jqGrid("getAllRowData");
  620. for(var i=0; i<allRowData.length; i++){
  621. var otDate = allRowData[i].otDate;
  622. otDate = new Date(otDate);
  623. const currentDate = new Date();
  624. const lastMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, currentDate.getDate());
  625. var lastYear = lastMonthDate.getFullYear();
  626. var lastMonth = lastMonthDate.getMonth();
  627. if(otDate.getMonth() != lastMonth || otDate.getFullYear() != lastYear){
  628. shr.showWarning({message: "Only overtime records with the previous month's overtime date can be submitted for the current month"});
  629. return false;
  630. }
  631. }
  632. return true;
  633. }
  634. });