示例#1
0
        private long GuardarMovimientos(RecepcionProductoInfo recepcionProducto)
        {
            long almacenMovimientoId = 0;

            try
            {
                var almacenMovimientoBl = new AlmacenMovimientoBL();
                AlmacenMovimientoInfo almacenMovimiento = new AlmacenMovimientoInfo();
                almacenMovimiento.AlmacenID         = recepcionProducto.Almacen.AlmacenID;
                almacenMovimiento.TipoMovimientoID  = (int)TipoMovimiento.RecepcionProducto;
                almacenMovimiento.Observaciones     = recepcionProducto.Observaciones;
                almacenMovimiento.Status            = (int)EstatusInventario.Aplicado;
                almacenMovimiento.ProveedorId       = recepcionProducto.Proveedor.ProveedorID;
                almacenMovimiento.UsuarioCreacionID = recepcionProducto.UsuarioCreacion.UsuarioID;

                almacenMovimientoId = almacenMovimientoBl.Crear(almacenMovimiento);

                if (almacenMovimientoId > 0)
                {
                    var almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL();
                    foreach (var recepcionProductoDetalle in recepcionProducto.ListaRecepcionProductoDetalle)
                    {
                        var almacenMovimientoDetalle = new AlmacenMovimientoDetalle();
                        almacenMovimientoDetalle.AlmacenMovimientoID = almacenMovimientoId;
                        almacenMovimientoDetalle.ProductoID          = recepcionProductoDetalle.Producto.ProductoId;
                        almacenMovimientoDetalle.Importe             = recepcionProductoDetalle.Importe;
                        almacenMovimientoDetalle.Cantidad            = recepcionProductoDetalle.Cantidad;
                        almacenMovimientoDetalle.Precio = almacenMovimientoDetalle.Importe /
                                                          almacenMovimientoDetalle.Cantidad;
                        almacenMovimientoDetalle.UsuarioCreacionID = recepcionProducto.UsuarioCreacion.UsuarioID;
                        almacenMovimientoDetalleBl.Crear(almacenMovimientoDetalle);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            return(almacenMovimientoId);
        }
        /// <summary>
        /// Obtiene el Almacen Movimiento Detalle por Almacen Movimiento
        /// </summary>
        /// <param name="almacenMovimientoID"></param>
        /// <returns></returns>
        internal AlmacenMovimientoDetalle ObtenerPorAlmacenMovimientoID(long almacenMovimientoID)
        {
            AlmacenMovimientoDetalle resultado = null;

            try
            {
                Logger.Info();
                Dictionary <string, object> parametros =
                    AuxAlmacenMovimientoDetalleDAL.ObtenerParametrosPorAlmacenMovimientoID(almacenMovimientoID);
                DataSet ds = Retrieve("AlmacenMovimientoDetalle_ObtenerPorAlmacenMovimientoID", parametros);
                if (ValidateDataSet(ds))
                {
                    resultado = MapAlmacenMovimientoDetalleDAL.ObtenerAlmacenMovimientoDetallePorAlmacenMovimientoID(ds);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
 /// <summary>
 /// Se actualiza registro
 /// </summary>
 internal void ActualizarAlmacenMovimientoDetalle(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo)
 {
     try
     {
         Dictionary <string, object> parameters = AuxAlmacenMovimientoDetalleDAL.ActualizarAlmacenMovimientoDetalle(almacenMovimientoDetalleInfo);
         Update("AlmacenMovimientoDetalle_Actualizar", parameters);
     }
     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);
     }
 }
示例#4
0
        /// <summary>
        /// Guarda los datos para un gasto materia prima
        /// </summary>
        /// <param name="gasto"></param>
        /// <returns></returns>
        internal long Guardar(GastoMateriaPrimaInfo gasto)
        {
            long folioGasto = 0;

            try
            {
                Logger.Info();
                IList <PolizaInfo> polizas;
                PolizaAbstract     poliza;
                using (var transaction = new TransactionScope())
                {
                    var tipoOrg = gasto.Organizacion.TipoOrganizacion.TipoOrganizacionID;
                    var gastoMateriaPrimaDal = new GastoMateriaPrimaDAL();

                    if (gasto.GuardaAretes)
                    {
                        gastoMateriaPrimaDal.GuardarAretes(gasto);
                    }

                    if (tipoOrg == TipoOrganizacion.Centro.GetHashCode() || tipoOrg == TipoOrganizacion.Cadis.GetHashCode() || tipoOrg == TipoOrganizacion.Descanso.GetHashCode())
                    {
                        #region CENTROS

                        gasto.TipoFolio           = TipoFolio.GastoMateriaPrima;
                        gasto.AlmacenMovimientoID = null;
                        folioGasto = gastoMateriaPrimaDal.Guardar(gasto);

                        #endregion CENTROS
                    }
                    else
                    {
                        #region SIAP

                        #region MOVIMIENTOS

                        var listaAlmacenDetalle = new List <AlmacenMovimientoDetalle>();

                        var almacenMovimiento = new AlmacenMovimientoInfo
                        {
                            AlmacenID         = gasto.AlmacenID,
                            TipoMovimientoID  = gasto.TipoMovimiento.TipoMovimientoID,
                            ProveedorId       = gasto.Proveedor.ProveedorID,
                            Observaciones     = gasto.Observaciones,
                            Status            = (int)EstatusInventario.Aplicado,
                            UsuarioCreacionID = gasto.UsuarioCreacionID
                        };
                        var almacenMovimientoBl = new AlmacenMovimientoBL();
                        var almacenMovimientoID = almacenMovimientoBl.Crear(almacenMovimiento);
                        gasto.AlmacenMovimientoID = almacenMovimientoID;

                        var almacenMovimientoDetalle = new AlmacenMovimientoDetalle
                        {
                            AlmacenMovimientoID = almacenMovimientoID,
                            ProductoID          = gasto.Producto.ProductoId,
                            UsuarioCreacionID   = gasto.UsuarioCreacionID,
                            Importe             = gasto.Importe,
                            Cantidad            = 0,
                            Precio = 0
                        };
                        if (gasto.UnidadMedida)
                        {
                            almacenMovimientoDetalle.Cantidad = gasto.Kilogramos;
                            if (gasto.Kilogramos > 0)
                            {
                                almacenMovimientoDetalle.Precio = gasto.Importe / gasto.Kilogramos;
                            }
                            else
                            {
                                almacenMovimientoDetalle.Precio = 0;
                            }
                        }
                        gasto.TipoFolio = TipoFolio.GastoMateriaPrima;
                        int gastoMateriaPrimaID = gastoMateriaPrimaDal.Guardar(gasto);
                        //Actualizamos en AlmacenInventarioLote
                        if (gasto.AlmacenInventarioLote.AlmacenInventarioLoteId != 0)
                        {
                            almacenMovimientoDetalle.AlmacenInventarioLoteId =
                                gasto.AlmacenInventarioLote.AlmacenInventarioLoteId;

                            var almacenInventarioLote     = new AlmacenInventarioLoteDAL();
                            var almacenInventarioLoteInfo = new AlmacenInventarioLoteInfo();
                            almacenInventarioLoteInfo =
                                almacenInventarioLote.ObtenerAlmacenInventarioLotePorId(
                                    gasto.AlmacenInventarioLote.AlmacenInventarioLoteId);
                            almacenInventarioLoteInfo.UsuarioModificacionId = gasto.UsuarioCreacionID;
                            if (gasto.TipoMovimiento.TipoMovimientoID == (int)TipoMovimiento.EntradaPorAjuste)
                            {
                                almacenInventarioLoteInfo.Importe  += gasto.Importe;
                                almacenInventarioLoteInfo.Cantidad += gasto.Kilogramos;
                            }
                            else // Salida por Ajuste
                            {
                                almacenInventarioLoteInfo.Importe  -= gasto.Importe;
                                almacenInventarioLoteInfo.Cantidad -= gasto.Kilogramos;
                            }
                            if (almacenInventarioLoteInfo.Cantidad == 0)
                            {
                                almacenInventarioLoteInfo.PrecioPromedio = 0;
                            }
                            else
                            {
                                almacenInventarioLoteInfo.PrecioPromedio = almacenInventarioLoteInfo.Importe /
                                                                           almacenInventarioLoteInfo.Cantidad;
                            }
                            almacenInventarioLote.Actualizar(almacenInventarioLoteInfo);
                        }
                        // Actualizamos en AlmacenInventario
                        var almacenInventario     = new AlmacenInventarioDAL();
                        var almacenInventarioInfo = new AlmacenInventarioInfo
                        {
                            AlmacenID  = gasto.AlmacenID,
                            ProductoID = gasto.Producto.ProductoId
                        };
                        almacenInventarioInfo = almacenInventario.ObtenerPorAlmacenIdProductoId(almacenInventarioInfo);
                        if (gasto.TipoMovimiento.TipoMovimientoID == (int)TipoMovimiento.EntradaPorAjuste)
                        {
                            almacenInventarioInfo.Importe  += gasto.Importe;
                            almacenInventarioInfo.Cantidad += gasto.Kilogramos;
                            gasto.EsEntrada = true;
                        }
                        else // Salida por Ajuste
                        {
                            almacenInventarioInfo.Importe  -= gasto.Importe;
                            almacenInventarioInfo.Cantidad -= gasto.Kilogramos;
                        }
                        almacenInventarioInfo.UsuarioModificacionID = gasto.UsuarioCreacionID;
                        if (almacenInventarioInfo.Cantidad == 0)
                        {
                            almacenInventarioInfo.PrecioPromedio = 0;
                        }
                        else
                        {
                            almacenInventarioInfo.PrecioPromedio = almacenInventarioInfo.Importe / almacenInventarioInfo.Cantidad;
                        }
                        almacenInventario.Actualizar(almacenInventarioInfo);

                        listaAlmacenDetalle.Add(almacenMovimientoDetalle);
                        var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();
                        almacenMovimientoDetalleBL.GuardarAlmacenMovimientoDetalle(listaAlmacenDetalle, almacenMovimientoID);

                        #endregion MOVIMIENTOS

                        #region POLIZA

                        GastoMateriaPrimaInfo gastoMateriaGuardado = gastoMateriaPrimaDal.ObtenerPorID(gastoMateriaPrimaID);

                        gasto.Fecha      = gastoMateriaGuardado.Fecha;
                        gasto.FolioGasto = gastoMateriaGuardado.FolioGasto;
                        folioGasto       = gastoMateriaGuardado.FolioGasto;
                        poliza           = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.GastosMateriaPrima);
                        polizas          = poliza.GeneraPoliza(gasto);
                        if (polizas != null && polizas.Any())
                        {
                            polizas.ToList().ForEach(datos =>
                            {
                                datos.OrganizacionID         = gasto.Organizacion.OrganizacionID;
                                datos.UsuarioCreacionID      = gasto.UsuarioCreacionID;
                                datos.ArchivoEnviadoServidor = 1;
                            });
                            var polizaBL = new PolizaBL();
                            if (gasto.EsEntrada)
                            {
                                polizaBL.GuardarServicioPI(polizas, TipoPoliza.EntradaAjuste);
                            }
                            else
                            {
                                polizaBL.GuardarServicioPI(polizas, TipoPoliza.SalidaAjuste);
                            }
                        }

                        #endregion POLIZA

                        #endregion SIAP
                    }

                    transaction.Complete();
                }
                return(folioGasto);
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
        private IList <PolizaInfo> ObtenerPoliza(SalidaProductoInfo salidaProducto)
        {
            var polizasSalida = new List <PolizaInfo>();

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

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

            string textoDocumento = tipoPoliza.TextoDocumento;
            string tipoMovimiento = tipoPoliza.ClavePoliza;
            string postFijoRef3   = tipoPoliza.PostFijoRef3;

            var linea = 1;
            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 = string.Format("{0}{1}", salidaProducto.FolioSalida, ObtenerNumeroReferencia);
            string numeroReferencia = ObtenerNumeroReferenciaFolio(salidaProducto.FolioSalida);

            IList <CuentaSAPInfo>          cuentasSAP         = ObtenerCuentasSAP();
            IList <ClaseCostoProductoInfo> almacenesProductos = ObtenerCostosProducto(salidaProducto.Almacen.AlmacenID);
            OrganizacionInfo organizacion = ObtenerOrganizacionIVA(salidaProducto.Organizacion.OrganizacionID);

            if (organizacion == null)
            {
                organizacion = new OrganizacionInfo
                {
                    TipoOrganizacion = new TipoOrganizacionInfo()
                };
            }

            ClaseCostoProductoInfo almacenProducto =
                almacenesProductos.FirstOrDefault(prod => prod.ProductoID == salidaProducto.Producto.ProductoId);

            if (almacenProducto == null)
            {
                throw new ExcepcionServicio(string.Format("{0} {1} {2}", "CUENTA PARA PRODUCTO",
                                                          salidaProducto.Producto.Descripcion, "NO CONFIGURADA"));
            }
            CuentaSAPInfo cuentaSAP =
                cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAPID == almacenProducto.CuentaSAPID);

            if (cuentaSAP == null)
            {
                cuentaSAP = new CuentaSAPInfo
                {
                    Descripcion = string.Empty,
                    CuentaSAP   = string.Empty
                };
            }

            ClaveContableInfo claveContableCosto = ObtenerCuentaInventario(salidaProducto.Organizacion.
                                                                           OrganizacionID,
                                                                           TipoPoliza.ConsumoAlimento);

            if (claveContableCosto == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CUENTA DE COSTO NO CONFIGURADA"));
            }
            ClaveContableInfo claveContableBeneficios = ObtenerCuentaInventario(salidaProducto.Organizacion.
                                                                                OrganizacionID,
                                                                                TipoPoliza.SalidaVentaProducto);

            if (claveContableBeneficios == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CUENTA DE BENEFICIOS NO CONFIGURADA"));
            }

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

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

            ParametroOrganizacionInfo parametroCentroBeneficio =
                ObtenerParametroOrganizacionPorClave(organizacion.OrganizacionID,
                                                     ParametrosEnum.CTACENTROBENEFICIOMP.ToString());

            if (parametroCentroBeneficio == null)
            {
                throw new ExcepcionServicio(string.Format("{0}", "CENTRO DE BENEFICIO NO CONFIGURADO"));
            }

            string archivoFolio = ObtenerArchivoFolio(salidaProducto.FechaSalida);
            int    cantidad     = salidaProducto.PesoBruto - salidaProducto.PesoTara;

            var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();

            AlmacenMovimientoDetalle detalleMovimiento =
                almacenMovimientoDetalleBL.ObtenerPorAlmacenMovimientoID(
                    salidaProducto.AlmacenMovimiento.AlmacenMovimientoID);

            if (detalleMovimiento == null)
            {
                detalleMovimiento = new AlmacenMovimientoDetalle();
            }

            if (unidades == null)
            {
                unidades = ObtenerUnidadesMedicion();
            }
            if (productos == null)
            {
                productos = ObtenerProductos();
            }
            ProductoInfo producto =
                productos.FirstOrDefault(clave => clave.ProductoId == salidaProducto.Producto.ProductoId);

            if (producto == null)
            {
                producto = new ProductoInfo();
            }
            switch ((SubFamiliasEnum)producto.SubfamiliaId)
            {
            case SubFamiliasEnum.Granos:
                claveContableBeneficios.Valor = string.Concat(claveContableBeneficios.Valor,
                                                              PostFijoSubFamiliaGranos);
                claveContableCosto.Valor = string.Concat(claveContableCosto.Valor, PostFijoSubFamiliaGranos);
                break;

            default:
                claveContableBeneficios.Valor = string.Concat(claveContableBeneficios.Valor,
                                                              PostFijoSubFamiliaNoGranos);
                claveContableCosto.Valor = string.Concat(claveContableCosto.Valor, PostFijoSubFamiliaNoGranos);
                break;
            }
            var traspaso = false;

            if (salidaProducto.TipoMovimiento.TipoMovimientoID == TipoMovimiento.ProductoSalidaTraspaso.GetHashCode() ||
                salidaProducto.TipoMovimiento.Descripcion.Equals("salida por traspaso", StringComparison.InvariantCultureIgnoreCase))
            {
                salidaProducto.Cliente = new ClienteInfo
                {
                    CodigoSAP   = salidaProducto.CuentaSAP.CuentaSAP,
                    Descripcion = salidaProducto.CuentaSAP.Descripcion
                };
                traspaso = true;
            }
            string unidad = unidades.Where(clave => clave.UnidadID == producto.UnidadId).
                            Select(uni => uni.ClaveUnidad).FirstOrDefault();
            var datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = salidaProducto.FechaSalida,
                Folio            = salidaProducto.FolioSalida.ToString(),
                Cliente          = traspaso ? string.Empty : salidaProducto.Cliente.CodigoSAP,
                Cuenta           = traspaso ? salidaProducto.Cliente.CodigoSAP : string.Empty,
                Importe          = string.Format("{0}", salidaProducto.Importe.ToString("F2")),
                Renglon          = Convert.ToString(linea++),
                ImporteIva       = "0",
                ClaseDocumento   = postFijoRef3,
                Ref3             = ref3.ToString(),
                Division         = organizacion.Division,
                ArchivoFolio     = archivoFolio,
                DescripcionCosto = salidaProducto.Cliente.Descripcion,
                PesoOrigen       = cantidad,
                TipoDocumento    = textoDocumento,
                Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                 tipoMovimiento,
                                                 salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                 unidad,
                                                 cuentaSAP.Descripcion),
                Sociedad = organizacion.Sociedad,
                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
            };
            PolizaInfo polizaSalida = GeneraRegistroPoliza(datos);

            polizasSalida.Add(polizaSalida);

            datos = new DatosPolizaInfo
            {
                NumeroReferencia = numeroReferencia,
                FechaEntrada     = salidaProducto.FechaSalida,
                Folio            = salidaProducto.FolioSalida.ToString(),
                Importe          = (detalleMovimiento.Importe * -1).ToString("F2"),
                Renglon          = Convert.ToString(linea++),
                ImporteIva       = "0",
                Ref3             = ref3.ToString(),
                Cuenta           = cuentaSAP.CuentaSAP,
                DescripcionCosto = cuentaSAP.Descripcion,
                Division         = organizacion.Division,
                ArchivoFolio     = archivoFolio,
                PesoOrigen       = cantidad,
                ClaseDocumento   = postFijoRef3,
                TipoDocumento    = textoDocumento,
                Concepto         = String.Format("{0}-{1} {2} {3} {4}",
                                                 tipoMovimiento,
                                                 salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                 unidad,
                                                 cuentaSAP.Descripcion),
                Sociedad = organizacion.Sociedad,
                Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
            };
            polizaSalida = GeneraRegistroPoliza(datos);
            polizasSalida.Add(polizaSalida);

            if (!traspaso)
            {
                cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAP == claveContableCosto.Valor);
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA DE COSTO NO CONFIGURADA");
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = salidaProducto.FechaSalida,
                    Folio            = salidaProducto.FolioSalida.ToString(),
                    Importe          = detalleMovimiento.Importe.ToString("F2"),
                    Renglon          = Convert.ToString(linea++),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    CentroCosto      =
                        claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                        claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroGasto)
                                       ? parametroCentroCosto.Valor
                                       : string.Empty,
                    //CentroBeneficio =
                    //    claveContableBeneficios.Valor.StartsWith(PrefijoCuentaCentroBeneficio)
                    //        ? parametroCentroBeneficio.Valor
                    //        : string.Empty,
                    PesoOrigen     = cantidad,
                    ClaseDocumento = postFijoRef3,
                    TipoDocumento  = textoDocumento,
                    Concepto       = String.Format("{0}-{1} {2} {3} {4}",
                                                   tipoMovimiento,
                                                   salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                   unidad,
                                                   cuentaSAP.Descripcion),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalida.Add(polizaSalida);

                cuentaSAP = cuentasSAP.FirstOrDefault(cuenta => cuenta.CuentaSAP == claveContableBeneficios.Valor);
                if (cuentaSAP == null)
                {
                    throw new ExcepcionServicio("CUENTA DE BENEFICIOS NO CONFIGURADA");
                }
                datos = new DatosPolizaInfo
                {
                    NumeroReferencia = numeroReferencia,
                    FechaEntrada     = salidaProducto.FechaSalida,
                    Folio            = salidaProducto.FolioSalida.ToString(),
                    Importe          = string.Format("{0}", (salidaProducto.Importe * -1).ToString("F2")),
                    Renglon          = Convert.ToString(linea),
                    ImporteIva       = "0",
                    Ref3             = ref3.ToString(),
                    Cuenta           = cuentaSAP.CuentaSAP,
                    Division         = organizacion.Division,
                    ArchivoFolio     = archivoFolio,
                    DescripcionCosto = cuentaSAP.Descripcion,
                    //CentroCosto =
                    //    claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroCosto) ||
                    //    claveContableCosto.Valor.StartsWith(PrefijoCuentaCentroGasto)
                    //        ? parametroCentroCosto.Valor
                    //        : string.Empty,
                    CentroBeneficio =
                        claveContableBeneficios.Valor.StartsWith(PrefijoCuentaCentroBeneficio)
                                        ? parametroCentroBeneficio.Valor
                                        : string.Empty,
                    PesoOrigen     = cantidad,
                    ClaseDocumento = postFijoRef3,
                    TipoDocumento  = textoDocumento,
                    Concepto       = String.Format("{0}-{1} {2} {3} {4}",
                                                   tipoMovimiento,
                                                   salidaProducto.FolioSalida, cantidad.ToString("N0"),
                                                   unidad,
                                                   cuentaSAP.Descripcion),
                    Sociedad = organizacion.Sociedad,
                    Segmento = string.Format("{0}{1}", PrefijoSegmento, organizacion.Sociedad)
                };
                polizaSalida = GeneraRegistroPoliza(datos);
                polizasSalida.Add(polizaSalida);
            }

            return(polizasSalida);
        }
        private long GenerarMovimientoEntradaCancelacion(AlmacenMovimientoInfo info, UsuarioInfo usuario)
        {
            var almacenInventarioBL        = new AlmacenInventarioBL();
            var almacenInventarioLoteBL    = new AlmacenInventarioLoteBL();
            var almacenMovimientoBL        = new AlmacenMovimientoBL();
            var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();

            AlmacenMovimientoDetalle detalle = info.ListaAlmacenMovimientoDetalle.FirstOrDefault();

            if (detalle == null)
            {
                return(0);
            }

            //decimal cantidadTraspaso = detalle.Cantidad;

            List <AlmacenInventarioInfo> inventariosDestino       = almacenInventarioBL.ObtienePorAlmacenId(info.Almacen);
            AlmacenInventarioInfo        almacenInventarioDestino = null;

            if (inventariosDestino != null && inventariosDestino.Any())
            {
                almacenInventarioDestino =
                    inventariosDestino.FirstOrDefault(inv => inv.ProductoID == detalle.Producto.ProductoId);
                if (almacenInventarioDestino != null)
                {
                    almacenInventarioDestino.Cantidad              = almacenInventarioDestino.Cantidad + detalle.Cantidad;
                    almacenInventarioDestino.Importe               = almacenInventarioDestino.Importe + detalle.Importe;
                    almacenInventarioDestino.PrecioPromedio        = almacenInventarioDestino.Importe / almacenInventarioDestino.Cantidad;
                    almacenInventarioDestino.UsuarioModificacionID = usuario.UsuarioID;

                    almacenInventarioBL.Actualizar(almacenInventarioDestino);
                }
            }
            if (detalle.AlmacenInventarioLoteId != 0)
            {
                AlmacenInventarioLoteInfo loteDestino = almacenInventarioLoteBL.ObtenerAlmacenInventarioLotePorId(detalle.AlmacenInventarioLoteId);

                if (loteDestino != null)
                {
                    loteDestino.Cantidad              = loteDestino.Cantidad + detalle.Cantidad;
                    loteDestino.Importe               = loteDestino.Importe + detalle.Importe;
                    loteDestino.PrecioPromedio        = loteDestino.Importe / loteDestino.Cantidad;
                    loteDestino.UsuarioModificacionId = usuario.UsuarioID;

                    almacenInventarioLoteBL.Actualizar(loteDestino);
                }
            }
            var almacenMovimientoDestino = new AlmacenMovimientoInfo
            {
                AlmacenID         = info.Almacen.AlmacenID,
                TipoMovimientoID  = TipoMovimiento.EntradaAlmacen.GetHashCode(),
                ProveedorId       = info.ProveedorId,
                Status            = Estatus.AplicadoInv.GetHashCode(),
                UsuarioCreacionID = usuario.UsuarioID,
            };
            long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimientoDestino);

            if (almacenInventarioDestino != null)
            {
                var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle
                {
                    AlmacenMovimientoID     = almacenMovimientoID,
                    AlmacenInventarioLoteId = detalle.AlmacenInventarioLoteId,
                    //ContratoId = detalle.ContratoId,
                    Piezas            = 0,
                    ProductoID        = detalle.Producto.ProductoId,
                    Precio            = detalle.Precio,
                    Cantidad          = detalle.Cantidad,
                    Importe           = detalle.Importe,
                    UsuarioCreacionID = usuario.UsuarioID
                };
                almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalleInfo);
            }
            return(almacenMovimientoID);
        }
        /// <summary>
        /// Guarda los ajustes
        /// </summary>
        /// <param name="listaDiferenciasInventario"></param>
        /// <param name="usuarioInfo"></param>
        internal IList <MemoryStream> Guardar(List <DiferenciasDeInventariosInfo> listaDiferenciasInventario, UsuarioInfo usuarioInfo)
        {
            int                usuarioId = usuarioInfo.UsuarioID;
            PolizaAbstract     poliza    = null;
            IList <PolizaInfo> polizas   = null;
            int                organizacionID;
            //var contratoCreado = new ContratoInfo();
            IList <MemoryStream> streams = null;

            try
            {
                using (var transaction = new TransactionScope())
                {
                    var almacenMovimientoBl        = new AlmacenMovimientoBL();
                    var almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL();
                    organizacionID = usuarioInfo.OrganizacionID;
                    foreach (var diferenciasDeInventariosInfo in listaDiferenciasInventario)
                    {
                        if (diferenciasDeInventariosInfo.DescripcionAjuste.Equals(TipoAjusteEnum.CerrarLote.ToString(), StringComparison.InvariantCultureIgnoreCase))
                        {
                            var almacenInventarioLoteBl   = new AlmacenInventarioLoteBL();
                            var almacenInventarioLoteInfo = almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId(
                                diferenciasDeInventariosInfo.AlmacenInventarioLote.AlmacenInventarioLoteId);
                            if (almacenInventarioLoteInfo != null)
                            {
                                almacenInventarioLoteInfo.UsuarioModificacionId = usuarioInfo.UsuarioID;
                                //Kilogramos teoricos en 0 se desactiva el lote
                                if (diferenciasDeInventariosInfo.KilogramosFisicos == 0)
                                {
                                    //Desactivar lote
                                    almacenInventarioLoteBl.DesactivarLote(almacenInventarioLoteInfo);
                                }
                            }
                            continue;
                        }

                        diferenciasDeInventariosInfo.DiferenciaInventario =
                            Math.Abs(diferenciasDeInventariosInfo.KilogramosFisicos -
                                     diferenciasDeInventariosInfo.KilogramosTeoricos);
                        ////Se le quita el signo para que no guarde en negativos
                        //diferenciasDeInventariosInfo.KilogramosTeoricos =
                        //    Math.Abs(diferenciasDeInventariosInfo.KilogramosTeoricos);
                        //organizacionID = diferenciasDeInventariosInfo.AlmacenMovimiento.OrganizacionID;
                        //Si no esta guardado se actualiza
                        if (!diferenciasDeInventariosInfo.Guardado)
                        {
                            AlmacenMovimientoInfo almacen = new AlmacenMovimientoInfo();
                            //Estatus aplicado guarda y actualiza inventario
                            if (diferenciasDeInventariosInfo.AlmacenMovimiento.Status ==
                                Estatus.DifInvAplicado.GetHashCode())
                            {
                                //Insertar movimiento
                                diferenciasDeInventariosInfo.AlmacenMovimiento.AlmacenID =
                                    diferenciasDeInventariosInfo.Almacen.AlmacenID;
                                var almacenMovimientoId =
                                    almacenMovimientoBl.Crear(diferenciasDeInventariosInfo.AlmacenMovimiento);

                                //Insertar detalle
                                var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle
                                {
                                    AlmacenMovimientoID     = almacenMovimientoId,
                                    AlmacenInventarioLoteId =
                                        diferenciasDeInventariosInfo.
                                        AlmacenInventarioLote.
                                        AlmacenInventarioLoteId,
                                    Piezas     = 0,
                                    ProductoID =
                                        diferenciasDeInventariosInfo.Producto.
                                        ProductoId,
                                    Precio =
                                        diferenciasDeInventariosInfo.
                                        AlmacenInventarioLote.PrecioPromedio,
                                    Cantidad =
                                        diferenciasDeInventariosInfo.
                                        DiferenciaInventario,
                                    Importe =
                                        diferenciasDeInventariosInfo.
                                        DiferenciaInventario *
                                        diferenciasDeInventariosInfo.
                                        AlmacenInventarioLote.PrecioPromedio,
                                    UsuarioCreacionID = usuarioInfo.UsuarioID
                                };
                                long almacenMovimientoDetalleID =
                                    almacenMovimientoDetalleBl.Crear(almacenMovimientoDetalleInfo);


                                //SE AGREGA DETALLE
                                almacenMovimientoDetalleInfo.AlmacenMovimientoDetalleID = almacenMovimientoDetalleID;



                                //var almacenmovimientoBl1 = new AlmacenMovimientoDetalleBL();

                                //var d =
                                //    almacenmovimientoBl1.ObtenerPorAlmacenMovimientoDetalleId(almacenMovimientoDetalleInfo);


                                diferenciasDeInventariosInfo.AlmacenMovimientoDetalle = almacenMovimientoDetalleInfo;
                                //SE AGREGA DETALLE
                                //Actualizamos inventario y lote
                                ActualizarInventarioYLote(diferenciasDeInventariosInfo, usuarioInfo.UsuarioID);
                            }

                            //Si es pendiente solo guarda el movimiento y detalle
                            if (diferenciasDeInventariosInfo.AlmacenMovimiento.Status ==
                                Estatus.DifInvPendiente.GetHashCode())
                            {
                                //Insertar movimiento
                                diferenciasDeInventariosInfo.AlmacenMovimiento.AlmacenID =
                                    diferenciasDeInventariosInfo.Almacen.AlmacenID;
                                var almacenMovimientoId =
                                    almacenMovimientoBl.Crear(diferenciasDeInventariosInfo.AlmacenMovimiento);

                                //Insertar detalle
                                var almacenMovimientoDetalleInfo = new AlmacenMovimientoDetalle()
                                {
                                    AlmacenMovimientoID     = almacenMovimientoId,
                                    AlmacenInventarioLoteId =
                                        diferenciasDeInventariosInfo.
                                        AlmacenInventarioLote.
                                        AlmacenInventarioLoteId,
                                    Piezas     = 0,
                                    ProductoID =
                                        diferenciasDeInventariosInfo.Producto.
                                        ProductoId,
                                    Precio =
                                        diferenciasDeInventariosInfo.
                                        AlmacenInventarioLote.PrecioPromedio,
                                    Cantidad =
                                        diferenciasDeInventariosInfo.
                                        DiferenciaInventario,
                                    Importe =
                                        diferenciasDeInventariosInfo.
                                        DiferenciaInventario *
                                        diferenciasDeInventariosInfo.
                                        AlmacenInventarioLote.PrecioPromedio,
                                    UsuarioCreacionID = usuarioInfo.UsuarioID
                                };
                                long almacenMovimientoDetalleID =
                                    almacenMovimientoDetalleBl.Crear(almacenMovimientoDetalleInfo);


                                //Se valida si requiere autorizacion
                                if (diferenciasDeInventariosInfo.RequiereAutorizacion)
                                {
                                    var almacenBl = new AlmacenBL();
                                    AlmacenMovimientoInfo almacenMovimientoInfo = new AlmacenMovimientoInfo
                                    {
                                        AlmacenID           = diferenciasDeInventariosInfo.Almacen.AlmacenID,
                                        AlmacenMovimientoID = almacenMovimientoId
                                    };
                                    almacen = almacenBl.ObtenerAlmacenMovimiento(almacenMovimientoInfo);

                                    var autorizacionMateriaPrimaInfo = new AutorizacionMateriaPrimaInfo
                                    {
                                        OrganizacionID     = usuarioInfo.OrganizacionID,
                                        TipoAutorizacionID = TipoAutorizacionEnum.AjustedeInventario.GetHashCode(),
                                        Folio           = almacen.FolioMovimiento,
                                        Justificacion   = almacen.Observaciones,
                                        Lote            = diferenciasDeInventariosInfo.AlmacenInventarioLote.Lote,
                                        Precio          = almacenMovimientoDetalleInfo.Precio,
                                        Cantidad        = almacenMovimientoDetalleInfo.Cantidad,
                                        ProductoID      = almacenMovimientoDetalleInfo.ProductoID,
                                        AlmacenID       = almacen.AlmacenID,
                                        EstatusID       = Estatus.AMPPendien.GetHashCode(),
                                        UsuarioCreacion = usuarioInfo.UsuarioID,
                                        Activo          = EstatusEnum.Activo.GetHashCode()
                                    };

                                    var almacenInventarioLoteBL = new AlmacenInventarioLoteBL();
                                    almacenInventarioLoteBL.GuardarAutorizacionMateriaPrima(
                                        autorizacionMateriaPrimaInfo);
                                }
                                //SE AGREGA DETALLE
                                almacenMovimientoDetalleInfo.AlmacenMovimientoDetalleID = almacenMovimientoDetalleID;
                                diferenciasDeInventariosInfo.AlmacenMovimientoDetalle   = almacenMovimientoDetalleInfo;
                                //SE AGREGA DETALLE
                            }
                        }
                        else
                        {
                            if (diferenciasDeInventariosInfo.AlmacenMovimiento.Status ==
                                Estatus.DifInvAplicado.GetHashCode())
                            {
                                //Actualizar estatus a regitro
                                //Agregar observaciones
                                almacenMovimientoBl.ActualizarEstatus(diferenciasDeInventariosInfo.AlmacenMovimiento);

                                //Actualizar detalle movimiento
                                var almacenMovimientoDetalleInfo =
                                    almacenMovimientoDetalleBl.ObtenerPorAlmacenMovimientoDetalleId(
                                        diferenciasDeInventariosInfo.AlmacenMovimientoDetalle);
                                almacenMovimientoDetalleInfo.Cantidad =
                                    diferenciasDeInventariosInfo.DiferenciaInventario;
                                almacenMovimientoDetalleInfo.Importe = almacenMovimientoDetalleInfo.Cantidad *
                                                                       almacenMovimientoDetalleInfo.Precio;
                                almacenMovimientoDetalleInfo.UsuarioModificacionID = usuarioInfo.UsuarioID;
                                almacenMovimientoDetalleBl.ActualizarAlmacenMovimientoDetalle(
                                    almacenMovimientoDetalleInfo);
                                //Actualizamos inventario y lote
                                ActualizarInventarioYLote(diferenciasDeInventariosInfo, usuarioInfo.UsuarioID);
                                //SE AGREGA DETALLE
                                diferenciasDeInventariosInfo.AlmacenMovimientoDetalle = almacenMovimientoDetalleInfo;
                                //SE AGREGA DETALLE
                            }

                            //Guardado con estatus pendiente se actualiza almacen movimiento y almacen movimiento detalle
                            if (diferenciasDeInventariosInfo.AlmacenMovimiento.Status ==
                                Estatus.DifInvPendiente.GetHashCode())
                            {
                                //Actualizar almacen movimiento
                                almacenMovimientoBl.ActualizarEstatus(diferenciasDeInventariosInfo.AlmacenMovimiento);

                                //Actualizar movimiento detalle
                                //Verificar si se ocupa obtenerlo
                                var almacenMovimientoDetalleInfo =
                                    almacenMovimientoDetalleBl.ObtenerPorAlmacenMovimientoDetalleId(
                                        diferenciasDeInventariosInfo.AlmacenMovimientoDetalle);
                                almacenMovimientoDetalleInfo.Cantidad =
                                    diferenciasDeInventariosInfo.DiferenciaInventario;
                                almacenMovimientoDetalleInfo.Importe = almacenMovimientoDetalleInfo.Cantidad *
                                                                       almacenMovimientoDetalleInfo.Precio;
                                //Pendiente usuario modificacion
                                almacenMovimientoDetalleInfo.UsuarioModificacionID = usuarioInfo.UsuarioID;
                                almacenMovimientoDetalleBl.ActualizarAlmacenMovimientoDetalle(
                                    almacenMovimientoDetalleInfo);
                                //SE AGREGA DETALLE
                                diferenciasDeInventariosInfo.AlmacenMovimientoDetalle = almacenMovimientoDetalleInfo;
                                //SE AGREGA DETALLE
                            }
                        }
                    }

                    #region POLIZA

                    var listaDiferenciasInventarioAplicados =
                        listaDiferenciasInventario.Where(dif => dif.AlmacenMovimiento.Status == Estatus.DifInvAplicado.GetHashCode()).ToList();

                    List <PolizaEntradaSalidaPorAjusteModel> salidasPorAjuste =
                        listaDiferenciasInventarioAplicados.Where(dif => !dif.DescripcionAjuste.Trim().Equals(TipoAjusteEnum.CerrarLote.ToString().Trim(), StringComparison.InvariantCultureIgnoreCase)).Select(ajuste => new PolizaEntradaSalidaPorAjusteModel
                    {
                        Importe =
                            ajuste.DiferenciaInventario *
                            ajuste.AlmacenInventarioLote.
                            PrecioPromedio,
                        Cantidad   = ajuste.DiferenciaInventario,
                        TipoAjuste =
                            ajuste.DescripcionAjuste.Equals(
                                TipoAjusteEnum.Merma.ToString(),
                                StringComparison.
                                CurrentCultureIgnoreCase)
                                    ? TipoAjusteEnum.Merma
                                    : TipoAjusteEnum.Superávit,
                        Precio = ajuste.AlmacenInventarioLote.
                                 PrecioPromedio,
                        AlmacenInventarioID =
                            ajuste.AlmacenInventarioLote.
                            AlmacenInventario.AlmacenInventarioID,
                        AlmacenMovimientoDetalleID =
                            ajuste.AlmacenMovimientoDetalle.
                            AlmacenMovimientoDetalleID,
                        ProductoID = ajuste.Producto.ProductoId,
                        CantidadInventarioFisico =
                            ajuste.KilogramosFisicos,
                        CantidadInventarioTeorico =
                            ajuste.KilogramosTeoricos,
                        Observaciones =
                            ajuste.AlmacenMovimiento.Observaciones
                    }).ToList();
                    var agrupado =
                        salidasPorAjuste.GroupBy(tipo => new { tipo.TipoAjuste, tipo.AlmacenMovimientoDetalleID }).Select(
                            ajuste => new PolizaEntradaSalidaPorAjusteModel
                    {
                        TipoAjuste                 = ajuste.Key.TipoAjuste,
                        AlmacenInventarioID        = ajuste.First().AlmacenInventarioID,
                        AlmacenMovimientoDetalleID = ajuste.Key.AlmacenMovimientoDetalleID,
                        Cantidad = ajuste.First().Cantidad,
                        CantidadInventarioFisico  = ajuste.First().CantidadInventarioFisico,
                        CantidadInventarioTeorico = ajuste.First().CantidadInventarioTeorico,
                        Importe                 = ajuste.First().Importe,
                        Observaciones           = ajuste.First().Observaciones,
                        Precio                  = ajuste.First().Precio,
                        PrecioInventarioFisico  = ajuste.First().PrecioInventarioFisico,
                        PrecioInventarioTeorico = ajuste.First().PrecioInventarioTeorico,
                        ProductoID              = ajuste.First().ProductoID
                    }).ToList();
                    if (agrupado != null && agrupado.Any())
                    {
                        streams = new List <MemoryStream>();
                        for (int indexAjustes = 0; indexAjustes < agrupado.Count; indexAjustes++)
                        {
                            var tipoPoliza = TipoPoliza.SalidaAjuste;
                            switch (agrupado[indexAjustes].TipoAjuste)
                            {
                            case TipoAjusteEnum.Superávit:
                                tipoPoliza = TipoPoliza.EntradaAjuste;
                                break;
                            }
                            poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(tipoPoliza);
                            var grupo = new List <PolizaEntradaSalidaPorAjusteModel>
                            {
                                agrupado[indexAjustes]
                            };
                            polizas = poliza.GeneraPoliza(grupo);
                            if (polizas != null && polizas.Any())
                            {
                                MemoryStream stream = poliza.ImprimePoliza(grupo, polizas);
                                if (stream != null)
                                {
                                    streams.Add(stream);
                                }
                                var polizaBL = new PolizaBL();
                                polizas.ToList().ForEach(datos =>
                                {
                                    datos.OrganizacionID         = organizacionID;
                                    datos.UsuarioCreacionID      = usuarioId;
                                    datos.ArchivoEnviadoServidor = 1;
                                });
                                polizaBL.GuardarServicioPI(polizas, tipoPoliza);
                            }
                        }
                    }

                    #endregion POLIZA


                    transaction.Complete();
                }
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(streams);
        }
示例#8
0
        /// <summary>
        /// Termina la salida del producto
        /// </summary>
        /// <param name="salida"></param>
        /// <returns></returns>
        internal MemoryStream TerminarSalidaProducto(SalidaProductoInfo salida)
        {
            try
            {
                Logger.Info();
                bool         generaFactura = salida.GeneraFactura;
                MemoryStream resultado     = null;
                var          almacenBl     = new AlmacenBL();
                var          almacenMovimientoDetalleDAL = new AlmacenMovimientoDetalleDAL();
                var          almacenMovimiento           = new AlmacenMovimientoInfo();
                var          almacenInventarioLoteBl     = new AlmacenInventarioLoteBL();
                var          almacenInventarioBl         = new AlmacenInventarioBL();
                var          salidaProductoDal           = new SalidaProductoDAL();

                PolizaAbstract     poliza  = null;
                IList <PolizaInfo> polizas = null;
                using (var transaction = new TransactionScope())
                {
                    almacenMovimiento.AlmacenID         = salida.Almacen.AlmacenID;
                    almacenMovimiento.TipoMovimientoID  = salida.TipoMovimiento.TipoMovimientoID;
                    almacenMovimiento.UsuarioCreacionID = salida.UsuarioModificacionId;
                    almacenMovimiento.Status            = (int)EstatusInventario.Aplicado;

                    AlmacenMovimientoInfo almacenMovimientoGenerado =
                        almacenBl.GuardarAlmacenMovimiento(almacenMovimiento);

                    if (almacenMovimientoGenerado != null)
                    {
                        AlmacenInventarioLoteInfo almacenInventarioLote =
                            almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId(
                                salida.AlmacenInventarioLote.AlmacenInventarioLoteId);
                        var listaAlmacenInventarioDetalle = new List <AlmacenMovimientoDetalle>();

                        var movimientoDetalle = new AlmacenMovimientoDetalle
                        {
                            AlmacenMovimientoID =
                                almacenMovimientoGenerado.AlmacenMovimientoID,
                            AlmacenInventarioLoteId =
                                salida.AlmacenInventarioLote.AlmacenInventarioLoteId,
                            Precio     = almacenInventarioLote.PrecioPromedio,
                            ProductoID = salida.Producto.ProductoId,
                            Cantidad   = salida.PesoBruto - salida.PesoTara,
                            Piezas     = salida.Piezas,
                            Importe    =
                                (salida.PesoBruto - salida.PesoTara) *
                                almacenInventarioLote.PrecioPromedio,
                            UsuarioCreacionID = salida.UsuarioModificacionId
                        };
                        listaAlmacenInventarioDetalle.Add(movimientoDetalle);

                        almacenMovimientoDetalleDAL.GuardarAlmacenMovimientoDetalle(listaAlmacenInventarioDetalle,
                                                                                    almacenMovimientoGenerado.
                                                                                    AlmacenMovimientoID);
                        if (almacenInventarioLote != null)
                        {
                            almacenInventarioLote.Cantidad = almacenInventarioLote.Cantidad -
                                                             (salida.PesoBruto - salida.PesoTara);
                            almacenInventarioLote.Importe = almacenInventarioLote.PrecioPromedio *
                                                            almacenInventarioLote.Cantidad;

                            almacenInventarioLote.UsuarioModificacionId = salida.UsuarioModificacionId;
                            almacenInventarioLoteBl.Actualizar(almacenInventarioLote);

                            AlmacenInfo almacen = almacenBl.ObtenerPorID(almacenMovimiento.AlmacenID);
                            List <AlmacenInventarioInfo> listaAlmacenlmacenInventario =
                                almacenInventarioBl.ObtienePorAlmacenId(almacen);
                            if (listaAlmacenlmacenInventario != null)
                            {
                                AlmacenInventarioInfo inventarioProducto = listaAlmacenlmacenInventario.FirstOrDefault(
                                    registro => registro.ProductoID == salida.Producto.ProductoId);

                                if (inventarioProducto != null)
                                {
                                    inventarioProducto.Cantidad = inventarioProducto.Cantidad -
                                                                  (salida.PesoBruto - salida.PesoTara);
                                    inventarioProducto.Importe = (inventarioProducto.PrecioPromedio *
                                                                  inventarioProducto.Cantidad);
                                    //Actualiza inventario
                                    inventarioProducto.UsuarioModificacionID = salida.UsuarioModificacionId;
                                    inventarioProducto.ProductoID            = salida.Producto.ProductoId;
                                    inventarioProducto.AlmacenID             = almacen.AlmacenID;
                                    almacenInventarioBl.ActualizarPorProductoId(inventarioProducto);
                                    salida.GeneraFactura = generaFactura;
                                    salidaProductoDal.TerminarSalidaProducto(salida, almacenMovimientoGenerado);

                                    #region POLIZA

                                    poliza =
                                        FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(
                                            TipoPoliza.SalidaVentaProducto);
                                    salida.Importe = (salida.PesoBruto - salida.PesoTara) * salida.Precio;
                                    salida         = ObtenerFolioPorReimpresion(salida);
                                    polizas        = poliza.GeneraPoliza(salida);
                                    if (polizas != null)
                                    {
                                        var polizaBL = new PolizaBL();
                                        polizas.ToList().ForEach(datos =>
                                        {
                                            datos.OrganizacionID =
                                                salida.Organizacion.OrganizacionID;
                                            datos.UsuarioCreacionID =
                                                salida.UsuarioCreacionId;
                                            datos.ArchivoEnviadoServidor = 1;
                                        });
                                        polizaBL.GuardarServicioPI(polizas, TipoPoliza.SalidaVentaProducto);
                                        if (salida.Almacen == null)
                                        {
                                            salida.Almacen = new AlmacenInfo();
                                        }
                                        salida.Almacen.Organizacion = new OrganizacionInfo
                                        {
                                            OrganizacionID =
                                                salida.Organizacion.OrganizacionID
                                        };
                                        resultado = poliza.ImprimePoliza(salida, polizas);
                                    }

                                    #endregion POLIZA

                                    if (generaFactura)
                                    {
                                        #region FACTURA

                                        if (salida.TipoMovimiento.TipoMovimientoID ==
                                            TipoMovimiento.ProductoSalidaVenta.GetHashCode())
                                        {
                                            //Genera el xml y lo guarda en la ruta especificada en la configuración
                                            var facturaBl = new FacturaBL();
                                            facturaBl.GenerarDatosFacturaVentaDeMateriaPrima(salida);
                                        }

                                        #endregion
                                    }

                                    transaction.Complete();
                                }
                                else
                                {
                                    throw new ExcepcionDesconocida(
                                              Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                                }
                            }
                            else
                            {
                                throw new ExcepcionDesconocida(
                                          Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                            }
                        }
                        else
                        {
                            throw new ExcepcionDesconocida(
                                      Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                        }
                    }
                    else
                    {
                        throw new ExcepcionDesconocida(
                                  Properties.ResourceServices.InventarioNormal_ErrorMovimientos);
                    }
                }
                return(resultado);
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (ExcepcionDesconocida)
            {
                throw;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
示例#9
0
 /// <summary>
 /// Obtener parametros para eliminar almacen movimiento detalle
 /// </summary>
 /// <param name="almacenMovimientoDetalle"></param>
 /// <returns></returns>
 public static Dictionary <string, object> ObtenerParametrosEliminarAlmacenMovimientoDetalle(AlmacenMovimientoDetalle almacenMovimientoDetalle)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@AlmacenMovimientoDetalleID", almacenMovimientoDetalle.AlmacenMovimientoDetalleID },
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#10
0
        /// <summary>
        /// Obtiene un listado de almacenmovimientodetalle
        /// </summary>
        /// <param name="almacenMovimientoDetalleInfo"></param>
        /// <returns></returns>
        public List <AlmacenMovimientoDetalle> ObtenerAlmacenMovimientoDetallePorContratoId(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo)
        {
            List <AlmacenMovimientoDetalle> info;

            try
            {
                Logger.Info();
                var almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL();
                info = almacenMovimientoDetalleBl.ObtenerAlmacenMovimientoDetallePorContratoId(almacenMovimientoDetalleInfo);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(info);
        }
        /// <summary>
        /// Busca de acuerdo a lo especificado en los combos
        /// </summary>
        private void RealizarBusqueda()
        {
            try
            {
                var listaEstatus        = new List <EstatusInfo>();
                var listaTipoMovimiento = new List <TipoMovimientoInfo>();

                //Obtener ajuste
                if (CboAjuste.SelectedItem == null || CboAjuste.SelectedIndex == 0)
                {
                    listaTipoMovimiento.Add(new TipoMovimientoInfo()
                    {
                        TipoMovimientoID = TipoMovimiento.EntradaPorAjuste.GetHashCode()
                    });
                    listaTipoMovimiento.Add(new TipoMovimientoInfo()
                    {
                        TipoMovimientoID = TipoMovimiento.SalidaPorAjuste.GetHashCode()
                    });
                }
                else
                {
                    if (CboAjuste.SelectedIndex == TipoAjusteEnum.Merma.GetHashCode())
                    {
                        listaTipoMovimiento.Add(new TipoMovimientoInfo()
                        {
                            TipoMovimientoID = TipoMovimiento.SalidaPorAjuste.GetHashCode()
                        });
                    }
                    if (CboAjuste.SelectedIndex == TipoAjusteEnum.Superávit.GetHashCode())
                    {
                        listaTipoMovimiento.Add(new TipoMovimientoInfo()
                        {
                            TipoMovimientoID = TipoMovimiento.EntradaPorAjuste.GetHashCode()
                        });
                    }
                }

                //Obtener estatus
                if (CboEstatus.SelectedItem == null || CboEstatus.SelectedIndex == 0)
                {
                    listaEstatus.Add(new EstatusInfo()
                    {
                        EstatusId = Estatus.DifInvAutorizado.GetHashCode()
                    });
                    listaEstatus.Add(new EstatusInfo()
                    {
                        EstatusId = Estatus.DifInvPendiente.GetHashCode()
                    });
                    listaEstatus.Add(new EstatusInfo()
                    {
                        EstatusId = Estatus.DifInvRechazado.GetHashCode()
                    });
                }
                else
                {
                    listaEstatus.Add((EstatusInfo)CboEstatus.SelectedItem);
                }

                //Llenar grid
                var diferenciasDeInventariosPl = new DiferenciasDeInventarioPL();
                ListaAjustesPendientesBuscados =
                    diferenciasDeInventariosPl.ObtenerAjustesPendientesPorUsuario(listaEstatus, listaTipoMovimiento,
                                                                                  new UsuarioInfo()
                {
                    UsuarioCreacionID = usuarioID
                });

                if (ListaAjustesPendientesBuscados != null)
                {
                    var listAux = (from diferenciasInventarioV in ListaAjustesPendientesBuscados from diferenciasInventarioI in ListaAjustesPendientesPrincipal where diferenciasInventarioV.AlmacenMovimiento.AlmacenMovimientoID == diferenciasInventarioI.AlmacenMovimiento.AlmacenMovimientoID select diferenciasInventarioV).ToList();

                    //Eliminar de lista los items de la lista principal
                    foreach (var diferenciasDeInventariosInfoP in listAux)
                    {
                        ListaAjustesPendientesBuscados.Remove(diferenciasDeInventariosInfoP);
                    }

                    foreach (var diferenciasDeInventariosInfoPar in ListaAjustesPendientesBuscados)
                    {
                        if (diferenciasDeInventariosInfoPar.Estatus.EstatusId !=
                            Estatus.DifInvAutorizado.GetHashCode())
                        {
                            diferenciasDeInventariosInfoPar.Editable   = true;
                            diferenciasDeInventariosInfoPar.Eliminable = true;
                        }

                        diferenciasDeInventariosInfoPar.DescripcionAjuste =
                            diferenciasDeInventariosInfoPar.AlmacenMovimiento.TipoMovimientoID ==
                            TipoMovimiento.SalidaPorAjuste.GetHashCode()
                                ? TipoAjusteEnum.Merma.ToString()
                                : TipoAjusteEnum.Superávit.ToString();
                        diferenciasDeInventariosInfoPar.KilogramosFisicos =
                            diferenciasDeInventariosInfoPar.AlmacenMovimientoDetalle.Cantidad;

                        //Obtener kilogramos totales
                        var almacenMovimientoDetalle = new AlmacenMovimientoDetalle()
                        {
                            AlmacenInventarioLoteId = diferenciasDeInventariosInfoPar.AlmacenInventarioLote.AlmacenInventarioLoteId
                        };
                        var listaMovimientos = new List <TipoMovimientoInfo>
                        {
                            new TipoMovimientoInfo()
                            {
                                TipoMovimientoID = TipoMovimiento.EntradaPorCompra.GetHashCode()
                            }
                        };
                        var almacenMovimientoDetallePl    = new AlmacenMovimientoDetallePL();
                        var listaAlmacenMovimientoDetalle =
                            almacenMovimientoDetallePl.ObtenerAlmacenMovimientoDetallePorLoteId(
                                almacenMovimientoDetalle,
                                listaMovimientos);
                        if (listaAlmacenMovimientoDetalle != null)
                        {
                            var kilogramosTotales = (from almacenMovimientoDetalleInfo in listaAlmacenMovimientoDetalle
                                                     select almacenMovimientoDetalleInfo.Cantidad).Sum();
                            diferenciasDeInventariosInfoPar.KilogramosTotales = kilogramosTotales;

                            if (diferenciasDeInventariosInfoPar.AlmacenMovimiento.TipoMovimientoID ==
                                TipoMovimiento.SalidaPorAjuste.GetHashCode())
                            {
                                diferenciasDeInventariosInfoPar.KilogramosTeoricos =
                                    diferenciasDeInventariosInfoPar.KilogramosTotales -
                                    diferenciasDeInventariosInfoPar.KilogramosFisicos;
                            }
                            else
                            {
                                diferenciasDeInventariosInfoPar.KilogramosTeoricos =
                                    diferenciasDeInventariosInfoPar.KilogramosTotales +
                                    diferenciasDeInventariosInfoPar.KilogramosFisicos;
                            }

                            diferenciasDeInventariosInfoPar.PorcentajeAjuste =
                                (diferenciasDeInventariosInfoPar.AlmacenMovimientoDetalle.Cantidad /
                                 diferenciasDeInventariosInfoPar.KilogramosTotales) * 100;
                        }
                        //
                        diferenciasDeInventariosInfoPar.AlmacenMovimiento.UsuarioModificacionID        = usuarioID;
                        diferenciasDeInventariosInfoPar.AlmacenMovimientoDetalle.UsuarioModificacionID = usuarioID;
                        diferenciasDeInventariosInfoPar.AlmacenInventarioLote.UsuarioModificacionId    = usuarioID;
                    }

                    GridDiferenciasDeInventarios.ItemsSource = null;
                    GridDiferenciasDeInventarios.ItemsSource = ListaAjustesPendientesBuscados;
                }
                else
                {
                    GridDiferenciasDeInventarios.ItemsSource = null;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                //Excepcion
            }
        }
        /// <summary>
        /// Genera los movimientos de almacen
        /// </summary>
        /// <param name="cargaInventario"></param>
        /// <param name="almacenInventarioLote"></param>
        /// <returns></returns>
        private void GenerarMovimientosAlmacen(CargaMPPAModel cargaInventario, AlmacenInventarioLoteInfo almacenInventarioLote)
        {
            var almacenMovimientoBL        = new AlmacenMovimientoBL();
            var almacenMovimientoDetalleBL = new AlmacenMovimientoDetalleBL();

            var almacenMovimiento = new AlmacenMovimientoInfo
            {
                AlmacenID         = cargaInventario.Almacen.AlmacenID,
                TipoMovimientoID  = TipoMovimiento.EntradaPorAjuste.GetHashCode(),
                Observaciones     = string.Format("Carga Inicial {0}", DateTime.Now.Date),
                Status            = Estatus.AplicadoInv.GetHashCode(),
                UsuarioCreacionID = 1
            };
            long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimiento);

            almacenMovimiento.AlmacenMovimientoID = almacenMovimientoID;



            var almacenMovimientoDetalle = new AlmacenMovimientoDetalle
            {
                AlmacenMovimientoID     = almacenMovimiento.AlmacenMovimientoID,
                AlmacenInventarioLoteId =
                    almacenInventarioLote.AlmacenInventarioLoteId,
                Piezas     = cargaInventario.Piezas,
                ProductoID = cargaInventario.Producto.ProductoId,
                Cantidad   = cargaInventario.CantidadTamanioLote,
                Importe    = cargaInventario.ImporteTamanioLote,
                Precio     =
                    cargaInventario.ImporteTamanioLote /
                    cargaInventario.CantidadTamanioLote,
                UsuarioCreacionID = 1
            };
            long almacenMovimientoDetalleID = almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalle);

            almacenMovimientoDetalle.AlmacenMovimientoDetalleID = almacenMovimientoDetalleID;

            decimal diferenciaInventario = cargaInventario.CantidadTamanioLote - cargaInventario.CantidadActual;
            decimal importeDiferencia    = cargaInventario.ImporteTamanioLote - cargaInventario.ImporteActual;

            if (diferenciaInventario > 0)
            {
                almacenMovimiento = new AlmacenMovimientoInfo
                {
                    AlmacenID         = cargaInventario.Almacen.AlmacenID,
                    TipoMovimientoID  = TipoMovimiento.SalidaPorAjuste.GetHashCode(),
                    Observaciones     = string.Format("Carga Inicial {0}", DateTime.Now.Date),
                    Status            = Estatus.AplicadoInv.GetHashCode(),
                    UsuarioCreacionID = 1
                };
                almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimiento);
                almacenMovimiento.AlmacenMovimientoID = almacenMovimientoID;



                almacenMovimientoDetalle = new AlmacenMovimientoDetalle
                {
                    AlmacenMovimientoID     = almacenMovimiento.AlmacenMovimientoID,
                    AlmacenInventarioLoteId =
                        almacenInventarioLote.AlmacenInventarioLoteId,
                    Piezas     = cargaInventario.Piezas,
                    ProductoID = cargaInventario.Producto.ProductoId,
                    Cantidad   = diferenciaInventario,
                    Importe    = importeDiferencia,
                    Precio     =
                        importeDiferencia /
                        diferenciaInventario,
                    UsuarioCreacionID = 1
                };
                almacenMovimientoDetalleID = almacenMovimientoDetalleBL.Crear(almacenMovimientoDetalle);
                almacenMovimientoDetalle.AlmacenMovimientoDetalleID = almacenMovimientoDetalleID;
            }
        }
示例#13
0
        /// <summary>
        /// Obtiene un listado de almacenmovimientodetalle por loteid
        /// </summary>
        /// <returns></returns>
        internal static Dictionary <string, object> ObtenerAlmacenMovimientoDetallePorLoteId(AlmacenMovimientoDetalle almacenMovimientoDetalle, List <TipoMovimientoInfo> listaTipoMovimiento)
        {
            Dictionary <string, object> parametros;

            try
            {
                Logger.Info();

                var element = new XElement("ROOT",
                                           from tipoMovimientoInfo in listaTipoMovimiento
                                           select new XElement("Datos",
                                                               new XElement("tipoMovimiento",
                                                                            tipoMovimientoInfo.TipoMovimientoID)));

                parametros = new Dictionary <string, object>
                {
                    { "@AlmacenInventarioLoteID", almacenMovimientoDetalle.AlmacenInventarioLoteId },
                    { "@XmlTiposMovimiento", element.ToString() },
                };
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(parametros);
        }
示例#14
0
 /// <summary>
 /// Obtiene un almacen movimiento detalle por contrato id
 /// </summary>
 /// <param name="almacenMovimientoDetalleInfo"></param>
 /// <returns></returns>
 internal static Dictionary <string, object> ObtenerParametrosObtenerPorContratoId(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@ContratoID", almacenMovimientoDetalleInfo.ContratoId }
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#15
0
 /// <summary>
 /// Obtiene parametros para actualizar almacen movimiento detalle
 /// </summary>
 /// <param name="almacenMovimientoDetalleInfo"></param>
 /// <returns></returns>
 internal static Dictionary <string, object> ActualizarAlmacenMovimientoDetalle(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@AlmacenMovimientoDetalleID", almacenMovimientoDetalleInfo.AlmacenMovimientoDetalleID },
             { "@Cantidad", almacenMovimientoDetalleInfo.Cantidad },
             { "@Precio", almacenMovimientoDetalleInfo.Precio },
             { "@Importe", almacenMovimientoDetalleInfo.Importe },
             { "@UsuarioModificacionID", almacenMovimientoDetalleInfo.UsuarioModificacionID }
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
示例#16
0
        /// <summary>
        /// Registra el envio de alimento de una organizacion a otra
        /// </summary>
        /// <param name="envioAlimento">Información del envio de alimento a guardar</param>
        /// <returns>Regresa una confirmación de registro del envio de alimento</returns>
        internal EnvioAlimentoInfo RegistrarEnvioAlimento(EnvioAlimentoInfo envioAlimento)
        {
            EnvioAlimentoInfo confirmacion = new EnvioAlimentoInfo();

            try
            {
                Logger.Info();
                AlmacenMovimientoBL almacenMovimientoBL = new AlmacenMovimientoBL();

                EnvioAlimentoDAL           salidaAlimentoDAL          = new EnvioAlimentoDAL();
                AlmacenMovimientoDetalleBL almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL();
                AlmacenMovimientoDetalle   detalleMovimiento          = new AlmacenMovimientoDetalle();
                AlmacenInventarioBL        inventario = new AlmacenInventarioBL();
                AlmacenInventarioLoteBL    loteBl     = new AlmacenInventarioLoteBL();

                AlmacenMovimientoInfo almacenMovimiento = new AlmacenMovimientoInfo();
                almacenMovimiento.AlmacenID        = envioAlimento.Almacen.AlmacenID;
                almacenMovimiento.TipoMovimientoID = TipoMovimiento.ProductoSalidaTraspaso.GetHashCode();

                almacenMovimiento.Status                = Estatus.AplicadoInv.GetHashCode();
                almacenMovimiento.UsuarioCreacionID     = envioAlimento.UsuarioCreacionID;
                almacenMovimiento.UsuarioModificacionID = envioAlimento.UsuarioCreacionID;
                almacenMovimiento.EsEnvioAlimento       = true;
                almacenMovimiento.OrganizacionID        = envioAlimento.Origen.OrganizacionID;

                PolizaAbstract     poliza       = null;
                IList <PolizaInfo> listaPolizas = null;

                using (var transaccion = new TransactionScope())
                {
                    //registrar en TB AlmacenMovimiento
                    long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimiento);
                    almacenMovimiento.AlmacenMovimientoID = almacenMovimientoID;
                    envioAlimento.AlmacenMovimientoId     = almacenMovimientoID;

                    if (envioAlimento.AlmacenMovimientoId == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    //registrar en TB AlmacenMovimientoDetalle
                    detalleMovimiento.AlmacenMovimientoID = almacenMovimiento.AlmacenMovimientoID;
                    almacenMovimiento = almacenMovimientoBL.ObtenerPorId(almacenMovimiento.AlmacenMovimientoID);

                    if (almacenMovimiento.AlmacenMovimientoID == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    envioAlimento.Folio        = almacenMovimiento.FolioMovimiento;
                    detalleMovimiento.Producto = envioAlimento.Producto;

                    if (detalleMovimiento.Producto.ManejaLote)
                    {
                        detalleMovimiento.AlmacenInventarioLoteId = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().AlmacenInventarioLoteId;

                        detalleMovimiento.Precio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio;
                    }
                    else
                    {
                        detalleMovimiento.Precio = envioAlimento.AlmacenInventario.PrecioPromedio;
                    }

                    detalleMovimiento.ProductoID        = envioAlimento.Producto.ProductoId;
                    detalleMovimiento.Cantidad          = envioAlimento.Cantidad;
                    detalleMovimiento.Importe           = envioAlimento.Importe;
                    detalleMovimiento.UsuarioCreacionID = envioAlimento.UsuarioCreacionID;
                    detalleMovimiento.Piezas            = envioAlimento.Piezas;
                    int almacenMovimientoDetalleid = almacenMovimientoDetalleBl.Crear(detalleMovimiento);
                    if (almacenMovimientoDetalleid == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    //registrar en TB EnvioProducto
                    confirmacion = salidaAlimentoDAL.RegistrarEnvioAlimento(envioAlimento);

                    if (confirmacion.EnvioId == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    envioAlimento.EnvioId    = confirmacion.EnvioId;
                    envioAlimento.FechaEnvio = confirmacion.FechaEnvio;

                    envioAlimento.AlmacenInventario.Cantidad -= envioAlimento.Cantidad;
                    envioAlimento.AlmacenInventario.Importe  -= envioAlimento.Importe;
                    decimal precioPromedioInicial = 0M;
                    if (envioAlimento.Producto.ManejaLote)
                    {
                        precioPromedioInicial = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio;
                    }
                    else
                    {
                        precioPromedioInicial = envioAlimento.AlmacenInventario.PrecioPromedio;
                    }
                    if (envioAlimento.AlmacenInventario.Cantidad == 0)
                    {
                        envioAlimento.AlmacenInventario.PrecioPromedio = 0M;
                    }

                    if (envioAlimento.AlmacenInventario.Cantidad < 0)
                    {
                        envioAlimento.AlmacenInventario.Cantidad = 0;
                    }

                    if (envioAlimento.AlmacenInventario.Importe < 0)
                    {
                        envioAlimento.AlmacenInventario.Importe = 0;
                    }

                    if (envioAlimento.AlmacenInventario.Cantidad > 0 && envioAlimento.AlmacenInventario.Importe > 0)
                    {
                        envioAlimento.AlmacenInventario.PrecioPromedio = envioAlimento.AlmacenInventario.Importe / envioAlimento.AlmacenInventario.Cantidad;
                    }

                    envioAlimento.AlmacenInventario.UsuarioModificacionID = envioAlimento.UsuarioCreacionID;
                    inventario.ActualizarPorProductoId(envioAlimento.AlmacenInventario);

                    if (envioAlimento.Producto.ManejaLote)
                    {
                        FechaInfo fechaInfo = new FechaBL().ObtenerFechaActual();
                        envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad -= envioAlimento.Cantidad;
                        envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe  -= envioAlimento.Importe;

                        if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad <= 0)
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = 0M;
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad       = 0;
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe        = 0;

                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaInicio = fechaInfo.FechaActual;
                        }

                        if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe > 0 && envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad > 0)
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe / envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad;
                        }
                        else
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Activo   = EstatusEnum.Inactivo;
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaFin = fechaInfo.FechaActual;
                        }

                        if (envioAlimento.Producto.SubfamiliaId == SubFamiliasEnum.Forrajes.GetHashCode())
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas -= envioAlimento.Piezas;
                            if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas < 0)
                            {
                                envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas = 0;
                            }
                        }

                        envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().UsuarioModificacionId = envioAlimento.UsuarioCreacionID;
                        loteBl.ActualizarEnvioAlimento(envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault());
                    }

                    if (salidaAlimentoDAL.RegistrarRecepcionProductoEnc(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    if (salidaAlimentoDAL.RegistrarRecepcionProductoDet(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaTraspaso);

                    SolicitudProductoInfo oSolicitud = new SolicitudProductoInfo();
                    oSolicitud.FolioSolicitud    = envioAlimento.Folio;
                    oSolicitud.OrganizacionID    = envioAlimento.Origen.OrganizacionID;
                    oSolicitud.AlmacenGeneralID  = envioAlimento.Almacen.AlmacenID;
                    oSolicitud.Almacen           = new AlmacenBL().ObtenerAlmacenPorOrganizacion(envioAlimento.Destino.OrganizacionID).FirstOrDefault();
                    oSolicitud.FechaEntrega      = envioAlimento.FechaEnvio;
                    oSolicitud.UsuarioCreacionID = envioAlimento.UsuarioCreacionID;
                    oSolicitud.Detalle           = new List <SolicitudProductoDetalleInfo>();
                    SolicitudProductoDetalleInfo detalle = new SolicitudProductoDetalleInfo()
                    {
                        Cantidad       = envioAlimento.Cantidad,
                        PrecioPromedio = envioAlimento.Producto.ManejaLote ? envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio: envioAlimento.AlmacenInventario.PrecioPromedio,
                        Producto       = envioAlimento.Producto
                    };
                    detalle.PrecioPromedio = decimal.Round(detalle.PrecioPromedio, 2);
                    if (detalle.PrecioPromedio == 0)
                    {
                        detalle.PrecioPromedio = precioPromedioInicial;
                    }
                    oSolicitud.Detalle.Add(detalle);

                    listaPolizas = poliza.GeneraPoliza(oSolicitud);
                    var polizaDAL = new PolizaDAL();
                    if (listaPolizas != null && listaPolizas.Any())
                    {
                        string Referencia = "03  " + envioAlimento.Folio.ToString() + new Random().Next(10, 20).ToString() + new Random().Next(30, 40) + DateTime.Now.Millisecond.ToString() + listaPolizas.ToList().FirstOrDefault().ClaseDocumento;
                        listaPolizas.ToList().ForEach(datos =>
                        {
                            datos.NumeroReferencia       = envioAlimento.Folio.ToString();
                            datos.OrganizacionID         = oSolicitud.OrganizacionID;
                            datos.UsuarioCreacionID      = envioAlimento.UsuarioCreacionID;
                            datos.Activo                 = EstatusEnum.Activo;
                            datos.ArchivoEnviadoServidor = 1;
                            datos.Referencia3            = Referencia;
                        });

                        ParametroOrganizacionInfo oParametroOrg = new ParametroOrganizacionBL().ObtenerPorOrganizacionIDClaveParametro(oSolicitud.OrganizacionID, ParametrosEnum.CuentaInventarioTransito.ToString());
                        if (oParametroOrg != null)
                        {
                            listaPolizas[listaPolizas.ToList().FindIndex(datos => datos.NumeroLinea.Trim() == "1")].Cuenta = oParametroOrg.Valor;
                        }

                        envioAlimento.Poliza = poliza.ImprimePoliza(oSolicitud, listaPolizas);
                        polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.SalidaTraspaso);

                        transaccion.Complete();
                    }
                }

                return(envioAlimento);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
        /// <summary>
        /// Obtiene un listado de almacenmovimientodetalle por loteid
        /// </summary>
        /// <returns></returns>
        internal List <AlmacenMovimientoDetalle> ObtenerAlmacenMovimientoDetallePorLoteId(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo, List <TipoMovimientoInfo> listaTipoMovimiento)
        {
            List <AlmacenMovimientoDetalle> resultado = null;

            try
            {
                Logger.Info();
                Dictionary <string, object> parametros =
                    AuxAlmacenMovimientoDetalleDAL.ObtenerAlmacenMovimientoDetallePorLoteId(almacenMovimientoDetalleInfo, listaTipoMovimiento);

                DataSet ds = Retrieve("AlmacenMovimientoDetalle_ObtenerPorLoteID", parametros);
                if (ValidateDataSet(ds))
                {
                    resultado = MapAlmacenMovimientoDetalleDAL.ObtenerAlmacenMovimientoDetallePorLoteId(ds);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(resultado);
        }
        /// <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);
            }
        }
示例#19
0
 /// <summary>
 /// Obtener parametros para guardar el almacen movimiento detalle
 /// </summary>
 /// <param name="almacenMovimientoDetalle"></param>
 /// <returns></returns>
 public static Dictionary <string, object> ObtenerParametrosGuardarAlmacenMovimientoDetalleProducto(AlmacenMovimientoDetalle almacenMovimientoDetalle)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@AlmacenMovimientoID", almacenMovimientoDetalle.AlmacenMovimientoID },
             { "@ProductoID", almacenMovimientoDetalle.ProductoID },
             { "@Precio", almacenMovimientoDetalle.Precio },
             { "@Cantidad", almacenMovimientoDetalle.Cantidad },
             { "@Importe", almacenMovimientoDetalle.Importe },
             { "@AlmacenInventarioLoteID", almacenMovimientoDetalle.AlmacenInventarioLoteId },
             { "@ContratoID", almacenMovimientoDetalle.ContratoId },
             { "@Piezas", almacenMovimientoDetalle.Piezas },
             { "@UsuarioCreacionID", almacenMovimientoDetalle.UsuarioCreacionID },
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        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);
        }
示例#21
0
 /// <summary>
 /// Obtiene un listado de almacenmovimientodetalle
 /// </summary>
 /// <param name="almacenMovimientoDetalleInfo"></param>
 /// <param name="listaTipoMovimiento"></param>
 /// <returns></returns>
 internal List <AlmacenMovimientoDetalle> ObtenerAlmacenMovimientoDetallePorLoteId(AlmacenMovimientoDetalle almacenMovimientoDetalleInfo, List <TipoMovimientoInfo> listaTipoMovimiento)
 {
     try
     {
         Logger.Info();
         var almacenMovimientoDetalleDal        = new AlmacenMovimientoDetalleDAL();
         List <AlmacenMovimientoDetalle> result = almacenMovimientoDetalleDal.ObtenerAlmacenMovimientoDetallePorLoteId(almacenMovimientoDetalleInfo, listaTipoMovimiento);
         return(result);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        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);
        }