Merge branch 'develop' of https://github.com/Kitzanos/GEPAFIN-BE into develop

This commit is contained in:
nisha
2024-11-05 15:03:34 +05:30
9 changed files with 228 additions and 46 deletions

View File

@@ -22,8 +22,8 @@ import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.service.*;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.Validator;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum; import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
import net.gepafin.tendermanagement.util.MailUtil;
import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
@@ -33,7 +33,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
@@ -96,6 +95,9 @@ public class ApplicationAmendmentRequestDao {
// @Autowired // @Autowired
// private MailUtil mailUtil; // private MailUtil mailUtil;
@Autowired
private Validator validator;
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) { public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) {
log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId); log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId);
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId); ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId);
@@ -338,7 +340,14 @@ public class ApplicationAmendmentRequestDao {
return response; return response;
} }
public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(Long userId) { public List<ApplicationAmendmentRequestResponse> 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));
}
if(userId != null) {
validator.validatePreInstructor(request, userId);
}
Specification<ApplicationAmendmentRequestEntity> spec = search(userId); Specification<ApplicationAmendmentRequestEntity> spec = search(userId);
List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntities = List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntities =
applicationAmendmentRequestRepository.findAll(spec); applicationAmendmentRequestRepository.findAll(spec);
@@ -369,8 +378,8 @@ public class ApplicationAmendmentRequestDao {
ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id); ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id);
setIfUpdated(existingApplicationAmendment::getNote, existingApplicationAmendment::setNote, updateRequest.getNote()); setIfUpdated(existingApplicationAmendment::getNote, existingApplicationAmendment::setNote, updateRequest.getNote());
if (updateRequest.getUpdatedFormFields() != null) { if (updateRequest.getApplicationFormFields() != null) {
updateApplicationFormFields(existingApplicationAmendment, updateRequest.getUpdatedFormFields()); updateApplicationFormFields(existingApplicationAmendment, updateRequest.getApplicationFormFields());
} }
existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
@@ -380,27 +389,52 @@ public class ApplicationAmendmentRequestDao {
return response; return response;
} }
private void updateApplicationFormFields(ApplicationAmendmentRequestEntity applicationAmendment, ApplicationFormFieldRequestBean updatedFormField) { private void updateApplicationFormFields(ApplicationAmendmentRequestEntity applicationAmendment, ApplicationFormFieldRequestBean updatedFormField) {
if (updatedFormField.getFieldValue() == null || "".equals(updatedFormField.getFieldValue().toString().trim())) {
List<ApplicationFormEntity> applicationForms = applicationFormRepository.findByApplicationId(applicationAmendment.getApplicationId());
boolean fieldUpdated = false;
for (ApplicationFormEntity applicationForm : applicationForms) {
Optional<ApplicationFormFieldEntity> formFieldEntityOptional = applicationFormFieldRepository
.findByApplicationFormIdAndFieldId(applicationForm.getId(), updatedFormField.getFieldId());
if (formFieldEntityOptional.isPresent()) {
ApplicationFormFieldEntity formEntity = formFieldEntityOptional.get();
formEntity.setFieldValue(null); // Set field value to null
applicationFormFieldRepository.save(formEntity);
log.info("Set field value to null for application ID {} and field ID {}", applicationAmendment.getApplicationId(), updatedFormField.getFieldId());
fieldUpdated = true;
break;
}
}
if (!fieldUpdated) {
throw new CustomValidationException(Status.NOT_FOUND, "No ApplicationFormField found for application ID " + applicationAmendment.getApplicationId() + " and field ID " + updatedFormField.getFieldId());
}
return;
}
List<String> documentIds; List<String> documentIds;
// Check if fieldValue is an array if (updatedFormField.getFieldValue() instanceof String && updatedFormField.getFieldValue() != null) {
if (updatedFormField.getFieldValue() instanceof List) { documentIds = Arrays.asList(((String) updatedFormField.getFieldValue()).split(","));
documentIds = ((List<?>) updatedFormField.getFieldValue()).stream()
.map(Object::toString)
.collect(Collectors.toList());
} else { } else {
log.warn("Expected fieldValue as a list but got: {}", updatedFormField.getFieldValue()); log.warn("Expected fieldValue as a comma-separated String but got: {}", updatedFormField.getFieldValue());
return; return;
} }
List<String> validDocumentIds = new ArrayList<>(); List<String> validDocumentIds = new ArrayList<>();
for (String documentId : documentIds) { for (String documentId : documentIds) {
DocumentEntity documentEntity = documentService.validateDocument(Long.parseLong(documentId)); try {
if (documentEntity != null) { DocumentEntity documentEntity = documentService.validateDocument(Long.parseLong(documentId.trim()));
validDocumentIds.add(documentId); if (documentEntity != null) {
} else { validDocumentIds.add(documentId.trim());
log.warn("Document with ID {} does not exist. Skipping this ID.", documentId); } else {
log.warn("Document with ID {} does not exist. Skipping this ID.", documentId);
}
} catch (NumberFormatException e) {
log.error("Invalid document ID format: {}. Error: {}", documentId, e.getMessage());
} }
} }
@@ -425,8 +459,7 @@ public class ApplicationAmendmentRequestDao {
} }
if (!fieldUpdated) { if (!fieldUpdated) {
log.warn("No ApplicationFormFieldEntity found for application ID {} and field ID {}. Skipping update.", throw new CustomValidationException(Status.NOT_FOUND,"No ApplicationFormField found for application ID {} and field ID {}. Skipping update.");
applicationAmendment.getApplicationId(), updatedFormField.getFieldId());
} }
} else { } else {
log.warn("No valid document IDs found for update. Skipping field ID {}", updatedFormField.getFieldId()); log.warn("No valid document IDs found for update. Skipping field ID {}", updatedFormField.getFieldId());
@@ -434,8 +467,9 @@ public class ApplicationAmendmentRequestDao {
} }
public List<ApplicationAmendmentRequestResponse> getAllAmendmentRequestByBeneficiaryId(Long beneficiaryId) {
public List<ApplicationAmendmentRequestResponse> getAllAmendmentRequestByBeneficiaryId(Long beneficiaryId) {
UserEntity userEntity = userService.validateUser(beneficiaryId);
List<ApplicationAmendmentRequestEntity> entities = List<ApplicationAmendmentRequestEntity> entities =
applicationAmendmentRequestRepository.findByUserId(beneficiaryId); applicationAmendmentRequestRepository.findByUserId(beneficiaryId);
@@ -508,8 +542,10 @@ public class ApplicationAmendmentRequestDao {
String subject = prepareSubject(emailTemplate, amendment, beneficiaryUser); String subject = prepareSubject(emailTemplate, amendment, beneficiaryUser);
String body = prepareBody(emailTemplate, amendment, beneficiaryUser); String body = prepareBody(emailTemplate, amendment, beneficiaryUser);
String email = beneficiaryUser.getEmail(); 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(email));
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(companyEmail));
// mailUtil.sendByMailGun(subject,body,List.of(email),null); // mailUtil.sendByMailGun(subject,body,List.of(email),null);
} else { } else {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG)); throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG));

