示例#1
0
    // Atualiza o dropdownlist de seleção de recursos e o checkbox list dos selecionados,
    // para uma determinada linha da tabela
    private void AtualizaComponentes(DataGridItem grid, String dataString, String horario, String aulaString)
    {
        CheckBoxList cbRecursos = (CheckBoxList)grid.FindControl("cbRecursos");
        ImageButton  butDel     = (ImageButton)grid.FindControl("butDeletar");
        ImageButton  butTransf  = (ImageButton)grid.FindControl("butTransferir");
        ImageButton  butTrocar  = (ImageButton)grid.FindControl("butTrocar");

        DateTime data = Convert.ToDateTime(dataString);

        AlocacaoBO     alocBO      = new AlocacaoBO();
        List <Recurso> recAlocados = alocBO.GetRecursoAlocadoByAula(data, horario, new Guid(aulaString));

        cbRecursos.Items.Clear();
        if (recAlocados.Count != 0)
        {
            // Habilita botões
            butDel.Visible    = true;
            butTransf.Visible = true;
            butTrocar.Visible = true;
            foreach (Recurso r in recAlocados)
            {
                cbRecursos.Items.Add(new ListItem(r.Descricao, r.Id.ToString()));
            }
        }
        else
        {
            // Desabilita botões
            butDel.Visible    = false;
            butTransf.Visible = false;
            butTrocar.Visible = false;
        }
    }
示例#2
0
 protected void Page_Load(object sender, EventArgs e)
 {
     controladorCategorias = new CategoriaRecursoBO();
     controladorRecursos   = new RecursosBO();
     controladorAlocacoes  = new AlocacaoBO();
     if (!IsPostBack)
     {
         PopulaCategorias();
         PopulaRecursos();
         PopulaProfessores();
         PopulaSecretarios();
         PopulaHorarios();
     }
 }
示例#3
0
    protected void Page_Load(object sender, EventArgs e)
    {
        controladorCategorias = new CategoriaRecursoBO();
        controladorRecursos   = new RecursosBO();
        controladorAlocacoes  = new AlocacaoBO();

        lblDataHora.Text = DateTime.Now.ToString();

        /*  if (!IsPostBack)
         * {
         *    PopulaCategorias();
         *    PopulaProfessores();
         *    PopulaSecretarios();
         * }
         */
    }
示例#4
0
    protected void dgHorariosEvento_ItemDataBound(object sender, DataGridItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            AlocacaoBO alocBO = new AlocacaoBO();

            Label lblEventoId           = (Label)e.Item.FindControl("lblEventoId");
            Label lblRecursosAlocados   = (Label)e.Item.FindControl("lblRecursosAlocados");
            Label lblRecursosAlocadosId = (Label)e.Item.FindControl("lblRecursosAlocadosId");
            Label lblData    = (Label)e.Item.FindControl("lblData");
            Label lblHorario = (Label)e.Item.FindControl("lblHorario");

            List <HorariosEvento> horariosEvento = (List <HorariosEvento>)dgHorariosEvento.DataSource;
            // Comentado porque o horário "E" não faz mais sentido...
            //if (horariosEvento[e.Item.ItemIndex].HorarioInicio == "EE")
            //{
            //    lblHorario.Text = "E";
            //}
            //else
            lblHorario.Text = horariosEvento[e.Item.ItemIndex].HorarioInicio;

            DateTime data = Convert.ToDateTime(lblData.Text);

            List <Recurso> recAlocados = alocBO.GetRecursoAlocadoByEvento(data, horariosEvento[e.Item.ItemIndex].HorarioInicio, new Guid(lblEventoId.Text));

            if (recAlocados.Count != 0)
            {
                for (int i = 0; i < recAlocados.Count - 1; i++)
                {
                    lblRecursosAlocados.Text   += recAlocados[i].Descricao + ", ";
                    lblRecursosAlocadosId.Text += recAlocados[i].Id + ",";
                }
                lblRecursosAlocados.Text   += recAlocados[recAlocados.Count - 1].Descricao;
                lblRecursosAlocadosId.Text += recAlocados[recAlocados.Count - 1].Id.ToString();
            }
            else
            {
                lblRecursosAlocados.Text = "";
            }
        }
    }
示例#5
0
        public ColecaoCategoriaDeRecursos GetCategorias()
        {
            CategoriaRecursoBO         controleCategoriaRecursos = new CategoriaRecursoBO();
            RecursosBO                 controleRecursos          = new RecursosBO();
            AlocacaoBO                 controleAlocacoes         = new AlocacaoBO();
            ColecaoCategoriaDeRecursos catalogoRecursos          = new ColecaoCategoriaDeRecursos();

            IList <Recurso>  listaRecursos;
            CategoriaRecurso categ = null;
            Recurso          recAux;

            foreach (BusinessData.Entities.CategoriaRecurso cat in controleCategoriaRecursos.GetCategoriaRecurso())
            {
                listaRecursos = new List <Recurso>();
                foreach (BusinessData.Entities.Recurso rec in controleRecursos.GetRecursosPorCategoria(cat))
                {
                    recAux = new Recurso(rec);
                    listaRecursos.Add(recAux);
                }
                categ = new CategoriaRecurso(cat, listaRecursos);
                catalogoRecursos.Add(categ);
            }
            return(catalogoRecursos);
        }
