Subversion Repositories bacoAlunos

Rev

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.