/*
* Copyright (C) 2013 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 Afffero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axiastudio.suite.protocollo.forms;
import com.axiastudio.pypapi.Register;
import com.axiastudio.pypapi.db.Controller;
import com.axiastudio.pypapi.db.Database;
import com.axiastudio.pypapi.db.IDatabase;
import com.axiastudio.pypapi.ui.Dialog;
import com.axiastudio.suite.SuiteUtil;
import com.axiastudio.suite.base.entities.IUtente;
import com.axiastudio.suite.base.entities.Ufficio;
import com.axiastudio.suite.base.entities.UfficioUtente;
import com.axiastudio.suite.base.entities.Utente;
import com.axiastudio.suite.generale.entities.Costante;
import com.axiastudio.suite.pratiche.entities.Pratica;
import com.axiastudio.suite.protocollo.entities.AnnullamentoProtocollo;
import com.axiastudio.suite.protocollo.entities.Attribuzione;
import com.axiastudio.suite.protocollo.entities.PraticaProtocollo;
import com.axiastudio.suite.protocollo.entities.Protocollo;
import com.trolltech.qt.gui.QCheckBox;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
*
* @author AXIA Studio (http://www.axiastudio.com)
*/
public class FormAnnullamentoProtocollo extends Dialog {
public FormAnnullamentoProtocollo(String uiFile, Class entityClass, String title){
super(uiFile, entityClass, title);
this.storeInitialized.connect(this, "updatePermission()");
}
private void updatePermission() {
/* permesso di confermare o respingere */
Utente autenticato = (Utente) Register.queryUtility(IUtente.class);
Costante costanteUfficioAnnullati = SuiteUtil.trovaCostante("UFFICIO_ANNULLATI");
Long idUfficioAnnullati = Long.parseLong(costanteUfficioAnnullati.getValore());
Boolean inUfficioAnnullati = Boolean.FALSE; // TODO: conferma annullamento da rifare tramite finestra 'scollegata' da form Protocollo (e dalla logica della callback)
for( UfficioUtente ufficio: autenticato.getUfficioUtenteCollection()) {
if (ufficio.getUfficio().getId().equals(idUfficioAnnullati) && ufficio.getRicerca()) {
inUfficioAnnullati = Boolean.TRUE;
}
}
AnnullamentoProtocollo annullamento = (AnnullamentoProtocollo) this.getContext().getCurrentEntity();
QCheckBox checkBox_autorizzato = (QCheckBox) this.findChild(QCheckBox.class, "checkBox_autorizzato");
QCheckBox checkBox_respinto = (QCheckBox) this.findChild(QCheckBox.class, "checkBox_respinto");
Boolean modifica = annullamento.getId()!=null && !annullamento.getRespinto() && !annullamento.getAutorizzato()
&& autenticato.getAttributoreprotocollo() && autenticato.getSupervisorepratiche() && inUfficioAnnullati;
checkBox_autorizzato.setEnabled( modifica );
checkBox_respinto.setEnabled( modifica );
}
@Override
public void accept() {
AnnullamentoProtocollo annullamento = (AnnullamentoProtocollo) this.getContext().getCurrentEntity();
if( annullamento.getEsecutoreautorizzazione() == null && annullamento.getId() != null &&
(annullamento.getAutorizzato() || annullamento.getRespinto()) ){
/* devo registrare indipendentemente dal protocollo */
Calendar calendar = Calendar.getInstance();
Date today = calendar.getTime();
Utente autenticato = (Utente) Register.queryUtility(IUtente.class);
annullamento.setEsecutoreautorizzazione(autenticato.getLogin());
annullamento.setDataautorizzazione(today);
/* se รจ un annullamento:
* - aggiungo l'ufficio protocollo come attribuzione in via principale
* - inserisco nella pratica (unica) dei protocolli annullati
* - consolido il protocollo
* - marco il protocollo come annullato
*/
Database db = (Database) Register.queryUtility(IDatabase.class);
if( annullamento.getAutorizzato() ){
Costante costantePraticaAnnullati = SuiteUtil.trovaCostante("PRATICA_ANNULLATI");
Pratica praticaAnnullati = SuiteUtil.trovaPratica(costantePraticaAnnullati.getValore());
Costante costanteUfficioAnnullati = SuiteUtil.trovaCostante("UFFICIO_ANNULLATI");
Long idUfficioAnnullati = Long.parseLong(costanteUfficioAnnullati.getValore());
Controller controllerUfficio = db.createController(Ufficio.class);
Ufficio ufficioAnnullati = (Ufficio) controllerUfficio.get(idUfficioAnnullati);
Protocollo protocollo = annullamento.getProtocollo();
protocollo.setPraticaProtocolloCollection(null);
List<Attribuzione> attribuzioni = (List<Attribuzione>) protocollo.getAttribuzioneCollection();
for( Attribuzione attrib: protocollo.getAttribuzioneCollection()) {
if (attrib.getUfficio() == ufficioAnnullati) {
attribuzioni.remove(attrib);
} else {
attrib.setPrincipale(Boolean.FALSE);
}
}
Attribuzione attribuzione = new Attribuzione();
attribuzione.setUfficio(ufficioAnnullati);
attribuzione.setPrincipale(Boolean.TRUE);
attribuzioni.add(attribuzione);
protocollo.setAttribuzioneCollection(attribuzioni);
List<PraticaProtocollo> praticheProtocollo = new ArrayList();
PraticaProtocollo praticaProtocollo = new PraticaProtocollo();
praticaProtocollo.setPratica(praticaAnnullati);
praticaProtocollo.setOriginale(Boolean.TRUE);
praticheProtocollo.add(praticaProtocollo);
protocollo.setPraticaProtocolloCollection(praticheProtocollo);
protocollo.setConvalidaattribuzioni(Boolean.TRUE);
protocollo.setConvalidaprotocollo(Boolean.TRUE);
protocollo.setConsolidadocumenti(Boolean.TRUE);
protocollo.setAnnullato(Boolean.TRUE); // Possibile che mancasse??
Controller controllerProtocollo = db.createController(Protocollo.class);
controllerProtocollo.commit(protocollo);
} else {
Controller controllerAnnullamento = db.createController(annullamento.getClass());
controllerAnnullamento.commit(annullamento);
}
}
super.accept();
}
}