diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index b3f30ba4..58649588 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -7,6 +7,8 @@ using System.CodeDom.Compiler; using System.Collections.Generic; using System.Globalization; using System.IO; +using System.Linq; +using System.Security.Cryptography.X509Certificates; using System.Web.Mvc; namespace MP_IO.Controllers @@ -1020,45 +1022,44 @@ namespace MP_IO.Controllers public string getOdlAtDate(string id, string dateRif) { string answ = ""; - bool canInsert = false; // attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il // carattere "|" che poi trasformiamo ora in "#" id = id.Replace("|", "#"); // converto la data in formato dateTime... e ottengo intervallo data indicata da mezzanotte a 23:59:59... CultureInfo provider = CultureInfo.InvariantCulture; - DateTime dtFrom = DateTime.ParseExact(dateRif, "yyyyMMdd", provider); - // data fine giorno dopo - DateTime dtTo = dtFrom.AddDays(1); - // cerco ODL alla data (validi) - DataLayer DataLayerObj = new DataLayer(); - DS_ProdTempi.ODLDataTable odlList = DataLayerObj.taODL.getByMacchinaPeriodoNoNull(id, dtFrom, dtTo); - // se > 1 --> prendo il + durevole - if (odlList.Count > 1) + DateTime dtFrom = DateTime.Today; + bool fatto = DateTime.TryParseExact(dateRif, "yyyyMMdd", provider, DateTimeStyles.None, out dtFrom); + if (fatto) { - canInsert = true; - } - else if (odlList.Count > 0) - { - canInsert = true; - } - else - { - // errore manca ODL!!!! - answ = "NO"; - } - // procedo se possibile - if (canInsert) - { - //try - //{ - // answ = $"{DataLayerObj.currODL(id)}"; - //} - //catch (Exception exc) - //{ - // logger.lg.scriviLog(string.Format("Errore in getOdlAtDate (get){0}{1}", Environment.NewLine, exc)); - // answ = "NO"; - //} + // data fine giorno dopo + DateTime dtTo = dtFrom.AddDays(1); + // cerco ODL alla data (validi) + DataLayer DataLayerObj = new DataLayer(); + DS_ProdTempi.ODLDataTable odlList = DataLayerObj.taODL.getByMacchinaPeriodoNoNull(id, dtFrom, dtTo); + int idxOdl = 0; + // se > 1 --> prendo il + durevole + if (odlList.Count > 1) + { + double maxPeriod = 0; + foreach (var item in odlList) + { + DateTime dtStart = item.DataInizio > dtFrom ? item.DataInizio : dtFrom; + DateTime dtEnd = item.DataFine < dtTo ? item.DataFine : dtTo; + double currPeriod = dtEnd.Subtract(dtStart).TotalMinutes; + if (currPeriod > maxPeriod) + { + maxPeriod = currPeriod; + idxOdl = item.IdxODL; + } + } + } + else if (odlList.Count == 1) + { + idxOdl = odlList[0].IdxODL; + } + // conversione! + answ = $"{idxOdl}"; } return answ; }