From 18236132282c50d48b418710961c0ac720095911 Mon Sep 17 00:00:00 2001 From: piyuskag Date: Mon, 4 Nov 2024 13:56:19 +0530 Subject: [PATCH 1/7] Fixed application count issue on admin dashboard. --- .../repositories/ApplicationRepository.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index 158c43fd..38d73e8d 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -29,15 +29,15 @@ public interface ApplicationRepository extends JpaRepository findByIdAndUserIdAndCallIdAndIsDeletedFalse(Long applicationId, Long userId, Long callId); - @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.userId = :userId AND a.company.id = :companyId AND a.status = 'SUBMIT' ") + @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.userId = :userId AND a.company.id = :companyId AND a.status = 'SUBMIT' AND a.isDeleted = false") Long countSubmittedApplicationsByUserId(@Param("userId") Long userId, @Param("companyId") Long companyId); List findByCompanyIdAndUserIdAndIsDeletedFalse(Long companyId,Long userId); - @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.status = 'SUBMIT' And a.hubId = :hubId") + @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.status = 'SUBMIT' And a.hubId = :hubId AND a.isDeleted = false") public Long countSubmittedApplicationsByHubId(@Param("hubId") Long hubId); - @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.status = 'DRAFT' And a.hubId = :hubId") + @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.status = 'DRAFT' And a.hubId = :hubId AND a.isDeleted = false") public Long countDraftApplicationsByHubId(@Param("hubId") Long hubId); @Query("SELECT a.call.id FROM ApplicationEntity a WHERE a.id = :id") From 84d2d778b56a38743dd57fb7467dddad9c0f985e Mon Sep 17 00:00:00 2001 From: piyuskag Date: Mon, 4 Nov 2024 17:21:06 +0530 Subject: [PATCH 2/7] Updated Code. --- .../db/changelog/db.changelog-1.0.0.xml | 9 +- ...plate_for_notification_mail_31_10_2024.sql | 95 +++++++++++++++---- ...ate_for_notification_mail_04_11_2024_1.sql | 78 +++++++++++++++ 3 files changed, 164 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/db/dump/update_system_email_template_for_notification_mail_04_11_2024_1.sql diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 52a0910f..37b87d81 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1702,7 +1702,7 @@ UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE' - + select setval('gepafin_schema.system_email_template_id_seq', (select max(id)+1 @@ -1710,5 +1710,10 @@ - + + + + + diff --git a/src/main/resources/db/dump/insert_system_email_template_for_notification_mail_31_10_2024.sql b/src/main/resources/db/dump/insert_system_email_template_for_notification_mail_31_10_2024.sql index fbb2c1c1..83cfc6c3 100644 --- a/src/main/resources/db/dump/insert_system_email_template_for_notification_mail_31_10_2024.sql +++ b/src/main/resources/db/dump/insert_system_email_template_for_notification_mail_31_10_2024.sql @@ -1,5 +1,14 @@ -UPDATE gepafin_schema.system_email_template -SET html_content = ' +INSERT INTO gepafin_schema.system_email_template +( + id, template_name, "type", html_content, subject, "json", "system", + is_deleted, created_date, updated_date +) +VALUES +( + 3, + 'Instructional Aid/Request for Documentation Integration Template', + 'DOCUMENTATION_INTEGRATION_REQUEST', + '

RICHIESTA INTEGRAZIONE DOCUMENTALE

@@ -22,11 +31,27 @@ SET html_content = '

{{email_signature}}

- ' -WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true; + ', + 'RICHIESTA INTEGRAZIONE DOCUMENTALE - {{call_name}}', + NULL, + true, + false, + '2024-10-26 20:00:00', + '2024-10-26 20:00:00' +); -UPDATE gepafin_schema.system_email_template -SET html_content = ' +-- Insert for INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE +INSERT INTO gepafin_schema.system_email_template +( + id, template_name, "type", html_content, subject, "json", "system", + is_deleted, created_date, updated_date +) +VALUES +( + 4, + 'Notification of Inadmissibility Due to Failure to Respond Template', + 'INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE', + '

Comunicazione di non ammissibilità per mancata risposta a richiesta integrazione documentale

@@ -40,11 +65,27 @@ SET html_content = '

{{email_signature}}

