Files
gpw_next/GPW.CORE.Api/Controllers/ProjCheckController.cs
T
2022-01-26 15:37:14 +01:00

78 lines
3.1 KiB
C#

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
{
/// <summary>
/// Dataservice x accesso DB
/// </summary>
protected ApiDataService dataService { get; set; }
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
public ProjCheckController(ILogger<ProjCheckController> logger, ApiDataService DataService)
{
dataService = DataService;
Log.Info("Avviata classe CheckProj");
}
[HttpGet("ResAlloc")]
public async Task<string> 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;
}
}
}