Commit fd84995b authored by Bruno Meyer's avatar Bruno Meyer 😢 Committed by msrr18

Resolve "integrar as analises de turma ingresso e disciplinas com o sistema...

Resolve "integrar as analises de turma ingresso e disciplinas com o sistema web" (não fechar a branch)
parent 86b61d76
# This commands will be run inside of the container web
# If ANY of this commands fails (return != 0) the container will be down
bash ./docker_scripts/wait_for_postgres.sh
python ./src/manage.py migrate
python ./src/manage.py runserver 0.0.0.0:8000
cd src
python manage.py makemigrations degree admission educator uploads course
python manage.py migrate
python manage.py runserver 0.0.0.0:8000
......@@ -65,6 +65,6 @@ args = `arg="$(filter-out $@,$(MAKECMDGOALS))" && echo $${arg:-${1}}`
docker-manage:
@echo $(call args,"")
docker exec -it adega_web_1 python3 ./src/manage.py $(call args,"")
docker exec -it adega_web_1 bash -c "cd src; python3 manage.py $(call args,'')"
......@@ -44,8 +44,10 @@ INSTALLED_APPS = [
'adega',
'public',
'degree',
'educator',
'admission',
'course',
'report_api',
'educator',
'uploads'
]
......
class AdegaChart{
constructor(config){
//Object with two arrays (two charts), and the key is the x-axis
this.data = config.data || null;
if(config.data == null){
this.data_x = config.data_x;
this.data_y = config.data_y;
this.error_y = config.error_y || null;
}
else{
this.data_x = [];
this.data_y = [[],[]];
for(var obj in this.data){
this.data_x.push(obj);
}
this.data_x.sort();
for(var i in this.data_x){
var key = this.data_x[i];
this.data_y[0].push(this.data[key][0]);
this.data_y[1].push(this.data[key][1]);
}
}
this.fill = config.fill || "tozeroy";
this.div_target = config.div_target;
this.type = config.type || "scatter";
this.title = config.title || "";
this.legend = config.legend || null;
if(typeof(this.data_y[0]) == "number"){
this.data_y = [this.data_y];
this.type = [this.type];
this.legend = [this.legend];
if(this.error_y != null)
this.error_y = [this.error_y];
}
this.reloadGraph();
}
reloadGraph(){
var data = [];
for(var i in this.data_y){
data.push(
{
x: this.data_x,
y: this.data_y[i],
type: this.type[i],
fill: this.fill
}
);
if(this.legend && this.legend[i] != null){
data[i].name = this.legend[i];
}
if(this.error_y && this.error_y[i] != null){
data[i].error_y = {
type: 'data',
array: this.error_y[i],
visible: true,
}
}
}
var layout = {
title: this.title
};
Plotly.newPlot(this.div_target, data, layout);
}
}
\ No newline at end of file
This diff is collapsed.
......@@ -64,9 +64,9 @@
<ul class="nav navbar-nav hidden-md hidden-lg">
<li><a href="#">Alunos</a></li>
<li><a href="#">Turmas de Ingresso</a></li>
<li><a href="{% url 'course:index' degree_id=degree.code%}">Turmas de Ingresso</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<a href="{% url 'course:index' degree_id=degree.code%}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
Disciplinas <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="#">Lista Disciplinas</a></li>
......
......@@ -3,8 +3,8 @@
<li><a href="#">Alunos</a></li>
<li style="display: block;">
<div>
<a href="#">Disciplinas</a>
<a href="#" class="drop" data-toggle="collapse" data-target="#side-disciplinas">
<a href="{% url 'course:index' degree_id=degree.code%}">Disciplinas</a>
<a href="course" class="drop" data-toggle="collapse" data-target="#side-disciplinas">
<span class="rotate"><i class="fa fa-angle-left"></i></span>
</a>
</div>
......@@ -14,7 +14,7 @@
</li>
<li class="disabled"><a href="#">Professores</a></li>
<li class="disabled"><a href="#">Turmas</a></li>
<li><a href="#">Turmas de Ingresso</a></li>
<li><a href="{% url 'admission:index' degree_id=degree.code%}">Turmas de Ingresso</a></li>
<li style="display: block;" >
<a href="#" data-toggle="collapse" data-target="#side-outros" style="display:flex" class="drop">
......
......@@ -66,4 +66,9 @@
</div>
</footer>
</body>
<script src="{% static 'adega/js/plotly-latest.min.js' %}"></script>
<script src="{% static 'adega/js/adega-chart.js' %}"></script>
{% block js-foot %}
{% endblock js-foot %}
</html>
\ No newline at end of file
......@@ -9,6 +9,10 @@ urlpatterns = [
url(r'^uploads/', include('uploads.urls', namespace='uploads')),
url(r'^admission/(?P<degree_id>\w*)/', include('admission.urls', namespace='admission')),
url(r'^course/(?P<degree_id>\w*)/', include('course.urls', namespace='course')),
url(r'^degree/(?P<degree_id>\w*)/', include('degree.urls', namespace='degree')),
url(r'^public/', include('public.urls', namespace='public')),
......
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class AdmissionConfig(AppConfig):
name = 'admission'
from django.db import models
# Create your models here.
{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class="row">
<div class="col-md-12">
<h1>Informações Gerais</h1>
<table class="table">
<tr>
<td>Ano/Semestre</td>
<td> NO </td>
</tr>
<tr>
<td>Quantidade de alunos</td>
<td> NO </td>
</tr>
<tr>
<td>Ira Médio</td>
<td> NO </td>
</tr>
<tr>
<td>Tempo médio de formatura em anos</td>
<td> NO </td>
</tr>
<tr>
<td>Indice de Reprovação</td>
<td> NO </td>
</tr>
<tr>
<td>Indice de Evasão</td>
<td> NO </td>
</tr>
<tr>
<td>Quantidade de Evadidos</td>
<td> NO </td>
</tr>
<tr>
<td>Quantidade de Formados</td>
<td> NO </td>
</tr>
<tr>
<td>Quantidade de alunos ativos</td>
<td> NO </td>
</tr>
<tr>
<td>Quantidade de Abandonos</td>
<td> NO </td>
</tr>
<tr>
<td>Quantidade de outras formas de evasão</td>
<td> NO </td>
</tr>
</table>
{% comment %}
<div>
<div class="panel-container">
<div class="data-panel">
<h3>Nota Média</h3>
<span class="data">{{ degree_data.nota_media.0|floatformat:2 }} &#177; {{degree_data.nota_media.1|floatformat:2 }}</span>
</div>
<div class="data-panel">
<h3>Taxa Média de Reprovação</h3>
<span class="data">{{ degree_data.taxa_reprovacao.0|floatformat:2 }}% &#177; {{degree_data.taxa_reprovacao.1|floatformat:2 }}%</span>
</div>
</div>
<div class="panel-container">
<div class="data-panel">
<h3>Aprovação Aproveitamento de Conhecimento</h3>
<span class="data">{{ degree_data.taxa_conhecimento.0|floatformat:2 }}% &#177; {{degree_data.taxa_conhecimento.1|floatformat:2 }}%</span>
</div>
<div class="data-panel">
<h3>Taxa de Trancamento</h3>
<span class="data">{{ degree_data.taxa_trancamento.0|floatformat:2 }}% &#177;{{degree_data.taxa_trancamento.1|floatformat:2}}%</span>
</div>
</div>
</div>
{% endcomment %}
{% comment %}
<div id="graficos">
<div class="row">
<div class="col-md-6">
<h3>Quantidade alunos/IRA</h3>
<canvas id="ira_semestral" data-data='{{ degree_data.ira_medio_grafico|safe }}'></canvas>
</div>
<div class="col-md-6">
<h3>Quantidade evasão/período</h3>
<canvas id="evasao_semestre" data-data='{{ degree_data.evasao_grafico|safe }}'></canvas>
</div>
<!--
<div class="col-md-6">
<h3>Nota Média/Periodo</h3>
<canvas id="nota_media_semestre"
data-data='{{ degree_data.media_disc|safe }}'></canvas>
</div> essa analise foi feita de uma maneira ruim no adega
antigo -->
<!-- analises sa02 -->
<div class="col-md-6">
<h3>Alunos/Periodo</h3>
<canvas id="aluno_periodo"
data-data='{{ degree_data.aluno_periodo|safe }}'></canvas>
</div>
<div class="col-md-6">
<h3>Nota Média/Periodo</h3>
<canvas id="nota_media_periodo"
data-data='{{ degree_data.nota_media_periodo|safe }}'></canvas>
</div>
<div class="col-md-6">
<h3>Taxa Aprovação/Periodo</h3>
<canvas id="taxa_aprovacao_periodo"
data-data='{{ degree_data.taxa_aprovacao_periodo|safe }}'></canvas>
</div>
<!-- fim analise sa02 -->
</div>
</div>
{% endcomment %}
</div>
</div>
<div id="myChart"></div>
<div id="myChart2"></div>
{% endblock content %}
{% block js-foot %}
<script>
var chart1 = new AdegaChart({
data_x: [0,1,2],
data_y: [6,10,2],
div_target: "myChart",
error_y: [1,2,3],
//type: "bar",
title: "Exemplo 1"
});
var chart1 = new AdegaChart({
data_x: [0,1,2],
data_y: [[6,10,2], [7,9,2.5]],
div_target: "myChart2",
error_y: [[1,2,3], [1.5,0.1,0.5]],
type:["bar", "scatter"],
title: "Exemplo 2",
legend: ["linha 1", "linha 2"]
});
</script>
{% endblock js-foot %}
\ No newline at end of file
{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class="row">
<div class="col-md-12">
<h2>Turmas de Ingresso</h2>
<table class="table datatable">
<thead>
<tr>
<th>Ano/Semestre</th>
<th>Ira médio</th>
<th>Quantidade Ingresso</th>
<th>Alunos Evadidos</th>
<th>Alunos Formados</th>
<th>Alunos Ativos</th>
</tr>
</thead>
<tbody>
{% for ti in listage_admissions %}
<tr>
<td>
<a href="{% url 'admission:detail' degree_id=degree.code ano=ti.ano semestre=ti.semestre %}">
{{ ti.ano }}/{{ ti.semestre }}
</a>
</td>
<td>{{ti.ira|floatformat:2}} &plusmn {{ti.desvio_padrao|floatformat:2}}</td>
<td> NO </td>
<td> NO </td>
<td> NO </td>
<td> NO </td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock content %}
from django.test import TestCase
# Create your tests here.
from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
from admission import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<ano>\d{4})/(?P<semestre>\w+)/$', views.detail, name='detail'),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
from django.shortcuts import render, redirect
from django.core.files.storage import FileSystemStorage
from django.contrib import messages
from degree.models import Degree
from report_api.views import get_list_admission
def detail(request, degree_id, ano, semestre):
degree = Degree.objects.get(code=degree_id)
if not (degree in request.user.educator.degree.all()):
return redirect("adega:dashboard")
return render(request, 'admission/detail.html',{
"degree": degree
})
def index(request, degree_id):
degree = Degree.objects.get(code=degree_id)
if not (degree in request.user.educator.degree.all()):
return redirect("adega:dashboard")
return render(request, 'admission/index.html', {
"listage_admissions": get_list_admission(request.session, degree),
"degree": degree
})
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class CourseConfig(AppConfig):
name = 'course'
from django.db import models
# Create your models here.
{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class="row">
<div class="col-md-12">
<h1>{{ nome_disciplina }}
<small>{{ codigo_disciplina }}</small>
</h1>
<br>
<h2>Informações Gerais</h2>
<table class="table">
<tr>
<td>Quantidade de matrículas</td>
<td>{% if analysis_result.qtd_alunos >= 0%}
{{ analysis_result.qtd_alunos }}
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Nota Média</td>
<td>{% if analysis_result.nota.0 >= 0%}
{{analysis_result.nota.0|floatformat:2}} &plusmn {{analysis_result.nota.1|floatformat:2}}
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Nota Média/ Último ano</td>
<td>{% if analysis_result.nota_ultimo_ano.0 >= 0%}
{{analysis_result.nota_ultimo_ano.0|floatformat:2}} &plusmn {{analysis_result.nota_ultimo_ano.1|floatformat:2}}
{% else %}
Desconhecido
{% endif %}</td>
</tr>
</table>
<h1>Taxas</h1>
<table class="table">
<tr>
<td>Taxa Reprovação</td>
<td>{% if analysis_result.taxa_reprovacao_absoluta >= 0%}
{{ analysis_result.taxa_reprovacao_absoluta|floatformat:2 }}%
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Taxa Reprovação Frequência </td>
<td>{% if analysis_result.taxa_reprovacao_frequencia >= 0%}
{{ analysis_result.taxa_reprovacao_frequencia|floatformat:2 }}%
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Taxa Reprovação/Último ano</td>
<td>{% if analysis_result.taxa_reprovacao_ultimo_absoluto >= 0%}
{{ analysis_result.taxa_reprovacao_ultimo_absoluto|floatformat:2 }}%
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Taxa Reprovação/Último ano Frequência</td>
<td>{% if analysis_result.taxa_reprovacao_ultimo_frequencia >= 0%}
{{ analysis_result.taxa_reprovacao_ultimo_frequencia|floatformat:2 }}%
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Quantidade de Aproveitamento de Conhecimento</td>
<td>
{% if analysis_result.qtd_conhecimento >= 0 %}
{{ analysis_result.qtd_conhecimento }}
{% else %}
Desconhecido
{% endif %}
</td>
</tr>
<tr>
<td>Taxa Aprovação/Aproveitamento de Conhecimento</td>
<td>{% if analysis_result.taxa_aproveitamento_conhecimento >= 0%}
{{ analysis_result.taxa_aproveitamento_conhecimento|floatformat:2 }}%
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Quantidade Trancamento</td>
<td>{% if analysis_result.qtd_trancamento >= 0%}
{{ analysis_result.qtd_trancamento }}
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Taxa Trancamento</td>
<td>{% if analysis_result.taxa_trancamento >= 0%}
{{ analysis_result.taxa_trancamento|floatformat:2 }}%
{% else %}
Desconhecido
{% endif %}</td>
</tr>
<tr>
<td>Quantidade Média de Vezes Cursada até Aprovação</td>
<td>{% if analysis_result.qtd_cursada_aprov >= 0 %}
{{ analysis_result.qtd_cursada_aprov|floatformat:2 }}
{% else %}
Desconhecido
{% endif %}</td>
</td>
</table>
<div id="aprovacao_semestre"></div>
<div id="myChart2"></div>
{% endblock content %}
{% block js-foot %}
<script>
var chart1 = new AdegaChart({
data: {{analysis_result.aprovacao_semestral|safe}},
div_target: "aprovacao_semestre",
//type: "bar",
title: "Índice de aprovação/Semestre",
fill: "none",
legend: ["Aprovação %","Quantidade de alunos"]
});
var chart1 = new AdegaChart({
data_x: [0,1,2],
data_y: [[6,10,2], [7,9,2.5]],
div_target: "myChart2",
error_y: [[1,2,3], [1.5,0.1,0.5]],
type:["bar", "scatter"],
title: "Exemplo 2",
legend: ["linha 1", "linha 2"]
});
</script>
{% endblock js-foot %}
\ No newline at end of file