/branches/grupo4/impl/conf/WEB-INF/struts/struts-courses.xml |
---|
166,9 → 166,16 |
<action path="/user/loadCourseReportTools" forward="page.course.report.tools.load"/> |
<action path="/user/editCourseReport" forward="page.course.report.edit"/> |
<action path="/user/courseReport" |
type="pt.estgp.estgweb.web.controllers.courses.CoursesServicesController" |
name="WidgetModelForm" |
scope="request" |
parameter="dispatch" |
validate="true" |
input="page.widget.json.fail.validations"> |
</action> |
</action-mappings> |
</struts-config> |
/branches/grupo4/impl/conf/WEB-INF/struts/struts-json-ws.xml |
---|
53,14 → 53,13 |
<action path="/secure/ws-coordinators-list" forward="/user/jsonModel.do?dispatch=executeService&serviceJson=wsListCoordinators"/> |
<!--SERVICOS ABERTOS POR ENQUANTO--> |
<!--<action path="/ws-units-report-list" forward="/json/coursesServices.do?dispatch=executeService&serviceJson=getCourseUnitsEvaluations"/>--> |
<action path="/ws-units-report-list" forward="/json/coursesServices.do?dispatch=executeService&serviceJson=getCourseUnitsEvaluations"/> |
<action path="/ws-course-pedagogic-results-list" forward="/json/coursesServices.do?dispatch=executeService&serviceJson=findPedagogicReport4Period"/> |
<action path="/ws-units-dtp-stats" forward="/json/coursesServices.do?dispatch=executeService&serviceJson=getCourseUnitDtpStats"/> |
<action path="/ws-course-unit-plan-year" forward="/json/coursesServices.do?dispatch=executeService&serviceJson=loadPlanYearForCourseUnitCode"/> |
</action-mappings> |
/branches/grupo4/impl/conf/WEB-INF/web.xml |
---|
102,6 → 102,7 |
</filter> |
<filter-mapping> |
<filter-name>UrlDisplayFilter</filter-name> |
<url-pattern>/*</url-pattern> |
/branches/grupo4/impl/conf/app.properties |
---|
8,6 → 8,7 |
##Em testes colocar true |
test.control.var=@test.control.var@ |
import.year=201516 |
tmp.dir=@tmp.dir@ |
data.dir=@data.dir@ |
/branches/grupo4/impl/conf/directories/header.xml |
---|
1,5 → 1,4 |
<?xml version="1.0" encoding="UTF-8"?> |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
<directory fixedDirectoryId="true" menuKey="" targetRole="all" layoutRoot="" layout="" style="topMenus.xsl" label_es="" |
label_en="" label="Menus de Top" id="header" xmlns="http://www.estgp.pt/baco/directory/"> |
<groupsDeclaration/> |
/branches/grupo4/impl/conf/berserk/sd.xml |
---|
4008,6 → 4008,7 |
</filterChains> |
</service> |
<service> |
<name>LoadPlanYearForCourseUnitCode</name> |
<implementationClass>pt.estgp.estgweb.services.courses.CourseReportServices</implementationClass> |
4024,6 → 4025,8 |
</filterChains> |
</service> |
<!-- SERVICOS DE GERACAO DE RELATORIO DE CURSO --> |
4047,6 → 4050,4 |
</serviceDefinitions> |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/DocumentSection.java |
---|
10,7 → 10,7 |
{ |
String title = ""; |
List<DocComponent> components = new ArrayList<DocComponent>(); |
ArrayList<DocComponent> components = new ArrayList<DocComponent>(); |
public DocumentSection() { |
} |
32,7 → 32,7 |
return components; |
} |
public void setComponents(List<DocComponent> components) { |
public void setComponents(ArrayList<DocComponent> components) { |
this.components = components; |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/utils/documentBuilder/SectionContainer.java |
---|
1,20 → 1,19 |
package pt.estgp.estgweb.utils.documentBuilder; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* Created by jorgemachado on 07/11/17. |
*/ |
public class SectionContainer extends ExtensibleDocObject |
{ |
List<DocumentSection> sections = new ArrayList<DocumentSection>(); |
ArrayList<DocumentSection> sections = new ArrayList<DocumentSection>(); |
public List<DocumentSection> getSections() { |
public ArrayList<DocumentSection> getSections() { |
return sections; |
} |
public void setSections(List<DocumentSection> sections) { |
public void setSections(ArrayList<DocumentSection> sections) { |
this.sections = sections; |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/utils/Globals.java |
---|
181,7 → 181,7 |
public static final List<String> DEPARTAMENTOS = ConfigProperties.getListValues("departamento"); |
/*SIGES WEB SERVICES*/ |
//NAO É URGENTE PARA ACTUALIZACOES VAMOS DEIXAR CARREGAR DA BD E NAS ACTUALIZAÇOES MUDA AQUI |
//NAO É URGENTE PARA ACTUALIZACOES VAMOS DEIXAR CARREGAR DA BD E NAS ACTUALIZAÇOES MUDA AQUI |
//public static BigDecimal NATIONAL_INSTITUTION_CODE = new BigDecimal(DaoFactory.getConfigurationDaoImpl().getNationalInstitutionCodeCreateTransaction()); |
// DONT USE NOW IN CONFIGURATION DAO public static final BigDecimal SIGES_INSTITUTION_CODE = new BigDecimal(ConfigProperties.getIntProperty("siges.institution.code")); |
// DONT USE ANY MORE NOW IS IN CONFIGURATION DAOpublic static final String SIGES_WEBSERVICE_WSDL = ConfigProperties.getProperty("ws.siges.wsdl"); |
534,4 → 534,4 |
public static final int SIGES_SUMARIO_FALTOU_CODIGO = ConfigProperties.getIntProperty("siges.summaries.faltou.code"); |
public static final int SIGES_SUMARIO_CANCELADO_CODIGO = ConfigProperties.getIntProperty("siges.summaries.cancelado.code"); |
public static final int SIGES_SUMARIO_PRELANCADO_CODIGO = ConfigProperties.getIntProperty("siges.summaries.prelancado.code"); |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/services/courses/CourseReportServices.java |
---|
77,8 → 77,8 |
//THIS IS THE BASE FOR THE REMAIN SERVICE CALLS |
List<DocumentSection> courseUnitSections = updateCleanCourseUnitSections(courseCode, year, reportCourseDocument); |
//A tabela de resultados globais não vai ser utilizada |
//PARA CORRER ESTE SERVICO A PARTIR DA INTERFACE É PRECISO |
//A tabela de resultados globais não vai ser utilizada |
//PARA CORRER ESTE SERVICO A PARTIR DA INTERFACE É PRECISO |
//PERCEBER QUE DEPENDE DO SERVICO DE UPDATE DAS SECOES DAS COURSEUNITS |
UnitsLearningResultsTable unitsLearningResultsTable = updateCleanLearningResultsFromCourseUnitsSections(reportCourseDocument); |
87,7 → 87,7 |
UnitsDtpTable unitsDtpTable = updateDtpStatsTable4Course(reportCourseDocument, courseCode, year); |
//Atualiza as tabelas dos Quesitonários pedagogicos |
//Atualiza as tabelas dos Quesitonários pedagogicos |
SurveysResultsSection surveysResultsSection = updateSurveysDataTables(courseCode, year, reportCourseDocument); |
111,7 → 111,7 |
} |
/** |
* Este serviço atualiza a tabela de resultados de aprendizagem com base nas courseunitssections |
* Este serviço atualiza a tabela de resultados de aprendizagem com base nas courseunitssections |
* @param reportCourseDocument |
* @return UnitsLearningResultsTable |
*/ |
298,7 → 298,7 |
/** |
* Gera uma tabela de estatisticas dos DTP recorrendo ao servico WS de |
* load de tabelas DTP, caso o serviço nao devolva unidades são criadas novas |
* load de tabelas DTP, caso o serviço nao devolva unidades são criadas novas |
* com os valores a falso. |
* |
* @param courseCode |
381,7 → 381,7 |
} |
List<DocumentSection> subSections = new ArrayList<DocumentSection>(); |
ArrayList<DocumentSection> subSections = new ArrayList<DocumentSection>(); |
unitReportsSection.setSections(subSections); |
for(CourseUnit cu :units) |
{ |
414,15 → 414,18 |
* @return |
* @throws IOException |
*/ |
public String generateGlobalLearningResultsChartImg(String reportDocumentJson,UserSession session) throws IOException { |
public String generateGlobalLearningResultsChartImg(String reportDocumentJson, |
UserSession session) throws IOException { |
CourseReportDocument reportDocument = CourseReportDocument.fromJson(reportDocumentJson); |
LearningResultsSection learningResultsSection = (LearningResultsSection) reportDocument.findDocumentSection(LearningResultsSection.class); |
LearningGlobalAnalysisSection learningGlobalAnalysisSection = (LearningGlobalAnalysisSection) learningResultsSection.findSection(LearningGlobalAnalysisSection.class); |
GlobalLearningResultsChartImg chartImg = (GlobalLearningResultsChartImg) learningGlobalAnalysisSection.findDocComponent(GlobalLearningResultsChartImg.class); |
UnitsLearningResultsTable table = (UnitsLearningResultsTable) learningResultsSection.findDocComponent(UnitsLearningResultsTable.class); |
FileUploaded fileUploaded = chartImg.generateChart2tmp(table,reportDocument); |
RepositoryService repositoryService = new RepositoryService(); |
522,10 → 525,10 |
/** |
* |
* Para um determinado curso e ano o serviço faz uma listagem de todas as suas unidades curriculares |
* e lista a sua informação básica juntamente com o relatório de avaliação disponivel |
* O serviço adiciona ainda o Ano de cada unidade por inspeção do Plano de Estudos |
* caso a unidade não seja encontrada no Plano de estudos o ano irá ser preenchido com -1 |
* Para um determinado curso e ano o serviço faz uma listagem de todas as suas unidades curriculares |
* e lista a sua informação básica juntamente com o relatório de avaliação disponivel |
* O serviço adiciona ainda o Ano de cada unidade por inspeção do Plano de Estudos |
* caso a unidade não seja encontrada no Plano de estudos o ano irá ser preenchido com -1 |
* |
* @param courseCode codigo Siges na base de dados |
* @param year 201617, 201718 |
594,7 → 597,7 |
* @param courseCode codigo Siges na base de dados |
* @param unitCode |
* @return Json com o ano do plano exemplo: { year : 1 } |
* ou -1 se não for encontrado |
* ou -1 se não for encontrado |
*/ |
public String loadPlanYearForCourseUnitCode(String courseCode,String unitCode,String period) throws JSONException, IOException { |
680,4 → 683,4 |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java |
---|
220,7 → 220,7 |
} |
htmlTrasformationResult = generateHtmlCache(userSession, c); |
//####New#### Generating XML with JaxB |
//ISTO SO É CHAMADO NO CASO DE SE FAZER UPLOAD DE UM NOVO PLANO PELO MECANISMO ANTIGO |
//ISTO SO É CHAMADO NO CASO DE SE FAZER UPLOAD DE UM NOVO PLANO PELO MECANISMO ANTIGO |
generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, c, forceUrlFichas, systemUrl); |
} |
return htmlTrasformationResult; |
288,7 → 288,7 |
/** |
* ##NEW METHOD### |
* Gera o XML normalizado para o JAXB a partir do XML importado do XML do plano XML quese usou no upload |
* para garantir que está bem formado |
* para garantir que está bem formado |
* @param userSession |
* @param c |
* @return |
299,7 → 299,7 |
CourseStudiesPlan courseStudiesPlan; |
if(c.getStudiesPlan() == null || c.getStudiesPlan().trim().length() == 0) |
{ |
//ESTE É O STREAM DO PLANO DE UPLOAD |
//ESTE É O STREAM DO PLANO DE UPLOAD |
logger.warn("Course does not have studies plan XML file stream to use in update"); |
return; |
} |
309,7 → 309,7 |
logger.info("Generating first study plan"); |
courseStudiesPlan = DomainObjectFactory.createCourseStudiesPlanImpl(); |
courseStudiesPlan.setVersion(1); |
courseStudiesPlan.setVersionDescription("Auto gerado durante a importação de um XML com o plano de estudos a " + new Date().toString()); |
courseStudiesPlan.setVersionDescription("Auto gerado durante a importação de um XML com o plano de estudos a " + new Date().toString()); |
courseStudiesPlan.setCourse(c); |
if(c.getStudiesPlans() == null) |
c.setStudiesPlans(new HashSet<CourseStudiesPlan>()); |
378,8 → 378,8 |
/** |
* Apenas é chamado quando se tenta injectar um programa a partir de um upload que foi feito |
* pelo user ou pela sincronização remota |
* Apenas é chamado quando se tenta injectar um programa a partir de um upload que foi feito |
* pelo user ou pela sincronização remota |
* @param curso |
* @param systemUrl |
* @param force |
411,7 → 411,7 |
if(!url.endsWith("/")) |
url = url + "/"; |
//Nao fornece o ano pois o servico irá assumir o ultimo |
//Nao fornece o ano pois o servico irá assumir o ultimo |
unidadeType.setUrlFichaCurricular(url + "startLoadCourseUnitProgramSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId()); |
unidadeType.setUrlUnidadeCurricular(url + "startLoadCourseUnitSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId()); |
} |
601,12 → 601,12 |
/** |
* |
* * Serviço invocado para obter o JSON de um curso |
* * Serviço invocado para obter o JSON de um curso |
* O JSON tem dois campos o courseInfo e o plano de estudos colocados separadamente |
* |
* Atenção o plano de estudos usado é o ultimo considerando o seu ID |
* Nota: O plano de Estudos é uma classe persistente que tem apenas versão e descrição |
* deverá ter como campo o XML e o JSON já gerados do plano de estudos que comporta |
* Atenção o plano de estudos usado é o ultimo considerando o seu ID |
* Nota: O plano de Estudos é uma classe persistente que tem apenas versão e descrição |
* deverá ter como campo o XML e o JSON já gerados do plano de estudos que comporta |
* |
* //TODO REVER |
* @param code |
634,8 → 634,8 |
{ |
JSONObject courseObj = new JSONObject(course.getJson()); |
coursesResponse.put("courseInfo",courseObj); |
//Este caso apenas se dá se o plano nunca tiver sido editado ou sincronizado |
//Nesse caso o sistema irá tentar obtê-lo da stream do repositorio |
//Este caso apenas se dá se o plano nunca tiver sido editado ou sincronizado |
//Nesse caso o sistema irá tentar obtê-lo da stream do repositorio |
if(course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0) |
{ |
logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will try generate from studies plan OLD Stream"); |
1009,7 → 1009,7 |
} |
} |
} |
//Garante-se mas depois não vai para o JSON |
//Garante-se mas depois não vai para o JSON |
planoEditado.setSiges(course.getCode());//GARANTIR QUE O CODIGO SIGEST ESTA CORRECTO |
planoEditado.setNome(course.getName()); |
planoEditado.setDep(course.getArea()); |
1182,7 → 1182,7 |
String roleValidation = "courseValidateProgram" + normalizedName; |
String oldValidationRole = c.getValidationRole(); |
String nomeRole = "Comissão de Curso de " + c.getName(); |
String nomeRole = "Comissão de Curso de " + c.getName(); |
try{ |
ReplaceRoleResult result = new UserRoleConfigService().createNewNormalizedRoleService(oldValidationRole,nomeRole,roleValidation,userSession); |
c.setValidationRole(roleValidation); |
1264,7 → 1264,7 |
/** |
* Cria um conjunto de roles novos para um determinado departamento |
* chama o serviço tier1 UserRoleConfigService.createNewNormalizedRoleService |
* chama o serviço tier1 UserRoleConfigService.createNewNormalizedRoleService |
* @param session |
* @return |
* @throws IOException |
1280,7 → 1280,7 |
throw new RuntimeException("Erro o Departamento " + courseDepartmentPersistent.getSigla() +" + nao tem nome"); |
String nomeRole = "Departamento Direcção - " + courseDepartmentPersistent.getName(); |
String nomeRole = "Departamento Direcção - " + courseDepartmentPersistent.getName(); |
String oldRole = courseDepartmentPersistent.getBoardRole(); |
String newRoleStr = "department.board." + normalizedName; |
try |
1367,7 → 1367,7 |
/* |
public static void main(String[] args) throws JAXBException, IOException { |
String json = "{\"anoPlanoSiges\":null,\"codigoPlanoSiges\":null,\"dep\":null,\"descPlanoSiges\":null,\"nome\":null,\"semestre\":[{\"id\":\"S1\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Português — LÃngua e Literatura\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:12\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Geografia\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:16\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"História\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:20\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"LinguÃstica e Análise do Discurso\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:24\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Matemática no 1.o Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:28\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Saúde\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:32\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Música, Emoção e Criatividade\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:36\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Cidadania\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:40\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Descobrir a Matemática\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:44\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:6\"},{\"id\":\"S2\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:54\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Estudo do Meio no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:58\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da Matemática no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:62\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática das Expressões no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:66\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Psicologia da Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:70\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Investigação em Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:74\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:48\"},{\"id\":\"S3\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Prática de Ensino Supervisionada no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"500\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:90\",\"eCTS\":\"20\",\"horasContacto\":{\"s\":\"30\",\"e\":\"270\",\"oT\":\"45\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Seminário de Investigação I\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"50\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:98\",\"eCTS\":\"2\",\"horasContacto\":{\"s\":\"20\",\"oT\":\"10\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da História e Geografia de Portugal no 2º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:94\",\"eCTS\":\"4\",\"horasContacto\":{\"tP\":\"35\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 2º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:102\",\"eCTS\":\"4\",\"horasContacto\":{\"oT\":\"15\",\"tP\":\"35\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:78\"},{\"id\":\"S4\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:106\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:110\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:114\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:118\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:122\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:84\"}],\"siges\":null}"; |
String json = "{\"anoPlanoSiges\":null,\"codigoPlanoSiges\":null,\"dep\":null,\"descPlanoSiges\":null,\"nome\":null,\"semestre\":[{\"id\":\"S1\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Português — Língua e Literatura\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:12\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Geografia\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:16\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"História\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:20\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Linguística e Análise do Discurso\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:24\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Matemática no 1.o Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:28\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Saúde\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:32\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Música, Emoção e Criatividade\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:36\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Cidadania\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:40\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Descobrir a Matemática\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:44\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:6\"},{\"id\":\"S2\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:54\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Estudo do Meio no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:58\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da Matemática no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:62\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática das Expressões no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:66\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Psicologia da Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:70\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Investigação em Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:74\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:48\"},{\"id\":\"S3\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Prática de Ensino Supervisionada no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"500\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:90\",\"eCTS\":\"20\",\"horasContacto\":{\"s\":\"30\",\"e\":\"270\",\"oT\":\"45\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Seminário de Investigação I\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"50\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:98\",\"eCTS\":\"2\",\"horasContacto\":{\"s\":\"20\",\"oT\":\"10\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da História e Geografia de Portugal no 2º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:94\",\"eCTS\":\"4\",\"horasContacto\":{\"tP\":\"35\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 2º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:102\",\"eCTS\":\"4\",\"horasContacto\":{\"oT\":\"15\",\"tP\":\"35\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:78\"},{\"id\":\"S4\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:106\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:110\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:114\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:118\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:122\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:84\"}],\"siges\":null}"; |
CursoImpl c = CursoImpl.loadFromJson(json); |
JAXBContext jc = JAXBContext.newInstance(Curso.class); |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/learningresults/components/UnitsLearningResult.java |
---|
23,14 → 23,6 |
private boolean manual; |
public boolean isManual() { |
return manual; |
} |
public void setManual(boolean manual) { |
this.manual = manual; |
} |
public float getCumprimentoProgramaPercent() { |
return cumprimentoProgramaPercent; |
} |
142,4 → 134,13 |
public void setAprovados1720Percent(float aprovados1720Percent) { |
this.aprovados1720Percent = aprovados1720Percent; |
} |
public boolean isManual() { |
return manual; |
} |
public void setManual(boolean manual) { |
this.manual = manual; |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/learningresults/components/UnitsLearningResultsTable.java |
---|
27,6 → 27,8 |
float aprovados1720; |
float aprovados1720Percent; |
List<UnitsLearningResultYear> years = new ArrayList<UnitsLearningResultYear>(); |
public float getCumprimentoProgramaPercent() { |
return cumprimentoProgramaPercent; |
} |
139,8 → 141,6 |
this.aprovados1720Percent = aprovados1720Percent; |
} |
List<UnitsLearningResultYear> years = new ArrayList<UnitsLearningResultYear>(); |
public List<UnitsLearningResultYear> getYears() { |
return years; |
} |
148,6 → 148,4 |
public void setYears(List<UnitsLearningResultYear> years) { |
this.years = years; |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/LearningResultsSection.java |
---|
28,6 → 28,7 |
super.getComponents().add(new CustomPane()); |
//3.1 Analise Aproveitamento |
super.getSections().add(new LearningAnalysisSection("Analise Aproveitamento")); |
//3.2 Analise Global Aproveitamento |
super.getSections().add(new LearningGlobalAnalysisSection("Analise Global Aproveitamento")); |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/services/courses/coursereport/documentmodel/CourseReportDocument.java |
---|
2,10 → 2,12 |
import com.owlike.genson.Genson; |
import com.owlike.genson.GensonBuilder; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import org.json.JSONException; |
import org.json.JSONObject; |
import pt.estgp.estgweb.domain.Course; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.utils.JsonView; |
import pt.estgp.estgweb.utils.documentBuilder.Document; |
import pt.estgp.estgweb.utils.documentBuilder.DocumentSection; |
65,9 → 67,10 |
//1 - Introducao |
IntroSection introSection = new IntroSection(); |
introSection.init(); |
getSections().add(introSection); |
//2 - Mapa Sintese dos Relatórios dos Responsáveis das UC's |
//2 - Mapa Sintese dos Relatórios dos Responsáveis das UC's |
ReportsUcSummarySection reportsUcSummarySection = new ReportsUcSummarySection(); |
reportsUcSummarySection.init(); |
getSections().add(reportsUcSummarySection); |
77,12 → 80,12 |
learningResultsSection.init(); |
getSections().add(learningResultsSection); |
//4 - Inquéritos |
//4 - Inquéritos |
SurveysSection surveysSection = new SurveysSection(); |
surveysSection.init(); |
getSections().add(surveysSection); |
//5 - Conclusões |
//5 - Conclusões |
ConclusionsSection conclusionsSection = new ConclusionsSection(); |
conclusionsSection.init(); |
getSections().add(conclusionsSection); |
158,6 → 161,25 |
return gensonGenericLoad.serialize(this); |
} |
public static void main(String[] args) |
{ |
CourseReportDocument d = new CourseReportDocument(); |
AbstractDao.getCurrentSession().beginTransaction(); |
} |
List<Course> cursos = DaoFactory.getCourseDaoImpl().findAll(); |
d.init(cursos.get(0),"201718"); |
String json = d.toJson(); |
System.out.println(json); |
CourseReportDocument d2 = CourseReportDocument.fromJson(json); |
System.out.println(d2.toJson()); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java |
---|
56,7 → 56,7 |
/** |
* Serviço Tear 1 para substituição de Roles ou criação de Novos |
* Serviço Tear 1 para substituição de Roles ou criação de Novos |
* @param oldRole |
* @param nomeRole |
* @param newRoleStr |
91,13 → 91,13 |
if(result.roleKeyAlreadyExist) |
{ |
logger.error("Tentado CRIAR um Role que já existe e não é Administrador nem Super user"); |
throw new AccessDeniedException("Tentado CRIAR um Role que já existe e não é Administrador nem Super user"); |
logger.error("Tentado CRIAR um Role que já existe e não é Administrador nem Super user"); |
throw new AccessDeniedException("Tentado CRIAR um Role que já existe e não é Administrador nem Super user"); |
} |
} catch (AccessDeniedException e) { |
logger.error("Tentado alterar um Role e não é Administrador nem Super user"); |
logger.error("Tentado alterar um Role e não é Administrador nem Super user"); |
throw e; |
} |
160,7 → 160,7 |
} |
else |
{ |
throw new AccessDeniedException("Nao pode alterar o código do papel porque não é administrador"); |
throw new AccessDeniedException("Nao pode alterar o código do papel porque não é administrador"); |
} |
} |
else |
196,9 → 196,9 |
/** |
* Serviço de nÃvel SUPORTE |
* Usado pelo update de Roles e Pela normalização de Roles de Comissões de Curso |
* Substitui a presença de um ROLE por um NOVO |
* Serviço de nível SUPORTE |
* Usado pelo update de Roles e Pela normalização de Roles de Comissões de Curso |
* Substitui a presença de um ROLE por um NOVO |
* |
* |
* @param oldRole if null does not find old users for replace |
423,100 → 423,100 |
private static final String INIT_ROLES = "user.role.all=Todos\n" + |
"user.role.admin=Administrador\n" + |
"user.role.student=Estudante\n" + |
"user.role.comissao.avaliacao.desempenho.docente=Comissão de Avaliação de Desempenho Docente\n" + |
"user.role.comissao.avaliacao.desempenho.docente=Comissão de Avaliação de Desempenho Docente\n" + |
"user.role.erasmusStudent=Estudante de Erasmus\n" + |
"user.role.teacher=Professor\n" + |
"user.role.teacher.eg=Professor da Ãrea de Engenharia\n" + |
"user.role.teacher.dg=Professor da Ãrea de Design\n" + |
"user.role.teacher.ce=Professor da Ãrea de Ciencias Empresariais\n" + |
"user.role.teacher.ch=Professor da Ãrea de Ciencias Humanas\n" + |
"user.role.teacher.eg=Professor da Área de Engenharia\n" + |
"user.role.teacher.dg=Professor da Área de Design\n" + |
"user.role.teacher.ce=Professor da Área de Ciencias Empresariais\n" + |
"user.role.teacher.ch=Professor da Área de Ciencias Humanas\n" + |
"user.role.teacher.td=Professor do DTD\n" + |
"user.role.teacher.cesh=Professor do DCESH\n" + |
"user.role.student.eg=Aluno da Ãrea de Engenharia\n" + |
"user.role.student.dg=Aluno da Ãrea de Design\n" + |
"user.role.student.ce=Aluno da Ãrea de Ciencias Empresariais\n" + |
"user.role.student.ch=Aluno da Ãrea de Ciencias Humanas\n" + |
"user.role.student.eg=Aluno da Área de Engenharia\n" + |
"user.role.student.dg=Aluno da Área de Design\n" + |
"user.role.student.ce=Aluno da Área de Ciencias Empresariais\n" + |
"user.role.student.ch=Aluno da Área de Ciencias Humanas\n" + |
"user.role.student.td=Aluno do DTD\n" + |
"user.role.student.cesh=Aluno do DCESH\n" + |
"user.role.ci=Centro Informático\n" + |
"user.role.worker=Funcionário\n" + |
"user.role.ci=Centro Informático\n" + |
"user.role.worker=Funcionário\n" + |
"user.role.invited=Convidado\n" + |
"user.role.services=Serviços\n" + |
"user.role.questionarios.tipologias.admin=Questionarios - Verificação de Tipologias\n" + |
"user.role.questionarios.atribuicoes.admin=Questionarios - Atribuições de Cursos\n" + |
"user.role.questionarios.atribuicoes.check_teachers=Questionarios - Verificação de Professores\n" + |
"user.role.questionarios.admin=Questionários - Super Administrador\n" + |
"user.role.questionarios.gerais=Questionários - Permissões Básicas (necessário)\n" + |
"user.role.servicesPrograms=Gestão de Programas Curriculares\n" + |
"user.role.servicesStudiesPlans=Gestão de Planos de Estudos\n" + |
"user.role.servicesCoursesManagement=Gestão de Cursos\n" + |
"user.role.servicesRolesManagement=Gestão de Papeis Institucionais\n" + |
"user.role.event_class_manager=Gestão de Classes de Eventos\n" + |
"user.role.event_manager_nfc=Gestão de Eventos do Nucleo de Formacao Continua\n" + |
"user.role.administrativeCouncil=Membro da Direcção\n" + |
"user.role.services=Serviços\n" + |
"user.role.questionarios.tipologias.admin=Questionarios - Verificação de Tipologias\n" + |
"user.role.questionarios.atribuicoes.admin=Questionarios - Atribuições de Cursos\n" + |
"user.role.questionarios.atribuicoes.check_teachers=Questionarios - Verificação de Professores\n" + |
"user.role.questionarios.admin=Questionários - Super Administrador\n" + |
"user.role.questionarios.gerais=Questionários - Permissões Básicas (necessário)\n" + |
"user.role.servicesPrograms=Gestão de Programas Curriculares\n" + |
"user.role.servicesStudiesPlans=Gestão de Planos de Estudos\n" + |
"user.role.servicesCoursesManagement=Gestão de Cursos\n" + |
"user.role.servicesRolesManagement=Gestão de Papeis Institucionais\n" + |
"user.role.event_class_manager=Gestão de Classes de Eventos\n" + |
"user.role.event_manager_nfc=Gestão de Eventos do Nucleo de Formacao Continua\n" + |
"user.role.administrativeCouncil=Membro da Direcção\n" + |
"user.role.administrativeCouncil.director=Director\n" + |
"user.role.administrativeCouncil.vice=Vice Director\n" + |
"user.role.schoolSecretary=Secretário da Escola\n" + |
"user.role.administrativeCouncilSecretariat=Secretaria da Direcção\n" + |
"user.role.schoolSecretary=Secretário da Escola\n" + |
"user.role.administrativeCouncilSecretariat=Secretaria da Direcção\n" + |
"user.role.teachersSecretariat=Secretaria de Pessoal Docente\n" + |
"user.role.dtd.president=Presidente do DTD\n" + |
"user.role.cesh.president=Presidente do DCESH\n" + |
"user.role.dtd.presidency=Membro da Presidencia do DTD\n" + |
"user.role.cesh.presidency=Membro da Presidencia do DCESH\n" + |
"user.role.scientificCouncil.president=CTC Presidente (Não utilizado)\n" + |
"user.role.scientificCouncil.president=CTC Presidente (Não utilizado)\n" + |
"user.role.representativeCouncil.president=Presidente do Conselho de Representantes\n" + |
"user.role.pedagogicCouncil.president=Presidente do Conselho Pedagógico\n" + |
"user.role.pedagogicCouncil.president=Presidente do Conselho Pedagógico\n" + |
"user.role.representativeCouncil=Conselho de Representantes\n" + |
"user.role.scientificCouncil=CTC Membro (Não utilizado)\n" + |
"user.role.scientificCouncil=CTC Membro (Não utilizado)\n" + |
"user.role.erasmusCouncil=Conselho Erasmus\n" + |
"user.role.pedagogicCouncil=Conselho Pedagógico\n" + |
"user.role.pedagogicCouncil=Conselho Pedagógico\n" + |
"user.role.courseCoordinator=Coordenadores\n" + |
"user.role.futureStudent=Futuros Alunos\n" + |
"user.role.oldStudent=Antigos Alunos\n" + |
"user.role.studentAssociation=Associação de Estudantes\n" + |
"user.role.computerCenter=Centro Informático\n" + |
"user.role.studentAssociation=Associação de Estudantes\n" + |
"user.role.computerCenter=Centro Informático\n" + |
"user.role.courseDirector=Presidente de Departamento\n" + |
"user.role.identifiersManager=Utilizador de Gestão de Identificadores\n" + |
"user.role.identifiersCollectionCreator=Administrador de Colecções de Identificadores\n" + |
"user.role.studentsID=Alunos de Informação e Documentação\n" + |
"user.role.studentsFSIR=Alunos de Fontes de Informação e Serviço de Referência\n" + |
"user.role.identifiersManager=Utilizador de Gestão de Identificadores\n" + |
"user.role.identifiersCollectionCreator=Administrador de Colecções de Identificadores\n" + |
"user.role.studentsID=Alunos de Informação e Documentação\n" + |
"user.role.studentsFSIR=Alunos de Fontes de Informação e Serviço de Referência\n" + |
"user.role.sendMailMessages=Enviar Mensagens de Correio Electronico\n" + |
"user.role.pedagogicCouncilSecretariat=Secretariado do Conselho Pedagógico\n" + |
"user.role.directionSecretariat=Secretariado da Direcção\n" + |
"user.role.pedagogicCouncilSecretariat=Secretariado do Conselho Pedagógico\n" + |
"user.role.directionSecretariat=Secretariado da Direcção\n" + |
"user.role.studentsSecretariat=Secretaria de Alunos\n" + |
"user.role.assessementsTester=Testador de Provas de Avaliação\n" + |
"user.role.assessementsTester=Testador de Provas de Avaliação\n" + |
"user.role.processes.admin=Inspector de Processos" + |
"user.role.validate.ei=Comissão de Curso de Engenharia Informática\n" + |
"user.role.courseValidateProgramGPME=Comissão de Curso de Gestão de PME\n" + |
"user.role.courseValidateProgramCET_TD=Comissão de Curso de CETS de TD\n" + |
"user.role.courseValidateProgramEI=Comissão de Curso de EI\n" + |
"user.role.courseValidateProgramEC=Comissão de Curso de EC\n" + |
"user.role.courseValidateProgramBioEng=Comissão de Curso de BioEng\n" + |
"user.role.courseValidateProgramEGI=Comissão de Curso de EGI\n" + |
"user.role.courseValidateProgramEERA=Comissão de Curso de EERA\n" + |
"user.role.courseValidateProgramDC=Comissão de Curso de DC\n" + |
"user.role.courseValidateProgramDA=Comissão de Curso de DA\n" + |
"user.role.courseValidateProgramTVAPE=Comissão de Curso de TVAPE\n" + |
"user.role.courseValidateProgramMI=Comissão de Curso de MI\n" + |
"user.role.courseValidateProgramEGPMEestranho=Comissão de Curso de EPGME\n" + |
"user.role.courseValidatePrograms=Validação de Programas\n" + |
"user.role.courseValidateProgramCET_CESH=Comissão de Curso de CETS de CESH\n" + |
"user.role.courseValidateProgramAPM=Comissão de Curso de APM\n" + |
"user.role.courseValidateProgramAA=Comissão de Curso de AA\n" + |
"user.role.courseValidateProgramG=Comissão de Curso de G\n" + |
"user.role.courseValidateProgramID=Comissão de Curso de ID\n" + |
"user.role.courseValidateProgramRPS=Comissão de Curso de RPS\n" + |
"user.role.courseValidateProgramTGI=Comissão de Curso de TGI\n" + |
"user.role.courseValidateProgramRU=Comissão de Curso de RU\n" + |
"user.role.courseValidateProgramCF=Comissão de Curso de Contabilidade e Finanças\n" + |
"user.role.validate.ei=Comissão de Curso de Engenharia Informática\n" + |
"user.role.courseValidateProgramGPME=Comissão de Curso de Gestão de PME\n" + |
"user.role.courseValidateProgramCET_TD=Comissão de Curso de CETS de TD\n" + |
"user.role.courseValidateProgramEI=Comissão de Curso de EI\n" + |
"user.role.courseValidateProgramEC=Comissão de Curso de EC\n" + |
"user.role.courseValidateProgramBioEng=Comissão de Curso de BioEng\n" + |
"user.role.courseValidateProgramEGI=Comissão de Curso de EGI\n" + |
"user.role.courseValidateProgramEERA=Comissão de Curso de EERA\n" + |
"user.role.courseValidateProgramDC=Comissão de Curso de DC\n" + |
"user.role.courseValidateProgramDA=Comissão de Curso de DA\n" + |
"user.role.courseValidateProgramTVAPE=Comissão de Curso de TVAPE\n" + |
"user.role.courseValidateProgramMI=Comissão de Curso de MI\n" + |
"user.role.courseValidateProgramEGPMEestranho=Comissão de Curso de EPGME\n" + |
"user.role.courseValidatePrograms=Validação de Programas\n" + |
"user.role.courseValidateProgramCET_CESH=Comissão de Curso de CETS de CESH\n" + |
"user.role.courseValidateProgramAPM=Comissão de Curso de APM\n" + |
"user.role.courseValidateProgramAA=Comissão de Curso de AA\n" + |
"user.role.courseValidateProgramG=Comissão de Curso de G\n" + |
"user.role.courseValidateProgramID=Comissão de Curso de ID\n" + |
"user.role.courseValidateProgramRPS=Comissão de Curso de RPS\n" + |
"user.role.courseValidateProgramTGI=Comissão de Curso de TGI\n" + |
"user.role.courseValidateProgramRU=Comissão de Curso de RU\n" + |
"user.role.courseValidateProgramCF=Comissão de Curso de Contabilidade e Finanças\n" + |
"user.role.courseValidateProgramNONE=Nenhuma\n" + |
"user.role.courseValidateProgramTPB=Comissão de Curso de Tecnologias de Produção de BiocombustÃveis\n"+ |
"user.role.board.institution=Board de Direcção do Instituto Politecnico\n"+ |
"user.role.repositoryDocs=Administração do Repositório Digital\n"+ |
"user.role.repositoryDeposit=Depositante do Repositório Digital\n"+ |
"user.role.courseValidateProgramTPB=Comissão de Curso de Tecnologias de Produção de Biocombustíveis\n"+ |
"user.role.board.institution=Board de Direcção do Instituto Politecnico\n"+ |
"user.role.repositoryDocs=Administração do Repositório Digital\n"+ |
"user.role.repositoryDeposit=Depositante do Repositório Digital\n"+ |
527,22 → 527,22 |
//ESTG |
"user.role.school.president.estg=Escola Director da ESTG\n"+ |
"user.role.school.board.estg=Escola Board de Direcção da ESTG\n"+ |
"user.role.school.board.estg=Escola Board de Direcção da ESTG\n"+ |
"user.role.school.secretariado.estg=Escola Secretariado da ESTG\n"+ |
//CTC |
"user.role.scientificCouncil.president.estg=CTC ESTG Presidente\n" + |
"user.role.scientificCouncil.board.estg=CTC ESTG Membro\n" + |
"user.role.scientificCouncil.secretariado.estg=CTC ESTG Secretariado\n" + |
//Pedagogico |
"user.role.pedagogicCouncil.president.estg=Pedagógico ESTG Presidente\n" + |
"user.role.pedagogicCouncil.board.estg=Pedagógico ESTG Membro\n" + |
"user.role.pedagogicCouncil.secretariado.estg=Pedagógico ESTG Secretariado\n" + |
"user.role.pedagogicCouncil.president.estg=Pedagógico ESTG Presidente\n" + |
"user.role.pedagogicCouncil.board.estg=Pedagógico ESTG Membro\n" + |
"user.role.pedagogicCouncil.secretariado.estg=Pedagógico ESTG Secretariado\n" + |
//MEMBROS ESCOLAS |
"user.role.worker.estg=Funcionário ESTG\n" + |
"user.role.worker.esae=Funcionário ESAE\n" + |
"user.role.worker.esecs=Funcionário ESECS\n" + |
"user.role.worker.ess=Funcionário ESS\n" + |
"user.role.worker.estg=Funcionário ESTG\n" + |
"user.role.worker.esae=Funcionário ESAE\n" + |
"user.role.worker.esecs=Funcionário ESECS\n" + |
"user.role.worker.ess=Funcionário ESS\n" + |
"user.role.teacher.estg=Docentes ESTG\n" + |
"user.role.teacher.esae=Docentes ESAE\n" + |
557,77 → 557,77 |
//ESAE |
"user.role.school.president.asae=Escola Director da ESAE\n"+ |
"user.role.school.board.esae=Escola Board de Direcção da ESAE\n"+ |
"user.role.school.board.esae=Escola Board de Direcção da ESAE\n"+ |
"user.role.school.secretariado.esae=Escola Secretariado da ESAE\n"+ |
//CTC |
"user.role.scientificCouncil.president.esae=CTC ESAE Presidente\n" + |
"user.role.scientificCouncil.board.esae=CTC ESAE Membro\n" + |
"user.role.scientificCouncil.secretariado.esae=CTC ESAE Secretariado\n" + |
//Pedagogico |
"user.role.pedagogicCouncil.president.esae=Pedagógico ESAE Presidente\n" + |
"user.role.pedagogicCouncil.board.esae=Pedagógico ESAE Membro\n" + |
"user.role.pedagogicCouncil.secretariado.esae=Pedagógico ESAE Secretariado\n" + |
"user.role.pedagogicCouncil.president.esae=Pedagógico ESAE Presidente\n" + |
"user.role.pedagogicCouncil.board.esae=Pedagógico ESAE Membro\n" + |
"user.role.pedagogicCouncil.secretariado.esae=Pedagógico ESAE Secretariado\n" + |
//ESECS |
"user.role.school.president.esecs=Escola Director da ESECS\n"+ |
"user.role.school.board.esecs=Escola Board de Direcção da ESECS\n"+ |
"user.role.school.board.esecs=Escola Board de Direcção da ESECS\n"+ |
"user.role.school.secretariado.esecs=Escola Secretariado da ESECS\n"+ |
//CTC |
"user.role.scientificCouncil.president.esecs=CTC ESECS Presidente\n" + |
"user.role.scientificCouncil.board.esecs=CTC ESECS Membro\n" + |
"user.role.scientificCouncil.secretariado.esecs=CTC ESECS Secretariado\n" + |
//Pedagogico |
"user.role.pedagogicCouncil.president.esecs=Pedagógico ESECS Presidente\n" + |
"user.role.pedagogicCouncil.board.esecs=Pedagógico ESECS Membro\n" + |
"user.role.pedagogicCouncil.secretariado.esecs=Pedagógico ESECS Secretariado\n" + |
"user.role.pedagogicCouncil.president.esecs=Pedagógico ESECS Presidente\n" + |
"user.role.pedagogicCouncil.board.esecs=Pedagógico ESECS Membro\n" + |
"user.role.pedagogicCouncil.secretariado.esecs=Pedagógico ESECS Secretariado\n" + |
//ESS |
"user.role.school.president.ess=Escola Director da ESS\n"+ |
"user.role.school.board.ess=Escola Board de Direcção da ESS\n"+ |
"user.role.school.board.ess=Escola Board de Direcção da ESS\n"+ |
"user.role.school.secretariado.ess=Escola Secretariado da ESS\n"+ |
//CTC |
"user.role.scientificCouncil.president.ess=CTC ESS Presidente\n" + |
"user.role.scientificCouncil.board.ess=CTC ESS Membro\n" + |
"user.role.scientificCouncil.secretariado.ess=CTC ESS Secretariado\n" + |
//Pedagogico |
"user.role.pedagogicCouncil.president.ess=Pedagógico ESS Presidente\n" + |
"user.role.pedagogicCouncil.board.ess=Pedagógico ESS Membro\n" + |
"user.role.pedagogicCouncil.secretariado.ess=Pedagógico ESS Secretariado\n" + |
"user.role.pedagogicCouncil.president.ess=Pedagógico ESS Presidente\n" + |
"user.role.pedagogicCouncil.board.ess=Pedagógico ESS Membro\n" + |
"user.role.pedagogicCouncil.secretariado.ess=Pedagógico ESS Secretariado\n" + |
//ESCOLAS ANTIGOS NAO USAR |
"user.role.board.school.estg=Board de Direcção da ESTG\n"+ |
"user.role.board.school.esae=Board de Direcção da ESAE\n"+ |
"user.role.board.school.esecs=Board de Direcção da ESECS\n"+ |
"user.role.board.school.ess=Board de Direcção da ESS\n"+ |
"user.role.board.school.estg=Board de Direcção da ESTG\n"+ |
"user.role.board.school.esae=Board de Direcção da ESAE\n"+ |
"user.role.board.school.esecs=Board de Direcção da ESECS\n"+ |
"user.role.board.school.ess=Board de Direcção da ESS\n"+ |
//ESAE |
"user.role.department.board.agric.recurs.nat=Departamento Direção - Agricultura e Recursos Naturais\n" + |
"user.role.department.board.cienc.tecnol.ani=Departamento Direção - Ciência e Tecnologia Animal\n" + |
"user.role.department.board.agric.recurs.nat=Departamento Direção - Agricultura e Recursos Naturais\n" + |
"user.role.department.board.cienc.tecnol.ani=Departamento Direção - Ciência e Tecnologia Animal\n" + |
"user.role.department.diretor.agric.recurs.nat=Departamento Diretor - Agricultura e Recursos Naturais\n" + |
"user.role.department.diretor.cienc.tecnol.ani=Departamento Diretor - Ciência e Tecnologia Animal\n" + |
"user.role.department.diretor.cienc.tecnol.ani=Departamento Diretor - Ciência e Tecnologia Animal\n" + |
//ESECS |
"user.role.department.board.comun.artes.tecn=Departamento Direção - Comunicação, Artes e Tecnologias\n" + |
"user.role.department.board.educac.formac=Departamento Direção - Educação e Formação\n" + |
"user.role.department.board.inter.des.soc=Departamento Direção - Intervenção e Desenvolvimento Social\n" + |
"user.role.department.diretor.comun.artes.tecn=Departamento Diretor - Comunicação, Artes e Tecnologias\n" + |
"user.role.department.diretor.educac.formac=Departamento Diretor - Educação e Formação\n" + |
"user.role.department.diretor.inter.des.soc=Departamento Diretor - Intervenção e Desenvolvimento Social\n" + |
"user.role.department.board.comun.artes.tecn=Departamento Direção - Comunicação, Artes e Tecnologias\n" + |
"user.role.department.board.educac.formac=Departamento Direção - Educação e Formação\n" + |
"user.role.department.board.inter.des.soc=Departamento Direção - Intervenção e Desenvolvimento Social\n" + |
"user.role.department.diretor.comun.artes.tecn=Departamento Diretor - Comunicação, Artes e Tecnologias\n" + |
"user.role.department.diretor.educac.formac=Departamento Diretor - Educação e Formação\n" + |
"user.role.department.diretor.inter.des.soc=Departamento Diretor - Intervenção e Desenvolvimento Social\n" + |
//ESS |
"user.role.department.board.cienc.tec.saude=Departamento Direção - Ciências e Tecnologias da Saúde\n" + |
"user.role.department.diretor.cienc.tec.saude=Departamento Diretor - Ciências e Tecnologias da Saúde\n" + |
"user.role.department.board.cienc.tec.saude=Departamento Direção - Ciências e Tecnologias da Saúde\n" + |
"user.role.department.diretor.cienc.tec.saude=Departamento Diretor - Ciências e Tecnologias da Saúde\n" + |
//ESTG |
"user.role.department.board.cienc.empre.sh=Departamento Direção - Ciências Empresariais, Sociais e Humanas\n" + |
"user.role.department.board.tecnolo.design=Departamento Direção - Tecnologias e Design\n" + |
"user.role.department.diretor.cienc.empre.sh=Departamento Diretor - Ciências Empresariais, Sociais e Humanas\n" + |
"user.role.department.board.cienc.empre.sh=Departamento Direção - Ciências Empresariais, Sociais e Humanas\n" + |
"user.role.department.board.tecnolo.design=Departamento Direção - Tecnologias e Design\n" + |
"user.role.department.diretor.cienc.empre.sh=Departamento Diretor - Ciências Empresariais, Sociais e Humanas\n" + |
"user.role.department.diretor.tecnolo.design=Departamento Diretor - Tecnologias e Design\n" |
; |
635,3 → 635,4 |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/web/controllers/courses/CoursesServicesController.java |
---|
New file |
0,0 → 1,60 |
package pt.estgp.estgweb.web.controllers.courses; |
import org.apache.struts.action.ActionForm; |
import org.json.JSONObject; |
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument; |
import pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
/** |
* Created by jorgemachado on 06/01/17. |
*/ |
public class CoursesServicesController extends AbstractWidgetAjaxController |
{ |
/** |
* See also CoursesServicesWidgetController for WS-API services |
*/ |
/** |
* |
* @param form |
* @param request |
* @param response |
* @return |
* @throws Throwable |
*/ |
public JSONObject generateGlobalLearningResultsChartImg(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable { |
String courseReportDocument = request.getParameter("courseReportDocument"); |
IServiceManager sm = ServiceManager.getInstance(); |
String json = (String) sm.execute(RequestUtils.getRequester(request, response), |
"CourseReportGenerateGlobalLearningResultsChartImg", |
new Object[]{courseReportDocument}); |
return new JSONObject(json); |
} |
public JSONObject save(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable { |
String courseReportDocument = request.getParameter("report"); |
CourseReportDocument reportDocument = CourseReportDocument.fromJson(courseReportDocument); |
reportDocument.setCourseName("ASD"); |
return reportDocument.toJsonObject(); |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/web/controllers/widgetmodel/CoursesServicesWidgetController.java |
---|
125,7 → 125,7 |
service2.put("parameter1","code = siges code"); |
service2.put("parameter2","period = \"S1,S2\""); |
service2.put("parameter3","year = \"201617,201718,...\""); |
service2.put("return","uma tabela em JSON com toda a informação de reusltados do pedagogico nesse ano"); |
service2.put("return","uma tabela em JSON com toda a informação de reusltados do pedagogico nesse ano"); |
JSONObject service3 = new JSONObject(); |
service3.put("service","/wsjson/api/app/ws-units-dtp-stats"); |
133,7 → 133,7 |
service3.put("parameter1","code = siges code"); |
service3.put("parameter2","period = \"S1,S2\""); |
service3.put("parameter3","year = \"201617,201718,...\""); |
service3.put("return","uma tabela em JSON com toda a informação de estatistica do preenchimento das pastas DTP"); |
service3.put("return","uma tabela em JSON com toda a informação de estatistica do preenchimento das pastas DTP"); |
JSONArray services = new JSONArray(); |
162,4 → 162,4 |
System.out.println(json); |
} |
*/ |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/web/controllers/SubServlet.java |
---|
New file |
0,0 → 1,50 |
package pt.estgp.estgweb.web.controllers; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.domain.UserImpl; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import java.io.IOException; |
public class SubServlet extends TesteEngSoftServlet { |
private static final Logger logger = Logger.getLogger(TesteEngSoftServlet.class); |
public void primeiroMetodo(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
logger.info("primeiroMetodo"); |
String name = req.getParameter("name"); |
String jsp = req.getParameter("jsp"); |
User u = new UserImpl(); |
u.setName(name); |
req.setAttribute("user", u); |
if (req.getSession().getAttribute("user") == null) { |
req.getSession().setAttribute("user", u); |
} |
//resp.getWriter().println("<html><body><h1>Hello</h1></body></html>"); |
req.getRequestDispatcher(jsp).forward(req, resp); |
} |
public void segundoMetodo(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
logger.info("segundoMetodo"); |
String name = req.getParameter("name"); |
String jsp = req.getParameter("jsp"); |
User u = new UserImpl(); |
u.setName(name); |
req.setAttribute("user", u); |
if (req.getSession().getAttribute("user") == null) { |
req.getSession().setAttribute("user", u); |
} |
//resp.getWriter().println("<html><body><h1>Hello</h1></body></html>"); |
req.getRequestDispatcher(jsp).forward(req, resp); |
} |
} |
/branches/grupo4/impl/src/java/pt/estgp/estgweb/web/controllers/TesteEngSoftServlet.java |
---|
New file |
0,0 → 1,37 |
package pt.estgp.estgweb.web.controllers; |
import org.apache.log4j.Logger; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServlet; |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import java.io.IOException; |
import java.lang.reflect.InvocationTargetException; |
public class TesteEngSoftServlet extends HttpServlet { |
private static final Logger logger = Logger.getLogger(TesteEngSoftServlet.class); |
@Override |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
doPost(req, resp); |
} |
@Override |
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
String op = req.getParameter("dispatch"); |
try { |
this.getClass() |
.getMethod(op, new Class[]{HttpServletRequest.class, HttpServletResponse.class}) |
.invoke(this, req, resp); |
} catch (NoSuchMethodException e) { |
e.printStackTrace(); |
} catch (IllegalAccessException e) { |
e.printStackTrace(); |
} catch (InvocationTargetException e) { |
e.printStackTrace(); |
} |
} |
} |
/branches/grupo4/impl/src/hbm/pt/estgp/estgweb/domain/PageContent.hbm.xml |
---|
38,8 → 38,8 |
</property> |
<property name="accessPolicyClass" type="string"/> |
<property name="slug" type="string"/> |
<property name="path" type="string" unique="true"> |
<column name="path" sql-type="TEXT, add UNIQUE pathIndex(path(512))"/> |
<property name="path" type="string"> |
<column name="path" sql-type="TEXT"/> |
</property> |
<many-to-one name="owner" class="pt.estgp.estgweb.domain.GenericUser" lazy="proxy" outer-join="false"/> |
<many-to-one name="parent" class="pt.estgp.estgweb.domain.PageSection" lazy="proxy" outer-join="false"> |
/branches/grupo4/impl/src/web/admin/courses/departments.jsp |
---|
42,229 → 42,229 |
<div class="container-fluid"> |
<div id="departmentsModule" |
ng-app="departmentsModule" |
ng-controller="departmentsModuleController"> |
<div id="departmentsModule" |
ng-app="departmentsModule" |
ng-controller="departmentsModuleController"> |
<script> |
//DECLARACAO DA APLICACAO LOCAL EM ANGULAR |
var departmentsModule = angular.module('departmentsModule', []); |
GLOBAL_BacoAngularAppDependencies.push('departmentsModule'); |
<script> |
//DECLARACAO DA APLICACAO LOCAL EM ANGULAR |
var departmentsModule = angular.module('departmentsModule', []); |
GLOBAL_BacoAngularAppDependencies.push('departmentsModule'); |
departmentsModule.controller('departmentsModuleController', function($scope) { |
$scope.departments = ${jsonArrayDepartments}; |
$scope.schools = ${jsonArraySchools}; |
$scope.setDirty = function(department) |
{ |
department.dirty = "true"; |
} |
$scope.save = function(department) |
{ |
var d = JSON.stringify(department); |
departmentsModule.controller('departmentsModuleController', function($scope) { |
$scope.departments = ${jsonArrayDepartments}; |
$scope.schools = ${jsonArraySchools}; |
$scope.setDirty = function(department) |
{ |
department.dirty = "true"; |
} |
$scope.save = function(department) |
{ |
var d = JSON.stringify(department); |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"updateCourseDepartment", |
{ |
"courseDepartmentJson" : d |
}, |
".form-horizontal", |
function(departmentJson) |
{ |
department.dirty = "false"; |
$scope.$apply(); |
} |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"updateCourseDepartment", |
{ |
"courseDepartmentJson" : d |
}, |
".form-horizontal", |
function(departmentJson) |
{ |
department.dirty = "false"; |
$scope.$apply(); |
} |
); |
} |
); |
} |
$scope.createRoles = function(department) |
{ |
var d = JSON.stringify(department); |
$scope.createRoles = function(department) |
{ |
var d = JSON.stringify(department); |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"createRolesForDeparment", |
{ |
"courseDepartmentJson" : d |
}, |
".form-horizontal", |
function(departmentJson) |
{ |
window.location.reload(); |
} |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"createRolesForDeparment", |
{ |
"courseDepartmentJson" : d |
}, |
".form-horizontal", |
function(departmentJson) |
{ |
window.location.reload(); |
} |
); |
} |
$scope.removeDepartment = function(department,$index) |
{ |
); |
} |
$scope.removeDepartment = function(department,$index) |
{ |
var d = JSON.stringify(department); |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"removeCourseDepartment", |
{ |
"courseDepartmentJson" : d |
}, |
".form-horizontal", |
function(departmentJson) |
{ |
$scope.departments.splice($index,1); |
$scope.$apply(); |
} |
var d = JSON.stringify(department); |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"removeCourseDepartment", |
{ |
"courseDepartmentJson" : d |
}, |
".form-horizontal", |
function(departmentJson) |
{ |
$scope.departments.splice($index,1); |
$scope.$apply(); |
} |
); |
} |
$scope.newDepartment = function() |
{ |
); |
} |
$scope.newDepartment = function() |
{ |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"newCourseDepartment",{}, |
".form-horizontal", |
function(departmentJson) |
{ |
departmentJson.dirty = "true"; |
$scope.departments.push(departmentJson); |
$scope.$apply(); |
} |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/admin/adminDepartment.do", |
"newCourseDepartment",{}, |
".form-horizontal", |
function(departmentJson) |
{ |
departmentJson.dirty = "true"; |
$scope.departments.push(departmentJson); |
$scope.$apply(); |
} |
); |
} |
); |
} |
}); |
</script> |
}); |
</script> |
<p><label class="label-info">Papeis dos Departamentos:</label> Os papeis de departamento são escolhidos da lista de papeis do sistema considerando-se todos os papeis com os prefixos:</p> |
<ul> |
<li>department.board: para membros da direcção</li> |
<li>department.diretor: para diretores direcção</li> |
</ul> |
<p>Caso seja necessário um novo papel deverá administrar os papeis institucionais dirija-se <html:link action="/user/configurationUserRoles">Aqui</html:link></p> |
<button class="btn btn-default" data-toggle="collapse" data-target=".languageNames">Mostrar Campos Multinliguisticos</button> |
<p><label class="label-info">Papeis dos Departamentos:</label> Os papeis de departamento são escolhidos da lista de papeis do sistema considerando-se todos os papeis com os prefixos:</p> |
<ul> |
<li>department.board: para membros da direcção</li> |
<li>department.diretor: para diretores direcção</li> |
</ul> |
<p>Caso seja necessário um novo papel deverá administrar os papeis institucionais dirija-se <html:link action="/user/configurationUserRoles">Aqui</html:link></p> |
<button class="btn btn-default" data-toggle="collapse" data-target=".languageNames">Mostrar Campos Multinliguisticos</button> |
<button class="btn btn-success pull-right" ng-click="newDepartment()"><span class="glyphicon glyphicon-plus"/></button> |
<div class="form-horizontal"> |
<div class="web-messages"></div> |
<table class="tablesorter-blue"> |
<thead> |
<tr> |
<th>Identificador</th> |
<th>Trocar Para Identificador * </th> |
<th>Ativo</th> |
<th>Instituição</th> |
<th style="width: 30%">Nome</th> |
<th>Papel para Membro da Direcao</th> |
<th>Papel para Director</th> |
<th></th> |
<th></th> |
<th></th> |
</tr> |
</thead> |
<tbody> |
<tr ng-class="{dirty: d.dirty=='true'}" ng-repeat="d in departments | orderBy:name:false"> |
<td> |
<div class="row"> |
<div class="col-md-8"> |
<input readonly="true" class="form-control" type="text" ng-model="d.sigla" ng-keyup="setDirty(d)"> |
</div> |
<div class="col-md-2">*</div> |
</div> |
<button class="btn btn-success pull-right" ng-click="newDepartment()"><span class="glyphicon glyphicon-plus"/></button> |
<div class="form-horizontal"> |
<div class="web-messages"></div> |
<table class="tablesorter-blue"> |
<thead> |
<tr> |
<th>Identificador</th> |
<th>Trocar Para Identificador * </th> |
<th>Ativo</th> |
<th>Instituição</th> |
<th style="width: 30%">Nome</th> |
<th>Papel para Membro da Direcao</th> |
<th>Papel para Director</th> |
<th></th> |
<th></th> |
<th></th> |
</tr> |
</thead> |
<tbody> |
<tr ng-class="{dirty: d.dirty=='true'}" ng-repeat="d in departments | orderBy:name:false"> |
<td> |
<div class="row"> |
<div class="col-md-8"> |
<input readonly="true" class="form-control" type="text" ng-model="d.sigla" ng-keyup="setDirty(d)"> |
</div> |
<div class="col-md-2">*</div> |
</div> |
</td> |
<td> |
<div class="row"> |
<div class="col-md-8"> |
<input class="form-control" type="text" ng-model="d.siglaNova" ng-keyup="setDirty(d)"> |
</div> |
<div class="col-md-2">*</div> |
</div> |
</td> |
<td> |
<select class="chosenOff form-control" ng-model="d.active" ng-change="setDirty(d)"> |
<option ng-value="true" ng-selected="d.active == true">Ativo</option> |
<option ng-value="false" ng-selected="d.active == false">Inativo</option> |
</select> |
</td> |
<td> |
<select class="chosenOff form-control" ng-model="d.courseSchool.id" ng-change="setDirty(d)" ng-options="s.id as s.name for s in schools"> |
</select> |
</td> |
<td> |
<input class="form-control" type="text" ng-model="d.name" ng-keyup="setDirty(d)"> |
<div class="languageNames collapse"> |
EN:<input class="form-control" type="text" ng-model="d.nameEn" ng-keyup="setDirty(d)"> |
ES:<input class="form-control" type="text" ng-model="d.nameEs" ng-keyup="setDirty(d)"> |
FR:<input class="form-control" type="text" ng-model="d.nameFr" ng-keyup="setDirty(d)"> |
</div> |
</td> |
</td> |
<td> |
<div class="row"> |
<div class="col-md-8"> |
<input class="form-control" type="text" ng-model="d.siglaNova" ng-keyup="setDirty(d)"> |
</div> |
<div class="col-md-2">*</div> |
</div> |
</td> |
<td> |
<select class="chosenOff form-control" ng-model="d.active" ng-change="setDirty(d)"> |
<option ng-value="true" ng-selected="d.active == true">Ativo</option> |
<option ng-value="false" ng-selected="d.active == false">Inativo</option> |
</select> |
</td> |
<td> |
<select class="chosenOff form-control" ng-model="d.courseSchool.id" ng-change="setDirty(d)" ng-options="s.id as s.name for s in schools"> |
</select> |
</td> |
<td> |
<input class="form-control" type="text" ng-model="d.name" ng-keyup="setDirty(d)"> |
<div class="languageNames collapse"> |
EN:<input class="form-control" type="text" ng-model="d.nameEn" ng-keyup="setDirty(d)"> |
ES:<input class="form-control" type="text" ng-model="d.nameEs" ng-keyup="setDirty(d)"> |
FR:<input class="form-control" type="text" ng-model="d.nameFr" ng-keyup="setDirty(d)"> |
</div> |
</td> |
<td style="font-size: 0.7em !important"> |
<select class="chosenOff form-control" ng-model="d.boardRole" ng-change="setDirty(d)"> |
<option value="">Escolha</option> |
<logic:iterate id="role" name="rolesBoardDepartamento"> |
<option value="${role}"><bean:message key="user.role.${role}"/></option> |
</logic:iterate> |
</select> |
</td> |
<td style="font-size: 0.7em !important"> |
<select class="chosenOff form-control" ng-model="d.directorRole" ng-change="setDirty(d)"> |
<option value="">Escolha</option> |
<logic:iterate id="role" name="rolesDiretorDepartamento"> |
<option value="${role}"><bean:message key="user.role.${role}"/></option> |
</logic:iterate> |
</select> |
</td> |
<td> |
<button type="button" class="btn btn-success btn-xs" ng-click="save(d)"> |
<span class="glyphicon glyphicon-ok"/> |
</button> |
</td> |
<td> |
<bacoTags:confirm msg="Tem a certeza que deseja remover o departamento {{d.name}}" targetFunction="angular.element($('#departmentsModule')).scope().removeDepartment({{d}},{{$index}});angular.element($('#departmentsModule')).scope().$apply();" btnClass="btn btn-danger btn-xs" icon="glyphicon glyphicon-remove"/> |
</td> |
<td> |
<button ng-if="!d.directorRole && !d.boardRole" data-toggle="tooltip" data-title="Criar Roles para este departamento" type="button" class="btn btn-success btn-xs" ng-click="createRoles(d)"> |
<span class="glyphicon glyphicon-user"/> |
</button> |
</td> |
<td style="font-size: 0.7em !important"> |
<select class="chosenOff form-control" ng-model="d.boardRole" ng-change="setDirty(d)"> |
<option value="">Escolha</option> |
<logic:iterate id="role" name="rolesBoardDepartamento"> |
<option value="${role}"><bean:message key="user.role.${role}"/></option> |
</logic:iterate> |
</select> |
</td> |
<td style="font-size: 0.7em !important"> |
<select class="chosenOff form-control" ng-model="d.directorRole" ng-change="setDirty(d)"> |
<option value="">Escolha</option> |
<logic:iterate id="role" name="rolesDiretorDepartamento"> |
<option value="${role}"><bean:message key="user.role.${role}"/></option> |
</logic:iterate> |
</select> |
</td> |
<td> |
<button type="button" class="btn btn-success btn-xs" ng-click="save(d)"> |
<span class="glyphicon glyphicon-ok"/> |
</button> |
</td> |
<td> |
<bacoTags:confirm msg="Tem a certeza que deseja remover o departamento {{d.name}}" targetFunction="angular.element($('#departmentsModule')).scope().removeDepartment({{d}},{{$index}});angular.element($('#departmentsModule')).scope().$apply();" btnClass="btn btn-danger btn-xs" icon="glyphicon glyphicon-remove"/> |
</td> |
<td> |
<button ng-if="!d.directorRole && !d.boardRole" data-toggle="tooltip" data-title="Criar Roles para este departamento" type="button" class="btn btn-success btn-xs" ng-click="createRoles(d)"> |
<span class="glyphicon glyphicon-user"/> |
</button> |
</td> |
</tr> |
</tbody> |
</table> |
<h2 class="label label-warning">* - A sigla é o identificador do departamento, altere a sigla apenas se perceber as suas implicações. Existem Classes no sistema que dependem da sigla do departamento, a sigla tem de ser unica</h2> |
<h2 class="label label-warning">* - A sigla apenas pode ser alterada se não houver docentes nem cursos a apontar para o departamento que pretende alterar</h2> |
<%-- |
<model:id name="department" property="id"/> |
<model:field name="department" property="name"/> |
<model:field name="department" property="nameEn"/> |
<model:field name="department" property="nameEs"/> |
<model:field name="department" property="nameFr"/> |
<model:remove name="department"/> |
--%> |
</div> |
</tr> |
</tbody> |
</table> |
<h2 class="label label-warning">* - A sigla é o identificador do departamento, altere a sigla apenas se perceber as suas implicações. Existem Classes no sistema que dependem da sigla do departamento, a sigla tem de ser unica</h2> |
<h2 class="label label-warning">* - A sigla apenas pode ser alterada se não houver docentes nem cursos a apontar para o departamento que pretende alterar</h2> |
<%-- |
<model:id name="department" property="id"/> |
<model:field name="department" property="name"/> |
<model:field name="department" property="nameEn"/> |
<model:field name="department" property="nameEs"/> |
<model:field name="department" property="nameFr"/> |
<model:remove name="department"/> |
--%> |
</div> |
<!--<pre> |
{{departments | json}} |
</pre>--> |
<%-- DEBUG |
<pre> |
{{departments | json}} |
</pre> |
<pre> |
{{schools | json}} |
</pre> |
--%> |
</div> |
<!--<pre> |
{{departments | json}} |
</pre>--> |
<%-- DEBUG |
<pre> |
{{departments | json}} |
</pre> |
<pre> |
{{schools | json}} |
</pre> |
--%> |
</div> |
</div> |
<p>* Atenção o identificador é a base dos papeis, deverá trocar também as chaves dos papeis na administração de papeis institucionais, procurando pelos papeis respectivos e alterando a sua chave para a nova sigla ou criando novos papeis</p> |
<p>* Atenção o identificador é a base dos papeis, deverá trocar também as chaves dos papeis na administração de papeis institucionais, procurando pelos papeis respectivos e alterando a sua chave para a nova sigla ou criando novos papeis</p> |
<% |
/branches/grupo4/impl/src/web/hello.jsp |
---|
New file |
0,0 → 1,41 |
<%@ page import="pt.estgp.estgweb.domain.User" %> |
<%@ page import="jomm.dao.impl.AbstractDao" %> |
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %><%-- |
Created by IntelliJ IDEA. |
User: daniel |
Date: 23/11/2017 |
Time: 11:09 |
http://localhost:8080/baco/testeEngSoft/?name=super&jsp=/hello.jsp&dispatch=primeiroMetodo |
--%> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<html> |
<head> |
<title>Title</title> |
</head> |
<jsp:useBean id="user" type="pt.estgp.estgweb.domain.User" scope="request"/> |
<body> |
<h1>Hello JSP</h1> |
<% |
User u = (User) request.getAttribute("user"); |
User uSess = (User) request.getSession().getAttribute("user"); |
AbstractDao.getCurrentSession().beginTransaction(); |
User loaded = DaoFactory.getUserDaoImpl().loadByUsername(u.getName()); |
request.setAttribute("loaded", loaded); |
%> |
u: |
<%=u.getName()%> |
<br> |
u: |
${loaded.superuser} |
<br> |
uSess: |
<%=uSess.getName()%> |
</body> |
</html> |
<% |
AbstractDao.getCurrentSession().getTransaction().commit(); |
%> |
/branches/grupo4/impl/src/web/examples/angular/directives/angular-directive.jsp |
---|
New file |
0,0 → 1,95 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %> |
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %> |
<html> |
<head></head> |
<body ng-app="BacoAngularApp"> |
<jsp:include page="/layout/themes/scripts-default.jsp"/> |
<jsp:include page="/layout/headerTools.jsp"/> |
<div id="demoApp" ng-app="demoApp" ng-controller="demoAppController"> |
<h1>Uso de Directivas com Templates</h1> |
<p>Este exemplo mostra como deve ser usada uma template para podermos incluir uma função |
de controlo especifica da template usando directivas</p> |
<p>Mostra ainda que dentro da template o scope é uma fusão dos scopes da ngApp e da propria directiva</p> |
<p>Mostra também como podemos escolher dinamicamente a template ou as funcionalidades dependendo de atributos que passamos à template</p> |
<script> |
var demoApp = angular.module('demoApp', []); |
GLOBAL_BacoAngularAppDependencies.push('demoApp'); |
//demoApp..directive('tpl', function() { |
//ou |
angular.module('demoApp').directive('tpl', function() { |
return { |
restrict: 'E', //A ou E define se é o nome do elemento ou um atributo |
link: function(scope, element, attrs) { |
// concatenating the directory to the ver attr to select the correct excerpt for the day |
scope.teste = "teste"; |
scope.move = function(){ |
scope.teste = "teste2"; |
scope.testeSuper = "testeSuper2"; |
} |
}, |
// passing in contentUrl variable |
templateUrl: function(elem,attrs) { |
return attrs.templatename; |
} |
} |
}); |
demoApp.controller('demoAppController', function ($scope) { |
$scope.testeSuper = "testeSuper"; |
} |
); |
</script> |
<p>campo testeSuper no mainmodule {{testeSuper}}</p> |
<p>Se incluirmos o tpl2.html apenas vamos ter acesso às variaveis do scope da aplicação, neste caso o teste, a template pode estar declarada fora da app, não há problema</p> |
<p>Por acaso neste exemplo temos acesso ao testeSuper porque a directiva adiciona funcionalidade ao scope da aplicação onde é chamada, mas se não chamarmos nenhuma directiva |
a var testeSuper não aparece</p> |
<div ng-include="'tpl2.html'"></div> |
<h2>Invocando a tpl de html com directiva</h2> |
<tpl templatename="tpl.html"></tpl> |
<h2>Invocando a tpl de de javascript com directiva</h2> |
<tpl templatename="tpl2.html"></tpl> |
</div> |
<!--TEMPLATE RECURSIVO--> |
<script type="text/ng-template" id="tpl2.html"> |
<div> |
<h1>Usando um template de Script</h1> |
<p>TESTE</p> |
<p>{{teste}}</p> |
<p>{{testeSuper}}</p> |
<button ng-click="move()">Muda Textos</button> |
</div> |
</script> |
</body> |
</html> |
/branches/grupo4/impl/src/web/examples/angular/directives/tpl.html |
---|
New file |
0,0 → 1,5 |
<h1>Template de HTML</h1> |
<p>TESTE</p> |
<p>{{teste}}</p> |
<p>{{testeSuper}}</p> |
<button ng-click="move()">Muda Textos</button> |
/branches/grupo4/impl/src/web/examples/angular/directives/angular-directive-module.jsp |
---|
New file |
0,0 → 1,36 |
<%-- |
Created by IntelliJ IDEA. |
User: jorgemachado |
Date: 11/11/17 |
Time: 10:20 |
To change this template use File | Settings | File Templates. |
--%> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<html> |
<head> |
<title></title> |
</head> |
<body ng-app="BacoAngularApp"> |
<jsp:include page="/layout/themes/scripts-default.jsp"/> |
<jsp:include page="/layout/headerTools.jsp"/> |
<div class="container"> |
<h1>Uso de Templates Generalizados e cada um com sua template</h1> |
<p>O caso em questão é a existencia de um esqueleto principal para um modulo (mainmodule)</p> |
<p>O main module inclui templates para cada componente usando o ng-include</p> |
<p>Esse ng-include é referente ao campo @class de cada componente</p> |
<p>vamos incluir esse esqueleto e todas as templates especificas dos nossos modulos</p> |
<p>incluimos ainda as directivas que estiverem nos nossos modulos</p> |
<p>o template do ng-include irá colocar a directiva desejada caso seja necessário</p> |
<p>com a directiva podemos ter funcionalidade de scope associada ao subcomponente, que é desconhecido do main module</p> |
<p>caso necessite o includemodule também tem acesso ao scope da app principal</p> |
<p>o unico requesito é passar ao include module o nome da app onde ele vai inserir as directivas</p> |
<jsp:include page="angular-directive-mainmodule.jsp"/> |
<jsp:include page="angular-directive-includemodule.jsp"/> |
</div> |
</body> |
</html> |
/branches/grupo4/impl/src/web/examples/angular/directives/angular-directive-includemodule.jsp |
---|
New file |
0,0 → 1,60 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<p>Modulo Incluido contem as directivas e os templates necessários</p> |
<p>Este módulo conhece o nome do módulo da App onde vai ser incluido</p> |
<script> |
angular.module("demoApp").directive('tpl', function() { |
var contentUrl; |
return { |
restrict: 'E', //A ou E define se é o nome do elemento ou um atributo |
link: function(scope, element, attrs) { |
// concatenating the directory to the ver attr to select the correct excerpt for the day |
//contentUrl = attrs.templatename + '.html'; |
//console.log(contentUrl); |
scope.teste = "teste"; |
scope.move = function(){ |
scope.teste = "teste2modules"; |
//scope.testeSuper = "testeSuper2modules"; |
angular.element("#demoApp").scope().testeSuper = "testeSuper2modules"; |
} |
scope.mudaCompName = function(comp){ |
comp.name = "NOVO NOME DO COMP MUDADO NA DIRECTIVA"; |
} |
}, |
// passing in contentUrl variable |
templateUrl: function(elem,attrs) { |
return "templateDirectiva"; |
} |
} |
}); |
</script> |
<script type="text/ng-template" id="directive_class"> |
<div style="border: 1px solid #000000"> |
<h1>DIRECTIVE CLASS TEMPLATE</h1> |
<p>COMP ELEMENTO DIRECTIVA:{{comp.name}}</p> |
<p><input type="text" ng-model="comp.name"></p> |
<tpl></tpl> |
<p>Teste no scope da directiva<p> |
<pre> |
{{teste | json}} |
</pre> |
</div> |
</script> |
<script type="text/ng-template" id="templateDirectiva"> |
<div style="border: 1px solid green"> |
<h1>templateDirectiva</h1> |
<p>TESTE</p> |
<p>{{teste}}</p> |
<p>{{testeSuper}}</p> |
<p>COMP ELEMENTO DIRECTIVA:{{comp.name}}</p> |
<button ng-click="move()">Muda Textos</button> |
<button ng-click="mudaCompName(comp)">Muda COMP NAME</button> |
</div> |
</script> |
/branches/grupo4/impl/src/web/examples/angular/directives/angular-directive-mainmodule.jsp |
---|
New file |
0,0 → 1,50 |
<div id="demoApp" ng-app="demoApp" ng-controller="demoAppController"> |
<script> |
var demoApp = angular.module('demoApp', []); |
GLOBAL_BacoAngularAppDependencies.push('demoApp'); |
demoApp.controller('demoAppController', function ($scope) { |
$scope.testeSuper = "testeSuper"; |
$scope.data = |
{ |
comps : [ |
{ |
"@class" : "directive_class", |
"name" : "componente de teste" |
} |
] |
} |
} |
); |
</script> |
<h1>Campo testeSuper no mainmodule "{{testeSuper}}"</h1> |
<h1>Campo data.comps[0].name no mainmodule "{{data.comps[0].name}}"</h1> |
<h2>Template chamado atraves de um template de classe intermedio</h2> |
<div ng-repeat="comp in data.comps" ng-include="comp['@class']"> |
</div> |
<pre> |
{{testeSuper | json}} |
</pre> |
<pre> |
{{data | json}} |
</pre> |
</div> |
/branches/grupo4/impl/src/web/user/courses/coursereport/templates.jsp |
---|
New file |
0,0 → 1,694 |
<%@ page |
import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components.UnitsLearningResultYear" %> |
<%@ page |
import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components.UnitsLearningResultSemester" %> |
<%@ page |
import="pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components.UnitsLearningResultUc" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<!-- |
@section objeto com seccoes e componentes |
@optional @chapter capitulo do documento para esta seccao para contcatenar às subsections |
--> |
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_CourseUnitsReportsSection"> |
<div class="sections"> |
<a name="indexCus"></a> |
<span ng-repeat="cu in section.sections" ng-init="cu.taxaAprovacao = 100 * cu.courseUnitEvaluation.numAlunosAprovTotal/(cu.courseUnitEvaluation.numAlunosInscritos - cu.courseUnitEvaluation.numAlunosSemElementosAvaliacao)"> |
<a href="#cu{{$index}}" ng-class="{ 'alert-danger': (cu.courseUnitEvaluation.cumprimentoProgramaPercent < 100) || cu.taxaAprovacao < 75 || !cu.courseUnitEvaluation.closed || !cu.courseUnitEvaluation.teacherComplete}"> |
{{cu.title}} |
</a> | |
</span> |
<div ng-repeat="cu in section.sections" |
class="section panel-primary"> |
<a name="cu{{$index}}"></a> |
<span ng-if="$index != 0" class="glyphicon glyphicon-backward" ></span><a ng-if="$index != 0" href="#indexCus"> Voltar atrás</a> |
<div class="panel-heading"><h2>{{cu.title}}</h2></div> |
<div style="padding-left:20px"> |
<div><h3><label class="label label-primary">Estado do Relatório</label></h3></div> |
<div ng-if="cu.courseUnitEvaluation.closed"> |
Entregue e Aceite |
</div> |
<div class="alert-danger" ng-if="cu.courseUnitEvaluation.closed && !cu.courseUnitEvaluation.teacherComplete"> |
Entregue mas não foi aprovado pela comissão |
</div> |
<div class="alert-danger" ng-if="!cu.courseUnitEvaluation.closed && !cu.courseUnitEvaluation.teacherComplete"> |
Não foi entregue pelo docente para validação |
</div> |
</div> |
<div style="padding-left:20px"> |
<div><h3><label class="label label-primary">Resultados</label></h3></div> |
<div> |
<table class="tablesorter-blue" width="100%"> |
<tr> |
<th rowspan="2"> |
Nº Alunos Inscritos |
</th> |
<th rowspan="2"> |
Nº de alunos sem elementos de avaliação |
</th> |
<th colspan="5"> |
Nº de alunos aprovados em |
</th> |
<th colspan="2"> |
Aprovados com a classificação entre 10 e 13 valores |
</th> |
<th colspan="2"> |
Aprovados com a classificação entre 14 e 16 valores |
</th> |
<th colspan="2"> |
Aprovados com a classificação entre 17 e 20 valores |
</th> |
</tr> |
<tr> |
<th>Avaliação de frequência</th> |
<th>Exame Época Normal</th> |
<th>Exame Época Recurso</th> |
<th>Exame Época Especial</th> |
<th>Total</th> |
<th>Nº</th> |
<th>%</th> |
<th>Nº</th> |
<th>%</th> |
<th>Nº</th> |
<th>%</th> |
</tr> |
<tr> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosInscritos}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosSemElementosAvaliacao}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprovFrequencia}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprovNormal}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprovRecurso}} |
</td> |
<td style="text-align: center"> |
{{cu.courseUnitEvaluation.numAlunosAprovEspecial}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprovTotal}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprov1013}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprov1013Percent}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprov1416}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprov1416Percent}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprov1720}} |
</td> |
<td class="text-center"> |
{{cu.courseUnitEvaluation.numAlunosAprov1720Percent}} |
</td> |
</tr> |
</table> |
</div> |
</div> |
<div style="padding-left:20px" > |
<div><h3><label class="label label-primary">Taxa de Aprovação</label></h3></div> |
<div ng-class="{ 'alert-danger': cu.taxaAprovacao < 75 }">{{cu.taxaAprovacao}}%</div> |
</div> |
<div style="padding-left:20px"> |
<div><h3><label class="label label-primary">Apreciação dos resultados quantitativos obtidos pelos estudantes</label></h3></div> |
<div>{{cu.courseUnitEvaluation.qualApreciacaoQuantitivos}}</div> |
</div> |
<div style="padding-left:20px"> |
<div><h3><label class="label label-primary">Apreciação do funcionamento da UC</label></h3></div> |
<div>{{cu.courseUnitEvaluation.qualApreciacaoUC}}</div> |
</div> |
<div style="padding-left:20px"> |
<div><h3><label class="label label-primary">Percentagem de cumprimento do programa da UC</label></h3></div> |
<div ng-class="{ 'alert-danger': (cu.courseUnitEvaluation.cumprimentoProgramaPercent < 100) }"> |
{{cu.courseUnitEvaluation.cumprimentoProgramaPercent}}% |
</div> |
</div> |
<div style="padding-left:20px"> |
<div><h3><label class="label label-primary">Apreciação do cumprimento do programa da UC</label></h3></div> |
<div>{{cu.courseUnitEvaluation.qualApreciacaoCumprimentoPrograma}}</div> |
</div> |
<div style="padding-left:20px"> |
<div><h3><label class="label label-primary">Conclusões</label></h3></div> |
<div>{{cu.courseUnitEvaluation.qualConclusoes}}</div> |
</div> |
</div> |
</div> |
</script> |
<style> |
.dtpstats td, .dtpstats th{ |
text-align: center !important; |
} |
</style> |
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_reportucsummary_UnitsDtpTable"> |
<div class="sections"> |
<table class="table dtpstats"> |
<thead> |
<tr> |
<th rowspan="2">Unidade Curricular</th> |
<th colspan="2">Planeamento</th> |
<th rowspan="2">Ficha Curricular</th> |
<th rowspan="2">Sumários</th> |
<th colspan="2">Avaliação</th> |
<th rowspan="2">Relatório de Avaliação</th> |
<th rowspan="2">Inquerito Pedagógico</th> |
</tr> |
<tr> |
<th>Conteúdos</th> |
<th>Calendarização</th> |
<th>Enunciados</th> |
<th>Pautas</th> |
</tr> |
</thead> |
<tbody> |
<tr> |
<th colspan="9">Semestre 1</th> |
</tr> |
<tr ng-repeat="dtpStat in comp.semester1.courseUnitDtpStats"> |
<td>{{dtpStat.name}}</td> |
<td ng-class="{ 'alert-danger' : !dtpStat.planeamentoConteudos }"><input type="checkbox" ng-model="dtpStat.planeamentoConteudos"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.planeamentoCalendarizacao }"><input type="checkbox" ng-model="dtpStat.planeamentoCalendarizacao"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.ficha }"><input type="checkbox" ng-model="dtpStat.ficha"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.sumarios }"><input type="checkbox" ng-model="dtpStat.sumarios"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoEnunciados }"><input type="checkbox" ng-model="dtpStat.avaliacaoEnunciados"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoPautas }"><input type="checkbox" ng-model="dtpStat.avaliacaoPautas"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.relatorio }"><input type="checkbox" ng-model="dtpStat.relatorio"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.inquerito }"><input type="checkbox" ng-model="dtpStat.inquerito"/></td> |
</tr> |
<tr> |
<th colspan="9">Semestre 2</th> |
</tr> |
<tr ng-repeat="dtpStat in comp.semester2.courseUnitDtpStats"> |
<td>{{dtpStat.name}}</td> |
<td ng-class="{ 'alert-danger' : !dtpStat.planeamentoConteudos }"><input type="checkbox" ng-model="dtpStat.planeamentoConteudos"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.planeamentoCalendarizacao }"><input type="checkbox" ng-model="dtpStat.planeamentoCalendarizacao"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.ficha }"><input type="checkbox" ng-model="dtpStat.ficha"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.sumarios }"><input type="checkbox" ng-model="dtpStat.sumarios"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoEnunciados }"><input type="checkbox" ng-model="dtpStat.avaliacaoEnunciados"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.avaliacaoPautas }"><input type="checkbox" ng-model="dtpStat.avaliacaoPautas"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.relatorio }"><input type="checkbox" ng-model="dtpStat.relatorio"/></td> |
<td ng-class="{ 'alert-danger' : !dtpStat.inquerito }"><input type="checkbox" ng-model="dtpStat.inquerito"/></td> |
</tr> |
</tbody> |
</table> |
</div> |
</script> |
<style> |
.learning td |
{ |
font-size: 0.7em; |
} |
.learning td input{ |
width: 50px; |
} |
.learning td input:read-only{ |
width: 50px; |
background-color: #cccccc; |
} |
.learning tr.year td { |
vertical-align: top; |
background-color: #aaaaaa; |
font-weight: bold; |
} |
.learning tr.period td { |
vertical-align: top; |
background-color: #dfdfdf; |
} |
</style> |
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_UnitsLearningResultsTable"> |
<unitslearningresultstable> |
</unitslearningresultstable> |
</script> |
<script> |
angular.module("courseReportApp").directive('boundModel', function() { |
return { |
require: 'ngModel', |
link: function(scope, elem, attrs, ngModel) { |
scope.$watch(attrs.boundModel, function(newValue, oldValue) { |
if(newValue != oldValue) { |
ngModel.$setViewValue(newValue); |
ngModel.$render(); |
} |
}); |
} |
} |
}); |
angular.module("courseReportApp").directive('unitslearningresultstable', function() { |
return { |
restrict: 'E', |
link: function($scope, element, attrs) |
{ |
$scope.checkedDocuments = []; |
$scope.checkUnit = function(document,collection) |
{ |
if(document.checked) |
{ |
var docContainer = |
{ |
"document" : document, |
"collection" : collection |
} |
$scope.checkedDocuments.push(docContainer); |
} |
else |
{ |
angular.forEach($scope.checkedDocuments, function(documentContainer, key) |
{ |
if(documentContainer.document == document) |
{ |
var index = $scope.checkedDocuments.indexOf(documentContainer); |
$scope.checkedDocuments.splice(index, 1); |
} |
}); |
} |
} |
$scope.changeDocumentCollection = function(collection) |
{ |
angular.forEach($scope.checkedDocuments, function(documentContainer, key) |
{ |
collection.ucs.push(documentContainer.document); |
delete documentContainer.document.checked; |
}); |
angular.forEach($scope.checkedDocuments, function(documentContainer, key) |
{ |
var index = documentContainer.collection.ucs.indexOf(documentContainer.document); |
documentContainer.collection.ucs.splice(index, 1); |
}); |
$scope.checkedDocuments = []; |
} |
$scope.avg = function(field,container, childs) |
{ |
if(!childs || childs.length == 0) |
return 0; |
var sum = 0; |
var c; |
for(c in childs) |
{ |
if(childs[c] && childs[c][field]) |
sum += 1*childs[c][field]; |
} |
container[field] = sum / childs.length; |
return container[field]; |
} |
$scope.percent = function(n,total) |
{ |
if(!n || n == 0 || !total || total == 0) |
return 0; |
return 100 * n / total; |
} |
$scope.reprovados = function(comp) |
{ |
if(comp.alunosInscritos && comp.semElementos && comp.aprovados) |
return comp.alunosInscritos - comp.semElementos - comp.aprovados; |
return 0; |
} |
$scope.removeComponent = function(index,list) |
{ |
list.splice(index,1); |
} |
$scope.hasYearUnits = function(year) |
{ |
for(s in year.semesters) |
{ |
if(year.semesters[s].ucs && year.semesters[s].ucs.length > 0) |
return true; |
} |
return false; |
} |
$scope.isInvalidAnfHaveUcs = function(year,years,index) |
{ |
if(year.ano > 0) |
return false; |
var s; |
for(s in year.semesters) |
{ |
if(year.semesters[s].ucs && year.semesters[s].ucs.length > 0) |
return true; |
} |
years.splice(index,1); |
return false; |
} |
$scope.addUc = function(semestre) |
{ |
semestre.ucs.push( |
{ |
"@class" : "<%=UnitsLearningResultUc.class.getName()%>", |
manual : true, |
periodo : semestre.semestre, |
alunosInscritos: 0, |
aprovados: 0, |
aprovados1013: 0, |
aprovados1013Percent: 0, |
aprovados1416: 0, |
aprovados1416Percent: 0, |
aprovados1720: 0, |
aprovados1720Percent: 0, |
aprovadosPercent: 0, |
cumprimentoProgramaPercent: 0, |
reprovados: 0, |
reprovadosPercent: 0, |
semElementos: 0, |
semElementosPercent: 0, |
sigesCode : 0 |
} |
); |
} |
$scope.addAno = function(comp) |
{ |
if(!comp.years) |
comp.years = []; |
comp.years.push( |
{ |
ano : 1, |
"@class" : "<%=UnitsLearningResultYear.class.getName()%>", |
manual : true, |
"alunosInscritos": 0, |
"aprovados": 0, |
"aprovados1013": 0, |
"aprovados1013Percent": 0, |
"aprovados1416": 0, |
"aprovados1416Percent": 0, |
"aprovados1720": 0, |
"aprovados1720Percent": 0, |
"aprovadosPercent": 0, |
"cumprimentoProgramaPercent": 0, |
"reprovados": 0, |
"reprovadosPercent": 0, |
"semElementos": 0, |
"semElementosPercent": 0, |
semesters : [ |
{ |
"@class" : "<%=UnitsLearningResultSemester.class.getName()%>", |
manual : true, |
semestre : "S1", |
alunosInscritos: 0, |
aprovados: 0, |
aprovados1013: 0, |
aprovados1013Percent: 0, |
aprovados1416: 0, |
aprovados1416Percent: 0, |
aprovados1720: 0, |
aprovados1720Percent: 0, |
aprovadosPercent: 0, |
cumprimentoProgramaPercent: 0, |
reprovados: 0, |
reprovadosPercent: 0, |
semElementos: 0, |
semElementosPercent: 0, |
ucs : [] |
}, |
{ |
"@class" : "<%=UnitsLearningResultSemester.class.getName()%>", |
manual : true, |
semestre: "S2", |
alunosInscritos: 0, |
aprovados: 0, |
aprovados1013: 0, |
aprovados1013Percent: 0, |
aprovados1416: 0, |
aprovados1416Percent: 0, |
aprovados1720: 0, |
aprovados1720Percent: 0, |
aprovadosPercent: 0, |
cumprimentoProgramaPercent: 0, |
reprovados: 0, |
reprovadosPercent: 0, |
semElementos: 0, |
semElementosPercent: 0, |
ucs : [] |
} |
] |
} |
); |
} |
}, |
templateUrl: function(elem,attrs) { |
return "unitslearningresultstable"; |
} |
} |
}); |
</script> |
<script type="text/ng-template" id="unitslearningresultstable"> |
<div class="sections"> |
<button class="btn btn-success" ng-click="addAno(comp)"><span class="glyphicon glyphicon-plus"></span> Ano Manual</button> |
<table class="table learning"> |
<thead> |
<tr> |
<th rowspan="2">Mover</th> |
<th rowspan="2">Código</th> |
<th rowspan="2">Unidade Curricular</th> |
<th rowspan="2">Cumprimento do Programa</th> |
<th rowspan="2">Alunos Inscritos</th> |
<th colspan="2">Sem Elementos</th> |
<th colspan="2">Reprovados</th> |
<th colspan="2">Aprovados</th> |
<th colspan="2">Aprovados 10-13</th> |
<th colspan="2">Aprovados 14-16</th> |
<th colspan="2">Aprovados 17-20</th> |
</tr> |
<tr> |
<th>N</th> |
<th>%</th> |
<th>N</th> |
<th>%</th> |
<th>N</th> |
<th>%</th> |
<th>N</th> |
<th>%</th> |
<th>N</th> |
<th>%</th> |
<th>N</th> |
<th>%</th> |
</tr> |
</thead> |
<tbody> |
<tr colspan="17" ng-if="false" ng-repeat-start="year in comp.years"></tr> |
<tr class="year"> |
<td colspan="3" ng-if="year.ano > 0"> |
<button ng-disabled="hasYearUnits(year)" class="btn btn-danger btn-xs" ng-click="removeComponent($index,comp.years)"><span class="glyphicon glyphicon-remove"></span></button> |
<span ng-if="!year.manual">{{year.ano}}ª ano</span> |
<span ng-if="year.manual"> |
<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'}]"> |
</select> |
</span> |
</td> |
<td colspan="3" style="font-size: 1.0em !important" ng-if="isInvalidAnfHaveUcs(year,comp.years,$index)"> |
Unidades que não constam do plano (Verifique a situação com os serviços Académicos antes de continuar) |
poderão constar de um plano antigo ou ter o código siges desatualizado. |
</td> |
<td><input readonly="true" type="number" ng-model="year.cumprimentoProgramaPercent" bound-model="avg('cumprimentoProgramaPercent',year,year.semesters)"></td> |
<td><input readonly="true" type="number" ng-model="year.alunosInscritos" bound-model="avg('alunosInscritos',year,year.semesters)"></td> |
<td><input readonly="true" type="number" ng-model="year.semElementos" bound-model="avg('semElementos',year,year.semesters)"></td> |
<td><input readonly="true" type="number" ng-model="year.semElementosPercent" bound-model="percent(year.semElementos,year.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="year.reprovados" bound-model="reprovados(year)"></td> |
<td><input readonly="true" type="number" ng-model="year.reprovadosPercent" bound-model="percent(year.reprovados,year.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovados" bound-model="year.aprovados1013*1 + year.aprovados1416*1 + year.aprovados1720*1"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovadosPercent" bound-model="percent(year.aprovados,year.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovados1013" bound-model="avg('aprovados1013',year,year.semesters)"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovados1013Percent" bound-model="percent(year.aprovados1013,year.aprovados)"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovados1416" bound-model="avg('aprovados1416',year,year.semesters)"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovados1416Percent" bound-model="percent(year.aprovados1416,year.aprovados)"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovados1720" bound-model="avg('aprovados1720',year,year.semesters)"></td> |
<td><input readonly="true" type="number" ng-model="year.aprovados1720Percent" bound-model="percent(year.aprovados1720,year.aprovados)"></td> |
</tr> |
<tr ng-if="false" ng-repeat-start="s in year.semesters" ></tr> |
<tr class="period" ng-if="year.ano > 0 || s.ucs.length > 0"> |
<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> |
<button class="btn btn-success pull-right" ng-click="addUc(s)"><span class="glyphicon glyphicon-plus"></span> UC Manual</button> |
</td> |
<td><input readonly="true" type="number" ng-model="s.cumprimentoProgramaPercent" bound-model="avg('cumprimentoProgramaPercent',s,s.ucs)"></td> |
<td><input readonly="true" type="number" ng-model="s.alunosInscritos" bound-model="avg('alunosInscritos',s,s.ucs)"></td> |
<td><input readonly="true" type="number" ng-model="s.semElementos" bound-model="avg('semElementos',s,s.ucs)"></td> |
<td><input readonly="true" type="number" ng-model="s.semElementosPercent" bound-model="percent(s.semElementos,s.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="s.reprovados" bound-model="reprovados(s)"></td> |
<td><input readonly="true" type="number" ng-model="s.reprovadosPercent" bound-model="percent(s.reprovados,s.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovados" bound-model="s.aprovados1013*1 + s.aprovados1416*1 + s.aprovados1720*1"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovadosPercent" bound-model="percent(s.aprovados,s.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovados1013" bound-model="avg('aprovados1013',s,s.ucs)"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovados1013Percent" bound-model="percent(s.aprovados1013,s.aprovados)"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovados1416" bound-model="avg('aprovados1416',s,s.ucs)"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovados1416Percent" bound-model="percent(s.aprovados1416,s.aprovados)"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovados1720" bound-model="avg('aprovados1720',s,s.ucs)"></td> |
<td><input readonly="true" type="number" ng-model="s.aprovados1720Percent" bound-model="percent(s.aprovados1720,s.aprovados)"></td> |
</tr> |
<tr ng-repeat="u in s.ucs" ng-class="{'alert-danger': u.error}" > |
<td><input ng-model="u.error" type="hidden" bound-model="u.alunosInscritos < (u.aprovados*1 + u.semElementos*1)"> |
<input ng-model="u.checked" ng-click="checkUnit(u,s)" type="checkbox"></td> |
<td><input type="text" ng-readonly="!u.manual || u.manual == false" ng-model="u.sigesCode"></td> |
<td> |
<input type="text" style="width: 150px" ng-if="!(!u.manual || u.manual == false)" ng-model="u.name"> |
<span ng-if="(!u.manual || u.manual == false)">{{u.name}}</span> |
<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> |
</td> |
<td><input type="number" ng-model="u.cumprimentoProgramaPercent"></td> |
<td><input type="number" ng-model="u.alunosInscritos"></td> |
<td><input type="number" ng-model="u.semElementos"></td> |
<td><input readonly="true" type="number" ng-model="u.semElementosPercent" bound-model="percent(u.semElementos,u.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="u.reprovados" bound-model="reprovados(u)"></td> |
<td><input readonly="true" type="number" ng-model="u.reprovadosPercent" bound-model="percent(u.reprovados,u.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="u.aprovados" bound-model="u.aprovados1013*1 + u.aprovados1416*1 + u.aprovados1720*1"></td> |
<td><input readonly="true" type="number" ng-model="u.aprovadosPercent" bound-model="percent(u.aprovados,u.alunosInscritos)"></td> |
<td><input type="number" ng-model="u.aprovados1013"></td> |
<td><input readonly="true" type="number" ng-model="u.aprovados1013Percent" bound-model="percent(u.aprovados1013,u.aprovados)"></td> |
<td><input type="number" ng-model="u.aprovados1416"></td> |
<td><input readonly="true" type="number" ng-model="u.aprovados1416Percent" bound-model="percent(u.aprovados1416,u.aprovados)"></td> |
<td><input type="number" ng-model="u.aprovados1720"></td> |
<td><input readonly="true" type="number" ng-model="u.aprovados1720Percent" bound-model="percent(u.aprovados1720,u.aprovados)"></td> |
</tr> |
<tr ng-if="false" ng-repeat-end></tr> |
<tr ng-if="false" ng-repeat-end></tr> |
<tr class="year"> |
<td colspan="3">Resultados Globais</td> |
<td><input readonly="true" type="number" ng-model="comp.cumprimentoProgramaPercent" bound-model="avg('cumprimentoProgramaPercent',comp,comp.years)"></td> |
<td><input readonly="true" type="number" ng-model="comp.alunosInscritos" bound-model="avg('alunosInscritos',comp,comp.years)"></td> |
<td><input readonly="true" type="number" ng-model="comp.semElementos" bound-model="avg('semElementos',comp,comp.years)"></td> |
<td><input readonly="true" type="number" ng-model="comp.semElementosPercent" bound-model="percent(comp.semElementos,comp.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="comp.reprovados" bound-model="reprovados(comp)"></td> |
<td><input readonly="true" type="number" ng-model="comp.reprovadosPercent" bound-model="percent(comp.reprovados,comp.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovados" bound-model="comp.aprovados1013*1 + comp.aprovados1416*1 + comp.aprovados1720*1"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovadosPercent" bound-model="percent(comp.aprovados,comp.alunosInscritos)"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovados1013" bound-model="avg('aprovados1013',comp,comp.years)"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovados1013Percent" bound-model="percent(comp.aprovados1013,comp.aprovados)"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovados1416" bound-model="avg('aprovados1416',comp,comp.years)"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovados1416Percent" bound-model="percent(comp.aprovados1416,comp.aprovados)"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovados1720" bound-model="avg('aprovados1720',comp,comp.years)"></td> |
<td><input readonly="true" type="number" ng-model="comp.aprovados1720Percent" bound-model="percent(comp.aprovados1720,comp.aprovados)"></td> |
</tr> |
</tbody> |
</table> |
<%--<pre class="code">{{ comp | json }}</pre>--%> |
</div> |
</script> |
<script type="text/ng-template" id="pt_estgp_estgweb_services_courses_coursereport_documentmodel_learningresults_components_GlobalLearningResultsChartImg"> |
<globallearningresultschartimg> |
</globallearningresultschartimg> |
</script> |
<script> |
angular.module("courseReportApp").directive('globallearningresultschartimg', function() { |
return { |
restrict: 'E', |
link: function($scope, element, attrs) |
{ |
$scope.generateChart = function(comp) |
{ |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/user/courseReport.do", |
"generateGlobalLearningResultsChartImg", |
{ |
"courseReportDocument" : BacoJS.stringifyOrdered(angular.element($("#courseReportApp")).scope().report) |
}, |
"#courseReportApp", |
function(repositoryFile4JsonView) |
{ |
comp.image = repositoryFile4JsonView; |
comp.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + comp.image.identifier + "?" + new Date().getTime(); |
angular.element($("#courseReportApp")).scope().$apply(); |
}, |
function(){} |
); |
} |
}, |
templateUrl: function(elem,attrs) { |
return "globallearningresultschartimg"; |
} |
} |
}); |
</script> |
<script type="text/ng-template" id="globallearningresultschartimg"> |
<div class="imageComponent component"> |
<div class="componentBody"> |
<div class="form-group clearfix"> |
<label class="col-md-2 control-label">Legenda</label> |
<div class="col-md-10"> |
<input type="text" class="form-control" rows="10" ng-model="comp.title"> |
</div> |
</div> |
<div class="form-group clearfix"> |
<div class="col-md-2 control-label"> |
<button class="btn btn-default" ng-click="generateChart(comp)">Refrescar/Gerar Gráfico</button> |
</div> |
<div class="col-md-10"> |
<label ng-if="comp.image.identifier"> Limites do PDF </label> |
<div ng-if="comp.image.identifier" style="text-align: center; width: 595px; border: 1px solid black; padding: 45px"> |
<center> |
<div style="width: 200px;height: 200px; max-width: 500px; max-height: 750px" resizable on-resize="resize($evt, $ui, comp)"> |
<img ng-if="comp.imageUrl" style="width: 100%;height: 100%" ng-src="{{comp.imageUrl}}"> |
<img ng-if="!comp.imageUrl" style="width: 100%;height: 100%" ng-src="{{'<%=request.getContextPath()%>/repositoryStream/' + comp.image.identifier}}"> |
</div> |
(Se desejar altere o tamanho da imagem arrastando no canto inferior direito) |
</center> |
</div> |
</div> |
</div> |
</div> |
</div> |
</script> |
/branches/grupo4/impl/src/web/user/courses/courseReportEdit.jsp |
---|
95,12 → 95,13 |
<% |
String courseCode = request.getParameter("courseCode"); |
String year = request.getParameter("year"); |
AbstractDao.getCurrentSession().beginTransaction(); |
CourseImpl courseImpl = DaoFactory.getCourseDaoImpl().findCourseByCode(courseCode); |
request.setAttribute("course",courseImpl); |
CourseReportDocument courseReport = null; |
try { |
courseReport = new CourseReportServices().createNewCourseReportDocument("44", "201617"); |
courseReport = new CourseReportServices().createNewCourseReportDocument(courseCode, year); |
} catch (Throwable e) { |
System.out.println(e); |
e.printStackTrace(); |
114,218 → 115,255 |
<div class="container-fluid"> |
<style> |
.separatorSection |
{ |
border: 1px solid #ddd; |
} |
</style> |
<style> |
.separatorSection |
{ |
border: 1px solid #ddd; |
} |
</style> |
<!-- Apresentacao da Unidade --> |
<!-- Apresentacao da Unidade --> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
Relatório Anual do curso: ${course.name} |
</div> |
<div class="panel-body"> |
<div class="panel panel-default"> |
<div class="panel-heading"> |
Relatório Anual do curso: ${course.name} |
</div> |
<div class="panel-body"> |
<p><b class="label-info">Tipo de Curso:</b> <bean:message key="course.${course.degree}"/></p> |
<p><b class="label-info">Ano Lectivo:</b> ${course.importYear}</p> |
<p><b class="label-info">Departamento:</b> ${course.department.name}</p> |
<p><b class="label-info">Escola:</b> ${course.department.courseSchool.name}</p> |
<p><b class="label-info">Tipo de Curso:</b> <bean:message key="course.${course.degree}"/></p> |
<p><b class="label-info">Ano Lectivo:</b> ${course.importYear}</p> |
<p><b class="label-info">Departamento:</b> ${course.department.name}</p> |
<p><b class="label-info">Escola:</b> ${course.department.courseSchool.name}</p> |
<script> |
<script> |
//Especifico da aplicacao |
var courseReportApp = angular.module('courseReportApp', []); |
GLOBAL_BacoAngularAppDependencies.push('courseReportApp'); |
//Especifico da aplicacao |
var courseReportApp = angular.module('courseReportApp', ['ui.tree']); |
GLOBAL_BacoAngularAppDependencies.push('courseReportApp'); |
courseReportApp.directive('resizable', function () { |
return { |
restrict: 'A', |
scope: { |
callback: '&onResize' |
}, |
link: function postLink(scope, elem, attrs) { |
elem.resizable(); |
elem.on('resize', function (evt, ui, comp) { |
scope.$apply(function() { |
if (scope.callback) { |
scope.callback({$evt: evt, $ui: ui, $comp: comp }); |
} |
}) |
}); |
courseReportApp.directive('resizable', function () { |
return { |
restrict: 'A', |
scope: { |
callback: '&onResize' |
}, |
link: function postLink(scope, elem, attrs) { |
elem.resizable(); |
elem.on('resize', function (evt, ui, comp) { |
scope.$apply(function() { |
if (scope.callback) { |
scope.callback({$evt: evt, $ui: ui, $comp: comp }); |
} |
}; |
}) |
}); |
} |
}; |
}); |
courseReportApp.controller('courseReportAppController', function($scope) |
{ |
courseReportApp.controller('courseReportAppController', function($scope) |
{ |
$scope.docAppSelector = "#courseReportApp"; |
$scope.report = <%=courseReportJson%> |
$scope.docAppSelector = "#courseReportApp"; |
$scope.report = <%=courseReportJson%> |
$scope.resize = function(evt,ui,comp) { |
//console.log (evt,ui); |
comp.width = ui.size.width; |
comp.height = ui.size.height; |
} |
$scope.resize = function(evt,ui,comp) { |
//console.log (evt,ui); |
comp.width = ui.size.width; |
comp.height = ui.size.height; |
} |
/** |
* @classe class to match |
* @superClasses array of strings |
* */ |
$scope.contains = function(obj,classe) |
{ |
if(obj['@class'] && obj['@class'] == classe) |
return true; |
if(obj.allSuperClasses) |
{ |
for(var i in obj.allSuperClasses) |
{ |
if(classe == obj.allSuperClasses[i]) |
return true; |
} |
} |
return false; |
} |
/** |
* @classe class to match |
* @superClasses array of strings |
* */ |
$scope.contains = function(obj,classe) |
{ |
if(obj['@class'] && obj['@class'] == classe) |
return true; |
if(obj.allSuperClasses) |
{ |
for(var i in obj.allSuperClasses) |
{ |
if(classe == obj.allSuperClasses[i]) |
return true; |
} |
} |
return false; |
} |
$scope.showSep = function(section) |
{ |
$(".separatorSectionNav").each(function() |
{ |
angular.element($(this)).scope().section.active = false; |
}); |
section.active = true; |
$scope.showSep = function(section,subSection) |
{ |
var s; |
for(s in section.sections) |
{ |
section.sections[s].active = false; |
} |
/*$(".separatorSectionNav").each(function() |
{ |
angular.element($(this)).scope().section.active = false; |
});*/ |
subSection.active = true; |
} |
} |
$scope.class2id = function(obj) |
/** |
* Este metodo devolve o template mais profundo na hierarquia de classes |
* permitindo emular o override, quanto mais especifica for a classe |
* e caso exista template é esse o template devolvido |
* procura um script com o id da classe e se nao existir |
* vai subindo nas super classes |
* @param obj |
* @returns {*} |
*/ |
$scope.class2id = function(obj) |
{ |
var objClassId = obj["@class"].replaceAll(".","_"); |
if($("script#" + objClassId).length > 0) |
{ |
return objClassId; |
} |
if(obj.allSuperClasses) |
{ |
var s; |
for(s in obj.allSuperClasses) |
{ |
var superClass = obj.allSuperClasses[s]; |
var superClassId = superClass.replaceAll(".","_"); |
if($("script#" + superClassId).length > 0) |
{ |
return obj["@class"].replaceAll(".","_"); |
return superClassId; |
} |
} |
} |
return obj["@class"].replaceAll(".","_"); |
} |
$scope.addText = function(parentCustomPane) |
{ |
$scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.TextComponent") |
} |
$scope.addText = function(parentCustomPane) |
{ |
$scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.TextComponent") |
} |
$scope.addImage = function(parentCustomPane) |
{ |
$scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.ImageComponent") |
} |
$scope.addImage = function(parentCustomPane) |
{ |
$scope.addSimpleDocComponent(parentCustomPane,"pt.estgp.estgweb.utils.documentBuilder.ImageComponent") |
} |
$scope.addSimpleDocComponent = function(parentCustomPane,classComponent) |
$scope.addSimpleDocComponent = function(parentCustomPane,classComponent) |
{ |
if(!parentCustomPane.components) |
{ |
parentCustomPane.components = []; |
} |
parentCustomPane.components.push( |
{ |
if(!parentCustomPane.components) |
{ |
parentCustomPane.components = []; |
} |
parentCustomPane.components.push( |
{ |
"@class" : classComponent |
} |
); |
"@class" : classComponent |
} |
$scope.removeComponent = function(index,array) |
{ |
array.splice(index,1); |
); |
} |
$scope.removeComponent = function(index,array) |
{ |
array.splice(index,1); |
} |
$scope.callbackUploadedFiles = function(filesUploadResult,token,targetElement) |
{ |
var modelObject = BacoAngularUtils.getAngularElementModel(targetElement); |
} |
$scope.callbackUploadedFiles = function(filesUploadResult,token,targetElement) |
{ |
var modelObject = BacoAngularUtils.getAngularElementModel(targetElement); |
modelObject.filesUploadResult = filesUploadResult; |
if(modelObject.image && modelObject.image.identifier) |
if(modelObject.image && modelObject.image.identifier) |
{ |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/user/json/repository.do", |
"replaceRepositoryFileFromTempPrivateDomain", |
{ |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/user/json/repository.do", |
"replaceRepositoryFileFromTempPrivateDomain", |
{ |
"identifier" : modelObject.image.identifier, |
"fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
}, |
"#courseReportApp", |
function(repositoryFile4JsonView) |
{ |
modelObject.image = repositoryFile4JsonView; |
modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
delete modelObject.filesUploadResult; |
angular.element($("#courseReportApp")).scope().$apply(); |
}, |
function(){} |
); |
} |
else |
"identifier" : modelObject.image.identifier, |
"fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
}, |
"#courseReportApp", |
function(repositoryFile4JsonView) |
{ |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/user/json/repository.do", |
"saveRepositoryFileFromTempPrivateDomain", |
{ |
"fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
}, |
"#courseReportApp", |
function(repositoryFile4JsonView) |
{ |
modelObject.image = repositoryFile4JsonView; |
modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
delete modelObject.filesUploadResult; |
angular.element($("#courseReportApp")).scope().$apply(); |
}, |
function(){} |
); |
} |
} |
modelObject.image = repositoryFile4JsonView; |
//image URL is generated on reimport just to avoid caching |
modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
angular.element($("#courseReportApp")).scope().$apply(); |
}, |
function(){} |
); |
} |
else |
{ |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/user/json/repository.do", |
"saveRepositoryFileFromTempPrivateDomain", |
{ |
"fileUploaded" : BacoJS.stringifyOrdered(filesUploadResult.uploadedFiles[0]) |
}, |
"#courseReportApp", |
function(repositoryFile4JsonView) |
{ |
modelObject.image = repositoryFile4JsonView; |
modelObject.imageUrl = "<%=request.getContextPath()%>/repositoryStream/" + modelObject.image.identifier + "?" + new Date().getTime(); |
angular.element($("#courseReportApp")).scope().$apply(); |
}, |
function(){} |
); |
} |
} |
$scope.save = function() |
{ |
}); |
</script> |
widgetCallWithActionParameters( |
"<%=request.getContextPath()%>/user/courseReport.do", |
"save", |
{ |
"report" : BacoJS.stringifyOrdered($scope.report) |
}, |
"#courseReportApp", |
function(resposta) |
{ |
$scope.report = resposta; |
alert(resposta.courseName); |
$scope.$apply(); |
}, |
function(){} |
); |
<!--TEMPLATES FOR DOCUMENT BUILDER--> |
<jsp:include page="../utils/documentsBuilder.jsp"/> |
} |
<div class="form-vertical"> |
<div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController"> |
<ul class="nav nav-tabs"> |
<li ng-model="section" class="separatorSectionNav" ng-class="{ active: section.active}" ng-repeat="section in report.sections"> |
<a ng-click="showSep(section)">{{section.title}}</a> |
</li> |
</ul> |
}); |
</script> |
<!--TEMPLATES FOR DOCUMENT BUILDER--> |
<jsp:include page="../utils/documentsBuilder.jsp"/> |
<jsp:include page="coursereport/templates.jsp"/> |
<!--DocumentSection--> |
<div ng-model="section" ng-class="{ hidden: !section.active}" ng-repeat="section in report.sections" class="separatorSection clearfix"> |
<div class="form-vertical"> |
<div id="courseReportApp" ng-app="courseReportApp" ng-controller="courseReportAppController"> |
<div ng-repeat="comp in section.components" ng-include="class2id(comp)"> |
<div ng-init="section=report;" ng-include="'pt_estgp_estgweb_utils_documentBuilder_DocumentSection'"> |
</div> |
</div> |
<button ng-click="save()" class="btn btn-success">Salvar</button> |
<!-- <pre class="code">{{ report | json }}</pre>--> |
</div> |
<!--/DocumentSection--> |
<%-- |
<pre class="code">{{ report | json }}</pre> |
--%> |
</div><!--App--> |
</div> <!--form--> |
</div><!--App--> |
</div> <!--form--> |
</div><!--Panel Body--> |
</div><!--Panel Body--> |
</div><!--Panel--> |
</div><!--Panel--> |
</div><!--container-fluid--> |
<% |
/branches/grupo4/impl/src/web/user/utils/documentsBuilder.jsp |
---|
1,5 → 1,9 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<style> |
.sections |
{ |
padding-left: 20px; |
} |
.buttonTools |
{ |
border: 1px solid gray; |
23,7 → 27,12 |
} |
</style> |
<!--Require templateObj--> |
<script type="text/ng-template" id="callDocumentTemplate"> |
<div ng-include="class2id(templateObj)"></div> |
</script> |
<%-- |
customPane Need component customPane in variable customPane |
docAppSelector selector usualy an html ID for ng-app example #docReport |
46,37 → 55,37 |
<div class="clearfix" ng-repeat="subComp in comp.components" ng-init="parent=comp;comp=subComp" ng-include="class2id(subComp)"> |
</div> |
<div> |
</div> |
<div> |
</div> |
</script> |
<script type="text/ng-template" id="pt_estgp_estgweb_utils_documentBuilder_ImageComponent"> |
<div class="imageComponent component"> |
<div ng-if="parent['@class']=='pt.estgp.estgweb.utils.documentBuilder.CustomPane'" class="buttonTools clearfix"> |
<button class="btn btn-danger pull-right" type="button" ng-click="removeComponent($index,parent.components)"> |
<span class="glyphicon glyphicon-remove"></span> |
</button> |
<label>Componente de Imagem (Use esta funcinalidade para adicionar gráficos ou tabelas que ache necessárias)</label> |
<button class="btn btn-danger pull-right" type="button" ng-click="removeComponent($index,parent.components)"> |
<span class="glyphicon glyphicon-remove"></span> |
</button> |
<label>Componente de Imagem (Use esta funcinalidade para adicionar gráficos ou tabelas que ache necessárias)</label> |
</div> |
<div class="componentBody" ng-if="comp['@class']=='pt.estgp.estgweb.utils.documentBuilder.ImageComponent'"> |
<div class="form-group clearfix" ng-if="comp.image.identifier"> |
<label class="col-md-2 control-label">Legenda</label> |
<div class="col-md-10"> |
<input type="text" class="form-control" rows="10" ng-model="comp.title"> |
</div> |
<div class="componentBody"> |
<div class="form-group clearfix" ng-if="comp.image.identifier"> |
<label class="col-md-2 control-label">Legenda</label> |
<div class="col-md-10"> |
<input type="text" class="form-control" rows="10" ng-model="comp.title"> |
</div> |
<div class="form-group clearfix"> |
<div class="col-md-2 control-label"> |
<a class="btn btn-default" href="#" ng-model="comp" |
data-title="Escolha Imagem" |
data-showmetafields="false" |
data-confirmonupload="true" |
data-toggle="modal" |
data-target="#filesUploadModal" |
data-multiple="false" |
data-allowed-extensions="jpg,png,gif" |
data-callback-target-function="angular.element($('{{docAppSelector}}')).scope().callbackUploadedFiles"> |
</div> |
<div class="form-group clearfix"> |
<div class="col-md-2 control-label"> |
<a class="btn btn-default" href="#" ng-model="comp" |
data-title="Escolha Imagem" |
data-showmetafields="false" |
data-confirmonupload="true" |
data-toggle="modal" |
data-target="#filesUploadModal" |
data-multiple="false" |
data-allowed-extensions="jpg,png,gif" |
data-callback-target-function="angular.element($('{{docAppSelector}}')).scope().callbackUploadedFiles"> |
<span ng-if="comp.image.identifier"> |
Substituir Imagem |
</span> |
84,26 → 93,26 |
Carregar Imagem |
</span> |
<span class="glyphicon glyphicon-upload"/> |
<span class="glyphicon glyphicon-upload"/> |
</a> |
</a> |
</div> |
<div class="col-md-10"> |
<div ng-if="!(comp.image.identifier)"> |
Clique em carregar imagens e escolha uma imagem para adicionar nesta secção. |
</div> |
<div class="col-md-10"> |
<div ng-if="!(comp.image.identifier)"> |
Clique em carregar imagens e escolha uma imagem para adicionar nesta secção. |
</div> |
<label ng-if="comp.image.identifier"> Limites do PDF </label> |
<div ng-if="comp.image.identifier" style="text-align: center; width: 595px; border: 1px solid black; padding: 45px"> |
<center> |
<div style="width: 200px;height: 200px; max-width: 500px; max-height: 750px" resizable on-resize="resize($evt, $ui, comp)"> |
<img style="width: 100%;height: 100%" ng-src="{{comp.imageUrl}}"> |
</div> |
(Se desejar altere o tamanho da imagem arrastando no canto inferior direito) |
</center> |
</div> |
<label ng-if="comp.image.identifier"> Limites do PDF </label> |
<div ng-if="comp.image.identifier" style="text-align: center; width: 595px; border: 1px solid black; padding: 45px"> |
<center> |
<div style="width: 200px;height: 200px; max-width: 500px; max-height: 750px" resizable on-resize="resize($evt, $ui, comp)"> |
<img style="width: 100%;height: 100%" ng-src="{{comp.imageUrl}}"> |
</div> |
(Se desejar altere o tamanho da imagem arrastando no canto inferior direito) |
</center> |
</div> |
</div> |
</div> |
</div> |
</div> |
135,4 → 144,33 |
</div> |
</div> |
</div> |
</script> |
</script> |
<!-- |
@section objeto com seccoes e componentes |
@optional @chapter capitulo do documento para esta seccao para contcatenar às subsections |
--> |
<script type="text/ng-template" id="pt_estgp_estgweb_utils_documentBuilder_DocumentSection"> |
<div class="sections"> |
<ul class="nav nav-tabs"> |
<li ng-model="section" class="separatorSectionNav" |
ng-class="{ active : subSection.active}" |
ng-repeat="subSection in section.sections"> |
<a ng-click="showSep(section,subSection)"> {{$chapter}}{{$index+1}} - {{subSection.title}}</a> |
</li> |
</ul> |
<div ng-model="subSection" |
ng-class="{ hidden: !subSection.active }" |
ng-repeat="subSection in section.sections" |
class="separatorSection clearfix"> |
<div ng-repeat="comp in subSection.components" |
ng-include="class2id(comp)"> |
</div> |
<div ng-if="subSection.sections" |
ng-init="section=subSection;$chapter=$chapter+($index+1)+'.'" |
ng-include="class2id(subSection)"> |
</div> |
</div> |
</div> |
</script> |