From f379b954ed796b7d2d59a221bb09b17a6a2af374 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Thu, 10 Apr 2025 14:55:08 +0530 Subject: [PATCH 1/6] Fixed automatically publish call issue --- .../java/net/gepafin/tendermanagement/dao/CallDao.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 7b43dc3f..94c586b9 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -598,8 +598,8 @@ public class CallDao { if (!requestEndDate.equals(storedEndDate)) { // Check if dates are different setIfUpdated(callEntity::getEndDate, callEntity::setEndDate, dates.get(1)); - callEntity.setStatus(CallStatusEnum.PUBLISH.getValue()); - callRepository.save(callEntity); +// callEntity.setStatus(CallStatusEnum.PUBLISH.getValue()); +// callRepository.save(callEntity); isEndDateUpdated = true; } } @@ -611,13 +611,13 @@ public class CallDao { if (!requestEndTime.equals(storedEndTime)) { setIfUpdated(callEntity::getEndTime, callEntity::setEndTime, DateTimeUtil.parseTime(updateCallRequest.getEndTime())); - callEntity.setStatus(CallStatusEnum.PUBLISH.getValue()); - callRepository.save(callEntity); +// callEntity.setStatus(CallStatusEnum.PUBLISH.getValue()); +// callRepository.save(callEntity); isEndTimeUpdated = true; } } if (isEndDateUpdated || isEndTimeUpdated) { - + callRepository.save(callEntity); loggingUtil.logUserAction(UserActionRequest.builder() .request(request) .actionType(UserActionLogsEnum.UPDATE) From c34b63b3211ae4264dcead7b1cfaf350f460c50b Mon Sep 17 00:00:00 2001 From: piyushkag Date: Thu, 10 Apr 2025 18:07:21 +0530 Subject: [PATCH 2/6] Done Ticket GEPAFINBE-207 Updated the API to update the call status from Publish status to Draft. --- .../constants/GepafinConstant.java | 1 + .../gepafin/tendermanagement/dao/CallDao.java | 52 ++++++++++--------- .../repositories/ApplicationRepository.java | 1 + src/main/resources/message_en.properties | 3 +- src/main/resources/message_it.properties | 3 +- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 9ccfe7e5..edc85e28 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -101,6 +101,7 @@ public class GepafinConstant { public static final String STATUS_SAME_ERROR = "status.same.error"; public static final String INVALID_STATUS_CHANGE_FROM_DRAFT = "invalid.status.change.from.draft"; public static final String INVALID_STATUS_CHANGE_FROM_PUBLISH = "invalid.status.change.from.publish"; + public static final String INVALID_STATUS_CHANGE_FROM_PUBLISH_TO_DRAFT = "invalid.status.change.from.publish.to.draft"; public static final String STATUS_CANNOT_BE_CHANGED = "status.cannot.be.changed"; public static final String PUBLISHED_CALL_NOT_UPDATE = "published.call.not.update"; public static final String INVALID_USER = "invalid_user"; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 94c586b9..fa02eac1 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -124,6 +124,9 @@ public class CallDao { @Autowired private EvaluationFormDao evalualtionFormDao; + @Autowired + private ApplicationRepository applicationRepository; + public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, UserEntity userEntity) { createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); CallEntity callEntity = convertToCallEntity(createCallRequest, userEntity); @@ -902,7 +905,7 @@ public class CallDao { public CallResponse updateCallStatus(CallEntity callEntity, CallStatusEnum statusReq) { CallEntity oldCallEntity = Utils.getClonedEntityForData(callEntity); CallStatusEnum currentStatus = CallStatusEnum.valueOf(callEntity.getStatus()); - validateStatusChange(currentStatus, statusReq); + validateStatusChange(currentStatus, statusReq, callEntity.getId()); callEntity.setStatus(statusReq.getValue()); callEntity = callRepository.save(callEntity); @@ -922,36 +925,37 @@ public class CallDao { return convertToCallResponseBean(callEntity); } - private void validateStatusChange(CallStatusEnum currentStatus, CallStatusEnum newStatus) { + private void validateStatusChange(CallStatusEnum currentStatus, CallStatusEnum newStatus, Long callId) { + if (currentStatus == newStatus) { - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.STATUS_SAME_ERROR)); + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.STATUS_SAME_ERROR)); } - switch (currentStatus) { - case DRAFT: - if (newStatus == CallStatusEnum.READY_TO_PUBLISH || newStatus == CallStatusEnum.PUBLISH) { - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.INVALID_STATUS_CHANGE_FROM_DRAFT)); - } - break; - case PUBLISH: - if (newStatus == CallStatusEnum.READY_TO_PUBLISH || newStatus == CallStatusEnum.DRAFT) { - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.INVALID_STATUS_CHANGE_FROM_PUBLISH)); - } - break; + case DRAFT: + if (newStatus == CallStatusEnum.READY_TO_PUBLISH || newStatus == CallStatusEnum.PUBLISH) { + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.INVALID_STATUS_CHANGE_FROM_DRAFT)); + } + break; - case EXPIRED: - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.STATUS_CANNOT_BE_CHANGED)); - case READY_TO_PUBLISH: - break; - default: - break; + case PUBLISH: + if (newStatus == CallStatusEnum.READY_TO_PUBLISH) { + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.INVALID_STATUS_CHANGE_FROM_PUBLISH)); + } + if (newStatus == CallStatusEnum.DRAFT && Boolean.TRUE.equals(applicationRepository.existsByCallId(callId))) { + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.INVALID_STATUS_CHANGE_FROM_PUBLISH_TO_DRAFT)); + } + break; + case EXPIRED: + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.STATUS_CANNOT_BE_CHANGED)); + + case READY_TO_PUBLISH: + break; + default: + break; } } + public CallEntity validatePublishedCall(Long callId, Long hubId) { CallEntity callEntity= callRepository .findByIdAndStatusAndHubId(callId, CallStatusEnum.PUBLISH.getValue(), hubId); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index b4fdfcaf..b5cf7fb9 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -177,4 +177,5 @@ public interface ApplicationRepository extends JpaRepository Date: Fri, 11 Apr 2025 12:19:33 +0530 Subject: [PATCH 3/6] Fixed the message issue in response. --- src/main/resources/message_it.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index cbad9fd9..6e2352b7 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -61,8 +61,7 @@ invalid.status.change.from.draft=Lo stato non pu? essere cambiato in READY_TO_PU status.cannot.be.changed=Lo stato non pu? essere cambiato. published.call.not.update=Il bando pubblicato non pu? essere aggiornato. invalid.status.change.from.publish=Lo stato non pu? essere modificato in READY_TO_PUBLISH da PUBLISH. -invalid.status.change.from.publish.to.draft=Lo stato non può essere modificato da PUBLISH a DRAFT poiché sono già state create applicazioni per questa CALL. - +invalid.status.change.from.publish.to.draft=Lo stato non pu essere modificato da PUBLISH a DRAFT poich sono gi state create applicazioni per questa CALL. # Login-related messages login.successfully=Accesso effettuato con successo. From e2c19ccafb99bee72f6977fbbd82e2dbb0855664 Mon Sep 17 00:00:00 2001 From: Piyush Date: Fri, 11 Apr 2025 12:21:25 +0530 Subject: [PATCH 4/6] Done Ticket GEPAFINBE-204 --- .../constants/GepafinConstant.java | 5 + .../dao/AssignedApplicationsDao.java | 110 +++++++++++++----- .../entities/AssignedApplicationsView.java | 61 ++++++++++ .../entities/AssignedApplicationsViewId.java | 17 +++ .../AssignedApplicationsViewRepository.java | 9 ++ .../db/changelog/db.changelog-1.0.0.xml | 6 + .../dump/create_assigned_application_view.sql | 52 +++++++++ 7 files changed, 230 insertions(+), 30 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsView.java create mode 100644 src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsViewId.java create mode 100644 src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsViewRepository.java create mode 100644 src/main/resources/db/dump/create_assigned_application_view.sql diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 9ccfe7e5..4371d92f 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -510,6 +510,11 @@ public class GepafinConstant { public static final String INVALID_USER_ID="invalid.user"; public static final String COMPANY_NAME="companyName"; + public static final String APPOINTMENT_ID="appointmentId"; + public static final String APPLICATION_STATUS="applicationStatus"; + + + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index 95e808a8..65035e47 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -20,6 +20,7 @@ import net.gepafin.tendermanagement.model.util.SortBy; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; +import net.gepafin.tendermanagement.repositories.AssignedApplicationsViewRepository; import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.CompanyService; import net.gepafin.tendermanagement.service.UserService; @@ -77,6 +78,9 @@ public class AssignedApplicationsDao { @Autowired private ApplicationEvaluationRepository applicationEvaluationRepository; + @Autowired + private AssignedApplicationsViewRepository assignedApplicationsViewRepository; + public AssignedApplicationsResponse createAssignedApplications(Long applicationId, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest) { log.info("Assigning application to pre-Instructor with details: {}", applicationId, userId); @@ -310,14 +314,13 @@ public class AssignedApplicationsDao { if (pageNo == null || pageNo <= 0) { pageNo = GepafinConstant.DEFAULT_PAGE; } - Specification spec = searchByPagination( assignedApplicationPageableRequestBean, user,userId); - Page entityPage = assignedApplicationsRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); + Specification spec = searchByPagination( assignedApplicationPageableRequestBean, user,userId); + Page entityPage = assignedApplicationsViewRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); // Prepare the response - List assignedApplicationsResponses = entityPage.getContent().stream() .map(application -> { - AssignedApplicationsResponse response = convertEntityToResponse(application); + AssignedApplicationsResponse response = getAssignedApplicationResponseByView(application); return response; }) .collect(Collectors.toList()); @@ -334,7 +337,7 @@ public class AssignedApplicationsDao { return pageableResponseBean; } - public Specification searchByPagination(AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean, UserEntity userEntity,Long userId) { + public Specification searchByPagination(AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean, UserEntity userEntity,Long userId) { return (root, query, criteriaBuilder) -> { List predicates = getPredicates(assignedApplicationPageableRequestBean, criteriaBuilder, root, userEntity,userId); @@ -350,30 +353,35 @@ public class AssignedApplicationsDao { sortBy.setSortDesc(assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc()); } } - Path sortPath; - Join applicationJoin = root.join(GepafinConstant.APPLICATION, JoinType.LEFT); +// Path sortPath; +// Join applicationJoin = root.join(GepafinConstant.APPLICATION, JoinType.LEFT); +// +// if (GepafinConstant.APPLICATION_ID.equals(sortBy.getColumnName())) { +// sortPath = root.join(GepafinConstant.APPLICATION, JoinType.LEFT).get(GepafinConstant.ID); // Join ApplicationEntity and sort by application.id +// } +// else if (GepafinConstant.PROTOCOL_NUMBER.equals(sortBy.getColumnName())) { +// Join protocolJoin = applicationJoin.join(GepafinConstant.PROTOCOL, JoinType.LEFT); +// sortPath = protocolJoin.get(GepafinConstant.PROTOCOL_NUMBER); +// } +// else { +// sortPath = root.get(sortBy.getColumnName()); // Sorting by a field in AmendmentEntity +// } +// query.orderBy(criteriaBuilder.desc(sortPath)); +// if (Boolean.FALSE.equals(sortBy.getSortDesc())) { +// query.orderBy(criteriaBuilder.asc(sortPath)); +// } +// return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction(); + + Path sortPath = root.get(sortBy.getColumnName()); // All fields are accessible directly in the view + query.orderBy(sortBy.getSortDesc() ? criteriaBuilder.desc(sortPath) : criteriaBuilder.asc(sortPath)); - if (GepafinConstant.APPLICATION_ID.equals(sortBy.getColumnName())) { - sortPath = root.join(GepafinConstant.APPLICATION, JoinType.LEFT).get(GepafinConstant.ID); // Join ApplicationEntity and sort by application.id - } - else if (GepafinConstant.PROTOCOL_NUMBER.equals(sortBy.getColumnName())) { - Join protocolJoin = applicationJoin.join(GepafinConstant.PROTOCOL, JoinType.LEFT); - sortPath = protocolJoin.get(GepafinConstant.PROTOCOL_NUMBER); - } - else { - sortPath = root.get(sortBy.getColumnName()); // Sorting by a field in AmendmentEntity - } - query.orderBy(criteriaBuilder.desc(sortPath)); - if (Boolean.FALSE.equals(sortBy.getSortDesc())) { - query.orderBy(criteriaBuilder.asc(sortPath)); - } return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction(); }; } private List getPredicates(AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean, - CriteriaBuilder criteriaBuilder, Root root, UserEntity userEntity,Long userId) { + CriteriaBuilder criteriaBuilder, Root root, UserEntity userEntity,Long userId) { Integer year = null; String search = null; @@ -404,12 +412,35 @@ public class AssignedApplicationsDao { } // Search in `title` and `message` (if search term is provided) - if (search != null && !search.isEmpty()) { - Predicate titlePredicate = criteriaBuilder.like( - criteriaBuilder.upper(root.get(GepafinConstant.NOTE)), - "%" + search.toUpperCase() + "%" - ); - predicates.add(criteriaBuilder.or(titlePredicate)); +// if (search != null && !search.isEmpty()) { +// Predicate titlePredicate = criteriaBuilder.like( +// criteriaBuilder.upper(root.get(GepafinConstant.NOTE)), +// "%" + search.toUpperCase() + "%" +// ); +// predicates.add(criteriaBuilder.or(titlePredicate)); +// } + + if (search != null && !search.trim().isEmpty()) { + String pattern = "%" + search.toUpperCase() + "%"; + List searchPredicates = new ArrayList<>(); + + searchPredicates.add(criteriaBuilder.like(criteriaBuilder.upper(root.get(GepafinConstant.CALL_NAME)), pattern)); + searchPredicates.add(criteriaBuilder.like(criteriaBuilder.upper(root.get(GepafinConstant.COMPANY_NAME)), pattern)); + searchPredicates.add(criteriaBuilder.like(criteriaBuilder.upper(root.get(GepafinConstant.STATUS)), pattern)); + searchPredicates.add(criteriaBuilder.like(criteriaBuilder.upper(root.get(GepafinConstant.NDG_STRING)), pattern)); + searchPredicates.add(criteriaBuilder.like(criteriaBuilder.upper(root.get(GepafinConstant.APPOINTMENT_ID)), pattern)); + searchPredicates.add(criteriaBuilder.like(criteriaBuilder.upper(root.get(GepafinConstant.APPLICATION_STATUS)), pattern)); + + // Convert numeric fields to string for search (optional and DB-specific; otherwise exact match) + try { + Long searchLong = Long.parseLong(search); + searchPredicates.add(criteriaBuilder.equal(root.get(GepafinConstant.APPLICATION_ID), searchLong)); + searchPredicates.add(criteriaBuilder.equal(root.get(GepafinConstant.PROTOCOL_NUMBER), searchLong)); + } catch (NumberFormatException ignored) { + // Ignore if search is not a number + } + + predicates.add(criteriaBuilder.or(searchPredicates.toArray(new Predicate[0]))); } // Filter by `status` (if status list is provided) @@ -421,12 +452,31 @@ public class AssignedApplicationsDao { } predicates.add(criteriaBuilder.isFalse(root.get(GepafinConstant.IS_DELETED))); - applyFilters(root, criteriaBuilder, predicates, filters); - + Utils.applyFiltersByPagination(root, criteriaBuilder, predicates, filters); return predicates; } + + private AssignedApplicationsResponse getAssignedApplicationResponseByView(AssignedApplicationsView view) { + AssignedApplicationsResponse response = new AssignedApplicationsResponse(); + response.setId(view.getId()); + response.setUserId(view.getUserId()); + response.setStatus(AssignedApplicationEnum.valueOf(view.getStatus())); + response.setApplicationId(view.getApplicationId()); + response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(view.getApplicationStatus())); + response.setSubmissionDate(view.getSubmissionDate()); + response.setEvaluationEndDate(view.getEvaluationEndDate()); + response.setNdg(view.getNdg()); + response.setAppointmentId(view.getAppointmentId()); + response.setProtocolNumber(view.getProtocolNumber()); + response.setCallName(view.getCallName()); + response.setCompanyName(view.getCompanyName()); + response.setCreatedDate(view.getCreatedDate()); + response.setUpdatedDate(view.getUpdatedDate()); + return response; + } + public AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) { AssignedApplicationsEntity assignedApplication = validateAssignedApplication(assignedApplicationId); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsView.java b/src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsView.java new file mode 100644 index 00000000..a446daff --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsView.java @@ -0,0 +1,61 @@ +package net.gepafin.tendermanagement.entities; + +import jakarta.persistence.*; +import lombok.Data; +import org.hibernate.annotations.Immutable; + +import java.time.LocalDateTime; + +@Entity +@Immutable +@Data +@Table(name = "assigned_applications_view") +@IdClass(AssignedApplicationsViewId.class) +public class AssignedApplicationsView{ + + @Id + @Column(name = "ID") + private Long id; + + @Column(name = "APPLICATION_ID") + private Long applicationId; + + @Column(name = "USER_ID") + private Long userId; + + @Column(name = "PROTOCOL_NUMBER") + private Long protocolNumber; + + @Column(name = "CALL_NAME") + private String callName; + + @Column(name = "COMPANY_NAME") + private String companyName; + + @Column(name = "STATUS") + private String status; + + @Column(name = "NDG") + private String ndg; + + @Column(name = "APPOINTMENT_ID") + private String appointmentId; + + @Column(name = "APPLICATION_STATUS") + private String applicationStatus; + + @Column(name = "SUBMISSION_DATE") + private LocalDateTime submissionDate; + + @Column(name = "EVALUATION_END_DATE") + private LocalDateTime evaluationEndDate; + + @Column(name = "CREATED_DATE") + private LocalDateTime createdDate; + + @Column(name = "UPDATED_DATE") + private LocalDateTime updatedDate; + + @Column(name = "IS_DELETED") + private Boolean isDeleted; +} diff --git a/src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsViewId.java b/src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsViewId.java new file mode 100644 index 00000000..99c9609c --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/entities/AssignedApplicationsViewId.java @@ -0,0 +1,17 @@ +package net.gepafin.tendermanagement.entities; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class AssignedApplicationsViewId implements Serializable{ + private static final long serialVersionUID = 1L; + private Long id; + + public AssignedApplicationsViewId() {} + + public AssignedApplicationsViewId(Long id) { + this.id = id; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsViewRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsViewRepository.java new file mode 100644 index 00000000..231c7d88 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/repositories/AssignedApplicationsViewRepository.java @@ -0,0 +1,9 @@ +package net.gepafin.tendermanagement.repositories; + +import net.gepafin.tendermanagement.entities.AssignedApplicationsView; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +public interface AssignedApplicationsViewRepository extends JpaRepository , JpaSpecificationExecutor { + +} 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 f4e71555..648d76e8 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 @@ -2722,4 +2722,10 @@ + + + + + diff --git a/src/main/resources/db/dump/create_assigned_application_view.sql b/src/main/resources/db/dump/create_assigned_application_view.sql new file mode 100644 index 00000000..f1900b37 --- /dev/null +++ b/src/main/resources/db/dump/create_assigned_application_view.sql @@ -0,0 +1,52 @@ +CREATE OR REPLACE VIEW assigned_applications_view AS +SELECT + -- From assigned_applications + aa.id AS id, + aa.user_id AS user_id, + aa.status AS status, + aa.created_date AS created_date, + aa.updated_date AS updated_date, + aa.is_deleted AS is_deleted, + + -- From application + a.id AS application_id, + a.status AS application_status, + a.submission_date AS submission_date, + ae.end_date AS evaluation_end_date, + a.ndg AS ndg, + a.appointment_id AS appointment_id, + + -- From protocol (OneToOne) + p.protocol_number AS protocol_number, + + -- From call (ManyToOne) + cl.name AS call_name, + + -- From company (ManyToOne) + c.company_name AS company_name + +FROM gepafin_schema.assigned_applications aa + +-- Join application (ManyToOne from assigned_applications) +LEFT JOIN gepafin_schema.application a + ON aa.application_id = a.id + AND (a.is_deleted IS FALSE OR a.is_deleted IS NULL) + +-- Join application_evaluation (application_id matches + not deleted) +LEFT JOIN gepafin_schema.application_evaluation ae + ON ae.application_id = a.id + AND (ae.is_deleted IS FALSE OR ae.is_deleted IS NULL) + +-- Join protocol (OneToOne from application) +LEFT JOIN gepafin_schema.protocol p + ON a.protocol_number = p.id + +-- Join call (ManyToOne from application) +LEFT JOIN gepafin_schema.call cl + ON a.call_id = cl.id + +-- Join company (ManyToOne from application) +LEFT JOIN gepafin_schema.company c + ON a.company_id = c.id + +WHERE aa.is_deleted IS FALSE OR aa.is_deleted IS NULL; From 31cc5ae1ac83fbe31635516ded5060c615e6599a Mon Sep 17 00:00:00 2001 From: Piyush Date: Fri, 11 Apr 2025 12:57:14 +0530 Subject: [PATCH 5/6] updated code --- .../dao/AssignedApplicationsDao.java | 18 ++++++-------- .../AssignedApplicationViewResponse.java | 24 +++++++++++++++++++ .../service/AssignedApplicationsService.java | 3 ++- .../impl/AssignedApplicationsServiceImpl.java | 3 ++- .../web/rest/api/AssignedApplicationsApi.java | 5 ++-- .../impl/AssignedApplicationsController.java | 9 +++---- 6 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationViewResponse.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index 65035e47..17f18c9c 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; +import net.gepafin.tendermanagement.model.response.AssignedApplicationViewResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.util.SortBy; @@ -301,7 +302,7 @@ public class AssignedApplicationsDao { log.info("Assigned application fetched successfully: {}", response); return response; } - public PageableResponseBean> getAllAssignedApplicationsByPagination(UserEntity user, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean,Long userId) { + public PageableResponseBean> getAllAssignedApplicationsByPagination(UserEntity user, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean,Long userId) { Integer pageNo = null; Integer pageLimit = null; if (assignedApplicationPageableRequestBean.getGlobalFilters() != null) { @@ -318,16 +319,11 @@ public class AssignedApplicationsDao { Page entityPage = assignedApplicationsViewRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); // Prepare the response - List assignedApplicationsResponses = entityPage.getContent().stream() - .map(application -> { - AssignedApplicationsResponse response = getAssignedApplicationResponseByView(application); - return response; - }) + List assignedApplicationsResponses = entityPage.getContent().stream() + .map(this::getAssignedApplicationResponseByView) .collect(Collectors.toList()); - - - PageableResponseBean> pageableResponseBean = new PageableResponseBean<>(); + PageableResponseBean> pageableResponseBean = new PageableResponseBean<>(); pageableResponseBean.setBody(assignedApplicationsResponses); pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); pageableResponseBean.setTotalPages(entityPage.getTotalPages()); @@ -458,8 +454,8 @@ public class AssignedApplicationsDao { } - private AssignedApplicationsResponse getAssignedApplicationResponseByView(AssignedApplicationsView view) { - AssignedApplicationsResponse response = new AssignedApplicationsResponse(); + private AssignedApplicationViewResponse getAssignedApplicationResponseByView(AssignedApplicationsView view) { + AssignedApplicationViewResponse response = new AssignedApplicationViewResponse(); response.setId(view.getId()); response.setUserId(view.getUserId()); response.setStatus(AssignedApplicationEnum.valueOf(view.getStatus())); diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationViewResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationViewResponse.java new file mode 100644 index 00000000..94c2335a --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationViewResponse.java @@ -0,0 +1,24 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; +import net.gepafin.tendermanagement.model.BaseBean; + +import java.time.LocalDateTime; + +@Data +public class AssignedApplicationViewResponse extends BaseBean { + private Long userId; + private Long applicationId; + private AssignedApplicationEnum status; + private LocalDateTime submissionDate; + private ApplicationStatusTypeEnum applicationStatus; + private LocalDateTime evaluationEndDate; + private String ndg; + private String appointmentId; + private Long protocolNumber; + private String callName; + private String companyName; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java index 6c03d8f4..85a4ec82 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java @@ -7,6 +7,7 @@ import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; +import net.gepafin.tendermanagement.model.response.AssignedApplicationViewResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; @@ -23,6 +24,6 @@ public interface AssignedApplicationsService { AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, UpdateAssignedApplicationRequest assignedApplicationsRequest); AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id); AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId); - PageableResponseBean> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean); + PageableResponseBean> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean); AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java index 48017b57..b6d67ed2 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java @@ -9,6 +9,7 @@ import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; +import net.gepafin.tendermanagement.model.response.AssignedApplicationViewResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.service.AssignedApplicationsService; @@ -66,7 +67,7 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ } @Override - public PageableResponseBean> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) { + public PageableResponseBean> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) { UserEntity user=validator.validateUser(request); return assignedApplicationsDao.getAllAssignedApplicationsByPagination(user,assignedApplicationPageableRequestBean,userId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java index caa2fa32..b3724765 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java @@ -12,6 +12,7 @@ import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.ApplicationResponse; +import net.gepafin.tendermanagement.model.response.AssignedApplicationViewResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.util.Response; @@ -128,8 +129,8 @@ public interface AssignedApplicationsApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @PostMapping(value = "/pagination", produces = "application/json") - ResponseEntity>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, - @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId, @RequestBody AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean); + ResponseEntity>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, + @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId, @RequestBody AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java index f6487d12..ec5becc7 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java @@ -12,10 +12,7 @@ import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableReq import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest; -import net.gepafin.tendermanagement.model.response.ApplicationResponse; -import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; -import net.gepafin.tendermanagement.model.response.NotificationResponse; -import net.gepafin.tendermanagement.model.response.PageableResponseBean; +import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -96,11 +93,11 @@ public class AssignedApplicationsController implements AssignedApplicationsApi { } @Override - public ResponseEntity>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) { + public ResponseEntity>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) { loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) .actionContext(UserActionContextEnum.GET_ALL_ASSIGNED_APPLICATION_BY_PAGINATION).build()); - PageableResponseBean> assigenedApplicationResponses=assignedApplicationsService.getAllAssignedApplicationsByPagination(request, userId,assignedApplicationPageableRequestBean); + PageableResponseBean> assigenedApplicationResponses=assignedApplicationsService.getAllAssignedApplicationsByPagination(request, userId,assignedApplicationPageableRequestBean); return ResponseEntity.status(HttpStatus.OK).body(new Response<>(assigenedApplicationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); } From 5df4987193f1182af09ab577f30ebb6074d7a170 Mon Sep 17 00:00:00 2001 From: rajesh Date: Mon, 14 Apr 2025 16:17:14 +0530 Subject: [PATCH 6/6] Done ticket GEPAFINBE-208 --- .../db/changelog/db.changelog-1.0.0.xml | 5 +- .../update_form_field_data_14_04_2025.sql | 84 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/db/dump/update_form_field_data_14_04_2025.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 648d76e8..ee993774 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 @@ -2727,5 +2727,8 @@ - + + + diff --git a/src/main/resources/db/dump/update_form_field_data_14_04_2025.sql b/src/main/resources/db/dump/update_form_field_data_14_04_2025.sql new file mode 100644 index 00000000..aba19419 --- /dev/null +++ b/src/main/resources/db/dump/update_form_field_data_14_04_2025.sql @@ -0,0 +1,84 @@ +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Testo Breve"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 1; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Testo Lungo"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 2; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Testo Formattato"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]', + validators = '{"isRequired":false,"minLength":null,"maxLength":null,"custom":null}' +WHERE id = 3; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Numero"},{"name":"placeholder","value":0},{"name":"step","value":0},{"name":"isRequestedAmount","value":false},{"name":"variable","value":[]},{"name":"formula","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 4; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Scelta Singola"},{"name":"options","value":[]},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 5; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Menu a Tendina"},{"name":"options","value":[]},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 6; +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Scelta Multipla"},{"name":"options","value":[]},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 7; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Casella di Spunta"},{"name":"isChecklistItem","value":false},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 8; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Data"},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]', + validators = '{"isRequired":false,"custom":null}' +WHERE id = 9; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Caricamento File"},{"name":"mime","value":[]},{"name":"isDelegation","value":false}]', + validators = '{"isRequired":false,"maxSize":100000,"custom":null}' +WHERE id = 10; +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Partita IVA"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 11; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Codice Fiscale"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 12; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"CAP"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 13; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"IBAN"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 14; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Campo Email"},{"name":"placeholder","value":"nome@esempio.it"},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 15; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Campo PEC"},{"name":"placeholder","value":"nome@pec.it"},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 16; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Indirizzo URL"},{"name":"placeholder","value":""},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 17; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Marca da bollo"},{"name":"placeholder","value":"Numero identificativo"},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 18; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Tabella"},{"name":"table_columns","value":{}},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]', + validators = '{"custom":"nonEmptyTables"}' +WHERE id = 20; +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Tabella"},{"name":"criteria_table_columns","value":{}},{"name":"variable","value":[]},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 21; + +UPDATE FORM_FIELD +SET settings = '[{"name":"label","value":"Casella di Spunta"},{"name":"isChecklistItem","value":true},{"name":"reportEnable","value":false},{"name":"reportHeader","value":""}]' +WHERE id = 22; \ No newline at end of file