| Line 1... |
Line 1... |
| 1 |
<style>
|
1 |
<style>
|
| 2 |
#rbm-call-target-table td, #rbm-call-target-table th {
|
2 |
#rbm-call-target-table td, #rbm-call-target-table th, #breakTimeDetailsContent td, #breakTimeDetailsContent th {
|
| 3 |
font-size: 14px;
|
3 |
font-size: 14px;
|
| 4 |
text-align: center;
|
4 |
text-align: center;
|
| 5 |
padding: 0.4rem;
|
5 |
padding: 0.4rem;
|
| 6 |
vertical-align: middle;
|
6 |
vertical-align: middle;
|
| 7 |
}
|
7 |
}
|
| Line 264... |
Line 264... |
| 264 |
0
|
264 |
0
|
| 265 |
#end
|
265 |
#end
|
| 266 |
</td>
|
266 |
</td>
|
| 267 |
<td class="highlight-target">$rowTarget</td>
|
267 |
<td class="highlight-target">$rowTarget</td>
|
| 268 |
<td class="highlight-achieved currency">
|
268 |
<td class="highlight-achieved currency">
|
| 269 |
#if($rowAchieved > 0)
|
- |
|
| 270 |
<span class="clickable"
|
269 |
<span class="clickable"
|
| 271 |
onclick="showCalledPartnerDetails($model.getAuthId(), '$model.getRbmName()')">$rowAchieved</span>
|
270 |
onclick="showCalledPartnerDetails($model.getAuthId(), '$model.getRbmName()')">$rowAchieved</span>
|
| 272 |
#else
|
- |
|
| 273 |
$rowAchieved
|
- |
|
| 274 |
#end
|
- |
|
| 275 |
</td>
|
271 |
</td>
|
| 276 |
<td class="highlight-plan-today">$model.getPlanToday()</td>
|
272 |
<td class="highlight-plan-today">$model.getPlanToday()</td>
|
| 277 |
<td class="highlight-carry-forward">$model.getCarryForward()</td>
|
273 |
<td class="highlight-carry-forward">$model.getCarryForward()</td>
|
| 278 |
<td>$model.getZeroBilling()</td>
|
274 |
<td>$model.getZeroBilling()</td>
|
| 279 |
<td class="highlight-untouched">$model.getUntouched()</td>
|
275 |
<td class="highlight-untouched">$model.getUntouched()</td>
|
| Line 295... |
Line 291... |
| 295 |
#end
|
291 |
#end
|
| 296 |
</tbody>
|
292 |
</tbody>
|
| 297 |
</table>
|
293 |
</table>
|
| 298 |
</div>
|
294 |
</div>
|
| 299 |
|
295 |
|
| - |
|
296 |
<!-- Modal for Called Partner Details with Tabs -->
|
| - |
|
297 |
<div class="modal fade" id="calledModal" tabindex="-1" role="dialog" aria-labelledby="calledModalLabel"
|
| - |
|
298 |
aria-hidden="true">
|
| - |
|
299 |
<div class="modal-dialog modal-lg" role="document" style="max-width: 90%;">
|
| - |
|
300 |
<div class="modal-content">
|
| - |
|
301 |
<div class="modal-header">
|
| - |
|
302 |
<h5 class="modal-title" id="calledModalLabel">Called Partners</h5>
|
| - |
|
303 |
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
| - |
|
304 |
<span aria-hidden="true">×</span>
|
| - |
|
305 |
</button>
|
| - |
|
306 |
</div>
|
| - |
|
307 |
<div class="modal-body">
|
| - |
|
308 |
<!-- Tabs Navigation -->
|
| - |
|
309 |
<ul class="nav nav-tabs" id="calledModalTabs" role="tablist">
|
| - |
|
310 |
<li class="nav-item">
|
| - |
|
311 |
<a class="nav-link active" id="called-tab" data-toggle="tab" href="#calledTabContent"
|
| - |
|
312 |
role="tab">
|
| - |
|
313 |
Called Partners
|
| - |
|
314 |
</a>
|
| - |
|
315 |
</li>
|
| - |
|
316 |
<li class="nav-item">
|
| - |
|
317 |
<a class="nav-link" id="break-time-tab" data-toggle="tab" href="#breakTimeTabContent"
|
| - |
|
318 |
role="tab">
|
| - |
|
319 |
Break Time
|
| - |
|
320 |
</a>
|
| - |
|
321 |
</li>
|
| - |
|
322 |
</ul>
|
| - |
|
323 |
<!-- Tabs Content -->
|
| - |
|
324 |
<div class="tab-content mt-3" id="calledModalTabContent">
|
| - |
|
325 |
<div class="tab-pane fade show active" id="calledTabContent" role="tabpanel">
|
| - |
|
326 |
<div id="calledDetailsContent">
|
| - |
|
327 |
<p>Loading...</p>
|
| - |
|
328 |
</div>
|
| - |
|
329 |
</div>
|
| - |
|
330 |
<div class="tab-pane fade" id="breakTimeTabContent" role="tabpanel">
|
| - |
|
331 |
<div id="breakTimeDetailsContent">
|
| - |
|
332 |
<p>Click on Break Time tab to load data.</p>
|
| - |
|
333 |
</div>
|
| - |
|
334 |
</div>
|
| - |
|
335 |
</div>
|
| - |
|
336 |
</div>
|
| - |
|
337 |
<div class="modal-footer">
|
| - |
|
338 |
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
| - |
|
339 |
</div>
|
| - |
|
340 |
</div>
|
| - |
|
341 |
</div>
|
| - |
|
342 |
</div>
|
| - |
|
343 |
|
| - |
|
344 |
<!-- Modal for Out of Sequence Details -->
|
| - |
|
345 |
<div class="modal fade" id="oosModal" tabindex="-1" role="dialog" aria-labelledby="oosModalLabel"
|
| - |
|
346 |
aria-hidden="true">
|
| - |
|
347 |
<div class="modal-dialog modal-lg" role="document">
|
| - |
|
348 |
<div class="modal-content">
|
| - |
|
349 |
<div class="modal-header">
|
| - |
|
350 |
<h5 class="modal-title" id="oosModalLabel">Out of Sequence Calls</h5>
|
| - |
|
351 |
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
| - |
|
352 |
<span aria-hidden="true">×</span>
|
| - |
|
353 |
</button>
|
| - |
|
354 |
</div>
|
| - |
|
355 |
<div class="modal-body">
|
| - |
|
356 |
<div id="oosDetailsContent">
|
| - |
|
357 |
<p>Loading...</p>
|
| - |
|
358 |
</div>
|
| - |
|
359 |
</div>
|
| - |
|
360 |
<div class="modal-footer">
|
| - |
|
361 |
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
| - |
|
362 |
</div>
|
| - |
|
363 |
</div>
|
| - |
|
364 |
</div>
|
| - |
|
365 |
</div>
|
| - |
|
366 |
|
| 300 |
<script type="text/javascript">
|
367 |
<script type="text/javascript">
|
| - |
|
368 |
// Store current authId for break time loading
|
| - |
|
369 |
var currentModalAuthId = null;
|
| - |
|
370 |
var currentModalDate = null;
|
| - |
|
371 |
|
| 301 |
document.addEventListener('DOMContentLoaded', function () {
|
372 |
document.addEventListener('DOMContentLoaded', function () {
|
| 302 |
var elems = document.querySelectorAll('.lakh');
|
373 |
var elems = document.querySelectorAll('.lakh');
|
| 303 |
for (var i = 0; i < elems.length; i++) {
|
374 |
for (var i = 0; i < elems.length; i++) {
|
| 304 |
var val = parseInt(elems[i].textContent.trim());
|
375 |
var val = parseInt(elems[i].textContent.trim());
|
| 305 |
if (!isNaN(val)) {
|
376 |
if (!isNaN(val)) {
|
| Line 333... |
Line 404... |
| 333 |
document.getElementById('oosDetailsContent').innerHTML = '<p>Error loading details. Please try again.</p>';
|
404 |
document.getElementById('oosDetailsContent').innerHTML = '<p>Error loading details. Please try again.</p>';
|
| 334 |
});
|
405 |
});
|
| 335 |
}
|
406 |
}
|
| 336 |
|
407 |
|
| 337 |
function showCalledPartnerDetails(authId, rbmName) {
|
408 |
function showCalledPartnerDetails(authId, rbmName) {
|
| - |
|
409 |
// Store authId for break time tab
|
| - |
|
410 |
currentModalAuthId = authId;
|
| - |
|
411 |
currentModalDate = null;
|
| - |
|
412 |
|
| 338 |
document.getElementById('calledModalLabel').textContent = 'Called Partners - ' + rbmName;
|
413 |
document.getElementById('calledModalLabel').textContent = 'Activity - ' + rbmName;
|
| 339 |
document.getElementById('calledDetailsContent').innerHTML = '<p>Loading...</p>';
|
414 |
document.getElementById('calledDetailsContent').innerHTML = '<p>Loading...</p>';
|
| - |
|
415 |
document.getElementById('breakTimeDetailsContent').innerHTML = '<p>Click to load break time data.</p>';
|
| - |
|
416 |
|
| - |
|
417 |
// Reset to Called tab
|
| - |
|
418 |
$('#called-tab').tab('show');
|
| - |
|
419 |
|
| 340 |
$('#calledModal').modal('show');
|
420 |
$('#calledModal').modal('show');
|
| 341 |
|
421 |
|
| 342 |
fetch('/indent/rbm_call_target/called_details?authId=' + authId)
|
422 |
fetch('/indent/rbm_call_target/called_details?authId=' + authId)
|
| 343 |
.then(function (response) {
|
423 |
.then(function (response) {
|
| 344 |
return response.json();
|
424 |
return response.json();
|
| Line 362... |
Line 442... |
| 362 |
.catch(function () {
|
442 |
.catch(function () {
|
| 363 |
document.getElementById('calledDetailsContent').innerHTML = '<p>Error loading details. Please try again.</p>';
|
443 |
document.getElementById('calledDetailsContent').innerHTML = '<p>Error loading details. Please try again.</p>';
|
| 364 |
});
|
444 |
});
|
| 365 |
}
|
445 |
}
|
| 366 |
|
446 |
|
| - |
|
447 |
// Load break time data when tab is clicked
|
| - |
|
448 |
document.addEventListener('DOMContentLoaded', function () {
|
| - |
|
449 |
var breakTimeTab = document.getElementById('break-time-tab');
|
| - |
|
450 |
if (breakTimeTab) {
|
| - |
|
451 |
breakTimeTab.addEventListener('shown.bs.tab', loadBreakTimeData);
|
| - |
|
452 |
breakTimeTab.addEventListener('click', function () {
|
| - |
|
453 |
// For Bootstrap 4 compatibility
|
| - |
|
454 |
setTimeout(loadBreakTimeData, 100);
|
| - |
|
455 |
});
|
| - |
|
456 |
}
|
| - |
|
457 |
});
|
| - |
|
458 |
|
| - |
|
459 |
function loadBreakTimeData() {
|
| - |
|
460 |
if (!currentModalAuthId) {
|
| - |
|
461 |
return;
|
| - |
|
462 |
}
|
| - |
|
463 |
|
| - |
|
464 |
document.getElementById('breakTimeDetailsContent').innerHTML = '<p>Loading break time data...</p>';
|
| - |
|
465 |
|
| - |
|
466 |
var url = '/indent/rbm_call_target/break_time_details?authId=' + currentModalAuthId;
|
| - |
|
467 |
if (currentModalDate) {
|
| - |
|
468 |
url += '&date=' + currentModalDate;
|
| - |
|
469 |
}
|
| - |
|
470 |
|
| - |
|
471 |
fetch(url)
|
| - |
|
472 |
.then(function (response) {
|
| - |
|
473 |
return response.json();
|
| - |
|
474 |
})
|
| - |
|
475 |
.then(function (data) {
|
| - |
|
476 |
var html = '';
|
| - |
|
477 |
|
| - |
|
478 |
// Summary cards
|
| - |
|
479 |
html += '<div class="row mb-3">';
|
| - |
|
480 |
html += '<div class="col-md-12"><button class="btn btn-warning"> Total Break Time -: ' + (data.totalBreakTime || '0h 0m 0s');
|
| - |
|
481 |
html += '</button> ';
|
| - |
|
482 |
html += ' <button class="btn btn-danger"> Total Logged Out -: ' + (data.totalLoggedOutTime || '0h 0m 0s');
|
| - |
|
483 |
html += '</button></div>';
|
| - |
|
484 |
html += '</div>';
|
| - |
|
485 |
|
| - |
|
486 |
// Details table
|
| - |
|
487 |
if (data.details && data.details.length > 0) {
|
| - |
|
488 |
html += '<table class="table table-bordered table-sm"><thead><tr>';
|
| - |
|
489 |
html += '<th>S.No</th><th>Status</th><th>Log Time</th><th>Duration</th>';
|
| - |
|
490 |
html += '</tr></thead><tbody>';
|
| - |
|
491 |
|
| - |
|
492 |
for (var i = 0; i < data.details.length; i++) {
|
| - |
|
493 |
var detail = data.details[i];
|
| - |
|
494 |
var statusClass = '';
|
| - |
|
495 |
if (detail.status && detail.status.toLowerCase().indexOf('break') >= 0) {
|
| - |
|
496 |
statusClass = 'style="background-color: #fff3cd;"';
|
| - |
|
497 |
} else if (detail.status && detail.status.toLowerCase().indexOf('logged out') >= 0) {
|
| - |
|
498 |
statusClass = 'style="background-color: #f8d7da;"';
|
| - |
|
499 |
} else if (detail.status && detail.status.toLowerCase().indexOf('available') >= 0) {
|
| - |
|
500 |
statusClass = 'style="background-color: #d4edda;"';
|
| - |
|
501 |
}
|
| - |
|
502 |
|
| - |
|
503 |
html += '<tr ' + statusClass + '>';
|
| - |
|
504 |
html += '<td>' + (i + 1) + '</td>';
|
| - |
|
505 |
html += '<td>' + (detail.status || '-') + '</td>';
|
| - |
|
506 |
html += '<td>' + (detail.logTime || '-') + '</td>';
|
| - |
|
507 |
html += '<td>' + (detail.duration || '-') + '</td>';
|
| - |
|
508 |
html += '</tr>';
|
| - |
|
509 |
}
|
| - |
|
510 |
html += '</tbody></table>';
|
| - |
|
511 |
} else {
|
| - |
|
512 |
html += '<p class="text-muted">No break time data available. Data is collected at 12 PM, 4 PM, and 8 PM daily.</p>';
|
| - |
|
513 |
}
|
| - |
|
514 |
|
| - |
|
515 |
document.getElementById('breakTimeDetailsContent').innerHTML = html;
|
| - |
|
516 |
})
|
| - |
|
517 |
.catch(function (err) {
|
| - |
|
518 |
console.error('Error loading break time:', err);
|
| - |
|
519 |
document.getElementById('breakTimeDetailsContent').innerHTML = '<p>Error loading break time data. Please try again.</p>';
|
| - |
|
520 |
});
|
| - |
|
521 |
}
|
| - |
|
522 |
|
| 367 |
// Date-wise Called Partner History
|
523 |
// Date-wise Called Partner History
|
| 368 |
function showHistoryCalledPartners() {
|
524 |
function showHistoryCalledPartners() {
|
| 369 |
var selectedDate = document.getElementById('historyDate').value;
|
525 |
var selectedDate = document.getElementById('historyDate').value;
|
| 370 |
var selectedRbm = document.getElementById('historyRbm');
|
526 |
var selectedRbm = document.getElementById('historyRbm');
|
| 371 |
var authId = selectedRbm.value;
|
527 |
var authId = selectedRbm.value;
|
| Line 378... |
Line 534... |
| 378 |
if (!authId) {
|
534 |
if (!authId) {
|
| 379 |
alert('Please select an RBM');
|
535 |
alert('Please select an RBM');
|
| 380 |
return;
|
536 |
return;
|
| 381 |
}
|
537 |
}
|
| 382 |
|
538 |
|
| - |
|
539 |
// Store authId and date for break time tab
|
| - |
|
540 |
currentModalAuthId = authId;
|
| - |
|
541 |
currentModalDate = selectedDate;
|
| - |
|
542 |
|
| 383 |
document.getElementById('calledModalLabel').textContent = 'Called Partners - ' + rbmName + ' (' + selectedDate + ')';
|
543 |
document.getElementById('calledModalLabel').textContent = 'Activity - ' + rbmName + ' (' + selectedDate + ')';
|
| 384 |
document.getElementById('calledDetailsContent').innerHTML = '<p>Loading...</p>';
|
544 |
document.getElementById('calledDetailsContent').innerHTML = '<p>Loading...</p>';
|
| - |
|
545 |
document.getElementById('breakTimeDetailsContent').innerHTML = '<p>Click to load break time data.</p>';
|
| - |
|
546 |
|
| - |
|
547 |
// Reset to Called tab
|
| - |
|
548 |
$('#called-tab').tab('show');
|
| - |
|
549 |
|
| 385 |
$('#calledModal').modal('show');
|
550 |
$('#calledModal').modal('show');
|
| 386 |
|
551 |
|
| 387 |
fetch('/indent/rbm_call_target/called_details?authId=' + authId + '&date=' + selectedDate)
|
552 |
fetch('/indent/rbm_call_target/called_details?authId=' + authId + '&date=' + selectedDate)
|
| 388 |
.then(function (response) {
|
553 |
.then(function (response) {
|
| 389 |
return response.json();
|
554 |
return response.json();
|