Subversion Repositories bacoAlunos

Rev

Rev 1929 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1896 grupo1 1
<%@ page
2
        import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components.UnitsLearningResultYear" %>
3
<%@ page
4
        import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components.UnitsLearningResultSemester" %>
5
<%@ page
6
        import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components.UnitsLearningResultUc" %>
7
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
8
 
9
<!--
10
@section objeto com seccoes e componentes
11
@optional @chapter capitulo do documento para esta seccao para contcatenar às subsections
12
-->
13
 
14
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_CourseUnitsReportsSection">
15
    <div class="sections">
16
        <a name="indexCus"></a>
17
        <span ng-repeat="cu in section.sections" ng-init="cu.taxaAprovacao = 100 * cu.courseUnitEvaluation.numAlunosAprovTotal/(cu.courseUnitEvaluation.numAlunosInscritos - cu.courseUnitEvaluation.numAlunosSemElementosAvaliacao)">
18
            <a href="#cu{{$index}}" ng-class="{ 'alert-danger': (cu.courseUnitEvaluation.cumprimentoProgramaPercent &lt; 100) || cu.taxaAprovacao &lt; 75 || !cu.courseUnitEvaluation.closed || !cu.courseUnitEvaluation.teacherComplete}">
19
                {{cu.title}}
20
            </a> |
21
        </span>
22
        <div ng-repeat="cu in section.sections"
23
             class="section panel-primary">
24
 
25
            <a name="cu{{$index}}"></a>
26
            <span ng-if="$index != 0" class="glyphicon glyphicon-backward" ></span><a ng-if="$index != 0" href="#indexCus"> Voltar atrás</a>
27
            <div class="panel-heading"><h2>{{cu.title}}</h2></div>
28
 
29
            <div style="padding-left:20px">
30
                <div><h3><label class="label label-primary">Estado do Relatório</label></h3></div>
31
 
32
                <div ng-if="cu.courseUnitEvaluation.closed">
33
                    Entregue e Aceite
34
                </div>
35
                <div class="alert-danger" ng-if="cu.courseUnitEvaluation.closed && !cu.courseUnitEvaluation.teacherComplete">
36
                    Entregue mas não foi aprovado pela comissão
37
                </div>
38
                <div class="alert-danger" ng-if="!cu.courseUnitEvaluation.closed  && !cu.courseUnitEvaluation.teacherComplete">
39
                    Não foi entregue pelo docente para validação
40
                </div>
41
 
42
            </div>
43
 
44
 
45
            <div style="padding-left:20px">
46
                <div><h3><label class="label label-primary">Resultados</label></h3></div>
47
                <div>
48
                    <table class="tablesorter-blue"   width="100%">
49
                        <tr>
50
                            <th rowspan="2">
51
                                Nº Alunos Inscritos
52
                            </th>
53
                            <th rowspan="2">
54
                                Nº de alunos sem elementos de avaliação
55
                            </th>
56
                            <th colspan="5">
57
                                Nº de alunos aprovados em
58
                            </th>
59
                            <th colspan="2">
60
                                Aprovados com a classificação entre 10 e 13 valores
61
                            </th>
62
                            <th colspan="2">
63
                                Aprovados com a classificação entre 14 e 16 valores
64
                            </th>
65
                            <th colspan="2">
66
                                Aprovados com a classificação entre 17 e 20 valores
67
                            </th>
68
                        </tr>
69
                        <tr>
70
                            <th>Avaliação de frequência</th>
71
                            <th>Exame Época Normal</th>
72
                            <th>Exame Época Recurso</th>
73
                            <th>Exame Época Especial</th>
74
                            <th>Total</th>
75
                            <th>Nº</th>
76
                            <th>%</th>
77
                            <th>Nº</th>
78
                            <th>%</th>
79
                            <th>Nº</th>
80
                            <th>%</th>
81
                        </tr>
82
                        <tr>
83
                            <td class="text-center">
84
                                {{cu.courseUnitEvaluation.numAlunosInscritos}}
85
                            </td>
86
                            <td class="text-center">
87
                                {{cu.courseUnitEvaluation.numAlunosSemElementosAvaliacao}}
88
                            </td>
89
                            <td class="text-center">
90
                                {{cu.courseUnitEvaluation.numAlunosAprovFrequencia}}
91
                            </td>
92
                            <td class="text-center">
93
                                {{cu.courseUnitEvaluation.numAlunosAprovNormal}}
94
                            </td>
95
                            <td class="text-center">
96
                                {{cu.courseUnitEvaluation.numAlunosAprovRecurso}}
97
                            </td>
98
                            <td style="text-align: center">
99
                                {{cu.courseUnitEvaluation.numAlunosAprovEspecial}}
100
                            </td>
101
                            <td class="text-center">
102
                                {{cu.courseUnitEvaluation.numAlunosAprovTotal}}
103
                            </td>
104
                            <td class="text-center">
105
                                {{cu.courseUnitEvaluation.numAlunosAprov1013}}
106
                            </td>
107
                            <td class="text-center">
