Fix check controllo timbrature (da provare...)
This commit is contained in:
@@ -89,10 +89,9 @@ namespace GPW.CORE.Api.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task sendEmail(string subject, string message)
|
||||
protected async Task sendEmail(string destList, string subject, string message)
|
||||
{
|
||||
string emailRaw = _configuration["MailDest:ProjCheck"];
|
||||
List<string> emailDestList = emailRaw.Split(",").ToList();
|
||||
List<string> emailDestList = destList.Split(",").ToList();
|
||||
foreach (var dest in emailDestList)
|
||||
{
|
||||
try
|
||||
@@ -119,7 +118,7 @@ namespace GPW.CORE.Api.Controllers
|
||||
DateTime fine = inizio.AddDays(1);
|
||||
var dailyChecks = await dataService.RegEventiGetFilt(inizio, fine, "checkAnomalie");
|
||||
// cerco se sia già stato fatto altrimenti ripeto...
|
||||
if (dailyChecks != null && dailyChecks.Count > 10)
|
||||
if (dailyChecks != null && dailyChecks.Count > 1)
|
||||
{
|
||||
// loggo solo che è stato richeisto di nuovo...
|
||||
var currCheck = dailyChecks[0];
|
||||
@@ -152,7 +151,6 @@ namespace GPW.CORE.Api.Controllers
|
||||
*
|
||||
*******************************************************/
|
||||
|
||||
|
||||
// oggetti base
|
||||
StringBuilder sbMain = new StringBuilder();
|
||||
DateTime oggi = DateTime.Today;
|
||||
@@ -168,11 +166,16 @@ namespace GPW.CORE.Api.Controllers
|
||||
int gg2Chk = _configuration.GetValue<int>("TimbraCheck:gg2Chk");
|
||||
int gg2ChkCont = _configuration.GetValue<int>("TimbraCheck:gg2ChkCont");
|
||||
int gg2ChkOreCaricate = _configuration.GetValue<int>("TimbraCheck:gg2ChkOreCaricate");
|
||||
int maxErrMin = _configuration.GetValue<int>("TimbraCheck:maxErrMin");
|
||||
int maxErrPlus = _configuration.GetValue<int>("TimbraCheck:maxErrPlus");
|
||||
string msgTopic = "";
|
||||
string msgBody = "";
|
||||
int numChk = 0;
|
||||
int numErr = 0;
|
||||
|
||||
string headRow = "style=\"background-color: #232323; color: #DEDEDE\"";
|
||||
string stripeRow = "style=\"background-color: #DEDEDE;\"";
|
||||
|
||||
// (A) recupero mancate approvazioni, mando solo ad admin
|
||||
if (checkAnomAppr)
|
||||
{
|
||||
@@ -192,11 +195,11 @@ namespace GPW.CORE.Api.Controllers
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie: timbrature da approvare{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
// tabella!
|
||||
doLog("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"font-size: 1.3em; width:100%;\">", logType.none, ref sbMain);
|
||||
doLog("<thead style=\"background-color: #232323; color: #DEDEDE\"><th>DATA</th><th>Dipendente</th></thead>", logType.none, ref sbMain);
|
||||
doLog($"<thead {headRow}><th>DATA</th><th>Dipendente</th></thead>", logType.none, ref sbMain);
|
||||
doLog("<tbody>", logType.none, ref sbMain);
|
||||
int nRow = 0;
|
||||
string stripeRow = "style=\"background-color: #DEDEDE;\"";
|
||||
foreach (var riga in tabTimbExpl)
|
||||
{
|
||||
string sfondo = nRow % 2 == 0 ? "" : stripeRow;
|
||||
@@ -207,11 +210,205 @@ namespace GPW.CORE.Api.Controllers
|
||||
doLog("</tbody>", logType.none, ref sbMain);
|
||||
doLog("</table>", logType.none, ref sbMain);
|
||||
msgBody = sbMain.ToString();
|
||||
await sendEmail(msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||
await sendEmail(adminDestEmail, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||
}
|
||||
}
|
||||
|
||||
// (B) recupero errori entrate/uscite, mando ad admin + utenti
|
||||
if (checkAnomTimb)
|
||||
{
|
||||
numChk++;
|
||||
sbMain = new StringBuilder();
|
||||
var tabDipAndAnom = await dataService.DipAndAnomGetAll(oggi.AddDays(-gg2Chk), oggi.AddHours(1), false, true, false);
|
||||
var tabTimbExpl = await dataService.TimbExplGetAnomalie(0, oggi.AddDays(-gg2Chk), oggi.AddDays(1), false, true, false);
|
||||
// se ho trovato record...
|
||||
if (tabTimbExpl != null && tabTimbExpl.Count > 0)
|
||||
{
|
||||
doLog("Trovate anomalie timbrature IN/OUT non corrispondenti, invio email!", logType.info, ref sbMain);
|
||||
// mando email ad admin!
|
||||
msgTopic = "Anomalie GPW: Timbrature mancanti";
|
||||
if (includeDirectUrl)
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie:{Environment.NewLine}<a href=\"{baseUrl}reviewTimbrature.aspx\">timbrature mancanti</a>{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
else
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie: timbrature mancanti{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
// tabella!
|
||||
doLog("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"font-size: 1.3em; width:100%;\">", logType.none, ref sbMain);
|
||||
doLog($"<thead {headRow}><th>DATA</th><th>Dipendente</th></thead>", logType.none, ref sbMain);
|
||||
doLog("<tbody>", logType.none, ref sbMain);
|
||||
int nRow = 0;
|
||||
foreach (var riga in tabTimbExpl)
|
||||
{
|
||||
string sfondo = nRow % 2 == 0 ? "" : stripeRow;
|
||||
doLog($"<tr {sfondo}><td>{riga.DataLav:yyyy.MM.dd ddd}</td><td>{riga.CognomeNome}</td></tr>", logType.none, ref sbMain);
|
||||
numErr++;
|
||||
nRow++;
|
||||
}
|
||||
doLog("</tbody>", logType.none, ref sbMain);
|
||||
doLog("</table>", logType.none, ref sbMain);
|
||||
msgBody = sbMain.ToString();
|
||||
await sendEmail(adminDestEmail, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||
|
||||
|
||||
// re richiesto invio email utenti x warning entrate/uscrite
|
||||
if (sendEmailToUser)
|
||||
{
|
||||
// mando singole email ai dipendenti SE C'è EMAIL!!!!
|
||||
foreach (var rigaDip in tabDipAndAnom)
|
||||
{
|
||||
sbMain = new StringBuilder();
|
||||
if (!string.IsNullOrEmpty(rigaDip.email))
|
||||
{
|
||||
var tabTimbExplDip = tabTimbExpl.Where(x => x.IdxDipendente == rigaDip.IdxDipendente);
|
||||
// reimposto testo
|
||||
doLog($"Risultano a sistema le seguenti anomalie: timbrature mancanti{Environment.NewLine}", logType.info, ref sbMain);
|
||||
|
||||
// tabella!
|
||||
doLog("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"font-size: 1.3em; width:100%;\">", logType.none, ref sbMain);
|
||||
doLog($"<thead {headRow}><th>DATA</th><th>Dipendente</th></thead>", logType.none, ref sbMain);
|
||||
doLog("<tbody>", logType.none, ref sbMain);
|
||||
nRow = 0;
|
||||
foreach (var riga in tabTimbExplDip)
|
||||
{
|
||||
string sfondo = nRow % 2 == 0 ? "" : stripeRow;
|
||||
doLog($"<tr {sfondo}><td>{riga.DataLav:yyyy.MM.dd ddd}</td><td>{riga.CognomeNome}</td></tr>", logType.none, ref sbMain);
|
||||
nRow++;
|
||||
}
|
||||
doLog("</tbody>", logType.none, ref sbMain);
|
||||
doLog("</table>", logType.none, ref sbMain);
|
||||
msgBody = sbMain.ToString();
|
||||
await sendEmail(rigaDip.email, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// (C) recupero errori mancata copertura orario, mando ad admin
|
||||
if (checkAnomOreLav)
|
||||
{
|
||||
numChk++;
|
||||
sbMain = new StringBuilder();
|
||||
var tabDipAndAnom = await dataService.DipAndAnomGetAll(oggi.AddDays(-gg2Chk), oggi.AddHours(1), false, false, true);
|
||||
var tabTimbExpl = await dataService.TimbExplGetAnomalie(0, oggi.AddDays(-gg2Chk), oggi.AddDays(1), false, false, true);
|
||||
|
||||
// se ho trovato record...
|
||||
if (tabTimbExpl != null && tabTimbExpl.Count > 0)
|
||||
{
|
||||
doLog("Trovate anomalie copertura orario, invio email!", logType.info, ref sbMain);
|
||||
// mando email ad admin!
|
||||
msgTopic = "Anomalie GPW: Ore timbrate";
|
||||
if (includeDirectUrl)
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie:{Environment.NewLine}<a href=\"{baseUrl}reviewTimbrature.aspx\">Orario timbrato non suff a copertura standard</a>{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
else
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie: Orario timbrato non suff a copertura standard{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
// tabella!
|
||||
doLog("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"font-size: 1.3em; width:100%;\">", logType.none, ref sbMain);
|
||||
doLog($"<thead {headRow}><th>DATA</th><th>Dipendente</th></thead>", logType.none, ref sbMain);
|
||||
doLog("<tbody>", logType.none, ref sbMain);
|
||||
int nRow = 0;
|
||||
foreach (var riga in tabTimbExpl)
|
||||
{
|
||||
string sfondo = nRow % 2 == 0 ? "" : stripeRow;
|
||||
doLog($"<tr {sfondo}><td>{riga.DataLav:yyyy.MM.dd ddd}</td><td>{riga.CognomeNome}</td></tr>", logType.none, ref sbMain);
|
||||
numErr++;
|
||||
nRow++;
|
||||
}
|
||||
doLog("</tbody>", logType.none, ref sbMain);
|
||||
doLog("</table>", logType.none, ref sbMain);
|
||||
msgBody = sbMain.ToString();
|
||||
await sendEmail(adminDestEmail, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||
}
|
||||
}
|
||||
|
||||
// (D) recupero errori copertura ore lavorate / ore caricate a commessa...
|
||||
if (checkAnomOreLavComm)
|
||||
{
|
||||
numChk++;
|
||||
sbMain = new StringBuilder();
|
||||
var tabTimbRegAtt = await dataService.TeRaExplGetAll(0, oggi.AddDays(-gg2ChkOreCaricate), oggi.AddHours(1), false, true, maxErrMin, maxErrPlus);
|
||||
// sulla tabella seleziono SE NON E' OK colonna okLavCom
|
||||
var listErrCopertura = tabTimbRegAtt.Where(x => x.okLAvCom == 0).ToList();
|
||||
if (listErrCopertura != null && listErrCopertura.Count() > 0)
|
||||
{
|
||||
doLog("Trovate anomalie ore lavorate / commesse caricate, invio email!", logType.info, ref sbMain);
|
||||
// mando email ad admin!
|
||||
msgTopic = "Anomalie GPW: Ore Caricate a commessa";
|
||||
if (includeDirectUrl)
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie:{Environment.NewLine}<a href=\"{baseUrl}reviewTimbrature.aspx\">Ore caricate a commessa non corrispondenti ad ore lavorate secondo standard</a>{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
else
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie: Ore caricate a commessa non corrispondenti ad ore lavorate secondo standard{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
// tabella!
|
||||
doLog("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"font-size: 1.3em; width:100%;\">", logType.none, ref sbMain);
|
||||
doLog($"<thead {headRow}><th>DATA</th><th>Dipendente</th></thead>", logType.none, ref sbMain);
|
||||
doLog("<tbody>", logType.none, ref sbMain);
|
||||
int nRow = 0;
|
||||
foreach (var riga in listErrCopertura)
|
||||
{
|
||||
string sfondo = nRow % 2 == 0 ? "" : stripeRow;
|
||||
doLog($"<tr {sfondo}><td>{riga.DataLav:yyyy.MM.dd ddd}</td><td>{riga.CognomeNome}</td></tr>", logType.none, ref sbMain);
|
||||
numErr++;
|
||||
nRow++;
|
||||
}
|
||||
doLog("</tbody>", logType.none, ref sbMain);
|
||||
doLog("</table>", logType.none, ref sbMain);
|
||||
msgBody = sbMain.ToString();
|
||||
await sendEmail(adminDestEmail, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// (E) cerco anomalie x orario continuato (no Pausa Pranzo, solo 1 IN, 1 OUT)
|
||||
if (checkAnomContinuato)
|
||||
{
|
||||
numChk++;
|
||||
sbMain = new StringBuilder();
|
||||
var tabTimbExpl = await dataService.TimbExplGetContinuato(0, oggi.AddDays(-gg2ChkCont), oggi.AddHours(1));
|
||||
// se ho trovato record...
|
||||
if (tabTimbExpl != null && tabTimbExpl.Count > 0)
|
||||
{
|
||||
doLog("Trovate anomalie orario continuato, invio email!", logType.info, ref sbMain);
|
||||
// mando email ad admin!
|
||||
msgTopic = "Anomalie GPW: Orario Continuato";
|
||||
if (includeDirectUrl)
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie:{Environment.NewLine}<a href=\"{baseUrl}approvTimbrature.aspx\">Orari continuati da approvare</a>{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
else
|
||||
{
|
||||
doLog($"Risultano a sistema le seguenti anomalie: Orari continuati da approvare{Environment.NewLine}", logType.info, ref sbMain);
|
||||
}
|
||||
// tabella!
|
||||
doLog("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"font-size: 1.3em; width:100%;\">", logType.none, ref sbMain);
|
||||
doLog($"<thead {headRow}><th>DATA</th><th>Dipendente</th></thead>", logType.none, ref sbMain);
|
||||
doLog("<tbody>", logType.none, ref sbMain);
|
||||
int nRow = 0;
|
||||
foreach (var riga in tabTimbExpl)
|
||||
{
|
||||
string sfondo = nRow % 2 == 0 ? "" : stripeRow;
|
||||
doLog($"<tr {sfondo}><td>{riga.DataLav:yyyy.MM.dd ddd}</td><td>{riga.CognomeNome}</td></tr>", logType.none, ref sbMain);
|
||||
numErr++;
|
||||
nRow++;
|
||||
}
|
||||
doLog("</tbody>", logType.none, ref sbMain);
|
||||
doLog("</table>", logType.none, ref sbMain);
|
||||
msgBody = sbMain.ToString();
|
||||
await sendEmail(adminDestEmail, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||
}
|
||||
}
|
||||
|
||||
// Summary di cosa fatto
|
||||
answ = numErr == 0 ? $"Check Anomalie Timbr ALL OK | effettuati {numChk} check" : $"Check Anomalie Timbr KO | effettuati {numChk} check | trovate {numErr} anomalie";
|
||||
|
||||
@@ -4,7 +4,6 @@ using Microsoft.AspNetCore.Identity.UI.Services;
|
||||
using Newtonsoft.Json;
|
||||
using NLog;
|
||||
using StackExchange.Redis;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace GPW.CORE.Api.Data
|
||||
@@ -348,6 +347,26 @@ namespace GPW.CORE.Api.Data
|
||||
return await Task.FromResult(dbResult);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupera record anomalie dipendenti
|
||||
/// </summary>
|
||||
/// <param name="idxDipendente">singolo idx oppure 0 = tutti</param>
|
||||
/// <param name="inizio"></param>
|
||||
/// <param name="fine"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<TimbratureExplModel>> TimbExplGetContinuato(int idxDipendente, DateTime inizio, DateTime fine)
|
||||
{
|
||||
List<TimbratureExplModel> dbResult = new List<TimbratureExplModel>();
|
||||
Stopwatch stopWatch = new Stopwatch();
|
||||
stopWatch.Start();
|
||||
dbResult = dbController.TimbExplGetContinuato(idxDipendente, inizio, fine);
|
||||
stopWatch.Stop();
|
||||
TimeSpan ts = stopWatch.Elapsed;
|
||||
Log.Trace($"Effettuata lettura da DB per TimbExplGetContinuato: {ts.TotalMilliseconds} ms");
|
||||
|
||||
return await Task.FromResult(dbResult);
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
@@ -25,7 +25,8 @@ builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
// abilitazione x email management con MailKit
|
||||
builder.Services.AddTransient<IEmailSender, MailKitEmailSender>();
|
||||
//builder.Services.AddTransient<IEmailSender, MailKitEmailSender>();
|
||||
builder.Services.AddSingleton<IEmailSender, MailKitEmailSender>();
|
||||
builder.Services.Configure<MailKitEmailSenderOptions>(options =>
|
||||
{
|
||||
options.Host_Address = configuration["ExternalProviders:MailKit:SMTP:Address"];
|
||||
|
||||
@@ -47,16 +47,18 @@
|
||||
"ServerConv": {
|
||||
"baseUrl": "https://iis03.egalware.com/GPW/ADMIN/"
|
||||
},
|
||||
"TimbraCheck": {
|
||||
"checkAnomAppr": true,
|
||||
"checkAnomTimb": true,
|
||||
"checkAnomOreLav": true,
|
||||
"checkAnomOreLavComm": true,
|
||||
"checkAnomContinuato": true,
|
||||
"sendEmailToUser": true,
|
||||
"includeDirectUrl": true,
|
||||
"gg2Chk": 60,
|
||||
"gg2ChkCont": 30,
|
||||
"gg2ChkOreCaricate": 30
|
||||
}
|
||||
"TimbraCheck": {
|
||||
"checkAnomAppr": true,
|
||||
"checkAnomTimb": true,
|
||||
"checkAnomOreLav": true,
|
||||
"checkAnomOreLavComm": true,
|
||||
"checkAnomContinuato": true,
|
||||
"sendEmailToUser": false,
|
||||
"includeDirectUrl": true,
|
||||
"gg2Chk": 60,
|
||||
"gg2ChkCont": 30,
|
||||
"gg2ChkOreCaricate": 30,
|
||||
"maxErrMin": -29,
|
||||
"maxErrPlus": 91
|
||||
}
|
||||
}
|
||||
|
||||
@@ -619,7 +619,7 @@ namespace GPW.CORE.Data.Controllers
|
||||
SqlParameter parFine = new SqlParameter("@fine", fine);
|
||||
SqlParameter parNotOkApp = new SqlParameter("@notOkApp", notOkApp);
|
||||
SqlParameter parNotOkTim = new SqlParameter("@notOkTim", notOkTim);
|
||||
SqlParameter parNotOkLav = new SqlParameter("@notOkApp", notOkLav);
|
||||
SqlParameter parNotOkLav = new SqlParameter("@notOkLav", notOkLav);
|
||||
|
||||
var rawResult = localDbCtx
|
||||
.DbSetDipAndAnom
|
||||
@@ -1494,6 +1494,30 @@ namespace GPW.CORE.Data.Controllers
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupera record anomalie dipendenti x orario continuato
|
||||
/// </summary>
|
||||
/// <param name="idxDipendente">singolo idx oppure 0 = tutti</param>
|
||||
/// <param name="inizio"></param>
|
||||
/// <param name="fine"></param>
|
||||
/// <returns></returns>
|
||||
public List<TimbratureExplModel> TimbExplGetContinuato(int idxDipendente, DateTime inizio, DateTime fine)
|
||||
{
|
||||
List<TimbratureExplModel> dbResult = new List<TimbratureExplModel>();
|
||||
using (GPWContext localDbCtx = new GPWContext(_configuration))
|
||||
{
|
||||
SqlParameter parIdxDip = new SqlParameter("@idxDipendente", idxDipendente);
|
||||
SqlParameter parInizio = new SqlParameter("@inizio", inizio);
|
||||
SqlParameter parFine = new SqlParameter("@fine", fine);
|
||||
|
||||
dbResult = localDbCtx
|
||||
.DbSetTimbratureExpl
|
||||
.FromSqlRaw("EXEC stp_timbratureExpl_getContinuato @idxDipendente,@inizio,@fine", parIdxDip, parInizio, parFine)
|
||||
.ToList();
|
||||
}
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
public List<TimbratureModel> TimbratureDay(DateTime dateRif, int IdxDip)
|
||||
{
|
||||
List<TimbratureModel> dbResult = new List<TimbratureModel>();
|
||||
|
||||
@@ -11,13 +11,13 @@ namespace GPW.CORE.Data.DbModels
|
||||
public string CognomeNome { get; set; } = "";
|
||||
public double h_lav { get; set; } = 0;
|
||||
public double h_giust { get; set; } = 0;
|
||||
public double h_com { get; set; } = 0;
|
||||
public decimal h_com { get; set; } = 0;
|
||||
public string progetti { get; set; } = "";
|
||||
public bool okLAvCom { get; set; } = false;
|
||||
public int okLAvCom { get; set; } = 0;
|
||||
public bool isOkTim { get; set; } = false;
|
||||
public bool isOkApp { get; set; } = false;
|
||||
public bool isOkLav { get; set; } = false;
|
||||
public bool isOk { get; set; } = false;
|
||||
public int isOkLav { get; set; } = 0;
|
||||
public int isOk { get; set; } = 0;
|
||||
public bool block { get; set; } = false;
|
||||
public int minOrd { get; set; } = 0;
|
||||
public int minNonLav { get; set; } = 0;
|
||||
@@ -27,14 +27,14 @@ namespace GPW.CORE.Data.DbModels
|
||||
public int minMal { get; set; } = 0;
|
||||
public int minFest { get; set; } = 0;
|
||||
public int minRegAtt { get; set; } = 0;
|
||||
public DateTime? entrata1 { get; set; }
|
||||
public DateTime? uscita1 { get; set; }
|
||||
public DateTime? entrata2 { get; set; }
|
||||
public DateTime? uscita2 { get; set; }
|
||||
public DateTime? entrata3 { get; set; }
|
||||
public DateTime? uscita3 { get; set; }
|
||||
public DateTime? entrata4 { get; set; }
|
||||
public DateTime? uscita4 { get; set; }
|
||||
public DateTime? entrata_1 { get; set; }
|
||||
public DateTime? uscita_1 { get; set; }
|
||||
public DateTime? entrata_2 { get; set; }
|
||||
public DateTime? uscita_2 { get; set; }
|
||||
public DateTime? entrata_3 { get; set; }
|
||||
public DateTime? uscita_3 { get; set; }
|
||||
public DateTime? entrata_4 { get; set; }
|
||||
public DateTime? uscita_4 { get; set; }
|
||||
public int minArcoPres { get; set; } = 0;
|
||||
public string chkFunCod { get; set; } = "";
|
||||
public string chkFunRes { get; set; } = "";
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Version>3.0.2301.2516</Version>
|
||||
<Version>3.0.2301.2518</Version>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>GPW - Gestione Presenze Web</i>
|
||||
<h4>Versione: 3.0.2301.2516</h4>
|
||||
<h4>Versione: 3.0.2301.2518</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
3.0.2301.2516
|
||||
3.0.2301.2518
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>3.0.2301.2516</version>
|
||||
<version>3.0.2301.2518</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
Reference in New Issue
Block a user