Subversion Repositories bacoAlunos

Rev

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

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