108
                                {{cu.courseUnitEvaluation.numAlunosAprov1013Percent}}
109
                            </td>
110
                            <td class="text-center">
111
                                {{cu.courseUnitEvaluation.numAlunosAprov1416}}
112
                            </td>
113
                            <td class="text-center">
114
                                {{cu.courseUnitEvaluation.numAlunosAprov1416Percent}}
115
                            </td>
116
                            <td class="text-center">
117
                                {{cu.courseUnitEvaluation.numAlunosAprov1720}}
118
                            </td>
119
                            <td class="text-center">
120
                                {{cu.courseUnitEvaluation.numAlunosAprov1720Percent}}
121
                            </td>
122
                        </tr>
123
                    </table>
124
                </div>
125
            </div>
126
 
127
            <div style="padding-left:20px" >
128
                <div><h3><label class="label label-primary">Taxa de Aprovação</label></h3></div>
129
                <div ng-class="{ 'alert-danger': cu.taxaAprovacao &lt; 75 }">{{cu.taxaAprovacao}}%</div>
130
            </div>
131
 
132
 
133
 
134
            <div style="padding-left:20px">
135
                <div><h3><label class="label label-primary">Apreciação dos resultados quantitativos obtidos pelos estudantes</label></h3></div>
136
                <div>{{cu.courseUnitEvaluation.qualApreciacaoQuantitivos}}</div>
137
            </div>
138
            <div style="padding-left:20px">
139
                <div><h3><label class="label label-primary">Apreciação do funcionamento da UC</label></h3></div>
140
                <div>{{cu.courseUnitEvaluation.qualApreciacaoUC}}</div>
141
            </div>
142
            <div style="padding-left:20px">
143
                <div><h3><label class="label label-primary">Percentagem de cumprimento do programa da UC</label></h3></div>
144
                <div ng-class="{ 'alert-danger': (cu.courseUnitEvaluation.cumprimentoProgramaPercent &lt; 100) }">
145
                    {{cu.courseUnitEvaluation.cumprimentoProgramaPercent}}%
146
                </div>
147
            </div>
148
            <div style="padding-left:20px">
149
                <div><h3><label class="label label-primary">Apreciação do cumprimento do programa da UC</label></h3></div>
150
                <div>{{cu.courseUnitEvaluation.qualApreciacaoCumprimentoPrograma}}</div>
151
            </div>
152
            <div style="padding-left:20px">
153
                <div><h3><label class="label label-primary">Conclusões</label></h3></div>
154
                <div>{{cu.courseUnitEvaluation.qualConclusoes}}</div>
155
            </div>
156
        </div>
157
    </div>
158
</script>
159
 
160
 
161
 
162
<style>
163
    .dtpstats td, .dtpstats th{
164
        text-align: center !important;
165
    }
166
</style>
167
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_reportucsummary_UnitsDtpTable">
168
    <div class="sections">
169
 
170
        <table class="table dtpstats">
171
            <thead>
172
            <tr>
173
                <th rowspan="2">Unidade Curricular</th>
174
                <th colspan="2">Planeamento</th>
175
                <th rowspan="2">Ficha Curricular</th>
176
                <th rowspan="2">Sumários</th>
177
                <th colspan="2">Avaliação</th>
178
                <th rowspan="2">Relatório de Avaliação</th>
179
                <th rowspan="2">Inquerito Pedagógico</th>
180
            </tr>
181
            <tr>
182
                <th>Conteúdos</th>
183
                <th>Calendarização</th>
184
                <th>Enunciados</th>
185
                <th>Pautas</th>
186
            </tr>
187
            </thead>
188
            <tbody>
189
            <tr>
190
                <th colspan="9">Semestre 1</th>
191
            </tr>
192
            <tr ng-repeat="dtpStat in comp.semester1.courseUnitDtpStats">
193
                <td>{{dtpStat.name}}</td>
194
                <td ng-class="{ 'alert-danger' : !dtpStat.planeamentoConteudos }"><input type="checkbox" ng-model="dtpStat.planeamentoConteudos"/></td>
195
                <td ng-class="{ 'alert-danger' : !dtpStat.planeamentoCalendarizacao }"><input  type="checkbox" ng-model="dtpStat.planeamentoCalendarizacao"/></td>
196
                <td ng-class="{ 'alert-danger' : !dtpStat.ficha }"><input  type="checkbox" ng-model="dtpStat.ficha"/></td>
197
                <td ng-class="{ 'alert-danger' : !dtpStat.sumarios }"><input  type="checkbox" ng-model="dtpStat.sumarios"/></td>
198
                <td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoEnunciados }"><input  type="checkbox" ng-model="dtpStat.avaliacaoEnunciados"/></td>
199
                <td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoPautas }"><input  type="checkbox" ng-model="dtpStat.avaliacaoPautas"/></td>
200
                <td ng-class="{ 'alert-danger' : !dtpStat.relatorio }"><input  type="checkbox" ng-model="dtpStat.relatorio"/></td>