- ' -WHERE "type" = 'INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE' AND "system" = true; + ', + 'BANDO {{call_name}} - Domanda di finanziamento non ammessa {{company_name}}', + NULL, + true, + false, + '2024-10-26 20:00:00', + '2024-10-26 20:00:00' +); -UPDATE gepafin_schema.system_email_template -SET html_content = ' +-- Insert for ADMISSIBILITY_NOTIFICATION +INSERT INTO gepafin_schema.system_email_template +( + id, template_name, "type", html_content, subject, "json", "system", + is_deleted, created_date, updated_date +) +VALUES +( + 5, + 'Notification of Admissibility Template', + 'ADMISSIBILITY_NOTIFICATION', + '

Buongiorno,

@@ -56,11 +97,27 @@ SET html_content = '

{{email_signature}}

- ' -WHERE "type" = 'ADMISSIBILITY_NOTIFICATION' AND "system" = true; + ', + 'BANDO {{call_name}} – Esito positivo istruttoria di ammissibilità {{company_name}}', + NULL, + true, + false, + '2024-10-26 20:00:00', + '2024-10-26 20:00:00' +); -UPDATE gepafin_schema.system_email_template -SET html_content = ' +-- Insert for INADMISSIBILITY_NOTIFICATION +INSERT INTO gepafin_schema.system_email_template +( + id, template_name, "type", html_content, subject, "json", "system", + is_deleted, created_date, updated_date +) +VALUES +( + 6, + 'Notification of Inadmissibility Template', + 'INADMISSIBILITY_NOTIFICATION', + '

Buongiorno,

@@ -74,5 +131,11 @@ SET html_content = '

{{email_signature}}

- ' -WHERE "type" = 'INADMISSIBILITY_NOTIFICATION' AND "system" = true; + ', + 'BANDO {{call_name}} – Esito negativo istruttoria di ammissibilità {{company_name}}', + NULL, + true, + false, + '2024-10-26 20:00:00', + '2024-10-26 20:00:00' +); \ No newline at end of file diff --git a/src/main/resources/db/dump/update_system_email_template_for_notification_mail_04_11_2024_1.sql b/src/main/resources/db/dump/update_system_email_template_for_notification_mail_04_11_2024_1.sql new file mode 100644 index 00000000..fbb2c1c1 --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_for_notification_mail_04_11_2024_1.sql @@ -0,0 +1,78 @@ +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
+

RICHIESTA INTEGRAZIONE DOCUMENTALE

+

Buongiorno,

+

In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti + {{call_name}} di cui al Protocollo n. {{protocol_number}} del + {{protocol_date}} e {{protocol_time}}, alla luce dell’attività istruttoria svolta, + segnaliamo quanto segue:

+
    +
  • {{form_dataInput}}
  • +
+

{{note}}

+

Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola all’interno dello sportello + online {{platform_link}} che inviandola a mezzo PEC all’indirizzo + {{legal_mail}} entro e non oltre 10 giorni dal ricevimento della presente comunicazione, + precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.

+

Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito + dell’invio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.

+

Distinti Saluti,

+

{{email_signature}}

+
+ + ' +WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true; + +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
+

Comunicazione di non ammissibilità per mancata risposta a richiesta integrazione documentale

+

Buongiorno,

+

Con posta elettronica certificata del {{date_time_emailSend}}, vi abbiamo comunicato che i documenti richiesti + dal Gestore sarebbero dovuti pervenire entro 10 giorni dal ricevimento di detta comunicazione. + Trascorso il termine senza la ricezione dei documenti richiesti, il Gestore non ha potuto prendere in considerazione la richiesta di finanziamento.

+

È possibile presentare ricorso tramite modello disponibile nello sportello online + {{platform_link}} entro 10 giorni dalla ricezione di questa comunicazione.

+

Distinti Saluti,

+

{{email_signature}}

+
+ + ' +WHERE "type" = 'INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE' AND "system" = true; + +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
+

Buongiorno,

+

In riferimento alla domanda di concessione di Finanziamento agevolato “{{call_name}}” di cui al + Protocollo n. {{protocol_number}} del {{protocol_date}} alle {{protocol_time}}, l’istruttoria di ammissibilità + è stata completata con esito positivo.

+

Seguirà una comunicazione relativa alla valutazione tecnica ed economico-finanziaria ai fini della valutazione finale.

+

Distinti Saluti,

+

{{email_signature}}