View File

@@ -97,6 +97,7 @@ public class DocumentDao {
private Long resolveSourceId(Long sourceId, DocumentSourceTypeEnum sourceType) { private Long resolveSourceId(Long sourceId, DocumentSourceTypeEnum sourceType) {
if (sourceType == DocumentSourceTypeEnum.CALL) { if (sourceType == DocumentSourceTypeEnum.CALL) {
CallEntity callEntity = callService.validateCall(sourceId); CallEntity callEntity = callService.validateCall(sourceId);
callDao.validateUpdate(callEntity);
return callEntity.getId(); return callEntity.getId();
} }
// else if (sourceType == SourceTypeEnum.APPLICATION) { // else if (sourceType == SourceTypeEnum.APPLICATION) {

View File

@@ -5,5 +5,5 @@ import lombok.Data;
@Data @Data
public class ApplicationAmendmentRequestBean { public class ApplicationAmendmentRequestBean {
private String note; private String note;
private ApplicationFormFieldRequestBean updatedFormFields; private ApplicationFormFieldRequestBean applicationFormFields;
} }

View File

@@ -29,15 +29,15 @@ public interface ApplicationRepository extends JpaRepository<ApplicationEntity,
public Optional<ApplicationEntity> findByIdAndUserIdAndCallIdAndIsDeletedFalse(Long applicationId, Long userId, public Optional<ApplicationEntity> findByIdAndUserIdAndCallIdAndIsDeletedFalse(Long applicationId, Long userId,
Long callId); 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); Long countSubmittedApplicationsByUserId(@Param("userId") Long userId, @Param("companyId") Long companyId);
List<ApplicationEntity> findByCompanyIdAndUserIdAndIsDeletedFalse(Long companyId,Long userId); List<ApplicationEntity> 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); 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); public Long countDraftApplicationsByHubId(@Param("hubId") Long hubId);
@Query("SELECT a.call.id FROM ApplicationEntity a WHERE a.id = :id") @Query("SELECT a.call.id FROM ApplicationEntity a WHERE a.id = :id")

View File

@@ -8,7 +8,6 @@ import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
@@ -62,7 +61,7 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm
@Override @Override
public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) {
return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest(userId); return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest(request,userId);
} }
@Override @Override

