batchSubmitShemeBillMySubmissionEditEx.js 41 KB

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