+
+ + ' +WHERE "type" = 'ADMISSIBILITY_NOTIFICATION' AND "system" = true; + +UPDATE gepafin_schema.system_email_template +SET html_content = ' + +
+

Buongiorno,

+

In riferimento alla domanda di concessione di Finanziamento agevolato “{{call_name}}” di cui al + Protocollo n. {{protocol_number}} del {{protocol_date}} alle {{protocol_time}}, + l''istruttoria di ammissibilità è stata completata con esito negativo.

+

Motivazioni: {{form_text}}

+

È possibile presentare ricorso tramite modello disponibile nello sportello online + {{platform_link}} entro 10 giorni dalla ricezione di questa comunicazione.

+

Distinti Saluti,

+

{{email_signature}}

+
+ + ' +WHERE "type" = 'INADMISSIBILITY_NOTIFICATION' AND "system" = true; From f51379bd4dfe9dc38d12fa402681f9258841035a Mon Sep 17 00:00:00 2001 From: harish Date: Tue, 5 Nov 2024 12:15:06 +0530 Subject: [PATCH 3/7] Updated code for reminder endpoint --- .../tendermanagement/dao/ApplicationAmendmentRequestDao.java | 4 +++- .../web/rest/api/ApplicationAmendmentRequestApi.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 63ecc6c7..0652edaf 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -508,8 +508,10 @@ public class ApplicationAmendmentRequestDao { String subject = prepareSubject(emailTemplate, amendment, beneficiaryUser); String body = prepareBody(emailTemplate, amendment, beneficiaryUser); String email = beneficiaryUser.getEmail(); - if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty()) { + String companyEmail = applicationEntity.getCompany().getEmail(); + if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty() && companyEmail != null && !companyEmail.isEmpty()) { emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email)); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(companyEmail)); // mailUtil.sendByMailGun(subject,body,List.of(email),null); } else { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG)); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java index 42977539..10c3128b 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java @@ -181,7 +181,7 @@ public interface ApplicationAmendmentRequestApi { @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })) }) - @PostMapping(value = "sendReminderEmail/{amendmentId}", produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = "/{amendmentId}/reminder", produces = MediaType.APPLICATION_JSON_VALUE) ResponseEntity> sendReminderEmail(HttpServletRequest request, @Parameter( required = true) @PathVariable(value = "amendmentId") Long amendmentId); From 8ad0de32d44d80e235860db6d7e7b17859086edd Mon Sep 17 00:00:00 2001 From: nisha Date: Tue, 5 Nov 2024 15:03:02 +0530 Subject: [PATCH 4/7] Updated code for adding list of document --- .../gepafin/tendermanagement/dao/PdfDao.java | 46 +++++++++++++++---- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java index 7fe594f3..550bd240 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/PdfDao.java @@ -31,6 +31,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.*; import java.util.List; +import java.util.stream.Collectors; @Component public class PdfDao { @@ -476,7 +477,7 @@ public class PdfDao { String contentId = content.getId(); // Content ID String label = content.getLabel(); // Content label String name = content.getName(); // Content name - Object fieldValue = null; + Object fieldValue = ""; String contentLabel = content.getSettings().stream() .filter(setting -> "label".equals(setting.getName())) // Filter settings by name @@ -485,6 +486,32 @@ public class PdfDao { .findFirst() // Get the first matching value .orElse(null); // If no match is found, set label to null // Find the form field in the response that matches the contentId + if (name.equals("paragraph")){ + String paragraph = content.getSettings().stream() + .filter(setting -> "text".equals(setting.getName())) // Filter settings by name + .map(SettingResponseBean::getValue) // Extract the value from the matching setting + .map(Object::toString) // Convert the value to a string + .findFirst() // Get the first matching value + .orElse(null); + Paragraph labelParagraph = new Paragraph(); + PdfPCell labelCell = new PdfPCell(PdfUtils.htmlToPdfPCell(paragraph,labelFont)); + labelCell.setBorder(Rectangle.NO_BORDER); + labelCell.setGrayFill(7); + labelCell.setPadding(5); + + // Create a PdfPTable with 1 column and add the PdfPCell to it + PdfPTable table = new PdfPTable(1); + table.setWidthPercentage(100); + table.addCell(labelCell); + labelParagraph.add(table); + try { + document.add(labelParagraph); + document.add(new Paragraph(" ")); + + } catch (DocumentException e) { + throw new RuntimeException(e); + } + } Optional matchingFormField = formFields.stream() .filter(formField -> formField.getFieldId().equals(contentId)) .findFirst(); @@ -501,7 +528,13 @@ public class PdfDao { // Process 'fileupload' and 'checkboxes' cases as in the original logic if (name.equals("fileupload")) { - continue; + if (fieldValue instanceof List && ((List) fieldValue).stream().allMatch(item -> item instanceof DocumentResponseBean)) { + List documentList = (List) fieldValue; + List names = documentList.stream() + .map(DocumentResponseBean::getName) + .collect(Collectors.toList()); + fieldValue = names; + } } else if (name.equals("checkboxes") && fieldValue instanceof List) { List check = (List) fieldValue; List settingResponseBeans = content.getSettings(); @@ -529,15 +562,12 @@ public class PdfDao { // Further processing of field value (e.g., finding labels in options) fieldValue = findLabelInOptions(content.getSettings(), fieldValue); - } else { - // If no matching form field is found, store contentId with an empty string - fieldValue = ""; } - try { - if((contentLabel!=null && Boolean.FALSE.equals(contentLabel.isEmpty())) || (fieldValue!=null && !StringUtils.isEmpty((CharSequence) fieldValue))) { - addLabelValuePair(writer, document, contentLabel, fieldValue, labelFont, valueFont, content); + if((contentLabel==null || StringUtils.isEmpty(contentLabel)) && (fieldValue==null || StringUtils.isEmpty(fieldValue.toString()))) { + continue; } + addLabelValuePair(writer, document, contentLabel, fieldValue, labelFont, valueFont, content); } catch (DocumentException e) { log.error("Error checking object: " + e.getMessage(), e); From 472237246c0cd241600fa2ab053c0bc609c40a0f Mon Sep 17 00:00:00 2001 From: harish Date: Tue, 5 Nov 2024 18:47:43 +0530 Subject: [PATCH 5/7] Added validation in amendment and change email content --- .../dao/ApplicationAmendmentRequestDao.java | 3 +- .../dao/ApplicationEvaluationDao.java | 3 +- .../dao/EmailNotificationDao.java | 10 ++- ...pplicationAmendmentRequestServiceImpl.java | 67 ++++++++++++++++--- .../db/changelog/db.changelog-1.0.0.xml | 4 ++ ...ate_for_notification_mail_05_11_2024_4.sql | 16 +++++ 6 files changed, 87 insertions(+), 16 deletions(-) create mode 100644 src/main/resources/db/dump/update_system_email_template_for_notification_mail_05_11_2024_4.sql diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 03ebcbd6..4af092dc 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -98,7 +98,7 @@ public class ApplicationAmendmentRequestDao { @Autowired private Validator validator; - public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) { + public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(Long applicationEvaluationId) { log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId); ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId); Long applicationId = applicationEvaluationEntity.getApplicationId(); @@ -341,7 +341,6 @@ public class ApplicationAmendmentRequestDao { } public List getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { - UserEntity user = validator.validateUser(request); if(validator.checkIsPreInstructor() && userId == null) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG)); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index cd1654bb..75e6bcc4 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -897,12 +897,13 @@ public class ApplicationEvaluationDao { assignedApplicationsRepository.save(assignedApplicationsEntity); ApplicationAmendmentRequestEntity amendmentRequest = applicationAmendmentRequestRepository.findByApplicationEvaluationIdAndIsDeletedFalse(entity.getId()); + if(amendmentRequest!=null){ if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.APPROVED.getValue())))) { emailNotificationDao.sendAdmissibilityNotificationEmailForApprovedApplication(amendmentRequest); } if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.REJECTED.getValue())))) { emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(amendmentRequest); - } + }} return convertToResponse(entity); } return null; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index f75e5796..43f3b4e4 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -77,9 +77,15 @@ public class EmailNotificationDao { UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); List recipientEmails = new ArrayList<>(); - if (applicationEntity.getCompany().getEmail() != null) { - recipientEmails.add(applicationEntity.getCompany().getEmail()); + String companyEmail = applicationEntity.getCompany().getEmail(); + String contactEmail = applicationEntity.getCompany().getContactEmail(); + if (companyEmail != null && !companyEmail.isEmpty()) { + recipientEmails.add(companyEmail); } + if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { + recipientEmails.add(contactEmail); + } + if (userEntity.getBeneficiary().getEmail() != null) { recipientEmails.add(userEntity.getBeneficiary().getEmail()); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java index 4d212377..fa059d57 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java @@ -39,60 +39,105 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm @Override public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) { - UserEntity user= validator.validateUser(request); - return applicationAmendmentRequestDao.getApplicationDataForAmendment(request,applicationEvaluationId); + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationEvaluationId); + entityOptional.ifPresent(applicationEvaluationEntity -> validator.validatePreInstructor(request, applicationEvaluationEntity.getUserId())); + return applicationAmendmentRequestDao.getApplicationDataForAmendment(applicationEvaluationId); } @Override public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(HttpServletRequest request, Long applicationEvaluationId , ApplicationAmendmentRequest applicationAmendmentRequest) { - UserEntity user= validator.validateUser(request); + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationEvaluationId); + entityOptional.ifPresent(applicationEvaluationEntity -> validator.validatePreInstructor(request, applicationEvaluationEntity.getUserId())); return applicationAmendmentRequestDao.createApplicationAmendmentRequest(applicationEvaluationId,applicationAmendmentRequest); } @Override public void deleteApplicationAmendmentRequest(HttpServletRequest request, Long id) { - applicationAmendmentRequestDao.deleteById(id); + ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id) + .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, + Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); + + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); + if (entityOptional.isPresent()) { + UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); + + applicationAmendmentRequestDao.deleteById(id); + } } @Override public ApplicationAmendmentRequestResponse getApplicationAmendmentRequestById(HttpServletRequest request,Long id) { - return applicationAmendmentRequestDao.getApplicationAmendmentRequestById(id); + ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id) + .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, + Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); + + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); + if (entityOptional.isPresent()) { + UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); + } + return applicationAmendmentRequestDao.getApplicationAmendmentRequestById(id); + } @Override public List getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { + UserEntity user = validator.validatePreInstructor(request, userId); return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest(request,userId); } @Override public ApplicationAmendmentRequestResponse updateApplicationAmendment(HttpServletRequest request, Long id, ApplicationAmendmentRequestBean applicationAmendmentRequestBean) { - UserEntity updatedByUser= validator.validateUser(request); - return applicationAmendmentRequestDao.updateApplicationAmendment(id,applicationAmendmentRequestBean); + ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id) + .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, + Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); + + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); + if (entityOptional.isPresent()) { + UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); + } + return applicationAmendmentRequestDao.updateApplicationAmendment(id,applicationAmendmentRequestBean); } @Override public ApplicationAmendmentRequestEntity validateApplicationAmendmentRequest(Long applicationAmendmentId) { + return applicationAmendmentRequestDao.validateApplicationAmendmentRequest(applicationAmendmentId); } @Override public List getAllAmendmentRequestByBeneficiaryId(HttpServletRequest request, Long beneficiaryId) { + UserEntity user= validator.validateUser(request); return applicationAmendmentRequestDao.getAllAmendmentRequestByBeneficiaryId(beneficiaryId); } @Override public ApplicationAmendmentRequestResponse closeAmendmentRequest(HttpServletRequest request, Long id, CloseAmendmentRequest closeAmendmentRequest) { - return applicationAmendmentRequestDao.closeAmendmentRequest(id,closeAmendmentRequest); + ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id) + .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, + Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); + + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); + if (entityOptional.isPresent()) { + UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); + } + return applicationAmendmentRequestDao.closeAmendmentRequest(id,closeAmendmentRequest); } @Override public ApplicationAmendmentRequestResponse extendResponseDays(HttpServletRequest request, Long id, Long addedDays) { - return applicationAmendmentRequestDao.extendResponseDays(id, addedDays); + UserEntity user= validator.validateUser(request); + return applicationAmendmentRequestDao.extendResponseDays(id, addedDays); } public ApplicationAmendmentRequestResponse getAmendmentByApplicationId(HttpServletRequest request, Long applicationId) { - UserEntity user= validator.validateUser(request); - return applicationAmendmentRequestDao.getAmendmentByApplicationId(request,applicationId); + ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByApplicationIdAndIsDeletedFalse(applicationId); + if(amendment!=null) { + + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); + if (entityOptional.isPresent()) { + UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); + }} + return applicationAmendmentRequestDao.getAmendmentByApplicationId(request,applicationId); } @Override public ApplicationAmendmentRequestResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationAmendmentRequestEnum status) { diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 37b87d81..9aa2ec42 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1716,4 +1716,8 @@ + + + diff --git a/src/main/resources/db/dump/update_system_email_template_for_notification_mail_05_11_2024_4.sql b/src/main/resources/db/dump/update_system_email_template_for_notification_mail_05_11_2024_4.sql new file mode 100644 index 00000000..1b43db33 --- /dev/null +++ b/src/main/resources/db/dump/update_system_email_template_for_notification_mail_05_11_2024_4.sql @@ -0,0 +1,16 @@ +UPDATE gepafin_schema.system_email_template +SET + subject = 'BANDO {{call_name}}- Domanda di concessione di finanziamento agevolato {{company_name}}', + html_content = ' + +
+

