| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921 |
- @{
- ViewData["Title"] = "Index";
- Layout = "~/Views/Shared/_Layout.cshtml";
- }
- @using SuperCms.Controllers;
- @using SuperCms.Models;
- @using System.Globalization;
- @{
- int pageNow = 1;
- if (Model.page != null)
- {
- pageNow = int.Parse(Model.page);
- }
- }
- @model ReportViewModel
- <div class="app-content content">
- <div class="content-wrapper">
- <div class="content-header row">
- <div class="content-header-left col-md-6 col-xs-12 mb-1">
- @*<h2 class="content-header-title">Message configuration</h2>*@
- </div>
- <div class="content-header-right breadcrumbs-right breadcrumbs-top col-md-6 col-xs-12">
- <div class="breadcrumb-wrapper col-xs-12">
- <ol class="breadcrumb">
- @*<li class="breadcrumb-item">
- <a href="Index">Admin</a>
- </li>*@
- @*<li class="breadcrumb-item">
- <a href="/Config">Tables</a>
- </li>*@
- </ol>
- </div>
- </div>
- </div>
- <div class="content-body">
- <!-- Basic form layout section start -->
- <section id="basic-form-layouts">
- <div class="row service-height">
- <div class="col-md-12">
- <div class="card">
- <div class="card-header">
- <h4 class="card-title" id="basic-layout-form">Toolbars</h4>
- <a class="heading-elements-toggle"><i class="icon-ellipsis font-medium-3"></i></a>
- <div class="heading-elements">
- <ul class="list-inline mb-0">
- <li><a data-action="collapse"><i class="icon-minus4"></i></a></li>
- <li><a data-action="expand"><i class="icon-expand2"></i></a></li>
- </ul>
- </div>
- </div>
- <div class="card-content collapse show">
- <div class="card-body ">
- <div class="card-block">
- <div class="form-body">
- <div class="row">
- <div class="col-md-4">
- <div class="form-group">
- <label for="serviceCode">Action</label>
- <div>
- @*<button type="button" class="btn btn-primary button-style" onclick="filterData()" id="btnSearch">
- <i class="icon-search"></i> Filter
- </button>
- <button type="button" class="btn btn-amber button-style" onclick="searchData()" id="btnSearch">
- <i class="icon-search"></i> Search
- </button>*@
- <button type="button" class="btn btn-danger button-style" onclick="exportData(null, null)">
- <i class="icon-search"></i> Export
- </button>
- </div>
- </div>
- </div>
- </div>
- <div class="row">
- <div class="col-md-4">
- <div class="form-group">
- <label for="serviceCode">Money / Subscribers</label>
- <select id="typeGetIndex" name="typeGetIndex" class="form-control" onchange="chooseTypeClick(this.value)">
- <option value="@Model.typeGet">@UtilsController.convertNameTypeGet(Model.typeGet)</option>
- @{
- for (int i = 0; i < UtilsController.Constant.MAX_GET; i++)
- {
- if (Model.typeGet != i.ToString())
- {
- <option value="@i">@UtilsController.convertNameTypeGet(i.ToString())</option>
- }
- }
- }
- </select>
- </div>
- </div>
- <div class="col-md-2">
- <div class="form-group">
- <label for="serviceCode">Choose the date to compare</label>
- <select id="dateGetIndex" name="dateGetIndex" class="form-control" onchange="chooseDateClick(this.value)">
- <option value="@Model.date">@Model.date</option>
- @{
- DateTime now = DateTime.Now;
- int dates = DateTime.DaysInMonth(now.Year, now.Month);
- for (int i = 1; i <= dates; i++)
- {
- if (Model.date != i.ToString())
- {
- <option value="@i">@i</option>
- }
- }
- }
- </select>
- </div>
- </div>
- </div>
- <div class="row">
- <div class="col-md-4">
- <div class="form-group">
- <label for="serviceCode">Telcos</label>
- <select id="telcoIndex" name="telcoIndex" class="form-control" onchange="telcoClick(this.value)">
- <option value="@Model.telco.id">@Model.telco.telcoName</option>
- @{
- for (int i = 0; i < Model.telcos.data.Count; i++)
- {
- if (Model.telcos.data[i].id != Model.telco.id)
- {
- <option value="@Model.telcos.data[i].id">@Model.telcos.data[i].telcoName</option>
- }
- }
- }
- </select>
- </div>
- </div>
- <div class="col-md-4">
- <div class="form-group">
- <label for="serviceCode">Companies</label>
- <select id="companyIndex" name="companyIndex" class="form-control" onchange="companyClick(@Model.telcoID, this.value)">
- <option value="@Model.company.id">@Model.company.name</option>
- @{
- for (int i = 0; i < Model.companies.data.Count; i++)
- {
- if (Model.companies.data[i].id != Model.company.id)
- {
- <option value="@Model.companies.data[i].id">@Model.companies.data[i].name</option>
- }
- }
- }
- </select>
- </div>
- </div>
- @*<div class="col-md-4">
- <div class="form-group">
- <label for="serviceCode">Action</label>
- <div>
- <button type="button" class="btn btn-primary" onclick="searchData()" id="btnSearch">
- <i class="icon-search"></i> Run
- </button>
- </div>
- </div>
- </div>*@
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="col-12">
- <div class="card">
- <div class="row card-content" style="margin:0;">
- <div class="col-md-9 table-responsive" style="padding-right:0; padding-left: 0;">
- <table id="db-table-detail-report-month" class="table table-hover mb-0 ps-container ps-theme-default">
- @{
- List<ConnConfig> services = Model.services.data.FindAll(x => x.companyID == Model.companyID);
- if (Model.typeGet == UtilsController.Constant.MONEY_GET)
- {
- <thead>
- <tr>
- <th>NO</th>
- <th>VAS CODE</th>
- <th></th>
- <th>Acc last month</th>
- <th>Acc now</th>
- <th>+/-</th>
- <th>%</th>
- @*<th>@Model.listDate[1].ToString("dd/MM")</th>*@
- <th>@Model.date@Model.listDate[0].ToString("/MM")</th>
- </tr>
- </thead>
- }
- else
- {
- <thead>
- <tr>
- <th>NO</th>
- <th>VAS CODE</th>
- <th></th>
- <th>SUB</th>
- <th>SUB last month</th>
- <th>+/-</th>
- <th>%</th>
- @*<th>@Model.listDate[1].ToString("dd/MM")</th>*@
- <th>@Model.date@Model.listDate[1].ToString("/MM")</th>
- </tr>
- </thead>
- }
- <tbody>
- @{
- // get the newest data folowing by each service
- for (int j = 0; j < services.Count; j++)
- {
- ConnConfig service = services[j];
- // get all data in the last month
- // calculator
- double newSub = 0, newSubBefore = 0, newSubS = 0, newSubP = 0, newSubN = 0;
- double revenue = 0, revenueBefore = 0;
- double expense = 0, expenseBefore = 0;
- double totalSub = 0, totalSubBefore = 0, totalSubS = 0, totalSubP = 0, totalSubN = 0;
- double deactive = 0, deactiveBefore = 0, deactiveS = 0, deactiveP = 0, deactiveN = 0;
- //double active = 0, activeBefore = 0, activeS = 0, activeP = 0, activeN = 0;
- double benefit = 0, benefitBefore = 0;
- double benefitP = 0, revenueP = 0, expenseP = 0;
- double benefitD = 0, revenueD = 0, expenseD = 0;
- double benefitN = 0, revenueN = 0, expenseN = 0;
- ConnDatas dataDateNowLastMonth = new ConnDatas();
- dataDateNowLastMonth.data = new List<ConnData>();
- ConnDatas dataDateNowMonthNow = new ConnDatas();
- dataDateNowMonthNow.data = new List<ConnData>();
- DistributedDataByService distributedDataByService = Model.distributedDataByServices.Find(x => x.service.id == service.id);
- distributedDataByService.dataLastMonth.data.Sort(delegate (ConnData x, ConnData y)
- {
- if (x.dateGet == null && y.dateGet == null) return 0;
- else if (x.dateGet == null) return -1;
- else if (y.dateGet == null) return 1;
- else return DateTime.Compare(
- DateTime.ParseExact(y.dateGet + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture),
- DateTime.ParseExact(x.dateGet + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture));
- });
- if (int.Parse(Model.date) <= distributedDataByService.dataLastMonth.data.Count)
- {
- for (int q = 0; q < int.Parse(Model.date); q++)
- {
- dataDateNowLastMonth.data.Add(distributedDataByService.dataLastMonth.data[distributedDataByService.dataLastMonth.data.Count - 1 - q]);
- }
- totalSubBefore = double.Parse(dataDateNowLastMonth.data[0].totalSub);
- dataDateNowLastMonth.data.ForEach(x =>
- {
- if (x.registerNew != null)
- {
- newSubBefore += int.Parse(x.registerNew);
- }
- });
- dataDateNowLastMonth.data.ForEach(x =>
- {
- if (x.deactive != null)
- {
- deactiveBefore += int.Parse(x.deactive);
- }
- });
- dataDateNowLastMonth.data.ForEach(x =>
- {
- if (x.revenue != null)
- {
- revenueBefore += int.Parse(x.revenue);
- }
- });
- dataDateNowLastMonth.data.ForEach(x =>
- {
- if (x.expense != null)
- {
- expenseBefore += int.Parse(x.expense);
- }
- });
- }
- //distributedDataByService.dataLastMonth.data.ForEach(x => newSubBefore += int.Parse(x.registerNew));
- //distributedDataByService.dataLastMonth.data.ForEach(x => deactiveBefore += int.Parse(x.deactive));
- //distributedDataByService.dataLastMonth.data.ForEach(x => revenueBefore += int.Parse(x.revenue));
- //distributedDataByService.dataLastMonth.data.ForEach(x => expenseBefore += int.Parse(x.expense));
- // get max day of the last month
- //if (distributedDataByService.dataLastMonth.data.Count > 0)
- //{
- // totalSubBefore = double.Parse(distributedDataByService.dataLastMonth.data[0].totalSub);
- //}
- benefitBefore = revenueBefore - Math.Abs(expenseBefore);
- distributedDataByService.dataNow.data.Sort(delegate (ConnData x, ConnData y)
- {
- if (x.dateGet == null && y.dateGet == null) return 0;
- else if (x.dateGet == null) return -1;
- else if (y.dateGet == null) return 1;
- else return DateTime.Compare(
- DateTime.ParseExact(y.dateGet + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture),
- DateTime.ParseExact(x.dateGet + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture));
- });
- if (int.Parse(Model.date) <= distributedDataByService.dataNow.data.Count)
- {
- for (int q = 0; q < int.Parse(Model.date); q++)
- {
- dataDateNowMonthNow.data.Add(distributedDataByService.dataNow.data[distributedDataByService.dataNow.data.Count - 1 - q]);
- }
- totalSub = double.Parse(dataDateNowMonthNow.data[0].totalSub);
- dataDateNowMonthNow.data.ForEach(x =>
- {
- if (x.registerNew != null)
- {
- newSub += int.Parse(x.registerNew);
- }
- });
- dataDateNowMonthNow.data.ForEach(x =>
- {
- if (x.deactive != null)
- {
- deactive += int.Parse(x.deactive);
- }
- });
- dataDateNowMonthNow.data.ForEach(x =>
- {
- if (x.revenue != null)
- {
- revenue += int.Parse(x.revenue);
- }
- });
- dataDateNowMonthNow.data.ForEach(x =>
- {
- if (x.expense != null)
- {
- expense += int.Parse(x.expense);
- }
- });
- if (dataDateNowMonthNow.data[int.Parse(Model.date) - 1].revenue != null)
- {
- revenueN = double.Parse(dataDateNowMonthNow.data[int.Parse(Model.date) - 1].revenue);
- }
- if (dataDateNowMonthNow.data[int.Parse(Model.date) - 1].expense != null)
- {
- expenseN = double.Parse(dataDateNowMonthNow.data[int.Parse(Model.date) - 1].expense);
- }
- benefitN = revenueN + expenseN;
- if (dataDateNowMonthNow.data[int.Parse(Model.date) - 1].totalSub != null)
- {
- totalSubN = double.Parse(dataDateNowMonthNow.data[int.Parse(Model.date) - 1].totalSub);
- }
- }
- //distributedDataByService.dataNow.data.ForEach(x => newSub += int.Parse(x.registerNew));
- //distributedDataByService.dataNow.data.ForEach(x => deactive += int.Parse(x.deactive));
- //distributedDataByService.dataNow.data.ForEach(x => revenue += int.Parse(x.revenue));
- //distributedDataByService.dataNow.data.ForEach(x => expense += int.Parse(x.expense));
- //if (distributedDataByService.dataNow.data.Count > 0)
- //{
- // totalSub = double.Parse(distributedDataByService.dataNow.data[0].totalSub);
- //}
- benefit = revenue - Math.Abs(expense);
- revenueD = revenue - revenueBefore;
- expenseD = Math.Abs(expense) - Math.Abs(expenseBefore);
- benefitD = benefit - benefitBefore;
- revenueP = revenueBefore != 0 ? Math.Round(revenueD * 100 / revenueBefore, 2) : 100;
- expenseP = expenseBefore != 0 ? Math.Round(expenseD * 100 / expenseBefore, 2) : 100;
- benefitP = benefitBefore != 0 ? Math.Round(benefitD * 100 / benefitBefore, 2) : 100;
- //if (distributedDataByService.distributedByTimes.Count > 0)
- //{
- // revenueN = double.Parse(distributedDataByService.distributedByTimes[0].connDatas.data[0].revenue);
- // expenseN = double.Parse(distributedDataByService.distributedByTimes[0].connDatas.data[0].expense);
- // benefitN = revenueN + expenseN;
- // totalSubN = double.Parse(distributedDataByService.distributedByTimes[0].connDatas.data[0].totalSub);
- //}
- totalSubS = totalSub - totalSubBefore;
- totalSubP = totalSubBefore != 0 ? Math.Round(totalSubS * 100 / totalSubBefore, 2) : 100;
- deactiveS = deactive - deactiveBefore;
- deactiveP = deactiveBefore != 0 ? Math.Round(deactiveS * 100 / deactiveBefore, 2) : 100;
- newSubS = newSub - newSubBefore;
- newSubP = newSubBefore != 0 ? Math.Round(newSubS * 100 / newSubBefore, 2) : 100;
- if (Model.typeGet == UtilsController.Constant.MONEY_GET)
- {
- <tr class="@(j%2==0? "oven-column" : "")">
- @if (service.state == UtilsController.Constant.ALL_REVEUNUE)
- {
- <td rowspan="3" class="text-truncate main-column">@(j + 1)</td>
- <td rowspan="3" class="text-truncate main-column">@service.serviceName</td>
- }
- else
- {
- <td class="text-truncate">@(j + 1)</td>
- <td class="text-truncate">@service.serviceName</td>
- }
- <td class="text-truncate">Revenue</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", revenueBefore))</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", revenue))</td>
- <td class="text-truncate @(revenueD < 0 ? "red-text" : "")">@(string.Format("{0:#,0}", Math.Abs(revenueD)))</td>
- <td class="text-truncate">
- @{
- if (revenueD < 0)
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:@Math.Abs(revenueP)%">@Math.Abs(revenueP)%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:0%">0%</div>
- </div>
- }
- else
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:0%">0%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:@Math.Abs(revenueP)%">@Math.Abs(revenueP)%</div>
- </div>
- }
- }
- </td>
- <td class="text-truncate">@(string.Format("{0:#,0}", revenueN))</td>
- </tr>
- if (service.state == UtilsController.Constant.ALL_REVEUNUE)
- {
- <tr class="@(j%2==0? "oven-column" : "")">
- <td class="text-truncate">Expense</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", expenseBefore >= 0 ? expenseBefore : -expenseBefore))</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", expense >= 0 ? expense : -expense))</td>
- <td class="text-truncate @(expenseD < 0 ? "red-text" : "")">@(string.Format("{0:#,0}", Math.Abs(expenseD)))</td>
- <td class="text-truncate">
- @{
- if (expenseD < 0)
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:@Math.Abs(expenseP)%">@Math.Abs(expenseP)%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:0%">0%</div>
- </div>
- }
- else
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:0%">0%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:@Math.Abs(expenseP)%">@Math.Abs(expenseP)%</div>
- </div>
- }
- }
- </td>
- <td class="text-truncate">@(string.Format("{0:#,0}", expenseN >= 0 ? expenseN : -expenseN))</td>
- </tr>
- <tr class="@(j%2==0? "oven-column" : "")">
- <td class="text-truncate">Benefit</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", benefitBefore))</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", benefit))</td>
- <td class="text-truncate @(benefitD < 0 ? "red-text" : "")">@(string.Format("{0:#,0}", Math.Abs(benefitD)))</td>
- <td class="text-truncate">
- @{
- if (benefitD < 0)
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:@Math.Abs(benefitP)%">@Math.Abs(benefitP)%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:0%">0%</div>
- </div>
- }
- else
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:0%">0%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:@Math.Abs(benefitP)%">@Math.Abs(benefitP)%</div>
- </div>
- }
- }
- </td>
- <td class="text-truncate">@(string.Format("{0:#,0}", benefitN))</td>
- </tr>
- }
- }
- else
- {
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- <td rowspan="3" class="text-truncate">@(j + 1)</td>
- <td rowspan="3" class="text-truncate">@service.serviceName</td>
- <td class="text-truncate">Total Sub</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", totalSub))</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", totalSubBefore))</td>
- <td class="text-truncate @(totalSubS < 0 ? "red-text" : "")">@(string.Format("{0:#,0}", Math.Abs(totalSubS)))</td>
- <td class="text-truncate">
- @{
- if (totalSubS < 0)
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:@Math.Abs(totalSubP)%">@Math.Abs(totalSubP)%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:0%">0%</div>
- </div>
- }
- else
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:0%">0%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:@Math.Abs(totalSubP)%">@Math.Abs(totalSubP)%</div>
- </div>
- }
- }
- </td>
- <td class="text-truncate">@(string.Format("{0:#,0}", totalSubN))</td>
- </tr>
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- <td class="text-truncate">Deactive</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", deactive))</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", deactiveBefore))</td>
- <td class="text-truncate @(deactiveS < 0 ? "red-text" : "")">@(string.Format("{0:#,0}", Math.Abs(deactiveS)))</td>
- <td class="text-truncate">
- @{
- if (deactiveS < 0)
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:@Math.Abs(deactiveP)%">@Math.Abs(deactiveP)%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:0%">0%</div>
- </div>
- }
- else
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:0%">0%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:@Math.Abs(deactiveP)%">@Math.Abs(deactiveP)%</div>
- </div>
- }
- }
- </td>
- <td class="text-truncate">@(string.Format("{0:#,0}", deactiveN))</td>
- </tr>
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- <td class="text-truncate">Active</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", newSub))</td>
- <td class="text-truncate">@(string.Format("{0:#,0}", newSubBefore))</td>
- <td class="text-truncate @(newSubS < 0 ? "red-text" : "")">@(string.Format("{0:#,0}", Math.Abs(newSubS)))</td>
- <td class="text-truncate">
- @{
- if (newSubS < 0)
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:@Math.Abs(deactiveP)%">@Math.Abs(newSubP)%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:0%">0%</div>
- </div>
- }
- else
- {
- <div class="progress process-style-right" style="margin:auto;">
- <div class="progress-bar bg-danger" style="width:0%">0%</div>
- </div>
- <div class="progress process-style-left" style="margin:auto;">
- <div class="progress-bar bg-success" style="width:@Math.Abs(newSubP)%">@Math.Abs(newSubP)%</div>
- </div>
- }
- }
- </td>
- <td class="text-truncate">@(string.Format("{0:#,0}", newSubN))</td>
- </tr>
- }
- }
- }
- </tbody>
- }
- </table>
- </div>
- <div class="col-md-3 table-responsive" style="padding-left:0">
- <table id="db-table-detail-report-day" class="table table-hover mb-0 ps-container ps-theme-default">
- @{
- <thead>
- <tr>
- @{
- for (int d = 1; d < Model.listDate.Count; d++)
- {
- <th>@Model.listDate[d].ToString("dd/MM")</th>
- }
- }
- </tr>
- </thead>
- <tbody>
- @{
- // get the newest data folowing by each service
- for (int j = 0; j < services.Count; j++)
- {
- ConnConfig service = services[j];
- // get all data in the last month
- // calculator
- double benefitN = 0, revenueN = 0, expenseN = 0;
- DistributedDataByService distributedDataByService = Model.distributedDataByServices.Find(x => x.service.id == service.id);
- if (Model.typeGet == UtilsController.Constant.MONEY_GET)
- {
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- @{
- if (distributedDataByService.distributedByTimes.Count > 0)
- {
- for (int c = 0; c < distributedDataByService.distributedByTimes.Count; c++)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data.Count > 0)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].revenue != null)
- {
- revenueN = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].revenue);
- }
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].expense != null)
- {
- expenseN = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].expense);
- }
- benefitN = revenueN + expenseN;
- }
- <td class="text-truncate">@(string.Format("{0:#,0}", revenueN))</td>
- }
- }
- else
- {
- for (int d = 1; d < Model.listDate.Count; d++)
- {
- <td class="text-truncate">0</td>
- }
- }
- }
- </tr>
- if (service.state == UtilsController.Constant.ALL_REVEUNUE)
- {
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- @{
- if (distributedDataByService.distributedByTimes.Count > 0)
- {
- for (int c = 0; c < distributedDataByService.distributedByTimes.Count; c++)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data.Count > 0)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].revenue != null)
- {
- revenueN = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].revenue);
- }
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].expense != null)
- {
- expenseN = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].expense);
- }
- benefitN = revenueN + expenseN;
- }
- <td class="text-truncate">@(string.Format("{0:#,0}", expenseN >= 0 ? expenseN : -expenseN))</td>
- }
- }
- else
- {
- for (int d = 1; d < Model.listDate.Count; d++)
- {
- <td class="text-truncate">0</td>
- }
- }
- }
- </tr>
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- @{
- if (distributedDataByService.distributedByTimes.Count > 0)
- {
- for (int c = 0; c < distributedDataByService.distributedByTimes.Count; c++)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data.Count > 0)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].revenue != null)
- {
- revenueN = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].revenue);
- }
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].expense != null)
- {
- expenseN = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].expense);
- }
- benefitN = revenueN + expenseN;
- }
- <td class="text-truncate">@(string.Format("{0:#,0}", benefitN))</td>
- }
- }
- else
- {
- for (int d = 1; d < Model.listDate.Count; d++)
- {
- <td class="text-truncate">0</td>
- }
- }
- }
- </tr>
- }
- }
- else
- {
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- @{
- if(distributedDataByService.distributedByTimes.Count > 0){
- double totalSub = 0;
- for (int c = 0; c < distributedDataByService.distributedByTimes.Count; c++)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data.Count > 0)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].totalSub != null)
- {
- totalSub = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].totalSub);
- }
- }
- <td class="text-truncate">@(string.Format("{0:#,0}", totalSub))</td>
- }
- }else
- {
- for (int d = 1; d < Model.listDate.Count; d++)
- {
- <td class="text-truncate">0</td>
- }
- }
-
- }
- </tr>
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- @{
- if(distributedDataByService.distributedByTimes.Count > 0){
- double deactive = 0;
- for (int c = 0; c < distributedDataByService.distributedByTimes.Count; c++)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data.Count > 0)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].deactive != null)
- {
- deactive = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].deactive);
- }
- }
- <td class="text-truncate">@(string.Format("{0:#,0}", deactive))</td>
- }
- }else
- {
- for (int d = 1; d < Model.listDate.Count; d++)
- {
- <td class="text-truncate">0</td>
- }
- }
-
- }
- </tr>
- <tr class="sencond-column @(j%2==0? "oven-column" : "")">
- @{
- if(distributedDataByService.distributedByTimes.Count > 0){
- double newSub = 0;
- for (int c = 0; c < distributedDataByService.distributedByTimes.Count; c++)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data.Count > 0)
- {
- if (distributedDataByService.distributedByTimes[c].connDatas.data[0].registerNew != null)
- {
- newSub = double.Parse(distributedDataByService.distributedByTimes[c].connDatas.data[0].registerNew);
- }
- }
- <td class="text-truncate">@(string.Format("{0:#,0}", newSub))</td>
- }
- }else
- {
- for (int d = 1; d < Model.listDate.Count; d++)
- {
- <td class="text-truncate">0</td>
- }
- }
- }
- </tr>
- }
- }
- }
- </tbody>
- }
- </table>
- </div>
- <style>
- .pagination-style {
- max-width: 1200px;
- margin: auto;
- position: relative;
- padding: 0;
- float: none;
- padding-right: 0;
- text-align: center;
- }
- .pagination-active {
- background: #337ab7 !important;
- color: white !important;
- }
- .pagination-disable {
- pointer-events: none;
- }
- </style>
- @{
- int totalPage = Model.totalPage != null ? int.Parse(Model.totalPage) : 1;
- <div class="category-post-pagination col-xs-12 pagination-style">
- @{
- <ul class="pagination clearfix pagination-ul">
- <li class="pagination-prev">
- <a href="/Report?marketID=1&companyID=1&page=1">‹‹</a>
- </li>
- <li class="pagination-prev @(pageNow == 1 ? "disabled pagination-disable" : "")">
- <a href="/Report?marketID=1&companyID=1&page=@(pageNow-1)">‹</a>
- </li>
- @{
- if (totalPage <= 4)
- {
- for (int k = 1; k <= totalPage; k++)
- {
- <li class="@(pageNow == k ? "current" : "")">
- <a class="@(pageNow == k ? "pagination-active" : "")" href="/Report?marketID=1&companyID=1&page=@k">@k</a>
- </li>
- }
- }
- else if (pageNow <= totalPage - 4)
- {
- for (int k = pageNow; (k <= pageNow + 4 && k <= totalPage); k++)
- {
- <li class="@(pageNow == k ? "current" : "")">
- <a class="@(pageNow == k ? "pagination-active" : "")" href="/Report?marketID=1&companyID=1&page=@k">@k</a>
- </li>
- }
- }
- else
- {
- for (int k = totalPage - 4; k <= totalPage; k++)
- {
- <li class="@(pageNow == k ? "current" : "")">
- <a class="@(pageNow == k ? "pagination-active" : "")" href="/Report?marketID=1&companyID=1&page=@k">@k</a>
- </li>
- }
- }
- }
- <li class="pagination-next @(pageNow == totalPage ? "disabled pagination-disable" : "")">
- <a href="/Report?marketID=1&companyID=1&page=@(pageNow+1)">›</a>
- </li>
- <li class="pagination-next ">
- <a href="/Report?marketID=1&companyID=1&page=@totalPage">››</a>
- </li>
- </ul>
- }
- </div>
- }
- </div>
- </div>
- </div>
- </div>
- </section>
- <!-- // Basic form layout section end -->
- </div>
- </div>
- </div>
- <form method="post" action="/Report" id="report-index-form">
- <input name="__RequestVerificationToken" type="hidden" value="">
- <input type="hidden" id="dateGet" class="dateGet" name="dateGet" value="" />
- <input type="hidden" id="typeGet" class="typeGet" name="typeGet" value="" />
- <input type="hidden" id="telcoID" class="telcoID" name="telcoID" value="" />
- <input type="hidden" id="companyID" class="companyID" name="companyID" value="" />
- </form>
- <form method="post" action="/Report/ExportToExcel" id="report-excel-form">
- </form>
- @*@section scripts{
- <script src="/js/tables/jquery-3.5.1.js"></script>
- <script src="/js/tables/jquery.dataTables.min.js"></script>
- <script src="/js/tables/dataTables.buttons.min.js"></script>
- <script src="/js/tables/jszip.min.js"></script>
- <script src="/js/tables/pdfmake.min.js"></script>
- <script src="/js/tables/vfs_fonts.js"></script>
- <script src="/js/tables/buttons.html5.min.js"></script>
- }*@
|