201
                <td ng-class="{ 'alert-danger' : !dtpStat.inquerito }"><input  type="checkbox" ng-model="dtpStat.inquerito"/></td>
202
            </tr>
203
            <tr>
204
                <th colspan="9">Semestre 2</th>
205
            </tr>
206
            <tr ng-repeat="dtpStat in comp.semester2.courseUnitDtpStats">
207
                <td>{{dtpStat.name}}</td>
208
                <td ng-class="{ 'alert-danger' : !dtpStat.planeamentoConteudos }"><input type="checkbox" ng-model="dtpStat.planeamentoConteudos"/></td>
209
                <td ng-class="{ 'alert-danger' : !dtpStat.planeamentoCalendarizacao }"><input  type="checkbox" ng-model="dtpStat.planeamentoCalendarizacao"/></td>
210
                <td ng-class="{ 'alert-danger' : !dtpStat.ficha }"><input  type="checkbox" ng-model="dtpStat.ficha"/></td>
211
                <td ng-class="{ 'alert-danger' : !dtpStat.sumarios }"><input  type="checkbox" ng-model="dtpStat.sumarios"/></td>
212
                <td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoEnunciados }"><input  type="checkbox" ng-model="dtpStat.avaliacaoEnunciados"/></td>
213
                <td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoPautas }"><input  type="checkbox" ng-model="dtpStat.avaliacaoPautas"/></td>
214
                <td ng-class="{ 'alert-danger' : !dtpStat.relatorio }"><input  type="checkbox" ng-model="dtpStat.relatorio"/></td>
215
                <td ng-class="{ 'alert-danger' : !dtpStat.inquerito }"><input  type="checkbox" ng-model="dtpStat.inquerito"/></td>
216
            </tr>
217
            </tbody>
218
        </table>
219
    </div>
220
</script>
221
 
222
 
223
 
224
<style>
225
    .learning td
226
    {
227
        font-size: 0.7em;
228
    }
229
    .learning td input{
230
        width: 50px;
231
    }
232
 
233
    .learning td input:read-only{
234
        width: 50px;
235
        background-color: #cccccc;
236
    }
237
    .learning tr.year td {
238
        vertical-align: top;
239
        background-color: #aaaaaa;
240
 
241
        font-weight: bold;
242
    }
243
    .learning tr.period td {
244
        vertical-align: top;
245
        background-color: #dfdfdf;
246
 
247
    }
248
</style>
249
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_UnitsLearningResultsTable">
250
    <unitslearningresultstable>
251
    </unitslearningresultstable>
252
</script>
253
 
254
 
255
 
256
<script>
1901 grupo1 257
    angular.module("courseReportApp").directive('boundModel', function() {
258
        return {
259
            require: 'ngModel',
260
            link: function(scope, elem, attrs, ngModel) {
261
                scope.$watch(attrs.boundModel, function(newValue, oldValue) {
262
                    if(newValue != oldValue) {
263
                        ngModel.$setViewValue(newValue);
264
                        ngModel.$render();
265
                    }
266
                });
267
            }
1896 grupo1 268
        }
1901 grupo1 269
    });
270
    angular.module("courseReportApp").directive('unitslearningresultstable', function() {
1896 grupo1 271
 
1901 grupo1 272
        return {
273
            restrict: 'E',
274
            link: function($scope, element, attrs)
275
            {
1896 grupo1 276
 
1901 grupo1 277
                $scope.checkedDocuments = [];
278
                $scope.checkUnit = function(document,collection)
1896 grupo1 279
                {
1901 grupo1 280
                    if(document.checked)
1896 grupo1 281
                    {
1901 grupo1 282
                        var docContainer =
1930 grupo1 283
                        {
284
                            "document" : document,
285
                            "collection" : collection
286
                        }
1901 grupo1 287
                        $scope.checkedDocuments.push(docContainer);
1896 grupo1 288
                    }
1901 grupo1 289
                    else
290
                    {
291
                        angular.forEach($scope.checkedDocuments, function(documentContainer, key)
292
                        {
293
                            if(documentContainer.document == document)
294
                            {
295
                                var index = $scope.checkedDocuments.indexOf(documentContainer);
296
                                $scope.checkedDocuments.splice(index, 1);
297
                            }
298
                        });
299
                    }
1896 grupo1 300
                }
1901 grupo1 301
                $scope.changeDocumentCollection = function(collection)
1896 grupo1 302
                {
303
                    angular.forEach($scope.checkedDocuments, function(documentContainer, key)
304
                    {
1901 grupo1 305
                        collection.ucs.push(documentContainer.document);
306
                        delete documentContainer.document.checked;
1896 grupo1 307
                    });
1901 grupo1 308
                    angular.forEach($scope.checkedDocuments, function(documentContainer, key)
309
                    {
310
                        var index = documentContainer.collection.ucs.indexOf(documentContainer.document);
311
                        documentContainer.collection.ucs.splice(index, 1);
312
                    });
313
                    $scope.checkedDocuments = [];
1896 grupo1 314
                }
1901 grupo1 315
                $scope.avg = function(field,container, childs)
1896 grupo1 316
                {
1901 grupo1 317
                    if(!childs || childs.length == 0)
318
                        return 0;
319
                    var sum = 0;
320
                    var c;
321
                    for(c in childs)
322
                    {
323
                        if(childs[c] && childs[c][field])
324
                            sum += 1*childs[c][field];
325
                    }
326
                    container[field] = sum / childs.length;
327
                    return container[field];
328
                }
329
                $scope.percent = function(n,total)
1896 grupo1 330
                {
1901 grupo1 331
                    if(!n || n == 0 || !total || total == 0)
332
                        return 0;
333
                    return 100 * n / total;
334
                }
335
                $scope.reprovados = function(comp)
336
                {
337
                    if(comp.alunosInscritos && comp.semElementos && comp.aprovados)
338
                        return comp.alunosInscritos - comp.semElementos - comp.aprovados;
1896 grupo1 339
                    return 0;
1901 grupo1 340
                }
341
                $scope.removeComponent = function(index,list)
1896 grupo1 342
                {
1901 grupo1 343
                    list.splice(index,1);
1896 grupo1 344
                }
1901 grupo1 345
                $scope.hasYearUnits = function(year)
1896 grupo1 346
                {
1901 grupo1 347
                    for(s in year.semesters)
348
                    {
349
                        if(year.semesters[s].ucs && year.semesters[s].ucs.length > 0)
350
                            return true;
351
                    }
352
                    return false;
1896 grupo1 353
                }
1901 grupo1 354
                $scope.isInvalidAnfHaveUcs = function(year,years,index)
355
                {
356
                    if(year.ano > 0)
357
                        return false;
358
 
359
                    var s;
360
                    for(s in year.semesters)
361
                    {
362
                        if(year.semesters[s].ucs && year.semesters[s].ucs.length > 0)
363
                            return true;
364
                    }
365
                    years.splice(index,1);
1896 grupo1 366
                    return false;
1901 grupo1 367
                }
368
                $scope.addUc = function(semestre)
1896 grupo1 369
                {
1901 grupo1 370
                    semestre.ucs.push(
1930 grupo1 371
                            {
372
                                "@class" : "<%=UnitsLearningResultUc.class.getName()%>",
373
                                manual : true,
374
                                periodo : semestre.semestre,
375
                                alunosInscritos: 0,
376
                                aprovados: 0,
377
                                aprovados1013: 0,
378
                                aprovados1013Percent: 0,
379
                                aprovados1416: 0,
380
                                aprovados1416Percent: 0,
381
                                aprovados1720: 0,
382
                                aprovados1720Percent: 0,
383
                                aprovadosPercent: 0,
384
                                cumprimentoProgramaPercent: 0,
385
                                reprovados: 0,
386
                                reprovadosPercent: 0,
387
                                semElementos: 0,
388
                                semElementosPercent: 0,
389
                                sigesCode : 0
390
                            }
1901 grupo1 391
                    );
392
                }
393
                $scope.addAno = function(comp)
394
                {
395
                    if(!comp.years)
396
                        comp.years = [];
397
                    comp.years.push(
1930 grupo1 398
                            {
399
                                ano : 1,
400
                                "@class" : "<%=UnitsLearningResultYear.class.getName()%>",
401
                                manual : true,
402
                                "alunosInscritos": 0,
403
                                "aprovados": 0,
404
                                "aprovados1013": 0,
405
                                "aprovados1013Percent": 0,
406
                                "aprovados1416": 0,
407
                                "aprovados1416Percent": 0,
408
                                "aprovados1720": 0,
409
                                "aprovados1720Percent": 0,
410
                                "aprovadosPercent": 0,
411
                                "cumprimentoProgramaPercent": 0,
412
                                "reprovados": 0,
413
                                "reprovadosPercent": 0,
414
                                "semElementos": 0,
415
                                "semElementosPercent": 0,
416
                                semesters : [
417
                                    {
418
                                        "@class" : "<%=UnitsLearningResultSemester.class.getName()%>",
419
                                        manual : true,
420
                                        semestre : "S1",
421
                                        alunosInscritos: 0,
422
                                        aprovados: 0,
423
                                        aprovados1013: 0,
424
                                        aprovados1013Percent: 0,
425
                                        aprovados1416: 0,
426
                                        aprovados1416Percent: 0,
427
                                        aprovados1720: 0,
428
                                        aprovados1720Percent: 0,
429
                                        aprovadosPercent: 0,
430
                                        cumprimentoProgramaPercent: 0,
431
                                        reprovados: 0,
432
                                        reprovadosPercent: 0,
433
                                        semElementos: 0,
434
                                        semElementosPercent: 0,
435
                                        ucs : []
436
                                    },
437
                                    {
438
                                        "@class" : "<%=UnitsLearningResultSemester.class.getName()%>",
439
                                        manual : true,
440
                                        semestre: "S2",
441
                                        alunosInscritos: 0,
442
                                        aprovados: 0,
443
                                        aprovados1013: 0,
444
                                        aprovados1013Percent: 0,
445
                                        aprovados1416: 0,
446
                                        aprovados1416Percent: 0,
447
                                        aprovados1720: 0,
448
                                        aprovados1720Percent: 0,
449
                                        aprovadosPercent: 0,
450
                                        cumprimentoProgramaPercent: 0,
451
                                        reprovados: 0,
452
                                        reprovadosPercent: 0,
453
                                        semElementos: 0,
454
                                        semElementosPercent: 0,
455
                                        ucs : []
456
                                    }
457
                                ]
458
                            }
1901 grupo1 459
                    );
460
                }
461
 
462
            },
463
            templateUrl: function(elem,attrs) {
464
                return "unitslearningresultstable";
1896 grupo1 465
            }
466
        }
1901 grupo1 467
    });