示例#6
0
    protected void Page_Load(object sender, EventArgs e)
    {
        cal = null;
        Guid idturma    = new Guid();
        bool mostraAval = true;

        if (Request.QueryString["id"] != null)
        {
            listCData = cdataBo.GetCategoriaDatas();
            try
            {
                idturma = new Guid(Request.QueryString["id"]);
                int           ano      = int.Parse(Request.QueryString["ano"]);
                int           semestre = int.Parse(Request.QueryString["sem"]);
                CalendariosBO calBO    = new CalendariosBO();
                cal = calBO.GetCalendarioByAnoSemestre(ano, semestre);
                string strProx = Request.QueryString["aval"];
                if (string.IsNullOrEmpty(strProx))
                {
                    mostraAval = false;
                }
            }
            catch (FormatException)
            {
                Response.Redirect("~/Default/Erro.aspx?Erro=Codigo de turma inválido!");
            }

            Session["TurmaId"] = idturma;
            CategoriaAtividadeBO      cateBO          = new CategoriaAtividadeBO();
            List <CategoriaAtividade> listaAtividades = cateBO.GetCategoriaAtividade();
            AulaBO      AulaBO     = new AulaBO();
            List <Aula> listaAulas = null;
            try
            {
                listaAulas = AulaBO.GetAulas(idturma);
            }
            catch (Exception)
            {
                Response.Redirect("~/Default/Erro.aspx?Erro=Codigo de turma inválido!");
            }
            Disciplina          d   = listaAulas[0].TurmaId.Disciplina;
            CategoriaDisciplina cat = d.Categoria;

            string sala   = Regex.Replace(listaAulas[0].TurmaId.Sala, "32/A", "32");
            string titulo = d.Cod + "-" + d.Cred + " " + d.Nome + " (" + listaAulas[0].TurmaId.Numero + ") - " + sala;//" "+facin;
            lblTitulo.Text = titulo;

            string shortTitle = "";
            foreach (string part in d.Nome.Split())
            {
                if (part.Length == 1 && part[0] != 'I')
                {
                    continue;
                }
                if (part == "de" || part == "do" || part == "da" || part == "em")
                {
                    continue;
                }
                if (part == "I" || part == "II" || part == "III" || part == "IV" || part == "V" ||
                    part == "A" || part == "B" || part == "C")
                {
                    shortTitle += part;
                }
                else
                {
                    shortTitle += char.ToUpper(part[0]);
                }
            }
            string st = shortTitle;

            string output = "BEGIN:VCALENDAR\n";
            output += "PRODID:-//SARC//" + d.Cod + "-" + d.Cred + " " + d.Nome + "//PT\n";
            output += "VERSION:2.0\n";
            output += "CALSCALE:GREGORIAN\n";
            output += "METHOD:PUBLISH\n";
            output += "X-WR-CALNAME:" + st + "\n";
            output += "X-WR-TIMEZONE:America/Sao_Paulo\n";
            output += "X-WR-CALDESC:" + st + "\n";

            DateTime hoje = DateTime.Now;

            DataTable tabela = new DataTable();

            AlocacaoBO alocBO = new AlocacaoBO();

            foreach (DataGridColumn coluna in dgAulas.Columns)
            {
                tabela.Columns.Add(coluna.HeaderText);
            }

            int     totalAulas = 1;
            DataRow dr;
            bool    notset = true;
            foreach (Aula aula in listaAulas)
            {
                string hi = Horarios.ParseToDateTime(aula.Hora).TimeOfDay.ToString().Substring(0, 5);
                string hf = Horarios.ParseToDateTime(aula.Hora).TimeOfDay.Add(TimeSpan.FromMinutes(90)).ToString().Substring(0, 5);
                dr              = tabela.NewRow();
                dr["#"]         = totalAulas++;
                dr["Dia"]       = DataHelper.GetDia(aula.Data.DayOfWeek);
                dr["Data"]      = aula.Data.Date.ToShortDateString();
                dr["Hora"]      = aula.Hora + "<br>" + hi + " - " + hf;
                dr["Descrição"] = aula.DescricaoAtividade;
                dr["Atividade"] = aula.CategoriaAtividade.Descricao;
                dr["Prox"]      = "";

                DateTime startDt = aula.Data.Add(Horarios.ParseToDateTime(aula.Hora).TimeOfDay).AddHours(3);
                DateTime endDt   = startDt.AddMinutes(90);

                List <BusinessData.Entities.Recurso> recAlocados = alocBO.GetRecursoAlocadoByAula(aula.Data, aula.Hora, (Guid)aula.Id);
                string aux     = "";
                string recHoje = "";
                shortTitle = st;
                foreach (var rec in recAlocados)
                {
                    if (aux != String.Empty)
                    {
                        aux += "<br/>" + rec.Descricao;
                    }
                    else
                    {
                        aux = rec.Descricao;
                        //Debug.WriteLine("Tipo recurso:" + rec.Tipo);
                        if (rec.Tipo == 'L' || rec.Tipo == 'A' || rec.Tipo == 'D')
                        {
                            recHoje     = rec.Descricao;
                            shortTitle += " " + recHoje.Split().Last();
                            break;
                        }
                    }
                }
                dr["Recursos"]  = aux;
                dr["CorDaData"] = aula.CategoriaAtividade.Cor.ToArgb();

                if (aula.Data.Date >= cal.InicioG2)
                {
                    dr["#"] = "";
                    totalAulas--;
                }

                Data data      = VerificaData(aula.Data.Date);
                bool diaLetivo = true;
                if (data != null)
                {
                    foreach (CategoriaData c in listCData)
                    {
                        if (c.Id == data.Categoria.Id)
                        {
                            if (!c.DiaLetivo)
                            {
                                dr["Descrição"] = c.Descricao + (aula.DescricaoAtividade != "Feriado" ? " (era " + aula.DescricaoAtividade + ")" : "");
                                dr["#"]         = "";
                                totalAulas--;
                                diaLetivo = false;
                                break;
                            }
                        }
                    }
                }
                //Debug.WriteLine("Cor aula: " + aula.CategoriaAtividade.Cor.ToString());
                tabela.Rows.Add(dr);

                if (recHoje == string.Empty)
                {
                    recHoje     = sala;
                    shortTitle += " " + recHoje;
                }

                if (diaLetivo)
                {
                    if (mostraAval && aula.CategoriaAtividade.Descricao != "Prova" && aula.CategoriaAtividade.Descricao != "Prova de Substituição" &&
                        aula.CategoriaAtividade.Descricao != "Prova de G2" && aula.CategoriaAtividade.Descricao != "Trabalho")
                    {
                        continue;
                    }
                    output += "BEGIN:VEVENT\n";
                    output += "DESCRIPTION: " + aula.DescricaoAtividade + "\n";
                    output += "SUMMARY: " + shortTitle + "\n";
                    output += string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}\n", DateTime.Now);
//                    output += "DTSTART:"+startDt.Year+startDt.Month+startDt.Day+startDt.Hour+startDt.Minute+startDt.Second+"\n";
                    //output += "DTSTART:" + startDt.ToString() + "\n";
                    output += string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}\n", startDt);
                    output += string.Format("DTEND:{0:yyyyMMddTHHmmssZ}\n", endDt);
                    output += "LOCATION:" + recHoje + "\n";
                    output += "SEQUENCE:0\n";
                    output += "TRANSP:OPAQUE\n";
                    SHA256 sha      = SHA256.Create();
                    byte[] uidarray = sha.ComputeHash(Encoding.Unicode.GetBytes(aula.DescricaoAtividade + startDt.ToString() + shortTitle + endDt.ToString()));
                    string uid      = Convert.ToBase64String(uidarray);
                    output += "UID:" + uid + "\n";
                    output += "END:VEVENT\n";
                }
            }
            dgAulas.DataSource     = tabela;
            dgAulas.ItemDataBound += new DataGridItemEventHandler(dgAux_ItemDataBound);
            dgAulas.DataBind();

            output += "END:VCALENDAR\n";
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + st + ".ics");
            Response.ContentType = "text/calendar";
            Response.Write(output);

            Response.End();
        }
    }
示例#7
0
        public void DistribuirRecursos(int ano, int semestre, bool simula)
        {
            ControleCalendario  calendarios         = new ControleCalendario();
            ControleRequisicoes controleRequisicoes = new ControleRequisicoes();

            ColecaoRequisicoes requisicoes;
            Calendario         calAtual = calendarios.GetCalendario(ano, semestre);

            Debug.WriteLine("Calendario: " + calAtual.EntidadeCalendario.PorExtenso);
            Random rand = new Random();
            double soma = 0.0;

            Dictionary <TurmaDistribuicao, SatisfacaoTurma> satTurmas = new Dictionary <TurmaDistribuicao, SatisfacaoTurma>();

            //Preenche a colecao para todas as turmas do semestre
//            Debug.WriteLine("Criando coleção de satisfação de turmas...");
            foreach (TurmaDistribuicao t in calAtual.Turmas)
            {
                satTurmas.Add(t, new SatisfacaoTurma(t));
            }

            int maxPri = 0;

            foreach (Requisicao r in calAtual.Requisicoes)
            {
                if (r.Prioridade > maxPri)
                {
                    maxPri = r.Prioridade;
                }
            }

            Debug.WriteLine("Prioridade máxima: " + maxPri);

            AlocacaoBO controleAloc = new AlocacaoBO();
            List <BusinessData.Entities.Alocacao> todasAloc = controleAloc.GetAlocacoes(calAtual.InicioG1);
//            HashSet<String> indisponiveis = new HashSet<string>();
            Dictionary <string, string> convHorario = new Dictionary <string, string>
            {
                { "A", "AB" }, { "B", "AB" },
                { "C", "CD" }, { "D", "CD" },
                { "E", "EX" }, { "X", "EX" },
                { "F", "FG" }, { "G", "FG" },
                { "H", "HI" }, { "I", "HI" },
                { "J", "JK" }, { "K", "JK" },
                { "L", "LM" }, { "M", "LM" },
                { "N", "NP" }, { "P", "NP" }
            };
            Dictionary <String, List <BusinessData.Entities.Recurso> > indisponiveis = new Dictionary <string, List <BusinessData.Entities.Recurso> >();

            foreach (BusinessData.Entities.Alocacao aloc in todasAloc)
            {
                string key = aloc.Data.ToString() + convHorario[aloc.Horario.ToString()];
                List <BusinessData.Entities.Recurso> recursosDiaHora = null;
                if (indisponiveis.ContainsKey(key))
                {
                    recursosDiaHora = indisponiveis[key];
                }
                else
                {
                    recursosDiaHora = new List <BusinessData.Entities.Recurso>();
                }
                recursosDiaHora.Add(aloc.Recurso);
                indisponiveis[key] = recursosDiaHora;
                //Debug.WriteLine(key);
            }
            //return;
            //Para cada prioridade de requisicao
            for (int prioridadePedidos = 1; prioridadePedidos <= maxPri; /*calAtual.Categorias.Count*/ prioridadePedidos++)
            {
                Debug.WriteLine("Prioridade: " + prioridadePedidos + " de " + maxPri);//calAtual.Categorias.Count);
                foreach (CategoriaRecurso cat in calAtual.Categorias)
                {
                    //Inicializa os dados
                    Debug.WriteLine("\n\n **************** Categoria: " + cat.Descricao + "\n\n");
                    foreach (TurmaDistribuicao turma in calAtual.Turmas)
                    {
                        satTurmas[turma].Atendimentos = 0;
                        satTurmas[turma].Pedidos      = 0;
                        satTurmas[turma].Prioridade   = 0;
                    }

                    Debug.WriteLine("Obtendo requisições para categoria e prioridade...");
                    requisicoes = calAtual.Requisicoes.GetRequisicoes(prioridadePedidos, cat, calAtual.Dias);

                    soma = 0.0;
                    double        prioridadeAux       = 0.0;
                    List <double> listaPrioridadesAux = new List <double>();

                    Debug.WriteLine("Calculando total de requisições para as turmas...");
                    //Calcula o numero de requisicoes para as turmas
                    foreach (Requisicao req in requisicoes)
                    {
                        satTurmas[req.Turma].Pedidos++;
                        //Calcula o total para a normalizacao
                        prioridadeAux = req.Turma.EntidadeTurma.Disciplina.Categoria.Prioridades[cat.EntidadeCategoria];
                        if (!listaPrioridadesAux.Contains(prioridadeAux))
                        {
                            soma += prioridadeAux;
                            listaPrioridadesAux.Add(prioridadeAux);
                        }
                    }

                    //Normaliza as prioridades entre categorias de disciplina e categorias de recurso atual para
                    //um total de 100%
                    Debug.WriteLine("Normalizando prioridades...");
                    foreach (Requisicao req in requisicoes)
                    {
                        prioridadeAux = req.Turma.EntidadeTurma.Disciplina.Categoria.Prioridades[req.CategoriaRecurso.EntidadeCategoria];
                        satTurmas[req.Turma].Prioridade = prioridadeAux / soma;
                    }

                    Debug.WriteLine("*** PROCESSAMENTO DOS DIAS ***");
                    int totalDias = calAtual.Dias.Count;
                    int curDia    = 1;
                    foreach (Dia dia in calAtual.Dias)
                    {
                        //if(curDia++ % 30 == 0)
                        Debug.WriteLine(">>> Dia: " + dia.Data);
                        foreach (Horarios.HorariosPUCRS horario in dia.Horarios)
                        {
                            //Debug.WriteLine("Horario: " + horario.ToString());
                            // Todos os recursos disponíveis nesta categoria, dia e horário
                            //Debug.WriteLine("   Obtendo recursos disponíveis (sem filtrar)");
                            List <Recurso> auxRecursosDisponiveis = cat.GetRecursosDisponiveis(dia.Data, horario.ToString());
                            // Todas as requisições neste dia e horário
                            //Debug.WriteLine("   Obtendo requisições neste dia e horário...");
                            IList <Requisicao> reqDiaHoraGeral = calAtual.Requisicoes.GetRequisicoes(dia.Data, horario);

                            // Lista para armazenar os REALMENTE disponíveis
                            // (depois de remover as dependências de salas duplas, etc)
                            List <Recurso> recursosDisponiveis = new List <Recurso>();

                            //Debug.WriteLine("   Removendo recursos bloqueados por dependências...");
                            foreach (Recurso rec in auxRecursosDisponiveis)
                            {
                                bool bloqueado = false;
                                foreach (Requisicao req in reqDiaHoraGeral)
                                {
                                    if (req.Recurso == null)
                                    {
                                        continue; // Não alocado, não interfere
                                    }
                                    Guid bloqueia1 = req.Recurso.Bloqueia1;
                                    Guid bloqueia2 = req.Recurso.Bloqueia2;
                                    // Se o recurso alocado é um dos que bloqueiam
                                    // este...
                                    if (rec.EntidadeRecurso.Id == bloqueia1 ||
                                        rec.EntidadeRecurso.Id == bloqueia2)
                                    {
                                        // Não podemos utilizá-lo!
                                        //Debug.WriteLine("!!! Recurso " + rec.EntidadeRecurso.Descricao + " bloqueado por dependência");
                                        bloqueado = true;
                                        break;
                                    }
                                }
                                // Verifica se já existe reserva para evento previamente alocada
                                string key = dia.Data.ToString() + horario.ToString();
                                if (indisponiveis.ContainsKey(key))
                                {
                                    List <BusinessData.Entities.Recurso> listaRecsHorario = indisponiveis[key];
                                    foreach (var recT in listaRecsHorario)
                                    {
                                        // Recurso já alocado para evento?
                                        if (recT.Descricao.Equals(rec.EntidadeRecurso.Descricao))
                                        {
                                            bloqueado = true;
                                            break;
                                        }
                                    }
                                }
                                if (!bloqueado)
                                {
                                    recursosDisponiveis.Add(rec);
                                }
                            }

                            IList <Requisicao> requisicoesDiaHora = requisicoes.GetRequisicoes(dia.Data, horario);
                            // Se houver recursos suficientes para atender os pedidos
                            // entrega um para cada

                            if (requisicoesDiaHora.Count <= recursosDisponiveis.Count)
                            {
                                //Debug.WriteLine("   Atendendo TODOS os pedidos deste dia e horário!");
                                for (int i = 0; i < requisicoesDiaHora.Count; i++)
                                {
                                    recursosDisponiveis[i].Aloca(dia.Data, horario.ToString(), requisicoesDiaHora[i].Turma);
                                    satTurmas[requisicoesDiaHora[i].Turma].Atendimentos++;
                                    requisicoesDiaHora[i].EstaAtendido = true;
                                    requisicoesDiaHora[i].Recurso      = recursosDisponiveis[i].EntidadeRecurso;

                                    /*
                                     * Não precisa: são os mesmos objetos nas duas listas
                                     * foreach(Requisicao reqGeral in reqDiaHoraGeral)
                                     *  if(reqGeral.Id == requisicoesDiaHora[i].Id)
                                     *  {
                                     *      reqGeral.Recurso = recursosDisponiveis[i].EntidadeRecurso;
                                     *  }
                                     */
                                }
                            }
                            else
                            {
                                //Debug.WriteLine("   Tentando atender...");
                                SortedList <double, List <Requisicao> > listaPrioridades = new SortedList <double, List <Requisicao> >();
                                double prioridadeSelecionada = 0.0;
                                //Cria os Conjuntos prioridade/Requisicao
                                foreach (Requisicao req in requisicoesDiaHora)
                                {
                                    //prioridadeSelecionada = req.Turma.EntidadeTurma.Disciplina.Categoria.Prioridades[cat.EntidadeCategoria];
                                    prioridadeSelecionada = satTurmas[req.Turma].Prioridade;
                                    if (!listaPrioridades.Keys.Contains(prioridadeSelecionada))
                                    {
                                        listaPrioridades.Add(prioridadeSelecionada, new List <Requisicao>());
                                    }
                                    listaPrioridades[prioridadeSelecionada].Add(req);
                                }

                                foreach (Recurso rec in recursosDisponiveis)
                                {
                                    #region Sorteia em qual conjunto irá efetuar a distribuicao
                                    double sorteado = rand.NextDouble();
                                    prioridadeSelecionada = double.PositiveInfinity;

                                    //Se for o primeiro item da lista
                                    if (sorteado <= listaPrioridades.Keys[0])
                                    {
                                        prioridadeSelecionada = listaPrioridades.Keys[0];
                                    }
                                    else
                                    {
                                        for (int i = 1; i < listaPrioridades.Keys.Count - 1; i++)
                                        {
                                            if (sorteado <= listaPrioridades.Keys[i] + listaPrioridades.Keys[i - 1])
                                            {
                                                prioridadeSelecionada = listaPrioridades.Keys[i];
                                            }
                                        }
                                    }
                                    //se for o ultimo da lista
                                    if (prioridadeSelecionada == double.PositiveInfinity)
                                    {
                                        prioridadeSelecionada = listaPrioridades.Keys[listaPrioridades.Keys.Count - 1];
                                    }
                                    //-----------------------------------------------------------
                                    #endregion
                                    double satMin = 1;
                                    double best   = double.PositiveInfinity;

                                    foreach (Requisicao req in listaPrioridades[prioridadeSelecionada])
                                    {
                                        if (satTurmas[req.Turma].Satisfacao < satMin)
                                        {
                                            satMin = satTurmas[req.Turma].Satisfacao;
                                        }
                                    }

                                    TurmaDistribuicao turmaEscolhida = null;
                                    Requisicao        reqEscolhida   = null;
                                    foreach (Requisicao req in listaPrioridades[prioridadeSelecionada])
                                    {
                                        //Se a satisfacao da turma atual foi a menor e ela fez o menor numero de pedidos é selecionada
                                        if ((satTurmas[req.Turma].Satisfacao == satMin) && (satTurmas[req.Turma].Pedidos < best))
                                        {
                                            best           = satTurmas[req.Turma].Pedidos;
                                            turmaEscolhida = req.Turma;
                                            reqEscolhida   = req;
                                        }
                                    }

                                    //Atende uma requisicao
                                    //Debug.WriteLine("   >>> Atendendo:" + rec.EntidadeRecurso.Descricao);
                                    rec.Aloca(dia.Data, horario.ToString(), turmaEscolhida);
                                    satTurmas[turmaEscolhida].Atendimentos++;
                                    reqEscolhida.EstaAtendido = true;
                                    reqEscolhida.Recurso      = rec.EntidadeRecurso;

                                    /* Não precisa: são os mesmos objetos nas
                                     * duas listas
                                     * // Atualiza a lista geral deste dia e horário
                                     * foreach (Requisicao reqGeral in reqDiaHoraGeral)
                                     *  if (reqGeral.Id == reqEscolhida.Id)
                                     *  {
                                     *      reqGeral.Recurso = rec.EntidadeRecurso;
                                     *  }
                                     */

                                    //Remove requisicao do grupo de requisicoes
                                    listaPrioridades[prioridadeSelecionada].Remove(reqEscolhida);

                                    //Se nao houverem mais requisicoes no grupo selecionado,o remove
                                    if (listaPrioridades[prioridadeSelecionada].Count == 0)
                                    {
                                        listaPrioridades.Remove(prioridadeSelecionada);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            Debug.WriteLine("");
            Debug.WriteLine("*** FIM DO PROCESSAMENTO ***");
            Debug.WriteLine("");
            //Persiste as alocacoes na base de dados
            BusinessData.BusinessLogic.AlocacaoBO controleAlocacoes = new BusinessData.BusinessLogic.AlocacaoBO();
            foreach (CategoriaRecurso catRec in calAtual.Categorias)
            {
                foreach (Recurso rec in catRec)
                {
                    Debug.WriteLine("Recurso: " + rec.EntidadeRecurso.Descricao);
                    foreach (BusinessData.Entities.Alocacao aloc in rec.Alocacoes)
                    {
                        string aux = "";
                        if (aloc.Aula != null)
                        {
                            aux = aloc.Aula.DescricaoAtividade;
                        }
                        else if (aloc.Evento != null)
                        {
                            aux = aloc.Evento.Descricao + "(" + aloc.Evento.Responsavel + ")";
                        }

                        Debug.WriteLine(" Alocando: " + aloc.Data.ToShortDateString() +
                                        " " + aloc.Horario.ToString() + " - " + aux);
                        // Se não está simulando, aloca recurso
                        if (!simula)
                        {
                            controleAlocacoes.UpdateAlocacao(aloc);
                        }
                    }
                }
            }

            // Salva as requisições para exibir estatísticas no final
            HttpContext.Current.Session["ReqResult"] = calAtual.Requisicoes;

            // Se está simulando, não há mais nada a fazer
            if (simula)
            {
                return;
            }

            BusinessData.BusinessLogic.RequisicoesBO cReq = new BusinessData.BusinessLogic.RequisicoesBO();
            foreach (Requisicao req in calAtual.Requisicoes)
            {
                if (req.EstaAtendido)
                {
                    cReq.SetAtendida(req.Id);
                }
            }

            ///End
            ///
            //LOG
            //instancia o usuario logado
            //MembershipUser user = Membership.GetUser();
            //instancia o log
            //LogEntry log = new LogEntry();
            //monta log
            //log.Message = "Calendário: " + calAtual.Ano + "/" + calAtual.Semestre + "; Administrador: " + user.UserName;
            //log.TimeStamp = DateTime.Now;
            //log.Severity = TraceEventType.Information;
            //log.Title = "Iniciar Semestre";
            //log.MachineName = Dns.GetHostName();
            //guarda log no banco
            //Logger.Write(log);
        }
示例#8
0
    private void VisualizarAlocacoesData()
    {
        DateTime tmp     = DateTime.Parse(lblDataHora.Text);
        DateTime now     = tmp.Date;
        TimeSpan nowTime = tmp.TimeOfDay;

        AlocacaoBO      controladorAlocacoes = new AlocacaoBO();
        List <Alocacao> listaAlocacoes       = controladorAlocacoes.GetAlocacoesByData(now, (BusinessData.Entities.Calendario)Session["Calendario"]);
        //TimeSpan nowTime = DateTime.Now.TimeOfDay;
        //nowTime = nowTime.Add(new TimeSpan(2,0,0)); // para testar com outros horarios
        //nowTime = nowTime.Subtract(new TimeSpan(0,12,0));

        // Identifica o período de aula atual
        int pos;

        if (nowTime < horariosTime[0])
        {
            pos = 0;
        }
        else
        {
            for (pos = 0; pos < horarios.Count - 1; pos++)
            {
                if (nowTime >= horariosTime[pos] && nowTime < horariosTime[pos + 1])
                {
                    break;
                }
            }
        }

        List <Alocacao> filtradaAtual = ProcuraProximoHorario(listaAlocacoes, ref pos);

        foreach (Alocacao aloc in filtradaAtual)
        {
            System.Diagnostics.Debug.WriteLine(">>> " + aloc.Recurso.ToString());
        }
        if (filtradaAtual != null && filtradaAtual.Count != 0)
        {
            //Response.Write("pos="+pos+"<br/>");
            lblAtual.Text          = horarios[pos - 1];
            dgAlocacoes.DataSource = filtradaAtual;
            dgAlocacoes.Visible    = true;
            dgAlocacoes.DataBind();
            lblStatus.Visible = false;
        }

        List <Alocacao> filtradaProx = ProcuraProximoHorario(listaAlocacoes, ref pos);

        if (filtradaProx != null && filtradaProx.Count != 0)
        {
            //Response.Write("pos="+pos+"<br/>");
            lblProximo.Text         = horarios[pos - 1];
            dgAlocacoes2.DataSource = filtradaProx;
            dgAlocacoes2.DataBind();
            dgAlocacoes2.Visible = true;
            lblStatus.Visible    = false;
        }

        //if (pos < horarios.Count - 1) // se nao estivermos ja no ultimo horario...
        //    {
        // lblAtual.Text = "Horário atual: " + horarioAtual;//+" - "+nowTime.ToString();
        // lblProximo.Text = "Proximo horario: " + horarioProx;
        if (filtradaAtual.Count == 0 && filtradaProx.Count == 0)
        {
            lblStatus.Text      = "Não existem recursos alocados para hoje.";
            lblStatus.Visible   = true;
            dgAlocacoes.Visible = false;
        }
    }
示例#9
0
    protected void Page_Load(object sender, EventArgs e)
    {
        cal = null;
        Guid idturma    = new Guid();
        bool mostraProx = true;

        if (Request.QueryString["id"] != null)
        {
            listCData = cdataBo.GetCategoriaDatas();
            try
            {
                idturma = new Guid(Request.QueryString["id"]);
                int           ano      = int.Parse(Request.QueryString["ano"]);
                int           semestre = int.Parse(Request.QueryString["sem"]);
                CalendariosBO calBO    = new CalendariosBO();
                cal = calBO.GetCalendarioByAnoSemestre(ano, semestre);
                string strProx = Request.QueryString["prox"];
                if (string.IsNullOrEmpty(strProx))
                {
                    mostraProx = false;
                }
            }
            catch (FormatException)
            {
                Response.Redirect("~/Default/Erro.aspx?Erro=Codigo de turma inválido!");
            }

            Session["TurmaId"] = idturma;
            CategoriaAtividadeBO      cateBO          = new CategoriaAtividadeBO();
            List <CategoriaAtividade> listaAtividades = cateBO.GetCategoriaAtividade();
            AulaBO      AulaBO     = new AulaBO();
            List <Aula> listaAulas = null;
            try
            {
                listaAulas = AulaBO.GetAulas(idturma);
            }
            catch (Exception)
            {
                Response.Redirect("~/Default/Erro.aspx?Erro=Codigo de turma inválido!");
            }
            Disciplina          d   = listaAulas[0].TurmaId.Disciplina;
            CategoriaDisciplina cat = d.Categoria;

            string sala   = Regex.Replace(listaAulas[0].TurmaId.Sala, "32/A", "32");
            string titulo = d.Cod + "-" + d.Cred + " " + d.Nome + " (" + listaAulas[0].TurmaId.Numero + ") - " + sala;//" "+facin;
            lblTitulo.Text = titulo;

            DateTime hoje = DateTime.Now;
            //           if (mostraProx)
            //               lblProx.Text = "26/08/2019 [QUA LM] - Apresentação (Sala de aula)";

            DataTable tabela = new DataTable();

            AlocacaoBO alocBO = new AlocacaoBO();

            foreach (DataGridColumn coluna in dgAulas.Columns)
            {
                tabela.Columns.Add(coluna.HeaderText);
            }
            //            tabela.Columns.Add("Recursos");

            int     totalAulas = 1;
            DataRow dr;
            bool    notset = true;
            foreach (Aula aula in listaAulas)
            {
                string hi = Horarios.ParseToDateTime(aula.Hora).TimeOfDay.ToString().Substring(0, 5);
                string hf = Horarios.ParseToDateTime(aula.Hora).TimeOfDay.Add(TimeSpan.FromMinutes(90)).ToString().Substring(0, 5);
                dr              = tabela.NewRow();
                dr["#"]         = totalAulas++;
                dr["Dia"]       = DataHelper.GetDia(aula.Data.DayOfWeek);
                dr["Data"]      = aula.Data.Date.ToShortDateString();
                dr["Hora"]      = aula.Hora + "<br>" + hi + " - " + hf;
                dr["Descrição"] = aula.DescricaoAtividade;
                dr["Atividade"] = aula.CategoriaAtividade.Descricao;
                dr["Prox"]      = "";

                List <BusinessData.Entities.Recurso> recAlocados = alocBO.GetRecursoAlocadoByAula(aula.Data, aula.Hora, (Guid)aula.Id);
                //                dr["Recursos"] = "";
                string aux     = "";
                string recHoje = "";
                foreach (var rec in recAlocados)
                {
                    if (aux != String.Empty)
                    {
                        aux += "<br/>" + rec.Descricao;
                    }
                    else
                    {
                        aux = rec.Descricao;
                        //Debug.WriteLine("Tipo recurso:" + rec.Tipo);
                        if (rec.Tipo == 'L' || rec.Tipo == 'A' || rec.Tipo == 'D' || rec.Tipo == 'X')
                        {
                            recHoje = rec.Descricao;
                        }
                    }
                }
                dr["Recursos"]  = aux;
                dr["CorDaData"] = aula.CategoriaAtividade.Cor.ToArgb();

                if (aula.Data.Date >= cal.InicioG2)
                {
                    dr["#"] = "";
                    totalAulas--;
                }

                Data data = VerificaData(aula.Data.Date);
                if (data != null)
                {
                    foreach (CategoriaData c in listCData)
                    {
                        if (c.Id == data.Categoria.Id)
                        {
                            if (!c.DiaLetivo)
                            {
                                dr["Descrição"] = c.Descricao + (aula.DescricaoAtividade != "Feriado" ? " (era " + aula.DescricaoAtividade + ")" : "");
                                dr["#"]         = "";
                                totalAulas--;
                                break;
                            }
                        }
                    }
                }
                //Debug.WriteLine("Cor aula: " + aula.CategoriaAtividade.Cor.ToString());
                tabela.Rows.Add(dr);

                if (recHoje == string.Empty)
                {
                    recHoje = sala;
                }

                if (notset)
                {// && hoje.Date == aula.Data.Date)
                    //Debug.WriteLine("Aula: " + aula.Data.ToString() + " - hoje: "+hoje.ToString());
                    switch (aula.Hora)
                    {
                    case "AB":
                        aula.Data = aula.Data.AddHours(8);
                        break;

                    case "CD":
                        aula.Data = aula.Data.AddHours(9).AddMinutes(45);
                        break;

                    case "EX":
                        aula.Data = aula.Data.AddHours(11).AddMinutes(30);
                        break;

                    case "FG":
                        aula.Data = aula.Data.AddHours(14);
                        break;

                    case "HI":
                        aula.Data = aula.Data.AddHours(15).AddMinutes(45);
                        break;

                    case "JK":
                        aula.Data = aula.Data.AddHours(17).AddMinutes(30);
                        break;

                    case "LM":
                        aula.Data = aula.Data.AddHours(19).AddMinutes(15);
                        break;

                    case "NP":
                        aula.Data = aula.Data.AddHours(21).AddMinutes(0);
                        break;
                    }
                    long tickDiff = aula.Data.Ticks - hoje.Ticks;
                    //Debug.WriteLine("Tickdiff: "+tickDiff);
//                    hoje.
                    TimeSpan ts = TimeSpan.FromTicks(tickDiff);
                    //Debug.WriteLine("Timespan diff: " + ts.Duration().TotalHours);
                    if (tickDiff >= 0 || ts.Duration().TotalHours < 1)
                    {
                        lblProx.Text = aula.Data.Date.ToShortDateString() + " [" + dr["Dia"] + " " + aula.Hora + "] - " + aula.DescricaoAtividade
                                       + " (" + recHoje + ")";
                        TimeSpan diff        = aula.Data.Subtract(hoje);
                        int      roundedDays = (int)Math.Round(diff.TotalDays);
//                        lblProx.Text += diff.TotalDays + " - " + diff.TotalHours + " - " + diff.TotalMinutes + " -> "+Math.Round(diff.TotalDays);
                        //lblProx.Text += " -> " + aula.Data.ToString() + " - " + hoje.ToString();
                        /**/
                        if (roundedDays > 0)
                        {
                            if (roundedDays == 1)
                            {
                                lblProx.Text += " - amanhã";
                            }
                            else
                            {
                                lblProx.Text += " - daqui a " + roundedDays + " dias";
                            }
                        }
                        else if (diff.Hours > 0)
                        {
                            lblProx.Text += " - começa em " + diff.Hours + " hora" + (diff.Hours > 1 ? "s" : "");
                        }
                        else if (diff.Minutes > 0)
                        {
                            lblProx.Text += " - começa em " + diff.Minutes + " minuto" + (diff.Minutes > 1 ? "s" : "");
                        }
                        else if (diff.Minutes < 0)
                        {
                            lblProx.Text += " - começou há " + (-diff.Minutes) + " minuto" + (diff.Minutes < 1 ? "s" : "");
                        }
                        /**/

                        //lblProx.Text += " - " + diff.Days + " dias, " + diff.Hours + " horas, " + diff.Minutes + " minutos";
                        dr["Prox"] = "X"; // marca como a próxima aula na tabela
                        if (!mostraProx)
                        {
                            lblProx.Text = "";
                        }
                        else
                        {
                            // Se prox estiver ativo, oculta a grade e o título
                            dgAulas.Visible   = false;
                            lblTitulo.Visible = false;
                            break;
                        }
                        notset = false;
                    }
                }
            }
            if (lblProx.Text == String.Empty && mostraProx)
            {
                dgAulas.Visible   = false;
                lblTitulo.Visible = false;
                lblProx.Text      = "Não há mais atividades";
            }
            dgAulas.DataSource     = tabela;
            dgAulas.ItemDataBound += new DataGridItemEventHandler(dgAux_ItemDataBound);
            dgAulas.DataBind();
        }
    }