Exemplo n.º 1
0
        /// <summary>
        /// Guarda los datos de la poliza
        /// </summary>
        /// <param name="polizaEntradaGanadoInfo"></param>
        /// <param name="tipoPoliza"></param>
        internal void GuardarServicioPI(IList <PolizaInfo> polizaEntradaGanadoInfo, TipoPoliza tipoPoliza)
        {
            try
            {
                Logger.Info();
                var polizaDAL = new PolizaDAL();

                var ref3 = polizaEntradaGanadoInfo.Select(refeferencia => refeferencia.Referencia3).Distinct().ToList();
                List <PolizaInfo> polizasRef3;
                for (var indexRef3 = 0; indexRef3 < ref3.Count; indexRef3++)
                {
                    polizasRef3 =
                        polizaEntradaGanadoInfo.Where(referencia => referencia.Referencia3.Equals(ref3[indexRef3])).
                        ToList();
                    ValidarImportes(polizasRef3);
                }
                polizaDAL.CrearServicioPI(polizaEntradaGanadoInfo, tipoPoliza);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Guarda el gasto de inventario a la base de datos
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        internal long Guardar(GastoInventarioInfo info)
        {
            long folioGasto;

            try
            {
                PolizaAbstract     poliza;
                IList <PolizaInfo> listaPolizas;
                using (var transaction = new TransactionScope())
                {
                    Logger.Info();
                    info.TipoFolio = TipoFolio.GastoInventario;
                    var dal = new GastoInventarioDAL();
                    int gastoInventarioID = dal.Guardar(info);

                    GastoInventarioInfo gastoInventario = dal.ObtenerPorID(gastoInventarioID);
                    if (gastoInventario == null)
                    {
                        return(0);
                    }
                    gastoInventario.CuentaGasto   = info.CuentaGasto;
                    gastoInventario.CentroCosto   = info.CentroCosto;
                    gastoInventario.Corral        = info.Corral;
                    gastoInventario.TotalCorrales = info.TotalCorrales;
                    poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.GastosInventario);
                    if (gastoInventario.Importe < 0)
                    {
                        poliza.Cancelacion      = true;
                        gastoInventario.Importe = Math.Abs(gastoInventario.Importe);
                    }
                    listaPolizas = poliza.GeneraPoliza(gastoInventario);

                    var polizaDAL = new PolizaDAL();
                    listaPolizas.ToList().ForEach(datos =>
                    {
                        datos.OrganizacionID         = info.Organizacion.OrganizacionID;
                        datos.UsuarioCreacionID      = info.UsuarioId;
                        datos.Activo                 = EstatusEnum.Activo;
                        datos.ArchivoEnviadoServidor = 1;
                    });
                    polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.GastosInventario);
                    transaction.Complete();
                    folioGasto = gastoInventario.FolioGasto;
                }
            }
            catch (ExcepcionServicio)
            {
                throw;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(folioGasto);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Genera la conciliacion de las polizas faltantes en SAP
 /// </summary>
 /// <param name="polizasReenviar"></param>
 internal void GuardarConciliacion(List <PolizaInfo> polizasReenviar)
 {
     try
     {
         Logger.Info();
         var polizaDAL = new PolizaDAL();
         using (var scope = new TransactionScope())
         {
             List <PolizaInfo> polizasGuardar;
             List <string>     referencias = polizasReenviar.Select(ref3 => ref3.Referencia3).Distinct().ToList();
             int milisegundo;
             for (var indexReferencias = 0; indexReferencias < referencias.Count; indexReferencias++)
             {
                 polizasGuardar =
                     polizasReenviar.Where(ref3 => ref3.Referencia3.Equals(referencias[indexReferencias])).ToList
                         ();
                 milisegundo = DateTime.Now.Millisecond;
                 polizasGuardar.ForEach(datos =>
                 {
                     var ref3 = new StringBuilder();
                     ref3.Append("03");
                     ref3.Append(datos.TextoAsignado.PadLeft(10, ' '));
                     ref3.Append(new Random(10).Next(10, 20));
                     ref3.Append(new Random(30).Next(30, 40));
                     ref3.Append(milisegundo);
                     ref3.Append(datos.ClaseDocumento);
                     datos.Referencia3 = ref3.ToString();
                     if (!string.IsNullOrWhiteSpace(datos.Proveedor) &&
                         (datos.Proveedor.StartsWith("1126") ||
                          datos.Proveedor.StartsWith("1127")))
                     {
                         datos.Cuenta    = datos.Proveedor;
                         datos.Proveedor = string.Empty;
                     }
                 });
                 polizasGuardar.ForEach(x => x.NumeroReferencia = string.Format("{0}{1}{2}",
                                                                                DateTime.Now.Hour,
                                                                                DateTime.Now.Minute,
                                                                                milisegundo));
                 ValidarImportes(polizasGuardar);
                 Thread.Sleep(20);
                 polizaDAL.CrearServicioPI(polizasGuardar,
                                           (TipoPoliza)polizasGuardar.Select(x => x.TipoPolizaID).FirstOrDefault());
             }
             scope.Complete();
         }
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// Obtiene un listado de las Polizas que estan pendientes
 /// por ser enviadas a SAP
 /// </summary>
 /// <returns></returns>
 internal Queue <IList <PolizaInfo> > ObtenerPolizasPendientes()
 {
     try
     {
         Logger.Info();
         var polizaDAL = new PolizaDAL();
         return(polizaDAL.ObtenerPolizasPendientes());
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 5
0
 internal List <TiposCuentaConciliacionInfo> ObtenerTipoCuentaConciliacion()
 {
     try
     {
         Logger.Info();
         var polizaDal = new PolizaDAL();
         return(polizaDal.obtenerTiposCuentas());
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 6
0
 /// <summary>
 /// Método que obtiene el listado de pólizas de la organización en el rango de fechas indicado.
 /// </summary>
 /// <param name="conciliaciionParametros"></param>
 internal List <PolizaInfo> ObtenerPolizasConciliacionSapSiap(ConciliaciionParametros conciliaciionParametros)
 {
     try
     {
         Logger.Info();
         var polizaDal = new PolizaDAL();
         return(polizaDal.ObtenerPolizasConciliacionSapSiap(conciliaciionParametros));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 7
0
 /// <summary>
 /// Activa bandera para indicar que la poliza
 /// debe ser cancelada
 /// </summary>
 /// <param name="polizasID"></param>
 internal void ActualizaCanceladoSAP(List <int> polizasID)
 {
     try
     {
         Logger.Info();
         var polizaDAL = new PolizaDAL();
         polizaDAL.ActualizaCanceladoSAP(polizasID);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 8
0
 /// <summary>
 /// Actualiza bandera para indicar si el archivo fue
 /// grabado en el servidor de SAP ó no
 /// </summary>
 /// <returns></returns>
 internal void DesactivarPolizas(List <PolizaInfo> polizasCancelar)
 {
     try
     {
         Logger.Info();
         var polizaDAL = new PolizaDAL();
         polizaDAL.DesactivarPolizas(polizasCancelar);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 9
0
 /// <summary>
 /// Actualiza datos de poliza
 /// </summary>
 /// <param name="respuestaServicioPI"></param>
 internal void Actualizar(RespuestaServicioPI respuestaServicioPI)
 {
     try
     {
         Logger.Info();
         var polizaDAL = new PolizaDAL();
         polizaDAL.Actualizar(respuestaServicioPI);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        /// <summary>
        /// Registra una salida de ganado en transito, genera la poliza y factura correspondiente e imprime el archivo de poliza en formato PDF
        /// </summary>
        /// <param name="input">salida de ganado en transito que se registrara</param>
        /// <param name="registroExitoso">indica si se completo el registro de la salida de ganado en transito</param>
        /// <returns>Regresa los datos que conformaran el archivo impreso en PDF</returns>
        public MemoryStream GuardarSalida(SalidaGanadoEnTransitoInfo input, out bool registroExitoso)
        {
            try
            {
                var salida = new SalidaGanadoEnTransitoDAL();
                var ms     = new MemoryStream();
                registroExitoso = false;
                using (var transaction = new TransactionScope()) //agrupa el proceso siguiente como una sola operacion
                {
                    salida.GuardarSalida(ref input);             //registrar la salida de ganado en transito y actualiza el folio generado para la salida
                    salida.ActualizarEntradas(input);            //actualiza las entradas de ganado en transito, y del lote correspondiente
                    if (input.Muerte)                            // si es salida de ganado en transito por muerte
                    {
                        var polizaSalida = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaMuerteEnTransito);
                        var polizaDal    = new PolizaDAL();
                        var polizaSalidaMuerteTransito = polizaSalida.GeneraPoliza(input);                                //genera el XML de la poliza //genera el XML de la poliza de salida de  ganado por muerte
                        input.PolizaID  = polizaDal.Crear(polizaSalidaMuerteTransito, TipoPoliza.SalidaMuerteEnTransito); //almacena la poliza generada en la base de datos
                        ms              = polizaSalida.ImprimePoliza(input, polizaSalidaMuerteTransito);                  //genera el archivo en formato PDF de la poliza generada
                        registroExitoso = true;                                                                           //indica que se completo la operacion exitosamente
                    }
                    else if (input.Venta)                                                                                 //en caso de ser una salida de ganado en transito por venta
                    {
                        var polizaSalida = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaVentaEnTransito);
                        var polizaDal    = new PolizaDAL();
                        var poliza       = polizaSalida.GeneraPoliza(input);                        //genera el XML de la poliza de salida de  ganado por venta
                        input.PolizaID = polizaDal.Crear(poliza, TipoPoliza.SalidaVentaEnTransito); //almacena la poliza generada en la base de datos
                        ms             = polizaSalida.ImprimePoliza(input, poliza);                 //genera el archivo en formato PDF de la poliza generada

                        var generarFactura = new FacturaBL();
                        generarFactura.SalidaGanadoTransito_ObtenerDatosFactura(input.Folio, input.OrganizacionID, true); //genera la factura de la salida de ganado en transito
                        registroExitoso = true;                                                                           //indica que se completo la operacion exitosamente
                    }
                    salida.AsignarPolizaRegistrada(input);                                                                //asigna la poliza generada a la salida de ganado en transito registrada
                    transaction.Complete();                                                                               //da por concluido el proceso de Salida de ganado en transito por venta o muerte
                    return(ms);                                                                                           //regresa los datos del archivo PDF que se imprimiran
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                registroExitoso = false;
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
Exemplo n.º 11
0
 internal List <int> ObtenerPolizasMal()
 {
     try
     {
         Logger.Info();
         var        polizaDAL  = new PolizaDAL();
         List <int> polizasMal = polizaDAL.ObtenerPolizasMal();
         return(polizasMal);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 12
0
 /// <summary>
 /// Obtiene las polizas para su conciliacion
 /// </summary>
 /// <param name="organizacionID"></param>
 /// <param name="fechaInicio"></param>
 /// <param name="fechaFin"></param>
 /// <param name="claseDocumento"> </param>
 /// <returns></returns>
 internal IEnumerable <PolizaInfo> ObtenerPolizasConciliacion(int organizacionID, DateTime fechaInicio
                                                              , DateTime fechaFin, string claseDocumento)
 {
     try
     {
         Logger.Info();
         var polizaDAL = new PolizaDAL();
         return(polizaDAL.ObtenerPolizasConciliacion(organizacionID, fechaInicio, fechaFin, claseDocumento));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 13
0
 /// <summary>
 /// Obtiene los datos de la poliza
 /// </summary>
 /// <returns></returns>
 internal IList <PolizaInfo> ObtenerPoliza(TipoPoliza tipoPoliza, int organizacionID, DateTime fecha
                                           , string clave, string concepto, long estatus)
 {
     try
     {
         Logger.Info();
         var polizaDAL = new PolizaDAL();
         return(polizaDAL.ObtenerPoliza(tipoPoliza, organizacionID, fecha, clave, concepto, estatus));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
Exemplo n.º 14
0
        /// <summary>
        /// Obtiene los datos de la poliza
        /// </summary>
        /// <returns></returns>
        internal IList <PolizaInfo> ObtenerPolizaConDocumentoSAPPorRango(TipoPoliza tipoPoliza, int organizacionID, DateTime fecha)
        {
            IList <PolizaInfo> polizas;

            try
            {
                Logger.Info();
                var polizaDAL = new PolizaDAL();
                polizas = polizaDAL.ObtenerPolizaConDocumentoSAPPorRango(tipoPoliza, organizacionID, fecha);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(polizas);
        }
Exemplo n.º 15
0
        /// <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);
            }
        }
Exemplo n.º 16
0
        /// <summary>
        /// Metodo para Guardar/Modificar una entidad TraspasoMateriaPrima
        /// </summary>
        /// <param name="info"></param>
        public Dictionary <long, MemoryStream> GuardarTraspaso(TraspasoMpPaMedInfo info)
        {
            try
            {
                var resultado = new Dictionary <long, MemoryStream>();
                Logger.Info();
                var traspasoMateriaPrimaDAL = new TraspasoMateriaPrimaDAL();
                using (var transaction = new TransactionScope())
                {
                    long almacenMovimientoOrigenID  = GenerarMovimientoSalida(info);
                    long almacenMovimientoDestinoID = GenerarMovimientoEntrada(info);

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

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

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