예제 #1
0
        /// <summary>
        /// Obtiene una lista paginada de SolicitudProducto
        /// </summary>
        /// <param name="pagina"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public ResultadoInfo <SolicitudProductoReplicaInfo> ObtenerPorPagina(SolicitudProductoReplicaInfo filtro)
        {
            ResultadoInfo <SolicitudProductoReplicaInfo> solicitudProductoLista = null;

            try
            {
                Dictionary <string, object> parameters = AuxSolicitudProductoReplicaDAL.ObtenerParametrosPorPagina(filtro);
                DataSet ds = Retrieve("SolicitudProductoReplica_ObtenerPorPagina", parameters);
                if (ValidateDataSet(ds))
                {
                    solicitudProductoLista = MapSolicitudProductoReplicaDAL.ObtenerPorPagina(ds);
                }
            }
            catch (SqlException ex)
            {
                Logger.Error(ex);
                throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
            }
            catch (DataException ex)
            {
                Logger.Error(ex);
                throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(solicitudProductoLista);
        }
        /// <summary>
        /// Metodo que valida los datos para guardar
        /// </summary>
        /// <returns></returns>
        private bool ValidaGuardar()
        {
            bool   resultado = true;
            string mensaje   = string.Empty;

            try
            {
                bool selecionados = Contexto.Detalle.Any(a => a.Activo);
                if (!selecionados)
                {
                    mensaje = Properties.Resources.RecibirProductoAlmacen_MsgProductosRequeridos;
                }
                else
                {
                    SolicitudProductoReplicaInfo solicitudGuardar = Contexto;
                    var organizacion = new OrganizacionPL().ObtenerPorID(solicitudGuardar.AlmacenDestino.Organizacion.OrganizacionID);
                    var tipoOrg      = organizacion.TipoOrganizacion.TipoOrganizacionID;

                    if (tipoOrg == TipoOrganizacion.Centro.GetHashCode() || tipoOrg == TipoOrganizacion.Cadis.GetHashCode() || tipoOrg == TipoOrganizacion.Descanso.GetHashCode())
                    {
                        if (!ValidarAretesCompletos())
                        {
                            mensaje = Properties.Resources.RecibirProductoAlmacen_ValidarAretes;
                        }

                        /*else
                         * {
                         *  var existeArete = ValidarAretesDuplicados();
                         *  if (existeArete != string.Empty)
                         *  {
                         *      if (existeArete.Length > 15)
                         *      {
                         *          mensaje = string.Format(existeArete);
                         *      }
                         *      else
                         *      {
                         *          mensaje = string.Format(Properties.Resources.RecibirProductoAlmacen_ValidarAretesAsignado, existeArete);
                         *      }
                         *  }
                         * }*/
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            if (!string.IsNullOrWhiteSpace(mensaje))
            {
                resultado = false;
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], mensaje,
                                  MessageBoxButton.OK, MessageImage.Warning);
            }
            return(resultado);
        }
 /// <summary>
 /// Obtiene la lista de productos de un folio de consulta
 /// </summary>
 private void ObtenerSolicitudProducto()
 {
     try
     {
         var SolicitudProductoBL = new SolicitudProductoReplicaBL();
         Contexto.OrganizacionID = AuxConfiguracion.ObtenerOrganizacionUsuario();
         SolicitudProductoReplicaInfo filtros       = ObtenerFiltros();
         SolicitudProductoReplicaInfo resultadoInfo = SolicitudProductoBL.ObtenerPorID(filtros);
         if (resultadoInfo != null && resultadoInfo.Detalle != null && resultadoInfo.Detalle.Count > 0)
         {
             var um = new UnidadMedicionPL();
             resultadoInfo.Detalle.ToList().ForEach(e =>
             {
                 e.Producto = listaProductos.FirstOrDefault(x => x.ProductoId == e.ProductoID);
                 e.Producto.UnidadMedicion = um.ObtenerPorID(e.Producto.UnidadId);
                 e.UsuarioCreacionID       = usuario.UsuarioID;
             });
             gridDatos.ItemsSource  = resultadoInfo.Detalle;
             skAyudaFolio.IsEnabled = false;
             var recibido = resultadoInfo.Detalle.Any(a => a.AlmacenMovimientoID > 0);
             Contexto = resultadoInfo;
             if (!recibido)
             {
                 Contexto.Guardar = resultadoInfo.Guardar;
                 //if (ValidaHabilitarCapturaAretes(resultadoInfo.Detalle))
                 //{
                 //    btnCapturarAretes.IsEnabled = true;
                 //}
             }
             else
             {
                 Contexto.Detalle.ForEach(a => a.Editar = false);
                 string mensaje = Properties.Resources.RecibirProductoAlmacen_MsgRecibido;
                 SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], mensaje,
                                   MessageBoxButton.OK,
                                   MessageImage.Warning);
             }
         }
         else
         {
             gridDatos.ItemsSource = new List <RecibirProductoAlmacenReplica>();
         }
     }
     catch (ExcepcionGenerica)
     {
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.RecibirProductoAlmacen_ErrorBuscar, MessageBoxButton.OK, MessageImage.Error);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal], Properties.Resources.RecibirProductoAlmacen_ErrorBuscar, MessageBoxButton.OK, MessageImage.Error);
     }
 }
