Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

##  LMS Dashboards — cross-region management roll-up (SOP §18). Loaded into #main-content by the sidebar.
##  Model: regions[], summaryJson, stateFunnelJson, slaHeatmapJson, ageingJson, fromDate, toDate.
##  Styling in resources/css/lms-dashboard.css; behaviour in resources/js/lms-dashboard.js (window.LmsDash).

<section class="wrapper lms-dash">

    <ol class="breadcrumb">
        <li><i class="fa fa-home"></i><a href="${rc.contextPath}/dashboard">Home</a></li>
        <li><a href="#" class="lead">Leads</a></li>
        <li>LMS Dashboards</li>
    </ol>

    <div class="lms-head">
        <div>
            <div class="lms-crumb">Management · Cross-region roll-up</div>
            <h1>Dashboards</h1>
            <div class="lms-sub">Funnel, SLA compliance and ageing across regions. Derived from the lead record.</div>
        </div>
        <div class="lms-filters">
            <select id="lmsFilterRegion" title="Region">
                <option value="">All regions</option>
                #foreach($r in $regions)
                    <option value="$r.getId()">$!r.getName()#if($r.getRegionCode()) ($r.getRegionCode())#end</option>
                #end
            </select>
            <input type="date" id="lmsFilterFrom" value="$!fromDate" title="From (created)">
            <input type="date" id="lmsFilterTo" value="$!toDate" title="To (created)">
        </div>
    </div>

    <!-- Roll-up KPIs -->
    <div class="lms-kpis" id="lmsDashKpis"></div>

    <!-- State funnel -->
    <div class="lms-card">
        <h2>State funnel — New → Onboarded by region</h2>
        <div class="desc">Reached counts per region · click a row to list that region's leads.</div>
        <div id="lmsStateFunnel"></div>
        <div class="lms-label" style="margin-top:14px;">Conversion % by region</div>
        <div style="position:relative; height:200px;">
            <canvas id="lmsConvChart"></canvas>
        </div>
    </div>

    <div class="lms-grid lms-g2">
        <div class="lms-card">
            <h2>SLA compliance — owner heat-map</h2>
            <div class="desc">On-time first contact % · BM × recent weeks.</div>
            <div id="lmsHeatmap"></div>
            <div class="lms-note">Green ≥ 90% · red &lt; 40%. SLA = first contact within 5 hrs of creation (SOP §11).</div>
        </div>
        <div class="lms-card">
            <h2>Ageing — stuck open leads</h2>
            <div class="desc">Open leads untouched &gt; 7 days, by stage · click to list.</div>
            <div id="lmsAgeing"></div>
        </div>
    </div>

    <div class="lms-grid lms-g2">
        <!-- Report suite (SOP §18.2) with honest coverage badges -->
        <div class="lms-card">
            <h2>Standard dashboards (SOP §18.2)</h2>
            <div class="desc">What ships from the lead record today vs what needs its source system.</div>
            <div class="report" data-report="state"><span class="r-ico">📈</span>
                <div><div class="r-name">State Funnel <span class="r-badge live">Live</span></div>
                    <div class="r-desc">New → onboarded by region, conversion, SLA%.</div></div></div>
            <div class="report" data-report="sla"><span class="r-ico">⚖️</span>
                <div><div class="r-name">SLA Compliance <span class="r-badge live">Live</span></div>
                    <div class="r-desc">% first-contact within SLA, owner heat-map.</div></div></div>
            <div class="report" data-report="ageing"><span class="r-ico">⏳</span>
                <div><div class="r-name">Ageing <span class="r-badge live">Live</span></div>
                    <div class="r-desc">Stuck by stage, days since last action.</div></div></div>
            <div class="report" data-report="mgmt"><span class="r-ico">👑</span>
                <div><div class="r-name">Management Roll-up <span class="r-badge live">Live</span></div>
                    <div class="r-desc">Cross-region leads, onboardings, value.</div></div></div>
            <div class="report" data-report="bgc"><span class="r-ico">📊</span>
                <div><div class="r-name">BGC Daily <span class="r-badge partial">Partial</span></div>
                    <div class="r-desc">Created + dispositions real; call volume is a proxy — no telephony yet.</div></div></div>
            <div class="report" data-report="audit"><span class="r-ico">🧪</span>
                <div><div class="r-name">Audit Hygiene <span class="r-badge partial">Partial</span></div>
                    <div class="r-desc">Missing dispositions / HOLD shown; DND &amp; recording flags pending source.</div></div></div>
            <div class="report" data-report="rbm"><span class="r-ico">🔄</span>
                <div><div class="r-name">RBM Servicing <span class="r-badge soon">Pending data</span></div>
                    <div class="r-desc">Repeat-order / complaint / TAT need order + ticket data.</div></div></div>
        </div>

        <!-- What to fix -->
        <div class="lms-card">
            <h2>What to fix</h2>
            <div class="desc">Where the funnel is leaking most.</div>
            <div class="callout">
                <div class="c-head">Regions with low conversion</div>
                <div class="c-desc">Rows flagged red in the state funnel are converting under 20%.</div>
                <div class="c-act">→ Open the region row to review its stuck leads.</div>
            </div>
            <div class="callout" style="border-left-color:var(--warn);">
                <div class="c-head">SLA slipping</div>
                <div class="c-desc">Amber heat-map cells / rows sit below 60% on-time first contact.</div>
                <div class="c-act">→ Chase the owner's breached-no-contact queue in Command Center.</div>
            </div>
            <div class="callout" style="border-left-color:var(--navy);">
                <div class="c-head">Ageing backlog</div>
                <div class="c-desc">Open leads untouched &gt; 7 days lose revival odds fast.</div>
                <div class="c-act">→ Click an ageing stage to work the oldest first.</div>
            </div>
        </div>
    </div>

</section>

<script>
    (function () {
        var summary = $summaryJson;
        var stateFunnel = $stateFunnelJson;
        var slaHeatmap = $slaHeatmapJson;
        var ageing = $ageingJson;
        if (window.LmsDash) {
            window.LmsDash.initDashboards({
                summary: summary,
                stateFunnel: stateFunnel,
                slaHeatmap: slaHeatmap,
                ageing: ageing,
                regionId: $('#lmsFilterRegion').val() || '',
                from: '$!fromDate',
                to: '$!toDate'
            });
        }
    })();
</script>