public static IList <FolioSolicitudInfo> ObtenerPorPagina(FolioSolicitudInfo folioSolicitudInfo)
        {
            var pagina = new PaginacionInfo {
                Inicio = 1, Limite = 15
            };

            folioSolicitudInfo.Usuario           = new UsuarioInfo();
            folioSolicitudInfo.OrganizacionID    = Usuario.OrganizacionID;
            folioSolicitudInfo.UsuarioIDAutoriza = Usuario.UsuarioID;
            folioSolicitudInfo.EstatusID         = Estatus.SolicitudProductoPendiente.GetHashCode();
            folioSolicitudInfo.Activo            = EstatusEnum.Activo;

            IList <FolioSolicitudInfo>         result = null;
            ResultadoInfo <FolioSolicitudInfo> solicitudes;

            using (var solicitudProductoBL = new SolicitudProductoBL())
            {
                solicitudes = solicitudProductoBL.ObtenerPorPagina(pagina, folioSolicitudInfo);
            }

            if (solicitudes != null && solicitudes.TotalRegistros > 0)
            {
                result = solicitudes.Lista;
            }
            return(result);
        }
        /// <summary>
        /// Obtiene una solicitud de productos por su ID.
        /// </summary>
        /// <param name="solicitudProductoID"></param>
        /// <returns></returns>
        private static SolicitudProductoInfo ObtenerSolicitudPorId(int solicitudProductoID)
        {
            SolicitudProductoInfo solicitud;

            using (var solicitudProductoBL = new SolicitudProductoBL())
            {
                solicitud =
                    solicitudProductoBL.ObtenerPorID(new SolicitudProductoInfo {
                    SolicitudProductoID = solicitudProductoID
                });
            }
            return(solicitud);
        }
        private string ValidarAretesDuplicados()
        {
            var mensaje = string.Empty;

            try
            {
                SolicitudProductoReplicaInfo solicitudGuardar = Contexto;
                var misAretes = ObtenerTotalAretesGrid();
                mensaje = new SolicitudProductoBL().ValidarAretesDuplicados(solicitudGuardar.AlmacenDestino.Organizacion.OrganizacionID, misAretes);
            }
            catch (Exception)
            {
                mensaje = Properties.Resources.RecibirProductoAlmacen_ErrorValidarAretesAsignado;
            }

            return(mensaje);
        }
        public static bool Guardar(SolicitudProductoInfo solicitud)
        {
            using (var solicitudProductoBL = new SolicitudProductoBL())
            {
                SolicitudProductoInfo solicitudGuardar = solicitudProductoBL.ObtenerPorID(solicitud);
                solicitudGuardar.EstatusID                  = Estatus.SolicitudProductoAutorizado.GetHashCode();
                solicitudGuardar.UsuarioIDAutoriza          = Usuario.UsuarioID;
                solicitudGuardar.FechaAutorizado            = DateTime.Now;
                solicitudGuardar.UsuarioModificacionID      = Usuario.UsuarioID;
                solicitudGuardar.ObservacionUsuarioAutoriza = solicitud.ObservacionUsuarioAutoriza;

                foreach (var det in solicitudGuardar.Detalle)
                {
                    var renglon =
                        solicitud.Detalle.FirstOrDefault(d => d.SolicitudProductoDetalleID == det.SolicitudProductoDetalleID);
                    if (renglon != null)
                    {
                        if (renglon.Activo == EstatusEnum.Activo)
                        {
                            det.EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode();
                        }
                        else
                        {
                            det.Activo = EstatusEnum.Inactivo;
                        }
                    }
                }
                bool inactivar = solicitudGuardar.Detalle.All(e => e.Activo != EstatusEnum.Activo);
                if (inactivar)
                {
                    solicitudGuardar.Activo = EstatusEnum.Inactivo;
                }

                solicitudProductoBL.Guardar(solicitudGuardar);
            }
            return(true);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="solicitud"></param>
        /// <param name="solicitudProductoBL"></param>
        /// <returns></returns>
        private static List <SolicitudProductoDetalleModel> ValidaDisponibilidad(SolicitudProductoInfo solicitud, SolicitudProductoBL solicitudProductoBL)
        {
            dynamic result;

            IEnumerable <int> idsProductos = solicitud.Detalle
                                             .Where(d => d.Producto.FamiliaId != (int)FamiliasEnum.HerramientaYEquipo || d.Producto.FamiliaId != (int)FamiliasEnum.Combustibles)
                                             .Select(d => d.ProductoID).Distinct().ToList();
            SolicitudProductoInfo solicitudGuardar = solicitudProductoBL.ObtenerPorID(solicitud);
            var filtro = new FolioSolicitudInfo
            {
                OrganizacionID = solicitudGuardar.OrganizacionID,
                IdsProductos   = idsProductos.ToList(),
                EstatusID      = Estatus.SolicitudProductoAutorizado.GetHashCode(),
                Activo         = EstatusEnum.Activo
            };

            IList <AlmacenInventarioInfo> existencia             = ObtenerExistencia(idsProductos);
            IList <SolicitudProductoInfo> solicitudesAutorizadas = solicitudProductoBL.ObtenerSolicitudesAutorizadas(filtro);

            var productosValidar = solicitud.Detalle.Select(d => new
            {
                d.ProductoID,
                d.Cantidad,
                d.Producto.FamiliaId
            }).ToList();

            var autorizadas = (from p in solicitudesAutorizadas.SelectMany(sd => sd.Detalle)
                               where p.EstatusID == Estatus.SolicitudProductoAutorizado.GetHashCode()
                               group p by p.ProductoID
                               into pg
                               select new
            {
                ProductoID = pg.Key,
                Autorizada = pg.Sum(c => c.Cantidad)
            }).ToList();
            List <SolicitudProductoDetalleModel> query = (from p in productosValidar
                                                          join a in autorizadas on p.ProductoID equals a.ProductoID into gj
                                                          from pa in gj.DefaultIfEmpty()
                                                          select new SolicitudProductoDetalleModel
            {
                ProductoID = p.ProductoID,
                Cantidad = p.Cantidad,
                Existencia = ObtenerCantidadExistencia(p.ProductoID, p.FamiliaId, p.Cantidad, existencia, (pa == null ? 0 : pa.Autorizada)),            /* Para los  */
                Autorizada = (pa == null ? 0 : pa.Autorizada),
                IsDisponible = (ObtenerCantidadExistencia(p.ProductoID, p.FamiliaId, p.Cantidad, existencia, (pa == null ? 0 : pa.Autorizada)) - (pa == null ? 0 : pa.Autorizada)) >= 0
            }).ToList();

            return(query);
        }
        public static IList <SolicitudProductoDetalleModel> ObtenerPorFolioSolicitud(int folioSolicitud)
        {
            try
            {
                IList <SolicitudProductoDetalleModel> productos = null;
                var folio = new FolioSolicitudInfo
                {
                    OrganizacionID    = Usuario.OrganizacionID,
                    FolioSolicitud    = folioSolicitud,
                    UsuarioIDAutoriza = Usuario.UsuarioID,
                    EstatusID         = Estatus.SolicitudProductoPendiente.GetHashCode(),
                    Activo            = EstatusEnum.Activo
                };

                using (var solicitudProductoBL = new SolicitudProductoBL())
                {
                    FolioSolicitudInfo result = solicitudProductoBL.ObtenerPorFolioSolicitud(folio);
                    if (result != null)
                    {
                        var solicitud = ObtenerSolicitudPorId(result.FolioID);
                        if (solicitud != null)
                        {
                            if (solicitud.UsuarioIDSolicita != Usuario.UsuarioID)
                            {
                                var disponibilidad = ValidaDisponibilidad(solicitud, solicitudProductoBL);
                                productos = new List <SolicitudProductoDetalleModel>();

                                var estatusAutorizados = new[] { Estatus.SolicitudProductoAutorizado.GetHashCode(), Estatus.SolicitudProductoRecibido.GetHashCode(), Estatus.SolicitudProductoEntregado.GetHashCode() };
                                var estatusDisponibles = new[] { Estatus.SolicitudProductoPendiente.GetHashCode(), Estatus.SolicitudProductoAutorizado.GetHashCode() };

                                solicitud.Detalle.ForEach(d =>
                                {
                                    var registro = disponibilidad.FirstOrDefault(e => e.ProductoID == d.ProductoID);
                                    if (d.Activo == EstatusEnum.Activo)
                                    {
                                        productos.Add(new SolicitudProductoDetalleModel
                                        {
                                            OrganizacionID             = solicitud.OrganizacionID,
                                            SolicitudProductoDetalleId =
                                                d.SolicitudProductoDetalleID,
                                            SolicitudProductoId = d.SolicitudProductoID,
                                            FolioSolicitud      = solicitud.FolioSolicitud,
                                            FechaSolicitud      = solicitud.FechaSolicitud,
                                            ProductoID          = d.ProductoID,
                                            Producto            = d.Producto.Descripcion,
                                            Cantidad            = d.Cantidad,
                                            Existencia          = registro != null ? registro.Existencia : 0,
                                            Autorizada          = registro != null ? registro.Autorizada : 0,
                                            IsDisponible        = registro != null && registro.IsDisponible && estatusDisponibles.Contains(d.EstatusID),
                                            UnidadMedicion      = d.Producto.UnidadMedicion.Descripcion,
                                            Descripcion         = d.Concepto ?? string.Empty,
                                            ClaseCosto          = d.ClaseCostoProducto != null
                                                    ? d.ClaseCostoProducto.CuentaSAP.CuentaSAP
                                                    : string.Empty,
                                            EstatusID    = d.EstatusID,
                                            IsAutorizado = estatusAutorizados.Contains(d.EstatusID),
                                            ObservacionUsuarioAutoriza = solicitud.ObservacionUsuarioAutoriza,
                                            Activo = d.Activo == EstatusEnum.Activo
                                        });
                                    }
                                });
                            }
                        }
                    }
                }
                return(productos);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
 public RecibirProductoAlmacenReplica()
 {
     solicitudProductoBL = new SolicitudProductoBL();
     InitializeComponent();
 }
        /// <summary>
        /// Método para cancelar
        /// </summary>
        private void Guardar()
        {
            bool guardar = ValidaGuardar();

            if (guardar)
            {
                try
                {
                    SolicitudProductoReplicaInfo solicitudGuardar = Contexto;
                    var organizacion = new OrganizacionPL().ObtenerPorID(solicitudGuardar.AlmacenDestino.Organizacion.OrganizacionID);
                    var tipoOrg      = organizacion.TipoOrganizacion.TipoOrganizacionID;

                    solicitudGuardar.UsuarioModificacionID = usuario.UsuarioID;
                    int activos   = solicitudGuardar.Detalle.Count(e => e.Activo == true);
                    int recibidos =
                        solicitudGuardar.Detalle.Count(
                            e => e.Activo == true);
                    if (tipoOrg == TipoOrganizacion.Centro.GetHashCode() || tipoOrg == TipoOrganizacion.Cadis.GetHashCode() || tipoOrg == TipoOrganizacion.Descanso.GetHashCode())
                    {
                        var misAretes = ObtenerTotalAretesGrid();
                        var result    = new SolicitudProductoBL().GuardarInformacionCentros(Contexto.FolioSolicitud.ToString(), AuxConfiguracion.ObtenerUsuarioLogueado(), solicitudGuardar.AlmacenDestino.Organizacion.OrganizacionID, misAretes);
                        if (result)
                        {
                            SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.RecibirProductoAlmacen_GuardadoConExito,
                                              MessageBoxButton.OK,
                                              MessageImage.Correct);
                            Limpiar();
                        }
                        else
                        {
                            SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.RecibirProductoAlmacen_ErrorGuardar,
                                              MessageBoxButton.OK,
                                              MessageImage.Error);
                        }
                    }
                    else
                    {
                        MemoryStream pdf = solicitudProductoBL.GuardarMovimientoInventario(solicitudGuardar);
                        if (pdf != null)
                        {
                            var exportarPoliza = new ExportarPoliza();
                            if (solicitudGuardar.AlmacenID.HasValue)
                            {
                                exportarPoliza.ImprimirPoliza(pdf, string.Format("{0} {1}", "Poliza", TipoPoliza.EntradaTraspasoSAP));
                            }
                            else
                            {
                                exportarPoliza.ImprimirPoliza(pdf,
                                                              string.Format("{0} {1}", "Poliza", TipoPoliza.SalidaConsumo));
                            }
                        }

                        string mensaje = Properties.Resources.RecibirProductoAlmacen_GuardadoConExito;
                        SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], mensaje,
                                          MessageBoxButton.OK,
                                          MessageImage.Correct);
                        Limpiar();
                    }
                }
                catch (ExcepcionServicio ex)
                {
                    Logger.Error(ex);
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      Properties.Resources.RecibirProductoAlmacen_ErrorGuardar, MessageBoxButton.OK,
                                      MessageImage.Stop);
                }
                catch (ExcepcionGenerica ex)
                {
                    Logger.Error(ex);
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      Properties.Resources.RecibirProductoAlmacen_ErrorGuardar, MessageBoxButton.OK,
                                      MessageImage.Error);
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      Properties.Resources.RecibirProductoAlmacen_ErrorGuardar, MessageBoxButton.OK,
                                      MessageImage.Error);
                }
            }
        }
 public SolicitudProductosAlmacen()
 {
     solicitudProductoBL = new SolicitudProductoBL();
     InitializeComponent();
     InicializaContexto();
 }