public HttpResponseMessage AgregarMontosEstimados([FromBody] MontosEstimados_Agregar_Parametro data) { if (!User.Identity.IsAuthenticated) { var errorResult = new { ErrorFlag = true, ResultMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función." }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } if (data.AnoCopiarDesde != null && string.IsNullOrEmpty(data.MontosEjecutadosEstimados)) { var errorResult = new { ErrorFlag = true, ResultMessage = "<b>Error:</b> si Ud. desea inicializar los montos estimados en base a un año, " + "debe indicar el <em>tipo de monto base</em>: estimados o ejecutados." }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } try { dbContab_Contab_Entities context = new dbContab_Contab_Entities(); int itemsLeidos = 0; int itemsAgregados = 0; int itemsYaExistian = 0; string message = ""; // nos aseguramos de leer solo códigos para la cía seleccionada ... var query = context.Presupuesto_Codigos.Include("Presupuesto_Montos").Where(p => p.CiaContab == data.CiaContabSeleccionada); // leemos usando el filtro o año/moneda (nota: si viene un filtro es por 'aplicarSoloItemsSeleccionados'; de otra forma, el filtro es nulls // leemos solo 'no grupos' y 'no suspendidos' query = query.Where(c => !c.GrupoFlag); query = query.Where(c => !c.SuspendidoFlag); Presupuesto_Montos montoEstimadoAnoBase = null; // para leer los montos estimados de un año 'base', si el usuario lo indicó Presupuesto_Montos montoEstimado; foreach (var codigoPresupuesto in query) { // intentamos leer un año monto 'base', para usar como base cuando agreguemos los montos if (data.AnoCopiarDesde != null) { montoEstimadoAnoBase = context.Presupuesto_Montos.Where(m => m.CiaContab == data.CiaContabSeleccionada). Where(m => m.Moneda == data.MonedaID). Where(m => m.Ano == data.AnoCopiarDesde). Where(m => m.CodigoPresupuesto == codigoPresupuesto.Codigo). FirstOrDefault(); } montoEstimado = codigoPresupuesto.Presupuesto_Montos.Where(m => m.Moneda == data.MonedaID). Where(m => m.Ano == data.Ano). FirstOrDefault(); if (montoEstimadoAnoBase != null) { // el usuario indicó un año 'base' y existe un monto para este año y el código tratado if (montoEstimado != null) { // el monto estimado existe para el código de presupuesto; lo actualizamos en base a los montos del año base // nótese como usamos los montos estimados o ejecutados, según la definición que el usuario haya indicado if (data.ActualizarMontosSiExisten.HasValue && data.ActualizarMontosSiExisten.Value) { if (data.MontosEjecutadosEstimados == "ejecutados") { montoEstimado.Mes01_Est = montoEstimadoAnoBase.Mes01_Eje != null ? montoEstimadoAnoBase.Mes01_Eje : 0; montoEstimado.Mes02_Est = montoEstimadoAnoBase.Mes02_Eje != null ? montoEstimadoAnoBase.Mes02_Eje : 0; montoEstimado.Mes03_Est = montoEstimadoAnoBase.Mes03_Eje != null ? montoEstimadoAnoBase.Mes03_Eje : 0; montoEstimado.Mes04_Est = montoEstimadoAnoBase.Mes04_Eje != null ? montoEstimadoAnoBase.Mes04_Eje : 0; montoEstimado.Mes05_Est = montoEstimadoAnoBase.Mes05_Eje != null ? montoEstimadoAnoBase.Mes05_Eje : 0; montoEstimado.Mes06_Est = montoEstimadoAnoBase.Mes06_Eje != null ? montoEstimadoAnoBase.Mes06_Eje : 0; montoEstimado.Mes07_Est = montoEstimadoAnoBase.Mes07_Eje != null ? montoEstimadoAnoBase.Mes07_Eje : 0; montoEstimado.Mes08_Est = montoEstimadoAnoBase.Mes08_Eje != null ? montoEstimadoAnoBase.Mes08_Eje : 0; montoEstimado.Mes09_Est = montoEstimadoAnoBase.Mes09_Eje != null ? montoEstimadoAnoBase.Mes09_Eje : 0; montoEstimado.Mes10_Est = montoEstimadoAnoBase.Mes10_Eje != null ? montoEstimadoAnoBase.Mes10_Eje : 0; montoEstimado.Mes11_Est = montoEstimadoAnoBase.Mes11_Eje != null ? montoEstimadoAnoBase.Mes11_Eje : 0; montoEstimado.Mes12_Est = montoEstimadoAnoBase.Mes12_Eje != null ? montoEstimadoAnoBase.Mes12_Eje : 0; } else { montoEstimado.Mes01_Est = montoEstimadoAnoBase.Mes01_Est != null ? montoEstimadoAnoBase.Mes01_Est : 0; montoEstimado.Mes02_Est = montoEstimadoAnoBase.Mes02_Est != null ? montoEstimadoAnoBase.Mes02_Est : 0; montoEstimado.Mes03_Est = montoEstimadoAnoBase.Mes03_Est != null ? montoEstimadoAnoBase.Mes03_Est : 0; montoEstimado.Mes04_Est = montoEstimadoAnoBase.Mes04_Est != null ? montoEstimadoAnoBase.Mes04_Est : 0; montoEstimado.Mes05_Est = montoEstimadoAnoBase.Mes05_Est != null ? montoEstimadoAnoBase.Mes05_Est : 0; montoEstimado.Mes06_Est = montoEstimadoAnoBase.Mes06_Est != null ? montoEstimadoAnoBase.Mes06_Est : 0; montoEstimado.Mes07_Est = montoEstimadoAnoBase.Mes07_Est != null ? montoEstimadoAnoBase.Mes07_Est : 0; montoEstimado.Mes08_Est = montoEstimadoAnoBase.Mes08_Est != null ? montoEstimadoAnoBase.Mes08_Est : 0; montoEstimado.Mes09_Est = montoEstimadoAnoBase.Mes09_Est != null ? montoEstimadoAnoBase.Mes09_Est : 0; montoEstimado.Mes10_Est = montoEstimadoAnoBase.Mes10_Est != null ? montoEstimadoAnoBase.Mes10_Est : 0; montoEstimado.Mes11_Est = montoEstimadoAnoBase.Mes11_Est != null ? montoEstimadoAnoBase.Mes11_Est : 0; montoEstimado.Mes12_Est = montoEstimadoAnoBase.Mes12_Est != null ? montoEstimadoAnoBase.Mes12_Est : 0; } itemsYaExistian++; } } else { // el monto estimado no existe, lo creamos en base al año base montoEstimado = new Presupuesto_Montos(); montoEstimado.CodigoPresupuesto = codigoPresupuesto.Codigo; montoEstimado.CiaContab = codigoPresupuesto.CiaContab; montoEstimado.Moneda = data.MonedaID; montoEstimado.Ano = data.Ano; if (data.MontosEjecutadosEstimados == "ejecutados") { montoEstimado.Mes01_Est = montoEstimadoAnoBase.Mes01_Eje != null ? montoEstimadoAnoBase.Mes01_Eje : 0; montoEstimado.Mes02_Est = montoEstimadoAnoBase.Mes02_Eje != null ? montoEstimadoAnoBase.Mes02_Eje : 0; montoEstimado.Mes03_Est = montoEstimadoAnoBase.Mes03_Eje != null ? montoEstimadoAnoBase.Mes03_Eje : 0; montoEstimado.Mes04_Est = montoEstimadoAnoBase.Mes04_Eje != null ? montoEstimadoAnoBase.Mes04_Eje : 0; montoEstimado.Mes05_Est = montoEstimadoAnoBase.Mes05_Eje != null ? montoEstimadoAnoBase.Mes05_Eje : 0; montoEstimado.Mes06_Est = montoEstimadoAnoBase.Mes06_Eje != null ? montoEstimadoAnoBase.Mes06_Eje : 0; montoEstimado.Mes07_Est = montoEstimadoAnoBase.Mes07_Eje != null ? montoEstimadoAnoBase.Mes07_Eje : 0; montoEstimado.Mes08_Est = montoEstimadoAnoBase.Mes08_Eje != null ? montoEstimadoAnoBase.Mes08_Eje : 0; montoEstimado.Mes09_Est = montoEstimadoAnoBase.Mes09_Eje != null ? montoEstimadoAnoBase.Mes09_Eje : 0; montoEstimado.Mes10_Est = montoEstimadoAnoBase.Mes10_Eje != null ? montoEstimadoAnoBase.Mes10_Eje : 0; montoEstimado.Mes11_Est = montoEstimadoAnoBase.Mes11_Eje != null ? montoEstimadoAnoBase.Mes11_Eje : 0; montoEstimado.Mes12_Est = montoEstimadoAnoBase.Mes12_Eje != null ? montoEstimadoAnoBase.Mes12_Eje : 0; } else { montoEstimado.Mes01_Est = montoEstimadoAnoBase.Mes01_Est != null ? montoEstimadoAnoBase.Mes01_Est : 0; montoEstimado.Mes02_Est = montoEstimadoAnoBase.Mes02_Est != null ? montoEstimadoAnoBase.Mes02_Est : 0; montoEstimado.Mes03_Est = montoEstimadoAnoBase.Mes03_Est != null ? montoEstimadoAnoBase.Mes03_Est : 0; montoEstimado.Mes04_Est = montoEstimadoAnoBase.Mes04_Est != null ? montoEstimadoAnoBase.Mes04_Est : 0; montoEstimado.Mes05_Est = montoEstimadoAnoBase.Mes05_Est != null ? montoEstimadoAnoBase.Mes05_Est : 0; montoEstimado.Mes06_Est = montoEstimadoAnoBase.Mes06_Est != null ? montoEstimadoAnoBase.Mes06_Est : 0; montoEstimado.Mes07_Est = montoEstimadoAnoBase.Mes07_Est != null ? montoEstimadoAnoBase.Mes07_Est : 0; montoEstimado.Mes08_Est = montoEstimadoAnoBase.Mes08_Est != null ? montoEstimadoAnoBase.Mes08_Est : 0; montoEstimado.Mes09_Est = montoEstimadoAnoBase.Mes09_Est != null ? montoEstimadoAnoBase.Mes09_Est : 0; montoEstimado.Mes10_Est = montoEstimadoAnoBase.Mes10_Est != null ? montoEstimadoAnoBase.Mes10_Est : 0; montoEstimado.Mes11_Est = montoEstimadoAnoBase.Mes11_Est != null ? montoEstimadoAnoBase.Mes11_Est : 0; montoEstimado.Mes12_Est = montoEstimadoAnoBase.Mes12_Est != null ? montoEstimadoAnoBase.Mes12_Est : 0; } codigoPresupuesto.Presupuesto_Montos.Add(montoEstimado); itemsAgregados++; } } else { // el monto para el año base no existe o el usuario no indicó uno (el tratamiendo aplicado es el mismo) if (montoEstimado == null) { // el monto estimado no existe, lo creamos con sus montos en cero montoEstimado = new Presupuesto_Montos(); montoEstimado.CodigoPresupuesto = codigoPresupuesto.Codigo; montoEstimado.CiaContab = codigoPresupuesto.CiaContab; montoEstimado.Moneda = data.MonedaID; montoEstimado.Ano = data.Ano; montoEstimado.Mes01_Est = 0; montoEstimado.Mes02_Est = 0; montoEstimado.Mes03_Est = 0; montoEstimado.Mes04_Est = 0; montoEstimado.Mes05_Est = 0; montoEstimado.Mes06_Est = 0; montoEstimado.Mes07_Est = 0; montoEstimado.Mes08_Est = 0; montoEstimado.Mes09_Est = 0; montoEstimado.Mes10_Est = 0; montoEstimado.Mes11_Est = 0; montoEstimado.Mes12_Est = 0; codigoPresupuesto.Presupuesto_Montos.Add(montoEstimado); itemsAgregados++; } else { // el monto estimado existe, pero no se ha leído un monto 'base' de otro año; // tan solo revisamos si existen montos en null, para ponerlos en cero ... if (montoEstimado.Mes01_Est == null) { montoEstimado.Mes01_Est = 0; } if (montoEstimado.Mes02_Est == null) { montoEstimado.Mes02_Est = 0; } if (montoEstimado.Mes03_Est == null) { montoEstimado.Mes03_Est = 0; } if (montoEstimado.Mes04_Est == null) { montoEstimado.Mes04_Est = 0; } if (montoEstimado.Mes05_Est == null) { montoEstimado.Mes05_Est = 0; } if (montoEstimado.Mes06_Est == null) { montoEstimado.Mes06_Est = 0; } if (montoEstimado.Mes07_Est == null) { montoEstimado.Mes07_Est = 0; } if (montoEstimado.Mes08_Est == null) { montoEstimado.Mes08_Est = 0; } if (montoEstimado.Mes09_Est == null) { montoEstimado.Mes09_Est = 0; } if (montoEstimado.Mes10_Est == null) { montoEstimado.Mes10_Est = 0; } if (montoEstimado.Mes11_Est == null) { montoEstimado.Mes11_Est = 0; } if (montoEstimado.Mes12_Est == null) { montoEstimado.Mes12_Est = 0; } } } itemsLeidos++; } context.SaveChanges(); message = "Ok, " + itemsLeidos.ToString() + " códigos de presupuesto han sido leídos;<br />" + "para éstos, " + itemsAgregados.ToString() + " registros (de montos estimados) han sido agregados, pues no existían; <br /> " + itemsYaExistian.ToString() + " han sido actualizados pues existían."; var result = new { ErrorFlag = false, ResultMessage = message }; return(Request.CreateResponse(HttpStatusCode.OK, result)); } catch (Exception ex) { string message = ex.Message; if (ex.InnerException != null) { message += "<br />" + ex.InnerException.Message; } var errorResult = new { ErrorFlag = true, ResultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "El mensaje específico de error es: <br />" + message }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } }
public HttpResponseMessage GrabarItemsEditados([FromUri] int ciaContabSeleccionada, [FromBody] List <MontoEstimadoEditado> data) { if (!User.Identity.IsAuthenticated) { var errorResult = new { ErrorFlag = true, ErrorMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función." }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } try { // el criterio es un json, pero viene como un string //List<CodigoPresupuestoEditado> codigosPresupuestoEditados = new List<CodigoPresupuestoEditado>(); //codigosPresupuestoEditados = JsonConvert.DeserializeObject<List<CodigoPresupuestoEditado>>(data); dbContab_Contab_Entities context = new dbContab_Contab_Entities(); var itemsAgregados = 0; var itemsEditados = 0; var itemsEliminados = 0; string message = ""; foreach (var item in data) { // ----------------------------------------------------------------------------------------------------------- // nótese como validamos cada item usando los atributos que definimos en la clase (poco) ... // Use the ValidationContext to validate the Product model against the product data annotations // before saving it to the database var validationContext = new ValidationContext(item, serviceProvider: null, items: null); var validationResults = new List <ValidationResult>(); var isValid = Validator.TryValidateObject(item, validationContext, validationResults, true); // If there are any exceptions, return them in the return result if (!isValid) { foreach (ValidationResult validationResult in validationResults) { if (message == "") { message = "<li>" + validationResult.ErrorMessage + "</li>"; } else { message += "<li>" + validationResult.ErrorMessage + "</li>"; } } var errorResult = new { ErrorFlag = true, ResultMessage = "<b>Error:</b> se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "<b>El mensaje específico de error es:</b><ul>" + message + "</ul>" }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } // ----------------------------------------------------------------------------------------------------------- if (item.isDeleted.HasValue && item.isDeleted.Value) { var montoEstimado = context.Presupuesto_Montos .Where(p => p.CodigoPresupuesto == item.Codigo && p.Ano == item.Ano && p.Moneda == item.Moneda && p.CiaContab == ciaContabSeleccionada). FirstOrDefault(); if (montoEstimado != null) { context.Presupuesto_Montos.DeleteObject(montoEstimado); itemsEliminados++; } } ; if (item.isEdited.HasValue && item.isEdited.Value) { var montoEstimado = context.Presupuesto_Montos .Where(p => p.CodigoPresupuesto == item.Codigo && p.Ano == item.Ano && p.Moneda == item.Moneda && p.CiaContab == ciaContabSeleccionada). FirstOrDefault(); if (montoEstimado != null) { // nótese que cambiamos solo los montos; otros valores (código, ano, moneda y cia) son parte del pk y entity framework // no permite cambiarlos montoEstimado.Mes01_Est = item.Mes01_Est; montoEstimado.Mes02_Est = item.Mes02_Est; montoEstimado.Mes03_Est = item.Mes03_Est; montoEstimado.Mes04_Est = item.Mes04_Est; montoEstimado.Mes05_Est = item.Mes05_Est; montoEstimado.Mes06_Est = item.Mes06_Est; montoEstimado.Mes07_Est = item.Mes07_Est; montoEstimado.Mes08_Est = item.Mes08_Est; montoEstimado.Mes09_Est = item.Mes09_Est; montoEstimado.Mes10_Est = item.Mes10_Est; montoEstimado.Mes11_Est = item.Mes11_Est; montoEstimado.Mes12_Est = item.Mes12_Est; itemsEditados++; } } ; if (item.isNew.HasValue && item.isNew.Value) { var montoEstimado = new Presupuesto_Montos(); montoEstimado.CodigoPresupuesto = item.Codigo; montoEstimado.Moneda = item.Moneda; montoEstimado.Ano = item.Ano; montoEstimado.CiaContab = ciaContabSeleccionada; montoEstimado.Mes01_Est = item.Mes01_Est; montoEstimado.Mes02_Est = item.Mes02_Est; montoEstimado.Mes03_Est = item.Mes03_Est; montoEstimado.Mes04_Est = item.Mes04_Est; montoEstimado.Mes05_Est = item.Mes05_Est; montoEstimado.Mes06_Est = item.Mes06_Est; montoEstimado.Mes07_Est = item.Mes07_Est; montoEstimado.Mes08_Est = item.Mes08_Est; montoEstimado.Mes09_Est = item.Mes09_Est; montoEstimado.Mes10_Est = item.Mes10_Est; montoEstimado.Mes11_Est = item.Mes11_Est; montoEstimado.Mes12_Est = item.Mes12_Est; context.Presupuesto_Montos.AddObject(montoEstimado); itemsAgregados++; } } context.SaveChanges(); message = "Ok, " + itemsAgregados.ToString() + " registros han sido agregados; " + itemsEditados.ToString() + " registros han sido modificados; " + itemsEliminados.ToString() + " registros han sido eliminados. "; var result = new { ErrorFlag = false, ResultMessage = message }; return(Request.CreateResponse(HttpStatusCode.OK, result)); } catch (Exception ex) { string message = ex.Message; if (ex.InnerException != null) { message += "<br />" + ex.InnerException.Message; } var errorResult = new { ErrorFlag = true, ResultMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "El mensaje específico de error es: <br />" + message }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } }