Subversion Repositories bacoAlunos

Rev

Rev 1856 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1856 Rev 1869
1
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
1
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
2
<%@ page import="jomm.dao.impl.AbstractDao" %>
2
<%@ page import="jomm.dao.impl.AbstractDao" %>
3
<%@ page import="pt.estgp.estgweb.domain.CourseImpl" %>
3
<%@ page import="pt.estgp.estgweb.domain.CourseImpl" %>
4
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
4
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
5
<%@ page import="pt.estgp.estgweb.utils.documentBuilder.TextComponent" %>
5
<%@ page import="pt.estgp.estgweb.utils.documentBuilder.TextComponent" %>
6
<%@ page import="pt.estgp.estgweb.utils.documentBuilder.ImageComponent" %>
6
<%@ page import="pt.estgp.estgweb.utils.documentBuilder.ImageComponent" %>
7
<%@ page import="pt.estgp.estgweb.services.courses.CourseReportServices" %>
7
<%@ page import="pt.estgp.estgweb.services.courses.CourseReportServices" %>
8
<%@ page import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument" %>
8
<%@ page import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument" %>
9
<%@ page import="org.json.JSONException" %>
9
<%@ page import="org.json.JSONException" %>
10
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
10
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
11
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
11
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
12
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
12
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
13
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
13
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
14
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
14
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
15
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
15
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
16
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
16
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
17
 
17
 
18
<link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.css">
18
<link rel="stylesheet" href="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.css">
19
<script src="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.min.js"></script>
19
<script src="<%=request.getContextPath()%>/js/jquery-ui-1.12.1/jquery-ui.min.js"></script>
20
<link rel="stylesheet" href="<%=request.getContextPath()%>/css/flora-commons/flora.resizable.css">
20
<link rel="stylesheet" href="<%=request.getContextPath()%>/css/flora-commons/flora.resizable.css">
21
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
21
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
22
<script>
22
<script>
23
    function demoFromHTML() {
23
    function demoFromHTML() {
24
        var pdf = new jsPDF('p', 'pt', 'letter');
24
        var pdf = new jsPDF('p', 'pt', 'letter');
25
        // source can be HTML-formatted string, or a reference
25
        // source can be HTML-formatted string, or a reference
26
        // to an actual DOM element from which the text will be scraped.
26
        // to an actual DOM element from which the text will be scraped.
27
        source = $('#courseReportApp')[0];
27
        source = $('#courseReportApp')[0];
28
 
28
 
29
        // we support special element handlers. Register them with jQuery-style
29
        // we support special element handlers. Register them with jQuery-style
30
        // ID selector for either ID or node name. ("#iAmID", "div", "span" etc.)
30
        // ID selector for either ID or node name. ("#iAmID", "div", "span" etc.)
31
        // There is no support for any other type of selectors
31
        // There is no support for any other type of selectors
32
        // (class, of compound) at this time.
32
        // (class, of compound) at this time.
33
        specialElementHandlers = {
33
        specialElementHandlers = {
34
            // element with id of "bypass" - jQuery style selector
34
            // element with id of "bypass" - jQuery style selector
35
            '#bypassme': function (element, renderer) {
35
            '#bypassme': function (element, renderer) {
36
                // true = "handled elsewhere, bypass text extraction"
36
                // true = "handled elsewhere, bypass text extraction"
37
                return true
37
                return true
38
            }
38
            }
39
        };
39
        };
40
        margins = {
40
        margins = {
41
            top: 80,
41
            top: 80,
42
            bottom: 60,
42
            bottom: 60,
43
            left: 40,
43
            left: 40,
44
            width: 522
44
            width: 522
45
        };
45
        };
46
        // all coords and widths are in jsPDF instance's declared units
46
        // all coords and widths are in jsPDF instance's declared units
47
        // 'inches' in this case
47
        // 'inches' in this case
48
        pdf.fromHTML(
48
        pdf.fromHTML(
49
                source, // HTML string or DOM elem ref.
49
                source, // HTML string or DOM elem ref.
50
                margins.left, // x coord
50
                margins.left, // x coord
51
                margins.top, { // y coord
51
                margins.top, { // y coord
52
                    'width': margins.width, // max width of content on PDF
52
                    'width': margins.width, // max width of content on PDF
53
                    'elementHandlers': specialElementHandlers
53
                    'elementHandlers': specialElementHandlers
54
                },
54
                },
55
 
55
 
56
                function (dispose) {
56
                function (dispose) {
57
                    // dispose: object with X, Y of the last line add to the PDF
57
                    // dispose: object with X, Y of the last line add to the PDF
58
                    //          this allow the insertion of new lines after html
58
                    //          this allow the insertion of new lines after html
59
                    //var pdfDocument =  pdf.save('Test.pdf');
59
                    //var pdfDocument =  pdf.save('Test.pdf');
60
                    var pdfDocument = pdf.output();
60
                    var pdfDocument = pdf.output();
61
 
61
 
62
                    var boundary = '---------------------------';
62
                    var boundary = '---------------------------';
63
                    boundary += Math.floor(Math.random()*32768);
63
                    boundary += Math.floor(Math.random()*32768);
64
                    boundary += Math.floor(Math.random()*32768);
64
                    boundary += Math.floor(Math.random()*32768);
65
                    boundary += Math.floor(Math.random()*32768);
65
                    boundary += Math.floor(Math.random()*32768);
66
 
66
 
67
                    var body = '';
67
                    var body = '';
68
                    body += '--' + boundary + '\r\n' +
68
                    body += '--' + boundary + '\r\n' +
69
                            'Content-Disposition: form-data; name="filesInputId-UPLOAD[]"; filename="20170530_210340.pdf"' + '\r\n';
69
                            'Content-Disposition: form-data; name="filesInputId-UPLOAD[]"; filename="20170530_210340.pdf"' + '\r\n';
70
                    body += 'Content-Type: application/pdf';
70
                    body += 'Content-Type: application/pdf';
71
                    body += '\r\n\r\n';
71
                    body += '\r\n\r\n';
72
                    body += pdfDocument;
72
                    body += pdfDocument;
73
                    body += '\r\n'
73
                    body += '\r\n'
74
                    body += '--' + boundary + '--';
74
                    body += '--' + boundary + '--';
75
 
75
 
76
 
76
 
77
 
77
 
78
                    $.ajax({
78
                    $.ajax({
79
                        type: "POST",
79
                        type: "POST",
80
                        cache: false,
80
                        cache: false,
81
                        url: "<%=request.getContextPath()%>/filesUpload",
81
                        url: "<%=request.getContextPath()%>/filesUpload",
82
                        data: body ,
82
                        data: body ,
83
                        processData: false,
83
                        processData: false,
84
                        contentType : 'multipart/form-data; boundary=' + boundary,
84
                        contentType : 'multipart/form-data; boundary=' + boundary,
85
                        success: function (data) {
85
                        success: function (data) {
86
                            alert('success');
86
                            alert('success');
87
                            return false;
87
                            return false;
88
                        }
88
                        }
89
                    });
89
                    });
90
                }, margins
90
                }, margins
91
        );
91
        );
92
    }
92
    }
93
</script>
93
</script>
94
 
94
 
95
<%
95
<%
96
 
96
 
97
    String courseCode = request.getParameter("courseCode");
97
    String courseCode = request.getParameter("courseCode");
98
    AbstractDao.getCurrentSession().beginTransaction();
98
    AbstractDao.getCurrentSession().beginTransaction();
99
    CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode);
99
    CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode);
100
    request.setAttribute("course",courseImpl);
100
    request.setAttribute("course",courseImpl);
101
    CourseReportDocument courseReport = null;
101
    CourseReportDocument courseReport = null;
102
    try {
102
    try {
103
        courseReport = new CourseReportServices().createNewCourseReportDocument("44", "201617");
103
        courseReport = new CourseReportServices().createNewCourseReportDocument(courseCode, "201617");
104
    } catch (Throwable e) {
104
    } catch (Throwable e) {
105
        System.out.println(e);
105
        System.out.println(e);
106
        e.printStackTrace();
106
        e.printStackTrace();
107
    }
107
    }
