it.cnr.contab.pdg00.service.PdgVariazioniService Maven / Gradle / Ivy
/*
* Copyright (C) 2019 Consiglio Nazionale delle Ricerche
*
* 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 .
*/
package it.cnr.contab.pdg00.service;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk;
import it.cnr.contab.doccont00.service.DocumentiContabiliService;
import it.cnr.contab.pdg00.bulk.ArchiviaStampaPdgVariazioneBulk;
import it.cnr.contab.pdg00.bulk.storage.PdgVariazioneDocument;
import it.cnr.contab.service.SpringUtil;
import it.cnr.contab.spring.service.StorePath;
import it.cnr.contab.util.SIGLAStoragePropertyNames;
import it.cnr.contab.util.Utility;
import it.cnr.jada.DetailedException;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.si.spring.storage.StorageObject;
import it.cnr.si.spring.storage.StorageService;
import it.cnr.si.spring.storage.StoreService;
import it.cnr.si.spring.storage.config.StoragePropertyNames;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import javax.mail.*;
import javax.mail.search.*;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
public class PdgVariazioniService extends DocumentiContabiliService {
private transient static final Logger logger = LoggerFactory.getLogger(PdgVariazioniService.class);
private Properties pecMailConf;
@Value("${pec.variazioni.username}")
private String pecVariazioniUsername;
@Value("${pec.variazioni.password}")
private String pecVariazioniPassword;
public PdgVariazioneDocument getPdgVariazioneDocument(ArchiviaStampaPdgVariazioneBulk archiviaStampaPdgVariazioneBulk) {
return PdgVariazioneDocument.construct((Optional.ofNullable(getStorageObjectByPath(getCMISPath(archiviaStampaPdgVariazioneBulk)))
.orElseGet(() -> {
StringBuffer query = new StringBuffer("select * from varpianogest:document");
query.append(" where ").append(SIGLAStoragePropertyNames.VARPIANOGEST_ESERCIZIO.value()).append(" = ").append(archiviaStampaPdgVariazioneBulk.getEsercizio());
query.append(" and ").append(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()).append(" = ").append(archiviaStampaPdgVariazioneBulk.getPg_variazione_pdg());
List storageObjects = super.search(query.toString());
if (!storageObjects.isEmpty())
return getStorageObjectBykey(storageObjects.get(0).getKey());
return null;
})));
}
public String getCMISPath(ArchiviaStampaPdgVariazioneBulk archiviaStampaPdgVariazioneBulk) {
return Arrays.asList(
SpringUtil.getBean(StorePath.class).getPathVariazioniPianoDiGestione(),
Optional.ofNullable(archiviaStampaPdgVariazioneBulk.getEsercizio())
.map(esercizio -> String.valueOf(esercizio))
.orElse("0"),
sanitizeFolderName(archiviaStampaPdgVariazioneBulk.getCd_cds()),
"CdR " + archiviaStampaPdgVariazioneBulk.getCd_centro_responsabilita() +
" Variazione " + Utility.lpad(archiviaStampaPdgVariazioneBulk.getPg_variazione_pdg(), 5, '0'),
"Variazione al PdG n. "
+ archiviaStampaPdgVariazioneBulk.getPg_variazione_pdg()
+ " CdR proponente "
+ archiviaStampaPdgVariazioneBulk.getCd_centro_responsabilita() + ".pdf"
).stream().collect(
Collectors.joining(StorageService.SUFFIX)
);
}
public List findVariazioniSigned(Integer esercizio, Unita_organizzativaBulk cds, String uo, Long variazionePdg) throws ApplicationException {
String basePath = Arrays.asList(
SpringUtil.getBean(StorePath.class).getPathVariazioniPianoDiGestione(), String.valueOf(esercizio)
).stream().collect(
Collectors.joining(StorageService.SUFFIX)
);
if (Optional.ofNullable(cds).isPresent()) {
basePath = basePath.concat(StorageService.SUFFIX)
.concat(cds.getCd_unita_organizzativa());
}
final Optional storageObjectByPath = Optional.ofNullable(getStorageObjectByPath(basePath));
if (storageObjectByPath.isPresent() && Optional.ofNullable(cds).isPresent()) {
return getChildren(storageObjectByPath.get().getKey(), -1).stream()
.filter(storageObject -> storageObject.getPropertyValue(StoragePropertyNames.OBJECT_TYPE_ID.value()).equals(SIGLAStoragePropertyNames.VARPIANOGEST_DOCUMENT.value()))
.filter(storageObject -> hasAspect(storageObject, SIGLAStoragePropertyNames.CNR_SIGNEDDOCUMENT.value()))
.filter(storageObject -> {
if (Optional.ofNullable(uo).isPresent()) {
return storageObject.getPropertyValue(SIGLAStoragePropertyNames.STRORGUO_CODICE.value()).equals(uo);
} else {
return true;
}
})
.filter(storageObject -> {
if (Optional.ofNullable(variazionePdg).isPresent()) {
return storageObject.getPropertyValue(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()).equals(variazionePdg);
} else {
return true;
}
})
.map(storageObject -> storageObject.getPropertyValue(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()))
.map(BigInteger::intValue)
.collect(Collectors.toList());
} else {
StringBuffer query = new StringBuffer("select var.cmis:objectId, ");
query.append("var.").append(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value());
query.append(" from varpianogest:document var");
query.append(" join strorg:cds as cds on var.cmis:objectId = cds.cmis:objectId");
query.append(" join strorg:uo as uo on var.cmis:objectId = uo.cmis:objectId");
query.append(" join cnr:signedDocument as sig on var.cmis:objectId = sig.cmis:objectId");
query.append(" where var.").append(SIGLAStoragePropertyNames.VARPIANOGEST_ESERCIZIO.value()).append(" = ").append(esercizio);
if (cds != null)
query.append(" and cds.").append(SIGLAStoragePropertyNames.STRORGCDS_CODICE.value()).append(" = ").append("'").append(cds.getCd_unita_organizzativa()).append("'");
if (uo != null)
query.append(" and uo.").append(SIGLAStoragePropertyNames.STRORGUO_CODICE.value()).append(" = ").append("'").append(uo).append("'");
if (variazionePdg != null)
query.append(" and var.").append(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()).append(" = ").append(variazionePdg);
final StorageObject storageObjectByPath1 = getStorageObjectByPath(SpringUtil.getBean(StorePath.class).getPathVariazioniPianoDiGestione());
if (Optional.ofNullable(storageObjectByPath1).isPresent()) {
query.append(" and IN_TREE(var, '").append(storageObjectByPath1.getKey()).append("')");
}
return search(query.toString()).stream()
.map(storageObject -> storageObject.>getPropertyValue(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()))
.map(list -> list.get(0))
.map(BigInteger::intValue)
.collect(Collectors.toList());
}
}
public List findVariazioniPresenti(Integer esercizio, String tiSigned, Unita_organizzativaBulk cds, String uo) throws ApplicationException {
return findVariazioniPresenti(esercizio, tiSigned, cds, uo, null);
}
public List findVariazioniPresenti(Integer esercizio, String tiSigned, Unita_organizzativaBulk cds, String uo, Long variazionePdg) throws ApplicationException {
String basePath = Arrays.asList(
SpringUtil.getBean(StorePath.class).getPathVariazioniPianoDiGestione(), String.valueOf(esercizio)
).stream().collect(
Collectors.joining(StorageService.SUFFIX)
);
if (Optional.ofNullable(cds).isPresent()) {
basePath = basePath.concat(StorageService.SUFFIX)
.concat(cds.getCd_unita_organizzativa());
}
final Optional storageObjectByPath = Optional.ofNullable(getStorageObjectByPath(basePath));
if (storageObjectByPath.isPresent() && Optional.ofNullable(cds).isPresent()) {
return getChildren(storageObjectByPath.get().getKey(), -1).stream()
.filter(storageObject -> storageObject.getPropertyValue(StoragePropertyNames.OBJECT_TYPE_ID.value()).equals(SIGLAStoragePropertyNames.VARPIANOGEST_DOCUMENT.value()))
.filter(storageObject -> {
if (Optional.ofNullable(variazionePdg).isPresent()) {
return storageObject.getPropertyValue(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()).equals(BigInteger.valueOf(variazionePdg));
} else {
return true;
}
})
.filter(storageObject -> {
if (Optional.ofNullable(tiSigned)
.filter(s -> s.equals(ArchiviaStampaPdgVariazioneBulk.VIEW_SIGNED)).isPresent())
return hasAspect(storageObject, SIGLAStoragePropertyNames.CNR_SIGNEDDOCUMENT.value());
else if (Optional.ofNullable(tiSigned)
.filter(s -> s.equals(ArchiviaStampaPdgVariazioneBulk.VIEW_NOT_SIGNED)).isPresent())
return !hasAspect(storageObject, SIGLAStoragePropertyNames.CNR_SIGNEDDOCUMENT.value());
else
return true;
})
.filter(storageObject -> {
if (Optional.ofNullable(uo).isPresent()) {
return storageObject.getPropertyValue(SIGLAStoragePropertyNames.STRORGUO_CODICE.value()).equals(uo);
} else {
return true;
}
})
.map(storageObject -> storageObject.getPropertyValue(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()))
.map(BigInteger::intValue)
.collect(Collectors.toList());
} else {
StringBuffer query = new StringBuffer("select var.cmis:objectId, ");
query.append("var.").append(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value());
query.append(" from varpianogest:document var");
query.append(" join strorg:cds as cds on var.cmis:objectId = cds.cmis:objectId");
query.append(" join strorg:uo as uo on var.cmis:objectId = uo.cmis:objectId");
if (tiSigned != null &&
tiSigned.equals(ArchiviaStampaPdgVariazioneBulk.VIEW_SIGNED))
query.append(" join cnr:signedDocument as sig on var.cmis:objectId = sig.cmis:objectId");
query.append(" where var.").append(SIGLAStoragePropertyNames.VARPIANOGEST_ESERCIZIO.value()).append(" = ").append(esercizio);
if (variazionePdg != null)
query.append(" and var.").append(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()).append(" = ").append(variazionePdg);
if (cds != null)
query.append(" and cds.").append(SIGLAStoragePropertyNames.STRORGCDS_CODICE.value()).append(" = ").append("'").append(cds.getCd_unita_organizzativa()).append("'");
if (uo != null)
query.append(" and uo.").append(SIGLAStoragePropertyNames.STRORGUO_CODICE.value()).append(" = ").append("'").append(uo).append("'");
final StorageObject storageObjectByPath1 = getStorageObjectByPath(SpringUtil.getBean(StorePath.class).getPathVariazioniPianoDiGestione());
if (Optional.ofNullable(storageObjectByPath1).isPresent()) {
query.append(" and IN_TREE(var, '").append(
storageObjectByPath1.getKey()).append("')");
}
List variazioniSigned = new ArrayList();
if (tiSigned != null &&
tiSigned.equals(ArchiviaStampaPdgVariazioneBulk.VIEW_NOT_SIGNED)) {
variazioniSigned.addAll(findVariazioniSigned(esercizio, cds, uo, variazionePdg));
}
return search(query.toString()).stream()
.map(storageObject -> storageObject.>getPropertyValue(SIGLAStoragePropertyNames.VARPIANOGEST_NUMEROVARIAZIONE.value()))
.map(list -> list.get(0))
.map(BigInteger::intValue)
.filter(numeroVariazione -> !variazioniSigned.contains(numeroVariazione))
.collect(Collectors.toList());
}
}
public void setPecMailConf(Properties pecMailConf) {
this.pecMailConf = pecMailConf;
}
public void executeDeletePECMessage() {
final javax.mail.Session session = javax.mail.Session.getInstance(pecMailConf);
URLName urlName = new URLName(String.valueOf(pecMailConf.get("pec.url.name")));
Store store = null;
javax.mail.Folder folder = null;
try {
store = session.getStore(urlName);
store.connect(pecVariazioniUsername, pecVariazioniPassword);
folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
final List searchTerms = Arrays.asList(new SubjectTerm("Variazione al PdG"),
new ReceivedDateTerm(ComparisonTerm.LE,
Date.from(LocalDate.now().minusDays(10)
.atStartOfDay(ZoneId.systemDefault()).toInstant())));
final List search = Arrays.asList(
folder.search(new AndTerm(searchTerms.toArray((new SearchTerm[searchTerms.size()]))))
);
search.stream()
.forEach(message -> {
try {
message.setFlag(Flags.Flag.DELETED, true);
} catch (MessagingException e) {
logger.error("PEC DELETE Message cannot be delete", e);
}
}
);
logger.info("PEC DELETE deleted {} message.", search.size());
} catch (AuthenticationFailedException e) {
logger.warn("PEC DELETE with username {} failed to authenticate", pecVariazioniUsername);
} catch (MessagingException e) {
logger.error("PEC DELETE", e);
} finally {
Optional.ofNullable(folder).ifPresent(x -> {
try {
x.close(true);
} catch (Exception e) {
logger.error("PEC DELETE", e);
}
});
Optional.ofNullable(store).ifPresent(x -> {
try {
x.close();
} catch (Exception e) {
logger.error("PEC DELETE", e);
}
});
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy