using GPW.CORE.Api.Data; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Text; namespace GPW.CORE.Api.Controllers { [Route("api/[controller]")] [ApiController] public class CheckProjController : ControllerBase { /// /// Dataservice x accesso DB /// protected ApiDataService dataService { get; set; } private readonly ILogger _logger; public CheckProjController(ILogger logger, ApiDataService DataService) { _logger = logger; dataService = DataService; _logger.LogInformation("Avviata classe CheckProj"); } [HttpGet("TryLock")] public async Task Get() { string answ = "ND"; StringBuilder sbLog = new StringBuilder(); StringBuilder sbActions = new StringBuilder(); // recupero progetti attivi... var currProj = await dataService.AnagProjActiv(); sbLog.AppendLine("-----------------------"); sbLog.AppendLine($"Found {currProj.Count} Active Projects"); // leggo fasi attive var currFasiAct = await dataService.AnagFasiActiv(); sbLog.AppendLine($"Found {currFasiAct.Count} Active Phases"); sbLog.AppendLine("-----------------------"); // 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(); sbLog.AppendLine("----------"); string projData = $"[{itemProj.IdxProgetto}] {itemProj.ClienteNav.RagSociale} - {itemProj.NomeProj} | Found {subsetFasi.Count} Phases"; sbLog.AppendLine(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); // se ore usate > (ore budget x %) --> CHIUDO! if (statoFase != null && statoFase.percUsed >= (decimal)statoFase.percOpen) { // x ora LOG... poi chiudo... string currAction = $"!!! [{parentFase.IdxFase}] Budget exhausted for Phase {parentFase.NomeFase} {statoFase.totOre:N2}h used, {statoFase.percUsed:P1} vs {statoFase.percOpen:P1}"; sbLog.AppendLine(currAction); sbActions.AppendLine("----------"); sbActions.AppendLine(projData); sbActions.AppendLine(currAction); } } } // LOG esteso locale _logger.LogInformation(sbLog.ToString()); // ritorno solo LOG azioni answ = sbActions.ToString(); return answ; } } }