/// <summary> /// guardar cierre dia inventario /// </summary> /// <param name="datosGrid"></param> /// <param name="almacenCierreDiaInventario"></param> /// <returns></returns> public int GuardarCierreDiaInventario(IList <AlmacenCierreDiaInventarioInfo> datosGrid, AlmacenCierreDiaInventarioInfo almacenCierreDiaInventario) { try { int result = 0; int usuarioCreacionID = almacenCierreDiaInventario.UsuarioCreacionId; var almacenCierreFolio = new AlmacenCierreDiaInventarioInfo { Almacen = almacenCierreDiaInventario.Almacen, TipoMovimiento = TipoMovimiento.InventarioFisico.GetHashCode(), FolioAlmacen = almacenCierreDiaInventario.FolioAlmacen, Observaciones = almacenCierreDiaInventario.Observaciones, Estatus = EstatusInventario.Pendiente.GetHashCode(), UsuarioCreacionId = usuarioCreacionID, }; int organizacionID = almacenCierreDiaInventario.OrganizacionId; List <AnimalMovimientoInfo> animalesNoReimplantados = null; List <ProgramacionReinplanteInfo> corralesProgramados = null; List <LoteInfo> lotesDestino = null; List <LoteInfo> lotesOrigen = null; var animalMovimientoBL = new AnimalMovimientoBL(); var loteBL = new LoteBL(); if (almacenCierreFolio.Almacen != null && almacenCierreFolio.Almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) { var reimplanteBL = new ReimplanteBL(); corralesProgramados = reimplanteBL.ObtenerCorralesParaAjuste(organizacionID); if (corralesProgramados != null && corralesProgramados.Any()) { corralesProgramados.ForEach(dato => { dato.OrganizacionID = organizacionID; dato.UsuarioModificacionID = usuarioCreacionID; }); List <LoteInfo> lotes = corralesProgramados.Select(id => new LoteInfo { LoteID = id.LoteID }).ToList(); animalesNoReimplantados = animalMovimientoBL.ObtenerAnimalesNoReimplantadosXML(organizacionID, lotes); if (animalesNoReimplantados != null && animalesNoReimplantados.Any()) { animalesNoReimplantados.ForEach(dato => { dato.TipoMovimientoID = TipoMovimiento.EntradaPorAjusteAnimal.GetHashCode(); dato.UsuarioCreacionID = usuarioCreacionID; }); lotesDestino = animalesNoReimplantados.Select(lote => new LoteInfo { LoteID = lote.LoteID }).ToList(); lotesOrigen = animalesNoReimplantados.Select(lote => new LoteInfo { LoteID = lote.LoteIDOrigen }).ToList(); IEnumerable <LoteInfo> lotesEnumerable = loteBL.ObtenerPorLoteXML(lotesDestino); if (lotesEnumerable != null) { lotesDestino = lotesEnumerable.ToList(); } lotesEnumerable = loteBL.ObtenerPorLoteXML(lotesOrigen); if (lotesEnumerable != null) { lotesOrigen = lotesEnumerable.ToList(); } List <AnimalMovimientoInfo> animalesPorLoteDestino = animalesNoReimplantados .Select(ani => new AnimalMovimientoInfo { LoteID = ani.LoteID }).ToList(); List <AnimalMovimientoInfo> animalesPorLoteOrigen = animalesNoReimplantados .Select(ani => new AnimalMovimientoInfo { LoteID = ani.LoteID }).ToList(); lotesDestino.ForEach(id => { int cabezas = animalesPorLoteDestino.Count(loteID => loteID.LoteID == id.LoteID); id.Cabezas += cabezas; id.CabezasInicio += cabezas; id.UsuarioModificacionID = usuarioCreacionID; }); lotesOrigen.ForEach(id => { int cabezas = animalesPorLoteOrigen.Count(loteID => loteID.LoteID == id.LoteID); id.Cabezas -= cabezas; id.UsuarioModificacionID = usuarioCreacionID; }); } } } var transactionOption = new TransactionOptions(); transactionOption.IsolationLevel = IsolationLevel.ReadUncommitted; using (var transaction = new TransactionScope(TransactionScopeOption.Required, transactionOption)) { Logger.Info(); var cierreDiaInventarioDAL = new CierreDiaInventarioDAL(); var programacionReimplanteBl = new ProgramacionReimplanteBL(); #region AjusteDeCorralesReimplante if (animalesNoReimplantados != null && animalesNoReimplantados.Any()) { animalMovimientoBL.GuardarAnimalMovimientoXML(animalesNoReimplantados); ////Se actualizan las cabezas que tiene el lote loteBL.ActualizaNoCabezasEnLoteXML(lotesDestino, lotesOrigen); //Se elimina la programacin reimplante del lote programacionReimplanteBl.EliminarProgramacionReimplanteXML(corralesProgramados); } if (almacenCierreFolio.Almacen != null && almacenCierreFolio.Almacen.TipoAlmacen.TipoAlmacenID == TipoAlmacenEnum.ReimplanteGanado.GetHashCode()) { programacionReimplanteBl.CerrarProgramacionReimplante(organizacionID, usuarioCreacionID); } #endregion AjusteDeCorralesReimplante #region GuardarCierreDeDia AlmacenCierreDiaInventarioInfo resultadoAlmacenMovimiento = cierreDiaInventarioDAL.GuardarAlmacenMovimiento(almacenCierreFolio); almacenCierreFolio.UsuarioCreacionId = resultadoAlmacenMovimiento.UsuarioCreacionId; almacenCierreFolio.AlmacenMovimientoID = resultadoAlmacenMovimiento.AlmacenMovimientoID; result = cierreDiaInventarioDAL.GuardarProductosCierreDiaInventario(datosGrid, almacenCierreFolio); #endregion GuardarCierreDeDia #region POLIZA var almacenMovimientoInventarioBL = new AlmacenMovimientoBL(); List <ContenedorAlmacenMovimientoCierreDia> contenedorMovimientoCierreDia = almacenMovimientoInventarioBL.ObtenerMovimientosInventario(almacenCierreDiaInventario.Almacen.AlmacenID, almacenCierreDiaInventario.OrganizacionId); if (contenedorMovimientoCierreDia != null && contenedorMovimientoCierreDia.Any()) { contenedorMovimientoCierreDia.ForEach( x => x.FolioAlmacen = almacenCierreDiaInventario.FolioAlmacen); contenedorMovimientoCierreDia = contenedorMovimientoCierreDia.Join(datosGrid, contenedor => contenedor.Producto.ProductoId, grid => grid.ProductoID, (con, grd) => con).ToList(); var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.ConsumoProducto); List <DateTime> foliosFechas = contenedorMovimientoCierreDia.Select( x => Convert.ToDateTime(x.AlmacenMovimiento.FechaMovimiento.ToShortDateString())). Distinct().OrderBy( fecha => fecha).ToList(); List <ContenedorAlmacenMovimientoCierreDia> movimientosPorDia; var cierreDiaFechas = new List <ContenedorAlmacenMovimientoCierreDia>(); for (var indexFecha = 0; indexFecha < foliosFechas.Count; indexFecha++) { movimientosPorDia = contenedorMovimientoCierreDia.Where( x => Convert.ToDateTime(x.AlmacenMovimiento.FechaMovimiento.ToShortDateString()).Equals( foliosFechas[indexFecha])).ToList(); IList <PolizaInfo> polizaConsumo = poliza.GeneraPoliza(movimientosPorDia); if (polizaConsumo != null && polizaConsumo.Any()) { var polizaBL = new PolizaBL(); polizaConsumo.ToList().ForEach(datos => { datos.UsuarioCreacionID = almacenCierreDiaInventario.UsuarioCreacionId; datos.OrganizacionID = almacenCierreDiaInventario.OrganizacionId; datos.ArchivoEnviadoServidor = 1; }); polizaBL.GuardarServicioPI(polizaConsumo, TipoPoliza.ConsumoProducto); cierreDiaFechas.AddRange(movimientosPorDia); } } var almacenMovimientoBL = new AlmacenMovimientoBL(); cierreDiaFechas.ForEach( datos => datos.Almacen.UsuarioModificacionID = almacenCierreDiaInventario.UsuarioCreacionId); almacenMovimientoBL.ActualizarGeneracionPoliza(cierreDiaFechas); } #endregion POLIZA transaction.Complete(); } return(result); } catch (ExcepcionServicio ex) { Logger.Error(ex); throw; } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
internal MemoryStream Guardar(MuertesEnTransitoInfo muerteEnTransito, List <AnimalInfo> animales) { MemoryStream retorno = null; try { Logger.Info(); PolizaAbstract poliza; IList <PolizaInfo> polizaMuerteEnTransito; var entradaGanadoMuerteLista = new List <EntradaGanadoMuerteInfo>(); using (var transaction = new TransactionScope()) { var fecha = DateTime.Now; int organizacionID = muerteEnTransito.OrganizacionID; int usuarioCreacionID = muerteEnTransito.UsuarioCreacionID; int pesoAnimal = 0; int corralID = 0; int loteID = 0; var datosInterface = false; List <InterfaceSalidaAnimalInfo> interfaceSalidaAnimal = null; var entradaGanadoBL = new EntradaGanadoBL(); EntradaGanadoInfo entradaGanado = entradaGanadoBL.ObtenerPorID(muerteEnTransito.EntradaGanadoID); if (entradaGanado != null) { loteID = entradaGanado.LoteID; corralID = entradaGanado.CorralID; if (entradaGanado.FolioOrigen > 0) { var interfaceSalidaBL = new InterfaceSalidaAnimalBL(); interfaceSalidaAnimal = interfaceSalidaBL.ObtenerInterfazSalidaAnimal(entradaGanado.FolioOrigen, entradaGanado.OrganizacionOrigenID); if (interfaceSalidaAnimal == null || interfaceSalidaAnimal.Count <= 0) { fecha = entradaGanado.FechaEntrada; pesoAnimal = Convert.ToInt32((entradaGanado.PesoBruto - entradaGanado.PesoTara) / entradaGanado.CabezasRecibidas); } else { datosInterface = true; } } else { pesoAnimal = Convert.ToInt32((entradaGanado.PesoBruto - entradaGanado.PesoTara) / entradaGanado.CabezasRecibidas); } } // Generamos el Folio FolioBL folioBL = new FolioBL(); var folioMuerte = folioBL.ObtenerFolio(organizacionID, TipoFolio.MuertesEnTransito); foreach (var animal in animales) { if (datosInterface) { pesoAnimal = interfaceSalidaAnimal.Where( are => are.Arete.Equals(animal.Arete)).Select( peso => Convert.ToInt32(peso.PesoCompra)).FirstOrDefault(); } if (datosInterface) { fecha = interfaceSalidaAnimal.Where(arete => arete.Arete.Equals(animal.Arete)).Select( fechaItz => fechaItz.FechaCompra).FirstOrDefault(); } if (fecha == new DateTime(1, 1, 1)) { fecha = DateTime.Now; } animal.OrganizacionIDEntrada = organizacionID; animal.FolioEntrada = muerteEnTransito.FolioEntrada; animal.UsuarioCreacionID = usuarioCreacionID; animal.ClasificacionGanadoID = 1; animal.CalidadGanadoID = 1; animal.TipoGanadoID = 1; animal.FechaCompra = fecha; animal.PesoCompra = pesoAnimal; animal.Activo = false; } //Guardamos los Animales var animalBL = new AnimalBL(); animalBL.GuardarAnimal(animales); //Obtenemos los animales almacenados con su animales = animalBL.ObtenerPorArete(animales); foreach (AnimalInfo animal in animales) { animal.UsuarioCreacionID = usuarioCreacionID; } //Genera los costos por animal animales = animalBL.ProcesoGenerarCostos(animales); foreach (AnimalInfo animal in animales) { var entradaGanadoMuerte = new EntradaGanadoMuerteInfo { EntradaGanado = new EntradaGanadoInfo { EntradaGanadoID = muerteEnTransito.EntradaGanadoID, }, Animal = new AnimalInfo { Arete = animal.Arete }, FolioMuerte = folioMuerte, Activo = EstatusEnum.Activo, UsuarioCreacionID = usuarioCreacionID, Peso = animal.PesoCompra, EntradaGanadMuerteDetalle = new List <EntradaGanadoMuerteDetalleInfo>(), ProveedorFletes = new ProveedorInfo() { CodigoSAP = muerteEnTransito.CodigoProveedor }, Cliente = new ClienteInfo() { CodigoSAP = muerteEnTransito.Cliente.CodigoSAP, Descripcion = muerteEnTransito.Cliente.Descripcion }, OrganizacionDestinoID = entradaGanado.OrganizacionID }; if (animal.ListaCostosAnimal != null) { entradaGanadoMuerte.EntradaGanadMuerteDetalle = animal.ListaCostosAnimal.Select(im => new EntradaGanadoMuerteDetalleInfo { Costo = new CostoInfo { CostoID = im.CostoID }, Importe = im.Importe, EntradaGanadoMuerte = entradaGanadoMuerte }).ToList(); } entradaGanadoMuerteLista.Add(entradaGanadoMuerte); } if (interfaceSalidaAnimal != null && interfaceSalidaAnimal.Count > 0 && animales != null && animales.Count > 0) { var interfaceSalidaBL = new InterfaceSalidaAnimalBL(); foreach (AnimalInfo animal in animales) { InterfaceSalidaAnimalInfo interfaceSalidaAnimalIndividual = interfaceSalidaAnimal.FirstOrDefault(animalInfo => animalInfo.Arete.Equals(animal.Arete)); interfaceSalidaBL.GuardarAnimalID(interfaceSalidaAnimalIndividual, animal.AnimalID); } } //Asignamos el AnimalID en la lista de muertes ante sde guardar. foreach (EntradaGanadoMuerteInfo muerte in entradaGanadoMuerteLista) { muerte.Animal.AnimalID = animales.Where(animal => animal.Arete.Equals(muerte.Animal.Arete)) .Select(animal => animal.AnimalID).FirstOrDefault(); muerte.Peso = animales.Where(animal => animal.Arete.Equals(muerte.Animal.Arete)) .Select(animal => animal.PesoCompra).FirstOrDefault(); } //Guardamos las muertes en transito var muertesEnTransitoDal = new MuertesEnTransitoDAL(); muertesEnTransitoDal.Guardar(entradaGanadoMuerteLista, muerteEnTransito.Cliente); //Creamos los movimientos para el animal if (animales != null && animales.Any()) { fecha = DateTime.Now; var animalMovimientoBL = new AnimalMovimientoBL(); List <AnimalMovimientoInfo> movimientosAnimal = animales.Select(ani => new AnimalMovimientoInfo { AnimalID = ani.AnimalID, Activo = EstatusEnum.Activo, CorralID = corralID, LoteID = loteID, FechaMovimiento = fecha, OrganizacionID = organizacionID, TipoMovimientoID = TipoMovimiento.MuerteTransito.GetHashCode(), OperadorID = 1, TrampaID = 1, Peso = ani.PesoCompra, UsuarioCreacionID = usuarioCreacionID, }).ToList(); animalMovimientoBL.GuardarAnimalMovimientoXML(movimientosAnimal); } //Afectamos el lote correspondiente. var loteBl = new LoteBL(); var loteInfo = loteBl.ObtenerPorID(muerteEnTransito.LoteID); loteInfo.UsuarioModificacionID = muerteEnTransito.UsuarioCreacionID; loteInfo.Cabezas -= muerteEnTransito.MuertesTransito; var filtro = new FiltroActualizarCabezasLote { CabezasProcesadas = muerteEnTransito.MuertesTransito, LoteIDDestino = 0, LoteIDOrigen = loteInfo.LoteID, UsuarioModificacionID = usuarioCreacionID }; var cabezasActualizadas = loteBl.ActualizarCabezasProcesadas(filtro); //Executamos el SP CorteGanado_CierrePartidaPesoOrigenLLegada(Antes-->CorteGanado_PesoCompraDirecta), si se inactiva el lote. if (cabezasActualizadas.CabezasOrigen <= 0) { //muertesEnTransitoDal.CorteGanado_PesoCompraDirecta(muerteEnTransito.OrganizacionID, muerteEnTransito.CorralID, muerteEnTransito.LoteID); var corteGanadoBl = new CorteGanadoBL(); corteGanadoBl.ObtenerPesosOrigenLlegada(muerteEnTransito.OrganizacionID, muerteEnTransito.CorralID, muerteEnTransito.LoteID); } #region Poliza //VentaGanadoBL ventaGanadoBL = new VentaGanadoBL(); //List<EntradaGanadoMuerteInfo> ventasGanado = ventaGanadoBL.ObtenerVentaGanadoPorTicketPoliza(folio, organizacionID); //if (ventasGanado != null && ventasGanado.Any()) if (entradaGanadoMuerteLista != null && entradaGanadoMuerteLista.Any()) { poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.PolizaMuerteTransito); polizaMuerteEnTransito = poliza.GeneraPoliza(entradaGanadoMuerteLista); if (polizaMuerteEnTransito != null && polizaMuerteEnTransito.Any()) { polizaMuerteEnTransito.ToList().ForEach( org => { org.OrganizacionID = organizacionID; org.UsuarioCreacionID = usuarioCreacionID; org.ArchivoEnviadoServidor = 1; }); entradaGanadoMuerteLista.ToList().ForEach(org => { org.EntradaGanado.Lote = entradaGanado.Lote; org.EntradaGanado.CodigoCorral = entradaGanado.CodigoCorral; }); retorno = poliza.ImprimePoliza(entradaGanadoMuerteLista, polizaMuerteEnTransito); var polizaBL = new PolizaBL(); polizaBL.GuardarServicioPI(polizaMuerteEnTransito, TipoPoliza.PolizaMuerteTransito); } } // Genera el xml y lo guarda en la ruta especificada en la configuración var facturaBl = new FacturaBL(); facturaBl.GenerarDatosFacturaMuertesEnTransito(folioMuerte, organizacionID); #endregion Poliza animalBL.EnviarAHistorico(animales); transaction.Complete(); } return(retorno); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }