public async Task <ActionResult> CboDepartamentosAgregarUnidadPartial()
        {
            short deptoId = -1;

            if (Request.Params["DeptoGrid"] != null)
            {
                short.TryParse("0" + Request.Params["DeptoGrid"], out deptoId);
            }
            //ViewData["deptoId"] = deptoId.ToString();

            IRepositoryWrapper _repo = new RepositoryWrapper();
            var listado = await _repo.CatDepartamentos.GetDepartamentosAsync();

            ViewBag.Departamentos = listado;
            if (deptoId > -1)
            {
                var model = new CatUnidadViewModel {
                    DepartamentoId = deptoId
                };
                return(PartialView("_CboDepartamentosAgregarUnidadPartial", model));
            }
            else
            {
                return(PartialView("_CboDepartamentosAgregarUnidadPartial"));
            }

            //ViewData["DeptoItems"] = listado.OrderBy(e => e.Descripcion);
            //var model = new CatUnidadViewModel { DepartamentoId = deptoId };

            //return PartialView("_CboDepartamentosFormUnidadPartial", listado.OrderBy(e => e.Descripcion).ToList());
        }
        public async Task <ActionResult> EditarUnidad(string Id)
        {
            int clave = 0;

            int.TryParse("0" + Id, out clave);

            IRepositoryWrapper _repo = new RepositoryWrapper();
            var unidad = await _repo.CatDetalle.FindAsync(clave);

            if (unidad == null)
            {
                return(RedirectToAction("Unidades", "Catalogos"));
            }
            var catConcepto = await _repo.CatConceptoGasto.FindAsync(unidad.ClaveContable);

            if (catConcepto == null)
            {
                catConcepto = new Pre_CatConceptoGasto();
            }

            var model = new CatUnidadViewModel
            {
                Id                  = unidad.Oid,
                Clave               = unidad.Clave,
                DepartamentoId      = unidad.DepartamentoId,
                Descripcion         = unidad.Descripcion,
                EmpresaId           = catConcepto.EmpresaId,
                AreaId              = catConcepto.AreaId,
                DescripcionContable = catConcepto.Descripcion,
                SSCuentaId          = catConcepto.SSCuenta,  //Convert.ToInt16(catConcepto.SSCuenta),
                SubCuentaId         = catConcepto.SubCuenta, //Convert.ToInt16(catConcepto.SubCuenta),
                TipoDetalle         = unidad.TipoDetalle
            };

            ViewBag.Departamentos = await _repo.CatDepartamentos.GetDepartamentosAsync();

            ViewBag.Empresas = await _repo.CatDetalle.GetEmpresasAsync();

            ViewBag.Areas = await _repo.CatDetalle.GetAreasAsync();

            ViewBag.SubCuentas = await _repo.CatDetalle.GetSubCuentasAsync();

            ViewBag.SSCuentas = await _repo.CatDetalle.GetSSCuentasAsync(model.EmpresaId, model.AreaId, model.SubCuentaId);

            ViewBag.TiposDetalle = await _repo.Configuracion.GetTiposDetalleListItemAsync();

            return(View(model));
        }
        public async Task <ActionResult> EditarUnidad(CatUnidadViewModel model)
        {
            IRepositoryWrapper _repo = new RepositoryWrapper();

            ViewBag.Departamentos = await _repo.CatDepartamentos.GetDepartamentosAsync();

            ViewBag.Empresas = await _repo.CatDetalle.GetEmpresasAsync();

            ViewBag.Areas = await _repo.CatDetalle.GetAreasAsync();

            ViewBag.SubCuentas = await _repo.CatDetalle.GetSubCuentasAsync();

            ViewBag.SSCuentas = await _repo.CatDetalle.GetSSCuentasAsync(model.EmpresaId, model.AreaId, model.SubCuentaId);

            if (ModelState.IsValid)
            {
                ViewBag.TiposDetalle = await _repo.Configuracion.GetTiposDetalleListItemAsync();

                if (_repo.CatDetalle.Exists(x => x.DepartamentoId == model.DepartamentoId &&
                                            (x.Descripcion.Trim().ToUpper() == model.Descripcion.Trim().ToUpper() || x.Clave.Trim().ToUpper() == model.Clave.Trim().ToUpper()) &&
                                            x.Oid != model.Id))
                {
                    //throw new Exception("La clave o descripcion de la unidad o persona ya existe en el catalogo");
                    ViewBag.ErrorMessage = "La clave o descripcion de la unidad o persona ya existe en el catalogo para el departamento seleccionado";
                    return(View(model));
                }
                // VALIDAR SI CAMBIO EL DEPARTAMENTO
                var _detPaso = _repo.CatDetalle.Find(model.Id);
                if (_detPaso != null)
                {
                    if (_detPaso.DepartamentoId != model.DepartamentoId)
                    {
                        if (_repo.GastoDetalle.Exists(x => x.DepartamentoId == _detPaso.DepartamentoId && x.UnidadId == model.Id))
                        {
                            var porDepto = await _repo.GastoDepartamento.FindByFilterAsync(x => x.DepartamentoId == _detPaso.DepartamentoId);

                            var detMensual = await _repo.GastoDetalle.GetDataAsync(x => x.DepartamentoId == _detPaso.DepartamentoId && x.UnidadId == model.Id);

                            decimal montoTotal = 0m;

                            foreach (var item in detMensual)
                            {
                                montoTotal += item.Monto;
                            }
                            if (montoTotal != 0m)
                            {
                                ViewBag.ErrorMessage = "La unidad o persona ya tiene importes capturados en el departamento anterior, no se puede cambiar."
                                                       + Environment.NewLine + "Es necesario Cambiar los importes capturados a cero para poder hacer el cambio";
                                return(View(model));
                            }
                            var listaBorrar = detMensual.ToList();
                            foreach (var item in listaBorrar)
                            {
                                _repo.GastoDetalle.Remove(item);
                            }
                            var detUnidad = await _repo.GastoUnidad.GetDataAsync(x => x.DepartamentoId == _detPaso.DepartamentoId && x.UnidadId == model.Id);

                            var listaUnidadBorrar = detUnidad.ToList();
                            foreach (var item in listaUnidadBorrar)
                            {
                                _repo.GastoUnidad.Remove(item);
                            }
                        }
                    }
                }
                // VALIDAMOS SI EXISTE UN CONCEPTO CON LOS DATOS CONTABLES PARA DARLO DE ALTA EN SU CASO
                var _concepto = _repo.CatConceptoGasto
                                .FindByFilter(x => x.AreaId == model.AreaId && x.SubCuenta == model.SubCuentaId && x.SSCuenta == model.SSCuentaId && x.EmpresaId == model.EmpresaId);
                string descripcionContable = "";
                if (_concepto == null)
                {
                    var ssCuentas = _repo.CatDetalle.GetSSCuentas(model.EmpresaId, model.AreaId, model.SubCuentaId).ToList();
                    descripcionContable = ssCuentas.Where(x => x.ID == model.SSCuentaId)
                                          .Select(x => x.Name).DefaultIfEmpty("").FirstOrDefault();
                    _concepto = new Pre_CatConceptoGasto
                    {
                        AreaId      = model.AreaId,
                        Descripcion = descripcionContable,
                        EmpresaId   = model.EmpresaId,
                        SSCuenta    = model.SSCuentaId,
                        SubCuenta   = model.SubCuentaId
                    };
                    var resultConcepto = _repo.CatConceptoGasto.AddUpdate(_concepto);
                    if (!resultConcepto.Item1)
                    {
                        ViewBag.ErrorMessage = string.Join(Environment.NewLine, resultConcepto.Item2);
                        return(View(model));
                        //throw new Exception(string.Join(Environment.NewLine, resultConcepto.Item2));
                    }
                }
                Pre_CatDetalle unidad = new Pre_CatDetalle
                {
                    Oid                 = model.Id,
                    Descripcion         = model.Descripcion,
                    Clave               = model.Clave,
                    DepartamentoId      = model.DepartamentoId,
                    ClaveContable       = _concepto.Oid,
                    DescripcionContable = _concepto.Descripcion,
                    TipoDetalle         = model.TipoDetalle
                };
                var result = await _repo.CatDetalle.AddUpdateAsync(unidad);

                if (!result.Item1)
                {
                    ViewBag.ErrorMessage = string.Join(Environment.NewLine, result.Item2);
                    return(View(model));
                }
                // ELIMINAR EL DEPARTAMENTO ACTUAL
                var resulBorrar = await _repo.CatDetalle.DeleteAsync(_detPaso);

                if (!resulBorrar.Item1)
                {
                    ViewBag.ErrorMessage = string.Join(Environment.NewLine, resulBorrar.Item2);
                    return(View(model));
                }
                return(RedirectToAction("Unidades", "Catalogos"));
            }
            else
            {
                ViewBag.ErrorMessage = "La información esta incompleta";
            }
            return(View(model));
        }