Subversion Repositories bacoAlunos

Rev

Rev 1967 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1871 jmachado 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>
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
        }
268
    }
269
});
270
angular.module("courseReportApp").directive('unitslearningresultstable', function() {
271
 
272
    return {
273
        restrict: 'E',
274
        link: function($scope, element, attrs)
275
        {
276
 
277
            $scope.checkedDocuments = [];
278
            $scope.checkUnit = function(document,collection)
279
            {
280
                if(document.checked)
281
                {
282
                    var docContainer =
283
                    {
284
                        "document" : document,
285
                        "collection" : collection
286
                    }
287
                    $scope.checkedDocuments.push(docContainer);
288
                }
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
                }
300
            }
301
            $scope.changeDocumentCollection = function(collection)
302
            {
303
                angular.forEach($scope.checkedDocuments, function(documentContainer, key)
304
                {
305
                    collection.ucs.push(documentContainer.document);
306
                    delete documentContainer.document.checked;
307
                });
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 = [];
314
            }
315
            $scope.avg = function(field,container, childs)
316
            {
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)
330
            {
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;
339
                return 0;
340
            }
341
            $scope.removeComponent = function(index,list)
342
            {
343
                list.splice(index,1);
344
            }
345
            $scope.hasYearUnits = function(year)
346
            {
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;
353
            }
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);
366
                return false;
367
            }
368
            $scope.addUc = function(semestre)
369
            {
370
                semestre.ucs.push(
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
                        }
391
                );
392
            }
393
            $scope.addAno = function(comp)
394
            {
395
                if(!comp.years)
396
                    comp.years = [];
397
                comp.years.push(
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
                        }
459
                );
460
            }
461
 
462
        },
463
        templateUrl: function(elem,attrs) {
464
            return "unitslearningresultstable";
465
        }
466
    }
467
});
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
 
616
 
617
 
618
 
619
 
620
 
621
 
622
 
623
 
624
 
625
 
626
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_GlobalLearningResultsChartImg">
627
    <globallearningresultschartimg>
628
    </globallearningresultschartimg>
629
</script>
630
<script>
631
    angular.module("courseReportApp").directive('globallearningresultschartimg', function() {
632
 
633
        return {
634
            restrict: 'E',
635
            link: function($scope, element, attrs)
636
            {
637
                $scope.generateChart = function(comp)
638
                {
639
 
640
                    widgetCallWithActionParameters(
641
                            "<%=request.getContextPath()%>/user/courseReport.do",
642
                            "generateGlobalLearningResultsChartImg",
643
                            {
644
                                "courseReportDocument" : BacoJS.stringifyOrdered(angular.element($("#courseReportApp")).scope().report)
645
                            },
646
                            "#courseReportApp",
647
                            function(repositoryFile4JsonView)
648
                            {
649
                                comp.image = repositoryFile4JsonView;
650
                                comp.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + comp.image.identifier + "?" + new Date().getTime();
651
                                angular.element($("#courseReportApp")).scope().$apply();
652
                            },
653
                            function(){}
654
                    );
655
                }
656
 
657
 
658
            },
659
            templateUrl: function(elem,attrs) {
660
                return "globallearningresultschartimg";
661
            }
662
        }
663
    });
664
</script>
665
<script type="text/ng-template" id="globallearningresultschartimg">
666
    <div class="imageComponent component">
667
 
668
        <div class="componentBody">
669
            <div class="form-group clearfix">
670
                <label class="col-md-2 control-label">Legenda</label>
671
                <div class="col-md-10">
672
                    <input type="text" class="form-control" rows="10" ng-model="comp.title">
673
                </div>
674
            </div>
675
            <div class="form-group clearfix">
676
                <div class="col-md-2 control-label">
677
                    <button class="btn btn-default" ng-click="generateChart(comp)">Refrescar/Gerar Gráfico</button>
678
                </div>
679
                <div class="col-md-10">
680
                    <label ng-if="comp.image.identifier"> Limites do PDF </label>
