atsOverTimeBillBatchEditForPer.js 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549
  1. var _rowMap ;
  2. var isOTControl=false;
  3. var isOtrolByDateType=false;
  4. var fixedNum;
  5. shr.defineClass("shr.ats.atsOverTimeBillBatchEditForPer", shr.framework.Edit, {
  6. OTContrlParams:{},
  7. filter:{},
  8. rowid : "" ,
  9. cellname : "" ,
  10. value : "" ,
  11. iRow : "" ,
  12. iCol : "" ,
  13. initalizeDOM:function(){
  14. shr.ats.atsOverTimeBillBatchEditForPer.superClass.initalizeDOM.call(this);
  15. var that = this ;
  16. that.remoteCall({
  17. type:"post",
  18. method:"getDecimalPlace",
  19. //handler:"com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
  20. success:function(res){
  21. fixedNum = res;
  22. }
  23. });
  24. that.setNavigateLine();
  25. // that.getOTContrlParams();
  26. var classfullNameService = "com.kingdee.shr.ats.web.formEditImport.AtsOverTimeBillFileEditFormService";
  27. var entries_cont=waf("#entries");
  28. entries_cont.jqGrid("option", {
  29. beforeSaveCell:function (rowid, cellname, value, iRow, iCol) {
  30. }
  31. ,afterSaveCell:function (rowid, cellname, value, iRow, iCol) {
  32. if(value["adminOrgUnit.id"]){
  33. $("#entries").jqGrid('setCell',rowid,"adminOrgUnit.id",value["adminOrgUnit.id"]);
  34. }
  35. _self.afterSaveCellTrigger(rowid, cellname, value, iRow, iCol);
  36. }
  37. ,afterEditCell:function (rowid, cellname, value, iRow, iCol)
  38. {
  39. that.getOTContrlParams(rowid);
  40. if(cellname=="otType" && that.OTContrlParams[rowid].isOtrolByDateType){
  41. $("#"+iRow+"_otType").shrPromptBox("disable");
  42. }
  43. //因为需求只是提了第一个时间时改变业务组织
  44. $("#1_otDate").change(function(){
  45. that.changeOverHrOrgUnit();
  46. });
  47. if(cellname=="otCompens"){
  48. if(that.filter[rowid]==undefined){
  49. // // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
  50. // that.changeOTCompens(rowid);
  51. }
  52. if(that.filter[rowid]){
  53. // $("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
  54. $("#"+$("#entries").jqGrid('getCell',rowid,"rn")+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
  55. }
  56. }
  57. if(cellname == "attAdminOrgUnit"){
  58. var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
  59. var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
  60. if(!(personId && attendanceDate)){
  61. shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
  62. return false;
  63. }else{
  64. //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
  65. $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
  66. personId: personId,
  67. attendanceDate: attendanceDate
  68. });
  69. }
  70. }
  71. _self.saveEditCellValue(rowid,cellname, value,iRow,iCol) ;
  72. }
  73. });
  74. that.setButtonVisible(); //初始化页面安装状态,如果是已经提交的或者审批通过的单据编辑按钮不显示
  75. //隐藏提交生效按钮
  76. if (that.getOperateState() == 'EDIT') {
  77. if(that.isFromWF()){ // 来自流程中心
  78. $("#submit").text(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_20);
  79. }
  80. }
  81. //审核编辑界面
  82. if(that.isFromWF() && that.getOperateState() == 'EDIT' && $("#billState").val() != 0)
  83. {
  84. $('#deleteRow_entries').unbind("click").attr("onclick","").css("cursor","default");
  85. $('#addRow_entries').unbind("click").attr("onclick","").css("cursor","default");
  86. $(".editGrid-toolbar").hide();
  87. $("#submit").show();
  88. var lastRowNum = $('#entries').getGridParam("reccount");
  89. for (var i = 1;i<= lastRowNum;i++) {
  90. var temp_id = $("#entries tr:eq("+ i +")").attr("id");
  91. $("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
  92. }
  93. }
  94. that.initCcPersonPrompt();
  95. that.isEdit();
  96. },
  97. clearCCPersonIdsPrompt :function() {
  98. if ($('#ccPersonIds').length == 0) {
  99. return;
  100. }
  101. atsCcPersonUtils.clearCCPersonIdsPrompt(this);
  102. },
  103. isEdit:function(){
  104. var that = this;
  105. if (that.getOperateState() == 'VIEW') {
  106. if(that.initData.needHideEdit){
  107. $("#edit").hide();
  108. $("#submit").hide();
  109. }
  110. }
  111. },
  112. initCcPersonPrompt :function() {
  113. if ($('#ccPersonIds').length == 0) {
  114. return;
  115. }
  116. atsCcPersonUtils.initCCPersonIdsPrompt(this);
  117. if (this.getOperateState() != 'VIEW') {
  118. var person = $('#proposer').shrPromptBox("getValue");
  119. if (!person) {
  120. // shr.showWarning({message:"Please select people."});
  121. } else {
  122. $('#ccPersonIds').shrPromptBox("setOtherParams", {
  123. // handler: "com.kingdee.shr.ats.web.handler.team.F7.TeamPersonForEmpOrgF7ListHandler",
  124. personId: person.id
  125. });
  126. }
  127. }
  128. }
  129. ,afterSaveCellTrigger: function(rowid, cellname, value, iRow, iCol)
  130. {
  131. var that = this ;
  132. var entries_cont=waf("#entries");
  133. that.removePreShowError(rowid);
  134. if(cellname=="otDate"){
  135. var val = value;
  136. if (val.length <= 10) {
  137. val = val + " 00:00:00";
  138. }
  139. val && $("#entries").jqGrid('setCell',rowid,"startTime",val);
  140. val && $("#entries").jqGrid('setCell',rowid,"endTime",val);
  141. that.changeOverTimeType(rowid);
  142. that.calRestTimeLen(rowid);
  143. }
  144. if(cellname=="otType"){
  145. that.changeOTCompens(rowid);
  146. }
  147. // 添加 开始时间 结束时间 休息时长(分钟) 响应时间
  148. if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
  149. if(cellname!="restTime"){
  150. that.calRestTimeLen(rowid);
  151. }
  152. that.calculateOTtimes(rowid);
  153. }
  154. if(cellname=="person"){
  155. that.calRestTimeLen(rowid);
  156. }
  157. if(cellname=="applyOTTime"){ // 加班小时数 发生改变就给予提示
  158. that.changOtTimeTipInfo(rowid);
  159. }
  160. if (cellname=="restStartTime" || cellname=="restStartTime2" || cellname=="restEndTime" ||cellname=="restEndTime2"){
  161. //计算休息时间,加班时间
  162. var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
  163. var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
  164. var restStartTime = $("#entries").jqGrid('getCell',rowid,"restStartTime") ;
  165. var restEndTime = $("#entries").jqGrid('getCell',rowid,"restEndTime") ;
  166. var restStartTime2 = $("#entries").jqGrid('getCell',rowid,"restStartTime2") ;
  167. var restEndTime2 = $("#entries").jqGrid('getCell',rowid,"restEndTime2") ;
  168. if (startTime=="" || endTime==""){
  169. return
  170. }
  171. var totalRestTime=0;
  172. var restStartTimeOfDate;
  173. var restEndTimeOfDate;
  174. if (restStartTime!="" && restEndTime!=""){
  175. restStartTimeOfDate = new Date(restStartTime);
  176. restEndTimeOfDate = new Date(restEndTime);
  177. var times =restEndTimeOfDate.getTime()-restStartTimeOfDate.getTime();
  178. if (times<0){
  179. times=0;
  180. }
  181. times=times/1000/60;
  182. totalRestTime+=times;
  183. }
  184. if (restStartTime2!="" && restEndTime2!=""){
  185. var restStartTime2OfDate = new Date(restStartTime2);
  186. var restEndTime2OfDate = new Date(restEndTime2);
  187. if ((restStartTime!="" && restEndTime2OfDate.getTime()>restStartTimeOfDate.getTime() && restStartTimeOfDate.getTime()>=restStartTime2OfDate.getTime())
  188. ||(restEndTime!="" && restEndTimeOfDate.getTime()<=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()<restEndTimeOfDate.getTime())
  189. ||(restStartTime!="" && restEndTime!="" && restEndTimeOfDate.getTime()>=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()>=restStartTimeOfDate.getTime())
  190. ){
  191. //时间有交叉
  192. $("#entries").jqGrid('setCell',rowid,"restEndTime2",restStartTime2) ;
  193. } else {
  194. var times =restEndTime2OfDate.getTime()-restStartTime2OfDate.getTime();
  195. if (times<0){
  196. times=0;
  197. }
  198. times=times/1000/60;
  199. totalRestTime+=times;
  200. }
  201. }
  202. var t1 = totalRestTime.toFixed(atsMlUtile.getSysDecimalPlace());
  203. $("#entries").jqGrid('setCell',rowid,"restTime",t1) ;
  204. var startTime =new Date(startTime+":00");
  205. var endTime =new Date(endTime+":00");
  206. var se = endTime.getTime()-startTime.getTime() -totalRestTime; // 毫秒
  207. var tfl = se/(3600*1000) ;
  208. $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl) ;
  209. that.calculateOTtimes(rowid);
  210. that.getOTContrlParams(rowid);
  211. }
  212. }
  213. //新增 jqgrid 行 方法, 复写
  214. ,addRowAction: function(event) {
  215. //增加自己的逻辑
  216. var that = this ;
  217. var num = $("#entries").jqGrid("getRowData").length ;
  218. if(num>=100){
  219. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_6});
  220. return;
  221. }
  222. var source = event.currentTarget,
  223. $editGrid = this.getEditGrid(source);
  224. var data = this.createNewEntryModel(); // 默认的补偿方式
  225. if (typeof data === 'undefined') {
  226. data = {};
  227. }
  228. var editGridCont = this._getEditGridCont(source);
  229. if (editGridCont.data('editType') == 'inline') {
  230. // 表格内编辑
  231. $editGrid.jqGrid('addRow', { data: data });
  232. } else {
  233. $editGrid.wafGrid('addForm');
  234. }
  235. var event = document.createEvent('HTMLEvents');
  236. event.initEvent("editComplete_"+$editGrid.attr("id"), true, true);
  237. event.eventType = 'message';
  238. document.dispatchEvent(event);
  239. //设置不可 编辑 姓名
  240. var lastRowNum = $('#entries').getGridParam("reccount");
  241. var temp_id = $("#entries tr:eq("+ lastRowNum +")").attr("id");
  242. $("#entries").editCell(lastRowNum, 11, true);
  243. $("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
  244. },
  245. changeOverHrOrgUnit : function(){
  246. var that = this;
  247. var overStartTime = atsMlUtile.getFieldOriginalValue("1_otDate");
  248. if ( overStartTime!=""&&overStartTime!=null ) {
  249. overStartTime = overStartTime.replace("\\-","/");
  250. var personId = $("#proposer_el").val();
  251. that.remoteCall({
  252. type:"post",
  253. async: false,
  254. method:"getHrOrgUnit",
  255. param:{personId:personId,beginTime:overStartTime},
  256. success:function(res){
  257. info = res;
  258. if(res.hrOrgUnitname && res.hrOrgUnitId){
  259. $("#hrOrgUnit").val(res.hrOrgUnitname);
  260. $("#hrOrgUnit_el").val(res.hrOrgUnitId);
  261. }
  262. }
  263. });
  264. }
  265. }
  266. // 获取填充的 rowId,导入的rowId
  267. ,getFillRowId:function(oldRowIds,newRowIds){
  268. var size = newRowIds.length;
  269. var sizeOld = oldRowIds.length;
  270. if(sizeOld == 0){
  271. return newRowIds;
  272. }
  273. var rowIds = [];
  274. for(var i=0;i<size;i++){
  275. if(i>=sizeOld){
  276. rowIds.push(newRowIds[i]);
  277. }
  278. }
  279. return rowIds ;
  280. }
  281. ,submitAction: function(event) {
  282. var _self = this,
  283. workArea = _self.getWorkarea(),
  284. $form = $('form', workArea);
  285. if(!_self.validate()){
  286. return ;
  287. }
  288. if ($form.valid() && _self.verify()) {
  289. shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_14, function() {
  290. _self.doSubmit(event, 'submit');
  291. });
  292. }
  293. }
  294. ,goNextPage: function(source) {
  295. // 普通提交,返回上一页面
  296. _self.reloadPage({
  297. uipk: "com.kingdee.eas.hr.ats.app.AtsOverTimeBillList"
  298. });
  299. }
  300. ,prepareSubmitEffect : function (event, action){
  301. var _self = this;
  302. var data = _self.assembleSaveData(action);
  303. var target;
  304. if (event && event.currentTarget) {
  305. target = event.currentTarget;
  306. }
  307. shr.doAction({
  308. target: target,
  309. url: _self.dynamicPage_url,
  310. type: 'post',
  311. data: data,
  312. success : function(response) {
  313. _self.back();
  314. }
  315. });
  316. }
  317. ,importAction: function(gridID,classfullName) {
  318. var _self = this;
  319. if(gridID != undefined)
  320. {
  321. grid = gridID ;
  322. }
  323. if(classfullName != undefined)
  324. {
  325. className = classfullName ;
  326. }
  327. var importDiv = $('#importDiv');
  328. if (importDiv.length > 0) {
  329. // importDiv.data('uipk', lastUipk);
  330. // importDiv.data('viewModel', viewModel);
  331. // importDiv.data('classify', classify);
  332. // importDiv.dialog('open');
  333. // return;
  334. }
  335. $('#importDiv').remove();
  336. selfParam = _self.setImportSelfParam();
  337. // 未生成dialog
  338. importDiv = $('<div id="importDiv"></div>').appendTo($('body'));
  339. importDiv.data('uipk', lastUipk);
  340. importDiv.data('viewModel', viewModel);
  341. importDiv.data('grid', grid);
  342. importDiv.data('className', className);
  343. importDiv.data('selfParam',selfParam);
  344. // importDiv.data('classify', classify);
  345. var oldRowIds = $("#entries").getDataIDs();
  346. if(_self.checkUpload()){
  347. importDiv.dialog({
  348. autoOpen: true,
  349. width: 708,
  350. height: 700,
  351. title: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_4,
  352. resizable: true,
  353. position: ['top','top'],
  354. modal: true,
  355. open: function(event, ui) {
  356. if ($.browser.msie) {
  357. var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport', 'view', {
  358. lastUipk: lastUipk,
  359. viewModel: viewModel ,
  360. className : className
  361. //classify:classify
  362. });
  363. var content = '<iframe id="importFrame" name="importFrame" width="700" height="600" frameborder="0" scrolling="no" allowtransparency="true" src="' + url + '"></iframe>';
  364. importDiv.append(content);
  365. } else {
  366. var url = shr.assembleURL('hr.ats.com.atttendanceCommonImport$page', 'view');
  367. shr.loadHTML({
  368. url: url,
  369. success: function(response) {
  370. importDiv.append(response);
  371. }
  372. });
  373. }
  374. document.documentElement.style.overflow='hidden';
  375. },
  376. close: function(event, ui) {
  377. document.documentElement.style.overflow='scroll';
  378. importDiv.empty();
  379. // 触发计算 请假次数 剩余额度 时长
  380. //点击序号列 让人员失去焦点
  381. $("#entries tr:eq(1) td:eq(0)").click();
  382. var newRowIds = $("#entries").getDataIDs();
  383. var rowIds = _self.getFillRowId(oldRowIds,newRowIds);
  384. $.each(rowIds,function(n,value) {
  385. _self.calRestTimeLen(value);
  386. _self.changOtTimeTipInfo(value);
  387. });
  388. //检查不超过100条记录
  389. //_self.checkRowIsOver();
  390. }
  391. });
  392. }
  393. $(".ui-dialog-titlebar-close").bind("click" , function(){
  394. importDiv.dialog("close");
  395. });
  396. }
  397. ,verify:function(){
  398. var _self = this ;
  399. var obj = $("#entries").jqGrid("getRowData");
  400. var errorString = "";
  401. var errorFlag = 0 ;
  402. //不支持跨天加班,请使加班结束日期与加班开始时间日期保持一致 202502 总部提供
  403. for(var i=0;i<obj.length;i++){
  404. if(obj[i].startTime.substring(0,10)!=obj[i].endTime.substring(0,10)){
  405. shr.showWarning({message: obj[i].person.name+"的加班日期有误,不支持跨天加班,结束日期必须与加班开始时间日期保持一致!"});
  406. return false;
  407. }
  408. }
  409. if(obj.length == 0){
  410. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_7});
  411. return false;
  412. }
  413. if(!_self.checkRowIsOver()){
  414. return false;
  415. }
  416. _rowMap = {} ;
  417. jQuery(obj).each(function(n){
  418. errorString = _self.checkEveryRow(n + 1 , this);
  419. if(errorString){
  420. _self.preShowError( n + 1 ,this.person.name + " " + errorString);
  421. errorFlag = 1 ;
  422. }
  423. });
  424. if(!_self.verifyCheck()){
  425. return false;
  426. }
  427. errorString = _self.validateOTEntry();
  428. if(errorString && errorString != ""){
  429. shr.showWarning({message: errorString});
  430. closeLoader();
  431. return false;
  432. }
  433. if(errorFlag == 0){
  434. //工作流审批界面,加班补提控制。
  435. var boo = true;
  436. boo = _self.validateIsFillOtVerify();
  437. return boo;
  438. }else{
  439. return false;
  440. }
  441. },
  442. validateOTEntry: function(rownum){
  443. var that = this;
  444. var errorString = "";
  445. var model = that.assembleModel();
  446. if(model.entries[0] && model.entries[0].person){
  447. delete model.entries[0].person["person.gender"];
  448. delete model.entries[0].person["personOtherInfo.age"];
  449. }
  450. // openLoader();
  451. that.remoteCall({
  452. method:"validateOTEntry",
  453. param:{model:model},
  454. async: false,
  455. success:function(res){
  456. errorString = res.errorMSg;
  457. }
  458. });
  459. return errorString;
  460. }
  461. ,openLoader: function (type, tip) {
  462. if(!type) type = 1;
  463. $("#loaderTip").text(tip ? tip : jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_12);
  464. $("#loader").css("display", "block");
  465. },
  466. getCurrentModel : function(){
  467. var model = shr.ats.AtsOverTimeBillBatchEdit.superClass.getCurrentModel.call(this);
  468. model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
  469. model.ccPerson = model.ccPersonIds;
  470. return model ;
  471. }
  472. ,checkEveryRow : function(rownum,value){
  473. var that = this ;
  474. var regEx = new RegExp("\\-","gi"); //i不区分大小写 g匹配所有
  475. var startTime = value.startTime ;
  476. var endTime = value.endTime ;
  477. //这样写IE才支持。
  478. var startTimeOfDate = NewLongDate(startTime + ":00");
  479. var endTimeOfDate = NewLongDate(endTime + ":00");
  480. var longTime = endTimeOfDate.getTime() - startTimeOfDate.getTime();
  481. var otType = value.otType.id;
  482. //处理加班日期 与 加班开始时间 和结束时间的日期保持一致
  483. var overDate = value.otDate ; //加班日期
  484. overDate = overDate.substring(0,10);
  485. var overTimeBegin = value.startTime ;
  486. overTimeBegin = overTimeBegin.substring(0,10); //2014-01-02 00:00
  487. var overTimeEnd = value.endTime ;
  488. overTimeEnd = overTimeEnd.substring(0,10);
  489. var overTimeDate = NewShortDate(overDate);
  490. var overTimeStartDate = NewShortDate(overTimeBegin);
  491. var overTimeEndDate = NewShortDate(overTimeEnd);
  492. if ( overTimeStartDate.getTime() <overTimeDate.getTime()-24*60*60*1000 ) {
  493. return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_2;
  494. }
  495. if ( overTimeEndDate.getTime()-24*60*60*1000 > overTimeDate.getTime() ) {
  496. return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_2;
  497. }
  498. if (longTime <= 0) {
  499. return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_9;
  500. }
  501. var applyOTTime = value.applyOTTime;
  502. if(applyOTTime <= 0){
  503. return jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_0001;
  504. }
  505. // 检查jqgrid 表格里的是否有重复数据
  506. var rowValue = new Array();
  507. rowValue[0] = value.person.id;
  508. rowValue[1] = value.startTime;
  509. rowValue[2] = value.endTime;
  510. _rowMap[rownum] = rowValue;
  511. for(var prop in _rowMap){
  512. if(_rowMap.hasOwnProperty(prop)){
  513. var beginTimeTempStr = _rowMap[prop][1];
  514. var endTimeTempStr = _rowMap[prop][2];
  515. var beginTimeTemp = NewLongDate(beginTimeTempStr);
  516. var endTimeTemp = NewLongDate(endTimeTempStr);
  517. if(prop!=rownum&&_rowMap[prop][0]==value.person.id&&!(beginTimeTemp.getTime()>=endTimeOfDate.getTime()||endTimeTemp.getTime()<=startTimeOfDate.getTime())){
  518. return shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_3, [prop]);
  519. }
  520. }
  521. }
  522. var msg =this.verifyRestTime(true,value);
  523. if (msg!=""){
  524. return msg;
  525. }
  526. var isExistFile = that.isExistAttendanceFile(value.person.id);
  527. if(isExistFile == false){
  528. return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_5;
  529. }
  530. //设置同步
  531. var info ;
  532. that.remoteCall({
  533. type:"post",
  534. method:"isWorkTime",
  535. async: false,
  536. param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
  537. success:function(res){
  538. info = res;
  539. }
  540. });
  541. if (info.isWorkTime){
  542. // shr.showWarning({message:"加班开始结束时间和上班时间有交叉。"});
  543. return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_8;
  544. }
  545. var applyOTTime = value.applyOTTime;
  546. //判断申请加班小时数是否达到加班起始值
  547. var validOtStartString;
  548. that.remoteCall({
  549. type:"post",
  550. method:"validOtStart",
  551. async: false,
  552. param:{personId: value.person.id,applyOTTime:applyOTTime},
  553. success:function(res){
  554. var validInfo = res.info;
  555. if(validInfo!=null && validInfo!=""){
  556. validOtStartString=validInfo;
  557. }
  558. }
  559. });
  560. if(validOtStartString!=null && validOtStartString!=""){
  561. return validOtStartString;
  562. }
  563. //是否在“固定加班”时间段或者“固定加班不计异常”时间段内
  564. var obj;
  565. that.remoteCall({
  566. type:"post",
  567. method:"isAtFixedOverTimeOrExcep",
  568. async: false,
  569. param:{personId: value.person.id,overDate:value.otDate,overTimeBegin:value.startTime+":00",overTimeEnd:value.endTime+":00"},
  570. success:function(res){
  571. obj = res;
  572. }
  573. });
  574. if (obj.isAtFixedOverTimeOrExcep){
  575. return jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_1;
  576. }
  577. var errorString = that.validateIsExistBill(value.person.id,startTime,endTime,$('#id').val());
  578. if(errorString){
  579. /*shr.showInfo({message: "加班开始时间必须小于加班结束时间。"});
  580. return false;*/
  581. return errorString;
  582. }
  583. if(value.otCompens.id =="AERg0TIcSnaM40EKvJCdRKlrTmA="){ // 只有等于调休的时候才校验
  584. var errorString = that.validateIsValidateLimit(value.person.id,value.otDate,value.applyOTTime,otType);
  585. if(errorString){
  586. return errorString;
  587. }
  588. }
  589. return "" ;
  590. }// 调休额度是否正确 ;
  591. ,validateIsValidateLimit : function(personId,otDate,currentValue,otType){
  592. var that = this;
  593. var info;
  594. var infoLeaveBillNumber;
  595. otDate =otDate.substring(0,10);
  596. var errorString = "";
  597. that.remoteCall({
  598. type:"post",
  599. async: false,
  600. method:"isOverMaxQuota",
  601. param:{personId:personId,otDate:otDate,currentValue:currentValue,otType:otType},
  602. success:function(res){
  603. if(!res.resFlag){
  604. errorString = res.resMsg ;
  605. }
  606. }
  607. });
  608. return errorString;
  609. }
  610. ,validateIsExistBill : function(personId , beginTime , endTime , billId ){
  611. var that = this;
  612. var info;
  613. var infoLeaveBillNumber;
  614. var errorString = "";
  615. that.remoteCall({
  616. type:"post",
  617. async: false,
  618. method:"validateIsExistBill",
  619. param:{personId:personId,beginTime:beginTime,endTime:endTime,billId:billId},
  620. success:function(res){
  621. info = res;
  622. }
  623. });
  624. if (errorString) {
  625. errorString = shr.formatMsg(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_23,
  626. [info.overTimeNum, info.personName, info.beginTime, info.endTime]);
  627. return errorString;
  628. }
  629. },
  630. // 获取表格序号列,修复平台表格序号列位置移动导致的提示列位置错误导致的显示异常bug
  631. getColNumIndex: function(){
  632. var _self = this;
  633. if(_self.colNumIndex){
  634. return _self.colNumIndex
  635. }
  636. $.each($("#entries").jqGrid("getAllColumn"),function(index,item){
  637. if(item.name=="rn"){
  638. _self.colNumIndex=index
  639. }
  640. })
  641. return _self.colNumIndex
  642. }
  643. //对校验结果进行页面个性化提示
  644. ,preShowError:function(iRow,errorString){
  645. var rnColNum=this.getColNumIndex();
  646. var that = this;
  647. if (errorString){
  648. $("#entries tr:eq("+iRow+") td:eq("+rnColNum+")").html("!").css("color","red").attr({"data-toggle":"tooltip","data-placement":"left","title":errorString});
  649. $("#entries tr[id='"+iRow+"']").css("color","red");
  650. /*
  651. $("#entries tr:eq("+iRow+") td:eq(2)").css("color","red");
  652. $("#entries tr:eq("+iRow+") td:eq(3)").css("color","red");
  653. $("#entries tr:eq("+iRow+") td:eq(4)").css("color","red");
  654. */
  655. }
  656. }
  657. //对校验结果进行页面个性化提示
  658. ,preShowWarn:function(iRow,errorString){
  659. var rnColNum=this.getColNumIndex();
  660. var that = this;
  661. $("#entries").find('tr').eq(iRow).find('td').eq("+rnColNum+").text("?").css("color","red").attr({"data-toggle":"tooltip","data-placement":"left","title":errorString});
  662. }
  663. //去除个性化展示,每次校验前去除
  664. ,removePreShowError:function(rowid){
  665. var rnColNum=this.getColNumIndex()
  666. var rows = $('#entries').getGridParam("reccount");
  667. $("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").attr('title','');
  668. $("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").html($("#entries tr[id='"+rowid+"']")[0].rowIndex);
  669. $("#entries tr[id='"+rowid+"'] td:eq("+rnColNum+")").css("color","rgb(153, 153, 153)")
  670. $("#entries tr[id='"+rowid+"']").css("color","rgb(153, 153, 153)");//如果设置成css("color","initial")会变成黑色,而原界面为灰色
  671. }
  672. ,checkF7Data : function(){
  673. var that = this;
  674. var otDate = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("otDate");
  675. var adminOrgUnit_el = $(window.frames["orgFillDiv"].document).find("#adminOrgUnit_el").val() ;
  676. var adminOrgUnit = $(window.frames["orgFillDiv"].document).find("#adminOrgUnit").val() ;
  677. var person_el = $(window.frames["orgFillDiv"].document).find("#person_el").val() ;
  678. var person = $(window.frames["orgFillDiv"].document).find("#person").val() ;
  679. var startTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("startTime");
  680. var otType_el =$(window.frames["orgFillDiv"].document).find("#otType_el").val() ;
  681. var otType = $(window.frames["orgFillDiv"].document).find("#otType").val() ;
  682. var endTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("endTime");
  683. var otCompens_el = $(window.frames["orgFillDiv"].document).find("#otCompens_el").val();
  684. var otCompens = $(window.frames["orgFillDiv"].document).find("#otCompens").val();
  685. var restTime = $(window.frames["orgFillDiv"].document).find("#restTime").val() ;
  686. var otReason_el =$(window.frames["orgFillDiv"].document).find("#otReason_el").val() ;
  687. var otReason = $(window.frames["orgFillDiv"].document).find("#otReason").val() ;
  688. var applyOTTime = window.frames["orgFillDiv"].atsMlUtile.getFieldOriginalValue("applyOTTime") ;
  689. var remark = $(window.frames["orgFillDiv"].document).find("#remark").val();
  690. var remain = $(window.frames["orgFillDiv"].document).find("#remain").text();
  691. var checkAmount = $(window.frames["orgFillDiv"].document).find("#checkAmount").text();
  692. /*
  693. var otDate = $('iframe')[0].contentWindow.$('#otDate').val();
  694. var adminOrgUnit_el = $('iframe')[0].contentWindow.$('#adminOrgUnit_el').val();
  695. var adminOrgUnit = $('iframe')[0].contentWindow.$('#adminOrgUnit').val();
  696. var person_el = $('iframe')[0].contentWindow.$('#person_el').val();
  697. var person = $('iframe')[0].contentWindow.$('#person').val();
  698. var startTime = $('iframe')[0].contentWindow.$('#startTime').val();
  699. var otType_el = $('iframe')[0].contentWindow.$('#otType_el').val();
  700. var otType = $('iframe')[0].contentWindow.$('#otType').val();
  701. var endTime = $('iframe')[0].contentWindow.$('#endTime').val();
  702. var otCompens_el = $('iframe')[0].contentWindow.$('#otCompens_el').val();
  703. var otCompens = $('iframe')[0].contentWindow.$('#otCompens').val();
  704. var restTime = $('iframe')[0].contentWindow.$('#restTime').val();
  705. var otReason_el = $('iframe')[0].contentWindow.$('#otReason_el').val();
  706. var otReason = $('iframe')[0].contentWindow.$('#otReason').val();
  707. var applyOTTime = $('iframe')[0].contentWindow.$('#applyOTTime').val();
  708. var remark = $('iframe')[0].contentWindow.$('#remark').val();
  709. var remain = $('iframe')[0].contentWindow.$('#remain').text();
  710. var checkAmount = $('iframe')[0].contentWindow.$('#checkAmount').text();
  711. */
  712. //校验
  713. if(parseInt(checkAmount) > parseInt(remain)){
  714. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_26});
  715. return false;
  716. }
  717. //校验
  718. if(!otDate){
  719. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_11});
  720. return false;
  721. }
  722. if((!adminOrgUnit_el||!adminOrgUnit)&&(!person_el||!person)){
  723. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_25});
  724. return false;
  725. }
  726. if(!startTime){
  727. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_13});
  728. return false;
  729. }
  730. if(!otType_el||!otType){
  731. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_10});
  732. return false;
  733. }
  734. if(!endTime){
  735. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_12});
  736. return false;
  737. }
  738. if(!otCompens_el||!otCompens){
  739. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_0});
  740. return false;
  741. }
  742. /*if(!restTime){
  743. shr.showWarning({message: "休息时长(分钟)不能为空!"});
  744. return false;
  745. }*/
  746. /*if(!otReason_el||!otReason){
  747. shr.showWarning({message: "加班原因不能为空!"});
  748. return false;
  749. }*/
  750. if(!applyOTTime){
  751. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_15});
  752. return false;
  753. }
  754. return true;
  755. }
  756. ,checkRowIsOver : function(){
  757. if( $("#entries").jqGrid("getRowData").length > 100){
  758. shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_6});
  759. return false;
  760. }else{
  761. return true;
  762. }
  763. }
  764. // 如 加班小时数发生变化 则给予提示
  765. ,changOtTimeTipInfo :function(rowid){ //
  766. var that = this ;
  767. var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
  768. var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
  769. var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
  770. var applyOTTime = $("#entries").jqGrid('getCell',rowid,"applyOTTime") ;
  771. if(startTime!="" && endTime!=""){
  772. var restVal = 0;
  773. if(restTime!="" && (/^[0-9]*$/.test(restTime))){
  774. restVal = restTime; // 分钟数
  775. }
  776. var startTime =new Date(startTime+":00");
  777. var endTime =new Date(endTime+":00");
  778. var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
  779. var tfl = se/(3600*1000) ;
  780. if(tfl!=applyOTTime){ // 不相等就给予提示
  781. that.preShowWarn( rowid , jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_19);
  782. }
  783. //$("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl); 计算的值
  784. }
  785. }
  786. // if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
  787. ,calRestTimeLen : function(rowid){
  788. var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
  789. var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
  790. if(startTime =="[object Object]"){
  791. $("#"+rowid).find('td').eq('5').text("");
  792. $("#"+rowid).find('td').eq('5').attr("title","");
  793. return ;
  794. }
  795. if(endTime =="[object Object]"){
  796. $("#"+rowid).find('td').eq('6').text("");
  797. $("#"+rowid).find('td').eq('6').attr("title","");
  798. return ;
  799. }
  800. if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
  801. return;
  802. }else{
  803. otDate = $("#entries").jqGrid('getCell',rowid,"otDate");
  804. }
  805. if(!$("#entries").jqGrid('getCell',rowid,"person")){
  806. return;
  807. }else{
  808. personId = $("#entries").jqGrid('getCell',rowid,"person").id;
  809. }
  810. this.remoteCall({
  811. type:"post",
  812. method:"getMyRestTime",
  813. async: false,
  814. param:{personId:personId,tDay:otDate,realStartTime:startTime,realEndTime:endTime},
  815. success:function(res){
  816. var resLen = res.restTime<0?0:res.restTime;
  817. $("#entries").jqGrid('setCell',rowid,"restTime",resLen);
  818. $("#entries").jqGrid('setCell',rowid,"restStartTime",res.restStartTime);
  819. $("#entries").jqGrid('setCell',rowid,"restEndTime",res.restEndTime);
  820. $("#entries").jqGrid('setCell',rowid,"restStartTime2",res.restStartTime2);
  821. $("#entries").jqGrid('setCell',rowid,"restEndTime2",res.restEndTime2);
  822. }
  823. });
  824. }
  825. ,addTimeToDate: function(date){
  826. if(date != null && date != '' && date.length == 10){
  827. date += " 00:00:00";
  828. }
  829. return date;
  830. }
  831. ,calculateOTtimes : function(rowid){
  832. var that = this ;
  833. var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
  834. var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
  835. var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
  836. if(startTime =="[object Object]"){
  837. $("#"+rowid).find('td').eq('5').text("");
  838. $("#"+rowid).find('td').eq('5').attr("title","");
  839. }
  840. if(endTime =="[object Object]"){
  841. $("#"+rowid).find('td').eq('6').text("");
  842. $("#"+rowid).find('td').eq('6').attr("title","");
  843. }
  844. startTime = that.addTimeToDate(startTime);
  845. endTime = that.addTimeToDate(endTime);
  846. if(startTime!="" && endTime!=""){
  847. var restVal = 0;
  848. if(restTime!="" && (/^[0-9]*$/.test(restTime))){
  849. restVal = restTime; // 分钟数
  850. }
  851. var startTime = NewDate(startTime+":00");
  852. var endTime = NewDate(endTime+":00");
  853. var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
  854. var tfl = (se/(3600*1000)).toFixed(fixedNum) ;
  855. $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl);
  856. }
  857. }
  858. ,changeOTCompens:function(rowid){
  859. var that=this;
  860. var otCompensId ;
  861. if(!$("#entries").jqGrid('getCell',rowid,"otType")){
  862. return;
  863. }else{
  864. otTypeId = $("#entries").jqGrid('getCell',rowid,"otType").id;
  865. }
  866. if(!$("#entries").jqGrid('getCell',rowid,"person")){
  867. return;
  868. }else{
  869. var personId = $("#entries").jqGrid('getCell',rowid,"person").id;
  870. }
  871. /*// zkbt5bMLQ3ehUivmKbtBOqlrTmA= 加班费
  872. var otCompensObejct = {id:"zkbt5bMLQ3ehUivmKbtBOqlrTmA=",name:"加班费"};
  873. //等于法定节假日 id sRWUOt7sRpOY0TCo6NMqGY6C/nU=
  874. */
  875. var otCompensIds = that.getOTCompensByOTType(personId,otTypeId);
  876. var url = shr.getContextPath()+'/dynamic.do';
  877. that.remoteCall({
  878. type:"post",
  879. method:"getDefaultOTCompens",
  880. url:url,
  881. param:{personId:personId,otTypeId:otTypeId},
  882. async: false,
  883. success:function(res){
  884. var info = res;
  885. if (info.defaultId == "" || info.defaultId ==undefined ){
  886. shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_24});
  887. }else {
  888. var defaultOTCompens = {id:info.defaultId,name:info.defaultName};
  889. $("#entries").jqGrid('setCell',rowid,"otCompens",defaultOTCompens);
  890. if(otCompensIds){
  891. var otCompensIdsStr = otCompensIds.replace(/(,)/g, "','")
  892. that.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
  893. }
  894. //$("#"+rowid+"_otCompens").shrPromptBox("setFilter","BaseInfo.id in ('"+otCompensIds+"')");
  895. }
  896. //
  897. }
  898. });
  899. }
  900. ,changeOverTimeType:function(rowid){
  901. var that=this;
  902. var otDate ;
  903. var personId ;
  904. if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
  905. return;
  906. }else{
  907. otDate = $("#entries").jqGrid('getCell',rowid,"otDate");
  908. }
  909. if(!$("#entries").jqGrid('getCell',rowid,"person")){
  910. return;
  911. }else{
  912. personId = $("#entries").jqGrid('getCell',rowid,"person").id;
  913. }
  914. that.getOverTimeType(rowid,otDate,personId);
  915. }
  916. ,getOverTimeType:function(rowid,otDate,personId){
  917. var _self = this;
  918. var url = shr.getContextPath() + "/dynamic.do?method=getOverTimeTypeAndOtCompens";
  919. url += '&otDate=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
  920. $.ajax({
  921. url: url,
  922. async:false,
  923. success: function(response){
  924. if(response.otTypeValue!=null && response.otTypeValue !=undefined && response.otTypeValue!=''){
  925. var responseObejct = {id:response.otTypeValue,name:response.otTypeText }
  926. if (_self.isOtTypeEffective(response.otTypeValue)){
  927. // $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
  928. $("#entries").jqGrid('setCell',rowid,"otType",responseObejct);
  929. //设置该加班类型的补偿方式过滤
  930. var otCompensIds = _self.getOTCompensByOTType(personId,response.otTypeValue);
  931. if(otCompensIds){
  932. var otCompensIdsStr = _self.getOTCompensByOTType(personId,response.otTypeValue).replace(/(,)/g, "','");
  933. _self.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
  934. }
  935. var compens = response.compensInfo ;
  936. var defaultJson = {id:compens.id , name:compens.name} ;
  937. $("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
  938. }
  939. else {
  940. $("#entries").jqGrid('setCell',rowid,"otType",null);
  941. }
  942. }
  943. }
  944. ,error: function(response) {
  945. }
  946. });
  947. }
  948. // 判断加班补偿方式是否有效(存在且生效)
  949. ,isOtTypeEffective : function (OtType) {
  950. var _self = this;
  951. var flag = true;
  952. _self.remoteCall({
  953. type:"post",
  954. method:"isOtTypeEffective",
  955. param:{
  956. OtType:OtType
  957. },
  958. async: false,
  959. success:function(res){
  960. var info = res;
  961. if (info.resFlag == false){
  962. flag = false;
  963. }else {
  964. flag = true;
  965. }
  966. }
  967. });
  968. return flag;
  969. }
  970. /**
  971. * 将mode生成加班原因state属性去掉,控件生成的不对,生成了一串html。保存时json会解析不通过。
  972. */
  973. ,assembleModel : function(){
  974. var assModel = shr.ats.atsOverTimeBillBatchEditForPer.superClass.assembleModel.call(this);
  975. var personDateStr = '';
  976. var length = assModel.entries.length ;
  977. for( var i = 0 ; i < length ; i++)
  978. {
  979. if(assModel.entries[i].otReason && assModel.entries[i].otReason.state){
  980. delete assModel.entries[i].otReason.state;
  981. }
  982. if(assModel.entries[i].otType && assModel.entries[i].otType.state){
  983. delete assModel.entries[i].otType.state;
  984. }
  985. if(assModel.entries[i].otCompens && assModel.entries[i].otCompens.state){
  986. delete assModel.entries[i].otCompens.state;
  987. }
  988. //组装参数
  989. var personId = assModel.entries[i].person.id;
  990. var date = assModel.entries[i].otDate;
  991. if(date && personId){
  992. if(i > 0){
  993. personDateStr +=",";
  994. }
  995. personDateStr += personId +"_"+date.substring(0,10);
  996. }
  997. }
  998. //审核编辑界面重新点击出差类型 josn 转换出错
  999. if(this.isFromWF())
  1000. {
  1001. var lastRowNum = $('#entries').getGridParam("reccount");
  1002. for(var i = 0; i < lastRowNum; i++ )
  1003. {
  1004. delete assModel.entries[i].otType.state
  1005. delete assModel.entries[i].otCompens.state
  1006. delete assModel.entries[i].otReason.state
  1007. }
  1008. }
  1009. if(personDateStr){
  1010. _self.remoteCall({
  1011. type:"post",
  1012. method:"getPersonAdminOrgUnit",
  1013. //handler:"com.kingdee.shr.ats.web.handler.AtsBillBaseEditHandler",
  1014. param:{ personDateStr:personDateStr},
  1015. async: false,
  1016. success:function(res){
  1017. var info = res;
  1018. var personAtsInfo = {};
  1019. for (var i = 0; i < length; i++) {
  1020. var personId = assModel.entries[i].person.id;
  1021. var date = assModel.entries[i].otDate;
  1022. if(date && personId){
  1023. var person_date = personId +"_"+date.substring(0,10);
  1024. personAtsInfo = res[person_date];
  1025. if(personAtsInfo && personAtsInfo.adminOrgUnit){
  1026. assModel.entries[i]["adminOrgUnit"]= personAtsInfo.adminOrgUnit;
  1027. assModel.entries[i]["position"]= personAtsInfo.position;
  1028. }
  1029. }
  1030. }
  1031. }
  1032. });
  1033. }
  1034. assModel.ccPerson = assModel.ccPersonIds;
  1035. return assModel;
  1036. }
  1037. /**
  1038. * 设置分录行的默认值。重写框架此方法
  1039. */
  1040. ,createNewEntryModel: function() {
  1041. var that = this ;
  1042. var otCompens = that.getDefaultOTCompens();
  1043. var defalutPerson = {id:$('#proposer_el').attr('value'),name:$('#proposer').attr('title')};
  1044. return {person:defalutPerson,otCompens:otCompens};
  1045. //
  1046. }
  1047. //设置默认的加班补偿方式
  1048. ,getDefaultOTCompens : function () {
  1049. var _self = this;
  1050. var defaultOTCompens = {};
  1051. //设置同步
  1052. _self.remoteCall({
  1053. type:"post",
  1054. method:"getDefaultOTCompens",
  1055. param:{
  1056. personId : $('#proposer_el').attr('value')
  1057. },
  1058. async: false,
  1059. success:function(res){
  1060. var info = res;
  1061. if (info.defaultId){
  1062. defaultOTCompens = {id:info.defaultId,name:info.defaultName};
  1063. }
  1064. }
  1065. });
  1066. return defaultOTCompens;
  1067. }
  1068. ,setButtonVisible:function(){
  1069. var billState = $("#billState").val();
  1070. //alert(billState);
  1071. if (billState) {
  1072. if (billState==3 ||
  1073. jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_17==billState ||
  1074. billState ==4||
  1075. jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_16==billState ||
  1076. billState ==2||
  1077. jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_18==billState ) {
  1078. $("#edit").hide();
  1079. $("#submit").hide();
  1080. } else if (1==billState ||
  1081. jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_21== billState ||
  1082. 2 == billState ||
  1083. jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_18==billState ) { //未审批或审批中
  1084. if(!this.isFromWF()){
  1085. $("#edit").hide();
  1086. $("#submit").hide();
  1087. }
  1088. }
  1089. }
  1090. //新增和编辑状态隐藏返回XX列表
  1091. if (this.getOperateState().toUpperCase() == 'ADDNEW' || this.getOperateState().toUpperCase() == 'EDIT' ) {
  1092. $("#returnToOverTimeBillList").hide();
  1093. }
  1094. //如果是工作流打回,界面上的"返回XX列表"不显示
  1095. if (this.isFromWF()) {
  1096. $("#returnToOverTimeBillList").hide();
  1097. $("#cancel").hide();
  1098. }
  1099. if (this.getOperateState().toUpperCase() == 'EDIT'){
  1100. var lastRowNum = $('#entries').getGridParam("reccount");
  1101. for (var i = 1;i<= lastRowNum;i++) {
  1102. var temp_id = $("#entries tr:eq("+ i +")").attr("id");
  1103. $("#entries").jqGrid('setCell',temp_id,'person','','not-editable-cell');
  1104. }
  1105. }
  1106. }
  1107. ,setImportSelfParam : function(){
  1108. var billId = $('#id').val();
  1109. return $("#entries").getGridParam("reccount")+"&"+$('#id').val();
  1110. },getOTContrlParams:function(rowid)
  1111. {
  1112. var personId;
  1113. if(!$("#entries").jqGrid('getCell',rowid,"person")){
  1114. return;
  1115. }else{
  1116. personId = $("#entries").jqGrid('getCell',rowid,"person").id;
  1117. }
  1118. var otDate;
  1119. if(!$("#entries").jqGrid('getCell',rowid,"otDate")){
  1120. return;
  1121. }else{
  1122. otDate = $("#entries").jqGrid('getCell',rowid,"otDate");
  1123. }
  1124. var that=this;
  1125. var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.bill.util.BillBizUtil&method=getOTContrlParam';
  1126. shr.ajax({
  1127. type:"post",
  1128. async:false,
  1129. url:url,
  1130. data:{personId:personId,otDate:otDate},
  1131. success:function(res){
  1132. if(res)
  1133. {
  1134. that.OTContrlParams[rowid] = res;
  1135. // isOTControl=res.isOTControl;
  1136. // isOtrolByDateType=res.isOtrolByDateType;
  1137. }
  1138. }
  1139. });
  1140. }
  1141. ,returnToOverTimeBillListAction:function(){
  1142. this.reloadPage({
  1143. uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
  1144. });
  1145. }
  1146. ,cancelAction:function(){
  1147. this.reloadPage({
  1148. uipk: 'com.kingdee.eas.hr.ats.app.AtsOverTimeBillList'
  1149. });
  1150. },
  1151. verifyRestTime: function( beforeSubmit,value){
  1152. var startTime0 = value.startTime;
  1153. var endTime0 = value.endTime;
  1154. if(startTime0 == "" || startTime0 == undefined){
  1155. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_2;
  1156. }
  1157. if(endTime0 == "" || endTime0 == undefined){
  1158. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_1;
  1159. }
  1160. var startTimeOfDate = new Date(startTime0);
  1161. var endTimeOfDate = new Date(endTime0);
  1162. var restStartTime = value.restStartTime;
  1163. var restEndTime = value.restEndTime;
  1164. var restStartTime2 = value.restStartTime2;
  1165. var restEndTime2 = value.restEndTime2;
  1166. var restStartTimeOfDate = new Date(restStartTime);
  1167. var restEndTimeOfDateOfDate = new Date(restEndTime);
  1168. if (restStartTime!=undefined && restStartTime!=""){
  1169. if (restStartTimeOfDate.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate.getTime()>endTimeOfDate.getTime()){
  1170. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_6;
  1171. }
  1172. }
  1173. if (restEndTime!=undefined && restEndTime!="") {
  1174. if (restEndTimeOfDateOfDate.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate.getTime() > endTimeOfDate.getTime()
  1175. ||restEndTimeOfDateOfDate.getTime() < restStartTimeOfDate.getTime()) {
  1176. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_3;
  1177. }
  1178. }
  1179. var restStartTimeOfDate2 = new Date(restStartTime2);
  1180. var restEndTimeOfDateOfDate2 = new Date(restEndTime2);
  1181. if (restStartTime2!=undefined && restStartTime2!=""){
  1182. if (restStartTimeOfDate2.getTime()<startTimeOfDate.getTime() ||restStartTimeOfDate2.getTime()>endTimeOfDate.getTime()){
  1183. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_8;
  1184. }
  1185. }
  1186. if (restEndTime2!=undefined && restEndTime2!="") {
  1187. if (restEndTimeOfDateOfDate2.getTime() < startTimeOfDate.getTime() || restEndTimeOfDateOfDate2.getTime() > endTimeOfDate.getTime()
  1188. ||restEndTimeOfDateOfDate2.getTime() < restStartTimeOfDate2.getTime()){
  1189. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_4;
  1190. }
  1191. }
  1192. if( (restStartTime!="" && restStartTime!=undefined && (restEndTime==""||restEndTime==undefined))
  1193. || (restEndTime!="" && restEndTime!=undefined && (restStartTime==""||restStartTime==undefined))
  1194. )
  1195. {
  1196. if (beforeSubmit){
  1197. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_5;
  1198. }
  1199. return "";
  1200. }
  1201. if( (restStartTime2!="" && restStartTime2!=undefined && (restEndTime2==""||restEndTime2==undefined))
  1202. || (restEndTime2!="" && restEndTime2!=undefined && (restStartTime2==""||restStartTime2==undefined))
  1203. )
  1204. {
  1205. if (beforeSubmit) {
  1206. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_7;
  1207. }
  1208. return "";
  1209. }
  1210. if (restStartTime != "" && restStartTime != undefined && restStartTime2 != "" && restStartTime2 != undefined) {
  1211. //两个加班休息时间都填了,那么判断不能交叉
  1212. if((restStartTimeOfDate.getTime()<restEndTimeOfDateOfDate2.getTime() && restStartTimeOfDate.getTime()>=restStartTimeOfDate2.getTime())
  1213. ||(restStartTimeOfDate2.getTime()<restEndTimeOfDateOfDate.getTime() && restStartTimeOfDate2.getTime()>=restStartTimeOfDate.getTime())
  1214. ){
  1215. return jsBizMultLan.atsManager_atsOverTimeBillEdit_26952836_i18n_0;
  1216. }
  1217. }
  1218. },
  1219. setNavigateLine: function(){
  1220. var fromFlag = localStorage.getItem("fromFlag");
  1221. var empolyeeBoardFlag = sessionStorage.getItem("empolyeeBoardFlag");
  1222. var parentUipk = "";
  1223. if(parent.window.shr==null){
  1224. parentUipk = shr.getCurrentViewPage().uipk;
  1225. }else{
  1226. parentUipk = parent.window.shr.getCurrentViewPage().uipk;
  1227. }
  1228. if(fromFlag == "employeeBoard"){//来自我的考勤的时候。将导航条删除掉。
  1229. $("#breadcrumb").parent().parent().remove();
  1230. localStorage.removeItem("fromFlag");
  1231. }
  1232. if(("empolyeeBoardFlag" == empolyeeBoardFlag && "com.kingdee.eas.hr.ats.app.WorkCalendar.empATSDeskTop" == parentUipk)){
  1233. $("#breadcrumb").remove();
  1234. window.parent.changeDialogTitle(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_22);
  1235. }
  1236. },
  1237. /**
  1238. * 是否存在考勤档案
  1239. */
  1240. isExistAttendanceFile: function(personId){
  1241. var isExistsFile = true;
  1242. _self.remoteCall({
  1243. type:"post",
  1244. method:"isExistsAttanceFile",
  1245. async: false,
  1246. param:{personId: personId},
  1247. success:function(res){
  1248. var info = res;
  1249. if (!info.isExistsFile){
  1250. isExistsFile = false;
  1251. }
  1252. }
  1253. });
  1254. if(!isExistsFile){
  1255. return false;
  1256. }
  1257. }
  1258. ,beforeSubmit :function(){
  1259. var _self = this,
  1260. workArea = _self.getWorkarea(),
  1261. $form = $('form', workArea);
  1262. _self.beforeWFValidStoreCellValue();
  1263. if (($form.valid() && _self.verify())) {
  1264. return true ;
  1265. }
  1266. // return false 也能保存,固让js报错,后续让eas修改 return false 逻辑
  1267. var len = workArea.length() ;
  1268. return false ;
  1269. }
  1270. ,getCurrentModel : function(){
  1271. var that = this ;
  1272. var model = shr.ats.atsOverTimeBillBatchEditForPer.superClass.getCurrentModel.call(this);
  1273. var len = model.entries.length ;
  1274. for(var i = 0; i < len; i++)
  1275. {
  1276. model.entries[i].realStartTime = model.entries[i].startTime ;
  1277. model.entries[i].realEndTime = model.entries[i].endTime ;
  1278. model.entries[i].realOttime = model.entries[i].applyOTtime ;
  1279. delete model.entries[i].otType.state ;
  1280. delete model.entries[i].otCompens.state ;
  1281. delete model.entries[i].otReason.state ;
  1282. }
  1283. model.ccPersonIds = model.ccPersonIds && model.ccPersonIds.id || "";
  1284. model.ccPerson = model.ccPersonIds;
  1285. return model ;
  1286. }
  1287. ,saveEditCellValue :function(rowid,cellname, value,iRow,iCol) {
  1288. var _self = this;
  1289. // 工作流界面且是编辑状态且不是未提交界面
  1290. if(_self.isFromWF() && _self.getOperateState() == 'EDIT' && $("#billState").val() != 0)
  1291. {
  1292. this.rowid = rowid ;
  1293. this.cellname = cellname ;
  1294. this.value = value ;
  1295. this.iRow = iRow ;
  1296. this.iCol = iCol ;
  1297. }
  1298. }
  1299. /**
  1300. * 工作流和其他页面统一校验入口,最好后续把校验都放在一起,方便维护.
  1301. * @return {}
  1302. */
  1303. ,verifyCheck:function(){
  1304. var that = this;
  1305. var boo = true;
  1306. if(that.isFromWF()) //暂时只处理流程提交,后续可放开把所有检验统一入口
  1307. {
  1308. var model = that.getCurrentModel();
  1309. that.remoteCall({
  1310. method:"verifyCheck",
  1311. param:{model:model},
  1312. async: false,
  1313. success:function(res){
  1314. info = res;
  1315. if(res.errorString){
  1316. shr.showError({message:res.errorString});
  1317. boo = false;
  1318. }
  1319. }
  1320. });
  1321. }
  1322. return boo;
  1323. }
  1324. ,beforeWFValidStoreCellValue :function() {
  1325. var _self = this;
  1326. if(this.rowid && this.cellname && this.iRow && this.iCol)
  1327. {
  1328. $("#entries").jqGrid("saveCell",this.rowid,this.iCol);
  1329. //_self.afterSaveCellTrigger(this.rowid, this.cellname, this.value, this.iRow , this.iCol) ;
  1330. }
  1331. }
  1332. ,validateIsFillOtVerify:function(){
  1333. var that = this;
  1334. var boo = true;
  1335. if(that.isFromWF())
  1336. {
  1337. var model = that.getCurrentModel();
  1338. that.remoteCall({
  1339. method:"validateIsFillOt",
  1340. param:{model:model},
  1341. async: false,
  1342. success:function(res){
  1343. info = res;
  1344. if(res.errorString){
  1345. shr.showError({message:res.errorString});
  1346. boo = false;
  1347. }
  1348. }
  1349. });
  1350. }
  1351. return boo;
  1352. }
  1353. //获取当前加班类型的加班补偿方式
  1354. ,getOTCompensByOTType : function ( personId, otTypeId) {
  1355. var _self = this;
  1356. var url = shr.getContextPath()+'/dynamic.do?handler=com.kingdee.shr.ats.web.handler.AtsOverTimeBillEditHandler';
  1357. var otCompens="";
  1358. _self.remoteCall({
  1359. type:"post",
  1360. method:"getOTCompensByOTTypes",
  1361. url:url,
  1362. param:{personId:personId,otTypeId:otTypeId},
  1363. async: false,
  1364. success:function(res){
  1365. otCompens = res.otCompens;
  1366. }
  1367. });
  1368. return otCompens;
  1369. }
  1370. });
  1371. //初始化时间,解决date在IE9+环境下的兼容性问题,年月日分隔符为-,时分秒分隔符是:,
  1372. function NewDate(str) {
  1373. str = str.split(" ");
  1374. var day = str[0].split("-");
  1375. var hours = str[1].split(":");
  1376. var date = new Date();
  1377. date.setUTCFullYear(day[0], day[1] - 1, day[2]);
  1378. date.setUTCHours(hours[0], hours[1], hours[2], hours[3]);
  1379. return date;
  1380. }
  1381. /**
  1382. * 创建日期时间
  1383. */
  1384. function NewLongDate(str) {
  1385. str = str.split(" ");
  1386. var day = str[0].split("-");
  1387. var hours = str[1].split(":");
  1388. var date = new Date(day[0],day[1] - 1,day[2],hours[0],hours[1],hours[2]);
  1389. return date;
  1390. }
  1391. /**
  1392. * 创建日期
  1393. * 支持IE的创建方式
  1394. */
  1395. function NewShortDate(str) {
  1396. str = str.split(" ");
  1397. var day = str[0].split("-");
  1398. var date = new Date(day[0], day[1] - 1, day[2]);
  1399. return date;
  1400. }