Done ticket GEPAFINBE-137
This commit is contained in:
@@ -354,5 +354,19 @@ public class GepafinConstant {
|
|||||||
public static final String NOTIFICATION_DELETED_SUCCESSFULLY="notification.deleted.successfully";
|
public static final String NOTIFICATION_DELETED_SUCCESSFULLY="notification.deleted.successfully";
|
||||||
public static final String NOTIFICATION_UPDATED_SUCCESSFULLY="notification.updated.successfully";
|
public static final String NOTIFICATION_UPDATED_SUCCESSFULLY="notification.updated.successfully";
|
||||||
public static final String USER_WITH_COMPANY_NOT_FOUND = "user.with.company.not.found";
|
public static final String USER_WITH_COMPANY_NOT_FOUND = "user.with.company.not.found";
|
||||||
|
public static final String STATUS = "status";
|
||||||
|
public static final String CALL="call";
|
||||||
|
public static final String TITLE="title";
|
||||||
|
public static final String MESSAGE="message";
|
||||||
|
public static final String HUB_ID="hubId";
|
||||||
|
public static final String ID="id";
|
||||||
|
public static final String IS_DELETED="isDeleted";
|
||||||
|
public static final String COMPANY_ID="companyId";
|
||||||
|
public static final String COMMENTS="comments";
|
||||||
|
public static final String DESCRIPTION_LONG="descriptionLong";
|
||||||
|
public static final String DESCRIPTION_SHORT="descriptionShort";
|
||||||
|
public static final String HUB="hub";
|
||||||
|
public static final String NAME="name";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,16 @@
|
|||||||
package net.gepafin.tendermanagement.dao;
|
package net.gepafin.tendermanagement.dao;
|
||||||
|
|
||||||
|
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||||
|
import jakarta.persistence.criteria.Root;
|
||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.config.jwt.TokenProvider;
|
import net.gepafin.tendermanagement.config.jwt.TokenProvider;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.entities.*;
|
import net.gepafin.tendermanagement.entities.*;
|
||||||
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
|
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.*;
|
import net.gepafin.tendermanagement.enums.*;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
|
import net.gepafin.tendermanagement.model.request.*;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
|
||||||
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
|
|
||||||
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
|
||||||
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
|
|
||||||
import net.gepafin.tendermanagement.model.response.*;
|
import net.gepafin.tendermanagement.model.response.*;
|
||||||
|
import net.gepafin.tendermanagement.model.util.SortBy;
|
||||||
import net.gepafin.tendermanagement.repositories.*;
|
import net.gepafin.tendermanagement.repositories.*;
|
||||||
import net.gepafin.tendermanagement.service.AmazonS3Service;
|
import net.gepafin.tendermanagement.service.AmazonS3Service;
|
||||||
import net.gepafin.tendermanagement.service.ApplicationEvaluationService;
|
import net.gepafin.tendermanagement.service.ApplicationEvaluationService;
|
||||||
@@ -37,6 +35,8 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
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 org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
@@ -54,6 +54,8 @@ import java.util.stream.Collectors;
|
|||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isEmpty;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class ApplicationDao {
|
public class ApplicationDao {
|
||||||
|
|
||||||
@@ -1349,4 +1351,127 @@ public class ApplicationDao {
|
|||||||
throw new RuntimeException("Error while creating ZIP file", e);
|
throw new RuntimeException("Error while creating ZIP file", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PageableResponseBean<List<ApplicationResponse>> getAllApplicationByPagination(UserEntity userEntity, Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean) {
|
||||||
|
Integer pageNo = null;
|
||||||
|
Integer pageLimit = null;
|
||||||
|
if (applicationPageableRequestBean.getGlobalFilters() != null) {
|
||||||
|
pageNo = applicationPageableRequestBean.getGlobalFilters().getPage();
|
||||||
|
pageLimit = applicationPageableRequestBean.getGlobalFilters().getLimit();
|
||||||
|
}
|
||||||
|
if (pageLimit == null || pageLimit <= 0) {
|
||||||
|
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
|
||||||
|
}
|
||||||
|
if (pageNo == null || pageNo <= 0) {
|
||||||
|
pageNo = GepafinConstant.DEFAULT_PAGE;
|
||||||
|
}
|
||||||
|
Specification<ApplicationEntity> spec = search(callId, companyId, applicationPageableRequestBean, userEntity);
|
||||||
|
Page<ApplicationEntity> entityPage = applicationRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit));
|
||||||
|
// Prepare the response
|
||||||
|
|
||||||
|
|
||||||
|
List<ApplicationResponse> applicationResponses = entityPage.getContent().stream()
|
||||||
|
.map(application -> {
|
||||||
|
ApplicationResponse response = getApplicationResponse(application);
|
||||||
|
return response;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
|
||||||
|
PageableResponseBean<List<ApplicationResponse>> pageableResponseBean = new PageableResponseBean<>();
|
||||||
|
pageableResponseBean.setBody(applicationResponses);
|
||||||
|
pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); // Page numbers typically start from 0, so add 1 for user-friendly indexing
|
||||||
|
pageableResponseBean.setTotalPages(entityPage.getTotalPages());
|
||||||
|
pageableResponseBean.setTotalRecords(entityPage.getTotalElements());
|
||||||
|
pageableResponseBean.setPageSize(entityPage.getSize());
|
||||||
|
|
||||||
|
return pageableResponseBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Specification<ApplicationEntity> search(Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean, UserEntity userEntity) {
|
||||||
|
return (root, query, criteriaBuilder) -> {
|
||||||
|
|
||||||
|
List<Predicate> predicates = getPredicates(applicationPageableRequestBean, criteriaBuilder, root, callId, companyId, userEntity);
|
||||||
|
SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true);
|
||||||
|
|
||||||
|
if (applicationPageableRequestBean.getGlobalFilters() != null
|
||||||
|
&& applicationPageableRequestBean.getGlobalFilters().getSortBy() != null &&
|
||||||
|
applicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals(
|
||||||
|
isEmpty(applicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName()))) {
|
||||||
|
sortBy.setColumnName(applicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName());
|
||||||
|
sortBy.setSortDesc(true);
|
||||||
|
if (applicationPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) {
|
||||||
|
sortBy.setSortDesc(applicationPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query.orderBy(criteriaBuilder.desc(root.get(sortBy.getColumnName())));
|
||||||
|
if (Boolean.FALSE.equals(sortBy.getSortDesc())) {
|
||||||
|
query.orderBy(criteriaBuilder.asc(root.get(sortBy.getColumnName())));
|
||||||
|
}
|
||||||
|
return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<Predicate> getPredicates(ApplicationPageableRequestBean applicationPageableRequestBean,
|
||||||
|
CriteriaBuilder criteriaBuilder, Root<ApplicationEntity> root, Long callId, Long companyId, UserEntity userEntity) {
|
||||||
|
|
||||||
|
Integer year = null;
|
||||||
|
String search = null;
|
||||||
|
if (applicationPageableRequestBean.getGlobalFilters() != null) {
|
||||||
|
year = applicationPageableRequestBean.getGlobalFilters().getYear();
|
||||||
|
search = applicationPageableRequestBean.getGlobalFilters().getSearch();
|
||||||
|
}
|
||||||
|
List<Predicate> predicates = new ArrayList<>();
|
||||||
|
|
||||||
|
Boolean isBeneficiary = validator.checkIsBeneficiary();
|
||||||
|
if (isBeneficiary) {
|
||||||
|
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userEntity.getId()));
|
||||||
|
}
|
||||||
|
if (year != null && year > 0) {
|
||||||
|
int filterYear = applicationPageableRequestBean.getGlobalFilters().getYear();
|
||||||
|
|
||||||
|
// Create LocalDateTime boundaries for the start and end of the year
|
||||||
|
LocalDateTime startOfYear = LocalDateTime.of(filterYear, 1, 1, 0, 0);
|
||||||
|
LocalDateTime endOfYear = LocalDateTime.of(filterYear, 12, 31, 23, 59, 59);
|
||||||
|
|
||||||
|
// Add the range comparison to filter records within the year
|
||||||
|
predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startOfYear, endOfYear));
|
||||||
|
|
||||||
|
}
|
||||||
|
// Search in `title` and `message` (if search term is provided)
|
||||||
|
if (search != null && !search.isEmpty()) {
|
||||||
|
Predicate titlePredicate = criteriaBuilder.like(
|
||||||
|
criteriaBuilder.upper(root.get(GepafinConstant.COMMENTS)),
|
||||||
|
"%" + search.toUpperCase() + "%"
|
||||||
|
);
|
||||||
|
predicates.add(criteriaBuilder.or(titlePredicate));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by `status` (if status list is provided)
|
||||||
|
if (applicationPageableRequestBean.getStatus() != null && !applicationPageableRequestBean.getStatus().isEmpty()) {
|
||||||
|
List<String> statusValues = applicationPageableRequestBean.getStatus().stream()
|
||||||
|
.map(ApplicationStatusTypeEnum::name) // Convert enum to string
|
||||||
|
.toList();
|
||||||
|
predicates.add(root.get(GepafinConstant.STATUS).in(statusValues));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callId != null) {
|
||||||
|
CallEntity call = callService.validateCall(callId);
|
||||||
|
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.CALL).get(GepafinConstant.ID), callId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional companyId filter
|
||||||
|
if (companyId != null) {
|
||||||
|
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.COMPANY_ID), companyId));
|
||||||
|
}
|
||||||
|
predicates.add(criteriaBuilder.isFalse(root.get(GepafinConstant.IS_DELETED)));
|
||||||
|
|
||||||
|
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.HUB_ID), userEntity.getHub().getId()));
|
||||||
|
|
||||||
|
|
||||||
|
return predicates;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,14 +12,15 @@ import java.util.stream.Collectors;
|
|||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||||
|
import jakarta.persistence.criteria.Predicate;
|
||||||
|
import jakarta.persistence.criteria.Root;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.entities.*;
|
import net.gepafin.tendermanagement.entities.*;
|
||||||
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
|
import net.gepafin.tendermanagement.enums.*;
|
||||||
import net.gepafin.tendermanagement.enums.NotificationTypeEnum;
|
import net.gepafin.tendermanagement.model.request.*;
|
||||||
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
|
|
||||||
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
|
||||||
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
|
|
||||||
import net.gepafin.tendermanagement.model.response.*;
|
import net.gepafin.tendermanagement.model.response.*;
|
||||||
|
import net.gepafin.tendermanagement.model.util.SortBy;
|
||||||
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;
|
||||||
@@ -28,6 +29,9 @@ import net.gepafin.tendermanagement.util.Utils;
|
|||||||
import net.gepafin.tendermanagement.util.Validator;
|
import net.gepafin.tendermanagement.util.Validator;
|
||||||
import org.h2.util.IOUtils;
|
import org.h2.util.IOUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@@ -35,15 +39,6 @@ import org.springframework.util.StringUtils;
|
|||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
|
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
|
||||||
import net.gepafin.tendermanagement.enums.DocumentTypeEnum;
|
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
|
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
|
|
||||||
import net.gepafin.tendermanagement.model.request.DocumentReq;
|
|
||||||
import net.gepafin.tendermanagement.model.request.EvaluationCriteriaReq;
|
|
||||||
import net.gepafin.tendermanagement.model.request.FaqReq;
|
|
||||||
import net.gepafin.tendermanagement.model.request.LookUpDataReq;
|
|
||||||
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
|
|
||||||
import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl;
|
import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl;
|
||||||
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;
|
||||||
@@ -51,6 +46,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
|||||||
|
|
||||||
import static net.gepafin.tendermanagement.enums.RoleStatusEnum.ROLE_SUPER_ADMIN;
|
import static net.gepafin.tendermanagement.enums.RoleStatusEnum.ROLE_SUPER_ADMIN;
|
||||||
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
|
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isEmpty;
|
||||||
import static org.hibernate.internal.util.collections.CollectionHelper.listOf;
|
import static org.hibernate.internal.util.collections.CollectionHelper.listOf;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -917,4 +913,154 @@ public class CallDao {
|
|||||||
return callEntity;
|
return callEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PageableResponseBean<List<CallDetailsResponseBean>> getAllCallsByPagination(HttpServletRequest request,UserEntity user,Long companyId , Boolean onlyPreferredCall, CallPageableRequestBean callPageableRequestBean) {
|
||||||
|
Integer pageNo = null;
|
||||||
|
Integer pageLimit = null;
|
||||||
|
if (callPageableRequestBean.getGlobalFilters() != null) {
|
||||||
|
pageNo = callPageableRequestBean.getGlobalFilters().getPage();
|
||||||
|
pageLimit = callPageableRequestBean.getGlobalFilters().getLimit();
|
||||||
|
}
|
||||||
|
if (pageLimit == null || pageLimit <= 0) {
|
||||||
|
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
|
||||||
|
}
|
||||||
|
if (pageNo == null || pageNo <= 0) {
|
||||||
|
pageNo = GepafinConstant.DEFAULT_PAGE;
|
||||||
|
}
|
||||||
|
if (Boolean.TRUE.equals(onlyPreferredCall) && companyId == null) {
|
||||||
|
throw new CustomValidationException(
|
||||||
|
Status.VALIDATION_ERROR,
|
||||||
|
Translator.toLocale(GepafinConstant.COMPANY_ID_REQUIRED_FOR_PREFERRED_CALL)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Specification<CallEntity> spec = search(user, callPageableRequestBean);
|
||||||
|
Page<CallEntity> entityPage;
|
||||||
|
if (Boolean.TRUE.equals(onlyPreferredCall)) {
|
||||||
|
validator.validateUserWithCompany(request, companyId);
|
||||||
|
UserWithCompanyEntity userWithCompanyEntity = companyService.getUserWithCompany(user.getId(), companyId);
|
||||||
|
List<BeneficiaryPreferredCallEntity> preferredCalls = beneficiaryPreferredCallRepository
|
||||||
|
.findByUserIdAndUserWithCompanyIdAndIsDeletedFalse(user.getId(), userWithCompanyEntity.getId());
|
||||||
|
List<Long> preferredCallIds = preferredCalls.stream()
|
||||||
|
.map(BeneficiaryPreferredCallEntity::getCallId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// Add preferredCallIds filtering to the specification
|
||||||
|
spec = spec.and((root, query, criteriaBuilder) ->
|
||||||
|
root.get(GepafinConstant.ID).in(preferredCallIds)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
entityPage = callRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit));
|
||||||
|
List<Long> callIds=new ArrayList<>();
|
||||||
|
if(entityPage!=null && entityPage.getContent()!=null && Boolean.FALSE.equals(entityPage.getContent().isEmpty())) {
|
||||||
|
callIds = entityPage.getContent().stream().map(CallEntity::getId).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
Map<String, BeneficiaryPreferredCallEntity> preferredCallsMap =
|
||||||
|
getBeneficiaryPreferredCallsForUser(request,user, callIds, companyId);
|
||||||
|
|
||||||
|
List<CallDetailsResponseBean> callDetailsResponseBeans = entityPage.getContent().stream()
|
||||||
|
.map(callEntity -> {
|
||||||
|
CallDetailsResponseBean responseBean = convertToCallDetailsResponseBean(callEntity);
|
||||||
|
String key = user.getId() + "_" + callEntity.getId();
|
||||||
|
BeneficiaryPreferredCallEntity preferredCall = preferredCallsMap.get(key);
|
||||||
|
Long preferredId = preferredCall != null ? preferredCall.getId() : null;
|
||||||
|
responseBean.setPreferredCallId(preferredId);
|
||||||
|
|
||||||
|
return responseBean;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
|
||||||
|
PageableResponseBean<List<CallDetailsResponseBean>> pageableResponseBean = new PageableResponseBean<>();
|
||||||
|
pageableResponseBean.setBody(callDetailsResponseBeans);
|
||||||
|
pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); // Page numbers typically start from 0, so add 1 for user-friendly indexing
|
||||||
|
pageableResponseBean.setTotalPages(entityPage.getTotalPages());
|
||||||
|
pageableResponseBean.setTotalRecords(entityPage.getTotalElements());
|
||||||
|
pageableResponseBean.setPageSize(entityPage.getSize());
|
||||||
|
|
||||||
|
return pageableResponseBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Specification<CallEntity> search(UserEntity userEntity, CallPageableRequestBean callPageableRequestBean) {
|
||||||
|
return (root, query, criteriaBuilder) -> {
|
||||||
|
|
||||||
|
List<Predicate> predicates = getPredicates(callPageableRequestBean, criteriaBuilder, root, userEntity);
|
||||||
|
SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true);
|
||||||
|
|
||||||
|
if (callPageableRequestBean.getGlobalFilters() != null
|
||||||
|
&& callPageableRequestBean.getGlobalFilters().getSortBy() != null &&
|
||||||
|
callPageableRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals(
|
||||||
|
isEmpty(callPageableRequestBean.getGlobalFilters().getSortBy().getColumnName()))) {
|
||||||
|
sortBy.setColumnName(callPageableRequestBean.getGlobalFilters().getSortBy().getColumnName());
|
||||||
|
sortBy.setSortDesc(true);
|
||||||
|
if (callPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) {
|
||||||
|
sortBy.setSortDesc(callPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query.orderBy(criteriaBuilder.desc(root.get(sortBy.getColumnName())));
|
||||||
|
if (Boolean.FALSE.equals(sortBy.getSortDesc())) {
|
||||||
|
query.orderBy(criteriaBuilder.asc(root.get(sortBy.getColumnName())));
|
||||||
|
}
|
||||||
|
return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<Predicate> getPredicates(CallPageableRequestBean callPageableRequestBean,
|
||||||
|
CriteriaBuilder criteriaBuilder, Root<CallEntity> root, UserEntity userEntity) {
|
||||||
|
|
||||||
|
Integer year = null;
|
||||||
|
String search = null;
|
||||||
|
if (callPageableRequestBean.getGlobalFilters() != null) {
|
||||||
|
year = callPageableRequestBean.getGlobalFilters().getYear();
|
||||||
|
search = callPageableRequestBean.getGlobalFilters().getSearch();
|
||||||
|
}
|
||||||
|
List<Predicate> predicates = new ArrayList<>();
|
||||||
|
if (year != null && year > 0) {
|
||||||
|
int filterYear = callPageableRequestBean.getGlobalFilters().getYear();
|
||||||
|
|
||||||
|
// Create LocalDateTime boundaries for the start and end of the year
|
||||||
|
LocalDateTime startOfYear = LocalDateTime.of(filterYear, 1, 1, 0, 0);
|
||||||
|
LocalDateTime endOfYear = LocalDateTime.of(filterYear, 12, 31, 23, 59, 59);
|
||||||
|
|
||||||
|
// Add the range comparison to filter records within the year
|
||||||
|
predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startOfYear, endOfYear));
|
||||||
|
|
||||||
|
}
|
||||||
|
// Search in `title` and `message` (if search term is provided)
|
||||||
|
if (search != null && !search.isEmpty()) {
|
||||||
|
Predicate descriptionShort = criteriaBuilder.like(
|
||||||
|
criteriaBuilder.upper(root.get(GepafinConstant.DESCRIPTION_SHORT)),
|
||||||
|
"%" + search.toUpperCase() + "%"
|
||||||
|
);
|
||||||
|
predicates.add(criteriaBuilder.or(descriptionShort));
|
||||||
|
|
||||||
|
Predicate descriptionLong = criteriaBuilder.like(
|
||||||
|
criteriaBuilder.upper(root.get(GepafinConstant.DESCRIPTION_LONG)),
|
||||||
|
"%" + search.toUpperCase() + "%"
|
||||||
|
);
|
||||||
|
predicates.add(criteriaBuilder.or(descriptionLong));
|
||||||
|
|
||||||
|
Predicate name = criteriaBuilder.like(
|
||||||
|
criteriaBuilder.upper(root.get(GepafinConstant.NAME)),
|
||||||
|
"%" + search.toUpperCase() + "%"
|
||||||
|
);
|
||||||
|
predicates.add(criteriaBuilder.or(name));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by `status` (if status list is provided)
|
||||||
|
if (callPageableRequestBean.getStatus() != null && !callPageableRequestBean.getStatus().isEmpty()) {
|
||||||
|
List<String> statusValues = callPageableRequestBean.getStatus().stream()
|
||||||
|
.map(CallStatusEnum::name) // Convert enum to string
|
||||||
|
.toList();
|
||||||
|
predicates.add(root.get(GepafinConstant.STATUS).in(statusValues));
|
||||||
|
}
|
||||||
|
|
||||||
|
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.HUB).get(GepafinConstant.ID), userEntity.getHub().getId()));
|
||||||
|
|
||||||
|
|
||||||
|
return predicates;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
package net.gepafin.tendermanagement.dao;
|
package net.gepafin.tendermanagement.dao;
|
||||||
|
|
||||||
|
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||||
|
import jakarta.persistence.criteria.Expression;
|
||||||
|
import jakarta.persistence.criteria.Predicate;
|
||||||
|
import jakarta.persistence.criteria.Root;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
@@ -12,8 +16,12 @@ import net.gepafin.tendermanagement.entities.UserWithCompanyEntity;
|
|||||||
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
||||||
import net.gepafin.tendermanagement.enums.NotificationTypeEnum;
|
import net.gepafin.tendermanagement.enums.NotificationTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
|
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.GlobalFilters;
|
||||||
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
||||||
|
import net.gepafin.tendermanagement.model.request.NotificationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
|
import net.gepafin.tendermanagement.model.util.SortBy;
|
||||||
import net.gepafin.tendermanagement.repositories.NotificationRepository;
|
import net.gepafin.tendermanagement.repositories.NotificationRepository;
|
||||||
import net.gepafin.tendermanagement.repositories.NotificationTypeRepository;
|
import net.gepafin.tendermanagement.repositories.NotificationTypeRepository;
|
||||||
import net.gepafin.tendermanagement.repositories.UserRepository;
|
import net.gepafin.tendermanagement.repositories.UserRepository;
|
||||||
@@ -23,9 +31,16 @@ import net.gepafin.tendermanagement.util.DateTimeUtil;
|
|||||||
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.Status;
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||||
|
import org.opensaml.xmlsec.signature.G;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.domain.Sort;
|
||||||
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -34,6 +49,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isEmpty;
|
||||||
import static org.hibernate.internal.util.collections.CollectionHelper.listOf;
|
import static org.hibernate.internal.util.collections.CollectionHelper.listOf;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -275,4 +291,113 @@ public class NotificationDao {
|
|||||||
return notificationEntities.stream().map(this::convertNotificationEntityToNotificationResponse).toList();
|
return notificationEntities.stream().map(this::convertNotificationEntityToNotificationResponse).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public PageableResponseBean<List<NotificationResponse>> getAllNotification(Long userId, NotificationRequestBean notificationRequestBean) {
|
||||||
|
Integer pageNo = null;
|
||||||
|
Integer pageLimit = null;
|
||||||
|
if (notificationRequestBean.getGlobalFilters() != null) {
|
||||||
|
pageNo = notificationRequestBean.getGlobalFilters().getPage();
|
||||||
|
pageLimit = notificationRequestBean.getGlobalFilters().getLimit();
|
||||||
|
}
|
||||||
|
if (pageLimit == null || pageLimit <= 0) {
|
||||||
|
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
|
||||||
|
}
|
||||||
|
if (pageNo == null || pageNo <= 0) {
|
||||||
|
pageNo = GepafinConstant.DEFAULT_PAGE;
|
||||||
|
}
|
||||||
|
Specification<NotificationEntity> spec = search(userId, notificationRequestBean);
|
||||||
|
Page<NotificationEntity> entityPage = notificationRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit));
|
||||||
|
// Prepare the response
|
||||||
|
|
||||||
|
|
||||||
|
List<NotificationResponse> notificationResponses = entityPage.getContent().stream()
|
||||||
|
.map(notification -> {
|
||||||
|
NotificationResponse response = convertNotificationEntityToNotificationResponse(notification);
|
||||||
|
return response;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
|
||||||
|
PageableResponseBean<List<NotificationResponse>> pageableResponseBean = new PageableResponseBean<>();
|
||||||
|
pageableResponseBean.setBody(notificationResponses);
|
||||||
|
pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); // Page numbers typically start from 0, so add 1 for user-friendly indexing
|
||||||
|
pageableResponseBean.setTotalPages(entityPage.getTotalPages());
|
||||||
|
pageableResponseBean.setTotalRecords(entityPage.getTotalElements());
|
||||||
|
pageableResponseBean.setPageSize(entityPage.getSize());
|
||||||
|
|
||||||
|
return pageableResponseBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Specification<NotificationEntity> search(Long userId, NotificationRequestBean notificationRequestBean) {
|
||||||
|
return (root, query, criteriaBuilder) -> {
|
||||||
|
|
||||||
|
List<Predicate> predicates = getPredicates(notificationRequestBean, criteriaBuilder, root, userId);
|
||||||
|
SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true);
|
||||||
|
|
||||||
|
if (notificationRequestBean.getGlobalFilters() != null
|
||||||
|
&& notificationRequestBean.getGlobalFilters().getSortBy() != null &&
|
||||||
|
notificationRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals(
|
||||||
|
isEmpty(notificationRequestBean.getGlobalFilters().getSortBy().getColumnName()))) {
|
||||||
|
sortBy.setColumnName(notificationRequestBean.getGlobalFilters().getSortBy().getColumnName());
|
||||||
|
sortBy.setSortDesc(true);
|
||||||
|
if (notificationRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) {
|
||||||
|
sortBy.setSortDesc(notificationRequestBean.getGlobalFilters().getSortBy().getSortDesc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query.orderBy(criteriaBuilder.desc(root.get(sortBy.getColumnName())));
|
||||||
|
if (Boolean.FALSE.equals(sortBy.getSortDesc())) {
|
||||||
|
query.orderBy(criteriaBuilder.asc(root.get(sortBy.getColumnName())));
|
||||||
|
}
|
||||||
|
return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<Predicate> getPredicates(NotificationRequestBean notificationRequestBean,
|
||||||
|
CriteriaBuilder criteriaBuilder, Root<NotificationEntity> root, Long userId) {
|
||||||
|
|
||||||
|
Integer year = null;
|
||||||
|
String search = null;
|
||||||
|
if (notificationRequestBean.getGlobalFilters() != null) {
|
||||||
|
year = notificationRequestBean.getGlobalFilters().getYear();
|
||||||
|
search = notificationRequestBean.getGlobalFilters().getSearch();
|
||||||
|
}
|
||||||
|
List<Predicate> predicates = new ArrayList<>();
|
||||||
|
if (year != null && year > 0) {
|
||||||
|
int filterYear = notificationRequestBean.getGlobalFilters().getYear();
|
||||||
|
|
||||||
|
// Create LocalDateTime boundaries for the start and end of the year
|
||||||
|
LocalDateTime startOfYear = LocalDateTime.of(filterYear, 1, 1, 0, 0);
|
||||||
|
LocalDateTime endOfYear = LocalDateTime.of(filterYear, 12, 31, 23, 59, 59);
|
||||||
|
|
||||||
|
// Add the range comparison to filter records within the year
|
||||||
|
predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startOfYear, endOfYear));
|
||||||
|
|
||||||
|
}
|
||||||
|
// Search in `title` and `message` (if search term is provided)
|
||||||
|
if (search != null && !search.isEmpty()) {
|
||||||
|
Predicate titlePredicate = criteriaBuilder.like(
|
||||||
|
criteriaBuilder.upper(root.get(GepafinConstant.TITLE)),
|
||||||
|
"%" + search.toUpperCase() + "%"
|
||||||
|
);
|
||||||
|
Predicate messagePredicate = criteriaBuilder.like(
|
||||||
|
criteriaBuilder.upper(root.get(GepafinConstant.MESSAGE)),
|
||||||
|
"%" + search.toUpperCase() + "%"
|
||||||
|
);
|
||||||
|
predicates.add(criteriaBuilder.or(titlePredicate, messagePredicate));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter by `status` (if status list is provided)
|
||||||
|
if (notificationRequestBean.getStatus() != null && !notificationRequestBean.getStatus().isEmpty()) {
|
||||||
|
List<String> statusValues = notificationRequestBean.getStatus().stream()
|
||||||
|
.map(NotificationEnum::name) // Convert enum to string
|
||||||
|
.toList();
|
||||||
|
predicates.add(root.get(GepafinConstant.STATUS).in(statusValues));
|
||||||
|
}
|
||||||
|
predicates.add(criteriaBuilder.isFalse(root.get(GepafinConstant.IS_DELETED)));
|
||||||
|
|
||||||
|
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userId));
|
||||||
|
return predicates;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,7 +161,13 @@ public enum UserActionContextEnum {
|
|||||||
/** appointment action context **/
|
/** appointment action context **/
|
||||||
CHECK_OR_CREATE_NDG_CODE("CHECK_OR_CREATE_NDG_CODE"),
|
CHECK_OR_CREATE_NDG_CODE("CHECK_OR_CREATE_NDG_CODE"),
|
||||||
CREATE_APPOINTMENT("CREATE_APPOINTMENT"),
|
CREATE_APPOINTMENT("CREATE_APPOINTMENT"),
|
||||||
UPLOAD_DOCUMENT_TO_EXTERNAL_SYSTEM("UPLOAD_DOCUMENT_TO_EXTERNAL_SYSTEM");
|
UPLOAD_DOCUMENT_TO_EXTERNAL_SYSTEM("UPLOAD_DOCUMENT_TO_EXTERNAL_SYSTEM"),
|
||||||
|
|
||||||
|
GET_ALL_NOTIFICATION_BY_PAGINATION("GET_ALL_NOTIFICATION_BY_PAGINATION"),
|
||||||
|
GET_ALL_CALL_BY_PAGINATION("GET_ALL_CALL_BY_PAGINATION"),
|
||||||
|
GET_ALL_APPLICATION_BY_PAGINATION("GET_ALL_APPLICATION_BY_PAGINATION");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package net.gepafin.tendermanagement.model.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ApplicationPageableRequestBean {
|
||||||
|
|
||||||
|
private GlobalFilters globalFilters;
|
||||||
|
|
||||||
|
private List<ApplicationStatusTypeEnum> status;
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package net.gepafin.tendermanagement.model.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CallPageableRequestBean {
|
||||||
|
|
||||||
|
private GlobalFilters globalFilters;
|
||||||
|
|
||||||
|
private List<CallStatusEnum> status;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package net.gepafin.tendermanagement.model.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import net.gepafin.tendermanagement.model.util.SortBy;
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class GlobalFilters {
|
||||||
|
private Integer year;
|
||||||
|
|
||||||
|
private Integer page;
|
||||||
|
|
||||||
|
private String search;
|
||||||
|
|
||||||
|
private Integer limit;
|
||||||
|
|
||||||
|
private SortBy sortBy;
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package net.gepafin.tendermanagement.model.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class NotificationRequestBean {
|
||||||
|
|
||||||
|
private GlobalFilters globalFilters;
|
||||||
|
|
||||||
|
private List<NotificationEnum> status;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package net.gepafin.tendermanagement.model.response;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PageableResponseBean<T> {
|
||||||
|
|
||||||
|
private T body;
|
||||||
|
private Long totalRecords;
|
||||||
|
private int currentPage;
|
||||||
|
private int totalPages;
|
||||||
|
private int pageSize;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package net.gepafin.tendermanagement.model.util;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SortBy {
|
||||||
|
|
||||||
|
String columnName;
|
||||||
|
Boolean sortDesc;
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.gepafin.tendermanagement.repositories;
|
package net.gepafin.tendermanagement.repositories;
|
||||||
import net.gepafin.tendermanagement.entities.CallEntity;
|
import net.gepafin.tendermanagement.entities.CallEntity;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
@@ -9,7 +10,7 @@ import java.math.BigDecimal;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface CallRepository extends JpaRepository<CallEntity, Long> {
|
public interface CallRepository extends JpaRepository<CallEntity, Long>, JpaSpecificationExecutor<CallEntity> {
|
||||||
|
|
||||||
// public CallEntity findByIdAndStatusNotIn(Long id, List<String> status);
|
// public CallEntity findByIdAndStatusNotIn(Long id, List<String> status);
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
package net.gepafin.tendermanagement.repositories;
|
package net.gepafin.tendermanagement.repositories;
|
||||||
|
|
||||||
import net.gepafin.tendermanagement.entities.NotificationEntity;
|
import net.gepafin.tendermanagement.entities.NotificationEntity;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
|
import org.springframework.data.jpa.domain.Specification;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface NotificationRepository extends JpaRepository<NotificationEntity, Long> {
|
public interface NotificationRepository extends JpaRepository<NotificationEntity, Long> , JpaSpecificationExecutor<NotificationEntity> {
|
||||||
|
|
||||||
NotificationEntity findByIdAndIsDeletedFalse(Long id);
|
NotificationEntity findByIdAndIsDeletedFalse(Long id);
|
||||||
|
|
||||||
@@ -17,4 +23,5 @@ public interface NotificationRepository extends JpaRepository<NotificationEntity
|
|||||||
List<NotificationEntity> findByUserIdAndIsDeletedFalseAndStatusIn(Long userId, List<String> statuses);
|
List<NotificationEntity> findByUserIdAndIsDeletedFalseAndStatusIn(Long userId, List<String> statuses);
|
||||||
|
|
||||||
List<NotificationEntity> findByUserWithCompanyIdAndUserIdAndIsDeletedFalse(Long userWithCompanyId, Long userId);
|
List<NotificationEntity> findByUserWithCompanyIdAndUserIdAndIsDeletedFalse(Long userWithCompanyId, Long userId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,18 +2,17 @@ package net.gepafin.tendermanagement.service;
|
|||||||
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.entities.ApplicationEntity;
|
import net.gepafin.tendermanagement.entities.ApplicationEntity;
|
||||||
|
import net.gepafin.tendermanagement.model.request.ApplicationPageableRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
||||||
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationGetResponseBean;
|
import net.gepafin.tendermanagement.model.response.*;
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponseBean;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationSignedDocumentResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.gepafin.tendermanagement.model.util.Response;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
public interface ApplicationService {
|
public interface ApplicationService {
|
||||||
@@ -41,5 +40,9 @@ public interface ApplicationService {
|
|||||||
public void deleteSignedDocument(HttpServletRequest request, Long applicationId);
|
public void deleteSignedDocument(HttpServletRequest request, Long applicationId);
|
||||||
|
|
||||||
public ApplicationResponse validateApplication(HttpServletRequest request, Long applicationId);
|
public ApplicationResponse validateApplication(HttpServletRequest request, Long applicationId);
|
||||||
|
|
||||||
byte[] downloadApplicationDocumentsAsZip(HttpServletRequest request, Long applicationId);
|
byte[] downloadApplicationDocumentsAsZip(HttpServletRequest request, Long applicationId);
|
||||||
}
|
|
||||||
|
PageableResponseBean<List<ApplicationResponse>> getAllApplicationByPagination(HttpServletRequest request, Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean);
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import java.util.List;
|
|||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.entities.CallEntity;
|
import net.gepafin.tendermanagement.entities.CallEntity;
|
||||||
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.CallPageableRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
|
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
|
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
|
||||||
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
|
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
|
||||||
import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean;
|
import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean;
|
||||||
import net.gepafin.tendermanagement.model.response.CallResponse;
|
import net.gepafin.tendermanagement.model.response.CallResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
|
|
||||||
public interface CallService {
|
public interface CallService {
|
||||||
|
|
||||||
@@ -30,5 +32,9 @@ public interface CallService {
|
|||||||
CallEntity validateCall(Long callId);
|
CallEntity validateCall(Long callId);
|
||||||
|
|
||||||
CallEntity validatePublishedCall(Long callId, Long hubId);
|
CallEntity validatePublishedCall(Long callId, Long hubId);
|
||||||
|
|
||||||
byte[] downloadCallDocumentsAsZip(HttpServletRequest request, Long callId);
|
byte[] downloadCallDocumentsAsZip(HttpServletRequest request, Long callId);
|
||||||
|
|
||||||
|
PageableResponseBean<List<CallDetailsResponseBean>> getAllCallsByPagination(HttpServletRequest request, Long companyId , Boolean onlyPreferredCall,CallPageableRequestBean callPageableRequestBean);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,12 @@ package net.gepafin.tendermanagement.service;
|
|||||||
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.GlobalFilters;
|
||||||
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
||||||
|
import net.gepafin.tendermanagement.model.request.NotificationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -20,4 +24,5 @@ public interface NotificationService {
|
|||||||
|
|
||||||
public List<NotificationResponse> getNotificationsByCompanyIdAndUserId(Long userId, Long companyId, List<NotificationEnum> statuses);
|
public List<NotificationResponse> getNotificationsByCompanyIdAndUserId(Long userId, Long companyId, List<NotificationEnum> statuses);
|
||||||
|
|
||||||
|
PageableResponseBean<List<NotificationResponse>> getAllNotification(HttpServletRequest request,Long userId, NotificationRequestBean notificationRequestBean);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,15 +8,12 @@ import net.gepafin.tendermanagement.dao.FlowFormDao;
|
|||||||
import net.gepafin.tendermanagement.entities.ApplicationEntity;
|
import net.gepafin.tendermanagement.entities.ApplicationEntity;
|
||||||
import net.gepafin.tendermanagement.entities.CompanyEntity;
|
import net.gepafin.tendermanagement.entities.CompanyEntity;
|
||||||
import net.gepafin.tendermanagement.entities.UserEntity;
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||||
|
import net.gepafin.tendermanagement.model.request.ApplicationPageableRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
||||||
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationGetResponseBean;
|
import net.gepafin.tendermanagement.model.response.*;
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponseBean;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationSignedDocumentResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse;
|
|
||||||
import net.gepafin.tendermanagement.service.ApplicationService;
|
import net.gepafin.tendermanagement.service.ApplicationService;
|
||||||
import net.gepafin.tendermanagement.util.Validator;
|
import net.gepafin.tendermanagement.util.Validator;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
||||||
@@ -129,4 +126,13 @@ public class ApplicationServiceImpl implements ApplicationService {
|
|||||||
return applicationDao.downloadApplicationDocumentsAsZip(request,applicationId);
|
return applicationDao.downloadApplicationDocumentsAsZip(request,applicationId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageableResponseBean<List<ApplicationResponse>> getAllApplicationByPagination(HttpServletRequest request, Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean) {
|
||||||
|
UserEntity userEntity = validator.validateUser(request);
|
||||||
|
if (companyId != null) {
|
||||||
|
validator.validateUserWithCompany(request, companyId);
|
||||||
|
}
|
||||||
|
return applicationDao.getAllApplicationByPagination(userEntity,callId,companyId,applicationPageableRequestBean);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import net.gepafin.tendermanagement.dao.CallDao;
|
|||||||
import net.gepafin.tendermanagement.entities.CallEntity;
|
import net.gepafin.tendermanagement.entities.CallEntity;
|
||||||
import net.gepafin.tendermanagement.entities.UserEntity;
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||||
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.CallPageableRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
|
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
|
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
|
||||||
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
|
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
|
||||||
import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean;
|
import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean;
|
||||||
import net.gepafin.tendermanagement.model.response.CallResponse;
|
import net.gepafin.tendermanagement.model.response.CallResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
import net.gepafin.tendermanagement.service.CallService;
|
import net.gepafin.tendermanagement.service.CallService;
|
||||||
import net.gepafin.tendermanagement.util.Validator;
|
import net.gepafin.tendermanagement.util.Validator;
|
||||||
|
|
||||||
@@ -103,4 +105,10 @@ public class CallServiceImpl implements CallService {
|
|||||||
return callDao.downloadCallDocumentsAsZip(callId);
|
return callDao.downloadCallDocumentsAsZip(callId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageableResponseBean<List<CallDetailsResponseBean>> getAllCallsByPagination(HttpServletRequest request,Long companyId , Boolean onlyPreferredCall, CallPageableRequestBean callPageableRequestBean) {
|
||||||
|
UserEntity user = validator.validateUser(request);
|
||||||
|
return callDao.getAllCallsByPagination(request,user,companyId,onlyPreferredCall,callPageableRequestBean);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,17 @@ package net.gepafin.tendermanagement.service.impl;
|
|||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.gepafin.tendermanagement.dao.NotificationDao;
|
import net.gepafin.tendermanagement.dao.NotificationDao;
|
||||||
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||||
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.GlobalFilters;
|
||||||
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
||||||
|
import net.gepafin.tendermanagement.model.request.NotificationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
import net.gepafin.tendermanagement.service.NotificationService;
|
import net.gepafin.tendermanagement.service.NotificationService;
|
||||||
|
import net.gepafin.tendermanagement.util.Validator;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -21,6 +27,9 @@ public class NotificationServiceImpl implements NotificationService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private NotificationDao notificationDao;
|
private NotificationDao notificationDao;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Validator validator;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NotificationResponse sendNotification(Long userId, NotificationReq notificationReq, Long companyId) {
|
public NotificationResponse sendNotification(Long userId, NotificationReq notificationReq, Long companyId) {
|
||||||
|
|
||||||
@@ -59,4 +68,10 @@ public class NotificationServiceImpl implements NotificationService {
|
|||||||
public List<NotificationResponse> getNotificationsByCompanyIdAndUserId(Long userId, Long companyId, List<NotificationEnum> statuses) {
|
public List<NotificationResponse> getNotificationsByCompanyIdAndUserId(Long userId, Long companyId, List<NotificationEnum> statuses) {
|
||||||
return notificationDao.getNotificationByCompanyIdAndUserId(userId, companyId, statuses);
|
return notificationDao.getNotificationByCompanyIdAndUserId(userId, companyId, statuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageableResponseBean<List<NotificationResponse>> getAllNotification(HttpServletRequest request, Long userId, NotificationRequestBean notificationRequestBean) {
|
||||||
|
UserEntity userEntity = validator.validateUser(request);
|
||||||
|
return notificationDao.getAllNotification(userId,notificationRequestBean);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -25,6 +25,7 @@ import jakarta.persistence.OneToMany;
|
|||||||
import jakarta.persistence.OneToOne;
|
import jakarta.persistence.OneToOne;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
|
import net.gepafin.tendermanagement.model.request.GlobalFilters;
|
||||||
import org.apache.commons.collections4.MapUtils;
|
import org.apache.commons.collections4.MapUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -690,4 +691,16 @@ public class Utils {
|
|||||||
public static String createChannelForUserAndCompany(Long userId, Long companyId) {
|
public static String createChannelForUserAndCompany(Long userId, Long companyId) {
|
||||||
return GepafinConstant.COMMON_SINGLE_CHANNEL_PREFIX + userId + GepafinConstant.COMPANY_PREFIX + companyId;
|
return GepafinConstant.COMMON_SINGLE_CHANNEL_PREFIX + userId + GepafinConstant.COMPANY_PREFIX + companyId;
|
||||||
}
|
}
|
||||||
|
public static GlobalFilters setPageNumberAndLimit(GlobalFilters globalFilters){
|
||||||
|
if (globalFilters == null) {
|
||||||
|
if (globalFilters.getLimit() == null || globalFilters.getLimit() <= 0) {
|
||||||
|
globalFilters.setLimit(GepafinConstant.DEFAULT_PAGE_LIMIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (globalFilters.getPage() == null || globalFilters.getPage() <= 0) {
|
||||||
|
globalFilters.setPage(GepafinConstant.DEFAULT_PAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return globalFilters;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,9 @@ package net.gepafin.tendermanagement.web.rest.api;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.gepafin.tendermanagement.model.request.ApplicationPageableRequestBean;
|
||||||
|
import net.gepafin.tendermanagement.model.request.NotificationRequestBean;
|
||||||
|
import net.gepafin.tendermanagement.model.response.*;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@@ -19,12 +22,6 @@ import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
|||||||
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationGetResponseBean;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponseBean;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationSignedDocumentResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.CompanyDelegationResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.util.Response;
|
import net.gepafin.tendermanagement.model.util.Response;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants;
|
import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants;
|
||||||
|
|
||||||
@@ -59,7 +56,7 @@ public interface ApplicationApi {
|
|||||||
@GetMapping(value = "/{applicationId}", produces = "application/json")
|
@GetMapping(value = "/{applicationId}", produces = "application/json")
|
||||||
ResponseEntity<Response<ApplicationGetResponseBean>> getApplicationByFormId(HttpServletRequest request, @Parameter(description = "The application id", required = true) @PathVariable(value = "applicationId", required = true) Long applicationId,@Parameter(description = "The form id", required = false) @RequestParam(value = "formId",required = false) Long formId);
|
ResponseEntity<Response<ApplicationGetResponseBean>> getApplicationByFormId(HttpServletRequest request, @Parameter(description = "The application id", required = true) @PathVariable(value = "applicationId", required = true) Long applicationId,@Parameter(description = "The form id", required = false) @RequestParam(value = "formId",required = false) Long formId);
|
||||||
|
|
||||||
@Operation(summary = "Api to get all applications",
|
@Operation(summary = "Api to get all applications (deprecated)",
|
||||||
responses = {
|
responses = {
|
||||||
@ApiResponse(responseCode = "200", description = "OK"),
|
@ApiResponse(responseCode = "200", description = "OK"),
|
||||||
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
|
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
|
||||||
@@ -213,5 +210,18 @@ public interface ApplicationApi {
|
|||||||
@GetMapping(value = "/{applicationId}/documents/zip")
|
@GetMapping(value = "/{applicationId}/documents/zip")
|
||||||
ResponseEntity<byte[]> downloadApplicationDocumentsAsZip(HttpServletRequest httpServletRequest,
|
ResponseEntity<byte[]> downloadApplicationDocumentsAsZip(HttpServletRequest httpServletRequest,
|
||||||
@Parameter(required = true) @PathVariable("applicationId") Long applicationId);
|
@Parameter(required = true) @PathVariable("applicationId") Long applicationId);
|
||||||
|
|
||||||
|
|
||||||
|
@Operation(summary = "Api to get all application by pagination.", responses = { @ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.NOTFOUND_ERROR_EXAMPLE))),
|
||||||
|
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE))),
|
||||||
|
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.BADREQUEST_ERROR_EXAMPLE))) })
|
||||||
|
@PostMapping( value = "/pagination", consumes = "application/json", produces = "application/json")
|
||||||
|
ResponseEntity<Response<PageableResponseBean<List<ApplicationResponse>>>> getAllApplicationByPagination(HttpServletRequest request,@Parameter(description = "The call id", required = false) @RequestParam(value = "callId", required = false) Long callId,
|
||||||
|
@Parameter(description = "The company id", required = false) @RequestParam(value = "companyId", required = false) Long companyId, @RequestBody ApplicationPageableRequestBean applicationPageableRequestBean);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ package net.gepafin.tendermanagement.web.rest.api;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.CallPageableRequestBean;
|
||||||
|
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
@@ -89,7 +92,7 @@ public interface CallApi {
|
|||||||
@Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId,@RequestParam(value = "companyId", required = false) Long companyId);
|
@Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId,@RequestParam(value = "companyId", required = false) Long companyId);
|
||||||
|
|
||||||
|
|
||||||
@Operation(summary = "Api to get all calls",
|
@Operation(summary = "Api to get all calls (deprecated)",
|
||||||
responses = {
|
responses = {
|
||||||
@ApiResponse(responseCode = "200", description = "OK"),
|
@ApiResponse(responseCode = "200", description = "OK"),
|
||||||
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
|
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
|
||||||
@@ -149,4 +152,17 @@ public interface CallApi {
|
|||||||
ResponseEntity<byte[]> downloadCallDocumentsAsZip(HttpServletRequest httpServletRequest,
|
ResponseEntity<byte[]> downloadCallDocumentsAsZip(HttpServletRequest httpServletRequest,
|
||||||
@Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId);
|
@Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId);
|
||||||
|
|
||||||
|
|
||||||
|
@Operation(summary = "Api to get all calls by pagination.", responses = { @ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.NOTFOUND_ERROR_EXAMPLE))),
|
||||||
|
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE))),
|
||||||
|
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.BADREQUEST_ERROR_EXAMPLE))) })
|
||||||
|
@PostMapping(value = "/pagination", consumes = "application/json", produces = "application/json")
|
||||||
|
ResponseEntity<Response<PageableResponseBean<List<CallDetailsResponseBean>>>> getAllCallsByPagination(HttpServletRequest request,@RequestParam(value = "companyId", required = false) Long companyId , @RequestParam(value = "onlyPreferredCall", required = false, defaultValue = "false") Boolean onlyPreferredCall, @RequestBody CallPageableRequestBean callPageableRequestBean);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,14 @@ import io.swagger.v3.oas.annotations.media.ExampleObject;
|
|||||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.GlobalFilters;
|
||||||
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
||||||
|
import net.gepafin.tendermanagement.model.request.NotificationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
import net.gepafin.tendermanagement.model.util.Response;
|
import net.gepafin.tendermanagement.model.util.Response;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants;
|
import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
@@ -96,6 +100,16 @@ public interface NotificationApi {
|
|||||||
@Parameter(description = "The company ID", required = true) @PathVariable(value = "companyId") Long companyId,
|
@Parameter(description = "The company ID", required = true) @PathVariable(value = "companyId") Long companyId,
|
||||||
@Parameter(description = "The notification status", required = false) @RequestParam(value = "status", required = false) List<NotificationEnum> statuses);
|
@Parameter(description = "The notification status", required = false) @RequestParam(value = "status", required = false) List<NotificationEnum> statuses);
|
||||||
|
|
||||||
|
@Operation(summary = "Api to get all notification by pagination.", responses = { @ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.NOTFOUND_ERROR_EXAMPLE))),
|
||||||
|
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE))),
|
||||||
|
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value =
|
||||||
|
ErrorConstants.BADREQUEST_ERROR_EXAMPLE))) })
|
||||||
|
@PostMapping(value = "/user/{userId}/pagination", consumes = "application/json", produces = "application/json")
|
||||||
|
ResponseEntity<Response<PageableResponseBean<List<NotificationResponse>>>> getAllNotification(HttpServletRequest request,@Parameter(description = "The user id", required = true) @PathVariable(value = "userId") Long userId, @RequestBody NotificationRequestBean notificationRequestBean);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,16 +5,13 @@ import net.gepafin.tendermanagement.config.Translator;
|
|||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.enums.UserActionContextEnum;
|
import net.gepafin.tendermanagement.enums.UserActionContextEnum;
|
||||||
import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
|
import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.ApplicationPageableRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
|
||||||
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
import net.gepafin.tendermanagement.enums.FormActionEnum;
|
||||||
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
||||||
import net.gepafin.tendermanagement.model.request.UserActionRequest;
|
import net.gepafin.tendermanagement.model.request.UserActionRequest;
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationGetResponseBean;
|
import net.gepafin.tendermanagement.model.response.*;
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationResponseBean;
|
|
||||||
import net.gepafin.tendermanagement.model.response.ApplicationSignedDocumentResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse;
|
|
||||||
import net.gepafin.tendermanagement.model.util.Response;
|
import net.gepafin.tendermanagement.model.util.Response;
|
||||||
import net.gepafin.tendermanagement.service.ApplicationService;
|
import net.gepafin.tendermanagement.service.ApplicationService;
|
||||||
import net.gepafin.tendermanagement.service.PdfService;
|
import net.gepafin.tendermanagement.service.PdfService;
|
||||||
@@ -229,4 +226,15 @@ public class ApplicationApiController implements ApplicationApi {
|
|||||||
return new ResponseEntity<>(zipFile, headers, HttpStatus.OK);
|
return new ResponseEntity<>(zipFile, headers, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<Response<PageableResponseBean<List<ApplicationResponse>>>> getAllApplicationByPagination(HttpServletRequest request, Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean) {
|
||||||
|
|
||||||
|
/** This code is responsible for creating user action logs for the "get all notification by pagination" operation. **/
|
||||||
|
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_ALL_APPLICATION_BY_PAGINATION).build());
|
||||||
|
|
||||||
|
PageableResponseBean<List<ApplicationResponse>> pageableResponseBean=applicationService
|
||||||
|
.getAllApplicationByPagination(request, callId,companyId,applicationPageableRequestBean);
|
||||||
|
return ResponseEntity.status(HttpStatus.OK).body(new Response<>(pageableResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG)));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ import java.util.List;
|
|||||||
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
||||||
import net.gepafin.tendermanagement.enums.UserActionContextEnum;
|
import net.gepafin.tendermanagement.enums.UserActionContextEnum;
|
||||||
import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
|
import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
|
||||||
import net.gepafin.tendermanagement.model.request.UserActionRequest;
|
import net.gepafin.tendermanagement.model.request.*;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
import net.gepafin.tendermanagement.util.LoggingUtil;
|
import net.gepafin.tendermanagement.util.LoggingUtil;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
@@ -14,14 +15,12 @@ import org.springframework.http.MediaType;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
|
|
||||||
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
|
|
||||||
import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1;
|
|
||||||
import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean;
|
import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean;
|
||||||
import net.gepafin.tendermanagement.model.response.CallResponse;
|
import net.gepafin.tendermanagement.model.response.CallResponse;
|
||||||
import net.gepafin.tendermanagement.model.util.Response;
|
import net.gepafin.tendermanagement.model.util.Response;
|
||||||
@@ -151,5 +150,16 @@ public class CallApiController implements CallApi {
|
|||||||
return new ResponseEntity<>(zipFile, headers, HttpStatus.OK);
|
return new ResponseEntity<>(zipFile, headers, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<Response<PageableResponseBean<List<CallDetailsResponseBean>>>> getAllCallsByPagination(HttpServletRequest request, Long companyId , Boolean onlyPreferredCall, CallPageableRequestBean callPageableRequestBean) {
|
||||||
|
|
||||||
|
/** This code is responsible for creating user action logs for the "get all call by pagination" operation. **/
|
||||||
|
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_ALL_CALL_BY_PAGINATION).build());
|
||||||
|
|
||||||
|
PageableResponseBean<List<CallDetailsResponseBean>> callsByPagination=callService.getAllCallsByPagination(request,companyId,onlyPreferredCall,callPageableRequestBean);
|
||||||
|
return ResponseEntity.status(HttpStatus.OK)
|
||||||
|
.body(new Response<>(callsByPagination, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_FETCH_SUCCESS_MSG)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,13 +4,21 @@ import jakarta.servlet.http.HttpServletRequest;
|
|||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
import net.gepafin.tendermanagement.enums.NotificationEnum;
|
||||||
|
import net.gepafin.tendermanagement.enums.UserActionContextEnum;
|
||||||
|
import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
|
||||||
|
import net.gepafin.tendermanagement.model.request.GlobalFilters;
|
||||||
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
import net.gepafin.tendermanagement.model.request.NotificationReq;
|
||||||
|
import net.gepafin.tendermanagement.model.request.NotificationRequestBean;
|
||||||
|
import net.gepafin.tendermanagement.model.request.UserActionRequest;
|
||||||
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
import net.gepafin.tendermanagement.model.response.NotificationResponse;
|
||||||
|
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
|
||||||
import net.gepafin.tendermanagement.model.util.Response;
|
import net.gepafin.tendermanagement.model.util.Response;
|
||||||
import net.gepafin.tendermanagement.service.NotificationService;
|
import net.gepafin.tendermanagement.service.NotificationService;
|
||||||
|
import net.gepafin.tendermanagement.util.LoggingUtil;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.NotificationApi;
|
import net.gepafin.tendermanagement.web.rest.api.NotificationApi;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@@ -25,6 +33,9 @@ public class NotificationApiController implements NotificationApi {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private NotificationService notificationService;
|
private NotificationService notificationService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
LoggingUtil loggingUtil;
|
||||||
|
|
||||||
public ResponseEntity<Response<NotificationResponse>> sendNotification(HttpServletRequest request, NotificationReq notificationReq, Long userId, Long companyId) {
|
public ResponseEntity<Response<NotificationResponse>> sendNotification(HttpServletRequest request, NotificationReq notificationReq, Long userId, Long companyId) {
|
||||||
|
|
||||||
NotificationResponse notificationData = notificationService.sendNotification(userId, notificationReq, companyId);
|
NotificationResponse notificationData = notificationService.sendNotification(userId, notificationReq, companyId);
|
||||||
@@ -71,4 +82,14 @@ public class NotificationApiController implements NotificationApi {
|
|||||||
.body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY)));
|
.body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<Response<PageableResponseBean<List<NotificationResponse>>>> getAllNotification(HttpServletRequest request,Long userId, NotificationRequestBean notificationRequestBean) {
|
||||||
|
|
||||||
|
/** This code is responsible for creating user action logs for the "get all notification by pagination" operation. **/
|
||||||
|
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_ALL_NOTIFICATION_BY_PAGINATION).build());
|
||||||
|
|
||||||
|
PageableResponseBean<List<NotificationResponse>> notificationResponses=notificationService.getAllNotification(request, userId,notificationRequestBean);
|
||||||
|
return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY)));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user