using Microsoft.AspNetCore.Components; using MP.Data; using MP.Stats.Data; using System; using System.Collections.Generic; using System.Linq; namespace MP.Stats.Components { public partial class ChartOEE { #region Private Properties private List DatiParetoOee { get => ParetoData.Select(x => x.value).ToList(); } private List DatiTrs { get => TSData; } private List LabelParetoOee { get => ParetoData.Select(x => x.label).ToList(); } private List LabelTrs { get => TSData.Select(r => $"{r.x:yyyy-MM-dd}").ToList(); } #endregion Private Properties #region Protected Properties protected SelectData _currFilter { get; set; } = new SelectData(); protected List _rawData { get; set; } = new List(); /// /// Genera colori sfondo 33% rosso / arancione / giallo /// /// /// protected List bgColors { get => semaphColors(ParetoData.Count, "0.3"); } /// /// Genera colori sfondo 33% rosso / arancione / giallo /// /// /// protected List lineColor { get => solidColors("1"); } /// /// Genera colori sfondo 33% rosso / arancione / giallo /// /// /// protected List lineColors { get => semaphColors(ParetoData.Count, "1"); } [Inject] protected MessageService MessageService { get; set; } protected List ParetoData { get; set; } = new List(); [Inject] protected MpStatsService StatService { get; set; } protected List TSData { get; set; } = new List(); #endregion Protected Properties #region Public Properties [Parameter] public List RawData { get => _rawData; set { // salvo valori _rawData = value; if (value != null) { // ricalcolo charting data recalcData(); } } } #endregion Public Properties #region Private Methods private Dictionary calcTSData(DateTime inizio, List yData) { Dictionary answ = new Dictionary(); // usando i dati ricevuti aggiunge variabile x = tempo crescente int idx = 0; foreach (var item in yData) { answ.Add(inizio.AddHours(idx), item); idx++; } // restituisco! return answ; } private void recalcData() { if (RawData != null) { ParetoData = RawData .GroupBy(x => x.IdxMacchina) .Select(y => new ChartKV() { label = y.First().CodMacchina, value = Math.Round(y.Average(c => c.OEE) * 100, 2) }) .OrderByDescending(x => x.value) .ToList(); TSData = RawData .GroupBy(x => x.DataRif.Date) .Select(r => new chartJsData.chartJsTSerie() { x = r.First().DataRif.Date, y = Math.Round(r.Average(c => c.OEE) * 100, 2) }) .OrderBy(o => o.x) .ToList(); } } #endregion Private Methods #region Protected Methods /// /// Genera colori sfondo 33% rosso / arancione / giallo /// /// /// protected List semaphColors(int numRecords, string alpha) { List answ = new List(); // verde... for (int i = 0; i < numRecords / 3; i++) { answ.Add($"rgba(54, 235, 82, {alpha})"); } // arancione for (int i = 0; i < numRecords / 3; i++) { answ.Add($"rgba(255, 206, 86, {alpha})"); } while (answ.Count < numRecords) { answ.Add($"rgba(255, 99, 132, {alpha}"); } return answ; } /// /// Genera colori sfondo 33% rosso / arancione / giallo /// /// /// protected List solidColors(string alpha) { List answ = new List(); answ.Add($"rgba(54, 162, 235, {alpha})"); return answ; } #endregion Protected Methods } }