· 6 years ago · Mar 11, 2019, 02:14 AM
1document.addEventListener('DOMContentLoaded', function(){
2 CreateBulanControl();
3 copyRight();
4 GetUserState();
5 dynamicallyLoadScript('js/moment.js');
6 dynamicallyLoadScript('js/moment-with-locales.js');
7 var config = {
8 apiKey: "AIzaSyDJz7wA31Z4eFB6jO_-ClwX7CXPB80SBhw",
9 authDomain: "ekinerja-2942e.firebaseapp.com",
10 databaseURL: "https://ekinerja-2942e.firebaseio.com",
11 projectId: "ekinerja-2942e",
12 storageBucket: "ekinerja-2942e.appspot.com",
13 messagingSenderId: "574875128322"
14 };
15
16 firebase.initializeApp(config);
17
18 setTimeout(function(){
19 _moment = moment();
20 lastTimeValidate = _moment.format('Y-MM')+"-20";
21 timeValidate = _moment.isBefore(lastTimeValidate) ? _moment.add(-1, 'months') : _moment;
22 window.xtahun = timeValidate.format('Y');
23 window.xbulan = timeValidate.format('MM');
24 //console.log(window.xtahun+" = "+window.xbulan)
25 }, 1000);
26
27 window.validateRule = {};
28 window.jobRejectedState = {};
29 window.jobValidateAction = {};
30 window.dbConnection = openDatabase('ekinerja', '1.0', 'E-kinerja browser database', 2 * 1024 * 1024);
31 window.dbConnection.transaction(function(trx){
32 var query = "CREATE TABLE IF NOT EXISTS `rejected_jobs` (id INTEGER NOT NULL PRIMARY KEY, "+
33 "nip TEXT NOT NULL, tanggal TEXT NOT NULL, hari TEXT NOT NULL, jam TEXT NOT NULL, "+
34 "durasi INTEGER NOT NULL, analisis_job TEXT NOT NULL, nama_job TEXT NOT NULL, "+
35 "hasil_job TEXT NOT NULL)";
36 trx.executeSql(query);
37 });
38
39 firebase.auth().onAuthStateChanged(function(user) {
40 if (user) {
41 console.log("user is login");
42 console.log(user)
43 CreateSkpdControl(user.uid);
44 firebase.database().ref().child('filter_text').once('value').then(function(snap){
45 var texts = [];
46 $.each(snap.val().danger, function(i, v){
47 texts.push(i);
48 });
49 window.validateRule['danger'] = texts;
50
51 texts = [];
52 $.each(snap.val().warning, function(i, v){
53 texts.push(i);
54 });
55 window.validateRule['warning'] = texts;
56
57 //console.log(window.validateRule);
58 });
59 _now = new Date();
60 _jam = _now.getHours();
61 _jam = _jam < 10 ? "0"+_jam : _jam;
62 _menit = _now.getMinutes();
63 _menit = _menit < 10 ? "0"+_menit : _menit;
64 _tahun = _now.getFullYear();
65 _bulan = _now.getMonth() + 1;
66 _bulan = _bulan < 10 ? "0"+_bulan : _bulan;;
67 _tanggal = _now.getDate();
68 _tanggal = _tanggal < 10 ? "0"+_tanggal : _tanggal;
69 //console.log(_tahun+"-"+_bulan+"-"+_tanggal+" "+_jam+":"+_menit);
70 firebase.database().ref('setting/' + user.uid + '/lastlogin').set({
71 jam: _jam+":"+_menit,
72 tanggal: _tahun+"-"+_bulan+"-"+_tanggal
73 });
74 addCustomMenu(user.uid);
75 } else {
76 console.log("user isn't login");
77 chrome.tabs.getCurrent(function(tab) {
78 chrome.tabs.remove(tab.id, function() { });
79 });
80 }
81 });
82
83 $(".select2").select2();
84
85 /* Overwrite Old Control */
86 var oldControl = $("#joblist .pull-right");
87 oldControl.empty();
88 oldControl.html("<a href='javascript:void(0)' class='btn btn-info' id='btnJobMapper'>Petakan jam kerja</a>");
89 //oldControl.append('<button type="button" class="btn btn-success accept_all"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button>');
90 $(".panel-action").find("button.accept_all").removeAttr('disabled');
91 $("#joblist").css('padding-top', '10px')
92 /* End Overwrite Old Control */
93
94 $("#skpdWrapper").removeClass('col-xs-9').addClass('col-xs-7');
95 $("#check_reject_validate").parent().after('<li><a href="#" id="check_getaway_validate">Pilih yang lolos</a></li>');
96 $(".panel-action div:nth-child(2)").find('ul').append('<li><a href="javascript:void(0)" class="accept_all_with_subtract_duration">Setujui dengan pengurangan durasi</a></li>');
97 $(".panel-action div:nth-child(3)").find('ul').append('<li><a href="javascript:void(0)" class="reject_all_with_subtract_duration">Tolak dengan pengurangan durasi</a></li>');
98 $("#formModalAcceptWithDuration").find(".modal-footer").append('<input type="hidden" name="duration_state" />');
99 $("#btnValidate").parent().css('margin-right', '15px');
100 $("#skpdWrapper").after("<div class='col-xs-2'><select class='form-control form-action select2' id='joblimit'></select></div>");
101 for ( i = 0; i<15; i++ ){ v = 1000 * (i+1); $("#joblimit").append($('<option>').text("< "+v).attr('value', v)); }
102 $("#btnValidate").parent().after("<select class='form-control select2' id='selectShowData' style='width:180px; display:inline;'><option value='all'>Tampilkan Semua</option><option value='marked'>Tampilkan yg ditandai sistem</option><option value='not-marked'>Tampilkan yg tidak ditandai sistem</option><optgroup label='Penampilan Spesifik'><option value='rejected'>Yg ditolak sistem</option><option value='warned'>Yg waspadai sistem</option><option value='accepted'>Yg disetujui sistem</option></optgroup></select>");
103 validateDropdown = $("#execute_system_choise").parent().parent();
104 $(validateDropdown).find('li:not([class="devider"])').addClass('disabled').find('a').removeAttr('id');
105 $(validateDropdown).append('<li role="separator" class="divider"></li><li><a href="#" id="check_maraton_time_for_trim">Tandai jam maraton</a></li><li><a href="#" id="remove_maraton_color">Hapus warna jam maraton</a></li>')
106
107 $(".select2").select2();
108
109 $("#btnSignOut").click(function(){
110 if( confirm('Logout??') ){
111 SignOut();
112 }
113 });
114
115 $(document).on("change", ".form-action", function(){
116 LoadData();
117 });
118
119 $(document).on("click", "#btnShowData", function(){
120 LoadData();
121 });
122
123 $(document).on("change", "#selectShowData", function(){
124 var rows = $("#tableKinerja > tbody tr[data-rowstate='body'], #tableKinerja > tbody tr[data-rowstate='validate-comment']");
125 rows.hide();
126
127 var _state = ($(this).val());
128 if( _state == 'all' ){
129 rows.show();
130 }else if( _state == 'marked' ){
131 rows.filter('.danger, .warning, .success').show();
132 }else if( _state == 'not-marked' ){
133 rows.not('.danger, .warning, .success').show();
134 }else if( _state == 'rejected' ){
135 rows.filter('.danger').show();
136 }else if( _state == 'warned' ){
137 rows.filter('.warning').show();
138 }else if( _state == 'accepted' ){
139 rows.filter('.success').show();
140 }
141 });
142
143 $(document).on('click', '#select_all', function(){
144 if(this.checked){
145 $('.checkbox').each(function(){
146 _display = $(this).parent().parent().css('display');
147 //console.log(_display)
148 if ( _display != 'none'){
149 this.checked = true;
150 }
151 });
152 }else{
153 $('.checkbox').each(function(){
154 this.checked = false;
155 });
156 }
157 $("#checkboxCounter").val($('.checkbox:checked').length);
158 });
159
160 $(document).on("click", ".row_header_checkbox", function(){
161 var _nip = ($(this).parent().parent().data('nip'));
162
163 var checkboxs = $("#tableKinerja > tbody tr[data-job='"+_nip+"']").find("input[type='checkbox'].checkbox");
164 if(this.checked){
165 $("#tableKinerja > tbody tr[data-rowstate='header'][data-nip='"+_nip+"'], #tableKinerja > tbody tr[data-rowstate='footer'][data-nip='"+_nip+"']")
166 .find("input[type='checkbox']").prop('checked', true);
167 $.each(checkboxs, function(){
168 _display = $(this).parent().parent().css('display');
169 //console.log(_display)
170 if ( _display != 'none'){
171 this.checked = true;
172 }
173 });
174 }else{
175 $("#tableKinerja > tbody tr[data-rowstate='header'][data-nip='"+_nip+"'], #tableKinerja > tbody tr[data-rowstate='footer'][data-nip='"+_nip+"']")
176 .find("input[type='checkbox']").prop('checked', false);
177
178 $.each(checkboxs, function(){
179 this.checked = false;
180 });
181 }
182
183 $("#checkboxCounter").val($('.checkbox:checked').length);
184 });
185
186 $(document).on('click', '.checkbox', function(){
187 $("#checkboxCounter").val($('.checkbox:checked').length);
188 if($('.checkbox:checked').length == $('.checkbox').length){
189 $('#select_all').prop('checked', true);
190 }else{
191 $('#select_all').prop('checked', false);
192 }
193 });
194
195 $(document).on('click', '.accept_all', function(){
196 //console.log("Accept all clicked!");
197 var idnya = GetSplitIdnya();
198 //console.log($.isEmptyObject(idnya));
199
200 if( !$.isEmptyObject(idnya) ){
201 if( confirm("Setujui semua pekerjaan yang dipilih ?") ){
202 //console.log(idnya);
203 $.each(idnya, function(i, v){
204 //console.log(v);
205 setTimeout(function(){
206 $.each(v, function(i2, v2){
207 AcceptJobs(v2);
208 });
209 }, 1000);
210 });
211 }
212 }else{
213 alertMessage('info', "Tidak ada pekerjaan yg dipilih.");
214 }
215 });
216
217 $(document).on('click', '.accept_all_with_duration', function(){
218 var idnya = GetIdnya();
219 if( idnya.length ){
220 $("#formModalAcceptWithDuration").find("input[name='jumlah_pekerjaan']").val(idnya.length+" pekerjaan");
221 $("#formModalAcceptWithDuration").find("input[name='duration_state']").val("accept_with_duration");
222 $("#formModalAcceptWithDuration").find("h4").text("Setujui Dengan Durasi");
223 $("#formModalAcceptWithDuration").find(".modal-body").find(".form-group").eq(1).find("label").text("Durasi");
224 $("#formModalAcceptWithDuration").modal('show');
225 }else{
226 alertMessage('info', "Tidak ada pekerjaan yg dipilih.");
227 }
228 });
229
230 $(document).on('click', '.accept_all_with_subtract_duration', function(){
231 var idnya = GetIdnya();
232 if( idnya.length ){
233 $("#formModalAcceptWithDuration").find("input[name='jumlah_pekerjaan']").val(idnya.length+" pekerjaan");
234 $("#formModalAcceptWithDuration").find("input[name='duration_state']").val("accept_with_subtract_duration");
235 $("#formModalAcceptWithDuration").find("h4").text("Setujui Dengan Pengurangan Durasi");
236 $("#formModalAcceptWithDuration").find(".modal-body").find(".form-group").eq(1).find("label").text("Kurangi Durasi");
237 $("#formModalAcceptWithDuration").modal('show');
238 }else{
239 alertMessage('info', "Tidak ada pekerjaan yg dipilih.");
240 }
241 });
242
243 $(document).on('click', '.reject_all', function(){
244 //console.log("Accept all clicked!");
245 var idnya = GetSplitIdnya();
246 var objIdnya = GetObjectIdnya();
247 //console.log($.isEmptyObject(idnya));
248
249 if( !$.isEmptyObject(idnya) ){
250 if( confirm("Tolak semua pekerjaan yang dipilih ?") ){
251 $.each(idnya, function(i, v){
252 //console.log(v)
253 setTimeout(function(){
254 $.each(v, function(i2, v2){
255 RejectJobs(v2, objIdnya);
256 });
257 }, 1000);
258 });
259 }
260 }else{
261 alertMessage('info', "Tidak ada pekerjaan yg dipilih.");
262 }
263 });
264
265 $(document).on('click', '.reject_all_with_comment', function(){
266 var idnya = GetIdnya();
267 if( idnya.length ){
268 $("#formModalTolak").find("input[name='jumlah_pekerjaan']").val(idnya.length+" pekerjaan");
269 $("#formModalTolak").modal('show');
270 }else{
271 alertMessage('info', "Tidak ada pekerjaan yg dipilih.");
272 }
273 });
274
275 $(document).on('click', '.reject_all_with_subtract_duration', function(){
276 //console.log("Accept all clicked!");
277 var idnya = GetIdnya();
278 var objIdnya = GetObjectIdnya();
279 //console.log($.isEmptyObject(idnya));
280
281 if( !$.isEmptyObject(idnya) ){
282 if( confirm("Tolak semua pekerjaan yang dipilih ?") ){
283 // get rejected state
284 var rejected = [];
285 var rejectedWithSubtractDuration = [];
286 //console.log(idnya);
287 $.each(idnya, function(i, v){
288 state = window.jobRejectedState[v];
289 //console.log(state);
290 if( typeof state !== 'undefined' && state.action > 1 ){
291 if( state.diff > 0 ){
292 rejectedWithSubtractDuration.push({
293 idjob: v,
294 time: state.diff,
295 });
296 }else{
297 rejected.push(v);
298 }
299 }else{
300 rejected.push(v);
301 }
302 });
303
304 //console.log(rejected);
305 idnya = GetSplitIdnya(rejected);
306 $.each(idnya, function(i, v){
307 //console.log(v)
308 setTimeout(function(){
309 $.each(v, function(i2, v2){
310 RejectJobs(v2, objIdnya);
311 });
312 }, 1000);
313 });
314
315 //console.log(rejectedWithSubtractDuration);
316 $.each(rejectedWithSubtractDuration, function(key, val){
317 //console.log(val);
318 $.ajax({
319 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/tanggapan_pekerjaan/6/"+val.idjob,
320 method: "POST",
321 data: { durasi: val.time },
322 async: false,
323 success: function(res){
324 $("#pekerjaan_"+val.idjob).remove();
325 }
326 });
327 });
328 alertMessage('success', 'Pekerjaan ditolak dengan pengurangan durasi berhasil.');
329 }
330 }else{
331 alertMessage('info', "Tidak ada pekerjaan yg dipilih.");
332 }
333 });
334
335 $(document).on('click', '.correction_all', function(){
336 var idnya = GetIdnya();
337 if( idnya.length ){
338 $("#formModalKoreksi").find("input[name='jumlah_pekerjaan']").val(idnya.length+" pekerjaan");
339 $("#formModalKoreksi").modal('show');
340 }else{
341 alertMessage('info', "Tidak ada pekerjaan yg dipilih.");
342 }
343 });
344
345 $(document).on('click', '#btnSaveKoreksi', function(){
346 var txt = $("#komentar_koreksi");
347 if( txt.val() != "" && txt.val() != " " ){
348 if( confirm('Simpan komentar?') ){
349 CommentJobs();
350 }
351 }else{
352 alertMessage('info', "Komentar tidak boleh kosong.");
353 }
354 });
355
356 $(document).on('click', '#btnSaveTolak', function(){
357 var txt = $("#komentar_tolak");
358 if( txt.val() != "" && txt.val() != " " ){
359 if( confirm('Tolak & simpan komentar?') ){
360 RejectJobsWithComment();
361 }
362 }else{
363 alertMessage('info', "Komentar tidak boleh kosong.");
364 }
365 });
366
367 $(document).on('click', '#btnSaveAcceptWithDuration', function(){
368 var txt = $("#durasi");
369 if( txt.val() != "" && txt.val() != " " ){
370 if( confirm('Simpan pekerjaan?') ){
371 if( $("#formModalAcceptWithDuration").find("input[name='duration_state']").val() == "accept_with_duration" ){
372 AcceptJobsWithDuration();
373 }else{
374 AcceptJobsWithSubtractDuration();
375 }
376 }
377 }else{
378 alertMessage('info', "Durasi tidak boleh kosong.");
379 }
380 });
381
382 $(document).on('click', "#btnValidate", function(){
383 Validate();
384 });
385
386 $(document).on('click', "#check_accept_validate", function(){
387 var jobs = $("#tableKinerja > tbody > tr.success");
388 if( jobs.length ){
389 if( confirm('Pilih semua yang disetujui sistem?') ){
390 jobs.each(function(){
391 $(this).find("input[type='checkbox']").prop('checked', true);
392 });
393
394 alertMessage('info', jobs.length+' sudah dipilih');
395 }
396 }else{
397 alertMessage('info', 'Tidak ada pekerjaan yang disetujui sistem');
398 }
399 });
400
401 $(document).on('click', "#check_warning_validate", function(){
402 var jobs = $("#tableKinerja > tbody > tr.warning");
403 if( jobs.length ){
404 if( confirm('Pilih semua yang diwaspadai sistem?') ){
405 jobs.each(function(){
406 $(this).find("input[type='checkbox']").prop('checked', true);
407 });
408
409 alertMessage('info', jobs.length+' sudah dipilih');
410 }
411 }else{
412 alertMessage('info', 'Tidak ada pekerjaan yang diwaspadai sistem');
413 }
414 });
415
416 $(document).on('click', "#check_reject_validate", function(){
417 var jobs = $("#tableKinerja > tbody > tr.danger");
418 if( jobs.length ){
419 if( confirm('Pilih semua yang ditolak sistem?') ){
420 jobs.each(function(){
421 $(this).find("input[type='checkbox']").prop('checked', true);
422 });
423
424 alertMessage('info', jobs.length+' sudah dipilih');
425 }
426 }else{
427 alertMessage('info', 'Tidak ada pekerjaan yang ditolak sistem');
428 }
429 });
430
431 $(document).on('click', "#check_getaway_validate", function(){
432 var jobs = $("#tableKinerja > tbody > tr:not([class])");
433 if( jobs.length ){
434 if( confirm('Pilih semua yang lolos validasi sistem?') ){
435 jobs.each(function(){
436 $(this).find("input[type='checkbox']").prop('checked', true);
437 });
438
439 alertMessage('info', jobs.length+' sudah dipilih');
440 }
441 }else{
442 alertMessage('info', 'Tidak ada pekerjaan yang lolos validasi sistem');
443 }
444 });
445
446 $(document).on('click', "#execute_system_choise", function(){
447
448 });
449
450 $(document).on('click', '#btnJobMapper', function(){
451 var jumData = ($("#tableKinerja > tbody tr[data-job]").length);
452 if( jumData > 0 ){
453 if( confirm('Petakan jam kerja?') ){
454 $("#tableKinerja > tbody > tr[data-rowstate='timemapping']").remove();
455 $("#tableTimeMapping > tbody").empty();
456
457 var tableRows = $("#tableKinerja > tbody > tr");
458 var dataJobs = {};
459 tableRows.each(function(i, v) {
460 var row = $(this).get(0);
461 if (row.hasAttribute('id')) {
462 firstColumn = $(row).find('td').eq(1).html().split("<br>");
463 hari = firstColumn[0].trim();
464 tanggal = firstColumn[1].trim();
465 jam = firstColumn[2].trim();
466 hariTanggal = hari+"<br />"+tanggal;
467
468 splitJam = jam.split("-");
469 nip = $(row).data('job');
470 _id = $(row).attr('id');
471 if( typeof dataJobs[nip] !== 'undefined' ){
472 if( typeof dataJobs[nip][tanggal] !== 'undefined' ){
473 dataJobs[nip][tanggal].push({
474 id: _id,
475 tanggal: tanggal,
476 hari: hari,
477 time: {
478 start: splitJam[0].trim(),
479 end: splitJam[1].trim(),
480 },
481 hariTanggal: hariTanggal
482 });
483 }else{
484 dataJobs[nip][tanggal] = [{
485 id: _id,
486 tanggal: tanggal,
487 hari: hari,
488 time: {
489 start: splitJam[0].trim(),
490 end: splitJam[1].trim(),
491 },
492 hariTanggal: hariTanggal
493 }];
494 }
495 }else{
496 dataJobs[nip] = {};
497 dataJobs[nip][tanggal] = [{
498 id: _id,
499 tanggal: tanggal,
500 hari: hari,
501 time: {
502 start: splitJam[0].trim(),
503 end: splitJam[1].trim(),
504 },
505 hariTanggal: hariTanggal
506 }];
507 }
508 }
509
510 if( $(row).data('rowstate') == 'header' ){
511 _header = $(row).clone();
512 _nip = _header.data('nip');
513 _header = _header.find('td[colspan]');
514 _html = "<tr data-rowstate='header' data-nip='"+_nip+"'><td colspan='2' style='padding:20px;'>"+_header.html()+"</td></tr>";
515 //console.log(_header.html());
516 $("#tableTimeMapping > tbody").append(_html);
517 }
518 });
519
520 //console.log(dataJobs);
521
522 $.each(dataJobs, function(i, v){
523 $.each(v, function(i2, v2){
524 lastRowinDay = v2[0]['id'];
525 _id = RandomString(7, "a#");
526 _id2 = RandomString(7, "a#");
527 //console.log(_id);
528 $("#"+lastRowinDay).before("<tr data-rowstate='timemapping' style='background:#ddd'><td></td><td style='vertical-align:middle'>"+v2[0]['hariTanggal']+"</td><td colspan='4' style='padding-top:30px;'><div class='bar timebar' id='"+_id+"'></div></td><td></td></tr>");
529 $("#"+_id).TimeBar({
530 strTimeStart : '6:00',
531 strTimeStop : '17:00',
532 intTimeSteps : 5,
533 intOffset : 10,
534 strDirection : "horizontal",
535 intReadOnly : 1,
536 strHour : '',
537 //strEnabledClassName : 'green_hor',
538 });
539
540
541 tableMapHaveData = $("#tableTimeMapping > tbody > tr[data-rowstate='body'][data-map='"+i+"']");
542 //console.log(tableMapHaveData);
543 if( tableMapHaveData.length ){
544 lastIdx = tableMapHaveData.length - 1;
545 lastRow = tableMapHaveData[lastIdx];
546 $(lastRow)
547 .after("<tr data-rowstate='body' data-map='"+i+"'><td style='vertical-align:middle'>"+v2[0]['hariTanggal']+"</td><td style='padding-top:30px;'><div class='bar timebar' id='"+_id2+"'></div></td></tr>");
548 }else{
549 //console.log($("#tableTimeMapping > tbody > tr[data-rowstate='header'][data-nip='"+i+"']"))
550 $("#tableTimeMapping > tbody > tr[data-rowstate='header'][data-nip='"+i+"']")
551 .after("<tr data-rowstate='body' data-map='"+i+"'><td style='vertical-align:middle'>"+v2[0]['hariTanggal']+"</td><td style='padding-top:30px;'><div class='bar timebar' id='"+_id2+"'></div></td></tr>");
552 }
553 $("#"+_id2).TimeBar({
554 strTimeStart : '6:00',
555 strTimeStop : '18:00',
556 intTimeSteps : 5,
557 intOffset : 10,
558 strDirection : "horizontal",
559 intReadOnly : 1,
560 strHour : '',
561 //strEnabledClassName : 'green_hor',
562 });
563
564 $.each(v2, function(i3, v3){
565 $('#'+_id).TimeBar('strEnabledClassName', 'green_hor');
566 $('#'+_id).TimeBar('Load', v3.time.start, v3.time.end);
567
568 $('#'+_id2).TimeBar('strEnabledClassName', 'green_hor');
569 $('#'+_id2).TimeBar('Load', v3.time.start, v3.time.end);
570 //console.log(v3)
571 });
572 });
573 });
574
575 //groupTable($('#tableKinerja > tbody > tr[id]'), 1, 1);
576 //$('#tableKinerja .deleted').remove();
577 }
578 }else{
579 alertMessage('info', 'Tidak ada data yang dimapping.');
580 }
581 });
582
583 $(document).on('click', '#check_maraton_time_for_trim', function(){
584 var jumData = ($("#tableKinerja > tbody tr[data-job]").length);
585 if( jumData > 0 ){
586 if( confirm('Pilih jam maraton untuk jeda?') ){
587 $("#tableKinerja > tbody > tr[data-rowstate='validate-comment']").remove();
588 $("#tableKinerja > tbody > tr > td").removeAttr('rowspan');
589 var tableRows = $("#tableKinerja > tbody > tr");
590 tableRows.removeClass('danger warning');
591 var dataJobs = {};
592 tableRows.each(function(i, v) {
593 var row = $(this).get(0);
594 if (row.hasAttribute('id')) {
595 firstColumn = $(row).find('td').eq(1).html().split("<br>");
596 hari = firstColumn[0].trim();
597 tanggal = firstColumn[1].trim();
598 jam = firstColumn[2].trim();
599 hariTanggal = hari+"<br />"+tanggal;
600 menit = $(row).find('td').eq(2).text().split(" ")[0];
601 menit = parseInt(menit);
602
603 splitJam = jam.split("-");
604 nip = $(row).data('job');
605 _id = $(row).attr('id');
606 _jobId = _id.split('_')[1];
607 if( typeof dataJobs[nip] !== 'undefined' ){
608 if( typeof dataJobs[nip][tanggal] !== 'undefined' ){
609 dataJobs[nip][tanggal].push({
610 id: _id,
611 jobid: _jobId,
612 tanggal: tanggal,
613 hari: hari,
614 menit: menit,
615 time: {
616 start: splitJam[0].trim(),
617 end: splitJam[1].trim(),
618 },
619 hariTanggal: hariTanggal
620 });
621 }else{
622 dataJobs[nip][tanggal] = [{
623 id: _id,
624 jobid: _jobId,
625 tanggal: tanggal,
626 hari: hari,
627 menit: menit,
628 time: {
629 start: splitJam[0].trim(),
630 end: splitJam[1].trim(),
631 },
632 hariTanggal: hariTanggal
633 }];
634 }
635 }else{
636 dataJobs[nip] = {};
637 dataJobs[nip][tanggal] = [{
638 id: _id,
639 jobid: _jobId,
640 tanggal: tanggal,
641 hari: hari,
642 menit: menit,
643 time: {
644 start: splitJam[0].trim(),
645 end: splitJam[1].trim(),
646 },
647 hariTanggal: hariTanggal
648 }];
649 }
650 }
651 });
652
653 //console.log(dataJobs);
654
655 $.each(dataJobs, function(i, v){
656 //console.log(i);
657 $.each(v, function(i2, v2){
658 _tgl = i2;
659 //console.log(_tgl)
660 _before = null;
661 _minuteCounter = 0;
662 _jobMaratons = [];
663 _idx = 0;
664 $.each(v2, function(i3, v3){
665 //console.log(v3.time.start+" - "+v3.time.end);
666 //console.log("Tanggal : "+_tgl);
667 //console.log("Jam : "+v3.time.start+" - "+v3.time.end);
668 if( _before != null ){
669 _lastJobtimeEnd = _before.end;
670 _newJobTimeStart = v3.time.start;
671 _diff = TimeDifferent(_lastJobtimeEnd, _newJobTimeStart);
672 //console.log(_lastJobtimeEnd+" > "+_newJobTimeStart+" = "+_diff.diffHrs+":"+_diff.diffMins)
673 if( _diff.diffHrs == 0 && _diff.diffMins < 5 ) {
674 _jobMaratons[_idx].push(v3);
675 }else{
676 _idx++;
677 _jobMaratons[_idx] = [v3];
678 }
679 }else{
680 _jobMaratons[_idx] = [v3];
681 }
682
683 _before = {
684 start: v3.time.start,
685 end: v3.time.end
686 };
687 });
688
689 //console.log(_jobMaratons);
690 $.each(_jobMaratons, function(i3, v3){
691 //_color = getRandomColor(); //'#'+(Math.random()*0xFFFFFF<<0).toString(16);
692 _minuteCounter = 0;
693 $.each(v3, function(i4, v4){
694 //$("#"+v4.id).css('background-color', _color);
695 _minuteCounter += parseInt(v4.menit);
696 });
697 //console.log(_minuteCounter);
698
699 checkCount = 0;
700 if( _minuteCounter > 180 && _minuteCounter < 240 ){ // lebih dari 3 jam centang 1
701 checkCount = 1;
702 } else if( _minuteCounter >= 240 && _minuteCounter < 300 ){ // lebih dari 4 jam centang 2
703 checkCount = 2;
704 } else if( _minuteCounter >= 300 && _minuteCounter < 360 ){ // lebih dari 5 jam centang 3
705 checkCount = 3;
706 } else if( _minuteCounter >= 300 && _minuteCounter < 360 ){ // lebih dari 6 jam centang 4
707 checkCount = 4;
708 } else if( _minuteCounter >= 360 && _minuteCounter < 420 ){ // lebih dari 7 jam centang 5
709 checkCount = 5;
710 } else if( _minuteCounter >= 420 && _minuteCounter < 480 ){ // lebih dari 8 jam centang 6
711 checkCount = 6;
712 } else if( _minuteCounter >= 480 ){
713 checkCount = 7;
714 }else{ }
715
716 if( checkCount >= 1 ){
717 _color = getRandomColor();
718 $.each(v3, function(i4, v4){
719 $("#"+v4.id).attr('data-maraton', true).css('background-color', _color);
720 });
721
722 v3.sort(function(a, b){ return b.menit - a.menit; });
723 _cut = v3.slice(0, checkCount);
724
725 /*console.log(v3);
726 console.log("==== cut ====")
727 console.log(_cut);
728 console.log("==== end cut ====")*/
729
730 $.each(_cut, function(i4, v4){
731 if( v4.menit > 10 ){
732 $("#"+v4.id).find("input[type='checkbox']").prop('checked', true);
733 }
734 });
735 }
736 });
737 });
738 });
739
740 alertMessage('info', 'Jam maraton sudah dipilih.');
741 }
742 }else{
743 alertMessage('info', 'Tidak ada data.');
744 }
745 });
746
747 $(document).on('click', '#remove_maraton_color', function(){
748 var rows = $("#tableKinerja > tbody tr[data-maraton]");
749 var jumData = (rows.length);
750 if( jumData > 0 ){
751 if( confirm('Hapus penanda jam maraton ?') ){
752 $(rows).removeAttr('data-maraton style');
753 alertMessage('info', 'Penanda jam maraton sudah dihapus.');
754 }
755 }else{
756 alertMessage('info', 'Tidak ada yang ditandai sebangai jam maraton.');
757 }
758 });
759});
760
761function CreateBulanControl(){
762 $("#bulanWrapper").html("<select id='bulan' class='form-control form-action select2'></select>");
763 var bulan = [
764 { num: "01", text: "Januari" }, { num: "02", text: "Februari" }, { num: "03", text: "Maret" },
765 { num: "04", text: "April" }, { num: "05", text: "Mei" }, { num: "06", text: "Juni" },
766 { num: "07", text: "Juli" }, { num: "08", text: "Agustus" }, { num: "09", text: "September" },
767 { num: "10", text: "Oktober" }, { num: "11", text: "November" }, { num: "12", text: "Desember" },
768 ];
769
770 $.each(bulan, function(i, v){
771 //console.log(v.text)
772 $('#bulan').append($('<option>', {
773 value: v.num,
774 text : v.text
775 }));
776 });
777
778 var date = new Date();
779 //console.log(date.getMonth())
780 var str = "" + (date.getMonth()+1);
781 var pad = "00";
782 var ans = pad.substring(0, pad.length - str.length) + str;
783
784 $('#bulan').val(ans);
785}
786
787function CreateSkpdControl(uid){
788 if( $("#skpdWrapper").is(':empty') ){
789 firebase.database().ref('setting/'+uid).on('value', function(snap){
790 if( snap.val().listskpd == 'database' ){
791 $("#skpdWrapper").html("<select id='unor' class='form-control form-action select2'></select>");
792 firebase.database().ref('penilai_skpd/'+uid).on('value', function(snap2){
793 $.each(snap2.val(), function(i, v){
794 $('#unor').append($('<option>', {
795 value: v.id,
796 text : v.nama
797 }));
798 });
799 $(".select2").select2();
800 });
801 }else{
802 $.ajax({
803 url: 'https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns',
804 method: 'GET',
805 success: function(res){
806 var skpd = $(res).find("select#unor")
807 .addClass('form-control form-action select2').removeAttr('style')
808 .get(0).outerHTML;
809
810 $("#skpdWrapper").html(skpd);
811 $(".select2").select2();
812 }
813 });
814 }
815 });
816 }
817}
818
819function copyRight(){
820 var _height = $("body > div.container").height();
821 var _cr = "<div style='background:#ddd; margin-top:50px; height:50px; width:100%; padding:10px;'><div class='container'>Application created by <a target='_blank' href='https://www.facebook.com/Ahmad.Rizal.Afani'>Rizal Afani</a>.</div></div>";
822 $('body').append(_cr);
823}
824
825function alertMessage(type, message){
826 toastr.options.closeButton = true;
827 toastr.options.positionClass = "toast-bottom-right";
828 if( type == "success" ){
829 toastr.success(message);
830 }else if(type == "error") {
831 toastr.error(message);
832 }else if(type == "info") {
833 toastr.info(message);
834 }else if(type == "warning") {
835 toastr.warning(message);
836 }else{
837 //alert(message);
838 console.log(type+" : "+message);
839 }
840}
841
842var SignOut = function(){
843 firebase.auth().signOut();
844}
845
846function GetIdnya(){
847 var idnyaObj = $('input[name="idnya[]"]:checked');
848 var idnya = [];
849 idnyaObj.each(function(){
850 //console.log($(this).val())
851 idnya.push($(this).val());
852 });
853 //console.log(idnya);
854 return idnya;
855}
856
857function GetObjectIdnya(){
858 var idnyaObj = $('input[name="idnya[]"]:checked');
859 var idnya = {};
860 idnyaObj.each(function(){
861 //console.log($(this).val())
862 idnya[$(this).val()] = {
863 el: $(this),
864 row: {
865 jobid: $(this).val(),
866 nip: $(this).parent().parent().attr('data-job'),
867 hari: $(this).parent().parent().find('td').eq(1).html().split("<br>")[0].trim(""),
868 tanggal: $(this).parent().parent().find('td').eq(1).html().split("<br>")[1].trim(""),
869 jam: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2].trim(""),
870 durasi: $(this).parent().parent().find('td').eq(2).text().split(" ")[0].trim(""),
871 analisis_job: $(this).parent().parent().find('td').eq(3).text(),
872 nama_job: $(this).parent().parent().find('td').eq(4).text(),
873 hasil_job: $(this).parent().parent().find('td').eq(5).text(),
874 },
875 duration: {
876 text: $(this).parent().parent().find('td').eq(2).text(),
877 count: $(this).parent().parent().find('td').eq(2).text().split(" ")[0].trim("")
878 }, time_input: {
879 text: $(this).parent().parent().find('td').eq(1).html(),
880 day: $(this).parent().parent().find('td').eq(1).html().split("<br>")[0],
881 date: $(this).parent().parent().find('td').eq(1).html().split("<br>")[1],
882 time: {
883 text: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2],
884 start: {
885 text: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2].split("-")[0].trim(""),
886 hours: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2].split("-")[0].trim("").split(":")[0].trim(""),
887 minutes: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2].split("-")[0].trim("").split(":")[1].trim(""),
888 }, end: {
889 text: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2].split("-")[1].trim(""),
890 hours: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2].split("-")[1].trim("").split(":")[0].trim(""),
891 minutes: $(this).parent().parent().find('td').eq(1).html().split("<br>")[2].split("-")[1].trim("").split(":")[1].trim(""),
892 }
893 }
894 }
895 };
896 });
897 //console.log(idnya);
898 return idnya;
899}
900
901function GetSplitIdnya(__idnya){
902 var idnya = (typeof __idnya !== 'undefined') ? __idnya : GetIdnya();
903
904 //console.log(idnya);
905 //console.log(idnya.slice(0, 10));
906 //console.log(idnya.slice(10, 20));
907 //console.log(idnya.slice(20, 30));
908 //console.log(idnya.slice(30, 40));
909
910 limit = 2000;
911 ceil = Math.ceil(idnya.length/limit);
912 var idnyaDisplay = {};
913 for (var i = 0; i < ceil; i++) {
914 start = limit * i;
915 end = start + limit;
916 //console.log(start+" : "+end);
917 idnyaSplit = idnya.slice(start, end);
918 //SetujuiPekerjaan(idnyaSplit);
919 idnyaDisplay[i] = idnyaSplit;
920 }
921
922 subLimit = 50;
923 splitIdNya = {};
924 $.each(idnyaDisplay, function(idx, val){
925 subCeil = Math.ceil(val.length/subLimit);
926 subSplitIdnya = {};
927
928 for (var i = 0; i < subCeil; i++) {
929 start = subLimit * i;
930 end = start + subLimit;
931 //console.log(start+" : "+end);
932 idnyaSplit = val.slice(start, end);
933 //SetujuiPekerjaan(idnyaSplit);
934 subSplitIdnya[i] = idnyaSplit;
935 }
936
937 splitIdNya[idx] = subSplitIdnya;
938 });
939
940 return splitIdNya;
941}
942
943function LoadData() {
944 $("#tableKinerja > tbody").html("");
945 console.log("form action change");
946 console.log($("#bulan").val() + " : " + $("#unor").val()+" : "+$("#joblimit").val());
947 if( $("#unor").val() != "" && $("#unor").val() != " " ){
948 $("#tableTimeMapping > tbody").empty();
949 var dataLimit = parseInt($("#joblimit").val());
950 var dataShows = [];
951 var nips = {};
952 var hasLoaded = [];
953 $.ajax({
954 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/bawahan_list",
955 method: "POST",
956 data: {
957 tahun: window.xtahun,
958 bulan: $("#bulan").val(),
959 nama: "",
960 nip: "",
961 unor: $("#unor").val(),
962 foto: 1,
963 limit: 1000
964 },
965 success: function(res) {
966 var idx = res.indexOf("</table>") + 8;
967 res = res.slice(0, idx);
968 //res = $(res).find("form").find("table#mytable");
969 //console.log("###################################");
970 var dataCounter = 0;
971 $(res).find("tr").each(function(key, val) {
972 if (key >= 2) { // table body
973 //console.log("--------------------------------");
974 var imgSrc = $(this).find("td").eq(1).find("img").attr("src");
975 imgSrc = imgSrc.split("/");
976 imgSrc = imgSrc[imgSrc.length - 1];
977 imgSrc = imgSrc.slice(0, 18);
978 var NIP = imgSrc;
979 //console.log("NIP : "+imgSrc);
980 //console.log("--------------------------------");
981
982 var jobNotValidate = $(this).find("td").eq(3).text().trim("");
983 var acceptedTime = $(this).find("td").eq(7).text().trim("");
984 console.log(NIP+" : "+jobNotValidate+" jobs #1");
985 if( !isNaN(jobNotValidate) && jobNotValidate >= 1 ){
986 console.log(NIP+" : "+jobNotValidate+" jobs #2");
987 dataCounter += parseInt(jobNotValidate);
988
989 console.log(dataCounter+" || "+dataLimit);
990 if( dataCounter < dataLimit ){
991 dataShows.push({
992 nip: NIP,
993 job: jobNotValidate,
994 acceptedTime: acceptedTime
995 });
996 }
997 } /*else{ console.log(jobNotValidate+" is Nan"); }*/
998 }
999 });
1000
1001 //console.log(dataShows);
1002 if( dataShows.length ){
1003 //var jum = 0;
1004 $.each(dataShows, function(key, val){
1005 //jum += parseInt(val.job);
1006 $.ajax({
1007 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/pekerjaan_belum_diperiksa/" + val.nip +"?accepted_time="+val.acceptedTime,
1008 method: "GET",
1009 success: function(res2) {
1010 var _res2 = res2 + "</div>";
1011 var _table2 = $(_res2).find('form').find('table').get(0);
1012 $(_table2).find("span.pull-right").remove();
1013 $(_table2).find("table").removeAttr("bordercolor border");
1014 $(_table2).find("td[rowspan][valign]").remove();
1015
1016 var urlObj = getAllUrlParams(this.url);
1017
1018 //console.log("load header job "+ this.url.split('/')[6]);
1019 _NIP = this.url.split('/')[6].split('?')[0];
1020 nips[_NIP] = {
1021 header: _table2,
1022 acceptedTime: urlObj.accepted_time
1023 };
1024
1025 $.ajax({
1026 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/pekerjaan_belum_diperiksa_list/" + _NIP,
1027 method: "POST",
1028 data: {
1029 tahun: window.xtahun,
1030 bulan: $("#bulan").val(),
1031 limit: 1000
1032 },
1033 success: function(res3) {
1034 __NIP = this.url.split('/')[6];
1035
1036 _jobExists = hasLoaded.indexOf(__NIP);
1037
1038 if( _jobExists == -1 ){ // kill duplicate data (jobs)
1039 hasLoaded.push(__NIP);
1040 _acceptedTime = nips[__NIP].acceptedTime.replaceAll('.', '');
1041 var kerja = "";
1042 kerja += "<tr data-rowstate='header' data-nip='"+__NIP+"'>";
1043 kerja += "<td colspan='5' style='padding:20px; vertical-align:middle;'>"+$(nips[__NIP].header).get(0).outerHTML+"</td>";
1044 kerja += '<td style="vertical-align:middle; padding-top:20px;">';
1045 kerja += '<ul class="list-group">';
1046 kerja += '<li style="padding:5px 10px 5px; border:0; background:transparent;" class="list-group-item"><span class="badge">'+_acceptedTime+'</span> Waktu yg disetujui</li>';
1047 kerja += '<li style="padding:5px 10px 5px; border:0; background:transparent;" class="list-group-item"><span class="badge">0</span> Waktu dari input</li>';
1048 kerja += '<li style="padding:5px 10px 5px; border:0; background:transparent;" class="list-group-item"><span class="badge">0</span> Total waktu</li>';
1049 kerja += '<ul>';
1050 kerja += '</td>';
1051 kerja += "<td style='vertical-align:middle; text-align:center;'><input type='checkbox' class='row_header_checkbox' /></td>";
1052 kerja += "</tr>";
1053
1054 //console.log("****************");
1055 //console.log($(res3).find("table#mytable").find("tr").length);
1056
1057 var _rows = $(res3).find("table#mytable").find("tr").attr('data-rowstate', 'body').attr('data-job', __NIP);
1058 _totalWaktuDariInput = 0;
1059 if (_rows.length < 2) {
1060 kerja += "<tr><td colspan='7' style='padding:20px; text-align:center'>Tidak Ada pekerjaan</td></tr>";
1061 } else {
1062 _rows.each(function(key2, val2) {
1063 if (key2 >= 1) {
1064 //add day name...
1065 var dateTime = $(this).find("td").eq(1).text();
1066 var dayName = GetDayName(dateTime);
1067 dateTime = dayName + " / " + dateTime;
1068 dateTime = dateTime.split('/').join('<br />');
1069 $(this).find("td").eq(1).html(dateTime);
1070 //end add day name...
1071
1072 $(this).find("td").eq(6).remove();
1073 $(this).find("td").eq(6).remove();
1074 $(this).find("td").eq(6).removeAttr('style');
1075 lastCol = $(this).find("td").eq(6).get(0);
1076 checkBox = $(lastCol).find('input').get(0);
1077 rowId = $(checkBox).attr('value');
1078 $(this).attr('id', 'pekerjaan_' + rowId);
1079 kerja += $(this).get(0).outerHTML;
1080
1081 // time counter
1082 _totalWaktuDariInput += parseInt($(this).find("td").eq(2).text().split(" ")[0]);
1083 //console.log(_totalWaktuDariInput)
1084 }
1085 });
1086
1087 // add body footer
1088 kerja += "<tr data-rowstate='footer' data-nip='"+__NIP+"'>";
1089 kerja += "<td colspan='6'></td>";
1090 kerja += "<td style='vertical-align:middle; text-align:center;'><input type='checkbox' class='row_header_checkbox' /></td>";
1091 kerja += "</tr>";
1092 }
1093 //console.log("****************");
1094 //console.log(kerja);
1095 $("#tableKinerja > tbody").append(kerja);
1096 _totalWaktu = parseInt(_acceptedTime) + parseInt(_totalWaktuDariInput);
1097 var ulLiCounter = $("#tableKinerja > tbody > tr[data-rowstate='header'][data-nip='"+__NIP+"']").find('ul.list-group').eq(0).find('li');
1098 $(ulLiCounter).eq(1).find('span').text(_totalWaktuDariInput);
1099 $(ulLiCounter).eq(2).find('span').text(_totalWaktu);
1100 }
1101 }
1102 });
1103 }
1104 });
1105 });
1106 //console.log(jum);
1107 }else{
1108 $("#tableKinerja > tbody").append("<tr><td colspan='7' style='padding:20px; text-align:center'>Tidak ada data yg ditampilkan</td></tr>");
1109 alertMessage('info', 'Tidak ada data yg ditampilkan');
1110 }
1111 //console.log("###################################");
1112 }
1113 })
1114 }else{
1115 alertMessage('info', 'Mohon pilih skpd!!');
1116 }
1117}
1118
1119function AcceptJobs(_idnya){
1120 //console.log(_idnya);
1121 $.ajax({
1122 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/tanggapan_semua_pekerjaan/6",
1123 method: "POST",
1124 data: { idnya: _idnya },
1125 success: function(res){
1126 res = $.parseJSON(res);
1127 // {"message":"Semua pekerjaan yang terpilih telah Anda setujui.","id":"1457244","status":"success"}
1128 if( res.status == "success" ){
1129 $.each(_idnya, function(i, v){
1130 $("#pekerjaan_"+v).remove();
1131 $("#pekerjaan_"+v+"_comment").remove();
1132 });
1133 }
1134 //console.log(res);
1135 alertMessage(res.status, res.message);
1136 $('#select_all').prop('checked', false);
1137 }, /*error: function(error){
1138 alertMessage("error", "Internal server error. Harap refresh halaman!");
1139 $('#select_all').prop('checked', false);
1140 },*/ complete: function(xhr){
1141 $('#select_all').prop('checked', false);
1142 if ( xhr.status == "403" ){
1143 alertMessage("error", "[403][Unauthorized] Mungkin logout!");
1144 }else if( xhr.status == "500" ){
1145 alertMessage("error", "[500][Internal server error] Harap refresh halaman!");
1146 }else{ }
1147 }
1148 });
1149}
1150
1151function RejectJobs(_idnya, _objIdnya){
1152 //console.log(_idnya);
1153 $.ajax({
1154 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/tanggapan_semua_pekerjaan/9",
1155 method: "POST",
1156 data: { idnya: _idnya },
1157 success: function(res){
1158 res = $.parseJSON(res);
1159 if( res.status == "success" ){
1160 __data = {};
1161 ___rejectedJobs = {};
1162 ___nip = "";
1163 $.each(_idnya, function(i, v){
1164 ___rejectedJobs[v] = _objIdnya[v].row;
1165 ___nip = _objIdnya[v].row.nip;
1166 saveRejectedJob(_objIdnya[v].row);
1167 $("#pekerjaan_"+v).remove();
1168 $("#pekerjaan_"+v+"_comment").remove();
1169 });
1170 __data[___nip] = ___rejectedJobs;
1171 saveRejectedJobtoFB(__data);
1172 }
1173
1174 alertMessage(res.status, res.message);
1175 $('#select_all').prop('checked', false);
1176 }, complete: function(xhr){
1177 $('#select_all').prop('checked', false);
1178 if ( xhr.status == "403" ){
1179 alertMessage("error", "[403][Unauthorized] Mungkin logout!");
1180 }else if( xhr.status == "500" ){
1181 alertMessage("error", "[500][Internal server error] Harap refresh halaman!");
1182 }else{ }
1183 }
1184 });
1185}
1186
1187function CommentJobs(){
1188 var idnya = GetIdnya();
1189 $.each(idnya, function(key, val){
1190 console.log(val);
1191 $.ajax({
1192 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/koreksi_pekerjaan/7/"+val,
1193 method: "POST",
1194 data: { komentar: $("#komentar_koreksi").val() },
1195 async: false,
1196 success: function(res){
1197 $("#pekerjaan_"+val).remove();
1198 $("#pekerjaan_"+val+"_comment").remove();
1199 }
1200 });
1201 });
1202
1203 $('#formModalKoreksi').modal('hide');
1204 alertMessage("success", idnya.length+" pekerjaan dikoreksi");
1205}
1206
1207function RejectJobsWithComment(){
1208 var idnya = GetIdnya();
1209 $.each(idnya, function(key, val){
1210 console.log(val);
1211 $.ajax({
1212 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/koreksi_pekerjaan/7/"+val,
1213 method: "POST",
1214 data: { komentar: $("#komentar_tolak").val() },
1215 async: false,
1216 success: function(res){}
1217 });
1218 });
1219
1220 var jum = idnya.length;
1221
1222 idnya = GetSplitIdnya();
1223 var objIdnya = GetObjectIdnya();
1224
1225 $.each(idnya, function(i, v){
1226 //console.log(v)
1227 setTimeout(function(){
1228 $.each(v, function(i2, v2){
1229 RejectJobs(v2, objIdnya);
1230 });
1231 }, 1000);
1232 });
1233
1234 $('#formModalTolak').modal('hide');
1235 alertMessage("success", jum+" pekerjaan ditolak");
1236}
1237
1238function AcceptJobsWithDuration(){
1239 var idnya = GetIdnya();
1240 $.each(idnya, function(key, val){
1241 console.log(val);
1242 $.ajax({
1243 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/tanggapan_pekerjaan/6/"+val,
1244 method: "POST",
1245 data: { durasi: $("#durasi").val() },
1246 async: false,
1247 success: function(res){
1248 $("#pekerjaan_"+val).remove();
1249 $("#pekerjaan_"+val+"_comment").remove();
1250 }
1251 });
1252 });
1253
1254 $('#formModalAcceptWithDuration').modal('hide');
1255 alertMessage("success", idnya.length+" disetujui");
1256}
1257
1258function AcceptJobsWithSubtractDuration(){
1259 var idnya = GetIdnya();
1260 var objIdnya = GetObjectIdnya();
1261 var currentDuration;
1262 var subtract = parseInt($("#durasi").val());
1263 var _duration;
1264 //console.log(objIdnya);
1265 $.each(idnya, function(key, val){
1266 currentDuration = (objIdnya[val].duration.count);
1267 currentDuration = parseInt(currentDuration);
1268 _duration = (currentDuration - subtract);
1269 //console.log(currentDuration);
1270 $.ajax({
1271 url: "https://kinerja.banyuwangikab.go.id/kinerja/penilaian_pns/tanggapan_pekerjaan/6/"+val,
1272 method: "POST",
1273 data: { durasi: ((_duration > 0) ? _duration : currentDuration) },
1274 async: false,
1275 success: function(res){
1276 $("#pekerjaan_"+val).remove();
1277 $("#pekerjaan_"+val+"_comment").remove();
1278 }
1279 });
1280 //console.log(objIdnya[val]);
1281 });
1282
1283 $('#formModalAcceptWithDuration').modal('hide');
1284 //alertMessage("success", idnya.length+" disetujui");
1285}
1286
1287function GetDayName(dateTime){
1288 dateTime = dateTime.split("/");
1289 var date = dateTime[0].trim("");
1290 date = date.split("-");
1291 date = date[2] + "-" + date[1] + "-" + date[0];
1292 var time = dateTime[1].trim("");
1293
1294 var days = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', "Jum'at", 'Sabtu'];
1295 var d = new Date(date);
1296 var dIdx = d.getDay();
1297
1298 return days[dIdx];
1299}
1300
1301function TimeDifferent(time1, time2){
1302 var today = new Date(window.xtahun+"-06-25 "+time1);
1303 var Lebaran = new Date(window.xtahun+"-06-25 "+time2);
1304 var diffMs = (Lebaran - today); // milliseconds between now & Christmas
1305 var diffDays = Math.floor(diffMs / 86400000); // days
1306 var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
1307 var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes
1308
1309 var different = {
1310 date1: today,
1311 date2: Lebaran,
1312 diffMs: diffMs,
1313 diffDays: diffDays,
1314 diffHrs: diffHrs,
1315 diffMins: diffMins
1316 };
1317
1318 //console.log(different);
1319 //console.log(diffDays + " days, " + diffHrs + " hours, " + diffMins + " minutes until Lebaran 2018 =)");
1320
1321 return different;
1322}
1323
1324function Validate() {
1325 //console.log(window.validateRule)
1326 var tableRows = $("#tableKinerja > tbody > tr");
1327 if (tableRows.length) {
1328 if( confirm('Jalankan validasi system') ){
1329 window.jobRejectedState = {};
1330 window.jobValidateAction = {};
1331 tableRows.each(function(i, v) {
1332 var row = $(this).get(0);
1333 if (row.hasAttribute('id')) {
1334 row = $(row);
1335 var idPekerjaan = row.attr('id').split('_')[1];
1336 var dateTime = row.find('td').eq(1).html();
1337 //console.log(dateTime);
1338 dateTime = dateTime.split("<br>");
1339 jam = dateTime.join('/');
1340 //console.log(dateTime);
1341 var date = dateTime[1].trim("");
1342 var __tanggal = date;
1343 date = date.split("-");
1344 date = date[2] + "-" + date[1] + "-" + date[0];
1345 var time = dateTime[2].trim("");
1346
1347 var days = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', "Jum'at", 'Sabtu'];
1348 var d = new Date(date);
1349 var dIdx = d.getDay();
1350
1351 //console.log(date);
1352 //console.log(d.getDay()+" : "+days[d.getDay()]);
1353
1354 // Kill sabtu & minggu
1355 if (typeof days[dIdx] === 'undefined' || dIdx < 1 || dIdx > 5) {
1356 window.jobValidateAction[idPekerjaan] = {
1357 state: 'rejected',
1358 cause: 'Sabtu/Minggu',
1359 };
1360 row.addClass('danger')
1361 row.data('cause', 'Sabtu/Minggu');
1362 return;
1363 }
1364
1365 time = time.split("-");
1366 timeStart = time[0].trim("");
1367 timeEnd = time[1].trim("");
1368
1369 timeStart = timeStart.split(":");
1370 timeStartHour = parseInt(timeStart[0].trim(""));
1371 timeStartMinute = parseInt(timeStart[1].trim(""));
1372
1373 timeEnd = timeEnd.split(":");
1374 timeEndHour = parseInt(timeEnd[0].trim(""));
1375 timeEndMinute = parseInt(timeEnd[1].trim(""));
1376
1377 _awalRamadhan = moment('16-05-'+window.xtahun, "DD-MM-YYYY");
1378 _akhirRamadhan = moment('17-06-'+window.xtahun, "DD-MM-YYYY");
1379
1380 if( moment(__tanggal, "DD-MM-YYYY").isAfter(_awalRamadhan) && moment(__tanggal, "DD-MM-YYYY").isBefore(_akhirRamadhan) ){
1381 /* Deteksi diluar jam kerja */
1382 if( dIdx >= 1 && dIdx < 5 ){ // Senin -> Kamis
1383 if( timeStartHour < 8 && timeEndHour < 8 ){ // pekerjaan sebelum jam 8 dan selesai sebelum jam 8
1384 window.jobRejectedState[idPekerjaan] = {
1385 state: 'rejected',
1386 time: jam,
1387 action: 1, // ditolak langsung
1388 cause: 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai sebelum jam 8 pagi.',
1389 };
1390 window.jobValidateAction[idPekerjaan] = {
1391 state: 'rejected',
1392 cause: 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai sebelum jam 8 pagi.',
1393 };
1394 row.addClass('danger')
1395 row.data('cause', 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai sebelum jam 8 pagi.');
1396 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai sebelum jam 8 pagi.');
1397 return;
1398 }
1399
1400 if( timeStartHour >= 15 ){
1401 window.jobRejectedState[idPekerjaan] = {
1402 state: 'rejected',
1403 time: jam,
1404 action: 1, // ditolak langsung
1405 cause: 'Pekerjaan dilakukan setelah jam 15:00.',
1406 };
1407 window.jobValidateAction[idPekerjaan] = {
1408 state: 'rejected',
1409 cause: 'Pekerjaan dilakukan setelah jam 15:00.',
1410 };
1411 row.addClass('danger')
1412 row.data('cause', 'Pekerjaan dilakukan setelah jam 15:00.');
1413 addCommentInRowMarked(row, 'Pekerjaan dilakukan setelah jam 15:00.');
1414 return;
1415 }
1416
1417 if( timeStartHour < 8 && timeEndHour >= 8 ){ // pekerjaan sebelum jam 8 dan selesai setelah jam 8
1418 window.jobRejectedState[idPekerjaan] = {
1419 state: 'rejected',
1420 time: jam,
1421 diff: TimeDifferent('08:00', timeEnd.join(':')).diffMins,
1422 action: 2, // ditolak dengan pengurangan durasi (pagi)
1423 cause: 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai setelah jam 8 pagi.',
1424 };
1425 window.jobValidateAction[idPekerjaan] = {
1426 state: 'rejected',
1427 cause: 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai setelah jam 8 pagi.',
1428 };
1429 row.addClass('danger')
1430 row.data('cause', 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai setelah jam 8 pagi.');
1431 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 8 pagi dan selesai setelah jam 8 pagi.');
1432 return;
1433 }
1434
1435 if( (timeStartHour < 15) && (timeEndHour >= 15) ){
1436 window.jobRejectedState[idPekerjaan] = {
1437 state: 'rejected',
1438 time: jam,
1439 diff: TimeDifferent(timeStart.join(':'), '15:00').diffMins,
1440 action: 3, // ditolak dengan pengurangan (sore)
1441 cause: 'Pekerjaan dilakukan sebelum jam 15:00 tetapi selesai lepas dari jam 15:00',
1442 };
1443 window.jobValidateAction[idPekerjaan] = {
1444 state: 'rejected',
1445 cause: 'Pekerjaan dilakukan sebelum jam 15:00 tetapi selesai lepas dari jam 15:00',
1446 };
1447 row.addClass('danger')
1448 row.data('cause', 'Pekerjaan dilakukan sebelum jam 15:00 tetapi selesai lepas dari jam 15:00');
1449 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 15:00 tetapi selesai lepas dari jam 15:00');
1450 return;
1451 }
1452 }
1453
1454 if( dIdx == 5 ){ // Jum'at
1455 if( (timeStartHour < 7 || (timeStartHour == 7 && timeStartMinute < 30))
1456 && (timeEndHour == 7 && timeEndMinute < 30) ){ // pekerjaan sebelum jam 7.30 dan selesai sebelum jam 7.30
1457 window.jobRejectedState[idPekerjaan] = {
1458 state: 'rejected',
1459 time: jam,
1460 action: 1, // ditolak langsung
1461 cause: 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai sebelum jam 7.30 pagi.',
1462 };
1463 window.jobValidateAction[idPekerjaan] = {
1464 state: 'rejected',
1465 cause: 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai sebelum jam 7.30 pagi.',
1466 };
1467 row.addClass('danger')
1468 row.data('cause', 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai sebelum jam 7.30 pagi.');
1469 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai sebelum jam 7.30 pagi.');
1470 return;
1471 }
1472
1473 if( timeStartHour > 15 || (timeStartHour == 15 && timeStartMinute >= 40) ){
1474 window.jobRejectedState[idPekerjaan] = {
1475 state: 'rejected',
1476 time: jam,
1477 action: 1, // ditolak langsung
1478 cause: 'Pekerjaan dilakukan setelah jam 15:40.',
1479 };
1480 window.jobValidateAction[idPekerjaan] = {
1481 state: 'rejected',
1482 cause: 'Pekerjaan dilakukan setelah jam 15:40.',
1483 };
1484 row.addClass('danger')
1485 row.data('cause', 'Pekerjaan dilakukan setelah jam 15:40.');
1486 addCommentInRowMarked(row, 'Pekerjaan dilakukan setelah jam 15:40.');
1487 return;
1488 }
1489
1490 if( (timeStartHour < 7 || (timeStartHour == 7 && timeStartMinute < 30)) &&
1491 (timeEndHour >= 7 || (timeEndHour == 7 && timeEndMinute >= 30) ) ){ // pekerjaan sebelum jam 7.30 dan selesai setelah jam 7.30
1492 window.jobRejectedState[idPekerjaan] = {
1493 state: 'rejected',
1494 time: jam,
1495 diff: TimeDifferent('07:30', timeEnd.join(':')).diffMins,
1496 action: 2, // ditolak dengan pengurangan durasi (pagi)
1497 cause: 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai setelah jam 7.30 pagi.',
1498 };
1499 window.jobValidateAction[idPekerjaan] = {
1500 state: 'rejected',
1501 cause: 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai setelah jam 7.30 pagi.',
1502 };
1503 row.addClass('danger')
1504 row.data('cause', 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai setelah jam 7.30 pagi.');
1505 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 7.30 pagi dan selesai setelah jam 7.30 pagi.');
1506 return;
1507 }
1508
1509 if( (timeStartHour < 15 || (timeStartHour == 15 && timeStartMinute < 40))
1510 && (timeEndHour > 15 || (timeEndHour == 15 && timeEndMinute > 40)) ){
1511 window.jobRejectedState[idPekerjaan] = {
1512 state: 'rejected',
1513 time: jam,
1514 diff: TimeDifferent(timeStart.join(':'), '15:40').diffMins,
1515 action: 3, // ditolak dengan pengurangan (sore)
1516 cause: 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40',
1517 };
1518 window.jobValidateAction[idPekerjaan] = {
1519 state: 'rejected',
1520 cause: 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40',
1521 };
1522 row.addClass('danger')
1523 row.data('cause', 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40');
1524 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40');
1525 return;
1526 }
1527 }
1528 /* End deteksi diluar jam kerja */
1529 }else{
1530 /* Deteksi diluar jam kerja */
1531 if( dIdx >= 1 && dIdx < 5 ){ // Senin -> Kamis
1532 if( timeStartHour < 7 && timeEndHour < 7 ){ // pekerjaan sebelum jam 7 dan selesai sebelum jam 7
1533 window.jobRejectedState[idPekerjaan] = {
1534 state: 'rejected',
1535 time: jam,
1536 action: 1, // ditolak langsung
1537 cause: 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai sebelum jam 7 pagi.',
1538 };
1539 window.jobValidateAction[idPekerjaan] = {
1540 state: 'rejected',
1541 cause: 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai sebelum jam 7 pagi.',
1542 };
1543 row.addClass('danger')
1544 row.data('cause', 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai sebelum jam 7 pagi.');
1545 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai sebelum jam 7 pagi.');
1546 return;
1547 }
1548
1549 if( timeStartHour > 15 || (timeStartHour == 15 && timeStartMinute >= 40) ){
1550 window.jobRejectedState[idPekerjaan] = {
1551 state: 'rejected',
1552 time: jam,
1553 action: 1, // ditolak langsung
1554 cause: 'Pekerjaan dilakukan setelah jam 15:40.',
1555 };
1556 window.jobValidateAction[idPekerjaan] = {
1557 state: 'rejected',
1558 cause: 'Pekerjaan dilakukan setelah jam 15:40.',
1559 };
1560 row.addClass('danger')
1561 row.data('cause', 'Pekerjaan dilakukan setelah jam 15:40.');
1562 addCommentInRowMarked(row, 'Pekerjaan dilakukan setelah jam 15:40.');
1563 return;
1564 }
1565
1566 if( timeStartHour < 7 && timeEndHour >= 7 ){ // pekerjaan sebelum jam 7 dan selesai setelah jam 7
1567 window.jobRejectedState[idPekerjaan] = {
1568 state: 'rejected',
1569 time: jam,
1570 diff: TimeDifferent('07:00', timeEnd.join(':')).diffMins,
1571 action: 2, // ditolak dengan pengurangan durasi (pagi)
1572 cause: 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai setelah jam 7 pagi.',
1573 };
1574 window.jobValidateAction[idPekerjaan] = {
1575 state: 'rejected',
1576 cause: 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai setelah jam 7 pagi.',
1577 };
1578 row.addClass('danger')
1579 row.data('cause', 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai setelah jam 7 pagi.');
1580 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 7 pagi dan selesai setelah jam 7 pagi.');
1581 return;
1582 }
1583
1584 if( (timeStartHour < 15 || (timeStartHour == 15 && timeStartMinute < 40))
1585 && (timeEndHour > 15 || (timeEndHour == 15 && timeEndMinute > 40)) ){
1586 window.jobRejectedState[idPekerjaan] = {
1587 state: 'rejected',
1588 time: jam,
1589 diff: TimeDifferent(timeStart.join(':'), '15:40').diffMins,
1590 action: 3, // ditolak dengan pengurangan (sore)
1591 cause: 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40',
1592 };
1593 window.jobValidateAction[idPekerjaan] = {
1594 state: 'rejected',
1595 cause: 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40',
1596 };
1597 row.addClass('danger')
1598 row.data('cause', 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40');
1599 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 15:40 tetapi selesai lepas dari jam 15:40');
1600 return;
1601 }
1602 }
1603
1604 if( dIdx == 5 ){ // Jum'at
1605 if( (timeStartHour < 6 || (timeStartHour == 6 && timeStartMinute < 30))
1606 && (timeEndHour == 6 && timeEndMinute < 30) ){ // pekerjaan sebelum jam 6.30 dan selesai sebelum jam 6.30
1607 window.jobRejectedState[idPekerjaan] = {
1608 state: 'rejected',
1609 time: jam,
1610 action: 1, // ditolak langsung
1611 cause: 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai sebelum jam 6.30 pagi.',
1612 };
1613 window.jobValidateAction[idPekerjaan] = {
1614 state: 'rejected',
1615 cause: 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai sebelum jam 6.30 pagi.',
1616 };
1617 row.addClass('danger')
1618 row.data('cause', 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai sebelum jam 6.30 pagi.');
1619 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai sebelum jam 6.30 pagi.');
1620 return;
1621 }
1622
1623 if( timeStartHour > 14 || (timeStartHour == 14 && timeStartMinute >= 40) ){
1624 window.jobRejectedState[idPekerjaan] = {
1625 state: 'rejected',
1626 time: jam,
1627 action: 1, // ditolak langsung
1628 cause: 'Pekerjaan dilakukan setelah jam 14:40.',
1629 };
1630 window.jobValidateAction[idPekerjaan] = {
1631 state: 'rejected',
1632 cause: 'Pekerjaan dilakukan setelah jam 14:40.',
1633 };
1634 row.addClass('danger')
1635 row.data('cause', 'Pekerjaan dilakukan setelah jam 14:40.');
1636 addCommentInRowMarked(row, 'Pekerjaan dilakukan setelah jam 14:40.');
1637 return;
1638 }
1639
1640 if( (timeStartHour < 6 || (timeStartHour == 6 && timeStartMinute < 30)) &&
1641 (timeEndHour >= 7 || (timeEndHour == 6 && timeEndMinute >= 30) ) ){ // pekerjaan sebelum jam 6.30 dan selesai setelah jam 6.30
1642 window.jobRejectedState[idPekerjaan] = {
1643 state: 'rejected',
1644 time: jam,
1645 diff: TimeDifferent('06:30', timeEnd.join(':')).diffMins,
1646 action: 2, // ditolak dengan pengurangan durasi (pagi)
1647 cause: 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai setelah jam 6.30 pagi.',
1648 };
1649 window.jobValidateAction[idPekerjaan] = {
1650 state: 'rejected',
1651 cause: 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai setelah jam 6.30 pagi.',
1652 };
1653 row.addClass('danger')
1654 row.data('cause', 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai setelah jam 6.30 pagi.');
1655 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 6.30 pagi dan selesai setelah jam 6.30 pagi.');
1656 return;
1657 }
1658
1659 if( (timeStartHour < 14 || (timeStartHour == 14 && timeStartMinute < 40))
1660 && (timeEndHour > 14 || (timeEndHour == 14 && timeEndMinute > 40)) ){
1661 window.jobRejectedState[idPekerjaan] = {
1662 state: 'rejected',
1663 time: jam,
1664 diff: TimeDifferent(timeStart.join(':'), '14:40').diffMins,
1665 action: 3, // ditolak dengan pengurangan (sore)
1666 cause: 'Pekerjaan dilakukan sebelum jam 14:40 tetapi selesai lepas dari jam 14:40',
1667 };
1668 window.jobValidateAction[idPekerjaan] = {
1669 state: 'rejected',
1670 cause: 'Pekerjaan dilakukan sebelum jam 14:40 tetapi selesai lepas dari jam 14:40',
1671 };
1672 row.addClass('danger')
1673 row.data('cause', 'Pekerjaan dilakukan sebelum jam 14:40 tetapi selesai lepas dari jam 14:40');
1674 addCommentInRowMarked(row, 'Pekerjaan dilakukan sebelum jam 14:40 tetapi selesai lepas dari jam 14:40');
1675 return;
1676 }
1677 }
1678 /* End deteksi diluar jam kerja */
1679 }
1680
1681 var searchTexts = window.validateRule.danger;
1682 _find = false;
1683 $.each(searchTexts, function(i2, v2){
1684 if( row.text().toLowerCase().indexOf(v2.toLowerCase()) > -1 ) {
1685 window.jobValidateAction[idPekerjaan] = {
1686 state: 'rejected',
1687 cause: 'Filter text danger',
1688 };
1689 row.addClass('danger')
1690 row.data('cause', 'Filter text danger');
1691 addCommentInRowMarked(row, 'Filter text danger : '+v2.toLowerCase());
1692 _find = true;
1693 return;
1694 }
1695 });
1696 if( _find ){ return; }
1697
1698 /* Deteksi jam istirahat */
1699 if( dIdx >= 1 || dIdx < 5 ){ // Senin -> Kamis
1700 if( (timeStartHour == 12) || (timeStartHour == 11 && timeStartMinute >= 30) ||
1701 (timeEndHour == 12) || (timeEndHour == 11 && timeEndMinute > 30) ){ // jam istirahat
1702 window.jobValidateAction[idPekerjaan] = {
1703 state: 'warning',
1704 cause: 'Jam istirahat',
1705 };
1706 row.addClass('warning')
1707 row.data('cause', 'Jam istirahat');
1708 addCommentInRowMarked(row, 'Jam istirahat');
1709 return;
1710 }
1711 }
1712
1713 if( dIdx == 5 ){ // Jum'at
1714 if( (timeStartHour == 11) || (timeStartHour == 12) ||
1715 (timeEndHour == 11) || (timeEndHour == 12) ){ // jam istirahat
1716 window.jobValidateAction[idPekerjaan] = {
1717 state: 'warning',
1718 cause: 'Jam istirahat',
1719 };
1720 row.addClass('warning')
1721 row.data('cause', 'Jam istirahat');
1722 addCommentInRowMarked(row, 'Jam istirahat');
1723 return;
1724 }
1725 }
1726 /* End deteksi jam istirahat */
1727
1728 var searchTexts = window.validateRule.warning;
1729 _find = false;
1730 $.each(searchTexts, function(i2, v2){
1731 if( row.hasClass('warning') == false ){
1732 if( row.text().toLowerCase().indexOf(v2.toLowerCase()) > -1 ) {
1733 window.jobValidateAction[idPekerjaan] = {
1734 state: 'warning',
1735 cause: 'Filter text warning',
1736 };
1737 row.addClass('warning')
1738 row.data('cause', 'Filter text warning');
1739 addCommentInRowMarked(row, 'Filter text warning : '+v2.toLowerCase());
1740 _find = true;
1741 return;
1742 }}
1743 });
1744 if( _find ){ return; }
1745
1746 window.jobValidateAction[idPekerjaan] = {
1747 state: 'lolos',
1748 cause: '',
1749 };
1750 }
1751 });
1752 alertMessage('info', 'Data sudah divalidasi.');
1753 }
1754 } else {
1755 alertMessage('info', 'Tidak ada data yang divalidasi.');
1756 }
1757}
1758
1759function saveRejectedJob(row){
1760 //console.log("=== Save Rejected Data ===")
1761 //console.log(row);
1762 var data = [
1763 row.jobid, row.nip, row.tanggal, row.hari, row.jam,
1764 row.durasi, row.analisis_job, row.nama_job, row.hasil_job
1765 ];
1766 //console.log(data);
1767
1768 window.dbConnection.transaction(function (trx) {
1769 trx.executeSql("INSERT INTO rejected_jobs (id, nip, tanggal, hari, jam, durasi,"+
1770 "analisis_job, nama_job, hasil_job) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", data);
1771 });
1772}
1773
1774function groupTable($rows, startIndex, total) {
1775 if (total === 0) {
1776 return;
1777 }
1778 var i, currentIndex = startIndex,
1779 count = 1,
1780 lst = [];
1781 var tds = $rows.find('td:eq(' + currentIndex + ')');
1782 var ctrl = $(tds[0]);
1783 lst.push($rows[0]);
1784 for (i = 1; i <= tds.length; i++) {
1785 if (ctrl.text().trim() == $(tds[i]).text().trim()) {
1786 count++;
1787 $(tds[i]).addClass('deleted');
1788 lst.push($rows[i]);
1789 } else {
1790 if (count > 1) {
1791 ctrl.attr('rowspan', count);
1792 ctrl.css('vertical-align', 'middle');
1793 groupTable($(lst), startIndex + 1, total - 1)
1794 }
1795 count = 1;
1796 lst = [];
1797 ctrl = $(tds[i]);
1798 lst.push($rows[i]);
1799 }
1800 }
1801}
1802
1803function RandomString(length, chars) {
1804 var mask = '';
1805 if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
1806 if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
1807 if (chars.indexOf('#') > -1) mask += '0123456789';
1808 if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\';
1809 var result = '';
1810 for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)];
1811 return result;
1812}
1813
1814String.prototype.replaceAll = function(search, replacement) {
1815 var target = this;
1816 return target.split(search).join(replacement);
1817};
1818
1819var GetUserState = function(){
1820 $.ajax({
1821 url: 'https://kinerja.banyuwangikab.go.id',
1822 method: 'GET',
1823 success: function(res){
1824 res = $("<div>"+res+"</div>");
1825 var isLogin = res.find('a[href="https://kinerja.banyuwangikab.go.id/auth/logout"]');
1826
1827 if( !isLogin.length ){
1828 alertMessage('info', 'Sepertinya anda logout.');
1829 return;
1830 }
1831
1832 var isPns = res.find("a[href='http://kinerja.banyuwangikab.go.id/monitoring']");
1833
1834 if( isPns.length ){
1835 nip = res.find('img').eq(1).attr('src').split('/')[5].substring(0, 18);
1836 window.kinerjaUser = {
1837 state: 'pns',
1838 nip: nip,
1839 };
1840 }else{
1841 window.kinerjaUser = {
1842 state: 'verifikator'
1843 };
1844 }
1845
1846 if( window.kinerjaUser.state == 'pns' ){
1847 window.location = 'inputkerja.html';
1848 }
1849
1850 console.log(window.kinerjaUser);
1851 }
1852 })
1853}
1854
1855function getRandomColor() { // Only light color
1856 var letters = 'BCDEF'.split('');
1857 var color = '#';
1858 for (var i = 0; i < 6; i++) {
1859 color += letters[Math.floor(Math.random() * letters.length)];
1860 }
1861 return color;
1862}
1863
1864function getAllUrlParams(url) {
1865
1866 // get query string from url (optional) or window
1867 var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
1868
1869 // we'll store the parameters here
1870 var obj = {};
1871
1872 // if query string exists
1873 if (queryString) {
1874
1875 // stuff after # is not part of query string, so get rid of it
1876 queryString = queryString.split('#')[0];
1877
1878 // split our query string into its component parts
1879 var arr = queryString.split('&');
1880
1881 for (var i = 0; i < arr.length; i++) {
1882 // separate the keys and the values
1883 var a = arr[i].split('=');
1884
1885 // in case params look like: list[]=thing1&list[]=thing2
1886 var paramNum = undefined;
1887 var paramName = a[0].replace(/\[\d*\]/, function(v) {
1888 paramNum = v.slice(1, -1);
1889 return '';
1890 });
1891
1892 // set parameter value (use 'true' if empty)
1893 var paramValue = typeof(a[1]) === 'undefined' ? true : a[1];
1894
1895 // (optional) keep case consistent
1896 paramName = paramName.toLowerCase();
1897 paramValue = paramValue.toLowerCase();
1898
1899 // if parameter name already exists
1900 if (obj[paramName]) {
1901 // convert value to array (if still string)
1902 if (typeof obj[paramName] === 'string') {
1903 obj[paramName] = [obj[paramName]];
1904 }
1905 // if no array index number specified...
1906 if (typeof paramNum === 'undefined') {
1907 // put the value on the end of the array
1908 obj[paramName].push(paramValue);
1909 }
1910 // if array index number specified...
1911 else {
1912 // put the value at that index number
1913 obj[paramName][paramNum] = paramValue;
1914 }
1915 }
1916 // if param name doesn't exist yet, set it
1917 else {
1918 obj[paramName] = paramValue;
1919 }
1920 }
1921 }
1922
1923 return obj;
1924}
1925
1926function addCustomMenu(uid){
1927 firebase.database().ref('users/'+uid).once('value', function(snap){
1928 if ( snap.val().state == 'superuser' ){
1929 links = '<li><a href="skpd.html">SKPD & PNS</a></li>'
1930 +'<li><a href="users.html">Users</a></li>';
1931 $('#btnSignOut').parent().before(links);
1932 }
1933 });
1934}
1935
1936function addCommentInRowMarked(row, comment){
1937 //console.log("in here..."+row.hasClass("warning")+"....")
1938 //row.find('td').css('padding-top', '25px');
1939 //row.find('td').eq(5).css('position', 'relative');
1940 //row.css('position', 'relative');
1941 //div = "<span style='position:absolute; bottom:0; right:0; background-color:#7aacff; padding:1px;'>"+comment+"</span>";
1942 //row.find('td').eq(5).append(div);
1943 //console.log(row.get(0).outerHTML)
1944 //console.log("------")
1945
1946 // cek row setelahnya
1947 rowAfter = row.next();
1948 rowId = row.attr('id');
1949 length = $(rowAfter).find('td').length;
1950 //console.log(rowAfter.get(0).outerHTML);
1951
1952 if( length > 1 ){
1953 row.after("<tr data-rowstate='validate-comment' id='"+rowId+"_comment' class='"+row.attr('class')+"'><td colspan='5' style='padding:1px; text-align:right;'><span style='padding:1px; background-color:#82b1ff;'>"+comment+"</span></td></tr>");
1954 row.find('td').eq(0).attr('rowspan', 2);
1955 row.find('td').eq(6).attr('rowspan', 2);
1956 }else{
1957
1958 }
1959}
1960
1961function saveRejectedJobtoFB(data){
1962 var bulanTahun = window.xtahun+$("#bulan").val();
1963 //firebase.database().ref('rejectedjobs/'+bulanTahun)
1964}
1965
1966function dynamicallyLoadScript(url) {
1967 var script = document.createElement("script"); //Make a script DOM node
1968 script.src = url; //Set it's src to the provided URL
1969 document.head.appendChild(script); //Add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)
1970}