1896 grupo1 468
</script>
469
<script type="text/ng-template" id="unitslearningresultstable">
470
 
471
 
472
    <div class="sections">
473
        <button class="btn btn-success" ng-click="addAno(comp)"><span class="glyphicon glyphicon-plus"></span> Ano Manual</button>
474
        <table class="table learning">
475
            <thead>
476
            <tr>
477
                <th rowspan="2">Mover</th>
478
                <th rowspan="2">Código</th>
479
                <th rowspan="2">Unidade Curricular</th>
480
                <th rowspan="2">Cumprimento do Programa</th>
481
                <th rowspan="2">Alunos Inscritos</th>
482
                <th colspan="2">Sem Elementos</th>
483
                <th colspan="2">Reprovados</th>
484
                <th colspan="2">Aprovados</th>
485
                <th colspan="2">Aprovados 10-13</th>
486
                <th colspan="2">Aprovados 14-16</th>
487
                <th colspan="2">Aprovados 17-20</th>
488
            </tr>
489
            <tr>
490
                <th>N</th>
491
                <th>%</th>
492
                <th>N</th>
493
                <th>%</th>
494
                <th>N</th>
495
                <th>%</th>
496
                <th>N</th>
497
                <th>%</th>
498
                <th>N</th>
499
                <th>%</th>
500
                <th>N</th>
501
                <th>%</th>
502
            </tr>
503
            </thead>
504
            <tbody>
505
            <tr colspan="17" ng-if="false" ng-repeat-start="year in comp.years"></tr>
506
            <tr class="year">
507
                <td colspan="3" ng-if="year.ano &gt; 0">
508
 
509
                    <button ng-disabled="hasYearUnits(year)" class="btn btn-danger btn-xs" ng-click="removeComponent($index,comp.years)"><span class="glyphicon glyphicon-remove"></span></button>
510
                    <span ng-if="!year.manual">{{year.ano}}ª ano</span>
511
                    <span ng-if="year.manual">
512
                        <select ng-model="year.ano" ng-options="c.v as c.n for c in [{v:1,n:'1º Ano'},{v:2,n:'2º Ano'},{v:3,n:'3º Ano'},{v:4,n:'4º Ano'},{v:5,n:'5º Ano'}]">
513
                        </select>
514
                    </span>
515
 
516
                </td>
517
                <td colspan="3" style="font-size: 1.0em !important" ng-if="isInvalidAnfHaveUcs(year,comp.years,$index)">
518
                    Unidades que não constam do plano (Verifique a situação com os serviços Académicos antes de continuar)
519
                    poderão constar de um plano antigo ou ter o código siges desatualizado.
520
                </td>
521
                <td><input readonly="true" type="number" ng-model="year.cumprimentoProgramaPercent" bound-model="avg('cumprimentoProgramaPercent',year,year.semesters)"></td>
522
                <td><input readonly="true" type="number" ng-model="year.alunosInscritos" bound-model="avg('alunosInscritos',year,year.semesters)"></td>
523
                <td><input readonly="true" type="number" ng-model="year.semElementos" bound-model="avg('semElementos',year,year.semesters)"></td>
524
                <td><input readonly="true" type="number" ng-model="year.semElementosPercent" bound-model="percent(year.semElementos,year.alunosInscritos)"></td>
525
                <td><input readonly="true" type="number" ng-model="year.reprovados"  bound-model="reprovados(year)"></td>
526
                <td><input readonly="true" type="number" ng-model="year.reprovadosPercent" bound-model="percent(year.reprovados,year.alunosInscritos)"></td>
527
                <td><input readonly="true" type="number" ng-model="year.aprovados" bound-model="year.aprovados1013*1 + year.aprovados1416*1 + year.aprovados1720*1"></td>
528
                <td><input readonly="true" type="number" ng-model="year.aprovadosPercent" bound-model="percent(year.aprovados,year.alunosInscritos)"></td>
529
 
530
                <td><input readonly="true" type="number" ng-model="year.aprovados1013" bound-model="avg('aprovados1013',year,year.semesters)"></td>
531
                <td><input readonly="true" type="number" ng-model="year.aprovados1013Percent" bound-model="percent(year.aprovados1013,year.aprovados)"></td>
