// 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; } }
protected void Page_Load(object sender, EventArgs e) { controladorCategorias = new CategoriaRecursoBO(); controladorRecursos = new RecursosBO(); controladorAlocacoes = new AlocacaoBO(); if (!IsPostBack) { PopulaCategorias(); PopulaRecursos(); PopulaProfessores(); PopulaSecretarios(); PopulaHorarios(); } }
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(); * } */ }
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 = ""; } } }
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); }
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(); } }
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); }
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; } }
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(); } }