83 lines
3.2 KiB
C#
83 lines
3.2 KiB
C#
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
|
|
{
|
|
|
|
/// <summary>
|
|
/// Dataservice x accesso DB
|
|
/// </summary>
|
|
protected ApiDataService dataService { get; set; }
|
|
|
|
private readonly ILogger<CheckProjController> _logger;
|
|
|
|
public CheckProjController(ILogger<CheckProjController> logger, ApiDataService DataService)
|
|
{
|
|
_logger = logger;
|
|
dataService = DataService;
|
|
_logger.LogInformation("Avviata classe CheckProj");
|
|
}
|
|
|
|
[HttpGet("TryLock")]
|
|
public async Task<string> 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;
|
|
}
|
|
}
|
|
}
|