532
                <td><input readonly="true" type="number" ng-model="year.aprovados1416" bound-model="avg('aprovados1416',year,year.semesters)"></td>
533
                <td><input readonly="true" type="number" ng-model="year.aprovados1416Percent" bound-model="percent(year.aprovados1416,year.aprovados)"></td>
534
                <td><input readonly="true" type="number" ng-model="year.aprovados1720" bound-model="avg('aprovados1720',year,year.semesters)"></td>
535
                <td><input readonly="true" type="number" ng-model="year.aprovados1720Percent" bound-model="percent(year.aprovados1720,year.aprovados)"></td>
536
            </tr>
537
 
538
            <tr ng-if="false" ng-repeat-start="s in year.semesters" ></tr>
539
            <tr class="period" ng-if="year.ano &gt; 0 || s.ucs.length > 0">
540
                <td colspan="3" class="period">Semestre {{s.semestre}} <button ng-click="changeDocumentCollection(s)" data-toggle="tooltip" title="Mover unidades para aqui" class="btn btn-xs btn-warning" ng-show="checkedDocuments.length"><span class="glyphicon glyphicon-arrow-left"></span></button>
541
 
542
                    <button class="btn btn-success pull-right" ng-click="addUc(s)"><span class="glyphicon glyphicon-plus"></span> UC Manual</button>
543
                </td>
544
                <td><input readonly="true" type="number" ng-model="s.cumprimentoProgramaPercent" bound-model="avg('cumprimentoProgramaPercent',s,s.ucs)"></td>
545
                <td><input readonly="true" type="number" ng-model="s.alunosInscritos" bound-model="avg('alunosInscritos',s,s.ucs)"></td>
546
                <td><input readonly="true" type="number" ng-model="s.semElementos" bound-model="avg('semElementos',s,s.ucs)"></td>
547
                <td><input readonly="true" type="number" ng-model="s.semElementosPercent" bound-model="percent(s.semElementos,s.alunosInscritos)"></td>
548
                <td><input readonly="true" type="number" ng-model="s.reprovados"  bound-model="reprovados(s)"></td>
549
                <td><input readonly="true" type="number" ng-model="s.reprovadosPercent" bound-model="percent(s.reprovados,s.alunosInscritos)"></td>
550
                <td><input readonly="true" type="number" ng-model="s.aprovados" bound-model="s.aprovados1013*1 + s.aprovados1416*1 + s.aprovados1720*1"></td>
551
                <td><input readonly="true" type="number" ng-model="s.aprovadosPercent" bound-model="percent(s.aprovados,s.alunosInscritos)"></td>
552
 
553
                <td><input readonly="true" type="number" ng-model="s.aprovados1013" bound-model="avg('aprovados1013',s,s.ucs)"></td>
554
                <td><input readonly="true" type="number" ng-model="s.aprovados1013Percent" bound-model="percent(s.aprovados1013,s.aprovados)"></td>
555
                <td><input readonly="true" type="number" ng-model="s.aprovados1416" bound-model="avg('aprovados1416',s,s.ucs)"></td>
556
                <td><input readonly="true" type="number" ng-model="s.aprovados1416Percent" bound-model="percent(s.aprovados1416,s.aprovados)"></td>
557
                <td><input readonly="true" type="number" ng-model="s.aprovados1720" bound-model="avg('aprovados1720',s,s.ucs)"></td>
558
                <td><input readonly="true" type="number" ng-model="s.aprovados1720Percent" bound-model="percent(s.aprovados1720,s.aprovados)"></td>
559
            </tr>
560
            <tr ng-repeat="u in s.ucs" ng-class="{'alert-danger': u.error}" >
561
                <td><input ng-model="u.error" type="hidden" bound-model="u.alunosInscritos < (u.aprovados*1 + u.semElementos*1)">
562
                    <input ng-model="u.checked" ng-click="checkUnit(u,s)" type="checkbox"></td>
563
                <td><input type="text" ng-readonly="!u.manual || u.manual == false" ng-model="u.sigesCode"></td>
564
                <td>
565
 
566
                    <input type="text" style="width: 150px" ng-if="!(!u.manual || u.manual == false)" ng-model="u.name">
567
                    <span ng-if="(!u.manual || u.manual == false)">{{u.name}}</span>
568
                    <button class="btn btn-danger btn-xs pull-right" ng-if="!(!u.manual || u.manual == false)" ng-click="removeComponent(index,s.ucs)"><span class="glyphicon glyphicon-remove"></span></button>
569
                </td>
570
                <td><input type="number" ng-model="u.cumprimentoProgramaPercent"></td>
571
                <td><input type="number" ng-model="u.alunosInscritos"></td>
572
                <td><input type="number" ng-model="u.semElementos"></td>
573
                <td><input readonly="true" type="number" ng-model="u.semElementosPercent" bound-model="percent(u.semElementos,u.alunosInscritos)"></td>
574
                <td><input readonly="true" type="number" ng-model="u.reprovados" bound-model="reprovados(u)"></td>
