diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index eb17503f..62289ed7 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -277,7 +277,8 @@ public class ApplicationDao { for (ApplicationFormFieldEntity applicationFormFieldEntity : applicationFormFieldEntities) { Optional fileUploadContent = contentResponseBeans.stream() - .filter(contentResponseBean -> "fileupload".equals(contentResponseBean.getName()) && + .filter(contentResponseBean -> ("fileupload".equals(contentResponseBean.getName()) || + "fileselect".equals(contentResponseBean.getName())) && contentResponseBean.getId().equals(applicationFormFieldEntity.getFieldId())) .findFirst(); @@ -613,7 +614,7 @@ public class ApplicationDao { List contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); for (ContentResponseBean contentResponseBean : contentResponseBeans) { - if (Boolean.FALSE.equals(contentResponseBean.getName().equals("fileupload"))) { + if (Boolean.FALSE.equals(contentResponseBean.getName().equals("fileupload") || contentResponseBean.getName().equals("fileselect"))) { return; } } @@ -669,7 +670,7 @@ public class ApplicationDao { // List contentResponseBeans=Utils.convertJsonStringToList(formEntity.getContent(),ContentResponseBean.class); List contentResponseBeans=formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); for (ContentResponseBean contentResponseBean:contentResponseBeans){ - if(Boolean.TRUE.equals(contentResponseBean.getName().equals("fileupload"))) { + if(Boolean.TRUE.equals(contentResponseBean.getName().equals("fileupload")) || Boolean.TRUE.equals(contentResponseBean.getName().equals("fileselect"))) { if (contentResponseBean.getId().equals(applicationFormFieldRequestBean.getFieldId())) { Object fieldValueObject = applicationFormFieldRequestBean.getFieldValue(); if (fieldValueObject instanceof String) { @@ -1405,7 +1406,7 @@ public class ApplicationDao { FormEntity formEntity = applicationForm.getForm(); if (formEntity != null) { List contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); - contentResponseBeans.stream().filter(content -> "fileupload".equals(content.getName())).forEach(content -> { + contentResponseBeans.stream().filter(content -> "fileupload".equals(content.getName()) || "fileselect".equals(content.getName())).forEach(content -> { Optional formField = applicationFormFieldRepository.findByFieldIdAndApplicationFormIdAndApplicationFormApplicationId( content.getId(), applicationForm.getId(), applicationId); formField.ifPresent(field -> { diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index c495d1d5..c34b32aa 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -612,11 +612,15 @@ public class CallDao { } } if (isEndDateUpdated || isEndTimeUpdated) { + loggingUtil.logUserAction(UserActionRequest.builder() .request(request) .actionType(UserActionLogsEnum.UPDATE) .actionContext(UserActionContextEnum.UPDATE_CALL_END_DATE_AND_TIME) .build()); + + /** This code is responsible for adding a version history log for the "update call end date and time" operation **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCallEntity).newData(callEntity).build()); } // setIfUpdated(callEntity::getStartDate, callEntity::setStartDate, updateCallRequest.getStartDate()); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index 6eba956e..3b817314 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -8,8 +8,6 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -112,24 +110,31 @@ public interface ApplicationRepository extends JpaRepository findRequestedVsApprovedAmountsPerMonth( - @Param("hubId") Long hubId, - @Param("userId") Long userId, - @Param("userWithCompanyId") Long userWithCompanyId - ); + @Query(value = """ + WITH months AS ( + SELECT TO_CHAR(generate_series(CURRENT_DATE - INTERVAL '5 months', CURRENT_DATE, INTERVAL '1 month'), 'Mon') AS month_label, + EXTRACT(YEAR FROM generate_series(CURRENT_DATE - INTERVAL '5 months', CURRENT_DATE, INTERVAL '1 month')) AS year_value, + EXTRACT(MONTH FROM generate_series(CURRENT_DATE - INTERVAL '5 months', CURRENT_DATE, INTERVAL '1 month')) AS month_value + ) + SELECT m.month_label AS month, + COALESCE(SUM(a.amount_requested), 0) AS totalRequested, + COALESCE(SUM(a.amount_accepted), 0) AS totalApproved + FROM months m + LEFT JOIN {h-schema}application a ON EXTRACT(YEAR FROM a.date_accepted) = m.year_value + AND EXTRACT(MONTH FROM a.date_accepted) = m.month_value + AND a.is_deleted = false + AND a.status = 'APPROVED' + AND a.hub_id = :hubId + AND a.user_id = :userId + AND a.user_with_company_id = :userWithCompanyId + GROUP BY m.month_label, m.year_value, m.month_value + ORDER BY m.year_value, m.month_value + """, nativeQuery = true) + List findRequestedVsApprovedAmountsPerMonth(@Param("hubId") Long hubId, + @Param("userId") Long userId, + @Param("userWithCompanyId") Long userWithCompanyId); + + @Query("SELECT COUNT(a) FROM ApplicationEntity a " + "WHERE a.hubId = :hubId " + @@ -164,4 +169,5 @@ public interface ApplicationRepository extends JpaRepository(ex.getErrors(), ex.getStatus(), ex.getMessage()); } + @ResponseStatus(value = HttpStatus.NOT_FOUND) @ExceptionHandler(ResourceNotFoundException.class) public ResponseEntity> handleResourceNotFoundException(ResourceNotFoundException ex) { log.error(ex.getMessage()); @@ -178,5 +180,14 @@ public class GlobalExceptionHandler { String exceptionString = ex.getMessage().substring(ex.getMessage().indexOf("]: [") + 4, ex.getMessage().length() - 1); return Utils.convertIntoJson(exceptionString); } - + + @ResponseStatus(value = HttpStatus.NOT_FOUND) + @ExceptionHandler(NoResourceFoundException.class) + public ResponseEntity> handlNoeResourceNotFoundException(NoResourceFoundException ex) { + log.error(ex.getMessage()); +// log.error(ex.getLocalizedMessage(), ex); + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(new Response<>(null, Status.NOT_FOUND, ex.getMessage())); + } + } 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 de68936a..66bf7b3b 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 @@ -2550,5 +2550,16 @@ + + + + select + setval('gepafin_schema.form_field_id_seq', (select + max(id)+1 + from gepafin_schema.form_field), false) + + + diff --git a/src/main/resources/db/dump/update_form_field_data_03-03-2025.sql b/src/main/resources/db/dump/update_form_field_data_03-03-2025.sql new file mode 100644 index 00000000..8f377847 --- /dev/null +++ b/src/main/resources/db/dump/update_form_field_data_03-03-2025.sql @@ -0,0 +1,13 @@ + +INSERT INTO FORM_FIELD (SORT_ORDER, NAME, LABEL, DESCRIPTION, SETTINGS, VALIDATORS, CREATED_DATE, UPDATED_DATE) +VALUES +( + 23, + 'fileselect', + 'Caricamento File', + 'Per selezionare di documenti o immagini', + '[{name: "label",value: "Seleziona File"},{ name: "isDelegation", value: false }]', + '{"isRequired":false}', + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP +); \ No newline at end of file