/// <summary> /// Metodo que guarda ServicioAlimento /// </summary> /// <param name="info"></param> internal void Guardar(IList <ServicioAlimentoInfo> info) { try { Logger.Info(); var repartoBL = new RepartoBL(); var listaRepartosGuardar = new List <CambiosReporteInfo>(); var tipoServicio = TipoServicioEnum.Matutino; int organizacionID = info.Select(rep => rep.OrganizacionID).First(); var organizacionInfo = new OrganizacionInfo { OrganizacionID = organizacionID }; DateTime fechaHoy = DateTime.Now.Date; List <RepartoDetalleInfo> repartosDelDia = repartoBL.ObtenerRepartoDetallePorOrganizacionID(organizacionInfo, fechaHoy); if (repartosDelDia != null) { int repartosMatutino = repartosDelDia.Count( rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode()); int repartosServidosMatutino = repartosDelDia.Count( rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode() && rep.Servido); int porcentajeServido = (repartosServidosMatutino / repartosMatutino) * 100; if (porcentajeServido > 30) { tipoServicio = TipoServicioEnum.Vespertino; } } List <CorralInfo> listaCorrales = (from rep in info select new CorralInfo { CorralID = rep.CorralID }).ToList(); List <RepartoInfo> listaRepartosHoy = repartoBL.ObtenerRepartosPorFechaCorrales(fechaHoy, organizacionID, listaCorrales); List <RepartoInfo> listaRepartosManiana = repartoBL.ObtenerRepartosPorFechaCorrales(fechaHoy.AddDays(1), organizacionID, listaCorrales); if (listaRepartosHoy == null) { listaRepartosHoy = new List <RepartoInfo>(); } if (listaRepartosManiana == null) { listaRepartosManiana = new List <RepartoInfo>(); } foreach (var servicio in info) { var repartoActual = new CambiosReporteInfo(); RepartoDetalleInfo servicioMatutino; RepartoDetalleInfo servicioVespertino; RepartoInfo repartoHoy = listaRepartosHoy.FirstOrDefault(rep => rep.Corral.CorralID == servicio.CorralID); RepartoInfo repartoManiana = listaRepartosManiana.FirstOrDefault(rep => rep.Corral.CorralID == servicio.CorralID); repartoActual.RepartoID = 0; repartoActual.CantidadProgramada = servicio.KilosProgramados; repartoActual.Observaciones = servicio.Comentarios; repartoActual.EstadoComederoID = EstadoComederoEnum.Normal.GetHashCode(); if (repartoHoy != null) { repartoActual.FechaReparto = DateTime.Now.AddDays(1); } else { repartoActual.FechaReparto = DateTime.Now; } repartoActual.FormulaIDProgramada = servicio.FormulaID; repartoActual.OrganizacionID = servicio.OrganizacionID; repartoActual.UsuarioModificacionID = servicio.UsuarioCreacionID; repartoActual.TipoServicioID = tipoServicio.GetHashCode(); repartoActual.CorralInfo = new CorralInfo { CorralID = servicio.CorralID, Codigo = servicio.CodigoCorral }; if (repartoHoy != null) { repartoActual.RepartoID = repartoHoy.RepartoID; servicioMatutino = repartoHoy.DetalleReparto.FirstOrDefault( rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode()); servicioVespertino = repartoHoy.DetalleReparto.FirstOrDefault( rep => rep.TipoServicioID == TipoServicioEnum.Vespertino.GetHashCode()); if (servicioMatutino != null) { if (!servicioMatutino.Servido) { repartoActual.RepartoDetalleIdManiana = servicioMatutino.RepartoDetalleID; listaRepartosGuardar.Add(repartoActual); continue; } } if (servicioVespertino != null) { if (!servicioVespertino.Servido) { repartoActual.RepartoDetalleIdTarde = servicioVespertino.RepartoDetalleID; listaRepartosGuardar.Add(repartoActual); continue; } } } if (repartoManiana != null) { repartoActual.RepartoID = repartoManiana.RepartoID; servicioMatutino = repartoManiana.DetalleReparto.FirstOrDefault( rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode()); servicioVespertino = repartoManiana.DetalleReparto.FirstOrDefault( rep => rep.TipoServicioID == TipoServicioEnum.Vespertino.GetHashCode()); if (servicioMatutino != null) { if (!servicioMatutino.Servido) { repartoActual.RepartoDetalleIdManiana = servicioMatutino.RepartoDetalleID; listaRepartosGuardar.Add(repartoActual); continue; } } if (servicioVespertino != null) { if (!servicioVespertino.Servido) { repartoActual.RepartoDetalleIdTarde = servicioVespertino.RepartoDetalleID; listaRepartosGuardar.Add(repartoActual); continue; } } } listaRepartosGuardar.Add(repartoActual); } var servicioAlimentoDAL = new ServicioAlimentoDAL(); using (var transaccion = new TransactionScope()) { repartoBL.GuardarRepartosServicioCorrales(listaRepartosGuardar); servicioAlimentoDAL.Guardar(info); transaccion.Complete(); } } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
public static int GuardarReparto(List <CambiosReporteInfo> cambiosDetalle, string fechaReparto) { int valorRetorno = 0; try { var repartoPl = new RepartoPL(); var corralPL = new CorralPL(); var lotePL = new LotePL(); var seguridad = (SeguridadInfo)HttpContext.Current.Session["Seguridad"]; //informacion del la organzacion y usuario if (seguridad != null) { int organizacionId = seguridad.Usuario.Organizacion.OrganizacionID; int usuario = seguridad.Usuario.UsuarioID; var fecha = DateTime.Parse(fechaReparto.ToString(CultureInfo.InvariantCulture)); List <string> codigosCorral = cambiosDetalle.Select(det => det.CorralInfo.Codigo).Distinct().ToList(); List <CorralInfo> corralesOrganizacion = corralPL.ObtenerCorralesPorCodigosCorral(codigosCorral, organizacionId); List <CambiosReporteInfo> repartosInactivar = new List <CambiosReporteInfo>(); int cantidadManiana = 0; bool bandera = false; foreach (CambiosReporteInfo t in cambiosDetalle) { t.OrganizacionID = organizacionId; t.UsuarioModificacionID = usuario; t.FechaReparto = fecha; #region Eliminar Duplicados if (t.RepartoID == 0) { CorralInfo corralCompleto = corralesOrganizacion.FirstOrDefault( cor => cor.Codigo.Trim().Equals(t.CorralInfo.Codigo.Trim(), StringComparison.InvariantCultureIgnoreCase)); if (corralCompleto == null) { continue; } var corral = new CorralInfo { Organizacion = new OrganizacionInfo { OrganizacionID = organizacionId }, CorralID = corralCompleto.CorralID }; RepartoInfo repartoCorral = repartoPl.ObtnerPorFechaCorral(corral, fecha); if (repartoCorral != null) { RepartoDetalleInfo repartoDetalleMatutino = repartoCorral.DetalleReparto.FirstOrDefault( rep => rep.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode()); RepartoDetalleInfo repartoDetalleVespertino = repartoCorral.DetalleReparto.FirstOrDefault( rep => rep.TipoServicioID == TipoServicioEnum.Vespertino.GetHashCode()); LoteInfo lote = lotePL.ObtenerLotesActivos(organizacionId, corralCompleto.CorralID); if (t.TipoServicioID == (int)TipoServicioEnum.Matutino) //&& t.Servido == 1) { if (repartoDetalleMatutino != null) { //cantidadManiana = t.CantidadServida; //if(repartoCorral.Fecha.Date == DateTime.Now.Date) //{ // t.NoModificar = true; //} cantidadManiana = repartoDetalleMatutino.CantidadProgramada; bandera = true; } } if (repartoDetalleMatutino != null) { if (repartoCorral.LoteID == 0 || !repartoDetalleMatutino.Servido) { t.Lote = lote.Lote; t.Cabezas = lote.Cabezas; t.CambiarLote = true; t.RepartoID = repartoCorral.RepartoID; //t.RepartoDetalleIdManiana = repartoDetalleMatutino.RepartoDetalleID; if (repartoDetalleVespertino != null) { t.RepartoDetalleIdTarde = repartoDetalleVespertino.RepartoDetalleID; } } else if (repartoCorral.LoteID != lote.LoteID) { if (t.TipoServicioID == (int)TipoServicioEnum.Vespertino) { if (repartoDetalleVespertino != null) { var repartoInactivar = new CambiosReporteInfo { RepartoDetalleIdTarde = repartoDetalleVespertino.RepartoDetalleID, InactivarDetalle = true, CorralInfo = new CorralInfo(), UsuarioModificacionID = usuario, FechaReparto = fecha }; repartosInactivar.Add(repartoInactivar); } t.Lote = lote.Lote; } else { t.RepartoDetalleIdManiana = repartoDetalleMatutino.RepartoDetalleID; } } } } } #endregion Eliminar Duplicados var repartoDetalleManiana = new RepartoDetalleInfo(); if (t.RepartoID > 0) { IList <RepartoDetalleInfo> detalleRepartos = repartoPl.ObtenerDetalle(new RepartoInfo { RepartoID = t.RepartoID }); if (detalleRepartos != null && detalleRepartos.Any()) { repartoDetalleManiana = detalleRepartos.FirstOrDefault( det => det.TipoServicioID == TipoServicioEnum.Matutino.GetHashCode()); } } if (t.TipoServicioID == (int)TipoServicioEnum.Matutino) //&& t.Servido == 1) { if (repartoDetalleManiana != null) { //cantidadManiana = t.CantidadServida; if (t.FechaReparto.Date == DateTime.Now.Date && t.Servido == 1) { t.NoModificar = true; } if (t.Servido == 1) { cantidadManiana = repartoDetalleManiana.CantidadServida; } else { cantidadManiana = repartoDetalleManiana.CantidadProgramada; } bandera = true; } } if (bandera && t.TipoServicioID == (int)TipoServicioEnum.Vespertino) { if (t.CantidadProgramada == 0) { t.CantidadProgramada = 0; } else { t.CantidadProgramada = t.CantidadProgramada - cantidadManiana; } if (cantidadManiana == 0) { t.ValidaPorcentaje = 0; } else { t.ValidaPorcentaje = 1; } bandera = false; cantidadManiana = 0; } } cambiosDetalle.AddRange(repartosInactivar); valorRetorno = repartoPl.GenerarOrdenRepartoConfiguracionAjustes(cambiosDetalle.Where(cam => cam.NoModificar == false).ToList()); } } catch (Exception ex) { valorRetorno = -1; } return(valorRetorno); }