Ejemplo n.º 1
0
        /// <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);
            }
        }