108
    String courseReportJson = courseReport.toJson();
108
    String courseReportJson = courseReport.toJson();
109
    request.setAttribute("courseDocumentJson",courseReportJson);
109
    request.setAttribute("courseDocumentJson",courseReportJson);
110
    request.setAttribute("courseDocument",courseReport);
110
    request.setAttribute("courseDocument",courseReport);
111
 
111
 
112
%>
112
%>
113
<%--<a href="javascript:demoFromHTML()" class="button">Run Code</a>--%>
113
<%--<a href="javascript:demoFromHTML()" class="button">Run Code</a>--%>
114
 
114
 
115
<div class="container-fluid">
115
<div class="container-fluid">
116
 
116
 
117
    <style>
117
    <style>
118
        .separatorSection
118
        .separatorSection
119
        {
119
        {
120
            border: 1px solid #ddd;
120
            border: 1px solid #ddd;
121
        }
121
        }
122
    </style>
122
    </style>
123
 
123
 
124
 
124
 
125
    <!-- Apresentacao da Unidade -->
125
    <!-- Apresentacao da Unidade -->
126
 
126
 
127
    <div class="panel panel-default">
127
    <div class="panel panel-default">
128
        <div class="panel-heading">
128
        <div class="panel-heading">
129
             Relatório Anual do curso: ${course.name}
129
             Relatório Anual do curso: ${course.name}
130
        </div>
130
        </div>
131
        <div class="panel-body">
131
        <div class="panel-body">
132
 
132
 
133
            <p><b class="label-info">Tipo de Curso:</b> <bean:message key="course.${course.degree}"/></p>
133
            <p><b class="label-info">Tipo de Curso:</b> <bean:message key="course.${course.degree}"/></p>
134
            <p><b class="label-info">Ano Lectivo:</b> ${course.importYear}</p>
134
            <p><b class="label-info">Ano Lectivo:</b> ${course.importYear}</p>
135
            <p><b class="label-info">Departamento:</b> ${course.department.name}</p>
135
            <p><b class="label-info">Departamento:</b> ${course.department.name}</p>
136
            <p><b class="label-info">Escola:</b> ${course.department.courseSchool.name}</p>
136
            <p><b class="label-info">Escola:</b> ${course.department.courseSchool.name}</p>
137
 
137
 
138
 
138
 
139
 
139
 
140
 
140
 
141
            <script>
141
            <script>
142
 
142
 
143
                //Especifico da aplicacao
143
                //Especifico da aplicacao
144
                var courseReportApp = angular.module('courseReportApp', []);
144
                var courseReportApp = angular.module('courseReportApp', []);
145
                GLOBAL_BacoAngularAppDependencies.push('courseReportApp');
145
                GLOBAL_BacoAngularAppDependencies.push('courseReportApp');
146
 
146
 
147
 
147
 
148
                courseReportApp.directive('resizable', function () {
148
                courseReportApp.directive('resizable', function () {
149
                    return {
149
                    return {
150
                        restrict: 'A',
150
                        restrict: 'A',
151
                        scope: {
151
                        scope: {
152
                            callback: '&onResize'
152
                            callback: '&onResize'
153
                        },
153
                        },
154
                        link: function postLink(scope, elem, attrs) {
154
                        link: function postLink(scope, elem, attrs) {
155
                            elem.resizable();
155
                            elem.resizable();
156
                            elem.on('resize', function (evt, ui, comp) {
156
                            elem.on('resize', function (evt, ui, comp) {
157
                                scope.$apply(function() {
157
                                scope.$apply(function() {
158
                                    if (scope.callback) {
158
                                    if (scope.callback) {
159
                                        scope.callback({$evt: evt, $ui: ui, $comp: comp });
159
                                        scope.callback({$evt: evt, $ui: ui, $comp: comp });
160
                                    }
160
                                    }
161
                                })
161
                                })
162
                            });
162
                            });
163
                        }
163
                        }
164
                    };
164
                    };
165
                });
165
                });
