예제 #1
0
        /// <summary>
        /// Metodo que le da salida por venta al ganado
        /// </summary>
        /// <param name="salidaIndividual"></param>
        /// <returns></returns>
        internal MemoryStream GuardarSalidaIndividualGanadoVenta(SalidaIndividualInfo salidaIndividual)
        {
            MemoryStream retorno = null;

            try
            {
                PolizaAbstract     poliza;
                IList <PolizaInfo> polizaSalidaVenta;
                TicketInfo         Ticket = new TicketInfo();

                Ticket.FolioTicket  = salidaIndividual.FolioTicket;
                Ticket.Organizacion = salidaIndividual.Organizacion;
                Ticket.TipoVenta    = salidaIndividual.TipoVenta;

                var ventaGanadoBL = new VentaGanadoBL();

                VentaGanadoInfo salidaPorVentaGanado = ventaGanadoBL.ObtenerVentaGanadoPorTicket(Ticket);


                var      loteBL = new LoteBL();
                LoteInfo lote   = loteBL.ObtenerPorID(salidaPorVentaGanado.LoteID);
                lote.Cabezas -= salidaIndividual.NumeroDeCabezas;

                AnimalBL animalBl = new AnimalBL();

                using (var scope = new TransactionScope())
                {
                    Logger.Info();
                    var salidaIndividualDAL = new SalidaIndividualDAL();

                    VentaGanadoDetalleBL          ventaGanadoDetalleBl    = new VentaGanadoDetalleBL();
                    List <VentaGanadoDetalleInfo> listaVentaGanadoDetalle = ventaGanadoDetalleBl.ObtenerVentaGanadoPorTicket(salidaPorVentaGanado.VentaGanadoID);
                    List <AnimalCostoInfo>        animalCosto             = new List <AnimalCostoInfo>();
                    AnimalCostoBL     animalCostoBl    = new AnimalCostoBL();
                    List <AnimalInfo> animalesConsulta = new List <AnimalInfo>();
                    List <AnimalInfo> animalesProcesar = new List <AnimalInfo>();
                    foreach (VentaGanadoDetalleInfo ventaGanado in listaVentaGanadoDetalle)
                    {
                        animalesConsulta   = new List <AnimalInfo>();
                        ventaGanado.Animal = animalBl.ObtenerAnimalPorArete(ventaGanado.Arete, Ticket.Organizacion);

                        if (ventaGanado.Animal == null)
                        {
                            ventaGanado.Animal = animalBl.ObtenerAnimalPorAreteTestigo(ventaGanado.AreteMetalico, Ticket.Organizacion);
                        }
                        animalesConsulta.Add(ventaGanado.Animal);
                        animalCosto = animalCostoBl.ObtenerCostosAnimal(animalesConsulta);

                        if (!animalCosto.Any(registro => registro.CostoID == Costo.CostoGanado.GetHashCode()))
                        {
                            animalesProcesar.Add(ventaGanado.Animal);
                        }
                    }

                    if (animalesProcesar != null && animalesProcesar.Count > 0)
                    {
                        animalBl.ProcesoGenerarCostos(animalesProcesar);
                    }

                    salidaIndividualDAL.GuardarSalidaIndividualGanadoVenta(salidaIndividual);
                    salidaIndividualDAL.GuardarCostosHistoricos(salidaIndividual);
                    salidaIndividualDAL.GuardarConsumoHistoricos(salidaIndividual);
                    salidaIndividualDAL.GuardarAnimalHistoricos(salidaIndividual);

                    var filtroActualizaCabezas = new FiltroActualizarCabezasLote
                    {
                        LoteIDOrigen          = lote.LoteID,
                        LoteIDDestino         = 0,
                        CabezasProcesadas     = salidaIndividual.NumeroDeCabezas,
                        UsuarioModificacionID = salidaIndividual.Usuario
                    };
                    loteBL.ActualizarCabezasProcesadas(filtroActualizaCabezas);

                    //loteBL.ActualizaNoCabezasEnLote(lote, lote);

                    #region Poliza

                    List <ContenedorVentaGanado> ventasGanado =
                        ventaGanadoBL.ObtenerVentaGanadoPorTicketPoliza(Ticket.FolioTicket, Ticket.Organizacion);


                    if (ventasGanado != null && ventasGanado.Any())
                    {
                        poliza            = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaVenta);
                        polizaSalidaVenta = poliza.GeneraPoliza(ventasGanado);
                        if (polizaSalidaVenta != null && polizaSalidaVenta.Any())
                        {
                            polizaSalidaVenta.ToList().ForEach(
                                org =>
                            {
                                org.OrganizacionID         = Ticket.Organizacion;
                                org.UsuarioCreacionID      = salidaIndividual.Usuario;
                                org.ArchivoEnviadoServidor = 1;
                            });
                            retorno = poliza.ImprimePoliza(ventasGanado, polizaSalidaVenta);
                            var polizaBL = new PolizaBL();
                            polizaBL.GuardarServicioPI(polizaSalidaVenta, TipoPoliza.SalidaVenta);
                        }
                    }

                    // Genera el xml y lo guarda en la ruta especificada en la configuración
                    var facturaBl = new FacturaBL();
                    facturaBl.GenerarDatosFacturaVentaDeGanado(Ticket.FolioTicket, Ticket.Organizacion);

                    #endregion Poliza

                    scope.Complete();
                }
                return(retorno);
            }
            catch (ExcepcionServicio ex)
            {
                Logger.Error(ex);
                throw;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
예제 #2
0
        /// <summary>
        /// Metodo para Guardar la Salida Ganado
        /// </summary>
        /// <param name="animalInactivo"></param>
        internal bool GuardarSalidaGanado(AnimalInfo animalInactivo)
        {
            var envioAnimal = false;

            try
            {
                Logger.Info();
                var animalBL = new AnimalBL();

                //Se obtiene el ultimo movimiento
                var ultimoMovimiento = animalBL.ObtenerUltimoMovimientoAnimal(animalInactivo);

                var salidaGanadoInfo = new SalidaGanadoInfo
                {
                    Organizacion = new OrganizacionInfo
                    {
                        OrganizacionID = animalInactivo.OrganizacionIDEntrada
                    },
                    TipoMovimiento = (TipoMovimiento)ultimoMovimiento.TipoMovimientoID,
                    Activo         = EstatusEnum.Activo,
                    //VentaGanado = new VentaGanadoInfo(){VentaGanadoID = null},
                    UsuarioCreacionID = animalInactivo.UsuarioCreacionID
                };

                if (ultimoMovimiento.TipoMovimientoID == (int)TipoMovimiento.SalidaPorVenta)
                {
                    //Si el ultimo movimiento es venta obtener el ID de la VentaGanado
                    var ventaDetalleBL = new VentaGanadoDetalleBL();
                    VentaGanadoDetalleInfo ventaDetalleInfo =
                        ventaDetalleBL.ExisteAnimal(animalInactivo);

                    if (ventaDetalleInfo != null)
                    {
                        salidaGanadoInfo.VentaGanado = new VentaGanadoInfo
                        {
                            VentaGanadoID = ventaDetalleInfo.VentaGanadoID
                        };
                    }
                }

                var salidaGanadoDAL           = new SalidaGanadoDAL();
                SalidaGanadoInfo salidaGanado = null;

                //Se valida si la venta es
                if (salidaGanadoInfo.VentaGanado != null)
                {
                    //Se busca la venta en la salida Ganado
                    salidaGanado = salidaGanadoDAL.ExisteVentaEnSalidaGanado(salidaGanadoInfo);
                }

                if (salidaGanado == null)
                {
                    //Se guarda en SalidaGanado
                    salidaGanado =
                        salidaGanadoDAL.GuardarSalidaGanado(salidaGanadoInfo, (int)TipoFolio.SalidaGanado);
                }

                //Se almacena SalidaAnimal
                var salidaAnimalBL = new SalidaAnimalBL();

                var salidaAnimalInfo = new SalidaAnimalInfo()
                {
                    SalidaGanado = salidaGanado,
                    Animal       = animalInactivo,
                    Lote         = new LoteInfo {
                        LoteID = ultimoMovimiento.LoteID
                    },
                    Activo            = EstatusEnum.Activo,
                    UsuarioCreacionID = animalInactivo.UsuarioCreacionID
                };

                envioAnimal = salidaAnimalBL.Guardar(salidaAnimalInfo);

                envioAnimal = true;
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
            return(envioAnimal);
        }