Пример #1
0
 private HorarioCruceBE MergeHorarioCruce(HorarioCruceBE horario1, HorarioCruceBE horario2)
 {
     for (int i = 0; i < horario2.horarios.Count; i++)
     {
         horario1.horarios.Add(horario2.horarios[i]);
         horario2.horarios[i].horarioCruce = horario1;
     }
     return null;
 }
Пример #2
0
        public List<Horario> GetHorario(string codigo, string periodo, string fecha)
        {
            HorarioBC bc = new HorarioBC();
            List<HorarioBE> be = new List<HorarioBE>();
            HorarioCruceBE dc;
            List<HorarioBE> rawData = new List<HorarioBE>();
            List<HorarioCruceBE> lst = new List<HorarioCruceBE>();

            //Se obtiene el nro de la semana en que estamos
            int semana = GetWeekNumber(Convert.ToDateTime(fecha));

            //Se obtiene el rango de la semana con la que se va a trabajar
            DateTime[] rango = GetWeekRange(Convert.ToDateTime(fecha));

            //Se obtiene los ids unicos para cada día de la semana
            List<int> ids = GetDaysId(rango[0]);

            //Se verifica que los horarios a traer sean de la semana
            rawData = bc.GetHorario(codigo, periodo);

            for (int i = 0; i < rawData.Count; i++)
            {
                HorarioBE hora = rawData[i];
                String inicio = hora.fechainicio;
                String fin = hora.fechafin;

                String[] split_inicio = inicio.Split('/');
                String[] split_fin = fin.Split('/');
                inicio = split_inicio[1] + "/" + split_inicio[0] + "/" + split_inicio[2];

                DateTime inicioDate = new DateTime( Int32.Parse(split_inicio[2]), Int32.Parse(split_inicio[1]), Int32.Parse(split_inicio[0]));
                DateTime finDate = new DateTime(Int32.Parse(split_fin[2]), Int32.Parse(split_fin[1]), Int32.Parse(split_fin[0]));

                int validate_die = 0;

                switch (hora.frec)
                {
                    case 1:
                        be.Add(hora);
                        break;
                    case 2: while (!inicioDate.ToString().Equals(finDate.ToString()))
                        {
                            if (validate_die > 50)
                                break;
                            String temp_date = inicioDate.Day + "/" + inicioDate.Month + "/" + inicioDate.Year;
                            if (temp_date.Equals(fecha))
                            {
                                be.Add(hora);
                                break;
                            }
                            inicioDate.AddDays(7);
                            validate_die++;
                        }
                        break;
                    case 4:
                        if((DateTime.Compare(Convert.ToDateTime(inicio),rango[0]) == 1) && (DateTime.Compare(Convert.ToDateTime(inicio),rango[1]) == -1))
                            be.Add(hora);
                        break;
                    default: continue;
                }

            }

            //Se juntan los horarios que tienen cruce
            for (int i = 0; i <  be.Count; i++)
            {
                bool seGeneroCruce = false;
                for (int k = i+1; k < be.Count; k++)
                {
                    if(ExisteCruce(be[i],be[k]))
                    {
                        if (be[i].cruce == false && be[k].cruce == false)
                        {
                            //crear div
                            dc = new HorarioCruceBE();
                            dc.id = be[i].id;
                            dc.dia = be[i].dia;
                            dc.semana = semana;

                            dc.horarios.Add(be[i]);
                            dc.horarios.Add(be[k]);

                            be[i].cruce = true;
                            be[k].cruce = true;
                            be[i].horarioCruce = dc;
                            be[k].horarioCruce = dc;

                            lst.Add(dc);
                            seGeneroCruce = true;
                        }
                        else if (be[i].cruce && be[k].cruce)
                        {
                            if (be[i].horarioCruce != be[k].horarioCruce)
                            {
                                dc = MergeHorarioCruce(be[i].horarioCruce, be[k].horarioCruce);
                                lst.Remove(be[k].horarioCruce);
                            }
                        }
                        else
                        {
                            HorarioBE horarioBE;
                            if (be[i].cruce)
                            {
                                dc = be[i].horarioCruce;
                                horarioBE = be[k];
                            }
                            else
                            {
                                dc = be[k].horarioCruce;
                                horarioBE = be[i];
                            }
                            horarioBE.horarioCruce = dc;
                            horarioBE.cruce = true;
                            dc.horarios.Add(horarioBE);
                        }
                    }
                }

                //Se generan div HTML para horarios normales
                if (!seGeneroCruce && be[i].cruce == false)
                {
                    String divHorario = CrearDivNormal(be[i]);
                    dc = new HorarioCruceBE();
                    dc.id = be[i].id;
                    dc.dia = be[i].dia;
                    dc.horario = divHorario;
                    dc.semana = semana;
                    lst.Add(dc);
                }
            }

            //Se generan los div HTML para los cruces
            List<Horario> lstHorario = new List<Horario>();
            for (int i = 0; i < lst.Count; i++)
            {
                Horario horario = new Horario();
                horario.id = lst[i].id;
                horario.dia = lst[i].dia;
                horario.semana = lst[i].semana;
                if (lst[i].horarios.Count == 0)
                {
                    horario.horario = lst[i].horario;
                }
                else if (lst[i].horarios.Count == 2)
                {
                    horario.horario = CrearDivCruce(lst[i].horarios[0], lst[i].horarios[1]);
                }
                else
                {
                    horario.horario = CrearDivCruceMayorADos(lst[i].horarios);
                }
                lstHorario.Add(horario);
            }

            //creamos lista con los dias que tiene clase
            List<Horario> re = new List<Horario>();
            Horario ho;
            int cruce = 0;
            List<int> cc = new List<int>();

            for (int i = 0; i < lstHorario.Count; i++)
            {
                for (int j = i + 1; j < lstHorario.Count; j++)
                {
                    if ((lstHorario[i].dia == lstHorario[j].dia))
                    {
                        if (!(lstHorario[i].dia == cruce))
                        {
                            ho = new Horario();
                            ho.id = lstHorario[i].id;
                            ho.dia = lstHorario[i].dia;
                            ho.horario = lstHorario[i].horario + lstHorario[j].horario;
                            ho.semana = semana;
                            cruce = ho.dia;
                            cc.Add(ho.dia);
                            re.Add(ho);
                        }
                    }
                }
            }

            //Agrupamos los divs por dias
            int cr = cruce;
            int vv = 0;

            for (int w = 0; w < lst.Count; w++)
            {
                vv = 0;
                for (int i = 0; i < cc.Count; i++)
                {
                    if ((lstHorario[w].dia != cc[i]))
                    {

                        vv += 0;
                    }
                    else
                    {
                        vv += 1;
                    }

                }
                if (vv == 0)
                {
                    ho = new Horario();
                    ho.id = lstHorario[w].id;
                    ho.dia = lstHorario[w].dia;
                    ho.horario = lstHorario[w].horario;
                    ho.semana = semana;
                    re.Add(ho);
                }
            }

            for (int e = 0; e < re.Count; e++)
            {
                switch (re[e].dia)
                {
                    case 1: re[e].id = ids[0];
                        break;
                    case 2: re[e].id = ids[1];
                        break;
                    case 3: re[e].id = ids[2];
                        break;
                    case 4: re[e].id = ids[3];
                        break;
                    case 5: re[e].id = ids[4];
                        break;
                    case 6: re[e].id = ids[5];
                        break;
                    case 7: re[e].id = ids[6];
                        break;

                }
            }
            return re;
        }