public HttpResponseMessage Put([FromBody] CierreViewModel gastos) { G.AbrirConexionAPP(out db); var t = db.Database.BeginTransaction(); try { // G.GuardarTxt("BitLlegada.txt", gastos.ToString()); if (db.EncCierre.Where(a => a.idCierre == gastos.EncCierre.idCierre).FirstOrDefault() != null) { var Cierre = db.EncCierre.Where(a => a.idCierre == gastos.EncCierre.idCierre).FirstOrDefault(); db.Entry(Cierre).State = EntityState.Modified; Cierre.Periodo = Cierre.Periodo;//gastos.EncCierre.Periodo; Cierre.FechaInicial = gastos.EncCierre.FechaInicial; Cierre.FechaFinal = gastos.EncCierre.FechaFinal; Cierre.idLogin = gastos.EncCierre.idLogin; Cierre.SubTotal = gastos.EncCierre.SubTotal; Cierre.Total = gastos.EncCierre.Total; Cierre.CantidadRegistros = 0; Cierre.Descuento = gastos.EncCierre.Descuento; Cierre.FechaCierre = Cierre.FechaCierre;//DateTime.Now; Cierre.Impuestos = gastos.EncCierre.Impuestos; Cierre.Impuesto1 = gastos.EncCierre.Impuesto1; Cierre.Impuesto2 = gastos.EncCierre.Impuesto2; Cierre.Impuesto4 = gastos.EncCierre.Impuesto4; Cierre.Impuesto8 = gastos.EncCierre.Impuesto8; Cierre.Impuesto13 = gastos.EncCierre.Impuesto13; var login = db.Login.Where(a => a.id == Cierre.idLogin).FirstOrDefault(); Cierre.idLoginAceptacion = login.idLoginAceptacion; Cierre.Estado = gastos.EncCierre.Estado; Cierre.Observacion = Cierre.Observacion; Cierre.CodMoneda = gastos.EncCierre.CodMoneda; Cierre.TotalOtrosCargos = gastos.EncCierre.TotalOtrosCargos; Cierre.Observacion = gastos.EncCierre.Observacion; db.SaveChanges(); var FecInicial = Cierre.FechaInicial.AddMonths(-1); var FechaFinal = Cierre.FechaFinal.AddMonths(1); var Facturas = db.EncCompras.Where(a => a.FecFactura >= FecInicial && a.FecFactura <= FechaFinal).ToList(); var Logins = db.Login.ToList(); var Normas = db.NormasReparto.ToList(); var Detalle = db.DetCierre.Where(a => a.idCierre == Cierre.idCierre).ToList(); foreach (var item in Detalle) { var Factura = Facturas.Where(a => a.id == item.idFactura).FirstOrDefault(); db.Entry(Factura).State = EntityState.Modified; Factura.idLoginAsignado = 0; Factura.FecAsignado = null; Factura.Comentario = ""; Factura.idNormaReparto = 0; Factura.idCierre = 0; db.DetCierre.Remove(item); db.SaveChanges(); } int i = 1; foreach (var item in gastos.DetCierre) { DetCierre det = new DetCierre(); det.idCierre = Cierre.idCierre; det.NumLinea = i; det.idFactura = item.idFactura; det.Comentario = item.Comentario; i++; db.DetCierre.Add(det); var Factura = Facturas.Where(a => a.id == item.idFactura).FirstOrDefault(); db.Entry(Factura).State = EntityState.Modified; Factura.idLoginAsignado = Cierre.idLogin; Factura.FecAsignado = DateTime.Now; if (Normas.Where(a => a.idLogin == Cierre.idLogin).FirstOrDefault() == null) { throw new Exception("Este usuario no contiene una norma de reparto asignada"); } Factura.idNormaReparto = Normas.Where(a => a.idLogin == Cierre.idLogin).FirstOrDefault().id; Factura.idCierre = det.idCierre; Factura.idTipoGasto = item.idTipoGasto; Factura.Comentario = item.Comentario; db.SaveChanges(); } db.SaveChanges(); db.Entry(Cierre).State = EntityState.Modified; Cierre.CantidadRegistros = i - 1; db.SaveChanges(); if (gastos.EncCierre.Estado == "E") { SendGridEmail.EmailSender emailsender = new SendGridEmail.EmailSender(); //var Roles = db.Roles.Where(a => a.NombreRol.ToUpper().Contains("APROBADOR")).FirstOrDefault(); var Login = db.Login.Where(a => a.id == login.idLoginAceptacion).FirstOrDefault(); var AsignadoCierre = db.Login.Where(a => a.id == Cierre.idLogin).FirstOrDefault(); var parametros = db.Parametros.FirstOrDefault(); var html = "<h3 style='text-align: center; '><strong>Liquidación pendiente de revisión</strong></h3>"; html += "<p style='text-align: justify; '>Se ha recibido una nueva liquidación de gastos, a continuación los detalles:</p>"; html += "<ul>"; html += "<li style = 'text-align: justify;' ><strong> ID Cierre </strong>: " + Cierre.idCierre + "</li>"; html += "<li style = 'text-align: justify;' ><strong> Nombre </strong>: " + AsignadoCierre.Nombre + "</li>"; html += "<li style='text-align: justify; '><strong>Periodo</strong>: " + Cierre.Periodo + "</li>"; html += "<li style='text-align: justify; '><strong>Cantidad de Facturas: </strong>" + Cierre.CantidadRegistros + "</li>"; html += "<li style='text-align: justify; '><strong>Total</strong>: " + decimal.Round(Cierre.Total.Value, 2) + "</li>"; html += "</ul><p></p> "; html += "<p>Favor revisar en la plataforma <a href='" + parametros.UrlSitioPublicado + "'>" + parametros.UrlSitioPublicado + "</a> para aceptar o denegar dicha liquidación.</p>"; emailsender.SendV2(Login.Email, parametros.RecepcionEmail, "", parametros.RecepcionEmail, "Liquidación", "Liquidación pendiente de revisión", html, parametros.RecepcionHostName, parametros.EnvioPort, parametros.RecepcionUseSSL.Value, parametros.RecepcionEmail, parametros.RecepcionPassword); } if (gastos.EncCierre.Estado == "A" || gastos.EncCierre.Estado == "R") { SendGridEmail.EmailSender emailsender = new SendGridEmail.EmailSender(); //var Roles = db.Roles.Where(a => a.NombreRol.ToUpper().Contains("APROBADOR")).FirstOrDefault(); var AR = gastos.EncCierre.Estado; var Login = db.Login.Where(a => a.id == login.id).FirstOrDefault(); var AsignadoCierre = db.Login.Where(a => a.id == Cierre.idLogin).FirstOrDefault(); var parametros = db.Parametros.FirstOrDefault(); //ó -> Tilde var html = ""; if (AR == "A") { var LoginAceptacion = db.Login.Where(a => a.id == Cierre.idLoginAceptacion).FirstOrDefault(); html = "<h3 style='text-align: center; '><strong>Liquidación Aprobada</strong></h3>"; html += "<p style='text-align: justify; '>Se ha aprobado tú liquidación de gastos, a continuación los detalles:</p>"; html += "<ul>"; html += "<li style = 'text-align: justify;' ><strong> ID Cierre </strong>: " + Cierre.idCierre + "</li>"; html += "<li style = 'text-align: justify;' ><strong> Nombre </strong>: " + AsignadoCierre.Nombre + "</li>"; html += "<li style='text-align: justify; '><strong>Periodo</strong>: " + Cierre.Periodo + "</li>"; html += "<li style='text-align: justify; '><strong>Cantidad de Facturas: </strong>" + Cierre.CantidadRegistros + "</li>"; html += "<li style='text-align: justify; '><strong>Total</strong>: " + decimal.Round(Cierre.Total.Value, 2) + "</li>"; html += "<li style='text-align: justify; '><strong>Usuario Aprobador</strong>: " + LoginAceptacion == null ? "" : LoginAceptacion.Nombre + "</li>"; html += "<li style='text-align: justify; '><strong>Comentarios de la Liquidación</strong>: " + Cierre.Observacion + "</li>"; html += "</ul><p></p> "; html += "<p>Favor revisar en la plataforma <a href='" + parametros.UrlSitioPublicado + "'>" + parametros.UrlSitioPublicado + "</a> para ver más detalles de dicha liquidación.</p>"; } else { var LoginAceptacion = db.Login.Where(a => a.id == Cierre.idLoginAceptacion).FirstOrDefault(); html = "<h3 style='text-align: center; '><strong>Liquidación Rechazada</strong></h3>"; html += "<p style='text-align: justify; '>Se ha rechazado tú liquidación de gastos, a continuación los detalles:</p>"; html += "<ul>"; html += "<li style = 'text-align: justify;' ><strong> ID Cierre </strong>: " + Cierre.idCierre + "</li>"; html += "<li style = 'text-align: justify;' ><strong> Nombre </strong>: " + AsignadoCierre.Nombre + "</li>"; html += "<li style='text-align: justify; '><strong>Periodo</strong>: " + Cierre.Periodo + "</li>"; html += "<li style='text-align: justify; '><strong>Cantidad de Facturas: </strong>" + Cierre.CantidadRegistros + "</li>"; html += "<li style='text-align: justify; '><strong>Total</strong>: " + decimal.Round(Cierre.Total.Value, 2) + "</li>"; html += "<li style='text-align: justify; '><strong>Usuario Aprobador</strong>: " + LoginAceptacion == null ? "" : LoginAceptacion.Nombre + "</li>"; html += "<li style='text-align: justify; '><strong>Comentarios de la Liquidación</strong>: " + Cierre.Observacion + "</li>"; html += "</ul><p></p> "; html += "<p>Favor revisar en la plataforma <a href='" + parametros.UrlSitioPublicado + "'>" + parametros.UrlSitioPublicado + "</a> para ver más detalles de dicha liquidación.</p>"; } emailsender.SendV2(Login.Email, parametros.RecepcionEmail, "", parametros.RecepcionEmail, "Liquidación", "Respuesta de la liquidación", html, parametros.RecepcionHostName, parametros.EnvioPort, parametros.RecepcionUseSSL.Value, parametros.RecepcionEmail, parametros.RecepcionPassword); } t.Commit(); G.CerrarConexionAPP(db); return(Request.CreateResponse(HttpStatusCode.OK)); } else { throw new Exception("Este cierre no existe"); } } catch (Exception ex) { t.Rollback(); G.GuardarTxt("ErrorCierre" + DateTime.Now.Day + "" + DateTime.Now.Month + "" + DateTime.Now.Year + ".txt", ex.ToString()); BitacoraErrores be = new BitacoraErrores(); be.Descripcion = ex.Message; be.StackTrace = (string.IsNullOrEmpty(ex.InnerException.Message) ? ex.StackTrace : ex.InnerException.Message); be.Metodo = "Actualizacion de Cierre"; be.Fecha = DateTime.Now; db.BitacoraErrores.Add(be); db.SaveChanges(); G.CerrarConexionAPP(db); return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex)); } }
public HttpResponseMessage Post([FromBody] CierreViewModel gastos) { G.AbrirConexionAPP(out db); var t = db.Database.BeginTransaction(); try { var Candado = db.EncCierre.Where(a => a.Periodo.ToUpper().Contains(gastos.EncCierre.Periodo.ToUpper()) && a.Estado != "A" && a.CodMoneda == gastos.EncCierre.CodMoneda && a.FechaInicial <= gastos.EncCierre.FechaCierre && a.FechaFinal >= gastos.EncCierre.FechaCierre && a.idLogin == gastos.EncCierre.idLogin).FirstOrDefault(); if (Candado != null) { throw new Exception("Ya existe una liquidacion con la moneda " + gastos.EncCierre.CodMoneda + " en este periodo " + gastos.EncCierre.Periodo + " idlogin: "******"No se puede insertar una liquidacion con ninguna factura"); } var Cierre = new EncCierre(); Cierre.Periodo = gastos.EncCierre.Periodo; Cierre.FechaInicial = gastos.EncCierre.FechaInicial; Cierre.FechaFinal = gastos.EncCierre.FechaFinal; Cierre.idLogin = gastos.EncCierre.idLogin; Cierre.SubTotal = gastos.EncCierre.SubTotal; Cierre.Total = gastos.EncCierre.Total; Cierre.CantidadRegistros = 0; Cierre.Descuento = gastos.EncCierre.Descuento; Cierre.FechaCierre = DateTime.Now; Cierre.Impuestos = gastos.EncCierre.Impuestos; Cierre.Impuesto1 = gastos.EncCierre.Impuesto1; Cierre.Impuesto2 = gastos.EncCierre.Impuesto2; Cierre.Impuesto4 = gastos.EncCierre.Impuesto4; Cierre.Impuesto8 = gastos.EncCierre.Impuesto8; Cierre.Impuesto13 = gastos.EncCierre.Impuesto13; var login = db.Login.Where(a => a.id == Cierre.idLogin).FirstOrDefault(); Cierre.idLoginAceptacion = login.idLoginAceptacion; Cierre.Estado = gastos.EncCierre.Estado; Cierre.Observacion = ""; Cierre.CodMoneda = gastos.EncCierre.CodMoneda; Cierre.TotalOtrosCargos = gastos.EncCierre.TotalOtrosCargos; Cierre.ProcesadaSAP = false; Cierre.Observacion = gastos.EncCierre.Observacion; db.EncCierre.Add(Cierre); db.SaveChanges(); var FecIni = Cierre.FechaInicial.AddDays(-1); var FecFin = Cierre.FechaFinal.AddDays(1); var Facturas = db.EncCompras.Where(a => a.FecFactura >= FecIni && a.FecFactura <= FecFin).ToList(); var Logins = db.Login.ToList(); var Normas = db.NormasReparto.ToList(); int i = 1; foreach (var item in gastos.DetCierre) { DetCierre det = new DetCierre(); det.idCierre = Cierre.idCierre; det.NumLinea = i; det.idFactura = item.idFactura; det.Comentario = item.Comentario; i++; db.DetCierre.Add(det); var Factura = Facturas.Where(a => a.id == item.idFactura).FirstOrDefault(); if (Normas.Where(a => a.idLogin == Cierre.idLogin).FirstOrDefault() == null) { throw new Exception("Este usuario " + login.Nombre + " no contiene una norma de reparto asignada"); } db.Entry(Factura).State = EntityState.Modified; Factura.idLoginAsignado = Cierre.idLogin; Factura.FecAsignado = DateTime.Now; Factura.idNormaReparto = Normas.Where(a => a.idLogin == Cierre.idLogin).FirstOrDefault().id; Factura.idCierre = det.idCierre; Factura.idTipoGasto = item.idTipoGasto; Factura.Comentario = item.Comentario; db.SaveChanges(); } db.SaveChanges(); db.Entry(Cierre).State = EntityState.Modified; Cierre.CantidadRegistros = i - 1; db.SaveChanges(); if (gastos.EncCierre.Estado == "E") { SendGridEmail.EmailSender emailsender = new SendGridEmail.EmailSender(); //var Roles = db.Roles.Where(a => a.NombreRol.ToUpper().Contains("APROBADOR")).FirstOrDefault(); var Login = db.Login.Where(a => a.id == login.idLoginAceptacion).FirstOrDefault(); var AsignadoCierre = db.Login.Where(a => a.id == Cierre.idLogin).FirstOrDefault(); var parametros = db.Parametros.FirstOrDefault(); var html = "<h3 style='text-align: center; '><strong>Liquidación pendiente de revisión</strong></h3>"; html += "<p style='text-align: justify; '>Se ha recibido una nueva liquidación de gastos, a continuación los detalles:</p>"; html += "<ul>"; html += "<li style = 'text-align: justify;' ><strong> ID Cierre </strong>: " + Cierre.idCierre + "</li>"; html += "<li style = 'text-align: justify;' ><strong> Nombre </strong>: " + AsignadoCierre.Nombre + "</li>"; html += "<li style='text-align: justify; '><strong>Periodo</strong>: " + Cierre.Periodo + "</li>"; html += "<li style='text-align: justify; '><strong>Cantidad de Facturas: </strong>" + Cierre.CantidadRegistros + "</li>"; html += "<li style='text-align: justify; '><strong>Total</strong>: " + decimal.Round(Cierre.Total.Value, 2) + "</li>"; html += "</ul><p></p> "; html += "<p>Favor revisar en la plataforma <a href='" + parametros.UrlSitioPublicado + "'>" + parametros.UrlSitioPublicado + "</a> para aceptar o denegar dicha liquidación.</p>"; emailsender.SendV2(Login.Email, parametros.RecepcionEmail, "", parametros.RecepcionEmail, "Liquidación", "Liquidación pendiente de revisión", html, parametros.RecepcionHostName, parametros.EnvioPort, parametros.RecepcionUseSSL.Value, parametros.RecepcionEmail, parametros.RecepcionPassword); } t.Commit(); G.CerrarConexionAPP(db); return(Request.CreateResponse(HttpStatusCode.OK)); } catch (Exception ex) { t.Rollback(); G.GuardarTxt("ErrorCierre" + DateTime.Now.Day + "" + DateTime.Now.Month + "" + DateTime.Now.Year + ".txt", ex.ToString()); BitacoraErrores be = new BitacoraErrores(); be.Descripcion = ex.Message; be.StackTrace = ex.StackTrace; be.Metodo = "Insercion de Cierre"; be.Fecha = DateTime.Now; db.BitacoraErrores.Add(be); db.SaveChanges(); G.CerrarConexionAPP(db); return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex)); } }