diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 0e138227..ab5a159b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -1083,7 +1083,7 @@ public class ApplicationAmendmentRequestDao { List response = new ArrayList<>(); if (applicationAmendmentRequestEntity != null) { response = applicationAmendmentRequestEntity.stream() - .map(entity -> convertEntityToResponse(entity, false)) + .map(entity -> convertEntityToResponse(entity, true)) .collect(Collectors.toList()); } return response; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index fb2a1749..18e522dc 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -516,7 +516,6 @@ public class ApplicationDao { .filter(setting -> "isRequestedAmount".equals(setting.getName()) && Boolean.TRUE.equals(setting.getValue())) .findFirst() .ifPresent(setting -> { - Object fieldValue = applicationFormFieldRequestBean.getFieldValue(); if(fieldValue!=null) { try { @@ -1133,20 +1132,28 @@ public class ApplicationDao { // mailUtil.sendByMailGun(subject, body, List.of(defaultSystemReceiverEmail), null); // mailUtil.sendByMailGun(subject, body, List.of(gepafinEmail), null); // mailUtil.sendByMailGun(subject, body, List.of(rinaldoEmail), null); - if(validator.isProductionProfileActivated()) { - emailLogRequest.setRecipientEmails(carloEmail); -// mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null); - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest); - } - emailLogRequest.setRecipientEmails(hub.getEmail()); - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(hub.getEmail()),emailLogRequest); - List listDefaultSystemReceiverEmail = Arrays.stream(defaultSystemReceiverEmail.split(",")) +// if(Boolean.TRUE.equals(hub.getUniqueUuid().equals(defaultHubUuid))) { +// if (validator.isProductionProfileActivated()) { +// emailLogRequest.setRecipientEmails(carloEmail); +//// mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null); +// emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest); +// } +// List listDefaultSystemReceiverEmail = Arrays.stream(defaultSystemReceiverEmail.split(",")) +// .map(String::trim) +// .filter(email -> !email.isEmpty()) +// .toList(); +// +// emailLogRequest.setRecipientEmails(defaultSystemReceiverEmail); +// emailNotificationDao.sendMail(hub.getId(), subject, body, listDefaultSystemReceiverEmail, emailLogRequest); +// } + + List hubEmails = Arrays.stream(hub.getEmail().split(",")) .map(String::trim) .filter(email -> !email.isEmpty()) .toList(); - emailLogRequest.setRecipientEmails(defaultSystemReceiverEmail); - emailNotificationDao.sendMail(hub.getId(), subject, body, listDefaultSystemReceiverEmail,emailLogRequest); + emailLogRequest.setRecipientEmails(hub.getEmail()); + emailNotificationDao.sendMail(hub.getId(), subject, body,hubEmails,emailLogRequest); emailLogRequest.setRecipientEmails(rinaldoEmail); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLogRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 2c36b86c..ef01dea6 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -153,7 +153,7 @@ public class ApplicationEvaluationDao { Long hubId = application.getHubId(); HubEntity hub = hubService.valdateHub(hubId); - Long initialDays = (hub != null) ? hub.getEvaluationExpirationDays() : 0L; + Long initialDays = (hub != null) ? hub.getEvaluationExpirationDays() : 30L; entity.setApplicationId(application.getId()); entity.setAssignedApplicationsEntity(assignedApplications); @@ -165,10 +165,10 @@ public class ApplicationEvaluationDao { entity.setMotivation(req.getMotivation()); entity.setIsDeleted(false); entity.setInitialDays(initialDays); - entity.setRemainingDays(30L); + entity.setRemainingDays(initialDays); entity.setSuspendedDays(0L); entity.setStartDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); - entity.setEndDate(DateTimeUtil.DateServerToUTC(application.getSubmissionDate().plusDays(30))); + entity.setEndDate(DateTimeUtil.DateServerToUTC(application.getSubmissionDate().plusDays(initialDays))); entity.setEvaluationVersion(application.getEvaluationVersion()); entity.setStatus(ApplicationEvaluationStatusTypeEnum.OPEN.getValue()); return entity; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java index 3a527d9f..1f0446a0 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java @@ -122,10 +122,40 @@ public class CompanyDao { userWithCompanyEntity.setPec(companyRequest.getPec()); userWithCompanyEntity.setContactName(companyRequest.getContactName()); userWithCompanyEntity.setContactEmail(companyRequest.getContactEmail()); - userWithCompanyEntity.setJson(Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()) ); UserWithCompanyEntity userWithCompany = userWithCompanyRepository.save(userWithCompanyEntity); /** This code is responsible for adding a version history log for the "adding user with company" operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(userWithCompany).build()); + if (StringUtils.isEmpty(companyEntity.getJson())) { + companyEntity.setJson(Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse())); + Map vatCheckResponse = companyRequest.getVatCheckResponse(); + Map data = (Map) vatCheckResponse.get("data"); + if (data != null) { + if (data.containsKey("dettaglio")) { + Map dettaglio = (Map) data.get("dettaglio"); + if (dettaglio != null) { + if (dettaglio.containsKey("codice_ateco")) { + Object codiceAtecoObj = dettaglio.get("codice_ateco"); + String codiceAteco = (codiceAtecoObj != null) ? codiceAtecoObj.toString() : null; + + if (codiceAteco != null) { + companyEntity.setCodiceAteco(codiceAteco); + } + } + } + } + } + + companyEntity = companyRepository.save(companyEntity); + + /** This code is responsible for adding a version history log for "updating company json field" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder() + .request(request) + .actionType(VersionActionTypeEnum.INSERT) + .oldData(null) + .newData(companyEntity) + .build()); + } + return userWithCompany; } @@ -143,6 +173,7 @@ public class CompanyDao { entity.setNumberOfEmployees(request.getNumberOfEmployees()); entity.setAnnualRevenue(request.getAnnualRevenue()); entity.setHub(userEntity.getHub()); + entity.setJson(Utils.convertMapIntoJsonString(request.getVatCheckResponse())); if (request.getVatCheckResponse() != null) { Map vatCheckResponse = request.getVatCheckResponse(); Map data = (Map) vatCheckResponse.get("data"); @@ -226,10 +257,10 @@ public class CompanyDao { UserWithCompanyEntity userWithCompanyEntity = getUserWithCompany(userEntity.getId(), companyId); //cloned entity for old data UserWithCompanyEntity oldUserWithCompanyData = Utils.getClonedEntityForData(userWithCompanyEntity); - if(StringUtils.isNotBlank(companyRequest.getVatNumber())) { - String responseJson = companyRequest.getVatCheckResponse() != null ? Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()) : null; - setIfUpdated(userWithCompanyEntity::getJson, userWithCompanyEntity::setJson, responseJson); - } +// if(StringUtils.isNotBlank(companyRequest.getVatNumber())) { +// String responseJson = companyRequest.getVatCheckResponse() != null ? Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()) : null; +// setIfUpdated(companyEntity::getJson, companyEntity::setJson, responseJson); +// } setIfUpdated(userWithCompanyEntity::getPec, userWithCompanyEntity::setPec, companyRequest.getPec()); setIfUpdated(userWithCompanyEntity::getEmail, userWithCompanyEntity::setEmail, companyRequest.getEmail()); setIfUpdated(userWithCompanyEntity::getContactName, userWithCompanyEntity::setContactName, companyRequest.getContactName()); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/CompanyEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/CompanyEntity.java index 932a8758..12dc2a15 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/CompanyEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/CompanyEntity.java @@ -59,4 +59,7 @@ public class CompanyEntity extends BaseEntity{ @Column(name = "CODICE_ATECO") private String codiceAteco; + + @Column(name = "JSON") + private String json; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/UserWithCompanyEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/UserWithCompanyEntity.java index 1f067a90..65afbe76 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/UserWithCompanyEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/UserWithCompanyEntity.java @@ -35,9 +35,6 @@ public class UserWithCompanyEntity extends BaseEntity{ @Column(name = "EMAIL") private String email; - @Column(name = "JSON") - private String json; - @Column(name = "IS_DELETED") private Boolean isDeleted = false; diff --git a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java index d311547a..2cf40d4b 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java @@ -160,7 +160,7 @@ public class FieldValidator { public FieldValidator validateCustomTableValidation(String value, String customRule, String fieldId, ContentResponseBean contentResponseBean) { - if (customRule == null || value == null) { + if (customRule == null ) { return this; // No custom rule to validate } @@ -168,6 +168,7 @@ public class FieldValidator { case GepafinConstant.NON_EMPTY_TABLES: try { + checkTableValidation(value, fieldId, contentResponseBean, errors); } catch (Exception e) { throw new RuntimeException(e); @@ -186,6 +187,7 @@ public class FieldValidator { .findFirst() // Get the first matching result .orElse(null); // Default to null if no match + if (tableType!=null){ try { Object object = PdfUtils.extractRows(value);; @@ -224,31 +226,47 @@ public class FieldValidator { return; } - for (int rowIndex = 0; rowIndex < fieldValueList.size(); rowIndex++) { - Map field = fieldValueList.get(rowIndex); +// for (int rowIndex = 0; rowIndex < fieldValueList.size(); rowIndex++) { +// Map field = fieldValueList.get(rowIndex); +// +// boolean hasSingleNonNullPredefinedFalse = false; +// +// for (Map.Entry entry : stateFieldMap.entrySet()) { +// String stateKey = entry.getKey(); +// Boolean isPredefinedFalse = Boolean.FALSE.equals(entry.getValue()); +// +// if (isPredefinedFalse) { +// Object fieldValue = field.get(stateKey); +// if (fieldValue != null && !StringUtils.isEmpty(fieldValue.toString())) { +// hasSingleNonNullPredefinedFalse = true; +// break; +// } +// } +// } +// +// if (!hasSingleNonNullPredefinedFalse) { +// errors.add(MessageFormat.format( +// Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE), +// fieldId)); +// break; +// } +// +// } - boolean hasSingleNonNullPredefinedFalse = false; - for (Map.Entry entry : stateFieldMap.entrySet()) { - String stateKey = entry.getKey(); - Boolean isPredefinedFalse = Boolean.FALSE.equals(entry.getValue()); - - if (isPredefinedFalse) { - Object fieldValue = field.get(stateKey); - if (fieldValue != null && !StringUtils.isEmpty(fieldValue.toString())) { - hasSingleNonNullPredefinedFalse = true; - break; - } - } - } - - if (!hasSingleNonNullPredefinedFalse) { - errors.add(MessageFormat.format( - Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE), - fieldId)); - break; - } + boolean hasAtLeastOneNonEmptyPredefinedFalse = fieldValueList.stream() + .anyMatch(field -> stateFieldMap.entrySet().stream() + .filter(entry -> Boolean.FALSE.equals(entry.getValue())) // Check only predefined: false fields + .anyMatch(entry -> { + Object fieldValue = field.get(entry.getKey()); + return fieldValue != null && !StringUtils.isEmpty(fieldValue.toString()); + }) + ); + if (!hasAtLeastOneNonEmptyPredefinedFalse) { + errors.add(MessageFormat.format( + Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE), + fieldId)); } } catch (Exception e) { diff --git a/src/main/java/net/gepafin/tendermanagement/util/UserActionAspect.java b/src/main/java/net/gepafin/tendermanagement/util/UserActionAspect.java index 0064bb82..2262e4a0 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/UserActionAspect.java +++ b/src/main/java/net/gepafin/tendermanagement/util/UserActionAspect.java @@ -61,7 +61,7 @@ public class UserActionAspect { handleSuccessResponse((ResponseEntity) result, storedUserActionId == null ? userActionId : storedUserActionId); } } catch (Exception ex) { - log.error("Exception occurred: ", ex); +// log.error("Exception occurred: ", ex); handleError(ex, getUserActionIdFromRequest(request)); throw ex; } finally { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/errors/GlobalExceptionHandler.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/errors/GlobalExceptionHandler.java index cec3c224..8b431b54 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/errors/GlobalExceptionHandler.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/errors/GlobalExceptionHandler.java @@ -36,7 +36,7 @@ public class GlobalExceptionHandler { @ResponseBody public Response handleCustomValidationException(final CustomValidationException ex) { log.error(ex.getMessage()); - log.error(ex.getLocalizedMessage(), ex); +// log.error(ex.getLocalizedMessage(), ex); return new Response<>(null, ex.getStatus(), ex.getMessage()); } @@ -45,14 +45,14 @@ public class GlobalExceptionHandler { @ResponseBody public Response handleValidationException(final ValidationException ex) { log.error(ex.getMessage()); - log.error(ex.getLocalizedMessage(), ex); +// log.error(ex.getLocalizedMessage(), ex); return new Response<>(ex.getErrors(), ex.getStatus(), ex.getMessage()); } @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity> handleResourceNotFoundException(ResourceNotFoundException ex) { log.error(ex.getMessage()); - log.error(ex.getLocalizedMessage(), ex); +// log.error(ex.getLocalizedMessage(), ex); return ResponseEntity.status(HttpStatus.NOT_FOUND) .body(new Response<>(null, ex.getStatus(), ex.getMessage())); } @@ -71,7 +71,7 @@ public class GlobalExceptionHandler { @ResponseBody public Response handleInvalidTokenException(final Throwable ex) { log.error(ex.getMessage()); - log.error(ex.getLocalizedMessage(), ex); +// log.error(ex.getLocalizedMessage(), ex); return new Response<>(ex.getMessage(), Status.UNAUTHORIZED, Translator.toLocale("invalid_signature")); } @@ -80,7 +80,7 @@ public class GlobalExceptionHandler { @ResponseBody public Response unauthorizedAccessException(final Throwable ex) { log.error(ex.getMessage()); - log.error(ex.getLocalizedMessage(), ex); +// log.error(ex.getLocalizedMessage(), ex); return new Response<>(null, Status.UNAUTHORIZED, ex.getMessage()); } @@ -115,7 +115,7 @@ public class GlobalExceptionHandler { @ResponseBody public Response handleUnAuthorizedException(final Throwable ex) { log.error(ex.getMessage()); - log.error(ex.getLocalizedMessage(), ex); +// log.error(ex.getLocalizedMessage(), ex); return new Response<>(null, Status.VALIDATION_ERROR, Translator.toLocale("invalid_login")); } diff --git a/src/main/resources/application-production.properties b/src/main/resources/application-production.properties index cbf5dd3d..8c181965 100644 --- a/src/main/resources/application-production.properties +++ b/src/main/resources/application-production.properties @@ -37,4 +37,4 @@ spring.rabbitmq.host=172.18.0.5 spring.rabbitmq.port=61613 spring.rabbitmq.username=guest spring.rabbitmq.password=guest -spring.rabbitmq.virtual-host=/ \ No newline at end of file +spring.rabbitmq.virtual-host=/ 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 6acccf72..9a8ea984 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 @@ -2380,6 +2380,17 @@ path="db/dump/update_system_email_template_application_rejected_04_02_2025.sql"/> + + + + + + + + + + diff --git a/src/main/resources/db/dump/insert_json_column_in_company_data_06_02_2025.sql b/src/main/resources/db/dump/insert_json_column_in_company_data_06_02_2025.sql new file mode 100644 index 00000000..42c00d43 --- /dev/null +++ b/src/main/resources/db/dump/insert_json_column_in_company_data_06_02_2025.sql @@ -0,0 +1,18 @@ +UPDATE COMPANY C +SET JSON = ( + SELECT U.JSON + FROM USER_WITH_COMPANY U + WHERE U.COMPANY_ID = C.ID + AND U.IS_DELETED = false + AND U.JSON IS NOT NULL + AND U.JSON <> '' + ORDER BY U.ID ASC + LIMIT 1 +) +WHERE EXISTS ( + SELECT 1 FROM USER_WITH_COMPANY U + WHERE U.COMPANY_ID = C.ID + AND U.IS_DELETED = false + AND U.JSON IS NOT NULL + AND U.JSON <> '' +);