|
|
|
@@ -49,7 +49,9 @@ import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
import java.text.MessageFormat;
|
|
|
|
import java.text.MessageFormat;
|
|
|
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
|
|
|
import java.time.LocalTime;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.zip.ZipEntry;
|
|
|
|
import java.util.zip.ZipEntry;
|
|
|
|
@@ -870,7 +872,7 @@ public class ApplicationDao {
|
|
|
|
ApplicationRequest applicationRequest, Long callId, UserEntity userEntity) {
|
|
|
|
ApplicationRequest applicationRequest, Long callId, UserEntity userEntity) {
|
|
|
|
CallEntity call = callService.validateCall(callId);
|
|
|
|
CallEntity call = callService.validateCall(callId);
|
|
|
|
UserWithCompanyEntity userWithCompanyEntity=companyService.getUserWithCompany(userEntity.getId(),companyEntity.getId());
|
|
|
|
UserWithCompanyEntity userWithCompanyEntity=companyService.getUserWithCompany(userEntity.getId(),companyEntity.getId());
|
|
|
|
|
|
|
|
checkCallEndDate(call);
|
|
|
|
// call = callService.validatePublishedCall(call.getId());
|
|
|
|
// call = callService.validatePublishedCall(call.getId());
|
|
|
|
// checkIfApplicationExists(call, userWithCompanyEntity, userEntity);
|
|
|
|
// checkIfApplicationExists(call, userWithCompanyEntity, userEntity);
|
|
|
|
ApplicationEntity applicationEntity = createApplicationEntity(userEntity, call, userWithCompanyEntity);
|
|
|
|
ApplicationEntity applicationEntity = createApplicationEntity(userEntity, call, userWithCompanyEntity);
|
|
|
|
@@ -888,7 +890,7 @@ public class ApplicationDao {
|
|
|
|
public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) {
|
|
|
|
public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) {
|
|
|
|
|
|
|
|
|
|
|
|
ApplicationEntity applicationEntity = validateApplication(applicationId);
|
|
|
|
ApplicationEntity applicationEntity = validateApplication(applicationId);
|
|
|
|
|
|
|
|
checkCallEndDate(applicationEntity.getCall());
|
|
|
|
//cloned entity for old application data
|
|
|
|
//cloned entity for old application data
|
|
|
|
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity);
|
|
|
|
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity);
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1117,7 +1119,7 @@ public class ApplicationDao {
|
|
|
|
public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId,
|
|
|
|
public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId,
|
|
|
|
MultipartFile file) {
|
|
|
|
MultipartFile file) {
|
|
|
|
ApplicationEntity applicationEntity = validateApplication(applicationId);
|
|
|
|
ApplicationEntity applicationEntity = validateApplication(applicationId);
|
|
|
|
|
|
|
|
checkCallEndDate(applicationEntity.getCall());
|
|
|
|
//cloned entity for old data
|
|
|
|
//cloned entity for old data
|
|
|
|
ApplicationEntity oldApplicationData = Utils.getClonedEntityForData(applicationEntity);
|
|
|
|
ApplicationEntity oldApplicationData = Utils.getClonedEntityForData(applicationEntity);
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1250,7 +1252,8 @@ public class ApplicationDao {
|
|
|
|
|
|
|
|
|
|
|
|
ApplicationEntity applicationEntity = validateApplication(applicationId);
|
|
|
|
ApplicationEntity applicationEntity = validateApplication(applicationId);
|
|
|
|
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity);
|
|
|
|
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity);
|
|
|
|
|
|
|
|
checkCallEndDate(applicationEntity.getCall());
|
|
|
|
|
|
|
|
|
|
|
|
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
|
|
|
|
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
|
|
|
|
validator.validateUserWithCompany(request, applicationEntity.getCompanyId());
|
|
|
|
validator.validateUserWithCompany(request, applicationEntity.getCompanyId());
|
|
|
|
if (Boolean.FALSE.equals(ApplicationStatusTypeEnum.DRAFT.getValue().equals(applicationEntity.getStatus()))) {
|
|
|
|
if (Boolean.FALSE.equals(ApplicationStatusTypeEnum.DRAFT.getValue().equals(applicationEntity.getStatus()))) {
|
|
|
|
@@ -1391,4 +1394,144 @@ 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;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void checkCallEndDate(CallEntity call) {
|
|
|
|
|
|
|
|
LocalDateTime now = DateTimeUtil.DateServerToUTC(LocalDateTime.now());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LocalDateTime callEndDateTime = LocalDateTime.of(
|
|
|
|
|
|
|
|
call.getEndDate().toLocalDate(),
|
|
|
|
|
|
|
|
call.getEndTime()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (now.isAfter(callEndDateTime)) {
|
|
|
|
|
|
|
|
throw new CustomValidationException(
|
|
|
|
|
|
|
|
Status.BAD_REQUEST,
|
|
|
|
|
|
|
|
Translator.toLocale(GepafinConstant.CALL_END_DATE_PASSED)
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|