166
 
166
 
167
 
167
 
168
                courseReportApp.controller('courseReportAppController', function($scope)
168
                courseReportApp.controller('courseReportAppController', function($scope)
169
                {
169
                {
170
 
170
 
171
                    $scope.docAppSelector = "#courseReportApp";
171
                    $scope.docAppSelector = "#courseReportApp";
172
                    $scope.report = <%=courseReportJson%>
172
                    $scope.report = <%=courseReportJson%>
173
 
173
 
174
                    $scope.resize = function(evt,ui,comp) {
174
                    $scope.resize = function(evt,ui,comp) {
175
                        //console.log (evt,ui);
175
                        //console.log (evt,ui);
176
                        comp.width = ui.size.width;
176
                        comp.width = ui.size.width;
177
                        comp.height = ui.size.height;
177
                        comp.height = ui.size.height;
178
                    }
178
                    }
179
 
179
 
180
                    /**
180
                    /**
181
                     * @classe class to match
181
                     * @classe class to match
182
                     * @superClasses array of strings
182
                     * @superClasses array of strings
183
                     * */
183
                     * */
184
                    $scope.contains = function(obj,classe)
184
                    $scope.contains = function(obj,classe)
185
                    {
185
                    {
186
                        if(obj['@class'] && obj['@class'] == classe)
186
                        if(obj['@class'] && obj['@class'] == classe)
187
                            return true;
187
                            return true;
188
                        if(obj.allSuperClasses)
188
                        if(obj.allSuperClasses)
189
                        {
189
                        {
190
                            for(var i in obj.allSuperClasses)
190
                            for(var i in obj.allSuperClasses)
191
                            {
191
                            {
192
                                if(classe == obj.allSuperClasses[i])
192
                                if(classe == obj.allSuperClasses[i])
193
                                    return true;
193
                                    return true;
194
                            }
194
                            }
195
                        }
195
                        }
196
                        return false;
196
                        return false;
197
                    }
197
                    }
198
 
198
 
199
                    $scope.showSep = function(section)
199
                    $scope.showSep = function(section,subSection)
200
                    {
200
                    {
-
 
201
                        var s;
-
 
202
                        for(s in section.sections)
-
 
203
                        {
-
 
204
                            section.sections[s].active = false;
-
 
205
                        }
201
                        $(".separatorSectionNav").each(function()
206
                        /*$(".separatorSectionNav").each(function()
202
                        {
207
                        {
203
                            angular.element($(this)).scope().section.active = false;
208
                            angular.element($(this)).scope().section.active = false;
204
                        });
209
                        });*/
205
                        section.active = true;
210
                        subSection.active = true;
206
 
-
 
207
                    }
211
                    }
208
 
212
 
-
 
213
                    /**
-
 
214
                     * Este metodo devolve o template mais profundo na hierarquia de classes
-
 
215
                     * permitindo emular o override, quanto mais especifica for a classe
-
 
216
                     * e caso exista template é esse o template devolvido
-
 
217
                     * procura um script com o id da classe e se nao existir
-
 
218
                     * vai subindo nas super classes
-
 
219
                     * @param obj
-
 
220
                     * @returns {*}
-
 
221
                     */
209
                    $scope.class2id = function(obj)
222
                    $scope.class2id = function(obj)
210
                    {
223
                    {
-
 
224
                        var objClassId = obj["@class"].replaceAll(".","_");
-
 
225
                        if($("script#" + objClassId).length > 0)
-
 
226
                        {
-
 
227
                            return objClassId;
-
 
228
                        }
-
 
229
                        if(obj.allSuperClasses)
-
 
230
                        {
-
 
231
                            var s;
-
 
232
                            for(s in obj.allSuperClasses)
-
 
233
                            {
-
 
234
                                var superClass = obj.allSuperClasses[s];
-
 
235
                                var superClassId = superClass.replaceAll(".","_");
-
 
236
                                if($("script#" + superClassId).length > 0)
-
 
237
                                {
-
 
238
                                    return superClassId;
-
 
239
                                }
-
 
240
                            }
-
 
241
                        }
211
                        return obj["@class"].replaceAll(".","_");
242
                        return obj["@class"].replaceAll(".","_");
212
                    }
243
                    }
213
 
244
 
214
                    $scope.addText = function(parentCustomPane)
245
                    $scope.addText = function(parentCustomPane)
215
                    {
246
                    {
216
                        $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.TextComponent")
247
                        $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.TextComponent")
217
                    }
248
                    }
218
 
249
 
219
                    $scope.addImage = function(parentCustomPane)
250
                    $scope.addImage = function(parentCustomPane)
220
                    {
251
                    {
221
                        $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.ImageComponent")
252
                        $scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.ImageComponent")
222
                    }
253
                    }
223
 
254
 
224
                    $scope.addSimpleDocComponent = function(parentCustomPane,classComponent)
255
                    $scope.addSimpleDocComponent = function(parentCustomPane,classComponent)
225
                    {
256
                    {
226
                        if(!parentCustomPane.components)
257
                        if(!parentCustomPane.components)
227
                        {
258
                        {
228
                            parentCustomPane.components = [];
259
                            parentCustomPane.components = [];
229
                        }
260
                        }
230
                        parentCustomPane.components.push(
261
                        parentCustomPane.components.push(
231
                                {
262
                                {
232
                                    "@class" : classComponent
263
                                    "@class" : classComponent
233
                                }
264
                                }
234
                        );
265
                        );
235
                    }
266
                    }
236
                    $scope.removeComponent = function(index,array)
267
                    $scope.removeComponent = function(index,array)
237
                    {
268
                    {
238
                        array.splice(index,1);
269
                        array.splice(index,1);
239
 
270
 
240
 
271
 
241
                    }
272
                    }
242
                    $scope.callbackUploadedFiles = function(filesUploadResult,token,targetElement)
273
                    $scope.callbackUploadedFiles = function(filesUploadResult,token,targetElement)
243
                    {
274
                    {
244
                        var modelObject = BacoAngularUtils.getAngularElementModel(targetElement);
275
                        var modelObject = BacoAngularUtils.getAngularElementModel(targetElement);
245
                        modelObject.filesUploadResult = filesUploadResult;
276
                        modelObject.filesUploadResult = filesUploadResult;
246
                        if(modelObject.image && modelObject.image.identifier)
277
                        if(modelObject.image && modelObject.image.identifier)
247
                        {
278
                        {
248
                            widgetCallWithActionParameters(
279
                            widgetCallWithActionParameters(
249
                                    "<%=request.getContextPath()%>/user/json/repository.do",
280
                                    "<%=request.getContextPath()%>/user/json/repository.do",
250
                                    "replaceRepositoryFileFromTempPrivateDomain",
281
                                    "replaceRepositoryFileFromTempPrivateDomain",
251
                                    {
282
                                    {
252
                                        "identifier" : modelObject.image.identifier,
283
                                        "identifier" : modelObject.image.identifier,
253
                                        "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0])
284
                                        "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0])
254
                                    },
285
                                    },
255
                                    "#courseReportApp",
286
                                    "#courseReportApp",
256
                                    function(repositoryFile4JsonView)
287
                                    function(repositoryFile4JsonView)
257
                                    {
288
                                    {
258
                                        modelObject.image = repositoryFile4JsonView;
289
                                        modelObject.image = repositoryFile4JsonView;
259
                                        modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime();
290
                                        modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime();
260
                                        delete modelObject.filesUploadResult;
291
                                        delete modelObject.filesUploadResult;
261
                                        angular.element($("#courseReportApp")).scope().$apply();
292
                                        angular.element($("#courseReportApp")).scope().$apply();
262
                                    },
293
                                    },
263
                                    function(){}
294
                                    function(){}
264
                            );
295
                            );
265
                        }
296
                        }
266
                        else
297
                        else
267
                        {
298
                        {
268
                            widgetCallWithActionParameters(
299
                            widgetCallWithActionParameters(
269
                                    "<%=request.getContextPath()%>/user/json/repository.do",
300
                                    "<%=request.getContextPath()%>/user/json/repository.do",
270
                                    "saveRepositoryFileFromTempPrivateDomain",
301
                                    "saveRepositoryFileFromTempPrivateDomain",
271
                                    {
302
                                    {
272
                                        "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0])
303
                                        "fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0])
273
                                    },
304
                                    },
274
                                    "#courseReportApp",
305
                                    "#courseReportApp",
275
                                    function(repositoryFile4JsonView)
306
                                    function(repositoryFile4JsonView)
276
                                    {
307
                                    {
277
                                        modelObject.image = repositoryFile4JsonView;
308
                                        modelObject.image = repositoryFile4JsonView;
278
                                        modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime();
309
                                        modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime();
279
                                        delete modelObject.filesUploadResult;
310
                                        delete modelObject.filesUploadResult;
280
                                        angular.element($("#courseReportApp")).scope().$apply();
311
                                        angular.element($("#courseReportApp")).scope().$apply();
281
                                    },
312
                                    },
282
                                    function(){}
313
                                    function(){}
283
                            );
314
                            );
284
                        }
315
                        }
285
                    }
316
                    }
286
 
317
 
287
 
318
 
288
                });
319
                });
289
            </script>
320
            </script>
290
 
321
 
291
            <!--TEMPLATES FOR DOCUMENT BUILDER-->
322
            <!--TEMPLATES FOR DOCUMENT BUILDER-->
292
            <jsp:include page="../utils/documentsBuilder.jsp"/>
323
            <jsp:include page="../utils/documentsBuilder.jsp"/>
293
 
324
 
294
            <div class="form-vertical">
325
            <div class="form-vertical">
295
                <div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController">
326
                <div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController">
296
 
327
 
297
 
-
 
298
                    <ul class="nav nav-tabs">
-
 
299
                        <li ng-model="section" class="separatorSectionNav" ng-class="{ active: section.active}" ng-repeat="section in report.sections">
328
                    <div ng-init="section=report;" ng-include="'pt_estgp_estgweb_utils_documentBuilder_DocumentSection'">
300
                            <a ng-click="showSep(section)">{{section.title}}</a>
-
 
301
                        </li>
-
 
302
                    </ul>
-
 
303
 
-
 
304
 
-
 
305
 
-
 
306
                    <!--DocumentSection-->
-
 
307
                    <div ng-model="section" ng-class="{ hidden: !section.active}" ng-repeat="section in report.sections" class="separatorSection clearfix">
-
 
308
 
-
 
309
                       <div ng-repeat="comp in section.components" ng-include="class2id(comp)">
-
 
310
 
-
 
311
                        </div>
-
 
312
 
-
 
313
 
329
 
314
                    </div>
330
                    </div>
315
                    <!--/DocumentSection-->
-
 
316
 
331
 
317
<%--
-
 
318
                    <pre class="code">{{ report | json }}</pre>
332
                    <pre class="code">{{ report | json }}</pre>
319
--%>
333
 
320
 
334
 
321
 
335
 
322
                </div><!--App-->
336
                </div><!--App-->
323
            </div> <!--form-->
337
            </div> <!--form-->
324
 
338
 
325
        </div><!--Panel Body-->
339
        </div><!--Panel Body-->
326
 
340
 
327
    </div><!--Panel-->
341
    </div><!--Panel-->
328
 
342
 
329
</div><!--container-fluid-->
343
</div><!--container-fluid-->
330
 
344
 
331
<%
345
<%
332
    AbstractDao.getCurrentSession().getTransaction().commit();
346
    AbstractDao.getCurrentSession().getTransaction().commit();
333
%>
347
%>
334
 
348
 
335
Generated by GNU Enscript 1.6.5.2.
349
Generated by GNU Enscript 1.6.5.2.
336
 
350
 
337
 
351