//Metodo que guarda el movimiento private void GuardarMovimientoTraspasoGanadoCorrales(List <AnimalInfo> aretesTotal, CorralInfo corralInfo, UsuarioInfo usuarioInfo) { //var animalInfo = new AnimalInfo(); int loteOrigenID = 0; int loteDestinoID = 0; var loteBl = new LoteBL(); var animalBL = new AnimalBL(); var animalMovimientoBL = new AnimalMovimientoBL(); var tipoProcesoBl = new TipoProcesoBL(); var fechaBL = new FechaBL(); var loteProyeccionBL = new LoteProyeccionBL(); List <AnimalMovimientoInfo> ultimosMovimientos = animalBL.ObtenerUltimoMovimientoAnimalXML(aretesTotal, usuarioInfo. Organizacion. OrganizacionID); if (ultimosMovimientos == null) { ultimosMovimientos = new List <AnimalMovimientoInfo>(); } var resultadoLoteBl = loteBl.ObtenerLotesActivos(usuarioInfo.Organizacion.OrganizacionID, Convert.ToInt32(corralInfo.CorralID)); var tipoProcesoResult = tipoProcesoBl.ObtenerPorOrganizacion(usuarioInfo.Organizacion.OrganizacionID); var fechaServidor = fechaBL.ObtenerFechaActual(); IList <LoteInfo> lotesCorrales = loteBl.ObtenerPorOrganizacionEstatus( usuarioInfo.Organizacion.OrganizacionID, EstatusEnum.Activo); if (lotesCorrales == null) { lotesCorrales = new List <LoteInfo>(); } IList <LoteProyeccionInfo> lotesProyeccion = loteProyeccionBL.ObtenerPorLoteXML(usuarioInfo.Organizacion.OrganizacionID, lotesCorrales); var resultadoLote = -1; using (var transaction = new TransactionScope()) { if (resultadoLoteBl == null) { var loteCrear = new LoteBL(); var loteInfoLote = new LoteInfo { Activo = EstatusEnum.Activo, Cabezas = Convert.ToInt32(0), CabezasInicio = Convert.ToInt32(0), CorralID = corralInfo.CorralID, DisponibilidadManual = false, OrganizacionID = usuarioInfo.Organizacion.OrganizacionID, TipoCorralID = corralInfo.TipoCorral.TipoCorralID, TipoProcesoID = tipoProcesoResult, UsuarioCreacionID = usuarioInfo.UsuarioID }; resultadoLote = loteCrear.GuardaLote(loteInfoLote); if ((corralInfo.TipoCorral != null && corralInfo.TipoCorral.TipoCorralID != TipoCorral.Enfermeria.GetHashCode()) || (corralInfo.TipoCorralId > 0 && corralInfo.TipoCorralId != TipoCorral.Enfermeria.GetHashCode())) { loteBl.ActualizaFechaCierre(resultadoLote, usuarioInfo.UsuarioID); } } foreach (var animalInfo in aretesTotal) { var animalMovimientoInfo = new AnimalMovimientoInfo(); animalInfo.OrganizacionIDEntrada = usuarioInfo.Organizacion.OrganizacionID; //Obtener ultimo movimiento del animal var ultimoMovimientoInfo = ultimosMovimientos.FirstOrDefault(ani => ani.AnimalID == animalInfo.AnimalID); if (ultimoMovimientoInfo != null) { animalMovimientoInfo.OrganizacionID = usuarioInfo.Organizacion.OrganizacionID; animalMovimientoInfo.AnimalID = animalInfo.AnimalID; animalMovimientoInfo.CorralID = corralInfo.CorralID; animalMovimientoInfo.LoteID = resultadoLoteBl != null ? resultadoLoteBl.LoteID : resultadoLote; DateTime diaHoy = fechaServidor.FechaActual.Date; animalMovimientoInfo.FechaMovimiento = diaHoy.Date; animalMovimientoInfo.Peso = ultimoMovimientoInfo.Peso; animalMovimientoInfo.Temperatura = ultimoMovimientoInfo.Temperatura; animalMovimientoInfo.TipoMovimientoID = (int)TipoMovimiento.TraspasoDeGanado; animalMovimientoInfo.TrampaID = ultimoMovimientoInfo.TrampaID; animalMovimientoInfo.OperadorID = ultimoMovimientoInfo.OperadorID; animalMovimientoInfo.Observaciones = String.Empty; animalMovimientoInfo.Activo = EstatusEnum.Activo; animalMovimientoInfo.UsuarioCreacionID = usuarioInfo.UsuarioID; //Se manda a guardar el registro en base de datos animalMovimientoInfo = animalMovimientoBL.GuardarAnimalMovimiento(animalMovimientoInfo); if (animalMovimientoInfo == null || animalMovimientoInfo.AnimalMovimientoID <= 0) { return; } var resultadoLoteOrigen = loteBl.ObtenerPorID(ultimoMovimientoInfo.LoteID); var resultadoLoteDestino = loteBl.ObtenerPorID(animalMovimientoInfo.LoteID); if (resultadoLoteDestino != null) { resultadoLoteDestino.UsuarioModificacionID = usuarioInfo.UsuarioID; } //Incrementar y Decrementar cabezas if (resultadoLoteOrigen != null && resultadoLoteDestino != null) { loteOrigenID = resultadoLoteOrigen.LoteID; loteDestinoID = resultadoLoteDestino.LoteID; resultadoLoteDestino.Cabezas = resultadoLoteDestino.Cabezas + 1; resultadoLoteDestino.CabezasInicio = resultadoLoteDestino.CabezasInicio + 1; resultadoLoteOrigen.Cabezas = resultadoLoteOrigen.Cabezas - 1; //Verificar si el Lote tiene cabezas en 0 para inactivarlo resultadoLoteOrigen = loteBl.ObtenerPorID(ultimoMovimientoInfo.LoteID); if (resultadoLoteOrigen.Cabezas != 0) { continue; } } } } var loteOrigenInfo = loteBl.ObtenerPorID(loteOrigenID); var loteDestinoInfo = loteBl.ObtenerPorID(loteDestinoID); if (lotesProyeccion != null && lotesProyeccion.Any()) { LoteProyeccionInfo proyeccionOrigen = lotesProyeccion.FirstOrDefault(lote => lote.LoteID == loteOrigenInfo.LoteID); LoteProyeccionInfo proyeccionDestino = lotesProyeccion.FirstOrDefault(lote => lote.LoteID == loteDestinoInfo.LoteID); if (proyeccionOrigen != null && proyeccionDestino == null) { proyeccionOrigen.LoteProyeccionID = 0; int diasEngordaOrigen = proyeccionOrigen.DiasEngorda; DateTime fechaInicioLote = loteOrigenInfo.FechaInicio; int diasEngordaReales = new TimeSpan(DateTime.Now.Ticks - fechaInicioLote.Ticks).Days; if ((diasEngordaOrigen - diasEngordaReales) <= 0) { proyeccionOrigen.DiasEngorda = 0; } else { proyeccionOrigen.DiasEngorda = diasEngordaOrigen - diasEngordaReales; } proyeccionOrigen.LoteID = loteDestinoInfo.LoteID; proyeccionOrigen.UsuarioCreacionID = usuarioInfo.UsuarioID; loteProyeccionBL.Guardar(proyeccionOrigen); var loteDAL = new LoteDAL(); var filtroDisponibilidad = new FiltroDisponilidadInfo { UsuarioId = usuarioInfo.UsuarioID, ListaLoteDisponibilidad = new List <DisponibilidadLoteInfo> { new DisponibilidadLoteInfo { LoteId = loteDestinoInfo.LoteID, FechaDisponibilidad = loteOrigenInfo.FechaDisponibilidad, DisponibilidadManual = loteOrigenInfo.DisponibilidadManual } } }; loteDAL.ActualizarLoteDisponibilidad(filtroDisponibilidad); } } List <AnimalInfo> animalesOrigen = animalBL.ObtenerAnimalesPorLote(usuarioInfo.Organizacion.OrganizacionID, loteOrigenID); if (animalesOrigen != null && animalesOrigen.Any()) { loteOrigenInfo.Cabezas = animalesOrigen.Count; } List <AnimalInfo> animalesDestino = animalBL.ObtenerAnimalesPorLote(usuarioInfo.Organizacion.OrganizacionID, loteDestinoID); if (animalesDestino != null && animalesDestino.Any()) { loteDestinoInfo.Cabezas = animalesDestino.Count; } //Se actualizan las cabezas que tiene el lote var filtro = new FiltroActualizarCabezasLote { CabezasProcesadas = aretesTotal.Count, LoteIDDestino = loteDestinoInfo.LoteID, LoteIDOrigen = loteOrigenInfo.LoteID, UsuarioModificacionID = usuarioInfo.UsuarioID }; loteBl.ActualizarCabezasProcesadas(filtro); transaction.Complete(); } }
/// <summary> /// guardar corte por transferencia /// </summary> /// <param name="guardarAnimalCorte"></param> /// <param name="listaTratamientos"></param> /// <returns></returns> internal CorteTransferenciaGanadoGuardarInfo GuardarCorteTransferencia(CorteTransferenciaGanadoGuardarInfo guardarAnimalCorte, IList <TratamientoInfo> listaTratamientos) { try { using (var transaction = new TransactionScope()) { Logger.Info(); //var corteTransferenciaGanado = new CorteTransferenciaGanadoDAL(); var animalBl = new AnimalBL(); var animalMovimientoBL = new AnimalMovimientoBL(); var corralBl = new CorralBL(); var interfaceSalidaAnimalBl = new InterfaceSalidaAnimalBL(); var interfaceSalidoAnimalInfo = interfaceSalidaAnimalBl.ObtenerNumeroAreteIndividual( guardarAnimalCorte.AnimalCorteTransferenciaInfo.Arete, guardarAnimalCorte.OrganizacionId); if (guardarAnimalCorte.AnimalActualInfo != null) { guardarAnimalCorte.AnimalCorteTransferenciaInfo.FechaCompra = guardarAnimalCorte.AnimalActualInfo.FechaCompra; } else { if (interfaceSalidoAnimalInfo != null) { guardarAnimalCorte.AnimalCorteTransferenciaInfo.FechaCompra = interfaceSalidoAnimalInfo.FechaCompra; } } var resultoAnimalInfo = animalBl.GuardarAnimal(guardarAnimalCorte.AnimalCorteTransferenciaInfo); guardarAnimalCorte.AnimalCorteTransferenciaInfo = resultoAnimalInfo; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.AnimalID = guardarAnimalCorte.AnimalCorteTransferenciaInfo.AnimalID; var loteBl = new LoteBL(); var resultadoLote = -1; var resultadoLoteOrigen = loteBl.ObtenerPorID(guardarAnimalCorte.AnimalMovimientoOrigenInfo.LoteID); var resultadoLoteBL = loteBl.ObtenerLotesActivos( guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.OrganizacionID, Convert.ToInt32(guardarAnimalCorte.CorralInfoGen.CorralID)); if (resultadoLoteBL == null) { //var corralInfo = new CorralInfo //{ // Codigo = guardarAnimalCorte.TxtCorralDestino, // TipoCorral = new TipoCorralInfo { TipoCorralID = (int)TipoCorral.Improductivos }, // Organizacion = new OrganizacionInfo { OrganizacionID = guardarAnimalCorte.OrganizacionId } //}; CorralInfo resultadoCorralPl = corralBl.ObtenerPorId(guardarAnimalCorte.CorralDestinoID); if (resultadoCorralPl != null) { var loteCrear = new LoteBL(); var tipoProcesoBl = new TipoProcesoBL(); var tipoProcesoResult = tipoProcesoBl.ObtenerPorOrganizacion(guardarAnimalCorte.OrganizacionId); var loteInfoLote = new LoteInfo { Activo = EstatusEnum.Activo, Cabezas = Convert.ToInt32(0), CabezasInicio = Convert.ToInt32(0), CorralID = resultadoCorralPl.CorralID, DisponibilidadManual = false, OrganizacionID = guardarAnimalCorte.AnimalMovimientoOrigenInfo.OrganizacionID, TipoCorralID = resultadoCorralPl.TipoCorral.TipoCorralID, TipoProcesoID = tipoProcesoResult, UsuarioCreacionID = resultadoCorralPl.UsuarioCreacionID, }; resultadoLote = loteCrear.GuardaLote(loteInfoLote); guardarAnimalCorte.LoteDestinoInfo = loteCrear.ObtenerPorID(resultadoLote); } } else { guardarAnimalCorte.LoteDestinoInfo = resultadoLoteBL; } //Se manda a guardar movimiento de salida de enfermeria //var animalSalidaInfo = new AnimalSalidaInfo(); //animalSalidaInfo = animalBl.ObtenerAnimalSalidaAnimalID(guardarAnimalCorte.AnimalCorteTransferenciaInfo.AnimalID); //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.CorralID = animalSalidaInfo.CorralId; //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.LoteID = animalSalidaInfo.LoteId; //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.TipoMovimientoID = (int)TipoMovimiento.SalidaEnfermeria; //guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo = animalMovimientoBL.GuardarAnimalMovimiento(guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo); //Se manda a guardar movimiento de corte por transferencia guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.CorralID = guardarAnimalCorte.CorralInfoGen.CorralID; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.LoteID = resultadoLoteBL != null ? resultadoLoteBL.LoteID : resultadoLote; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.TipoMovimientoID = (int)TipoMovimiento.CortePorTransferencia; guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo = animalMovimientoBL.GuardarAnimalMovimiento( guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo); if (guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo != null && guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo.AnimalMovimientoID > 0) { if (resultadoLoteOrigen != null && guardarAnimalCorte.LoteDestinoInfo != null) { guardarAnimalCorte.CorralGlobal = guardarAnimalCorte.AnimalMovimientoOrigenInfo.CorralID; guardarAnimalCorte.LoteDestinoInfo.Cabezas = guardarAnimalCorte.LoteDestinoInfo.Cabezas + 1; guardarAnimalCorte.LoteDestinoInfo.CabezasInicio = guardarAnimalCorte.LoteDestinoInfo.CabezasInicio + 1; resultadoLoteOrigen.Cabezas = resultadoLoteOrigen.Cabezas - 1; var filtroActualizaCabezas = new FiltroActualizarCabezasLote { LoteIDOrigen = resultadoLoteOrigen.LoteID, LoteIDDestino = guardarAnimalCorte.LoteDestinoInfo.LoteID, CabezasProcesadas = 1, UsuarioModificacionID = guardarAnimalCorte.UsuarioCreacionID }; var cabezas = loteBl.ActualizarCabezasProcesadas(filtroActualizaCabezas); //TODO nuevo metodo //loteBl.ActualizaNoCabezasEnLote(guardarAnimalCorte.LoteDestinoInfo, resultadoLoteOrigen); loteBl.ActualizarSalidaEnfermeria(guardarAnimalCorte.AnimalMovimientoOrigenInfo); loteBl.ActualizarFechaSalidaEnLote(resultadoLoteOrigen); //if (resultadoLoteOrigen.Cabezas == 0) //{ // resultadoLoteOrigen.Activo = (int)EstatusEnum.Inactivo; // loteBl.ActualizaActivoEnLote(resultadoLoteOrigen); //} // ObtenerTotalCabezas(loteCorralOrigen); } if (ObtenerTotalCabezas(guardarAnimalCorte.AnimalMovimientoOrigenInfo)) { corralBl.TraspasarAnimalSalidaEnfermeria( guardarAnimalCorte.AnimalSalidaGuardarInfo.CorraletaId, guardarAnimalCorte.AnimalMovimientoOrigenInfo.LoteID); //loteDAL.EliminarSalidaEnfermeria(guardarAnimalCorte.AnimalMovimientoOrigenInfo); } } if (guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo != null) { var almacenMovimientoInfo = new AlmacenMovimientoInfo { AlmacenID = guardarAnimalCorte.AlmacenID, AnimalMovimientoID = guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo .AnimalMovimientoID, TipoMovimientoID = (int)TipoMovimiento.SalidaPorConsumo, Status = (int)EstatusInventario.Aplicado, Observaciones = "", UsuarioCreacionID = guardarAnimalCorte.UsuarioCreacionID, AnimalID = guardarAnimalCorte.AnimalMovimientoCorteTransferenciaInfo .AnimalID, //Verificar CostoID = (int)Costo.MedicamentoDeImplante, }; var almacenBL = new AlmacenBL(); almacenBL.GuardarDescontarTratamientos( listaTratamientos.Where(item => item.Seleccionado && item.Habilitado).ToList(), almacenMovimientoInfo); } var loteProyeccionBL = new LoteProyeccionBL(); LoteProyeccionInfo proyeccionDestino = loteProyeccionBL.ObtenerPorLote(guardarAnimalCorte.LoteDestinoInfo); //guardarAnimalCorte.LoteDestinoInfo.LoteID if (proyeccionDestino == null) { LoteProyeccionInfo proyeccionOrigen = loteProyeccionBL.ObtenerPorLote(resultadoLoteOrigen); if (proyeccionOrigen != null && resultadoLoteOrigen != null && guardarAnimalCorte.LoteDestinoInfo != null) { proyeccionOrigen.LoteProyeccionID = 0; int diasEngordaOrigen = proyeccionOrigen.DiasEngorda; DateTime fechaInicioLote = resultadoLoteOrigen.FechaInicio; int diasEngordaReales = new TimeSpan(DateTime.Now.Ticks - fechaInicioLote.Ticks).Days; if ((diasEngordaOrigen - diasEngordaReales) <= 0) { proyeccionOrigen.DiasEngorda = 0; } else { proyeccionOrigen.DiasEngorda = diasEngordaOrigen - diasEngordaReales; } proyeccionOrigen.LoteID = guardarAnimalCorte.LoteDestinoInfo.LoteID; proyeccionOrigen.UsuarioCreacionID = guardarAnimalCorte.UsuarioCreacionID; loteProyeccionBL.Guardar(proyeccionOrigen); var loteDAL = new LoteDAL(); var filtroDisponibilidad = new FiltroDisponilidadInfo { UsuarioId = guardarAnimalCorte.UsuarioCreacionID, ListaLoteDisponibilidad = new List <DisponibilidadLoteInfo> { new DisponibilidadLoteInfo { LoteId = guardarAnimalCorte.LoteDestinoInfo.LoteID, FechaDisponibilidad = resultadoLoteOrigen.FechaDisponibilidad, DisponibilidadManual = resultadoLoteOrigen.DisponibilidadManual } } }; loteDAL.ActualizarLoteDisponibilidad(filtroDisponibilidad); } } transaction.Complete(); return(guardarAnimalCorte); } } catch (ExcepcionGenerica) { return(null); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <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); } }