diff --git a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/documents/util/AllegatiUtil.java b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/documents/util/AllegatiUtil.java index 1c224d35..6f555f23 100644 --- a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/documents/util/AllegatiUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/documents/util/AllegatiUtil.java @@ -2,23 +2,24 @@ package portos.nextmind.liferay.documents.util; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.json.JSONArray; +import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.Folder; import com.liferay.portal.kernel.util.Base64; -import com.liferay.portal.kernel.util.MimeTypesUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.model.RoleConstants; import com.liferay.portal.model.User; -import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil; -import com.liferay.portal.security.permission.PermissionThreadLocal; import com.liferay.portal.service.RoleLocalServiceUtil; import com.liferay.portal.service.ServiceContext; import com.liferay.portal.service.UserLocalServiceUtil; import com.liferay.portlet.documentlibrary.NoSuchFolderException; +import com.liferay.portlet.documentlibrary.model.DLFileEntry; import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil; +import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil; import it.tref.liferay.portos.bo.model.DettPratica; import it.tref.liferay.portos.bo.model.IntPratica; @@ -30,11 +31,100 @@ import it.tref.liferay.portos.bo.service.TerritorioLocalServiceUtil; import it.tref.liferay.portos.bo.shared.util.ConfigurazioneConstants; import it.tref.liferay.portos.bo.util.PraticaUtil; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.Date; +import java.util.List; public class AllegatiUtil { static Log _log = LogFactoryUtil.getLog(AllegatiUtil.class); + public static JSONArray recuperaDocumentiAllegatiPratica(long intPraticaId){ + JSONArray attachments = JSONFactoryUtil.createJSONArray(); + try{ + DettPratica dettPratica = DettPraticaLocalServiceUtil.findByIntPraticaId(intPraticaId).get(0); + IntPratica intPratica = IntPraticaLocalServiceUtil.fetchIntPratica(intPraticaId); + Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(intPratica.getTerritorioId()); + long companyId = territorio.getCompanyId(); + long defaultFolderId = ConfigurazioneLocalServiceUtil + .findByC_ChiaveLong(companyId, ConfigurazioneConstants.ATTACHMENT_FOLDER_ID); + Folder defaultFolder = DLAppLocalServiceUtil.getFolder(defaultFolderId); + String folderName = PraticaUtil.getFolderName(dettPratica.getDettPraticaId()); + Folder folder = DLAppLocalServiceUtil.getFolder(defaultFolder.getRepositoryId(), + defaultFolder.getFolderId(), folderName); + //TODO: tree path per recupero file + List files = DLFileEntryLocalServiceUtil + .getFileEntries(folder.getGroupId(), folder.getFolderId()); + + for(DLFileEntry file : files){ + JSONObject object = JSONFactoryUtil.createJSONObject(); + String fileName = file.getTitle(); + String type = file.getTitle(); + String[] parts = file.getTitle().split(StringPool.UNDERLINE, 3); + if(parts.length >= 3){ + fileName = parts[2]; + type = parts[0].concat(StringPool.UNDERLINE).concat(parts[1]); + } + + InputStream ioFile = DLFileEntryLocalServiceUtil.getFileAsStream(file.getFileEntryId(), file.getLatestFileVersion(true).getVersion()); + // Calculate file Digest + byte[] digest = calculateSHA256Digest(ioFile); + String sha256 = bytesToHex(digest); + + // Encode file + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[4096]; + int bytesRead; + + while ((bytesRead = ioFile.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + byte[] data = outputStream.toByteArray(); + String content = Base64.encode(data); + + object.put("file", content); + object.put("fileName", fileName); + object.put("mimeType", file.getMimeType()); + object.put("sha256", sha256); + object.put("type", type); + + ioFile.close(); + outputStream.close(); + } + }catch(Exception e){ + _log.error(e, e); + } + return attachments; + } + + private static String bytesToHex(byte[] bytes) { + StringBuilder hexString = new StringBuilder(); + for (byte b : bytes) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + return hexString.toString(); + } + + private static byte[] calculateSHA256Digest(InputStream inputStream) throws NoSuchAlgorithmException, IOException { + MessageDigest sha256Digest = MessageDigest.getInstance("SHA-256"); + byte[] buffer = new byte[4096]; + int bytesRead; + + while ((bytesRead = inputStream.read(buffer)) != -1) { + sha256Digest.update(buffer, 0, bytesRead); + } + return sha256Digest.digest(); + } + public static FileEntry aggiungiDocumentoPratica(JSONObject file, long intPraticaId){ FileEntry fileEntry = null; try { diff --git a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DescrizioneUtil.java b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DescrizioneUtil.java index 9fb6ebaa..64d8d851 100644 --- a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DescrizioneUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DescrizioneUtil.java @@ -2,6 +2,8 @@ package portos.nextmind.liferay.entities.util; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.json.JSONArray; +import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; @@ -41,4 +43,30 @@ public class DescrizioneUtil { _log.error(e, e); } } + + public static JSONArray getDescrizione(long intPraticaId){ + JSONArray description = JSONFactoryUtil.createJSONArray(); + try { + List dettPraticasByIntPratica = DettPraticaLocalServiceUtil.findByIntPraticaId(intPraticaId); + for(DettPratica pratica : dettPraticasByIntPratica){ + JSONObject object = JSONFactoryUtil.createJSONObject(); + + object.put("address", pratica.getVia()); + + JSONObject cadastralCoordinates = JSONFactoryUtil.createJSONObject(); + cadastralCoordinates.put("particle", pratica.getDcParticelle()); + cadastralCoordinates.put("sheet", pratica.getDcFoglio()); + + object.put("cadastralCoordinates", cadastralCoordinates); + + object.put("location", pratica.getLocalita()); + object.put("subject", pratica.getDcAllegato()); // TODO: analizzare se corrisponde a subject? + + description.put(object); + } + } catch (RuntimeException | SystemException e) { + _log.error(e, e); + } + return description; + } } diff --git a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DestinazioneUtil.java b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DestinazioneUtil.java index ae02409c..3ce1547d 100644 --- a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DestinazioneUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/DestinazioneUtil.java @@ -1,6 +1,8 @@ package portos.nextmind.liferay.entities.util; import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.json.JSONArray; +import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; @@ -28,4 +30,23 @@ public class DestinazioneUtil { _log.error(e, e); } } + + public static JSONArray getDestinazione(long intPraticaId){ + JSONArray destination = JSONFactoryUtil.createJSONArray(); + try { + List dettPraticasByIntPratica = DettPraticaLocalServiceUtil.findByIntPraticaId(intPraticaId); + for(DettPratica pratica : dettPraticasByIntPratica){ + JSONObject object = JSONFactoryUtil.createJSONObject(); + + object.put("destinationType", pratica.getDestinazione()); + if(pratica.getDestinazione().contentEquals("I0Z")){ + object.put("i0zDescription", pratica.getDestinazioneAltroIntervento()); + } + destination.put(object); + } + } catch (RuntimeException | SystemException e) { + _log.error(e, e); + } + return destination; + } } diff --git a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologiaCostruttivaUtil.java b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologiaCostruttivaUtil.java index b4e280b2..07914862 100644 --- a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologiaCostruttivaUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologiaCostruttivaUtil.java @@ -2,6 +2,8 @@ package portos.nextmind.liferay.entities.util; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.json.JSONArray; +import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; @@ -137,4 +139,71 @@ public class TipologiaCostruttivaUtil { _log.error(e, e); } } + + private static JSONObject serializeInMuratura(DettPratica pratica){ + JSONObject masonry = JSONFactoryUtil.createJSONObject(); + masonry.put("checked", pratica.getTcInMuratura()); + JSONObject item = JSONFactoryUtil.createJSONObject(); + if(pratica.getTcInMuratura()){ + item.put("mixed", pratica.getTcInMuraturaMista()); + item.put("ordinary", pratica.getTcInMuraturaOrdinaria()); + item.put("reinforced", pratica.getTcInMuraturaArmata()); + } + masonry.put("item", item); + return masonry; + } + + private static JSONObject serializeAltraTipologia(DettPratica pratica){ + JSONObject otherConstructionType = JSONFactoryUtil.createJSONObject(); + otherConstructionType.put("checked", pratica.getTcAltro()); + JSONObject item = JSONFactoryUtil.createJSONObject(); + if(pratica.getTcAltro()){ + item.put("description", pratica.getTcAltroDescrizione()); + } + otherConstructionType.put("item", item); + return otherConstructionType; + } + + private static JSONObject serializeInCementoArmato(DettPratica pratica){ + JSONObject reinforcedConcrete = JSONFactoryUtil.createJSONObject(); + reinforcedConcrete.put("checked", pratica.getTcInCA()); + JSONObject item = JSONFactoryUtil.createJSONObject(); + if(pratica.getTcInCA()){ + item.put("inSitu", pratica.getTcInOpera()); + item.put("prefabricated", pratica.getTcPrefabbricato()); + } + reinforcedConcrete.put("item", item); + return reinforcedConcrete; + } + private static JSONObject serializeInAcciaio(DettPratica pratica){ + JSONObject steel = JSONFactoryUtil.createJSONObject(); + steel.put("checked", pratica.getTcInAcciaio()); + JSONObject item = JSONFactoryUtil.createJSONObject(); + if(pratica.getTcInAcciaio()){ + item.put("mixed", pratica.getTcMista()); + } + steel.put("item", item); + return steel; + } + + public static JSONArray getTipologiaCostruttiva(long intPraticaId){ + JSONArray result = JSONFactoryUtil.createJSONArray(); + try { + List dettPraticas = DettPraticaLocalServiceUtil.findByIntPraticaId(intPraticaId); + for(DettPratica pratica : dettPraticas){ + JSONObject object = JSONFactoryUtil.createJSONObject(); + + object.put("masonry", serializeInMuratura(pratica)); + object.put("otherConstructionType", serializeAltraTipologia(pratica)); + object.put("reinforcedConcrete", serializeInCementoArmato(pratica)); + object.put("steel", serializeInAcciaio(pratica)); + object.put("wood", pratica.getTcInLegno()); + + result.put(object); + } + } catch (SystemException e) { + _log.error(e, e); + } + return result; + } } diff --git a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologieInterventoUtil.java b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologieInterventoUtil.java index f07064f0..48522da7 100644 --- a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologieInterventoUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/entities/util/TipologieInterventoUtil.java @@ -2,6 +2,8 @@ package portos.nextmind.liferay.entities.util; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.json.JSONArray; +import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; @@ -76,6 +78,7 @@ public class TipologieInterventoUtil { //TODO: check obbligo documento A24 o asseverazione di esclusione/non assoggettabilità // al procedimento di verifica preventiva dell’interesse archeologico if(publicWork.has("item")){ + //Boolean publicFunding = ??? //TODO: capire quale campo tiene traccia di Finanziamento Pubblico ai sensi del D.Lgs. 18/04/2016 n. 50 String description = publicWork.getJSONObject("item").getString("description"); pratica.setIntervFinPubDesc(description); String notQualifying = publicWork.getJSONObject("item").getString("notQualifying"); @@ -140,4 +143,69 @@ public class TipologieInterventoUtil { _log.error(e, e); } } + + public static JSONArray getTipologiaIntervento(long intPraticaId){ + JSONArray tipologiaIntervento = JSONFactoryUtil.createJSONArray(); + try { + List dettPraticasByIntPratica = DettPraticaLocalServiceUtil.findByIntPraticaId(intPraticaId); + for(DettPratica pratica : dettPraticasByIntPratica){ + JSONObject projectType = JSONFactoryUtil.createJSONObject(); + projectType.put("existingConstructions", pratica.getTcCostruzioniEsistenti()); + projectType.put("newConstruction", pratica.getTcNuovaCostruzione()); + projectType.put("newPertainingConstruction", pratica.getTcNuovaCostruzionePertinenza()); + projectType.put("noExcavationWorks", pratica.getTcNoOpereEscavazione()); + projectType.put("ordinaryExtraordinaryMaintenance", pratica.getTcManutOrdStraord()); + projectType.put("otherType", pratica.getTcAltriInterventi()); + if(pratica.getTcAltriInterventi()){ + projectType.put("otherTypeDescription", pratica.getTcAltriInterventiDesc()); + } + + JSONObject regulatory = JSONFactoryUtil.createJSONObject(); + JSONObject churchHeritage = JSONFactoryUtil.createJSONObject(); + churchHeritage.put("checked", pratica.getBeneDiocesi()); + if(pratica.getBeneDiocesi()){ + long diocesiId = pratica.getDiocesiId(); + if(diocesiId < 10) { + churchHeritage.put("item", "D0"+diocesiId); + } else { + churchHeritage.put("item", "D"+diocesiId); + } + } + regulatory.put("churchHeritage", churchHeritage); + regulatory.put("contractorAppointment", pratica.getNominaImpresa()); + regulatory.put("exemptFromExpenses", pratica.getNormEsenteSpese()); + regulatory.put("exemptFromStampFree", pratica.getNormEsenteBollo()); + JSONObject publicWork = JSONFactoryUtil.createJSONObject(); + publicWork.put("checked", pratica.getLavoriPubblici()); + JSONObject publicFunding = JSONFactoryUtil.createJSONObject(); + //publicFunding.put("checked", pratica.get) //TODO: capire quale campo tiene traccia di Finanziamento Pubblico ai sensi del D.Lgs. 18/04/2016 n. 50 + publicFunding.put("description", pratica.getIntervFinPubDesc()); + if(pratica.getIntervInAreaDiInteresse()){ + publicFunding.put("notQualifying", "AREA_DI_INTERESSE"); + } + if(pratica.getIntervNonModificante()){ + publicFunding.put("notQualifying", "NON_MODIFICANTE"); + } + if(pratica.getIntervNonAssoggettabile()){ + publicFunding.put("notQualifying", "NON_ASSOGGETTABILE"); + } + publicWork.put("item", publicFunding); + + regulatory.put("publicWork", publicWork); + regulatory.put("testerAppointment", pratica.getNominaCollaudatore() ? "SUBORDINATE" : "UNNECESSARY"); + if(!pratica.getNominaCollaudatore()){ + regulatory.put("localAction", pratica.getNormDm2018()); + } + regulatory.put("worksManagerAppointment", pratica.getNominaDirettoreLavori() ? "SUBORDINATE" : "UNNECESSARY"); + + JSONObject object = JSONFactoryUtil.createJSONObject(); + object.put("projectType", projectType); + object.put("regulatory", regulatory); + tipologiaIntervento.put(object); + } + } catch (RuntimeException | SystemException e) { + _log.error(e, e); + } + return tipologiaIntervento; + } } diff --git a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/roles/util/SoggettiUtil.java b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/roles/util/SoggettiUtil.java index dd5d5699..877feab7 100644 --- a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/roles/util/SoggettiUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/liferay/roles/util/SoggettiUtil.java @@ -43,49 +43,99 @@ public class SoggettiUtil { String fieldOfActivity = null; switch(role){ case Titolare_Digitale: - + String cfTitolare = ""; //TODO: capire quale codice fiscale prendere + List TitolareSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfTitolare); + for(Soggetto titolare : TitolareSubjects){ + result.put(serializePerson(titolare, true)); + } break; case Collaudatore: - + String cfCollaudatore = pratica.getCodiceFiscalePrincipaleCollaudatore(); + List CollaudatoreSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfCollaudatore); + for(Soggetto collaudatore : CollaudatoreSubjects){ + result.put(serializePerson(collaudatore, true)); + } break; case Committente: - + String cfCommittente = pratica.getCodiceFiscalePrincipaleCommittente(); + List CommittenteSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfCommittente); + for(Soggetto committente : CommittenteSubjects){ + result.put(serializePerson(committente, false)); + } break; case Direttore_Lavori: - + String cfDirettoreLavori = pratica.getCodiceFiscalePrincipaleDirettoreLavori(); + List DirettoreSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfDirettoreLavori); + for(Soggetto direttore : DirettoreSubjects){ + result.put(serializePerson(direttore, true)); + } break; case Ditta_Esecutrice: - + String taxCodeDitta = pratica.getCodiceFiscalePrincipaleDitta(); + List DittaSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), taxCodeDitta); + for(Soggetto ditta : DittaSubjects){ + result.put(serializePerson(ditta, false)); + } break; case Geologo: - + String cfGeologo = pratica.getCodiceFiscalePrincipaleGeologo(); + List GeologoSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfGeologo); + for(Soggetto geologo : GeologoSubjects){ + result.put(serializePerson(geologo, true)); + } break; case Progettista: - + String cfProgettista = pratica.getCodiceFiscalePrincipaleProgettista(); + List ProgettistaSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfProgettista); + for(Soggetto storico : ProgettistaSubjects){ + result.put(serializePerson(storico, true)); + } break; case Archeologo: - + String cfArcheologo = pratica.getCodiceFiscalePrincipaleArcheologo(); + List ArcheologoSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfArcheologo); + for(Soggetto archeologo : ArcheologoSubjects){ + result.put(serializePerson(archeologo, true)); + } break; case AltroProfBeniCulturali: - + String cfProfBeniCulturali = ""; //TODO: capire quale codice fiscale prendere + List ProfBeniCulturaliSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfProfBeniCulturali); + for(Soggetto prof : ProfBeniCulturaliSubjects){ + result.put(serializePerson(prof, true)); + } break; case Restauratore: - + String cfRestauratore = pratica.getCodiceFiscalePrincipaleRestauratore(); + List RestauratoreSubjects = SoggettoLocalServiceUtil + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfRestauratore); + for(Soggetto restauratore : RestauratoreSubjects){ + result.put(serializePerson(restauratore, true)); + } break; case Storico_Arte: - String cf = pratica.getCodiceFiscalePrincipaleStoricoArte(); + String cfStoricoArte = pratica.getCodiceFiscalePrincipaleStoricoArte(); List storicoArteSubjects = SoggettoLocalServiceUtil - .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cf); + .findByDettPratica_CodiceFiscale(pratica.getDettPraticaId(), cfStoricoArte); for(Soggetto storico : storicoArteSubjects){ result.put(serializePerson(storico, true)); } diff --git a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/quarkus/bridge/scheduler/QuarkusBridgeScheduler.java b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/quarkus/bridge/scheduler/QuarkusBridgeScheduler.java index 49749805..4e1b102b 100644 --- a/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/quarkus/bridge/scheduler/QuarkusBridgeScheduler.java +++ b/liferay-plugins-sdk-6.2/portlets/quarkus-bridge-portlet/docroot/WEB-INF/src/portos/nextmind/quarkus/bridge/scheduler/QuarkusBridgeScheduler.java @@ -28,6 +28,7 @@ import it.tref.liferay.portos.bo.model.IntPratica; import it.tref.liferay.portos.bo.model.Territorio; import it.tref.liferay.portos.bo.service.DettPraticaLocalServiceUtil; import it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil; +import it.tref.liferay.portos.bo.shared.protocollo.model.Protocollo.TipoProtocollo; import it.tref.liferay.portos.bo.shared.util.Constants; import java.util.ArrayList; @@ -164,8 +165,9 @@ public class QuarkusBridgeScheduler implements MessageListener { return object; } - private JSONObject prepareUpdateBatch(long companyId){ + private JSONObject prepareReadBatch(long companyId){ final String clientContext = "PAESAGGISTICA"; + JSONObject readBatchResult = JSONFactoryUtil.createJSONObject(); DynamicQuery query = IntPraticaLocalServiceUtil.dynamicQuery(); query.add(RestrictionsFactoryUtil.eq("companyId", companyId)); //TODO: scoprire in quali stati possono essere le pratiche ed ottimizzare la query @@ -178,6 +180,7 @@ public class QuarkusBridgeScheduler implements MessageListener { long intPraticaId = intPratica.getIntPraticaId(); String praticaId = String.valueOf(intPraticaId); JSONObject object = QuarkusBridgeMessageFactoryUtil.writeUpdateData(clientContext, praticaId); + JSONArray readPartialResult = JSONFactoryUtil.createJSONArray(); _log.debug(object.toString()); JSONArray aggiornamentiPratiche = object.getJSONArray("result"); for(int i = 0; i < aggiornamentiPratiche.length(); i++){ @@ -188,33 +191,96 @@ public class QuarkusBridgeScheduler implements MessageListener { String payloadContentType = Sportello.getString(QuarkusBridgeConstants.tipoContenuto); JSONObject payload = Sportello.getJSONObject(QuarkusBridgeConstants.contenuto); switch(payloadContentType){ - case "INSTANCE_DELETE": - _log.debug("Checking if we can delete Instance of Pratica with Id " + intPraticaId); - if (PraticaValidator.canDeletePratica(intPratica.getIntPraticaId())){ - _log.debug("Deleting Instance of Pratica with Id " + intPraticaId); - IntPraticaLocalServiceUtil.deleteIntPratica(intPratica, false); - } else _log.debug("Cannot delete Instance of Pratica with Id "+ intPraticaId); + case "INSTANCE_READ": + JSONObject instance = serializeInstance(intPratica, clientContext); + instance.put("esito", true); + readPartialResult.put(instance); break; case "DATA_READ": _log.debug("Reading current Data from database for Pratica with Id "+ intPraticaId); JSONObject currentData = readData(payload, intPraticaId); if(currentData.length() == 0){ + currentData.put("esito", false); _log.error("Unable to read Data from database for Pratica with Id "+ intPraticaId); } else { - //TODO: send payload to Quarkus Middleware + currentData.put("esito", true); } + readPartialResult.put(currentData); + break; + case "COMPLIANCE_READ": + //TODO: validare i dati + break; + default: + _log.debug(pratica.toString()); + break; + } + } + readBatchResult.put("results_".concat(praticaId), readPartialResult); + } + } catch (Exception e) { + _log.error(e,e); + } + return readBatchResult; + } + + private JSONObject serializeInstance(IntPratica pratica, String context){ + JSONObject INSTANCE = JSONFactoryUtil.createJSONObject(); + INSTANCE.put("context", context); + String url = "" ; + //TODO: retrieve url for json answer + INSTANCE.put("url", url); + String instanceId = String.valueOf(pratica.getIntPraticaId()); + INSTANCE.put("instanceId", instanceId); + + String ipaCode = ""; + //TODO: retrieve ipaCode + String clientId = ""; + //TODO: retrieve clientId + + String proceedingType = pratica.getTipoProcedura(); + INSTANCE.put("proceedingType", proceedingType); + return INSTANCE; + } + + private JSONObject prepareUpdateBatch(long companyId){ + final String clientContext = "PAESAGGISTICA"; + DynamicQuery query = IntPraticaLocalServiceUtil.dynamicQuery(); + query.add(RestrictionsFactoryUtil.eq("companyId", companyId)); + //TODO: scoprire in quali stati possono essere le pratiche ed ottimizzare la query + try { + List praticheDaAggiornare = IntPraticaLocalServiceUtil.dynamicQuery(query); + //TODO: splittare le pratiche da aggiornare + + //TODO: ciclare per effettuare gli update delle singole pratiche + for(IntPratica intPratica : praticheDaAggiornare){ + long intPraticaId = intPratica.getIntPraticaId(); + String praticaId = String.valueOf(intPraticaId); + JSONObject object = QuarkusBridgeMessageFactoryUtil.writeUpdateData(clientContext, praticaId); + _log.debug(object.toString()); + JSONArray aggiornamentiPratiche = object.getJSONArray("result"); + for(int i = 0; i < aggiornamentiPratiche.length(); i++){ + JSONObject pratica = aggiornamentiPratiche.getJSONObject(i); + JSONObject Header = pratica.getJSONObject(QuarkusBridgeConstants.HEADER_REQUEST); + JSONObject Sportello = pratica.getJSONObject(QuarkusBridgeConstants.BODY_REQUEST); + + String payloadContentType = Sportello.getString(QuarkusBridgeConstants.tipoContenuto); + JSONObject payload = Sportello.getJSONObject(QuarkusBridgeConstants.contenuto); + switch(payloadContentType){ + case "INSTANCE_DELETE": // Elimina la pratica + _log.debug("Checking if we can delete Instance of Pratica with Id " + intPraticaId); + if (PraticaValidator.canDeletePratica(intPratica.getIntPraticaId())){ + _log.debug("Deleting Instance of Pratica with Id " + intPraticaId); + IntPraticaLocalServiceUtil.deleteIntPratica(intPratica, false); + } else _log.debug("Cannot delete Instance of Pratica with Id "+ intPraticaId); break; - case "DATA_WRITE": + case "DATA_WRITE": // Aggiorna i dati dei campi del DettPratica associato ad IntPratica _log.debug("Writing new data to database for Pratica with Id "+ intPraticaId); writeData(payload, intPraticaId); _log.debug("Data written to database for Pratica with Id "+ intPraticaId); break; - case "DATA_DELETE": + case "DATA_DELETE": // Elimina i dati dei campi del DettPratica associato ad IntPratica //TODO: eliminazione dati dentro entità break; - case "COMPLIANCE_READ": - //TODO: validare i dati - break; default: _log.debug(pratica.toString()); break; @@ -233,21 +299,36 @@ public class QuarkusBridgeScheduler implements MessageListener { String dataType = payload.getJSONObject("data").getString("dataType"); switch(dataType){ case QuarkusBridgeConstants.DataTypes.MAIN_DETAILS: - //TODO: leggere da DB i dati di - // - Tipologia Costruttiva - // - Descrizione - // - Destinazione - // - Tipologia di Intervento + JSONArray TC = TipologiaCostruttivaUtil.getTipologiaCostruttiva(intPraticaId); + if(TC.length() > 0) result.put("constructionType", TC.getJSONObject(0)); + + JSONArray description = DescrizioneUtil.getDescrizione(intPraticaId); + if(description.length() > 0) result.put("description", description.getJSONObject(0)); + + JSONArray destination = DestinazioneUtil.getDestinazione(intPraticaId); + if(destination.length() > 0) result.put("destination", destination.getJSONObject(0)); + + JSONArray tipoInterventoANDNormativa = TipologieInterventoUtil.getTipologiaIntervento(intPraticaId); + if(tipoInterventoANDNormativa.length() > 0) { + result.put("projectType", tipoInterventoANDNormativa.getJSONObject(0) + .getJSONObject("projectType")); + result.put("regulatory", tipoInterventoANDNormativa.getJSONObject(0) + .getJSONObject("regulatory")); + } break; case QuarkusBridgeConstants.DataTypes.ACTORS: JSONArray actors = payload.getJSONArray("actors"); + JSONArray partial = JSONFactoryUtil.createJSONArray(); for(int i = 0; i < actors.length() ; i++){ JSONObject soggetto = actors.getJSONObject(i); - SoggettiUtil.getSoggetto(soggetto, intPraticaId); + JSONArray actor = SoggettiUtil.getSoggetto(soggetto, intPraticaId); + if(actor.length() > 0) partial.put(actor.getJSONObject(0)); } + result.put("actors", partial); break; case QuarkusBridgeConstants.DataTypes.ATTACHMENTS_WITH_FILE: - //TODO: leggere da Document and Media Library i documenti della pratica + JSONArray attachments = AllegatiUtil.recuperaDocumentiAllegatiPratica(intPraticaId); + result.put("attachments", attachments); break; case QuarkusBridgeConstants.DataTypes.WORK_DESCRIPTION: //TODO: aspettare che vengano definite le buildingMetrics