using GPW.CORE.Api.Data; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using NLog; using System.Text; namespace GPW.CORE.Api.Controllers { [Route("api/[controller]")] [ApiController] public class ProjCheckController : ControllerBase { /// /// Dataservice x accesso DB /// protected ApiDataService dataService { get; set; } private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); public ProjCheckController(ILogger logger, ApiDataService DataService) { dataService = DataService; Log.Info("Avviata classe CheckProj"); } [HttpGet("ResAlloc")] public async Task Get() { string answ = "ND"; StringBuilder sbActions = new StringBuilder(); sbActions.AppendLine("------------------------------"); // recupero progetti attivi... Log.Info("----------------------------------------------"); var currProj = await dataService.AnagProjActiv(); Log.Info($"Trovati {currProj.Count} Progetti Attivi"); // leggo fasi attive var currFasiAct = await dataService.AnagFasiActiv(); Log.Info($"Trovate {currFasiAct.Count} Fasi Attive"); Log.Info("----------------------------------------------"); // ciclo elenco fasi ancestor di ognuno... foreach (var itemProj in currProj) { // cerco le sue fasi PARENT... var subsetFasi = currFasiAct .Where(x => x.IdxProgetto == itemProj.IdxProgetto && x.IdxFaseAncest == 0) .ToList(); string projData = $"[P.{itemProj.IdxProgetto}] {itemProj.Gruppo} | {itemProj.ClienteNav.RagSociale} | {itemProj.NomeProj} | {subsetFasi.Count} Fasi"; Log.Info(projData); // ciclo x ogni fase Parent foreach (var parentFase in subsetFasi) { // se ne trovo valuto le ore impiegate... var statoFase = await dataService.CalcOreFase(parentFase.IdxFase, false); // se ore usate > (ore budget x %) --> CHIUDO! if (statoFase != null && statoFase.totOre >= (statoFase.budgetTime * (decimal)statoFase.percOpen)) { // x ora LOG... poi chiudo... string currAction = $"[F.{parentFase.IdxFase}] Budget esaurito in Fase {parentFase.NomeFase} {statoFase.totOre:N2}h consumate, budgt {statoFase.budgetTime:N0} al {statoFase.percOpen:P1}"; Log.Warn(currAction); sbActions.AppendLine(projData); sbActions.AppendLine(currAction); sbActions.AppendLine("------------------------------"); } } } // ritorno solo LOG azioni answ = sbActions.ToString(); return answ; } } }