575
                <td><input readonly="true" type="number" ng-model="u.reprovadosPercent" bound-model="percent(u.reprovados,u.alunosInscritos)"></td>
576
                <td><input readonly="true" type="number" ng-model="u.aprovados" bound-model="u.aprovados1013*1 + u.aprovados1416*1 + u.aprovados1720*1"></td>
577
                <td><input readonly="true" type="number" ng-model="u.aprovadosPercent" bound-model="percent(u.aprovados,u.alunosInscritos)"></td>
578
 
579
                <td><input type="number" ng-model="u.aprovados1013"></td>
580
                <td><input readonly="true" type="number" ng-model="u.aprovados1013Percent" bound-model="percent(u.aprovados1013,u.aprovados)"></td>
581
                <td><input type="number" ng-model="u.aprovados1416"></td>
582
                <td><input readonly="true" type="number" ng-model="u.aprovados1416Percent" bound-model="percent(u.aprovados1416,u.aprovados)"></td>
583
                <td><input type="number" ng-model="u.aprovados1720"></td>
584
                <td><input readonly="true" type="number" ng-model="u.aprovados1720Percent" bound-model="percent(u.aprovados1720,u.aprovados)"></td>
585
            </tr>
586
            <tr ng-if="false" ng-repeat-end></tr>
587
            <tr ng-if="false" ng-repeat-end></tr>
588
            <tr class="year">
589
                <td colspan="3">Resultados Globais</td>
590
 
591
 
592
                <td><input readonly="true" type="number" ng-model="comp.cumprimentoProgramaPercent" bound-model="avg('cumprimentoProgramaPercent',comp,comp.years)"></td>
593
                <td><input readonly="true" type="number" ng-model="comp.alunosInscritos" bound-model="avg('alunosInscritos',comp,comp.years)"></td>
594
                <td><input readonly="true" type="number" ng-model="comp.semElementos" bound-model="avg('semElementos',comp,comp.years)"></td>
595
                <td><input readonly="true" type="number" ng-model="comp.semElementosPercent" bound-model="percent(comp.semElementos,comp.alunosInscritos)"></td>
596
                <td><input readonly="true" type="number" ng-model="comp.reprovados"  bound-model="reprovados(comp)"></td>
597
                <td><input readonly="true" type="number" ng-model="comp.reprovadosPercent" bound-model="percent(comp.reprovados,comp.alunosInscritos)"></td>
598
                <td><input readonly="true" type="number" ng-model="comp.aprovados" bound-model="comp.aprovados1013*1 + comp.aprovados1416*1 + comp.aprovados1720*1"></td>
599
                <td><input readonly="true" type="number" ng-model="comp.aprovadosPercent" bound-model="percent(comp.aprovados,comp.alunosInscritos)"></td>
600
 
601
                <td><input readonly="true" type="number" ng-model="comp.aprovados1013" bound-model="avg('aprovados1013',comp,comp.years)"></td>
602
                <td><input readonly="true" type="number" ng-model="comp.aprovados1013Percent" bound-model="percent(comp.aprovados1013,comp.aprovados)"></td>
603
                <td><input readonly="true" type="number" ng-model="comp.aprovados1416" bound-model="avg('aprovados1416',comp,comp.years)"></td>
604
                <td><input readonly="true" type="number" ng-model="comp.aprovados1416Percent" bound-model="percent(comp.aprovados1416,comp.aprovados)"></td>
605
                <td><input readonly="true" type="number" ng-model="comp.aprovados1720" bound-model="avg('aprovados1720',comp,comp.years)"></td>
606
                <td><input readonly="true" type="number" ng-model="comp.aprovados1720Percent" bound-model="percent(comp.aprovados1720,comp.aprovados)"></td>
607
            </tr>
608
            </tbody>
609
        </table>
610
        <%--<pre class="code">{{ comp | json }}</pre>--%>
611
    </div>
612
</script>
613
 
614
 
615
 
1901 grupo1 616
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_GlobalLearningResultsChartImg">
617
    <globallearningresultschartimg>
618
    </globallearningresultschartimg>
619
</script>
620
<script>
621
    angular.module("courseReportApp").directive('globallearningresultschartimg', function() {
1896 grupo1 622
 
1901 grupo1 623
        return {
624
            restrict: 'E',
625
            link: function($scope, element, attrs)
626
            {
627
                $scope.generateChart = function(comp)
628
                {
1896 grupo1 629
 
1901 grupo1 630
                    widgetCallWithActionParameters(
1930 grupo1 631
                            "<%=request.getContextPath()%>/user/courseReport.do",
632
                            "generateGlobalLearningResultsChartImg",
633
                            {
634
                                "courseReportDocument" : BacoJS.stringifyOrdered(angular.element($("#courseReportApp")).scope().report)
635
                            },
636
                            "#courseReportApp",
637
                            function(repositoryFile4JsonView)
638
                            {
639
                                comp.image = repositoryFile4JsonView;
640
                                comp.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + comp.image.identifier + "?" + new Date().getTime();
641
                                angular.element($("#courseReportApp")).scope().$apply();
642
                            },
643
                            function(){}
1901 grupo1 644
                    );
645
                }
1896 grupo1 646
 
647
 
1901 grupo1 648
            },
649
            templateUrl: function(elem,attrs) {
1930 grupo1 650
                return "chartcomponenttemplate";
1901 grupo1 651
            }
652
        }
653
    });
