using Blazored.LocalStorage; using Microsoft.AspNetCore.Components; using MP.Data.DTO; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Threading.Tasks; namespace MP.Data { public class Utils { #region Public Properties public static string redKeyArtUsed { get => RedHash($"CACHE:CheckArtUsed"); } public static string redKeyTabCheckArt { get => RedHash($"CACHE:TabCheckArt"); } #endregion Public Properties #region Public Methods public static string ConvMinToTime(double minutes) { // FIXME TODO: da rendere parametrico da appsettings.json... var ts = TimeSpan.FromMinutes(minutes); string answ = $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}"; //.{ts.Milliseconds} return answ; } public static string ConvMsecToTime(long milliseconds) { // FIXME TODO: da rendere parametrico da appsettings.json... var ts = TimeSpan.FromMilliseconds(milliseconds); string answ = $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}"; //.{ts.Milliseconds} return answ; } /// /// Nome della variabile HASH da utilizzare (dato CodModulo / Server / DB impiegato da /// funzionalita' DbConfig) + keyName richiesto... /// public static string RedHash(string keyName) { string answ = keyName; try { answ = $"MP:Data:{keyName}"; } catch { } return answ; } /// /// Effettua salvataggio in file di un generico oggetto in formato CSV /// /// /// /// /// Separatore da impiegare /// public static async Task SaveToCsv(List reportData, string path, char separator) { var lines = new List(); IEnumerable props = TypeDescriptor.GetProperties(typeof(T)).OfType(); var header = string.Join(";", props.ToList().Select(x => x.Name)); lines.Add(header); var valueLines = reportData.Select(row => string.Join(separator, header.Split(separator).Select(a => row.GetType().GetProperty(a).GetValue(row, null)))); //var valueLines = reportData.Select(row => string.Join(";", header.Split(';').Select(a => row.GetType().GetProperty(a).GetValue(row, null)))); lines.AddRange(valueLines); await Task.Run(() => File.WriteAllLines(path, lines.ToArray())); } /// /// Inizializzazione con periodo e arrotondamento /// /// /// public static DateTime InitDatetime(DateTime dtRif, int minRound) { TimeSpan DayElapsed = dtRif.Subtract(dtRif.Date); int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound; DateTime endRounded = DateTime.Today.AddMinutes(minDay); return endRounded; } public static string FormDurata(double durataMinuti) { string answ = ""; TimeSpan tsDurata = TimeSpan.FromMinutes(durataMinuti); if (tsDurata.TotalDays < 1) { answ = $"{tsDurata.Hours:00}h {tsDurata.Minutes:00}'"; } else { answ = $"{tsDurata.Days}gg {tsDurata.Hours:00}h"; } return answ; } #endregion Public Methods } }