Exemple #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);
            }
        }
        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);
        }