public ActionResult GridViewGastosDetalleMesesPartial() { long baseID = -1; if (Request.Params["_oId"] != null) { long.TryParse(Request.Params["_oId"], out baseID); } int departamentoId = -1; if (Request.Params["Clave_Departamento"] != null) { int.TryParse(Request.Params["Clave_Departamento"], out departamentoId); } int detalleId = -1; if (Request.Params["Clave_Detalle"] != null) { int.TryParse(Request.Params["Clave_Detalle"], out detalleId); } int conceptoId = -1; if (Request.Params["Clave_Concepto"] != null) { int.TryParse(Request.Params["Clave_Concepto"], out conceptoId); } string desc_Concepto = Request.Params["Desc_Concepto"] ?? ""; DescripcionProducto _gasto = _unitOfWork.GetRepositoryInstance <Pre_GastosBase>().GetAllRecordsIQueryable() .Where(a => a.Oid == baseID) .Select(g => new DescripcionProducto { Familia = g.Desc_Area, Producto = g.NSubcuenta }) .FirstOrDefault(); if (_gasto == null) { _gasto = new DescripcionProducto(); _gasto.Familia = ""; _gasto.Producto = ""; } IRepositoryWrapper _repository = new RepositoryWrapper(); // SE VALIDA SI DEBE BUSCAR Y EN CASO DE QUE SI, VALIDA SI DEBE CREAR EL DETALLE CON O SIN DEPARTAMENTO if (baseID > 0 && departamentoId > 0 && detalleId > -1 && conceptoId > -1) { if (!_repository.GastoDetalle.existe(baseID, departamentoId, detalleId, conceptoId)) { var resulta = _repository.GastoDetalle.Create(departamentoId, baseID, detalleId, conceptoId, desc_Concepto); if (!resulta.Item1) { throw new Exception(string.Join(Environment.NewLine, resulta.Item2)); } } } var deptoAndUnidad = _repository.GastoDepartamento.GetGastoByDepartamentoAndUnidadAndDetalle(baseID, departamentoId); if (deptoAndUnidad == null) { deptoAndUnidad = new PreGastoDepartamento(); deptoAndUnidad.PreGastoUnidad.Add(new PreGastoUnidad()); } var unidadAndDetalle = deptoAndUnidad.PreGastoUnidad.Where(d => d.UnidadId == detalleId).SingleOrDefault(); if (unidadAndDetalle == null) { unidadAndDetalle = new PreGastoUnidad(); unidadAndDetalle.PreGastoDetalleMensual.Add(new PreGastoDetalleMensual()); } var model = unidadAndDetalle.PreGastoDetalleMensual.Where(d => d.DetalleId == conceptoId).ToList(); ViewData["Articulo"] = string.Format("{0}<br>{1}", _gasto.Familia, _gasto.Producto); return(PartialView("_GridViewGastosDetalleMesesPartial", model)); }
public ActionResult BatchEditingUpdateGastosDetalleMesesModel(MVCxGridViewBatchUpdateValues <PreGastoDetalleMensual, object> updateValues) { IRepositoryWrapper _REPO = new RepositoryWrapper(); long gtoDeptoID = -1; int gtoUnidadID = -1; long gtoBaseID = -1; int gtoDetalleID = -1; foreach (var gastoBTF in updateValues.Update) { gtoDeptoID = gastoBTF.Oid; var modelOid = _REPO.GastoDetalle.Find(gtoDeptoID); if (modelOid != null) { gtoBaseID = modelOid.BaseTotalId; gtoDeptoID = modelOid.BaseDepartamentoId; gtoUnidadID = modelOid.UnidadId; gtoDetalleID = modelOid.DetalleId; break; } } // SE CARGAN DE LA DB LOS MESES DEL DETALLE DEL DEPARTAMENTO var modelGastoDepto = _REPO.GastoDepartamento.GetGastoAndRelatedById(gtoDeptoID); if (modelGastoDepto == null) { modelGastoDepto = new PreGastoDepartamento(); PreGastoUnidad GastoUnidad = new PreGastoUnidad(); GastoUnidad.PreGastoDetalleMensual.Add(new PreGastoDetalleMensual()); modelGastoDepto.PreGastoUnidad.Add(GastoUnidad); } var modelGastoUnidad = modelGastoDepto.PreGastoUnidad.Where(u => u.UnidadId == gtoUnidadID).SingleOrDefault(); var model = modelGastoUnidad.PreGastoDetalleMensual.Where(d => d.DetalleId == gtoDetalleID).ToList(); // SE CARGAN DE LA BD EL RESTO DE LOS DETALLES DEL DEPARTAMENTO var restoUnidad = modelGastoDepto.PreGastoUnidad.Where(u => u.UnidadId != gtoUnidadID).ToList(); var restoDetalle = modelGastoUnidad.PreGastoDetalleMensual.Where(d => d.DetalleId != gtoDetalleID).ToList(); DescripcionProducto _gasto = _unitOfWork.GetRepositoryInstance <Pre_GastosBase>().GetAllRecordsIQueryable() .Where(a => a.Oid == gtoBaseID) .Select(g => new DescripcionProducto { Familia = g.Desc_Area, Producto = g.NSubcuenta }) .FirstOrDefault(); //var modelBaseTotal = db.Pre_GastosBase.FirstOrDefault(a => a.Oid == oID); if (_gasto == null) { _gasto = new DescripcionProducto(); _gasto.Familia = ""; _gasto.Producto = ""; } ViewData["Articulo"] = string.Format("{0}<br>{1}", _gasto.Familia, _gasto.Producto); #region Insert // Insert all added values. foreach (var gastoBT in updateValues.Insert) { if (updateValues.IsValid(gastoBT)) { try { model.Add(gastoBT); db.SaveChanges(); } catch (Exception e) { updateValues.SetErrorText(gastoBT, e.Message); } } } #endregion #region Update // Update all edited values. if (updateValues.Update.Count > 0) { foreach (var gastoBT in updateValues.Update) { if (updateValues.IsValid(gastoBT)) { try { var modelItem = model.FirstOrDefault(it => it.Oid == gastoBT.Oid); if (modelItem != null) { modelItem.MontoManual = false; if (modelItem.Monto != gastoBT.Monto && gastoBT.Monto != gastoBT.MontoBase) { modelItem.MontoManual = true; } modelItem.Monto = gastoBT.Monto; //db.PreGastoDepartamento.FirstOrDefault(a => a.Oid == gtoDeptoID); if (modelGastoDepto != null) { // SE INICIALIZA CON EL MONTO DEL MES decimal importeMes = modelItem.Monto; decimal importeMesUnidad = modelItem.Monto; // SE SUMAN LOS MONTOS DEL MISMO MES DEL RESTO DE DETALLES DEL DEPARTAMENTO foreach (var OtraUnidad in restoUnidad) { foreach (var montoResto in OtraUnidad.PreGastoDetalleMensual.Where(r => r.Mes == modelItem.Mes).Select(x => x.Monto)) { importeMes += montoResto; } } foreach (var montoResto in restoDetalle.Where(r => r.Mes == modelItem.Mes).Select(x => x.Monto)) { importeMes += montoResto; importeMesUnidad += montoResto; } switch (modelItem.Mes) { case 1: //modelGastoDepto.EneImporte = modelItem.Monto; modelGastoDepto.EneImporte = importeMes; modelGastoUnidad.EneImporte = importeMesUnidad; break; case 2: modelGastoDepto.FebImporte = importeMes; modelGastoUnidad.FebImporte = importeMesUnidad; break; case 3: modelGastoDepto.MarImporte = importeMes; modelGastoUnidad.MarImporte = importeMesUnidad; break; case 4: modelGastoDepto.AbrImporte = importeMes; modelGastoUnidad.AbrImporte = importeMesUnidad; break; case 5: modelGastoDepto.MayImporte = importeMes; modelGastoUnidad.MayImporte = importeMesUnidad; break; case 6: modelGastoDepto.JunImporte = importeMes; modelGastoUnidad.JunImporte = importeMesUnidad; break; case 7: modelGastoDepto.JulImporte = importeMes; modelGastoUnidad.JulImporte = importeMesUnidad; break; case 8: modelGastoDepto.AgoImporte = importeMes; modelGastoUnidad.AgoImporte = importeMesUnidad; break; case 9: modelGastoDepto.SepImporte = importeMes; modelGastoUnidad.SepImporte = importeMesUnidad; break; case 10: modelGastoDepto.OctImporte = importeMes; modelGastoUnidad.OctImporte = importeMesUnidad; break; case 11: modelGastoDepto.NovImporte = importeMes; modelGastoUnidad.NovImporte = importeMesUnidad; break; case 12: modelGastoDepto.DicImporte = importeMes; modelGastoUnidad.DicImporte = importeMesUnidad; break; default: break; } } decimal?importe = 0m; decimal?importeUnidad = 0m; // SE SUMAN LOS MONTOS DEL DETALLE QUE SE ACTUALIZO foreach (var itemMes in model) { importe += itemMes.Monto; importeUnidad += itemMes.Monto; } // SE SUMAN LOS MONTOS DEL RESTO DE DETALLE DEL DEPARTAMENTO foreach (var itemMesRestoDetalle in restoDetalle) { importe += itemMesRestoDetalle.Monto; importeUnidad += itemMesRestoDetalle.Monto; } foreach (var itemMesResto in restoUnidad) { importe += itemMesResto.Monto; } // SE APLICA EL IMPORTE TOTAL EN LOS GASTOS DEPARTAMENTO modelGastoDepto.Monto = importe ?? 0m; modelGastoUnidad.Monto = importeUnidad ?? 0m; } } catch (Exception e) { updateValues.SetErrorText(gastoBT, e.Message); } } } var resultado = _REPO.GastoDepartamento.AddUpdate(modelGastoDepto); if (!resultado.Item1) { throw new Exception(string.Join(Environment.NewLine, resultado.Item2)); } } #endregion #region Delete // Delete all values that were deleted on the client side from the data source. foreach (var oID in updateValues.DeleteKeys) { try { long gastoID = Convert.ToInt64(oID); var item = model.FirstOrDefault(it => it.Oid == gastoID); if (item != null) { model.Remove(item); } db.SaveChanges(); } catch (Exception e) { updateValues.SetErrorText(oID, e.Message); } } #endregion IRepositoryWrapper _repository = new RepositoryWrapper(); //var deptoAndUnidad = _REPO.GastoDepartamento // .GetGastoByDepartamentoAndUnidadAndDetalle(model[0].BaseTotalId, model[0].DepartamentoId); var deptoAndUnidad = _repository.GastoDepartamento .GetGastoByDepartamentoAnUnidad(model[0].BaseTotalId, model[0].DepartamentoId); if (deptoAndUnidad == null) { deptoAndUnidad = new PreGastoDepartamento(); PreGastoUnidad unidad = new PreGastoUnidad(); unidad.PreGastoDetalleMensual.Add(new PreGastoDetalleMensual()); deptoAndUnidad.PreGastoUnidad.Add(unidad); } var unidadAndDetalle = deptoAndUnidad.PreGastoUnidad .Where(u => u.UnidadId == model[0].UnidadId).SingleOrDefault(); var modelActualizado = unidadAndDetalle.PreGastoDetalleMensual.Where(d => d.DetalleId == model[0].DetalleId); //deptoAndUnidad.PreGastoUnidadMensual.Where(x => x.UnidadId == model[0].UnidadId); return(PartialView("_GridViewGastosDetalleMesesPartial", modelActualizado.ToList())); }
public Tuple <bool, string[]> Create(int departamentoId, long baseId, int unidadId, int detalleId, string descConcepto) { bool todoCorrecto = false; List <string> errores = new List <string>(); try { using (var _dbContext = _dbContextCreator()) { var _entities = _dbContext.Set <PreGastoDetalleMensual>(); var _entitiesDepto = _dbContext.Set <PreGastoDepartamento>(); var depto = _entitiesDepto .Where(d => d.BaseTotalId == baseId && d.DepartamentoId == departamentoId) //.Include(u => u.PreGastoUnidadMensual) .Include(m => m.PreGastoUnidad.Select(c => c.PreGastoDetalleMensual)) .SingleOrDefault(); if (depto == null) { int verPptoId = FTPresupuestoProvider.getVersionPresupuestoIdByTipo(enumTipoDePresupuesto.GASTOS); depto = new PreGastoDepartamento(); depto.AbrImporte = 0m; depto.AgoImporte = 0m; depto.BaseTotalId = baseId; depto.DepartamentoId = departamentoId; depto.DicImporte = 0m; depto.EneImporte = 0m; depto.FebImporte = 0m; depto.JulImporte = 0m; depto.JunImporte = 0m; depto.MarImporte = 0m; depto.MayImporte = 0m; depto.Monto = 0m; depto.MontoBase = 0m; depto.MontoManual = false; depto.NovImporte = 0m; depto.OctImporte = 0m; depto.SepImporte = 0m; depto.VersionPresupuestoId = verPptoId; } var gastoUnidad = depto.PreGastoUnidad.Where(x => x.UnidadId == unidadId).SingleOrDefault(); if (gastoUnidad == null) { gastoUnidad = new PreGastoUnidad { BaseTotalId = baseId, DepartamentoId = departamentoId, UnidadId = unidadId, Monto = 0m, MontoBase = 0m, MontoManual = false, VersionPresupuestoId = depto.VersionPresupuestoId, AbrImporte = 0m, AgoImporte = 0m, NovImporte = 0m, OctImporte = 0m, SepImporte = 0m, DicImporte = 0m, EneImporte = 0m, FebImporte = 0m, JulImporte = 0m, JunImporte = 0m, MarImporte = 0m, MayImporte = 0m }; if (depto.Oid > 0) { gastoUnidad.BaseDepartamentoId = depto.Oid; } depto.PreGastoUnidad.Add(gastoUnidad); } var gastoDetalle = gastoUnidad.PreGastoDetalleMensual.Where(d => d.DetalleId == detalleId); if (gastoDetalle == null || gastoDetalle.Count() == 0) { for (int mes = 1; mes <= 12; mes++) { PreGastoDetalleMensual det = new PreGastoDetalleMensual { BaseTotalId = baseId, BaseUnidadId = gastoUnidad.Oid, DepartamentoId = departamentoId, UnidadId = unidadId, DetalleId = detalleId, Mes = mes, MesNombre = meses[mes].ToUpper(), Monto = 0m, MontoBase = 0m, MontoManual = false, Orden = mes, VersionPresupuestoId = depto.VersionPresupuestoId, Descripcion = descConcepto }; if (gastoUnidad.BaseDepartamentoId > 0) { det.BaseDepartamentoId = gastoUnidad.BaseDepartamentoId; } //BaseDepartamentoId = ((depto.Oid > 0) ? depto.Oid : -1), gastoUnidad.PreGastoDetalleMensual.Add(det); } var _repoDepto = new GastoDepartamentoRepository(_dbContextCreator); var resultado = _repoDepto.AddUpdate(depto); if (!resultado.Item1) { throw new Exception(string.Join(Environment.NewLine, resultado.Item2)); } todoCorrecto = true; } else { errores.Add("No fue posible inicializar el concepto para el departamento en la BD. el concepto ya existia"); } } } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { errores.Add(string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:" , eve.Entry.Entity.GetType().Name, eve.Entry.State)); foreach (var ve in eve.ValidationErrors) { errores.Add(string.Format("- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"" , ve.PropertyName, eve.Entry.CurrentValues.GetValue <object>(ve.PropertyName), ve.ErrorMessage)); } } } catch (Exception ex) { errores.Add(ex.Message); Exception _ex = ex.InnerException; while (_ex != null) { errores.Add(_ex.Message); _ex = _ex.InnerException; } } return(Tuple.Create(todoCorrecto, errores.ToArray())); }