/* * Copyright (C) 2012 AXIA Studio (http://www.axiastudio.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.axiastudio.suite.pratiche; import com.axiastudio.pypapi.Register; import com.axiastudio.pypapi.annotations.Callback; import com.axiastudio.pypapi.annotations.CallbackType; import com.axiastudio.pypapi.db.Database; import com.axiastudio.pypapi.db.IDatabase; import com.axiastudio.pypapi.db.Validation; import com.axiastudio.suite.base.entities.IUtente; import com.axiastudio.suite.base.entities.UfficioUtente; import com.axiastudio.suite.base.entities.Utente; import com.axiastudio.suite.pratiche.entities.Pratica; import com.axiastudio.suite.procedimenti.entities.TipoPraticaProcedimento; import com.axiastudio.suite.protocollo.ProfiloUtenteProtocollo; import com.axiastudio.suite.protocollo.entities.PraticaProtocollo; import com.axiastudio.suite.protocollo.entities.Protocollo; import javax.persistence.EntityManager; import java.util.List; /** * * @author Tiziano Lattisi <tiziano at axiastudio.it> */ public class PraticaCallbacks { @Callback(type=CallbackType.BEFORECOMMIT) public static Validation validaPratica(Pratica pratica){ String msg = ""; Boolean res = true; Utente autenticato = (Utente) Register.queryUtility(IUtente.class); Boolean inUfficioGestore = false; for( UfficioUtente uu: autenticato.getUfficioUtenteCollection() ){ if( uu.getUfficio().equals(pratica.getGestione()) && uu.getModificapratica() ){ // se la pratica è riservata, mi serve anche il flag if( !pratica.getRiservata() || uu.getRiservato() ){ inUfficioGestore = true; break; } } } // se l'utente non è istruttore non può inserire o modificare pratiche, if( !autenticato.getIstruttorepratiche() ){ msg = "Devi avere come ruolo \"istruttore\" per poter inserire\n"; msg += "o modificare una pratica."; return new Validation(false, msg); } // devono essese definite attribuzione e tipologia if( pratica.getAttribuzione() == null ){ msg = "Devi selezionare un'attribuzione."; return new Validation(false, msg); } else if( pratica.getTipo() == null ){ msg = "Devi selezionare un tipo di pratica."; return new Validation(false, msg); } if( pratica.getId() == null ){ Database db = (Database) Register.queryUtility(IDatabase.class); EntityManager em = db.getEntityManagerFactory().createEntityManager(); /* controllo attribuzione - tipo pratica */ List ids = em.createNamedQuery("trovaTipiPraticaPermessiDaAttribuzioni", TipoPraticaProcedimento.class) .setParameter("id", pratica.getAttribuzione().getId()) .getResultList(); if( !ids.contains(pratica.getTipo().getId()) ){ msg = "Manca corrispondenza tra l'attribuzione e la tipologia di pratica."; return new Validation(false, msg); } // se codifica pratica non ha progressivo, si controlla se la pratica non esiste già if (!PraticaUtil.codificaInternaUnivoca(pratica.getTipo())) { msg = "Esiste già una pratica con la codifica specificata."; return new Validation(false, msg); } // TODO: da eliminare quando si inserirà il controllo in nella finestra di inserimento/modifica delle codifiche String codifica = PraticaUtil.creaCodificaInterna(pratica.getTipo()); if (codifica == null) { msg = "Errore nella creazione della codifica della pratica."; return new Validation(false, msg); } else if (codifica == "Codifica errata") { msg = "È stata trovata una codifica anomala per la tipologia di pratica selezionata. Calcolo del progressivo non riuscito." + " Contattare l'assistenza."; return new Validation(false, msg); } } else { // l'amministratore pratiche modifica anche se non appartenente all'ufficio gestore e // anche se la pratica è archiviata. if( !autenticato.getSupervisorepratiche() ){ // se l'utente non è inserito nell'ufficio gestore con flag modificapratiche non può modificare if( !inUfficioGestore ){ msg = "Per modificare la pratica devi appartenere all'ufficio gestore con i permessi di modifica, ed eventuali privilegi sulle pratiche riservate."; return new Validation(false, msg); } // impossibile togliere gli uffici if( pratica.getGestione() == null || pratica.getAttribuzione() == null || pratica.getUbicazione() == null){ msg = "Non è permesso rimuovere attribuzione, gestione o ubicazione."; return new Validation(false, msg); } // Se la pratica è archiviata, non posso modificarla, ma ciò viene implementato con il cambio di ufficio gestore } } /* * Verifica inserimento protocollo in pratica: permesso solo all'ufficio gestore (già sopra), * e solo se l'utente ha piena visibilità del protocollo (sportello o attribuzione) */ for( PraticaProtocollo praticaProtocollo: pratica.getPraticaProtocolloCollection() ){ // nuovo inserimento if( praticaProtocollo.getPratica() == null ){ // il supervisore inserisce pratiche non riservate if( !(!pratica.getRiservata() && autenticato.getSupervisorepratiche()) ){ Protocollo protocollo = praticaProtocollo.getProtocollo(); ProfiloUtenteProtocollo profilo = new ProfiloUtenteProtocollo(protocollo, autenticato); if( !pratica.getRiservata() && !profilo.inSportelloOAttribuzione() ){ msg = "Devi avere completa visibilità del protocollo per poterlo inserire nella pratica."; return new Validation(false, msg); } else if( pratica.getRiservata() && !profilo.inSportelloOAttribuzioneR() ){ msg = "Devi avere completa visibilità del protocollo e permesso sui dati riservati per poterlo inserire nella pratica riservata."; return new Validation(false, msg); } } } } return new Validation(true); } }