public WhereDecorator(ConsultaComponente componente, ConsultaComponente nuevoComponente)
     : base(componente, nuevoComponente)
 {
 }
        public string generarConsulta(DTO dto)
        {
            //El "encabezado" SIEMPRE es el mismo
            string encabezado = "select count(r.identificador) " +
                                "from registros r " +
                                "join distritos d on r.id_provincia = d.id_provincia and r.id_canton = d.id_canton and r.id_distrito = d.id_distrito " +
                                "join personas p on r.identificador = p.identificador where ";

            IndicadorEnum.TipoIndicador tipoIndicador;
            ResultadoTablas             resultado;
            ConsultaComponente          consulta = null;
            ConsultaComponente          nuevaConsulta;

            if (dto.Provincias != null && dto.Provincias.Count != 0)
            {
                foreach (ResultadoTablas prov in dto.Provincias)
                {
                    tipoIndicador = IndicadorEnum.TipoIndicador.Provincia;

                    if (consulta == null)
                    {
                        consulta = new Indicador(tipoIndicador, prov);
                        consulta = new WhereDecorator(null, consulta);
                    }
                    else
                    {
                        nuevaConsulta = new Indicador(tipoIndicador, prov);
                        consulta      = new WhereDecorator(consulta, nuevaConsulta);
                    }
                }
            }

            if (dto.Cantones != null && dto.Cantones.Count != 0)
            {
                foreach (ResultadoTablas cant in dto.Cantones)
                {
                    tipoIndicador = IndicadorEnum.TipoIndicador.Canton;

                    //si llega a este caso la consulta nunca va a ser null
                    nuevaConsulta = new Indicador(tipoIndicador, cant);
                    consulta      = new WhereDecorator(consulta, nuevaConsulta);
                }
            }

            if (dto.Distritos != null && dto.Distritos.Count != 0)
            {
                foreach (ResultadoTablas dist in dto.Distritos)
                {
                    tipoIndicador = IndicadorEnum.TipoIndicador.Distrito;

                    //si llega a este caso la consulta nunca va a ser null
                    nuevaConsulta = new Indicador(tipoIndicador, dist);
                    consulta      = new WhereDecorator(consulta, nuevaConsulta);
                }
            }

            if (dto.TipoAfectado != null)
            {
                tipoIndicador = IndicadorEnum.TipoIndicador.TipoAfectado;

                if (consulta == null)
                {
                    consulta = new Indicador(tipoIndicador, dto.TipoAfectado);
                    consulta = new WhereDecorator(null, consulta);
                }
                else
                {
                    nuevaConsulta = new Indicador(tipoIndicador, dto.TipoAfectado);
                    consulta      = new WhereDecorator(consulta, nuevaConsulta);
                }
            }

            if (dto.Sexo != null)
            {
                tipoIndicador = IndicadorEnum.TipoIndicador.Sexo;
                resultado     = new ResultadoTablas(-1, dto.Sexo);

                if (consulta == null)
                {
                    consulta = new Indicador(tipoIndicador, resultado);
                    consulta = new WhereDecorator(null, consulta);
                }
                else
                {
                    nuevaConsulta = new Indicador(tipoIndicador, resultado);
                    consulta      = new WhereDecorator(consulta, nuevaConsulta);
                }
            }

            if (dto.TipoLesion != null)
            {
                tipoIndicador = IndicadorEnum.TipoIndicador.TipoLesion;

                if (consulta == null)
                {
                    consulta = new Indicador(tipoIndicador, dto.TipoLesion);
                    consulta = new WhereDecorator(null, consulta);
                }
                else
                {
                    nuevaConsulta = new Indicador(tipoIndicador, dto.TipoLesion);
                    consulta      = new WhereDecorator(consulta, nuevaConsulta);
                }
            }

            if (dto.Annos != null && dto.Annos.Count != 0)
            {
                foreach (int anno in dto.Annos)
                {
                    tipoIndicador = IndicadorEnum.TipoIndicador.Anno;
                    resultado     = new ResultadoTablas(anno, "");

                    if (consulta == null)
                    {
                        consulta = new Indicador(tipoIndicador, resultado);
                        consulta = new WhereDecorator(null, consulta);
                    }
                    else
                    {
                        nuevaConsulta = new Indicador(tipoIndicador, resultado);
                        consulta      = new WhereDecorator(consulta, nuevaConsulta);
                    }
                }
            }

            if (dto.EdadQuinquenal != null)
            {
                tipoIndicador = IndicadorEnum.TipoIndicador.EdadQuinquenal;
                resultado     = new ResultadoTablas(-1, dto.EdadQuinquenal);

                if (consulta == null)
                {
                    consulta = new Indicador(tipoIndicador, resultado);
                    consulta = new WhereDecorator(null, consulta);
                }
                else
                {
                    nuevaConsulta = new Indicador(tipoIndicador, resultado);
                    consulta      = new WhereDecorator(consulta, nuevaConsulta);
                }
            }

            //si al llegar aquí sigue siendo null es porque no seleccionaron nada
            if (consulta == null)
            {
                //quita el where
                return(encabezado.Substring(0, encabezado.Length - 7));
            }

            string where = consulta.definirWhere();
            //quita el último and
            return(encabezado + where.Substring(0, where.Length - 5));
        }
示例#3
0
 public ConsultaDecorator(ConsultaComponente comp, ConsultaComponente nuevoComp)
 {
     componente      = comp;
     nuevoComponente = nuevoComp;
 }