Rev 869 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@ taglib prefix="logic" uri="http://jakarta.apache.org/struts/tags-logic" %>
<%@ taglib prefix="bean" uri="http://jakarta.apache.org/struts/tags-bean" %>
<%@ taglib prefix="html" uri="http://jakarta.apache.org/struts/tags-html" %>
<%@ page import="jomm.dao.utils.HibernateUtils" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="pt.estgp.estgweb.domain.*" %>
<%@ page import="java.util.*" %>
<%@ page import="pt.estgp.estgweb.Globals" %>
<%@ page import="pt.estgp.estgweb.utils.StringsUtils" %>
<%@ page import="jomm.utils.FilesUtils" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<%--
Created by IntelliJ IDEA.
User: jorgemachado
Date: 13/01/14
Time: 09:55
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
long processId;
if(request.getAttribute("processId")!=null)
processId = (Long) request.getAttribute("processId");
else
processId = Long.parseLong(request.getParameter("id"));
HibernateUtils.getCurrentSession().beginTransaction();
ProcessImpl process = (ProcessImpl) DaoFactory.getProcessDaoImpl().get(processId);
if(process.getLastEvent().getDestinationRole() != null && UserSession.getUser().hasRole(process.getLastEvent().getDestinationRole()))
{
//ok
}
else if(!process.isInProcess(UserSession.getUser()) && !UserSession.getUser().isSuperuser() && !UserSession.getUser().hasRole(Globals.ROLE_PROCESSES_ADMIN))
{
response.sendError(401);
%>
<jsp:include page="/errors/401.jsp"/>
<%
return;
}
request.setAttribute("process",process);
if(!process.getLastEvent().isAccepted() &&
request.getParameter("acceptProcess") != null &&
request.getParameter("acceptProcess").equals("true") &&
((ProcessEventImpl)process.getLastEvent()).isTarget(UserSession.getUser()))
{
process.getLastEvent().setAcceptedDate(new Date());
process.getLastEvent().setNowState(ProcessEventImpl.ProcessEventState.ACCEPTED.name());
process.setLastChangeDate(new Date());
process.setNowState(ProcessImpl.ProcessState.TRANSITION.name());
process.getLastEvent().setLastChangeDate(new Date());
process.getLastEvent().setAccepted(true);
process.getLastEvent().setOwner(UserSession.getUser());
}
%>
<h1>${process.metaProcess.name} de (${process.owner.name})</h1>
<table class="dataTable processesTable">
<tr>
<th>Colocado a</th>
<th>Colocado à (dias)</th>
<th>Requisitante</th>
<th>Ultima modificação</th>
<th>Estado</th>
<th>Transições</th>
<th>Data de fecho</th>
</tr>
<tr>
<td>${process.openDate}</td>
<%
String level = "wait1";
long milis = System.currentTimeMillis() - process.getOpenDate().getTime();
int days = (int) (milis / 1000 / 3600 / 24);
if(days > 1 && days < 3)
{
level = "wait2";
}
else if(days >= 3 && days < 6)
{
level = "wait3";
}
%>
<td class="<%=level%>">
<%=days%>
</td>
<td>${process.owner.name}</td>
<td>${process.lastChangeDate}</td>
<td class="${process.nowState}"><bean:message key="process.state.${process.nowState}"/></td>
<td align="right"><%=process.getEvents().size()%></td>
<td>${process.closeDate}</td>
</tr>
</table>
<%
if(((ProcessImpl)process).canRemoveLastEvent(UserSession.getUser()))
{
%>
<form action="<%=request.getContextPath()%>/user/processEventController.do" method="post">
<input type="hidden" name="id" value="<%=processId%>"/>
<input type="hidden" name="dispatch" value="deleteLastProcessEvent"/>
<table border="0" style="background-color: #ffc9da">
<tr>
<td>
<table class="processActivity" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="processActivityTail"><img src="<%=request.getContextPath()%>/imgs/process/leftProcess.gif"/></td>
<td class="processActivityName">
<input class="TERMINAR_BTN" type="button" value="ELIMINAR ULTIMO EVENTO" onclick="if(confirm('Tem a certeza que deseja eliminar o ultimo evento deste processo? Esta acção será reportada e ficará registada.')){this.form.submit();}"/>
</td>
<td class="processActivityArrow"><img src="<%=request.getContextPath()%>/imgs/process/rightProcess.gif"/></td>
</tr>
</table>
</td>
<td>
<img src="<%=request.getContextPath()%>/imgs/process/actor.gif"/> ${UserSession.user.name}
</td>
</tr>
</table>
</form>
<input class="TRANSITAR_BTN" type="button" value="TRANSITAR" onclick="if(confirm('Tem a certeza que deseja transitar este processo para ' + this.form.destinationPerson.options[this.form.destinationPerson.selectedIndex].text + '?')){set(form,'transitProcessEventPerson');this.form.submit();}"/>
<%
}
if(process.getNowState().equals(ProcessImpl.ProcessState.CLOSED.name()) &&
process.canReopen(UserSession.getUser()))
{
%>
<p class="eventNOT_ACCEPTED">Este processo poderá ser reaberto por si se assim o desejar</p>
<form action="<%=request.getContextPath()%>/user/processEventController.do" method="post">
<input type="hidden" name="id" value="<%=processId%>"/>
<input type="hidden" name="dispatch" value="reopenProcessEventPerson"/>
<table border="0">
<tr>
<td>
<table class="processActivity" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="processActivityTail"><img src="<%=request.getContextPath()%>/imgs/process/leftProcess.gif"/></td>
<td class="processActivityName">
<input type="submit" value="Reabrir Processo com transição para mim"/>
</td>
<td class="processActivityArrow"><img src="<%=request.getContextPath()%>/imgs/process/rightProcess.gif"/></td>
</tr>
</table>
</td>
<td>
<img src="<%=request.getContextPath()%>/imgs/process/actor.gif"/> ${UserSession.user.name}
</td>
</tr>
</table>
</form>
<%
}
if(!process.getLastEvent().isAccepted() &&
((ProcessEventImpl)process.getLastEvent()).isTarget(UserSession.getUser()))
{
%>
<p class="eventNOT_ACCEPTED">Este processo aguarda a sua intervenção</p>
<form action="<%=request.getContextPath()%>/user/openProcess.do" method="get">
<input type="hidden" name="id" value="<%=processId%>"/>
<input type="hidden" name="acceptProcess" value="true"/>
<table border="0">
<tr>
<td>
<table class="processActivity" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="processActivityTail"><img src="<%=request.getContextPath()%>/imgs/process/leftProcess.gif"/></td>
<td class="processActivityName">
<input type="submit" value="Aceitar Transição de Processo para mim"/>
</td>
<td class="processActivityArrow"><img src="<%=request.getContextPath()%>/imgs/process/rightProcess.gif"/></td>
</tr>
</table>
</td>
<td>
<img src="<%=request.getContextPath()%>/imgs/process/actor.gif"/> ${UserSession.user.name}
</td>
</tr>
</table>
</form>
<%
}
if(process.getLastEvent().isAccepted() &&
process.getLastEvent().getOwner().getId() == UserSession.getUser().getId() &&
process.getLastEvent().getDispatchedDate() == null)
{
%>
<p class="eventACCEPTED">Processo aceite por si (${UserSession.name}) para tratamento</p>
<html:form action="/user/processEventController" enctype="multipart/form-data">
<jsp:useBean id="ProcessEventForm" type="pt.estgp.estgweb.web.form.processes.ProcessEventForm" scope="request"/>
<%
ProcessEventForm.setProcessEvent((ProcessEventImpl) process.getLastEvent());
%>
<input type="hidden" name="dispatch"/>
<html:hidden property="processEvent.process.id"/>
<html:hidden property="processEvent.id"/>
<div class="seccao" style="background-color: #f5f3f9; border:1px solid gray;">
<h2>Intervenção no Processo</h2>
<p>No <b>Passo 1</b> preencha a sua intervenção no processo e no <b>Passo 2</b> despache o mesmo</p>
<div class="seccao">
<h3>Passo 1</h3>
<table width="100%" class="dataTable processPool">
<tr>
<th width="50%" class="servicePool">
<img src="<%=request.getContextPath()%>/imgs/process/actor.gif"/>
${process.lastEvent.owner.name}
</th>
<th width="50%" class="starterPool" style="background-color: #fff9bc">
<img src="<%=request.getContextPath()%>/imgs/process/actor.gif"/>
${process.owner.name}
</th>
</tr>
<tr>
<td class="servicePool">
<table style="width: 100%" class="dataTable">
<tr>
<th style="width: 20%">Notas Internas</th>
<td colspan="2"><html:textarea property="processEvent.notes" style="width: 100%; height: 200px"/></td>
</tr>
<tr>
<th>Nível de acesso das notas informativas internas</th>
<td colspan="2">
<html:select property="processEvent.notesAccessLevel">
<html:option value="ALL_EXCEPT_STARTER"><bean:message key="process.access.level.ALL_EXCEPT_STARTER"/></html:option>
<html:option value="ALL_IN_PROCESS"><bean:message key="process.access.level.ALL_IN_PROCESS"/></html:option>
<html:option value="OWNER"><bean:message key="process.access.level.OWNER"/></html:option>
<html:option value="FORWARD_EVENTS"><bean:message key="process.access.level.FORWARD_EVENTS"/></html:option>
<html:option value="BACKWARD_EVENTS"><bean:message key="process.access.level.BACKWARD_EVENTS"/></html:option>
</html:select>
</td>
</tr>
<tr><td colspan="3">-----</td></tr>
<tr>
<th>Adicionar Ficheiro ao Processo:</th>
<td>
<html:file property="file"/>
</td>
<td>
</td>
</tr>
<tr>
<th>Nível de acesso do ficheiro digital</th>
<td>
<html:select property="fileAccess">
<html:option value="ALL_EXCEPT_STARTER"><bean:message key="process.access.level.ALL_EXCEPT_STARTER"/></html:option>
<html:option value="ALL_IN_PROCESS"><bean:message key="process.access.level.ALL_IN_PROCESS"/></html:option>
<html:option value="OWNER"><bean:message key="process.access.level.OWNER"/></html:option>
<html:option value="FORWARD_EVENTS"><bean:message key="process.access.level.FORWARD_EVENTS"/></html:option>
<html:option value="BACKWARD_EVENTS"><bean:message key="process.access.level.BACKWARD_EVENTS"/></html:option>
</html:select>
</td>
<td>
<input type="button" value="Importar Ficheiro" onclick="set(form,'updateProcessEvent');this.form.submit();">
</td>
</tr>
</table>
</td>
<td valign="top" class="starterPool" style="background-color: #fff9bc">
<table style="width: 100%" class="dataTable">
<tr>
<th style="width: 20%">Notas a transmitir ao Requerente</th>
<td><html:textarea property="processEvent.notesToStarter" style="width: 100%; height: 200px"/></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="Salvar informação sem transitar" onclick="set(form,'updateProcessEvent');this.form.submit();">
</td>
</tr>
</table>
</div>
<div class="seccao">
<h3>Passo 2</h3>
<p>Pode salvar a informação no Passo 1, sair e voltar aqui novamente para efectuar o Passo 2</p>
<table border="0" width="100%">
<tr>
<td>
<table>
<tr>
<th>
Papel do destinatário para transitar
</th>
<td>
<table class="processActivity" cellpadding="0" cellspacing="0">
<tr>
<td class="processActivityTail"><img src="<%=request.getContextPath()%>/imgs/process/leftProcess.gif"/></td>
<td class="processActivityName">
<html:select property="destinationRole">
<%
List<String> roles = StringsUtils.getStringsFromSerial(process.getMetaProcess().getPossibleTargets(),";");
request.setAttribute("roles",roles);
%>
<logic:iterate id="role" name="roles">
<html:option value="${role}"><bean:message key="user.role.${role}"/></html:option>
</logic:iterate>
<%
%>
</html:select>
</td>
<td class="processActivityArrow"><img src="<%=request.getContextPath()%>/imgs/process/rightProcess.gif"/></td>
</tr>
</table>
</td>
<td>
<input class="TRANSITAR_BTN" type="button" value="TRANSITAR" onclick="if(confirm('Tem a certeza que deseja transitar este processo para ' + this.form.destinationRole.options[this.form.destinationRole.selectedIndex].text + '?')){set(form,'transitProcessEventRole');this.form.submit();}"/>
</td>
</tr>
<%
if(process.getMetaProcess().getPossiblePersons() != null && process.getMetaProcess().getPossiblePersons().length() > 0)
{%>
<tr>
<th>
Pessoa especifica para transitar
</th>
<td>
<table class="processActivity" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="processActivityTail"><img src="<%=request.getContextPath()%>/imgs/process/leftProcess.gif"/></td>
<td class="processActivityName">
<html:select property="destinationPerson" style="width: 100%">
<%
List<String> people = StringsUtils.getStringsFromSerial(process.getMetaProcess().getPossiblePersons(),";");
request.setAttribute("people",people);
%>
<logic:iterate id="person" name="people">
<%
User u = DaoFactory.getUserDaoImpl().loadByUsername(person.toString());
request.setAttribute("user",u);
%>
<html:option value="${person}">${user.name} (${person})</html:option>
</logic:iterate>
<%
%>
<html:option value="${process.owner.username}">${process.owner.name} (${process.owner.username}) (requerente)</html:option>
</html:select>
</td>
<td class="processActivityArrow"><img src="<%=request.getContextPath()%>/imgs/process/rightProcess.gif"/></td>
</tr>
</table>
</td>
<td>
<input class="TRANSITAR_BTN" type="button" value="TRANSITAR" onclick="if(confirm('Tem a certeza que deseja transitar este processo para ' + this.form.destinationPerson.options[this.form.destinationPerson.selectedIndex].text + '?')){set(form,'transitProcessEventPerson');this.form.submit();}"/>
</td>
</tr>
<%}%>
</table>
</td>
<td style="white-space: nowrap">
Ou pode dar o processo como terminado neste momento <input class="TERMINAR_BTN" type="button" value="TERMINAR PROCESSO" onclick="if(confirm('Tem a certeza que deseja terminar este processo?')){set(form,'finnishProcessEvent');this.form.submit();}"/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</html:form>
<br/>
<%
}
%>
<div class="seccao">
<h2>Transições</h2>
<table class="dataTable" style="width: 100%">
<tr>
<th>Estado</th>
<th>Colocado <br/>(1)</th>
<th>Aceite <br/>(2)</th>
<th>Despachado <br/>(3)</th>
<th>Para</th>
<th>Interveniente</th>
<th>Informação Interna</th>
<th>Informação ao Requisitante</th>
<th>Ficheiros associados</th>
</tr>
<%
List<ProcessEvent> eventos = new ArrayList<ProcessEvent>(process.getEvents());
Collections.sort(eventos,new Comparator<ProcessEvent>()
{
@Override
public int compare(ProcessEvent o1, ProcessEvent o2) {
return (int) (o2.getId() - o1.getId());
}
});
request.setAttribute("eventos",eventos);
%>
<logic:iterate id="event" name="eventos" type="pt.estgp.estgweb.domain.ProcessEvent">
<tr class="event${event.nowState}">
<td><bean:message key="process.event.state.${event.nowState}"/></td>
<td>${event.openDate}</td>
<td>${event.acceptedDate}</td>
<td>${event.closeDate}</td>
<logic:present name="event" property="destinationRole">
<td><bean:message key="user.role.${event.destinationRole}"/></td>
</logic:present>
<logic:notPresent name="event" property="destinationRole">
<td>${event.owner.name}</td>
</logic:notPresent>
<td>${event.owner.name}</td>
<td>
<%
ProcessEventImpl eventImpl = (ProcessEventImpl) HibernateUtils.getCurrentSession().get(ProcessEventImpl.class,event.getId());
if(eventImpl.canSeeNotes(UserSession.getUser()))
{
%>${event.notes}<%
}
else
{
%>Interditas<%
}
%>
</td>
<td>${event.notesToStarter}</td>
<td>
<%
if(event.getFiles() != null && event.getFiles().size() > 0)
{
List<ProcessEventFile> files = new ArrayList<ProcessEventFile>();
files.addAll(event.getFiles());
request.setAttribute("files",files);
Collections.sort(files,new Comparator<ProcessEventFile>(){
@Override
public int compare(ProcessEventFile o1, ProcessEventFile o2) {
return (int) (o2.getId() - o1.getId());
}
});
%>
<table style="width: 100%" cellspacing="0" cellpadding="0" border="0">
<logic:iterate id="file" name="files" type="pt.estgp.estgweb.domain.ProcessEventFileImpl">
<%
String extension = FilesUtils.getExtension(file.getName());
if(file.canSeeFile(UserSession.getUser()))
{
String style="";
if(file.isGhost())
{
style = " color:#D6D6D6 ";
}
%>
<tr>
<td style="border:0 ;border-bottom: 1px solid gray">
<%
if(file.canOpenCloseGhost(UserSession.getUser()))
{
String checked = file.isGhost() ? "":"checked=\"checked\"";
String url = "/user/processEventController.do?dispatch=";
if(file.isGhost())
url += "unsetGhostFileFromProcessEvent&fileId=";
else
url += "setGhostFileFromProcessEvent&fileId=";
url+=file.getId();
%>
<input type="checkbox" <%=checked%> onchange="window.location='<%=request.getContextPath()+url%>'"/>
<%
}
%>
</td>
<td style="border: 0;border-bottom: 1px solid gray"><img src="<%=request.getContextPath()%>/imgs/mime/<%=extension%>.gif"/></td>
<td valign="middle" style="text-align: left; padding: 3px; vertical-align: middle; border: 0;border-bottom: 1px solid gray; <%=style%>">
<%
if(!file.isGhost())
{
%>
<a style="<%=style%>" href="<%=request.getContextPath()%>/repositoryStream/${file.repositoryStream}">${file.name}</a>
<%
}
else
{
%>
${file.name} (Inacessivel)
<%
}
%>
</td>
</tr>
<%
}
%>
</logic:iterate>
</table>
<%
}
%>
</td>
</tr>
</logic:iterate>
</table>
</div>
<%
HibernateUtils.getCurrentSession().getTransaction().commit();
%>
Generated by GNU Enscript 1.6.5.2.