solved
This is the code you use in case someone needs it.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DAO;
using DAO.Helpers;
using System.Configuration;
using DAO.util;
using System.Data.Entity.Validation;
namespace jobAlertaRegistroEsfuerzo
{
class alertaRegistroEsfuerzo
{
static void Main(string[] args)
{
List<USUARIO> usuarioList = new List<USUARIO>(); //instanciar la tabla usuario
int numDía = 0;
DateTime diaAnterior = DateTime.Now.AddDays(-1); //resta un dia
numDía = (int)diaAnterior.DayOfWeek;
string CantidadHorasRegistroString = System.Configuration.ConfigurationManager.AppSettings["CantidadHorasRegistro"].ToString();
int CantidadHorasRegistro = Convert.ToInt32(CantidadHorasRegistroString);
if (numDía == (int)DayOfWeek.Saturday)
{
diaAnterior = diaAnterior.AddDays(-1); // si es sabado resta un dia
}
else if (numDía == (int)DayOfWeek.Sunday)
{
diaAnterior = diaAnterior.AddDays(-2); //si es lunes resta dos dias
}
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string mailWarning = String.Empty;
string tagHora = ConfigurationManager.AppSettings["tagHora"].ToString();
string tagDia = ConfigurationManager.AppSettings["tagDia"].ToString();
string fileNameServiceDesk = ConfigurationManager.AppSettings["fileNameServiceDesk"].ToString();
string dirLog = ConfigurationManager.AppSettings["dirLog"].ToString();
string fileLog = ConfigurationManager.AppSettings["fileLog"].ToString();
string fileData = String.Empty;
string sHash = DateTime.Now.ToString("yyyyMMdd_HHmmss_");
string line = String.Empty;
string fileNameServiceDeskFullPath = System.IO.Path.GetFullPath(fileNameServiceDesk);
fileLog = dirLog + sHash + fileLog;
fileData = dirLog + sHash + fileNameServiceDesk;
/* Relative Path */
string fileNameMailWarning = ConfigurationManager.AppSettings["fileNameMailWarning"].ToString();
using (var db = new Entities()) //conexion
{
usuarioList = db.USUARIOs.Where(rr => rr.INDICADOR_REGISTRO == true).ToList(); //todos los usuarios que tienen el indicador = 1
foreach (var usuario in usuarioList) // repite instrucciones
{
List<PP_REGISTRO_ESFUERZO> registroEsfuerzo = new List<PP_REGISTRO_ESFUERZO>();
decimal horasRegistro = 0;
registroEsfuerzo = usuario.PP_REGISTRO_ESFUERZO.Where(rr => (rr.FECHA_HORA_REGISTRO.Day == diaAnterior.Day) && (rr.FECHA_HORA_REGISTRO.Month == diaAnterior.Month) && (rr.FECHA_HORA_REGISTRO.Year == diaAnterior.Year)).ToList();
PP_MAIL_SISTEMA mailSistema = new PP_MAIL_SISTEMA();
try
{
mailWarning = System.IO.File.ReadAllText(fileNameMailWarning, encoding);
}
catch (Exception ex)
{
utilLog.writeLog(dirLog, fileLog, "Obteniendo templates", ex.Message, true);
return;
}
//To send mail
string mailBody = mailWarning;
mailBody = mailBody.Replace(tagHora, CantidadHorasRegistroString);
mailBody = mailBody.Replace(tagDia, diaAnterior.ToString("dd/MM/yyyy"));
if (registroEsfuerzo.Count() == 0)
{
mailSistema.ID_USUARIO = usuario.ID_USUARIO;
mailSistema.PARA_MAIL_SISTEMA = usuario.CORREO;
mailSistema.ASUNTO_MAIL_SISTEMA = null;
mailSistema.BODY_MAIL_SISTEMA = mailBody;
mailSistema.CC_MAIL_SISTEMA = null;
mailSistema.FECHA_ENVIO_MAIL_SISTEMA = null;
mailSistema.FECHA_REGISTRO_MAIL_SISTEMA = DateTime.Now;
db.PP_MAIL_SISTEMA.Add(mailSistema);
// enviar correo
}
else
{
horasRegistro = registroEsfuerzo.Sum(rr => rr.HORA_REGISTRO);
if (horasRegistro < CantidadHorasRegistro)
{
mailSistema.ID_USUARIO = usuario.ID_USUARIO;
mailSistema.PARA_MAIL_SISTEMA = usuario.CORREO;
mailSistema.ASUNTO_MAIL_SISTEMA = null;
mailSistema.BODY_MAIL_SISTEMA = mailBody;
mailSistema.CC_MAIL_SISTEMA = null;
mailSistema.FECHA_ENVIO_MAIL_SISTEMA = null;
mailSistema.FECHA_REGISTRO_MAIL_SISTEMA = DateTime.Now;
db.PP_MAIL_SISTEMA.Add(mailSistema);
}
}
}
string logError = string.Empty;
try
{
db.SaveChanges(); // guarda registro
}
catch (DbEntityValidationException ex)
{
// Retrieve the error messages as a list of strings.
var errorMessages = ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.ErrorMessage);
// Join the list to a single string.
var fullErrorMessage = string.Join("; ", errorMessages);
//isError = true;
// raise a new exception nesting
// the current instance as InnerException
logError += ex.Message + ",";
// Combine the original exception message with the new one.
var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
// Throw a new DbEntityValidationException with the improved exception message.
throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
}
}
}
}
}