681
                    <div ng-if="comp.image.identifier" style="text-align: center; width: 595px; border: 1px solid black; padding: 45px">
682
                        <center>
683
                            <div style="width: 200px;height: 200px; max-width: 500px; max-height: 750px" resizable on-resize="resize($evt, $ui, comp)">
684
                                <img ng-if="comp.imageUrl" style="width: 100%;height: 100%"  ng-src="{{comp.imageUrl}}">
685
                                <img ng-if="!comp.imageUrl" style="width: 100%;height: 100%"  ng-src="{{'<%=request.getContextPath()%>/repositoryStream/' + comp.image.identifier}}">
686
                            </div>
687
                            (Se desejar altere o tamanho da imagem arrastando no canto inferior direito)
688
                        </center>
689
                    </div>
690
                </div>
691
            </div>
692
        </div>
693
    </div>
1989 grupo1 694
</script>
695
 
696
 
697
<!-- Johny -->
698
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_GlobalLearningResultsChartYearImg">
699
    <globallearningresultschartyearimg>
700
    </globallearningresultschartyearimg>
701
</script>
702
<script>
703
    angular.module("courseReportApp").directive('globallearningresultschartyearimg', function() {
704
 
705
        return {
706
            restrict: 'E',
707
            link: function($scope, element, attrs)
708
            {
709
                $scope.generateChart = function(comp)
710
                {
711
 
712
                    widgetCallWithActionParameters(
713
                        "<%=request.getContextPath()%>/user/courseReport.do",
714
                        "generateGlobalLearningResultsChartYearImg",
715
                        {
716
                            "courseReportDocument" : BacoJS.stringifyOrdered(angular.element($("#courseReportApp")).scope().report)
717
                        },
718
                        "#courseReportApp",
719
                        function(repositoryFile4JsonView)
720
                        {
721
                            comp.image = repositoryFile4JsonView;
722
                            comp.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + comp.image.identifier + "?" + new Date().getTime();
723
                            angular.element($("#courseReportApp")).scope().$apply();
724
                        },
725
                        function(){}
726
                    );
727
                }
728
 
729
 
730
            },
731
            templateUrl: function(elem,attrs) {
732
                return "globallearningresultschartyearimg";
733
            }
734
        }
735
    });
736
</script>
737
<script type="text/ng-template" id="globallearningresultschartyearimg">
738
    <div class="imageComponent component">
739
 
740
        <div class="componentBody">
741
            <div class="form-group clearfix">
742
                <label class="col-md-2 control-label">Legenda</label>
743
                <div class="col-md-10">
744
                    <input type="text" class="form-control" rows="10" ng-model="comp.title">
745
                </div>
746
            </div>
747
            <div class="form-group clearfix">
748
                <div class="col-md-2 control-label">
749
                    <button class="btn btn-default" ng-click="generateChart(comp)">Refrescar/Gerar Gráfico</button>
750
                </div>
751
                <div class="col-md-10">
752
                    <label ng-if="comp.image.identifier"> Limites do PDF </label>
753
                    <div ng-if="comp.image.identifier" style="text-align: center; width: 595px; border: 1px solid black; padding: 45px">
754
                        <center>
755
                            <div style="width: 200px;height: 200px; max-width: 500px; max-height: 750px" resizable on-resize="resize($evt, $ui, comp)">
756
                                <img ng-if="comp.imageUrl" style="width: 100%;height: 100%"  ng-src="{{comp.imageUrl}}">
757
                                <img ng-if="!comp.imageUrl" style="width: 100%;height: 100%"  ng-src="{{'<%=request.getContextPath()%>/repositoryStream/' + comp.image.identifier}}">
758
                            </div>
759
                            (Se desejar altere o tamanho da imagem arrastando no canto inferior direito)
760
                        </center>
761
                    </div>
762
                </div>
763
            </div>
764
        </div>
765
    </div>
1871 jmachado 766
</script>