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;
}
}
}