View File

@@ -181,7 +181,7 @@ public interface ApplicationAmendmentRequestApi {
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })) @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<Response<Void>> sendReminderEmail(HttpServletRequest request, ResponseEntity<Response<Void>> sendReminderEmail(HttpServletRequest request,
@Parameter( required = true) @Parameter( required = true)
@PathVariable(value = "amendmentId") Long amendmentId); @PathVariable(value = "amendmentId") Long amendmentId);

View File

@@ -1702,7 +1702,7 @@
<where>UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE'</where> <where>UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE'</where>
</update> </update>
</changeSet> </changeSet>
<changeSet id="30-10-2024_4" author="Harish Bagora"> <changeSet id="30-10-2024_4" author="Harish Bagora">
<sql dbms="postgresql">select <sql dbms="postgresql">select
setval('gepafin_schema.system_email_template_id_seq', (select setval('gepafin_schema.system_email_template_id_seq', (select
max(id)+1 max(id)+1
@@ -1710,5 +1710,10 @@
</sql> </sql>
<sqlFile dbms="postgresql" <sqlFile dbms="postgresql"
path="db/dump/insert_system_email_template_for_sollecito_30_10_2024.sql"/> path="db/dump/insert_system_email_template_for_sollecito_30_10_2024.sql"/>
</changeSet> </changeSet>
<changeSet id="04-11-2024_1" author="Piyush">
<sqlFile dbms="postgresql"
path="db/dump/update_system_email_template_for_notification_mail_04_11_2024_1.sql"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -1,5 +1,14 @@
UPDATE gepafin_schema.system_email_template INSERT INTO gepafin_schema.system_email_template
SET html_content = '<html> (
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',
'<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;"> <body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;"> <div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p><strong>RICHIESTA INTEGRAZIONE DOCUMENTALE</strong></p> <p><strong>RICHIESTA INTEGRAZIONE DOCUMENTALE</strong></p>
@@ -22,11 +31,27 @@ SET html_content = '<html>
<p><strong>{{email_signature}}</strong></p> <p><strong>{{email_signature}}</strong></p>
</div> </div>
</body> </body>
</html>' </html>',
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 -- Insert for INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE
SET html_content = '<html> 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',
'<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;"> <body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;"> <div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p><strong>Comunicazione di non ammissibilità per mancata risposta a richiesta integrazione documentale</strong></p> <p><strong>Comunicazione di non ammissibilità per mancata risposta a richiesta integrazione documentale</strong></p>
@@ -40,11 +65,27 @@ SET html_content = '<html>
<p><strong>{{email_signature}}</strong></p> <p><strong>{{email_signature}}</strong></p>
</div> </div>
</body> </body>
</html>' </html>',
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 -- Insert for ADMISSIBILITY_NOTIFICATION
SET html_content = '<html> 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',
'<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;"> <body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;"> <div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p>Buongiorno,</p> <p>Buongiorno,</p>
@@ -56,11 +97,27 @@ SET html_content = '<html>
<p><strong>{{email_signature}}</strong></p> <p><strong>{{email_signature}}</strong></p>
</div> </div>
</body> </body>
</html>' </html>',
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 -- Insert for INADMISSIBILITY_NOTIFICATION
SET html_content = '<html> 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',
'<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;"> <body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;"> <div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p>Buongiorno,</p> <p>Buongiorno,</p>
@@ -74,5 +131,11 @@ SET html_content = '<html>
<p><strong>{{email_signature}}</strong></p> <p><strong>{{email_signature}}</strong></p>
</div> </div>
</body> </body>
</html>' </html>',
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'
);

View File

@@ -0,0 +1,78 @@
UPDATE gepafin_schema.system_email_template
SET html_content = '<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p><strong>RICHIESTA INTEGRAZIONE DOCUMENTALE</strong></p>
<p>Buongiorno,</p>
<p>In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti
<strong>{{call_name}}</strong> di cui al <strong>Protocollo n. {{protocol_number}} del
{{protocol_date}} e {{protocol_time}}</strong>, alla luce dellattività istruttoria svolta,
segnaliamo quanto segue:</p>
<ul>
<li>{{form_dataInput}}</li>
</ul>
<p>{{note}}</p>
<p>Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola allinterno dello sportello
online <a href="{{platform_link}}">{{platform_link}}</a> che inviandola a mezzo PEC allindirizzo
{{legal_mail}} entro e <strong>non oltre 10 giorni</strong> 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.</p>
<p>Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito
dellinvio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.</p>
<p>Distinti Saluti,</p>
<p><strong>{{email_signature}}</strong></p>
</div>
</body>
</html>'
WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true;
UPDATE gepafin_schema.system_email_template
SET html_content = '<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p><strong>Comunicazione di non ammissibilità per mancata risposta a richiesta integrazione documentale</strong></p>
<p>Buongiorno,</p>
<p>Con posta elettronica certificata del <strong>{{date_time_emailSend}}</strong>, vi abbiamo comunicato che i documenti richiesti
dal Gestore sarebbero dovuti pervenire entro <strong>10 giorni</strong> 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.</p>
<p>È possibile presentare ricorso tramite modello disponibile nello sportello online
<a href="{{platform_link}}">{{platform_link}}</a> entro <strong>10 giorni</strong> dalla ricezione di questa comunicazione.</p>
<p>Distinti Saluti,</p>
<p><strong>{{email_signature}}</strong></p>
</div>
</body>
</html>'
WHERE "type" = 'INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE' AND "system" = true;
UPDATE gepafin_schema.system_email_template
SET html_content = '<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p>Buongiorno,</p>
<p>In riferimento alla domanda di concessione di Finanziamento agevolato “<strong>{{call_name}}</strong>” di cui al
<strong>Protocollo n. {{protocol_number}} del {{protocol_date}} alle {{protocol_time}}</strong>, listruttoria di ammissibilità
è stata completata con esito positivo.</p>
<p>Seguirà una comunicazione relativa alla valutazione tecnica ed economico-finanziaria ai fini della valutazione finale.</p>
<p>Distinti Saluti,</p>
<p><strong>{{email_signature}}</strong></p>
</div>
</body>
</html>'
WHERE "type" = 'ADMISSIBILITY_NOTIFICATION' AND "system" = true;
UPDATE gepafin_schema.system_email_template
SET html_content = '<html>
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
<p>Buongiorno,</p>
<p>In riferimento alla domanda di concessione di Finanziamento agevolato “<strong>{{call_name}}</strong>” di cui al
<strong>Protocollo n. {{protocol_number}} del {{protocol_date}} alle {{protocol_time}}</strong>,
l''istruttoria di ammissibilità è stata completata con esito negativo.</p>
<p>Motivazioni: <strong>{{form_text}}</strong></p>
<p>È possibile presentare ricorso tramite modello disponibile nello sportello online
<a href="{{platform_link}}">{{platform_link}}</a> entro <strong>10 giorni</strong> dalla ricezione di questa comunicazione.</p>
<p>Distinti Saluti,</p>
<p><strong>{{email_signature}}</strong></p>
</div>
</body>
</html>'
WHERE "type" = 'INADMISSIBILITY_NOTIFICATION' AND "system" = true;