In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti + {{call_name}} di cui all’oggetto, la stessa è stata regolarmente acquisita ed è stata + registrata con Protocollo n. {{protocol_number}} del {{protocol_date}} + alle {{protocol_time}}.

+

Distinti Saluti,

+

{{email_signature}}

+
+ + ' +WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true; From daef61f4c9c0b31ad39fb3de6bb9a32f55a7e812 Mon Sep 17 00:00:00 2001 From: harish Date: Tue, 5 Nov 2024 19:50:49 +0530 Subject: [PATCH 6/7] Updated code --- .../tendermanagement/dao/ApplicationAmendmentRequestDao.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 4af092dc..9a369047 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -228,8 +228,6 @@ public class ApplicationAmendmentRequestDao { applicationEvaluationEntity.getAssignedApplicationsEntity().getApplication(), protocolNumber, userEntity.getHub().getId()); applicationAmendmentRequestEntity.setProtocol(protocolEntity); - applicationAmendmentRequestEntity.setIsEmail(false); - applicationAmendmentRequestEntity.setIsNotification(false); ApplicationAmendmentRequestEntity applicationAmendment = saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity); //Set Status From ed07c42787df8e373ad52a1833a3d8ed3e733e51 Mon Sep 17 00:00:00 2001 From: piyuskag Date: Tue, 5 Nov 2024 20:47:06 +0530 Subject: [PATCH 7/7] Added call_id property for file upload type validation specific to call_id. --- .../tendermanagement/dao/ApplicationDao.java | 16 +++++++++++++++- src/main/resources/application.properties | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 71d08f08..8aca183b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -32,6 +32,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationExceptio import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -110,6 +111,9 @@ public class ApplicationDao { @Value("${carlo_email}") private String carloEmail; + @Value("${call.id}") + private String callId; + @Autowired private AmazonS3Service amazonS3Service; @@ -776,7 +780,7 @@ public class ApplicationDao { MultipartFile file) { ApplicationEntity applicationEntity = validateApplication(applicationId); validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); - validateFileType(file); + validateFileTypeForCall(file, applicationEntity); ApplicationSignedDocumentEntity applicationSignedDocument = applicationSignedDocumentRepository .findByApplicationIdAndStatus(applicationId, ApplicationSignedDocumentStatusEnum.ACTIVE.getValue()); if (applicationSignedDocument != null) { @@ -796,6 +800,16 @@ public class ApplicationDao { applicationRepository.save(applicationEntity); return convertApplicationSignedDocumentToApplicationSignedDocumentResponse(applicationSignedDocument); } + + private void validateFileTypeForCall(MultipartFile file, ApplicationEntity applicationEntity) { + List validCallIds = Arrays.asList(callId.split(",")); + if (applicationEntity != null && validCallIds.contains(applicationEntity.getCall().getId().toString())) { + return; + } + validateFileType(file); + } + + private UploadFileOnAmazonS3Response uploadFileOnAmazonS3ForUserSignedDocument(MultipartFile file, Long callId, Long applicationId) { try { String s3Path = generateS3PathForDelegation(callId, applicationId); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d6198fd7..d2a1e3fb 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -23,6 +23,8 @@ spring.liquibase.enabled=true springdoc.api-docs.path=/v1/api-docs springdoc.swagger-ui.tagsSorter=alpha +#signed_document_callIds for more file type upload feature. +call.id=10 #aws configuration aws.access.key.id=AKIAVWDQWCUEOSUN4LUW