public ActionResult AgregarProductoFertilizantes([ModelBinder(typeof(DevExpressEditorsBinder))] PresupuestoProductoViewModel producto)
        {
            IRepositoryWrapper _repo = new RepositoryWrapper();

            if (ModelState.IsValid)
            {
                int   divisionId = -1;
                short regionId   = -1;
                if (!string.IsNullOrWhiteSpace(producto.RegionDivisionID))
                {
                    string[] divisionRegion = producto.RegionDivisionID.Split(';');
                    divisionId = Convert.ToInt32(divisionRegion[0]);
                    regionId   = Convert.ToInt16(divisionRegion[1]);
                }
                bool existeProducto = _unitOfWork.GetRepositoryInstance <PreFertilizanteBaseTotal>()
                                      .GetExists(a => a.Ejercicio == producto.Ejercicio && a.VersionPresupuestoId == producto.VersionId &&
                                                 a.Clave_Empresa == producto.EmpresaID &&
                                                 a.Clave_Sucursal == producto.SucursalID &&
                                                 a.Clave_Grupo == producto.GrupoID &&
                                                 a.Clave_Familia == producto.FamiliaID &&
                                                 a.Tipocliente.Trim() == producto.TipoClienteID.Trim());

                if (existeProducto)
                {
                    ViewBag.ErrorMessage = "* EL PRODUCTO SELECCIONADO YA EXISTE EN EL PRESUPUESTO ACTUAL";
                    return(View(producto));
                }

                // CUANDO NO EXISTA SE DEBE AGREGAR AL PRESUPUESTO ACTUAL
                string descFamilia = _repo.Catalogos.GetNombreFamilia(producto.FamiliaID, producto.EmpresaID);  //string.Empty;
                //var familia = _unitOfWork.GetRepositoryInstance<Cat_Familias>()
                //    .GetFirstOrDefaultByParameter(f => f.Clave_Familia == producto.FamiliaID);
                //if (familia != null)
                //    descFamilia = familia.Desc_Familia;

                string descGrupo = string.Empty;
                var    grupo     = _unitOfWork.GetRepositoryInstance <Cat_Grupos>()
                                   .GetFirstOrDefaultByParameter(g => g.Clave_Grupo == producto.GrupoID);
                if (grupo != null)
                {
                    descGrupo = grupo.Desc_Grupo;
                }

                //string descProducto = string.Empty;
                //var prod = _unitOfWork.GetRepositoryInstance<Cat_Productos>()
                //        .GetFirstOrDefaultByParameter(p => p.Clave_Empresa == producto.EmpresaID && p.Clave_Producto == producto.ProductoID);
                //if (prod != null)//&& producto.FamiliaID == 101)
                //    descProducto = prod.Desc_Producto;

                string descRegion = string.Empty;
                var    reg        = _unitOfWork.GetRepositoryInstance <Cat_Regiones>()
                                    .GetFirstOrDefaultByParameter(r => r.Clave_Empresa == producto.EmpresaID && r.Clave_Region == regionId);
                if (reg != null)
                {
                    descRegion = reg.Desc_Region;
                }
                string descSucursal = string.Empty;
                var    suc          = _unitOfWork.GetRepositoryInstance <Cat_Sucursales>()
                                      .GetFirstOrDefaultByParameter(s => s.Clave_Empresa == producto.EmpresaID && s.Clave_Sucursal == producto.SucursalID);
                if (suc != null)
                {
                    descSucursal = suc.Desc_Sucursal;
                }

                decimal porcentajeMargen = 0m;
                if (producto.Toneladas == 0m)
                {
                    producto.PrecioVenta = 0m;
                }
                else
                {
                    producto.PrecioVenta = producto.Venta / producto.Toneladas;
                }
                if (producto.Venta == 0m)
                {
                    porcentajeMargen = 0m;
                }
                else
                {
                    porcentajeMargen = producto.UtilidadBruta / producto.Venta;
                }

                PreFertilizanteBaseTotal pbt = new PreFertilizanteBaseTotal
                {
                    AbrImporte                = 0m,
                    AbrMargen                 = 0m,
                    AbrTons                   = 0m,
                    AgoImporte                = 0m,
                    AgoMargen                 = 0m,
                    AgoTons                   = 0m,
                    Cantidad                  = producto.Toneladas,
                    Clave_Empresa             = producto.EmpresaID,
                    Clave_Familia             = producto.FamiliaID,
                    Clave_Grupo               = producto.GrupoID,
                    Clave_Producto            = producto.ProductoID,
                    Clave_Sucursal            = producto.SucursalID,
                    Costo_Importe             = 0m,
                    Costo_Unitario            = 0m,
                    Descuento_Importe         = 0m,
                    Desc_Familia              = descFamilia,
                    Desc_Marca                = string.Empty,
                    Desc_Sucursal             = descSucursal,
                    DicImporte                = producto.Venta,
                    DicMargen                 = producto.UtilidadBruta,
                    DicTons                   = producto.Toneladas,
                    Ejercicio                 = (short)producto.Ejercicio,
                    EneImporte                = 0m,
                    EneMargen                 = 0m,
                    EneTons                   = 0m,
                    FebImporte                = 0m,
                    FebMargen                 = 0m,
                    FebTons                   = 0m,
                    JulImporte                = 0m,
                    JulMargen                 = 0m,
                    JulTons                   = 0m,
                    JunImporte                = 0m,
                    JunMargen                 = 0m,
                    JunTons                   = 0m,
                    MargenBruto               = producto.UtilidadBruta,
                    MarImporte                = 0m,
                    MarMargen                 = 0m,
                    MarTons                   = 0m,
                    MayImporte                = 0m,
                    MayMargen                 = 0m,
                    MayTons                   = 0m,
                    NovImporte                = 0m,
                    NovMargen                 = 0m,
                    NovTons                   = 0m,
                    OctImporte                = 0m,
                    OctMargen                 = 0m,
                    OctTons                   = 0m,
                    PorcentajeMargen          = (double)porcentajeMargen,
                    PrecioVenta               = producto.PrecioVenta,
                    Precio_Importe            = producto.Venta,
                    Precio_Unitario           = 0m,
                    PresupuestoMargen         = producto.UtilidadBruta,
                    PresupuestoTons           = producto.Toneladas,
                    PresupuestoVentas         = producto.Venta,
                    PtjeIncEspecificoMG       = 0d,
                    PtjeIncEspecificoTons     = 0d,
                    PtjeIncGeneralPrecioVenta = 0d,
                    PtjeIncGeneralTons        = 0d,
                    SepImporte                = 0m,
                    SepMargen                 = 0m,
                    SepTons                   = 0m,
                    Tipocliente               = producto.TipoClienteID,
                    VersionPresupuestoId      = producto.VersionId,
                    Clave_Region              = regionId,
                    Desc_Grupo                = descGrupo,
                    Desc_Region               = descRegion
                };
                _unitOfWork.GetRepositoryInstance <PreFertilizanteBaseTotal>().Add(pbt);
                long     pbtID       = pbt.Oid;
                string[] nombreMeses = new string[] { "TODOS", "ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE" };
                // SE AGREGAN LOS MESES
                for (short i = 0; i < 12; i++)
                {
                    short mes = i;
                    mes += 1;
                    PreFertilizanteMensual pm = new PreFertilizanteMensual
                    {
                        BaseTotalId          = pbtID,
                        DescuentoBase        = 0m,
                        Importe              = (mes == 12) ? producto.Venta : 0m,
                        ImporteBase          = (mes == 12) ? producto.Venta : 0m,
                        Margen               = (mes == 12) ? producto.UtilidadBruta : 0m,
                        MargenBase           = (mes == 12) ? producto.UtilidadBruta : 0m,
                        Mes                  = mes,
                        MesNombre            = nombreMeses[mes],
                        Orden                = mes,
                        PrecioVenta          = producto.PrecioVenta,
                        PrecioVentaBase      = producto.PrecioVenta,
                        PrecioVentaManual    = false,
                        PtjeMargen           = (double)porcentajeMargen * 100d,
                        PtjeMargenBase       = (double)porcentajeMargen * 100d,
                        PtjeMargenManual     = false,
                        ToneladaManual       = false,
                        Toneladas            = (mes == 12) ? producto.Toneladas : 0m,
                        ToneladasBase        = (mes == 12) ? producto.Toneladas : 0m,
                        VersionPresupuestoId = producto.VersionId
                    };
                    _unitOfWork.GetRepositoryInstance <PreFertilizanteMensual>().Add(pm);
                }
                return(RedirectToAction("Fertilizantes", "Versiones"));
            }
            ViewBag.ErrorMessage = "* LOS DATOS PARA AGREGAR EL PRODUCTO AL PRESUPUESTO TIENE ERRORES O ESTA INCOMPLETA";
            return(View(producto));
        }
        public ActionResult AgregarProductoFertilizantes()
        {
            var                model      = new PresupuestoProductoViewModel();
            DateTime           _fecha     = _unitOfWork.getDateTimeFromServer();
            int                _versionID = FTPresupuestoProvider.getVersionPresupuestoIdByTipo(enumTipoDePresupuesto.FERTILIZANTES);
            VersionPresupuesto _version   = _unitOfWork.GetRepositoryInstance <VersionPresupuesto>().GetFirstOrDefault(_versionID);

            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;
            //}
            model.ProductoID = "NA";

            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;

            return(View(model));
        }