654
</script>
1930 grupo1 655
<script type="text/ng-template" id="chartcomponenttemplate">
1901 grupo1 656
    <div class="imageComponent component">
1896 grupo1 657
 
1901 grupo1 658
        <div class="componentBody">
659
            <div class="form-group clearfix">
660
                <label class="col-md-2 control-label">Legenda</label>
661
                <div class="col-md-10">
662
                    <input type="text" class="form-control" rows="10" ng-model="comp.title">
663
                </div>
664
            </div>
665
            <div class="form-group clearfix">
666
                <div class="col-md-2 control-label">
667
                    <button class="btn btn-default" ng-click="generateChart(comp)">Refrescar/Gerar Gráfico</button>
668
                </div>
669
                <div class="col-md-10">
670
                    <label ng-if="comp.image.identifier"> Limites do PDF </label>
671
                    <div ng-if="comp.image.identifier" style="text-align: center; width: 595px; border: 1px solid black; padding: 45px">
672
                        <center>
673
                            <div style="width: 200px;height: 200px; max-width: 500px; max-height: 750px" resizable on-resize="resize($evt, $ui, comp)">
674
                                <img ng-if="comp.imageUrl" style="width: 100%;height: 100%"  ng-src="{{comp.imageUrl}}">
675
                                <img ng-if="!comp.imageUrl" style="width: 100%;height: 100%"  ng-src="{{'<%=request.getContextPath()%>/repositoryStream/' + comp.image.identifier}}">
676
                            </div>
677
                            (Se desejar altere o tamanho da imagem arrastando no canto inferior direito)
678
                        </center>
679
                    </div>
680
                </div>
681
            </div>
682
        </div>
683
    </div>
684
</script>
1896 grupo1 685
 
686
 
1901 grupo1 687
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_GlobalLearningResultsChartYearImg">
688
    <globallearninglesultschartyearimg>
689
    </globallearninglesultschartyearimg>
690
</script>
1896 grupo1 691
 
692
<script>
1901 grupo1 693
    angular.module("courseReportApp").directive('globallearninglesultschartyearimg', function() {
1896 grupo1 694
 
695
        return {
696
            restrict: 'E',
697
            link: function($scope, element, attrs)
698
            {
699
                $scope.generateChart = function(comp)
700
                {
701
 
702
                    widgetCallWithActionParameters(
1930 grupo1 703
                            "<%=request.getContextPath()%>/user/courseReport.do",
704
                            "generateGlobalLearningResultsChartYearImg",
705
                            {
706
                                "courseReportDocument" : BacoJS.stringifyOrdered(angular.element($("#courseReportApp")).scope().report)
707
                            },
708
                            "#courseReportApp",
709
                            function(repositoryFile4JsonView)
710
                            {
711
                                comp.image = repositoryFile4JsonView;
712
                                comp.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + comp.image.identifier + "?" + new Date().getTime();
713
                                angular.element($("#courseReportApp")).scope().$apply();
714
                            },
715
                            function(){}
1896 grupo1 716
                    );
717
                }
718
 
719
 
720
            },
721
            templateUrl: function(elem,attrs) {
1930 grupo1 722
                return "chartcomponenttemplate";
1896 grupo1 723
            }
724
        }
725
    });
726
</script>
727
 
1929 grupo1 728
 
729
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_LearningResultsChartSem">
730
    <learningresultschartsem>
731
    </learningresultschartsem>
732
</script>
733
 
734
<script>
735
    angular.module("courseReportApp").directive('learningresultschartsem', function() {
736
 
737
        return {
738
            restrict: 'E',
739
            link: function($scope, element, attrs)
740
            {
741
                $scope.generateChart = function(comp)
742
                {
743
 
744
                    widgetCallWithActionParameters(
745
                            "<%=request.getContextPath()%>/user/courseReport.do",
746
                            "generateGenerateGlobalLearningResultsChartSem",
747
                            {
748
                                "courseReportDocument" : BacoJS.stringifyOrdered(angular.element($("#courseReportApp")).scope().report),
749
                                "semesterCode" : comp.semesterCode
750
                            },
751
                            "#courseReportApp",
752
                            function(repositoryFile4JsonView)
753
                            {
754
                                comp.image = repositoryFile4JsonView;
755
                                comp.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + comp.image.identifier + "?" + new Date().getTime();
756
                                angular.element($("#courseReportApp")).scope().$apply();
757
                            },
758
                            function(){}
759
                    );
760
                }
761
 
762
 
763
            },
764
            templateUrl: function(elem,attrs) {
1930 grupo1 765
                return "chartcomponenttemplate";
1929 grupo1 766
            }
767
        }
768
    });
769
</script>