Subversion Repositories SmartDukaan

Rev

Rev 35879 | Rev 35984 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 35879 Rev 35953
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">&times;</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">&times;</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> &nbsp;';
-
 
482
                    html += '&nbsp; <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();