public ActionResult AgregarSucursalFertilizantes()
        {
            var                model      = new PresupuestoSucursalViewModel();
            DateTime           _fecha     = _unitOfWork.getDateTimeFromServer();
            int                _versionID = FTPresupuestoProvider.getVersionPresupuestoIdByTipo(enumTipoDePresupuesto.FERTILIZANTES);
            VersionPresupuesto _version   = _unitOfWork.GetRepositoryInstance <VersionPresupuesto>().GetFirstOrDefault(_versionID);

            //VerPpto _version = FTPresupuestoProvider.getVersionPresupuestoByTipo(enumTipoDePresupuesto.Gastos);

            model.Ejercicio     = _version.Ejercicio;
            model.Consecutivo   = _version.Consecutivo;
            model.VersionId     = _version.VersionPresupuestoId;
            model.Observaciones = _version.Observaciones;

            int anioActual = _fecha.Year;
            int mesActual  = _fecha.Month;

            if (mesActual > 9)
            {
                if (anioActual >= _version.Ejercicio)
                {
                    model.Ejercicio = anioActual + 1;
                    //model.Consecutivo = 1;
                    //model.VersionId = 0;
                    model.Observaciones = string.Empty;
                }
            }
            else
            {
                model.Ejercicio = anioActual;
                //model.Consecutivo = 1;
                //model.VersionId = 0;
                model.Observaciones = string.Empty;
            }

            if (anioActual == _version.Ejercicio)
            {
                if (mesActual > 9)
                {
                    model.Ejercicio = anioActual + 1;
                    //model.Consecutivo = 1;
                    //model.VersionId = 0;
                    model.Observaciones = string.Empty;
                }
                else
                {
                    model.Ejercicio = anioActual;
                    //model.Consecutivo = 1;
                    //model.VersionId = 0;
                    model.Observaciones = string.Empty;
                }
            }
            //if (anioActual == _version.Ejercicio && mesActual > 9)
            //{
            //    model.Ejercicio = anioActual + 1;
            //    //model.Consecutivo = 1;
            //    //model.VersionId = 0;
            //    model.Observaciones = string.Empty;
            //}
            //if (anioActual > _version.Ejercicio && mesActual <= 9)
            //{
            //    model.Ejercicio = anioActual;
            //    //model.Consecutivo = 1;
            //    //model.VersionId = 0;
            //    model.Observaciones = string.Empty;
            //}
            int tp             = Convert.ToInt32(enumTipoDePresupuesto.FERTILIZANTES);
            int maxConsecutivo = 0;

            using (FTPresupuestoEntities _db = new FTPresupuestoEntities())
            {
                maxConsecutivo = _db.VersionPresupuesto
                                 .Where(v => v.TipoPresupuesto == tp && v.Ejercicio == model.Ejercicio)
                                 .Select(v => v.Consecutivo)
                                 .DefaultIfEmpty(0)
                                 .Max();
            }
            model.Consecutivo = maxConsecutivo + 1;

            //ViewData["Empresas"] = FTPresupuestoProvider.GetAllEmpresas();
            return(View(model));
        }
        public JsonResult AgregarSucursalFertilizantes(PresupuestoSucursalViewModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    int versionActualID = FTPresupuestoProvider.getVersionPresupuestoIdByTipo(enumTipoDePresupuesto.FERTILIZANTES);
                    int versionPptoID   = model.VersionId;

                    // SE VALIDA QUE NO SE HAYA EJECUTADO DOS VECES EL MISMO PROCESO
                    if (versionPptoID > 0)
                    {
                        if (versionActualID != versionPptoID)
                        {
                            return(Json("Proceso Duplicado ó ya se generó una nueva versión"));
                        }
                    }
                    if (!_unitOfWork.GetRepositoryInstance <PreFertilizanteBaseTotal>()
                        .GetExists(p => p.Clave_Empresa == model.EmpresaBaseID && p.Clave_Sucursal == model.SucursalBaseID && p.VersionPresupuestoId == model.VersionId))
                    {
                        return(Json("No existen datos de la sucursal origen para agregar la nueva sucursal"));
                    }
                    if (_unitOfWork.GetRepositoryInstance <PreFertilizanteBaseTotal>()
                        .GetExists(p => p.Clave_Empresa == model.EmpresaID && p.Clave_Sucursal == model.SucursalID && p.VersionPresupuestoId == model.VersionId))
                    {
                        return(Json("La Sucursal que se desea agregar ya esta agregada en el presupuesto actual"));
                    }



                    // SE INICIALIZA LA CONEXION Y CONTEXTO DE BASE DE DATOS
                    using (FTPresupuestoEntities _db = new FTPresupuestoEntities())
                    {
                        // SE VALIDA EN CASO DE SER LA PRIMERA VERSION DEL EJERCICIO O QUE NO EXISTA UNA VERSION ANTERIOR EN EL EJERCICIO
                        if (model.VersionId == 0)
                        {
                            VersionPresupuesto versionPpto = new VersionPresupuesto
                            {
                                Consecutivo     = model.Consecutivo,
                                Ejercicio       = model.Ejercicio,
                                FechaCreacion   = _unitOfWork.getDateOnlyFromServer(),
                                Observaciones   = model.Observaciones,
                                TipoPresupuesto = (int)enumTipoDePresupuesto.FERTILIZANTES,
                                UsuarioCreacion = User.Identity.Name
                            };
                            versionPpto = _db.VersionPresupuesto.Add(versionPpto);
                            _db.SaveChanges();
                            versionPptoID = versionPpto.VersionPresupuestoId;
                        }

                        // CONFIGURAMOS PARA QUE EL TIEMMPO DE RESPUESTA SEA INDEFINIDO
                        _db.Database.CommandTimeout = 0;

                        // SE GENERA LA NUEVA VERSION. INTERNAMENTE EL SP VALIDA SI DEBE COPIAR O NO
                        _db.GenVersion_Ppto_Fertilizantes(model.VersionId, true, model.Observaciones, User.Identity.Name, model.Ejercicio, model.Consecutivo);
                        //_db.SaveChanges();

                        // VALIDAMOS LA VERSION DE PRESUPUESTO A PROCESAR, DEBE SER LA ULTIMA
                        int versionProcesarID = FTPresupuestoProvider.getVersionPresupuestoIdByTipo(enumTipoDePresupuesto.FERTILIZANTES);

                        // SE EJECUTA AGREGAR LA SUCURSAL DESDE LA SUCURSAL BASE
                        _db.AgregaSucursal_Ppto_Fertilizantes_PS(model.EmpresaBaseID, model.SucursalBaseID, versionProcesarID, model.Ejercicio, model.EmpresaID, model.SucursalID);
                    }

                    return(Json("El Proceso finalizo de manera correcta"));
                }
                catch (Exception ex)
                {
                    if (ex.InnerException != null)
                    {
                        return(Json(ex.InnerException.Message));
                    }
                    else
                    {
                        return(Json(ex.Message));
                    }
                }
            }
            return(Json("Informacion Incompleta"));
        }