/// <summary>
 /// Obtiene un trapaso de materia prima por su folio
 /// </summary>
 /// <param name="filtro"></param>
 /// <returns></returns>
 public TraspasoMpPaMedInfo ObtenerPorFolioTraspaso(FiltroTraspasoMpPaMed filtro)
 {
     try
     {
         Dictionary <string, object> parameters = AuxTraspasoMateriaPrimaDAL.ObtenerParametrosPorFolio(filtro);
         DataSet             ds     = Retrieve("TraspasoMateriaPrima_ObtenerPorFolio", parameters);
         TraspasoMpPaMedInfo result = null;
         if (ValidateDataSet(ds))
         {
             result = MapTraspasoMateriaPrimaDAL.ObtenerPorFolio(ds);
         }
         return(result);
     }
     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);
     }
 }
 /// <summary>
 /// Inicializa el Contexto
 /// </summary>
 private void InicializaContexto()
 {
     Contexto =
         new TraspasoMpPaMedInfo
     {
         OrganizacionOrigen = new OrganizacionInfo
         {
             TipoOrganizacion = new TipoOrganizacionInfo
             {
                 TipoOrganizacionID = TipoOrganizacion.Centro.GetHashCode()
             }
         }
     };
 }
        /// <summary>
        /// Método que obtiene un traspaso de materia prima por su folio
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static TraspasoMpPaMedInfo ObtenerPorFolio(DataSet ds)
        {
            try
            {
                var contratoDAL = new ContratoDAL();
                var almacenDAL  = new AlmacenDAL();
                var almacenInventarioLoteDAL = new AlmacenInventarioLoteDAL();
                var cuentaSAPDAL             = new CuentaSAPDAL();
                var productoDAL = new ProductoDAL();
                Logger.Info();
                DataTable           dt     = ds.Tables[ConstantesDAL.DtDatos];
                TraspasoMpPaMedInfo result =
                    (from info in dt.AsEnumerable()
                     select
                     new TraspasoMpPaMedInfo
                {
                    TraspasoMateriaPrimaID = info.Field <int>("TraspasoMateriaPrimaID"),
                    ContratoOrigen = info.Field <int?>("ContratoOrigenID") != null ? contratoDAL.ObtenerPorId(new ContratoInfo {
                        ContratoId = info.Field <int>("ContratoOrigenID")
                    }) : new ContratoInfo(),
                    ContratoDestino = info.Field <int?>("ContratoDestinoID") != null ? contratoDAL.ObtenerPorId(new ContratoInfo {
                        ContratoId = info.Field <int>("ContratoDestinoID")
                    }) : new ContratoInfo(),
                    FolioTraspaso = info.Field <long>("FolioTraspaso"),
                    AlmacenOrigen = almacenDAL.ObtenerPorID(info.Field <int>("AlmacenOrigenID")),
                    AlmacenDestino = almacenDAL.ObtenerPorID(info.Field <int>("AlmacenDestinoID")),
                    LoteMpOrigen = info.Field <int?>("InventarioLoteOrigenID") != null ? almacenInventarioLoteDAL.ObtenerAlmacenInventarioLotePorId(info.Field <int>("InventarioLoteOrigenID")) : new AlmacenInventarioLoteInfo(),
                    LoteMpDestino = info.Field <int?>("InventarioLoteDestinoID") != null ? almacenInventarioLoteDAL.ObtenerAlmacenInventarioLotePorId(info.Field <int>("InventarioLoteDestinoID")) : new AlmacenInventarioLoteInfo(),
                    CuentaContable = info.Field <int?>("CuentaSAPID") != null ? cuentaSAPDAL.ObtenerPorID(info.Field <int>("CuentaSAPID")) : new CuentaSAPInfo(),
                    JustificacionDestino = info.Field <string>("Justificacion"),
                    CantidadTraspasarOrigen = info.Field <decimal>("CantidadSalida"),
                    CantidadTraspasarDestino = info.Field <decimal>("CantidadEntrada"),
                    ProductoOrigen = productoDAL.ObtenerPorID(new ProductoInfo {
                        ProductoId = info.Field <int>("ProductoID")
                    }),
                    FechaTraspaso = info.Field <DateTime>("FechaMovimiento")
                }).First();

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
 /// <summary>
 /// Inicializa el Contexto
 /// </summary>
 private void InicializaContexto()
 {
     Contexto =
         new TraspasoMpPaMedInfo
     {
         TipoAlmacenOrigen = new TipoAlmacenInfo
         {
             ListaTipoAlmacen = configuracionTraspasoAlmacen.Select(tipo => tipo.TipoAlmacenOrigen.TipoAlmacenID).Distinct().ToList()
         },
         TipoAlmacenDestino = new TipoAlmacenInfo(),
         OrganizacionOrigen = new OrganizacionInfo
         {
             TipoOrganizacion = new TipoOrganizacionInfo
             {
                 TipoOrganizacionID = TipoOrganizacion.Ganadera.GetHashCode()
             }
         },
         OrganizacionDestino = new OrganizacionInfo
         {
             TipoOrganizacion = new TipoOrganizacionInfo
             {
                 TipoOrganizacionID = TipoOrganizacion.Ganadera.GetHashCode()
             }
         },
         AlmacenOrigen  = new AlmacenInfo(),
         AlmacenDestino = new AlmacenInfo(),
         ProductoOrigen = new ProductoInfo
         {
             Familia = new FamiliaInfo()
         },
         ProductoDestino = new ProductoInfo
         {
             Familia = new FamiliaInfo()
         },
         ProveedorOrigen          = new ProveedorInfo(),
         ProveedorDestino         = new ProveedorInfo(),
         ContratoOrigen           = new ContratoInfo(),
         ContratoDestino          = new ContratoInfo(),
         LoteMpOrigen             = new AlmacenInventarioLoteInfo(),
         LoteMpDestino            = new AlmacenInventarioLoteInfo(),
         AlmacenInventarioOrigen  = new AlmacenInventarioInfo(),
         AlmacenInventarioDestino = new AlmacenInventarioInfo(),
         CuentaContable           = new CuentaSAPInfo()
     };
     CargarCuentasContables();
 }
Exemple #5
0
        /// <summary>
        /// Genera las Lineas del Detalle
        /// </summary>
        /// <param name="traspasoMp"></param>
        private void GeneraLineasDetalle(TraspasoMpPaMedInfo traspasoMp)
        {
            PolizaModel.Detalle = new List <PolizaDetalleModel>();

            var detalleModel = new PolizaDetalleModel
            {
                CantidadCabezas = traspasoMp.ProductoOrigen.ProductoId.ToString(CultureInfo.InvariantCulture),
                PesoPromedio    = string.Empty,
                TipoGanado      = traspasoMp.ProductoOrigen.ProductoDescripcion,
                PesoTotal       = string.Format("{0} {1}.", traspasoMp.CantidadTraspasarOrigen.ToString("N0"), traspasoMp.ProductoOrigen.UnidadMedicion.ClaveUnidad),
                ImportePromedio = traspasoMp.PrecioTraspasoOrigen.ToString("N2"),
                PrecioVenta     = traspasoMp.ImporteTraspaso.ToString("N2"),
            };

            PolizaModel.Detalle.Add(detalleModel);

            polizaImpresion.GenerarDetalles("Detalle");
        }
Exemple #6
0
        /// <summary>
        /// Genera los totales por Detalle
        /// </summary>
        /// <param name="traspasoMp"></param>
        private void GeneraLineaTotales(TraspasoMpPaMedInfo traspasoMp)
        {
            var sumaImporte = traspasoMp.ImporteTraspaso;

            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 un trapaso de materia prima por su folio
 /// </summary>
 /// <param name="filtro"></param>
 /// <returns></returns>
 public TraspasoMpPaMedInfo ObtenerPorFolioTraspaso(FiltroTraspasoMpPaMed filtro)
 {
     try
     {
         Logger.Info();
         var traspasoMateriaPrimaDAL = new TraspasoMateriaPrimaDAL();
         TraspasoMpPaMedInfo result  = traspasoMateriaPrimaDAL.ObtenerPorFolioTraspaso(filtro);
         return(result);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Consulta un traspaso para su cancelacion por su Folio
 /// </summary>
 private void ConsultarTraspasoPorFolio()
 {
     try
     {
         var traspasoMateriaPrimaBL = new TraspasoMateriaPrimaBL();
         if (iudFolio.Value != null)
         {
             var filtro = new FiltroTraspasoMpPaMed
             {
                 Organizacion = new OrganizacionInfo
                 {
                     OrganizacionID = AuxConfiguracion.ObtenerOrganizacionUsuario()
                 },
                 Folio  = iudFolio.Value.Value,
                 Activo = EstatusEnum.Activo
             };
             TraspasoMpPaMedInfo traspasoMp = traspasoMateriaPrimaBL.ObtenerPorFolioTraspaso(filtro);
             if (traspasoMp == null)
             {
                 SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                   Properties.Resources.TraspasoMPPAMED_NoSeEncuentraFolio, MessageBoxButton.OK,
                                   MessageImage.Error);
                 return;
             }
             Contexto = traspasoMp;
             CargarDatosCancelacion();
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                           Properties.Resources.TraspasoMPPAMED_ErrorCargarDatosCancelacion, MessageBoxButton.OK,
                           MessageImage.Error);
     }
 }
        /// <summary>
        /// Llama ventana para ayuda de folio de traspaso
        /// </summary>
        private void AyudaFolioTraspaso()
        {
            try
            {
                var traspasoMPPAMEDBusquedaFolio = new TraspasoMPPAMEDBusquedaFolio();
                traspasoMPPAMEDBusquedaFolio.InicializaPaginador();
                traspasoMPPAMEDBusquedaFolio.Owner = Application.Current.Windows[ConstantesVista.WindowPrincipal];
                MostrarCentrado(traspasoMPPAMEDBusquedaFolio);

                if (traspasoMPPAMEDBusquedaFolio.TraspasoMpPaMed != null)
                {
                    Contexto       = traspasoMPPAMEDBusquedaFolio.TraspasoMpPaMed;
                    iudFolio.Value = Convert.ToInt32(Contexto.FolioTraspaso);
                    CargarDatosCancelacion();
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.TraspasoMPPAMED_ErrorCargarAyudaFolios, MessageBoxButton.OK,
                                  MessageImage.Error);
            }
        }
Exemple #10
0
        private IList <PolizaInfo> ObtenerPoliza(TraspasoMpPaMedInfo traspasoMp)
        {
            var polizasSalidaTraspaso = new List <PolizaInfo>();

            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoSalida =
                ObtenerCostosProducto(traspasoMp.AlmacenOrigen.AlmacenID);
            IList <ClaseCostoProductoInfo> cuentasAlmacenProductoEntrada =
                ObtenerCostosProducto(traspasoMp.AlmacenDestino.AlmacenID);

            if (cuentasAlmacenProductoSalida == null)
            {
                throw new ExcepcionServicio("No se encuentran cuentas configuradas, para productos del almacén origen");
            }
            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.EntradaTraspaso.GetHashCode());

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

            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);

            var almacenMovimientoBL = new AlmacenMovimientoBL();
            AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerPorId(traspasoMp.AlmacenMovimientoID);

            string numeroReferencia = ObtenerNumeroReferenciaFolio(almacenMovimiento.FolioMovimiento);
            //string numeroReferencia = ObtenerNumeroReferencia;

            DateTime fecha        = traspasoMp.FechaTraspaso;
            string   archivoFolio = ObtenerArchivoFolio(fecha);

            var organizacionBL = new OrganizacionBL();
            OrganizacionInfo organizacionOrigen = organizacionBL.ObtenerPorAlmacenID(traspasoMp.AlmacenOrigen.AlmacenID);

            if (organizacionOrigen == null)
            {
                organizacionOrigen = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }
            OrganizacionInfo organizacionDestino = organizacionBL.ObtenerPorAlmacenID(traspasoMp.AlmacenDestino.AlmacenID);

            if (organizacionDestino == null)
            {
                organizacionDestino = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }
            IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamiliaSalida =
                ObtenerCostosSubFamilia(traspasoMp.AlmacenOrigen.AlmacenID);

            IList <CuentaAlmacenSubFamiliaInfo> cuentasSubFamiliaEntrada =
                ObtenerCostosSubFamilia(traspasoMp.AlmacenDestino.AlmacenID);

            ParametroOrganizacionInfo parametroCentroCostoOrigen =
                ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

            if (parametroCentroCostoOrigen == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE COSTO NO CONFIGURADO"));
            }
            ParametroOrganizacionInfo parametroCentroCostoDestino =
                ObtenerParametroOrganizacionPorClave(organizacionDestino.OrganizacionID,
                                                     ParametrosEnum.CTACENTROCOSTOMP.ToString());

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

            afectaCosto = ValidarAfectacionCuentaCosto(traspasoMp.ProductoOrigen);
            if (!afectaCosto && (traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                                 traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                                 traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) ||
                traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.GeneralGanadera.GetHashCode())
            {
                var cuentaSapSubFamiliaEntrada = cuentasSubFamiliaEntrada.FirstOrDefault(
                    cuenta => cuenta.SubFamiliaID == traspasoMp.ProductoOrigen.SubFamilia.SubFamiliaID);

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

            if (traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode())
            {
                ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacionDestino.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}",
                                                          traspasoMp.ProductoOrigen.ProductoDescripcion));
            }
            linea = 0;
            linea++;
            var datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = fecha,
                Folio            = numeroReferencia,
                ClaseDocumento   = postFijoRef3,
                Importe          = string.Format("{0}", traspasoMp.ImporteTraspaso.ToString("F2")),
                Renglon          = Convert.ToString(linea),
                ImporteIva       = "0",
                Ref3             = ref3.ToString(),
                Cuenta           = claveContableCargo.CuentaSAP,
                CentroCosto      =
                    claveContableCargo.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                        ? parametroCentroCostoDestino.Valor
                        : string.Empty,
                Division      = organizacionDestino.Division,
                ArchivoFolio  = archivoFolio,
                PesoOrigen    = 0,
                TipoDocumento = textoDocumento,
                Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                              tipoMovimiento,
                                              numeroReferencia,
                                              traspasoMp.ProductoOrigen.ProductoDescripcion,
                                              string.Format("{0} {1}.",
                                                            traspasoMp.CantidadTraspasarDestino.ToString("N2"),
                                                            traspasoMp.ProductoOrigen.UnidadMedicion.ClaveUnidad),
                                              traspasoMp.PrecioTraspasoDestino.ToString("C2")),
                Sociedad            = organizacionDestino.Sociedad,
                DescripcionProducto = claveContableCargo.Descripcion,
                Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacionDestino.Sociedad),
            };
            PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);

            polizasSalidaTraspaso.Add(polizaSalida);

            #region CuentaAbono

            CuentaSAPInfo claveContableAbono = null;
            afectaCosto = ValidarAfectacionCuentaCosto(traspasoMp.ProductoOrigen);
            if (!afectaCosto && (traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.Enfermeria.GetHashCode() ||
                                 traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ManejoGanado.GetHashCode() ||
                                 traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) ||
                traspasoMp.AlmacenDestino.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.GeneralGanadera.GetHashCode())
            {
                var cuentaSapSubFamiliaSalida = cuentasSubFamiliaSalida.FirstOrDefault(
                    cuenta => cuenta.SubFamiliaID == traspasoMp.ProductoOrigen.SubFamilia.SubFamiliaID);

                if (cuentaSapSubFamiliaSalida == null)
                {
                    cuentaSapSubFamiliaSalida = new CuentaAlmacenSubFamiliaInfo();
                }
                claveContableAbono =
                    cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSubFamiliaSalida.CuentaSAPID);
            }
            else
            {
                var cuentaSapSalida = cuentasAlmacenProductoSalida.FirstOrDefault(
                    cuenta => cuenta.ProductoID == traspasoMp.ProductoOrigen.ProductoId);
                if (cuentaSapSalida == null)
                {
                    cuentaSapSalida = new ClaseCostoProductoInfo();
                }
                claveContableAbono =
                    cuentasSap.FirstOrDefault(sap => sap.CuentaSAPID == cuentaSapSalida.CuentaSAPID);
            }

            if (traspasoMp.AlmacenOrigen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.CentroAcopio.GetHashCode())
            {
                ParametroOrganizacionInfo cuentaMedicamento = ObtenerParametroOrganizacionPorClave(organizacionOrigen.OrganizacionID,
                                                                                                   ParametrosEnum.CuentaMedicamentoTransito.ToString());

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

                claveContableAbono =
                    cuentasSap.FirstOrDefault(
                        sap =>
                        sap.CuentaSAP.Equals(cuentaMedicamento.Valor, StringComparison.InvariantCultureIgnoreCase));
            }
            if (claveContableAbono == null)
            {
                throw new ExcepcionServicio(string.Format("No se encontró configurada la cuenta del producto {0}",
                                                          traspasoMp.ProductoOrigen.ProductoDescripcion));
            }
            #endregion CuentaAbono

            linea++;
            datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = fecha,
                Folio            = numeroReferencia,
                ClaseDocumento   = postFijoRef3,
                Importe          =
                    string.Format("{0}", (traspasoMp.ImporteTraspaso * -1).ToString("F2")),
                Renglon      = Convert.ToString(linea),
                ImporteIva   = "0",
                Ref3         = ref3.ToString(),
                Cuenta       = claveContableAbono.CuentaSAP,
                ArchivoFolio = archivoFolio,
                CentroCosto  =
                    claveContableAbono.CuentaSAP.StartsWith(PrefijoCuentaCentroCosto)
                        ? parametroCentroCostoOrigen.Valor
                        : string.Empty,
                Division      = organizacionOrigen.Division,
                PesoOrigen    = 0,
                TipoDocumento = textoDocumento,
                Concepto      = String.Format("{0}-{1} {2} {3} {4}",
                                              tipoMovimiento,
                                              numeroReferencia,
                                              traspasoMp.ProductoOrigen.ProductoDescripcion,
                                              string.Format("{0} {1}.",
                                                            traspasoMp.CantidadTraspasarOrigen.ToString("N2"),
                                                            traspasoMp.ProductoOrigen.UnidadMedicion.ClaveUnidad),
                                              traspasoMp.PrecioTraspasoOrigen.ToString("C2")),
                Sociedad            = organizacionOrigen.Sociedad,
                DescripcionProducto = claveContableAbono.Descripcion,
                Segmento            = string.Format("{0}{1}", PrefijoSegmento, organizacionOrigen.Sociedad),
            };
            polizaSalida = GeneraRegistroPoliza(datos);
            polizasSalidaTraspaso.Add(polizaSalida);

            return(polizasSalidaTraspaso);
        }
        private long GenerarMovimientoEntrada(TraspasoMpPaMedInfo info)
        {
            var     almacenInventarioBL        = new AlmacenInventarioBL();
            var     almacenInventarioLoteBL    = new AlmacenInventarioLoteBL();
            var     almacenMovimientoBL        = new AlmacenMovimientoBL();
            var     almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();
            decimal cantidadTraspaso           = info.CantidadTraspasarDestino;

            decimal precioPromedio = 0;

            List <AlmacenInventarioInfo> inventariosDestino = almacenInventarioBL.ObtienePorAlmacenId(info.AlmacenDestino);

            if (inventariosDestino != null && inventariosDestino.Any())
            {
                AlmacenInventarioInfo almacenInventarioDestino = inventariosDestino.FirstOrDefault(inv => inv.ProductoID == info.ProductoDestino.ProductoId);
                if (almacenInventarioDestino != null)
                {
                    almacenInventarioDestino.Cantidad              = almacenInventarioDestino.Cantidad + cantidadTraspaso;
                    almacenInventarioDestino.Importe               = almacenInventarioDestino.Importe + info.ImporteTraspaso;
                    almacenInventarioDestino.PrecioPromedio        = almacenInventarioDestino.Importe / almacenInventarioDestino.Cantidad;
                    almacenInventarioDestino.UsuarioModificacionID = info.Usuario.UsuarioID;

                    almacenInventarioBL.Actualizar(almacenInventarioDestino);
                }
                else
                {
                    //Crear el Inventario

                    var almacenInventarioGuardar = new AlmacenInventarioInfo
                    {
                        AlmacenID         = info.AlmacenDestino.AlmacenID,
                        ProductoID        = info.ProductoDestino.ProductoId,
                        Cantidad          = cantidadTraspaso,
                        Importe           = info.ImporteTraspaso,
                        PrecioPromedio    = info.ImporteTraspaso / cantidadTraspaso,
                        UsuarioCreacionID = info.Usuario.UsuarioID
                    };
                    almacenInventarioBL.Crear(almacenInventarioGuardar);
                }
            }
            else
            {
                //Crear el Inventario

                var almacenInventarioGuardar = new AlmacenInventarioInfo
                {
                    AlmacenID         = info.AlmacenDestino.AlmacenID,
                    ProductoID        = info.ProductoDestino.ProductoId,
                    Cantidad          = cantidadTraspaso,
                    Importe           = info.ImporteTraspaso,
                    PrecioPromedio    = info.ImporteTraspaso / cantidadTraspaso,
                    UsuarioCreacionID = info.Usuario.UsuarioID
                };
                almacenInventarioBL.Crear(almacenInventarioGuardar);
            }
            if (info.LoteMpDestino.AlmacenInventarioLoteId != 0)
            {
                AlmacenInventarioLoteInfo loteDestino = almacenInventarioLoteBL.ObtenerAlmacenInventarioLotePorId(info.LoteMpDestino.AlmacenInventarioLoteId);

                if (loteDestino != null)
                {
                    loteDestino.Cantidad              = loteDestino.Cantidad + cantidadTraspaso;
                    loteDestino.Importe               = loteDestino.Importe + info.ImporteTraspaso;
                    loteDestino.PrecioPromedio        = loteDestino.Importe / loteDestino.Cantidad;
                    loteDestino.UsuarioModificacionId = info.Usuario.UsuarioID;

                    almacenInventarioLoteBL.Actualizar(loteDestino);
                }
            }
            var almacenMovimientoDestino = new AlmacenMovimientoInfo
            {
                AlmacenID         = info.AlmacenDestino.AlmacenID,
                TipoMovimientoID  = TipoMovimiento.EntradaAlmacen.GetHashCode(),
                ProveedorId       = info.ProveedorDestino.ProveedorID,
                Status            = Estatus.AplicadoInv.GetHashCode(),
                UsuarioCreacionID = info.Usuario.UsuarioID,
                Observaciones     = info.JustificacionDestino
            };
            long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimientoDestino);

            precioPromedio = info.ImporteTraspaso / info.CantidadTraspasarDestino;

            var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle
            {
                AlmacenMovimientoID = almacenMovimientoID,
                //ContratoId = info.ContratoDestino.ContratoId,
                AlmacenInventarioLoteId = info.LoteMpDestino.AlmacenInventarioLoteId,
                Piezas            = 0,
                ProductoID        = info.ProductoDestino.ProductoId,
                Precio            = precioPromedio,
                Cantidad          = cantidadTraspaso,
                Importe           = info.ImporteTraspaso,
                UsuarioCreacionID = info.Usuario.UsuarioID
            };

            almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalleInfo);

            return(almacenMovimientoID);
        }
        private long GenerarMovimientoSalida(TraspasoMpPaMedInfo info)
        {
            var     almacenInventarioBL        = new AlmacenInventarioBL();
            var     almacenInventarioLoteBL    = new AlmacenInventarioLoteBL();
            var     almacenMovimientoBL        = new AlmacenMovimientoBL();
            var     almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();
            decimal cantidadTraspaso           = info.CantidadTraspasarOrigen;

            List <AlmacenInventarioInfo> inventariosOrigen       = almacenInventarioBL.ObtienePorAlmacenId(info.AlmacenOrigen);
            AlmacenInventarioInfo        almacenInventarioOrigen = null;
            decimal precioPromedio = 0;
            decimal importe        = 0;

            if (inventariosOrigen != null && inventariosOrigen.Any())
            {
                almacenInventarioOrigen =
                    inventariosOrigen.FirstOrDefault(inv => inv.ProductoID == info.ProductoOrigen.ProductoId);
                if (almacenInventarioOrigen != null)
                {
                    almacenInventarioOrigen.Cantidad = almacenInventarioOrigen.Cantidad - cantidadTraspaso;
                    almacenInventarioOrigen.Importe  = almacenInventarioOrigen.Importe -
                                                       Math.Round(cantidadTraspaso * almacenInventarioOrigen.PrecioPromedio, 2);
                    if (almacenInventarioOrigen.Importe < 0)
                    {
                        almacenInventarioOrigen.Importe = 0;
                    }
                    if (almacenInventarioOrigen.Cantidad > 0)
                    {
                        almacenInventarioOrigen.PrecioPromedio = almacenInventarioOrigen.Importe / almacenInventarioOrigen.Cantidad;
                    }
                    almacenInventarioOrigen.UsuarioModificacionID = info.Usuario.UsuarioID;

                    almacenInventarioBL.Actualizar(almacenInventarioOrigen);
                    precioPromedio = almacenInventarioOrigen.PrecioPromedio;
                    importe        = precioPromedio * cantidadTraspaso;
                }
            }
            if (info.LoteMpOrigen.AlmacenInventarioLoteId != 0)
            {
                AlmacenInventarioLoteInfo loteOrigen = almacenInventarioLoteBL.ObtenerAlmacenInventarioLotePorId(info.LoteMpOrigen.AlmacenInventarioLoteId);

                if (loteOrigen != null)
                {
                    loteOrigen.Cantidad = loteOrigen.Cantidad - cantidadTraspaso;
                    loteOrigen.Importe  = loteOrigen.Importe - Math.Round(cantidadTraspaso * loteOrigen.PrecioPromedio, 2);
                    if (loteOrigen.Importe < 0)
                    {
                        loteOrigen.Importe = 0;
                    }
                    if (loteOrigen.Cantidad > 0)
                    {
                        loteOrigen.PrecioPromedio = loteOrigen.Importe / loteOrigen.Cantidad;
                    }
                    loteOrigen.UsuarioModificacionId = info.Usuario.UsuarioID;

                    almacenInventarioLoteBL.Actualizar(loteOrigen);
                    precioPromedio = loteOrigen.PrecioPromedio;
                    importe        = precioPromedio * cantidadTraspaso;
                }
            }
            var almacenMovimientoOrigen = new AlmacenMovimientoInfo
            {
                AlmacenID         = info.AlmacenOrigen.AlmacenID,
                TipoMovimientoID  = TipoMovimiento.ProductoSalidaTraspaso.GetHashCode(),
                ProveedorId       = info.ProveedorOrigen.ProveedorID,
                Status            = Estatus.AplicadoInv.GetHashCode(),
                UsuarioCreacionID = info.Usuario.UsuarioID,
                Observaciones     = info.JustificacionDestino
            };
            long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimientoOrigen);

            if (almacenInventarioOrigen != null)
            {
                var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle
                {
                    AlmacenMovimientoID     = almacenMovimientoID,
                    AlmacenInventarioLoteId = info.LoteMpOrigen.AlmacenInventarioLoteId,
                    Piezas            = 0,
                    ProductoID        = info.ProductoOrigen.ProductoId,
                    Precio            = precioPromedio,
                    Cantidad          = cantidadTraspaso,
                    Importe           = importe,
                    UsuarioCreacionID = info.Usuario.UsuarioID
                };
                almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalleInfo);
            }
            info.ImporteTraspaso = importe;
            return(almacenMovimientoID);
        }
        /// <summary>
        /// Metodo para Guardar/Modificar una entidad TraspasoMateriaPrima
        /// </summary>
        /// <param name="info"></param>
        public Dictionary <long, MemoryStream> GuardarTraspaso(TraspasoMpPaMedInfo info)
        {
            try
            {
                var resultado = new Dictionary <long, MemoryStream>();
                Logger.Info();
                var traspasoMateriaPrimaDAL = new TraspasoMateriaPrimaDAL();
                using (var transaction = new TransactionScope())
                {
                    long almacenMovimientoOrigenID  = GenerarMovimientoSalida(info);
                    long almacenMovimientoDestinoID = GenerarMovimientoEntrada(info);

                    var traspasoMateriaPrimaGuardar = new TraspasoMateriaPrimaInfo
                    {
                        ContratoOrigen               = info.ContratoOrigen,
                        ContratoDestino              = info.ContratoDestino,
                        Organizacion                 = info.Usuario.Organizacion,
                        AlmacenOrigen                = info.AlmacenOrigen,
                        AlmacenDestino               = info.AlmacenDestino,
                        AlmacenInventarioLoteOrigen  = info.LoteMpOrigen,
                        AlmacenInventarioLoteDestino = info.LoteMpDestino,
                        CuentaSAP               = info.CuentaContable,
                        Justificacion           = info.JustificacionDestino,
                        AlmacenMovimientoOrigen =
                            new AlmacenMovimientoInfo {
                            AlmacenMovimientoID = almacenMovimientoOrigenID
                        },
                        AlmacenMovimientoDestino =
                            new AlmacenMovimientoInfo {
                            AlmacenMovimientoID = almacenMovimientoDestinoID
                        },
                        Activo            = EstatusEnum.Activo,
                        UsuarioCreacionID = info.Usuario.UsuarioID
                    };

                    traspasoMateriaPrimaGuardar = traspasoMateriaPrimaDAL.Crear(traspasoMateriaPrimaGuardar);
                    info.FolioTraspaso          = traspasoMateriaPrimaGuardar.FolioTraspaso;
                    info.FechaTraspaso          = traspasoMateriaPrimaGuardar.FechaMovimiento;
                    info.AlmacenMovimientoID    = almacenMovimientoDestinoID;
                    MemoryStream pdfPoliza = null;
                    if (info.AlmacenOrigen.AlmacenID != info.AlmacenDestino.AlmacenID)
                    {
                        var productoBL = new ProductoBL();
                        info.ProductoOrigen  = productoBL.ObtenerPorID(info.ProductoOrigen);
                        info.ProductoDestino = info.ProductoOrigen;
                        PolizaAbstract     poliza       = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.EntradaTraspaso);
                        IList <PolizaInfo> listaPolizas = poliza.GeneraPoliza(info);
                        pdfPoliza = poliza.ImprimePoliza(info, listaPolizas);

                        if (listaPolizas != null && listaPolizas.Any())
                        {
                            listaPolizas.ToList().ForEach(datos =>
                            {
                                datos.OrganizacionID         = info.Usuario.Organizacion.OrganizacionID;
                                datos.UsuarioCreacionID      = info.Usuario.UsuarioID;
                                datos.Activo                 = EstatusEnum.Activo;
                                datos.ArchivoEnviadoServidor = 1;
                            });
                            var polizaDAL = new PolizaDAL();
                            polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.EntradaTraspaso);
                        }
                    }
                    transaction.Complete();
                    resultado.Add(info.FolioTraspaso, pdfPoliza);
                    return(resultado);
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
        /// <summary>
        /// Metodo para Cancelar un traspaso de MP
        /// </summary>
        /// <param name="info"></param>
        public Dictionary <long, MemoryStream> CancelarTraspaso(TraspasoMpPaMedInfo info)
        {
            try
            {
                var resultado = new Dictionary <long, MemoryStream>();
                Logger.Info();
                var traspasoMateriaPrimaDAL = new TraspasoMateriaPrimaDAL();
                var almacenMovimientoBL     = new AlmacenMovimientoBL();
                var cancelacionMovimientoBL = new CancelacionMovimientoBL();
                TraspasoMateriaPrimaInfo traspasoCancelar =
                    traspasoMateriaPrimaDAL.ObtenerPorID(info.TraspasoMateriaPrimaID);

                if (traspasoCancelar == null)
                {
                    return(null);
                }
                AlmacenMovimientoInfo movimientoOrigen = almacenMovimientoBL.ObtenerPorIDCompleto(
                    traspasoCancelar.AlmacenMovimientoOrigen.AlmacenMovimientoID);
                AlmacenMovimientoInfo movimientoDestino = almacenMovimientoBL.ObtenerPorIDCompleto(
                    traspasoCancelar.AlmacenMovimientoDestino.AlmacenMovimientoID);

                AlmacenInfo almacenOrigenAux  = info.AlmacenOrigen;
                AlmacenInfo almacenDestinoAux = info.AlmacenDestino;

                AlmacenMovimientoDetalle detalleOrigen  = movimientoOrigen.ListaAlmacenMovimientoDetalle.FirstOrDefault();
                AlmacenMovimientoDetalle detalleDestino = movimientoDestino.ListaAlmacenMovimientoDetalle.FirstOrDefault();
                if (detalleOrigen == null || detalleDestino == null)
                {
                    return(null);
                }
                info.CantidadTraspasarOrigen  = detalleOrigen.Cantidad;
                info.CantidadTraspasarDestino = detalleDestino.Cantidad;
                info.PrecioTraspasoOrigen     = detalleOrigen.Precio;
                info.PrecioTraspasoDestino    = detalleDestino.Precio;
                info.ImporteTraspaso          = detalleDestino.Importe;

                info.AlmacenDestino = almacenOrigenAux;
                info.AlmacenOrigen  = almacenDestinoAux;

                using (var transaction = new TransactionScope())
                {
                    long almacenMovimientoEntradaID = 0;
                    long almacenMovimientoSalidaID  = 0;

                    if (movimientoDestino != null)
                    {
                        almacenMovimientoEntradaID = GenerarMovimientoEntradaCancelacion(movimientoDestino, info.Usuario);
                        almacenMovimientoSalidaID  = GenerarMovimientoSalidaCancelacion(movimientoOrigen, info.Usuario);
                    }

                    var cancelacionMovimientoEntrada = new CancelacionMovimientoInfo
                    {
                        TipoCancelacion = new TipoCancelacionInfo
                        {
                            TipoCancelacionId = TipoCancelacionEnum.TraspasoMpPaMed.GetHashCode()
                        },
                        Pedido = new PedidoInfo(),
                        AlmacenMovimientoOrigen = new AlmacenMovimientoInfo
                        {
                            AlmacenMovimientoID = almacenMovimientoEntradaID
                        },
                        AlmacenMovimientoCancelado = new AlmacenMovimientoInfo
                        {
                            AlmacenMovimientoID = movimientoOrigen.AlmacenMovimientoID
                        },
                        Activo            = EstatusEnum.Activo,
                        Justificacion     = traspasoCancelar.Justificacion,
                        UsuarioCreacionID = info.Usuario.UsuarioID
                    };
                    CancelacionMovimientoInfo movimientoCancelado = cancelacionMovimientoBL.Guardar(cancelacionMovimientoEntrada);


                    if (movimientoDestino != null)
                    {
                        var cancelacionMovimientoSalida = new CancelacionMovimientoInfo
                        {
                            TipoCancelacion = new TipoCancelacionInfo
                            {
                                TipoCancelacionId = TipoCancelacionEnum.TraspasoMpPaMed.GetHashCode()
                            },
                            Pedido = new PedidoInfo(),
                            AlmacenMovimientoOrigen = new AlmacenMovimientoInfo
                            {
                                AlmacenMovimientoID = almacenMovimientoSalidaID
                            },
                            AlmacenMovimientoCancelado = new AlmacenMovimientoInfo
                            {
                                AlmacenMovimientoID = movimientoDestino.AlmacenMovimientoID
                            },
                            Activo            = EstatusEnum.Activo,
                            Justificacion     = traspasoCancelar.Justificacion,
                            UsuarioCreacionID = info.Usuario.UsuarioID
                        };
                        cancelacionMovimientoBL.Guardar(cancelacionMovimientoSalida);
                    }


                    traspasoCancelar.Activo = EstatusEnum.Inactivo;
                    traspasoCancelar.UsuarioModificacionID = info.Usuario.UsuarioID;

                    traspasoMateriaPrimaDAL.Actualizar(traspasoCancelar);


                    movimientoOrigen.UsuarioModificacionID = info.Usuario.UsuarioID;
                    if (movimientoDestino != null)
                    {
                        movimientoDestino.UsuarioModificacionID = info.Usuario.UsuarioID;
                    }

                    movimientoOrigen.Status = Estatus.CanceladoInv.GetHashCode();
                    if (movimientoDestino != null)
                    {
                        movimientoDestino.Status = Estatus.CanceladoInv.GetHashCode();
                    }


                    almacenMovimientoBL.ActualizarEstatus(movimientoOrigen);
                    almacenMovimientoBL.ActualizarEstatus(movimientoDestino);

                    AlmacenMovimientoInfo movimientoCancelacion =
                        almacenMovimientoBL.ObtenerPorIDCompleto(almacenMovimientoEntradaID);
                    if (movimientoCancelacion == null)
                    {
                        return(null);
                    }

                    info.FolioTraspaso       = traspasoCancelar.FolioTraspaso;
                    info.FechaTraspaso       = movimientoCancelado.FechaCancelacion;
                    info.AlmacenMovimientoID = movimientoDestino.AlmacenMovimientoID;
                    MemoryStream pdfPoliza = null;
                    if (info.AlmacenOrigen.AlmacenID != info.AlmacenDestino.AlmacenID)
                    {
                        info.EsCancelacion = true;
                        var productoBL = new ProductoBL();
                        info.ProductoOrigen  = productoBL.ObtenerPorID(info.ProductoOrigen);
                        info.ProductoDestino = info.ProductoOrigen;
                        PolizaAbstract     poliza       = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.EntradaTraspaso);
                        IList <PolizaInfo> listaPolizas = poliza.GeneraPoliza(info);
                        pdfPoliza = poliza.ImprimePoliza(info, listaPolizas);

                        if (listaPolizas != null && listaPolizas.Any())
                        {
                            listaPolizas.ToList().ForEach(datos =>
                            {
                                datos.OrganizacionID         = info.Usuario.Organizacion.OrganizacionID;
                                datos.UsuarioCreacionID      = info.Usuario.UsuarioID;
                                datos.Activo                 = EstatusEnum.Activo;
                                datos.ArchivoEnviadoServidor = 1;
                            });
                            var polizaDAL = new PolizaDAL();
                            polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.EntradaTraspaso);
                        }
                    }
                    transaction.Complete();
                    resultado.Add(info.FolioTraspaso, pdfPoliza);
                    return(resultado);
                }
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }