using BankSampahApp.Models; using Microsoft.AspNetCore.Mvc; namespace BankSampahApp.Controllers.Main { [Route("Main/[controller]/[action]")] public class DashboardController : Controller { public IActionResult Index() { var model = BuildDashboardChartModel(); return View("~/Views/Main/Dashboard/Index.cshtml", model); } public IActionResult Bsu() { return View("~/Views/Main/Dashboard/Bsu.cshtml"); } /// /// Dummy chart data agar view dapat menampilkan grafik tanpa ketergantungan pada API. /// private static DashboardChartViewModel BuildDashboardChartModel() { var monthLabels = new List { "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" }; var baseDatasets = new Dictionary> { ["BSI"] = new() { 520, 540, 560, 590, 620, 650, 680, 710, 740, 770, 800, 830 }, ["BSU"] = new() { 610, 630, 640, 670, 690, 720, 760, 780, 810, 830, 860, 890 }, ["Offtaker"] = new() { 1050, 1080, 1100, 1140, 1180, 1220, 1260, 1300, 1340, 1380, 1420, 1480 } }; var entities = new List { "BSI", "BSU", "Offtaker" }; var verifiedActiveBase = new Dictionary Verified, List Active)> { ["BSI"] = ( new List { 400, 420, 460, 500, 520, 560, 580, 600, 640, 660, 700, 720 }, new List { 300, 320, 350, 370, 390, 420, 440, 460, 500, 520, 550, 580 } ), ["BSU"] = ( new List { 380, 400, 420, 450, 470, 500, 520, 550, 580, 600, 640, 670 }, new List { 250, 270, 300, 330, 350, 380, 400, 420, 450, 480, 500, 530 } ), ["Offtaker"] = ( new List { 600, 620, 640, 660, 700, 720, 750, 780, 820, 850, 880, 910 }, new List { 420, 440, 460, 500, 520, 540, 580, 600, 640, 670, 700, 740 } ) }; var years = Enumerable.Range(2020, 6).ToList(); var firstYear = years.Min(); var yearlyData = new Dictionary(); var verifiedActiveYearlyData = new Dictionary>(); foreach (var year in years) { var offset = year - firstYear; var payload = new DashboardChartPayload { Labels = new List(monthLabels) }; foreach (var dataset in baseDatasets) { var random = new Random(HashCode.Combine(year, dataset.Key)); payload.Datasets.Add(new DashboardChartDataset { Label = dataset.Key, Data = dataset.Value .Select(baseValue => { var variation = random.Next(-100, 120) + offset * 30; return Math.Max(0, baseValue + variation); }) .ToList() }); } yearlyData[year] = payload; var entityPayloads = new Dictionary(); foreach (var entity in entities) { var basePair = verifiedActiveBase[entity]; var verifiedRandom = new Random(HashCode.Combine(year, entity, "verified")); var activeRandom = new Random(HashCode.Combine(year, entity, "active")); var verifiedData = basePair.Verified .Select(baseValue => Math.Max(0, baseValue + verifiedRandom.Next(-60, 90) + offset * 25)) .ToList(); var activeData = basePair.Active .Select(baseValue => Math.Max(0, baseValue + activeRandom.Next(-40, 75) + offset * 20)) .ToList(); entityPayloads[entity] = new VerifiedActiveChartPayload { Labels = new List(monthLabels), VerifiedData = verifiedData, ActiveData = activeData }; } verifiedActiveYearlyData[year] = entityPayloads; } return new DashboardChartViewModel { YearlyData = yearlyData, SelectedYear = yearlyData.Keys.Max(), VerifiedActiveYearlyData = verifiedActiveYearlyData, Entities = entities, SelectedEntity = entities.FirstOrDefault() ?? string.Empty }; } } }