예제 #4
0
        /// <summary>
        ///     Metodo que mapea un folio de solicitud de productos de almacen
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        internal static SolicitudProductoReplicaInfo ObtenerPorID(DataSet ds)
        {
            SolicitudProductoReplicaInfo cab;

            try
            {
                Logger.Info();
                DataTable dt         = ds.Tables[ConstantesDAL.DtDatos];
                var       almacenDAL = new Implementacion.AlmacenDAL();
                cab = new SolicitudProductoReplicaInfo()
                {
                    OrganizacionID = Convert.ToInt32(dt.Rows[0]["OrganizacionID"]),
                    FolioSolicitud = Convert.ToInt64(dt.Rows[0]["FolioSolicitud"]),
                    Solicitud      = new FolioSolicitudInfo
                    {
                        FolioSolicitud = Convert.ToInt64(dt.Rows[0]["FolioSolicitud"])
                    },
                    AlmacenDestino = almacenDAL.ObtenerPorID(Convert.ToInt32(dt.Rows[0]["AlmacenDestinoID"])),
                    Activo         = Convert.ToBoolean(dt.Rows[0]["Activo"]).BoolAEnum()
                };
                cab.Detalle = (from solicitudInfo in dt.AsEnumerable()
                               select new SolicitudProductoReplicaDetalleInfo
                {
                    InterfaceTraspasoSAPID = solicitudInfo.Field <int>("InterfaceTraspasoSAPID"),
                    Producto = new ProductoInfo {
                        ProductoId = solicitudInfo.Field <int>("ProductoID")
                    },
                    FolioSolicitud = solicitudInfo.Field <long>("FolioSolicitud"),
                    ProductoID = solicitudInfo.Field <int>("ProductoID"),
                    CuentaSAP = solicitudInfo.Field <string>("CuentaSAP"),
                    Cantidad = solicitudInfo.Field <decimal>("Cantidad"),
                    PrecioUnitario = solicitudInfo.Field <decimal>("PrecioUnitario"),
                    FechaCreacion = solicitudInfo.Field <System.DateTime>("FechaCreacion"),
                    Activo = solicitudInfo.Field <bool>("ActivoDetalle"),
                    AlmacenMovimientoID = solicitudInfo.Field <long>("AlmacenMovimientoID"),
                    Editar = (solicitudInfo.Field <long>("AlmacenMovimientoID") == 0) ? true : false,
                    Material = solicitudInfo.Field <string>("Material")
                }).ToList();

                var cont = cab.Detalle.Where(a => a.AlmacenMovimientoID > 0).Count();
                cab.Guardar = (cont == 0) ? true : false;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(cab);
        }
예제 #5
0
        /// <summary>
        ///     Metodo que obtiene una lista paginada
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        internal static ResultadoInfo <SolicitudProductoReplicaInfo> ObtenerPorPagina(DataSet ds)
        {
            ResultadoInfo <SolicitudProductoReplicaInfo> resultado;

            try
            {
                Logger.Info();
                DataTable dt = ds.Tables[ConstantesDAL.DtDatos];
                SolicitudProductoReplicaInfo cab = new SolicitudProductoReplicaInfo()
                {
                    InterfaceTraspasoSAPID = Convert.ToInt32(dt.Rows[0]["InterfaceTraspasoSAPID"]),
                    OrganizacionID         = Convert.ToInt32(dt.Rows[0]["OrganizacionID"]),
                    FolioSolicitud         = Convert.ToInt64(dt.Rows[0]["FolioSolicitud"]),
                    Solicitud = new FolioSolicitudInfo
                    {
                        FolioSolicitud            = Convert.ToInt64(dt.Rows[0]["FolioSolicitud"]),
                        AlmacenDestinoDescripcion = Convert.ToString(dt.Rows[0]["AlmacenDestinoDescripcion"])
                    },
                    Activo = Convert.ToBoolean(dt.Rows[0]["Activo"]).BoolAEnum()
                };
                cab.Detalle = (from solicitudInfo in dt.AsEnumerable()
                               select new SolicitudProductoReplicaDetalleInfo
                {
                    Producto = new ProductoInfo {
                        ProductoId = solicitudInfo.Field <int>("ProductoID")
                    },
                    ProductoID = solicitudInfo.Field <int>("ProductoID"),
                    CuentaSAP = solicitudInfo.Field <string>("CuentaSAP"),
                    Cantidad = solicitudInfo.Field <decimal>("Cantidad"),
                    FechaCreacion = solicitudInfo.Field <System.DateTime>("FechaCreacion"),
                    Activo = solicitudInfo.Field <bool>("ActivoDetalle")
                }).ToList();
                resultado = new ResultadoInfo <SolicitudProductoReplicaInfo>
                {
                    Lista = new List <SolicitudProductoReplicaInfo>()
                    {
                        cab
                    },
                    TotalRegistros = Convert.ToInt32(ds.Tables[ConstantesDAL.DtContador].Rows[0]["TotalReg"])
                };
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
 /// <summary>
 /// Inicializa el Contexto
 /// </summary>
 private void InicializaContexto()
 {
     usuario = new UsuarioPL().ObtenerPorID(AuxConfiguracion.ObtenerUsuarioLogueado());
     usuario.OrganizacionID = usuario.Organizacion.OrganizacionID;
     almacenGeneral         = ObtenerAlmacenGeneral(usuario.Organizacion.OrganizacionID);
     Contexto =
         new SolicitudProductoReplicaInfo
     {
         OrganizacionID = usuario.OrganizacionID,
         AlmacenID      = almacenGeneral.AlmacenID,
         Solicitud      = InicializaContextoSolicitud(),
         Detalle        = new List <SolicitudProductoReplicaDetalleInfo>(),
         Activo         = EstatusEnum.Activo,
         Guardar        = false
     };
 }
        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);
        }
예제 #8
0
        /// <summary>
        /// Genera los totales por Detalle
        /// </summary>
        /// <param name="solicitud"></param>
        private void GeneraLineaTotales(SolicitudProductoReplicaInfo solicitud)
        {
            var sumaImporte = Math.Round(solicitud.Detalle.Sum(det => det.Cantidad * det.PrecioUnitario), 2);

            PolizaModel.Detalle = new List <PolizaDetalleModel>();

            var detalleModel = new PolizaDetalleModel
            {
                CantidadCabezas = string.Empty,
                PesoPromedio    = string.Empty,
                TipoGanado      = string.Empty,
                PesoTotal       = string.Empty,
                ImportePromedio = string.Empty,
                PrecioVenta     = sumaImporte.ToString("N2", CultureInfo.CurrentCulture),
            };

            PolizaModel.Detalle.Add(detalleModel);
        }
 /// <summary>
 /// Obtiene una lista paginada de SolicitudProducto
 /// </summary>
 /// <param name="pagina"></param>
 /// <param name="filtro"></param>
 /// <returns></returns>
 public ResultadoInfo <SolicitudProductoReplicaInfo> ObtenerPorPagina(SolicitudProductoReplicaInfo filtro)
 {
     try
     {
         Logger.Info();
         SolicitudProductoReplicaDAL solicitudProductoDAL = new SolicitudProductoReplicaDAL();
         return(solicitudProductoDAL.ObtenerPorPagina(filtro));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Obtiene parametros para obtener lista paginada
 /// </summary>
 /// <param name="pagina"></param>
 /// <param name="filtro"></param>
 /// <returns></returns>
 public static Dictionary <string, object> ObtenerParametrosPorPagina(SolicitudProductoReplicaInfo filtro)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@OrganizacionID", filtro.OrganizacionID },
             { "@FolioSolicitud", filtro.FolioSolicitud },
             { "@Activo", filtro.Activo }
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
예제 #11
0
        /// <summary>
        /// Genera las Lineas del Detalle
        /// </summary>
        /// <param name="solicitudProducto"></param>
        private void GeneraLineasDetalle(SolicitudProductoReplicaInfo solicitudProducto)
        {
            PolizaModel.Detalle = new List <PolizaDetalleModel>();
            PolizaDetalleModel detalleModel;

            foreach (var detalle in solicitudProducto.Detalle.Where(a => a.Activo))
            {
                detalleModel = new PolizaDetalleModel
                {
                    CantidadCabezas = detalle.Producto.ProductoId.ToString(CultureInfo.InvariantCulture),
                    PesoPromedio    = string.Empty,
                    TipoGanado      = detalle.Producto.ProductoDescripcion,
                    PesoTotal       = string.Format("{0} {1}.", detalle.Cantidad.ToString("N0"), detalle.Producto.UnidadMedicion.ClaveUnidad),
                    ImportePromedio = detalle.PrecioUnitario.ToString("N2"),
                    PrecioVenta     = Math.Round(detalle.Cantidad * detalle.PrecioUnitario, 2).ToString("N2"),
                };
                PolizaModel.Detalle.Add(detalleModel);
            }
            polizaImpresion.GenerarDetalles("Detalle");
        }
예제 #12
0
 /// <summary>
 /// Metodo para Guardar/Modificar una entidad SolicitudProducto
 /// además de generar movimiento de inventario
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public MemoryStream GuardarMovimientoInventario(SolicitudProductoReplicaInfo info)
 {
     try
     {
         Logger.Info();
         return(solicitudProductoDAL.GuardarMovimientoInventarioReplica(info));
     }
     catch (ExcepcionServicio ex)
     {
         throw ex;
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        /// <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);
                }
            }
        }
예제 #14
0
        private IList <PolizaInfo> ObtenerPoliza(SolicitudProductoReplicaInfo solicitud)
        {
            var polizasEntradaTraspaso = new List <PolizaInfo>();

            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoEntrada =
                ObtenerCostosProducto(solicitud.AlmacenDestino.AlmacenID);

            if (cuentasAlmacenProductoEntrada == null)
            {
                throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén  de destino");
            }

            TipoPolizaInfo tipoPoliza =
                TiposPoliza.FirstOrDefault(clave => clave.TipoPolizaID == TipoPoliza.EntradaTraspasoSAP.GetHashCode());

            if (tipoPoliza == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1}", "EL TIPO DE POLIZA",
                                                          TipoPoliza.EntradaTraspasoSAP));
            }

            IList <CuentaSAPInfo> cuentasSap = ObtenerCuentasSAP();
            string textoDocumento            = tipoPoliza.TextoDocumento;
            string tipoMovimiento            = tipoPoliza.ClavePoliza;
            string postFijoRef3 = tipoPoliza.PostFijoRef3;

            var linea = 1;

            //TO DO REVISAR SI CAMBIARA EL REF 3
            var ref3 = new StringBuilder();

            ref3.Append("03");
            ref3.Append(
                string.Format("{0}{1}{2}", DateTime.Today.Day, DateTime.Today.Month, DateTime.Today.Year).PadLeft(
                    10, ' '));
            ref3.Append(new Random(10).Next(10, 20));
            ref3.Append(new Random(30).Next(30, 40));
            ref3.Append(DateTime.Now.Millisecond);
            ref3.Append(postFijoRef3);

            //string numeroReferencia = ObtenerNumeroReferencia;
            string numeroReferencia = ObtenerNumeroReferenciaFolio(solicitud.FolioSolicitud);

            FechaBL  fec      = new FechaBL();
            var      fechaObj = fec.ObtenerFechaActual();
            DateTime fecha    = fechaObj.FechaActual;

            string archivoFolio = ObtenerArchivoFolio(fecha);

            var organizacionBL            = new OrganizacionBL();
            OrganizacionInfo organizacion = organizacionBL.ObtenerPorAlmacenID(solicitud.AlmacenDestino.AlmacenID);

            if (organizacion == null)
            {
                organizacion = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }
            IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamilia =
                ObtenerCostosSubFamilia(solicitud.AlmacenDestino.AlmacenID);

            ParametroOrganizacionInfo parametroCentroCosto =
                ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

            if (parametroCentroCosto == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
            }
            bool afectaCosto;

            foreach (var solicitudDetalle in solicitud.Detalle.Where(a => a.Activo).ToList())
            {
                CuentaSAPInfo claveContableCargo;
                afectaCosto = ValidarAfectacionCuentaCosto(solicitudDetalle.Producto);
                if (!afectaCosto && (solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                                     solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                                     solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()))
                {
                    var cuentaSapSubFamiliaEntrada = cuentasSubFamilia.FirstOrDefault(
                        cuenta => cuenta.SubFamiliaID == solicitudDetalle.Producto.SubFamilia.SubFamiliaID);

                    if (cuentaSapSubFamiliaEntrada == null)
                    {
                        cuentaSapSubFamiliaEntrada = new CuentaAlmacenSubFamiliaInfo();
                    }
                    claveContableCargo =
                        cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSubFamiliaEntrada.CuentaSAPID);
                }
                else
                {
                    var cuentaSapEntrada = cuentasAlmacenProductoEntrada.FirstOrDefault(
                        cuenta => cuenta.ProductoID == solicitudDetalle.ProductoID);
                    if (cuentaSapEntrada == null)
                    {
                        cuentaSapEntrada = new ClaseCostoProductoInfo();
                    }
                    claveContableCargo =
                        cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapEntrada.CuentaSAPID);
                }

                if (solicitud.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode())
                {
                    ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                                                                       ParametrosEnum.CuentaMedicamentoTransito.ToString());

                    if (cuentaMedicamento == null)
                    {
                        cuentaMedicamento = new ParametroOrganizacionInfo
                        {
                            Valor = string.Empty
                        };
                    }

                    claveContableCargo =
                        cuentasSap.FirstOrDefault(
                            sap =>
                            sap.CuentaSAP.Equals(cuentaMedicamento.Valor, StringComparison.InvariantCultureIgnoreCase));
                }
                if (claveContableCargo == null)
                {
                    throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}",
                                                              solicitudDetalle.Producto.Descripcion));
                }
                if ((solicitudDetalle.Cantidad * solicitudDetalle.PrecioUnitario) <= 0)
                {
                    continue;
                }
                var datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = fecha,
                    Folio            = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento   = postFijoRef3,
                    Importe          =
                        string.Format("{0}",
                                      Math.Round(
                                          solicitudDetalle.Cantidad * solicitudDetalle.PrecioUnitario, 2).
                                      ToString("F2")),
                    Renglon     = Convert.ToString(linea++),
                    ImporteIva  = "0",
                    Ref3        = ref3.ToString(),
                    Cuenta      = claveContableCargo.CuentaSAP,
                    CentroCosto =
                        claveContableCargo.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                            ? parametroCentroCosto.Valor
                            : string.Empty,
                    Division      = organizacion.Division,
                    ArchivoFolio  = archivoFolio,
                    PesoOrigen    = 0,
                    TipoDocumento = textoDocumento,
                    Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                                  tipoMovimiento,
                                                  solicitud.FolioSolicitud.ToString(
                                                      CultureInfo.InvariantCulture),
                                                  solicitudDetalle.Producto.Descripcion,
                                                  string.Format("{0} {1}.",
                                                                solicitudDetalle.Cantidad.ToString("N2"),
                                                                solicitudDetalle.Producto.UnidadMedicion.
                                                                ClaveUnidad),
                                                  solicitudDetalle.PrecioUnitario.ToString("C2")),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = claveContableCargo.Descripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);
                polizasEntradaTraspaso.Add(polizaSalida);

                var claveContableAbono = cuentasSap.FirstOrDefault(sap => sap.CuentaSAP == solicitudDetalle.CuentaSAP);
                if (claveContableAbono == null)
                {
                    throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta {0}, del producto {1}",
                                                              solicitudDetalle.CuentaSAP, solicitudDetalle.Producto.ProductoDescripcion));
                }

                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = fecha,

                    Folio          = solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                    ClaseDocumento = postFijoRef3,
                    Importe        =
                        string.Format("{0}",
                                      Math.Round((solicitudDetalle.Cantidad * solicitudDetalle.PrecioUnitario) * -1, 2).ToString("F2")),
                    Renglon      = Convert.ToString(linea++),
                    ImporteIva   = "0",
                    Ref3         = ref3.ToString(),
                    Cuenta       = claveContableAbono.CuentaSAP,
                    ArchivoFolio = archivoFolio,
                    CentroCosto  =
                        claveContableAbono.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                            ? parametroCentroCosto.Valor
                            : string.Empty,
                    Division      = organizacion.Division,
                    PesoOrigen    = 0,
                    TipoDocumento = textoDocumento,
                    Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                                  tipoMovimiento,
                                                  solicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture),
                                                  solicitudDetalle.Producto.Descripcion,
                                                  string.Format("{0} {1}.",
                                                                solicitudDetalle.Cantidad.ToString("N2"),
                                                                solicitudDetalle.Producto.UnidadMedicion.
                                                                ClaveUnidad),
                                                  solicitudDetalle.PrecioUnitario.ToString("C2")),
                    Sociedad            = organizacion.Sociedad,
                    DescripcionProducto = claveContableAbono.Descripcion,
                    Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad),
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasEntradaTraspaso.Add(polizaSalida);
            }
            return(polizasEntradaTraspaso);
        }