/// <summary> /// Obtiene un ingrediente con su detalle /// Activo - Solo activos /// Inactivo - Solo inactivos /// Todos - Ambos /// </summary> /// <returns>IngredienteInfo</returns> internal IngredienteInfo ObtenerPorId(IngredienteInfo ingrediente, EstatusEnum estatus) { try { var ingredienteDal = new IngredienteDAL(); ingrediente = ingredienteDal.ObtenerPorId(ingrediente, estatus); if (ingrediente != null) { if (ingrediente.Organizacion.OrganizacionID > 0) { var organizacionBl = new OrganizacionBL(); ingrediente.Organizacion = organizacionBl.ObtenerPorID(ingrediente.Organizacion.OrganizacionID); } if (ingrediente.Formula.FormulaId > 0) { var formulaBl = new FormulaBL(); ingrediente.Formula = formulaBl.ObtenerPorID(ingrediente.Formula.FormulaId); } if (ingrediente.Producto.ProductoId > 0) { var productoBl = new ProductoBL(); ingrediente.Producto = productoBl.ObtenerPorID(ingrediente.Producto); } } } catch (ExcepcionDesconocida) { throw; } catch (Exception ex) { Logger.Error(ex); } return(ingrediente); }
/// <summary> /// Obtiene una salida de producto por id /// </summary> /// <param name="salidaProducto"></param> /// <returns></returns> internal SalidaProductoInfo ObtenerPorSalidaProductoId(SalidaProductoInfo salidaProducto) { try { var salidaProductoDal = new SalidaProductoDAL(); salidaProducto = salidaProductoDal.ObtenerPorSalidaProductoId(salidaProducto); if (salidaProducto != null) { if (salidaProducto.Organizacion.OrganizacionID > 0) { var organizacionBl = new OrganizacionBL(); salidaProducto.Organizacion = organizacionBl.ObtenerPorID(salidaProducto.Organizacion.OrganizacionID); } if (salidaProducto.OrganizacionDestino.OrganizacionID > 0) { var organizacionBl = new OrganizacionBL(); salidaProducto.Organizacion = organizacionBl.ObtenerPorID(salidaProducto.OrganizacionDestino.OrganizacionID); } if (salidaProducto.Almacen.AlmacenID > 0) { var almacenBl = new AlmacenBL(); salidaProducto.Almacen = almacenBl.ObtenerPorID(salidaProducto.Almacen.AlmacenID); } if (salidaProducto.AlmacenInventarioLote.AlmacenInventarioLoteId > 0) { var almacenInventarioLoteBl = new AlmacenInventarioLoteBL(); salidaProducto.AlmacenInventarioLote = almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId( salidaProducto.AlmacenInventarioLote.AlmacenInventarioLoteId); } if (salidaProducto.Cliente.ClienteID > 0) { var clienteBl = new ClienteBL(); salidaProducto.Cliente = clienteBl.ObtenerPorID(salidaProducto.Cliente.ClienteID); } if (salidaProducto.CuentaSAP.CuentaSAPID > 0) { var cuentaSapBl = new CuentaSAPBL(); salidaProducto.CuentaSAP = cuentaSapBl.ObtenerPorID(salidaProducto.CuentaSAP.CuentaSAPID); } if (salidaProducto.TipoMovimiento.TipoMovimientoID > 0) { var tipoMovimientoBl = new TipoMovimientoBL(); salidaProducto.TipoMovimiento = tipoMovimientoBl.ObtenerPorID(salidaProducto.TipoMovimiento.TipoMovimientoID); } } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(salidaProducto); }
/// <summary> /// Genera Incidencias SIAP /// </summary> internal void GenerarIncidenciasSIAP() { try { List <IncidenciasInfo> listaIncidencias = new List <IncidenciasInfo>(); List <IncidenciasInfo> listaNuevasIncidencias = new List <IncidenciasInfo>(); List <XDocument> listaNew = new List <XDocument>(); var usuarioBL = new UsuarioBL(); usuario = usuarioBL.ObtenerPorActiveDirectory(UsuarioProcesosEnum.AlertaSIAP.ToString()); IList <OrganizacionInfo> ListaOrganizacion = new List <OrganizacionInfo>(); var organizacionBL = new OrganizacionBL(); ListaOrganizacion = organizacionBL.ObtenerTodos(); var IncidenciasDal = new IncidenciasDAL(); listaAlertaConfiguracion = IncidenciasDal.ObtenerConfiguracionAlertas(EstatusEnum.Activo); listaIncidencias = ObtenerIncidenciasActivas(); if (listaAlertaConfiguracion != null && listaAlertaConfiguracion.Any()) { foreach (AlertaInfo alertaInfo in listaAlertaConfiguracion) { List <XDocument> listaNueva = new List <XDocument>(); string query = CrearQuery(alertaInfo.ConfiguracionAlerta); XDocument resultadoQuery = IncidenciasDal.EjecutarQuery(query); if (resultadoQuery != null) { if (resultadoQuery.Root != null) { var result = resultadoQuery.Root.Elements().ToList(); listaNueva.AddRange(result.Select(xElement => XDocument.Parse(xElement.ToString()))); } if (listaIncidencias != null && listaIncidencias.Any()) { List <XDocument> listaRegistrada = new List <XDocument>(); var incidencias = listaIncidencias.Where(x => x.Alerta.AlertaID == alertaInfo.AlertaID).ToList(); listaRegistrada.AddRange(incidencias.Select(incidenciasInfo => XDocument.Parse(incidenciasInfo.XmlConsulta.ToString()))); if (incidencias.Any()) { List <XDocument> registradas = new List <XDocument>(); foreach (var xDocument in listaRegistrada) { var xdocumetCopy = new XDocument ( new XElement("Table", from row in xDocument.Root.Elements() select new XElement(row.Name, row.Value))); foreach (var document in listaNueva.Where(document => XNode.DeepEquals(xdocumetCopy, document))) { listaNew.Add(document); registradas.Add(xDocument); } } if (alertaInfo.TerminadoAutomatico == EstatusEnum.Activo) { listaRegistrada = listaRegistrada.Except(registradas).ToList(); if (listaRegistrada != null && listaRegistrada.Any()) { foreach (IncidenciasInfo incidencia in listaRegistrada .Select(xDocument => incidencias.FirstOrDefault(x => XNode.DeepEquals(x.XmlConsulta, xDocument))) .Where(incidencia => incidencia != null).Where(incidencia => incidencia.Estatus.EstatusId != Estatus.CerrarAler.GetHashCode())) { CerrarIncidenciaAutomatico(incidencia); } } } listaNueva = listaNueva.Except(listaNew).ToList(); } } if (listaNueva.Any()) { foreach (var xDocument in listaNueva) { int organizacionID = 0; foreach (var xElement in xDocument.Root.Elements()) { if (xElement.Name.ToString().ToUpper() == "OrganizacionID".ToUpper()) { int xElementOrganizacionID; if (int.TryParse(xElement.Value, out xElementOrganizacionID)) { OrganizacionInfo organizacion = ListaOrganizacion.FirstOrDefault(o => o.OrganizacionID == (int.Parse(xElement.Value)) && o.TipoOrganizacion.TipoOrganizacionID == TipoOrganizacion.Ganadera.GetHashCode()); if (organizacion != null) { organizacionID = organizacion.OrganizacionID; } } break; } if (xElement.Name.ToString().ToUpper() == "Nombre_Del_Centro".ToUpper()) { OrganizacionInfo organizacion = ListaOrganizacion.FirstOrDefault(o => o.Descripcion.ToUpper() == (xElement.Value.ToUpper())); organizacion = ListaOrganizacion.FirstOrDefault( o => organizacion != null && o.Division.ToUpper() == organizacion.Division.ToUpper() && o.TipoOrganizacion.TipoOrganizacionID == TipoOrganizacion.Ganadera.GetHashCode()); if (organizacion != null) { organizacionID = organizacion.OrganizacionID; } break; } } IncidenciasInfo incidenciasInfo = new IncidenciasInfo { Organizacion = new OrganizacionInfo { OrganizacionID = organizacionID }, Alerta = new AlertaInfo { AlertaID = alertaInfo.AlertaID, HorasRespuesta = alertaInfo.HorasRespuesta, ConfiguracionAlerta = new ConfiguracionAlertasInfo { NivelAlerta = new NivelAlertaInfo { NivelAlertaId = alertaInfo.ConfiguracionAlerta.NivelAlerta.NivelAlertaId } } }, XmlConsulta = xDocument, Estatus = new EstatusInfo { EstatusId = Estatus.NuevaAlert.GetHashCode() }, UsuarioCreacionID = usuario.UsuarioID, Activo = EstatusEnum.Activo }; listaNuevasIncidencias.Add(incidenciasInfo); } } } } } using (var transaction = new TransactionScope()) { if (listaNuevasIncidencias.Any()) { GuardarNuevasIncidencias(listaNuevasIncidencias, TipoFolio.AlertaSiap.GetHashCode()); } ProcesarIncicencias(); transaction.Complete(); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Metrodo para obtener un listado de contratos por estado /// </summary> internal List <ContratoInfo> ObtenerPorEstado(EstatusEnum estatus) { List <ContratoInfo> result; try { Logger.Info(); var contratoDAL = new ContratoDAL(); result = contratoDAL.ObtenerPorEstado(estatus); if (result != null) { foreach (var contratoInfo in result) { if (contratoInfo.Organizacion.OrganizacionID > 0) { var organizacionBl = new OrganizacionBL(); contratoInfo.Organizacion = organizacionBl.ObtenerPorID(contratoInfo.Organizacion.OrganizacionID); } if (contratoInfo.Producto.ProductoId > 0) { var productoBl = new ProductoBL(); contratoInfo.Producto = productoBl.ObtenerPorID(contratoInfo.Producto); } if (contratoInfo.Proveedor.ProveedorID > 0) { var proveedorBl = new ProveedorBL(); contratoInfo.Proveedor = proveedorBl.ObtenerPorID(contratoInfo.Proveedor.ProveedorID); } if (contratoInfo.TipoContrato.TipoContratoId > 0) { var tipoContratoBl = new TipoContratoBL(); contratoInfo.TipoContrato = tipoContratoBl.ObtenerPorId(contratoInfo.TipoContrato.TipoContratoId); } if (contratoInfo.TipoFlete.TipoFleteId > 0) { var tipoFleteBl = new TipoFleteBL(); contratoInfo.TipoFlete = tipoFleteBl.ObtenerPorId(contratoInfo.TipoFlete.TipoFleteId); } if (contratoInfo.ContratoId <= 0) { continue; } var contratoDetalleBl = new ContratoDetalleBL(); contratoInfo.ListaContratoDetalleInfo = contratoDetalleBl.ObtenerPorContratoId(contratoInfo); } } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(result); }
/// <summary> /// Obtiene un contrato por id /// </summary> /// <param name="contratoInfo"></param> /// <returns>ContratoInfo</returns> internal ContratoInfo ObtenerPorId(ContratoInfo contratoInfo) { ContratoInfo contrato; try { Logger.Info(); var contratoDAL = new ContratoDAL(); contrato = contratoDAL.ObtenerPorId(contratoInfo); if (contrato != null) { if (contrato.Organizacion.OrganizacionID > 0) { var organizacionBl = new OrganizacionBL(); contrato.Organizacion = organizacionBl.ObtenerPorID(contrato.Organizacion.OrganizacionID); } if (contrato.Producto.ProductoId > 0) { var productoBl = new ProductoBL(); contrato.Producto = productoBl.ObtenerPorID(contrato.Producto); } if (contrato.Proveedor.ProveedorID > 0) { var proveedorBl = new ProveedorBL(); contrato.Proveedor = proveedorBl.ObtenerPorID(contrato.Proveedor.ProveedorID); } if (contrato.TipoContrato.TipoContratoId > 0) { var tipoContratoBl = new TipoContratoBL(); contrato.TipoContrato = tipoContratoBl.ObtenerPorId(contrato.TipoContrato.TipoContratoId); contrato.tipocontratodescripcion = contrato.TipoContrato.Descripcion.ToString(); } if (contrato.TipoFlete != null && contrato.TipoFlete.TipoFleteId > 0) { var tipoFleteBl = new TipoFleteBL(); contrato.TipoFlete = tipoFleteBl.ObtenerPorId(contrato.TipoFlete.TipoFleteId); } if (contrato.TipoCambio != null && contrato.TipoCambio.TipoCambioId > 0) { var tipoCambioBl = new TipoCambioBL(); contrato.TipoCambio = tipoCambioBl.ObtenerPorId(contrato.TipoCambio.TipoCambioId); } if (contrato.ContratoId > 0) { var contratoDetalleBl = new ContratoDetalleBL(); contrato.ListaContratoDetalleInfo = contratoDetalleBl.ObtenerPorContratoId(contrato); } //Obtener precio y cantidad por tonelada contrato.CantidadToneladas = (int)(contrato.Cantidad / 1000); if (contrato.TipoCambio != null) { if (contrato.TipoCambio.Descripcion == Properties.ResourceServices.ContratoBL_DescripcionMonedaDolarMayuscula) { contrato.PrecioToneladas = (contrato.Precio * 1000) / contrato.TipoCambio.Cambio; } else { contrato.PrecioToneladas = contrato.Precio * 1000; } } if (contrato.Cuenta != null) { if (contrato.Cuenta.CuentaSAPID > 0) { CuentaSAPBL cuentaSapBl = new CuentaSAPBL(); contrato.Cuenta.Activo = EstatusEnum.Activo; contrato.Cuenta = cuentaSapBl.ObtenerPorFiltroSinTipo(contrato.Cuenta); } } // } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(contrato); }
/// <summary> /// Metodo para generar la proyeccion de reimplante /// </summary> internal void GenerarProyeccionReimplante() { //ResultadoPolizaModel resultadoPolizaModel = null; try { Logger.Info(); var organizacionBL = new OrganizacionBL(); var usuarioBL = new UsuarioBL(); var loteBL = new LoteBL(); var corralBl = new CorralBL(); var loteProyeccionBL = new LoteProyeccionBL(); var loteReimplanteBL = new LoteReimplanteBL(); //Se obtiene el usuario del proceso de alimentacion UsuarioInfo usuario = usuarioBL.ObtenerPorActiveDirectory(UsuarioProcesosEnum.ProyeccionReimplante.ToString()); //Si se encontro el usuario if (usuario != null) { //Consulta todas las organizaciones que esten activas List <OrganizacionInfo> listaOrganizaciones = organizacionBL.ObtenerTodos(EstatusEnum.Activo).ToList(); if (listaOrganizaciones != null && listaOrganizaciones.Any()) { //Se obtienen las organizaciones que son de tipo ganadera List <OrganizacionInfo> listaOrganizacionesFiltrada = listaOrganizaciones.Where( organizacion => organizacion.TipoOrganizacion.TipoOrganizacionID == (int)TipoOrganizacion.Ganadera) .ToList(); if (listaOrganizacionesFiltrada.Count > 0) { foreach (OrganizacionInfo organizacion in listaOrganizacionesFiltrada) { try { //using (var scope = new TransactionScope()) //{ //Obtener los corrales-Lotes que fueron reimplantados List <LoteCorralReimplanteInfo> listaCorrales = ObtenerCorralesReimplantados(organizacion); if (listaCorrales != null && listaCorrales.Any()) { foreach (var loteCorral in listaCorrales) { //Obtener el tipo de ganado del lote TipoGanadoInfo tipoGanadoInfo = loteBL.ObtenerTipoGanadoLoteID(loteCorral.Lote); //Info del lote loteCorral.Lote = loteBL.ObtenerPorID(loteCorral.Lote.LoteID); //Obtener las proyecciones de los corrales origenes IList <LoteProyeccionInfo> listaProyeccionOrigen = loteProyeccionBL.ObtenerProyeccionDeLotesOrigen(loteCorral); if (listaProyeccionOrigen != null && listaProyeccionOrigen.Any()) { var pesoReimplantePromedio = loteCorral.PesoReimplante / loteCorral.TotalCabezas; var pesoOrigenPromedio = loteCorral.PesoOrigen / loteCorral.TotalCabezas; //ObtenerDias engorda del corral var diasEngordaCorral = corralBl.ObtenerDiasEngordaPorLote(loteCorral.Lote); //Calcular la Ganacia Diaria = (PesoReimplante-PesoOrigen)/DiasEngordaDelCorral decimal gananciaDiaria = ((pesoReimplantePromedio - pesoOrigenPromedio) / (decimal)diasEngordaCorral); gananciaDiaria = Math.Round(gananciaDiaria, 2); //Calculo diasEngorda: (PesoSalida-PesoPromedioReimplante)/GananciaDiaria var diasEngorda = (int)((tipoGanadoInfo.PesoSalida - pesoReimplantePromedio) / gananciaDiaria); var loteProyeccion = loteProyeccionBL.ObtenerPorLote(loteCorral.Lote); LoteReimplanteInfo loteReimplante = null; var numeroReimplante = listaProyeccionOrigen.Max(p => p.NumeroReimplante); if (loteProyeccion == null) { // Se crea el registro en lote proyeccion loteProyeccion = new LoteProyeccionInfo { LoteID = loteCorral.Lote.LoteID, //OK OrganizacionID = organizacion.OrganizacionID, //OK Frame = 0, //OK GananciaDiaria = gananciaDiaria, //OK ConsumoBaseHumeda = listaProyeccionOrigen.Select(p => p.ConsumoBaseHumeda).Sum() / listaProyeccionOrigen.Count(), // Promedio De los Corrales Origenes Conversion = listaProyeccionOrigen.Select(p => p.Conversion).Sum() / listaProyeccionOrigen.Count(), // Promedio De los Corrales Origenes PesoMaduro = listaProyeccionOrigen.Select(p => p.PesoMaduro).Sum() / listaProyeccionOrigen.Count(), // Promedio De los Corrales Origenes PesoSacrificio = listaProyeccionOrigen.Select(p => p.PesoSacrificio).Sum() / listaProyeccionOrigen.Count(), // Promedio De los Corrales Origenes DiasEngorda = diasEngorda, // OK FechaEntradaZilmax = ObtenerFechaZilmax(loteCorral.Lote, tipoGanadoInfo, diasEngorda), //OK UsuarioCreacionID = usuario.UsuarioID //OK }; loteProyeccion.LoteProyeccionID = loteProyeccionBL.Guardar(loteProyeccion); // Fecha Sacrificio = fechaInicioLote + loteProyeccion.DiasEngorda DateTime fechaProyectada = loteCorral.Lote.FechaInicio.AddDays(loteProyeccion.DiasEngorda); DateTime fechaHoy = DateTime.Now; TimeSpan ts = fechaProyectada - fechaHoy; // GananciaDiaria*DiasQueFlatanParaReimplante) + PesoReimplante int pesoProyectado = (int) ((loteProyeccion.GananciaDiaria * ts.Days) + pesoReimplantePromedio); //Se almacena el lote reimplante nuevo GuardarNuevoReimplante(numeroReimplante, loteProyeccion, fechaProyectada, usuario, loteCorral, pesoProyectado, pesoOrigenPromedio); } else { // Si ya existe el LoteProyeccion Obtener los lotesReimplantes List <LoteReimplanteInfo> loteReimplanteInfo = loteReimplanteBL.ObtenerListaPorLote(loteCorral.Lote); DateTime fechaProyectada = loteCorral.Lote.FechaInicio.AddDays(loteProyeccion.DiasEngorda); DateTime fechaHoy = DateTime.Now; TimeSpan ts = fechaProyectada - fechaHoy; // GananciaDiaria*DiasQueFlatanParaReimplante) + PesoReimplante int pesoProyectado = (int) ((loteProyeccion.GananciaDiaria * ts.Days) + pesoReimplantePromedio); if (loteReimplanteInfo != null) { var numeroReimplanteMaximo = loteReimplanteInfo.Max(p => p.NumeroReimplante); if (numeroReimplante == 2 && numeroReimplanteMaximo != 3) { // El peso Origen sea menor a 200 generar el lote reimplante // y que los dias engorda sean mayores a 90 dias if (pesoOrigenPromedio <= 200 && loteProyeccion.DiasEngorda >= 90) { // Se crea el registro en lote reimplante loteReimplante = new LoteReimplanteInfo { LoteProyeccionID = loteProyeccion.LoteProyeccionID, NumeroReimplante = 3, FechaProyectada = fechaProyectada, PesoProyectado = pesoProyectado, PesoReal = 0, FechaReal = new DateTime(1900, 01, 01), UsuarioCreacionID = usuario.UsuarioID }; loteReimplanteBL.Guardar(loteReimplante); } } } else { //Se almacena el lote reimplante nuevo GuardarNuevoReimplante(numeroReimplante, loteProyeccion, fechaProyectada, usuario, loteCorral, pesoProyectado, pesoOrigenPromedio); } } } } } // scope.Complete(); //} } catch (Exception ex) { var bitacoraBL = new BitacoraIncidenciasBL(); var bitacora = new BitacoraErroresInfo { AccionesSiapID = AccionesSIAPEnum.SerProReim, Mensaje = ex.Message, UsuarioCreacionID = usuario.UsuarioID }; bitacoraBL.GuardarError(bitacora); } } } } } } catch (ExcepcionServicio ex) { Logger.Error(ex); throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }