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()));
        }
Example #3
0
        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()));
        }