Resolved conflicts

This commit is contained in:
nisha
2025-02-24 18:10:28 +05:30
72 changed files with 1278 additions and 181 deletions

View File

@@ -6,7 +6,7 @@ public class AppointmentApiConstant {
public static final String GET_NDG_BY_VAT_NUMBER = "/WSAnagrafica.getListaNdg"; public static final String GET_NDG_BY_VAT_NUMBER = "/WSAnagrafica.getListaNdg";
public static final String CREATE_VISURA = "/WSAnagrafica.createVisura"; public static final String CREATE_VISURA = "/WSAnagrafica.createVisura";
public static final String GET_VISURA_LIST = "/WSAnagrafica.getVisuraList"; public static final String GET_VISURA_LIST = "/WSAnagrafica.getVisuraList";
public static final String GET_APPOINTMENT_TEMPLATE = "/WSCrmConsulenza.getAppuntamentoTemplate?idAppuntamentoTemplate=7"; public static final String GET_APPOINTMENT_TEMPLATE = "/WSCrmConsulenza.getAppuntamentoTemplate";
public static final String CREATE_APPOINTMENT_FROM_TEMPLATE = "/WSCrmConsulenza.createAppointmentFromTemplate"; public static final String CREATE_APPOINTMENT_FROM_TEMPLATE = "/WSCrmConsulenza.createAppointmentFromTemplate";
public static final String UPLOAD_APOOINTMENT_DOCUMENT = "/WSDocumentDetail.createStream"; public static final String UPLOAD_APOOINTMENT_DOCUMENT = "/WSDocumentDetail.createStream";
@@ -24,4 +24,18 @@ public class AppointmentApiConstant {
public static final boolean IS_FROM_RATING = Boolean.FALSE; public static final boolean IS_FROM_RATING = Boolean.FALSE;
public static final boolean IS_ANAGRAFICA_LEGAME = Boolean.FALSE; public static final boolean IS_ANAGRAFICA_LEGAME = Boolean.FALSE;
//Appointment creation request body fields
public static final String MOTIVAZIONE = "motivazione";
public static final String PRODOTTO = "prodotto";
public static final String COD_ABI = "codAbi";
public static final String COD_CAB = "codCab";
public static final String ID_NOTA = "idNota";
public static final String IMPORTO_AGEVOLATO = "importoAgevolato";
public static final String IMPORTO_MEDIOLUNGO_TERMINE = "importoMedioLungoTermine";
public static final String COD_TIPO_PRODOTTO = "codTipoProdotto";
public static final String COD_CATEGORIA_PRODOTTO = "codCategoriaProdotto";
public static final String COD_FORMATECNICA = "codFormaTecnica";
public static final String COD_OPERAZIONE = "codOperazione";
public static final String MOTIVAZIONE_ID = "id";
public static final String PRODOTTO_CODE = "code";
} }

View File

@@ -332,7 +332,7 @@ public class GepafinConstant {
public static final String DATA_STRING = "data"; public static final String DATA_STRING = "data";
public static final String DOCUMENT_ATTACHMENT_ID_STRING = "documentAttachmentId"; public static final String DOCUMENT_ATTACHMENT_ID_STRING = "documentAttachmentId";
public static final String TEMP_FILE_PATH = "/tmp/"; public static final String TEMP_FILE_PATH = "/tmp/";
public static final String RICHIESTA_CLIENTE_STRING = "richiestaCliente"; public static final String RICHIESTE_CLIENTE_STRING = "richiesteCliente";
public static final String ID_STRING = "id"; public static final String ID_STRING = "id";
public static final String NULL_STRING = "null"; public static final String NULL_STRING = "null";
public static final String NDG_STRING = "ndg"; public static final String NDG_STRING = "ndg";
@@ -391,6 +391,16 @@ public class GepafinConstant {
public static final String NON_EMPTY_TABLES="nonEmptyTables"; public static final String NON_EMPTY_TABLES="nonEmptyTables";
public static final String VALIDATION_IN_TABLE = "validation.table.message"; public static final String VALIDATION_IN_TABLE = "validation.table.message";
public static final String CALL_EXPIRED="call.expired"; public static final String CALL_EXPIRED="call.expired";
public static final String PROTOCOL="protocol";
public static final String PROTOCOL_NUMBER="protocolNumber";
public static final String NOTE="note";
public static final String INTERNAL_NOTE="internalNote";
public static final String ACTION_TYPE="actionType";
public static final String ACTION_CONTEXT="actionContext";
public static final String METHOD_TYPE="methodType";
public static final String AMOUNT_REQUEST_SHOULD_GREATED_THEN_ZERO = "amount.request.should.greated.then.zero"; public static final String AMOUNT_REQUEST_SHOULD_GREATED_THEN_ZERO = "amount.request.should.greated.then.zero";
@@ -436,6 +446,13 @@ public class GepafinConstant {
public static final String APPOINTMENT_CANNOT_BE_CREATED = "appointment.cannot.be.created";
public static final String APPOINTMENT_NOT_CREATED = "appointment.not.created";
public static final String SWITCH="switch";
public static final String IS_CHECK_LIST_ITEM="isChecklistItem";
public static final String VALIDATION_FAILED_FOR_CHECKLIST="validation.failed.checklist";
} }

View File

@@ -2,8 +2,10 @@ package net.gepafin.tendermanagement.dao;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Join; import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
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;
@@ -12,6 +14,7 @@ import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEm
import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
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;
@@ -25,6 +28,8 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
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;
@@ -37,6 +42,7 @@ import java.util.stream.Collectors;
import static java.time.temporal.ChronoUnit.DAYS; import static java.time.temporal.ChronoUnit.DAYS;
import static net.gepafin.tendermanagement.util.Utils.log; import static net.gepafin.tendermanagement.util.Utils.log;
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
import static org.apache.commons.lang3.StringUtils.isEmpty;
@Component @Component
public class ApplicationAmendmentRequestDao { public class ApplicationAmendmentRequestDao {
@@ -119,6 +125,15 @@ public class ApplicationAmendmentRequestDao {
@Autowired @Autowired
private UserRepository userRepository; private UserRepository userRepository;
@Autowired
private EvaluationFormRepository evaluationFormRepository;
@Autowired
private ApplicationEvaluationFormFieldRepository applicationEvaluationFormFieldRepository;
@Autowired
private ApplicationEvaluationFormRepository applicationEvaluationFormRepository;
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(Long applicationEvaluationId) { public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(Long applicationEvaluationId) {
log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId); log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId);
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId); ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId);
@@ -132,16 +147,10 @@ public class ApplicationAmendmentRequestDao {
if(file != null){ if(file != null){
evaluationFileRequests=Utils.convertJsonStringToList(file,FieldRequest.class); evaluationFileRequests=Utils.convertJsonStringToList(file,FieldRequest.class);
} }
Boolean allValid = evaluationFileRequests.stream() if(applicationEvaluationEntity.getEvaluationVersion().equals(EvaluationVersionEnum.V1.getValue())) {
.anyMatch(fieldRequest -> fieldRequest.getValid() == null); checklistValidationForEvaluationV1(evaluationFileRequests, checkList, checklistRequests);
if(checkList != null) { } else if (applicationEvaluationEntity.getEvaluationVersion().equals(EvaluationVersionEnum.V2.getValue())) {
checklistRequests=Utils.convertJsonStringToList(checkList,ChecklistRequest.class); validationCheckEvaluationV2(applicationEvaluationEntity, application);
}
boolean resultCheckList = checklistRequests.stream()
.anyMatch(checklistRequest -> Boolean.TRUE.equals(checklistRequest.getValid())) ? false : true;
if(Boolean.TRUE.equals(allValid) || Boolean.TRUE.equals(resultCheckList)){
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.All_DOCUMENT_CHECKED_AND_ONE_CHECKLIST_CHECKED));
} }
// Set common application-level details // Set common application-level details
String callName = application.getCall().getName(); String callName = application.getCall().getName();
@@ -186,6 +195,47 @@ public class ApplicationAmendmentRequestDao {
return response; return response;
} }
private void validationCheckEvaluationV2(ApplicationEvaluationEntity applicationEvaluationEntity, ApplicationEntity application) {
Long callId= applicationEvaluationEntity.getAssignedApplicationsEntity().getApplication().getCall().getId();
EvaluationFormEntity evaluationFormEntity=evaluationFormRepository.findByCallIdAndIsDeletedFalse(callId);
Long numberOfCheck= application.getCall().getNumberOfCheck();
ApplicationEvaluationFormEntity applicationEvaluationForm=applicationEvaluationFormRepository.findByApplicationEvaluation_IdAndIsDeletedFalse(applicationEvaluationEntity.getId());
List<ContentResponseBean> contentResponseBeans=Utils.convertJsonStringToList(evaluationFormEntity.getContent(),ContentResponseBean.class);
int count = 0;
for (ContentResponseBean content : contentResponseBeans) {
if (GepafinConstant.SWITCH.equals(content.getName()) && content.getSettings().stream()
.anyMatch(setting -> GepafinConstant.IS_CHECK_LIST_ITEM.equals(setting.getName()))) {
ApplicationEvaluationFormFieldEntity field = applicationEvaluationFormFieldRepository
.findByFieldIdAndApplicationEvaluationFormId(content.getId(), applicationEvaluationForm.getId());
if (field != null && Utils.isValidBoolean(field.getFieldValue())) {
Boolean fieldValueAsBoolean = Boolean.parseBoolean(field.getFieldValue());
if (Boolean.FALSE.equals(fieldValueAsBoolean)) {
throw new CustomValidationException(Status.VALIDATION_ERROR,GepafinConstant.VALIDATION_FAILED_FOR_CHECKLIST);
}
if (++count >= numberOfCheck) break;
}
}
}
}
private static void checklistValidationForEvaluationV1(List<FieldRequest> evaluationFileRequests, String checkList, List<ChecklistRequest> checklistRequests) {
Boolean allValid = evaluationFileRequests.stream()
.anyMatch(fieldRequest -> fieldRequest.getValid() == null);
if(checkList != null) {
checklistRequests =Utils.convertJsonStringToList(checkList,ChecklistRequest.class);
}
boolean resultCheckList = checklistRequests.stream()
.anyMatch(checklistRequest -> Boolean.TRUE.equals(checklistRequest.getValid())) ? false : true;
if(Boolean.TRUE.equals(allValid) || Boolean.TRUE.equals(resultCheckList)){
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.All_DOCUMENT_CHECKED_AND_ONE_CHECKLIST_CHECKED));
}
}
public List<AmendmentFormFieldResponse> getIdAndLabelFromResult(List<Map<String, Object>> result) { public List<AmendmentFormFieldResponse> getIdAndLabelFromResult(List<Map<String, Object>> result) {
List<AmendmentFormFieldResponse> formFieldResponses = new ArrayList<>(); List<AmendmentFormFieldResponse> formFieldResponses = new ArrayList<>();
@@ -1083,7 +1133,7 @@ public class ApplicationAmendmentRequestDao {
List<ApplicationAmendmentRequestResponse> response = new ArrayList<>(); List<ApplicationAmendmentRequestResponse> response = new ArrayList<>();
if (applicationAmendmentRequestEntity != null) { if (applicationAmendmentRequestEntity != null) {
response = applicationAmendmentRequestEntity.stream() response = applicationAmendmentRequestEntity.stream()
.map(entity -> convertEntityToResponse(entity, false)) .map(entity -> convertEntityToResponse(entity, true))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
return response; return response;
@@ -1214,4 +1264,118 @@ public class ApplicationAmendmentRequestDao {
documentService.deleteFile(documentId); documentService.deleteFile(documentId);
} }
public PageableResponseBean<List<ApplicationAmendmentRequestResponse>> getApplicationAmendmentByPaginnation(Long userId, ApplicationAmendmentPaginationRequestBean applicationAmendmentPaginationRequestBean) {
Integer pageNo = null;
Integer pageLimit = null;
if (applicationAmendmentPaginationRequestBean.getGlobalFilters() != null) {
pageNo = applicationAmendmentPaginationRequestBean.getGlobalFilters().getPage();
pageLimit = applicationAmendmentPaginationRequestBean.getGlobalFilters().getLimit();
}
if (pageLimit == null || pageLimit <= 0) {
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
}
if (pageNo == null || pageNo <= 0) {
pageNo = GepafinConstant.DEFAULT_PAGE;
}
Specification<ApplicationAmendmentRequestEntity> spec = searchPagination(userId,applicationAmendmentPaginationRequestBean);
Page<ApplicationAmendmentRequestEntity> entityPage = applicationAmendmentRequestRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit));
List<ApplicationAmendmentRequestResponse> applicationResponses = entityPage.getContent().stream()
.map(application -> {
ApplicationAmendmentRequestResponse response = convertEntityToResponse(application,false);
return response;
})
.collect(Collectors.toList());
PageableResponseBean<List<ApplicationAmendmentRequestResponse>> 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<ApplicationAmendmentRequestEntity> searchPagination(Long userId,ApplicationAmendmentPaginationRequestBean applicationAmendmentPaginationRequestBean) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = getPredicates(applicationAmendmentPaginationRequestBean, criteriaBuilder, root,userId);
SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true);
if (applicationAmendmentPaginationRequestBean .getGlobalFilters() != null
&& applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy() != null &&
applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals(
isEmpty(applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName()))) {
sortBy.setColumnName(applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName());
sortBy.setSortDesc(true);
if (applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) {
sortBy.setSortDesc(applicationAmendmentPaginationRequestBean.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(ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean,
CriteriaBuilder criteriaBuilder, Root<ApplicationAmendmentRequestEntity> root,Long userId) {
Integer year = null;
String search = null;
if (amendmentPaginationRequestBean.getGlobalFilters() != null) {
year = amendmentPaginationRequestBean.getGlobalFilters().getYear();
search = amendmentPaginationRequestBean.getGlobalFilters().getSearch();
}
List<Predicate> predicates = new ArrayList<>();
if (year != null && year > 0) {
int filterYear = amendmentPaginationRequestBean.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 notePredicate = criteriaBuilder.like(
criteriaBuilder.upper(root.get(GepafinConstant.NOTE)),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(notePredicate));
Predicate internalNotePredicate = criteriaBuilder.like(
criteriaBuilder.upper(root.get(GepafinConstant.INTERNAL_NOTE)),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(internalNotePredicate));
}
// Filter by `status` (if status list is provided)
if (amendmentPaginationRequestBean.getStatus() != null && !amendmentPaginationRequestBean.getStatus().isEmpty()) {
List<String> statusValues = amendmentPaginationRequestBean.getStatus().stream()
.map(ApplicationAmendmentRequestEnum::name) // Convert enum to string
.toList();
predicates.add(root.get(GepafinConstant.STATUS).in(statusValues));
}
if(Boolean.TRUE.equals(validator.checkIsBeneficiary())) {
predicates.add(root.get("applicationEvaluationEntity").get("assignedApplicationsEntity").get("application").get("userId").in(userId));
}
if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) {
predicates.add(root.get("applicationEvaluationEntity").get("assignedApplicationsEntity").get("userId").in(userId));
}
return predicates;
}
} }

View File

@@ -117,8 +117,8 @@ public class ApplicationDao {
@Autowired @Autowired
private AssignedApplicationsRepository assignedApplicationsRepository; private AssignedApplicationsRepository assignedApplicationsRepository;
@Value("${default_System_Receiver_Email}") // @Value("${default_System_Receiver_Email}")
private String defaultSystemReceiverEmail; // private String defaultSystemReceiverEmail;
@Value("${rinaldo_email}") @Value("${rinaldo_email}")
private String rinaldoEmail; private String rinaldoEmail;
@@ -1132,22 +1132,28 @@ public class ApplicationDao {
// mailUtil.sendByMailGun(subject, body, List.of(defaultSystemReceiverEmail), null); // mailUtil.sendByMailGun(subject, body, List.of(defaultSystemReceiverEmail), null);
// mailUtil.sendByMailGun(subject, body, List.of(gepafinEmail), null); // mailUtil.sendByMailGun(subject, body, List.of(gepafinEmail), null);
// mailUtil.sendByMailGun(subject, body, List.of(rinaldoEmail), null); // mailUtil.sendByMailGun(subject, body, List.of(rinaldoEmail), null);
if(Boolean.TRUE.equals(hub.getUniqueUuid().equals(defaultHubUuid))) { // if(Boolean.TRUE.equals(hub.getUniqueUuid().equals(defaultHubUuid))) {
if (validator.isProductionProfileActivated()) { // if (validator.isProductionProfileActivated()) {
emailLogRequest.setRecipientEmails(carloEmail); // emailLogRequest.setRecipientEmails(carloEmail);
// mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null); //// mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest); // emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest);
} // }
List<String> listDefaultSystemReceiverEmail = Arrays.stream(defaultSystemReceiverEmail.split(",")) // List<String> listDefaultSystemReceiverEmail = Arrays.stream(defaultSystemReceiverEmail.split(","))
.map(String::trim) // .map(String::trim)
.filter(email -> !email.isEmpty()) // .filter(email -> !email.isEmpty())
.toList(); // .toList();
//
// emailLogRequest.setRecipientEmails(defaultSystemReceiverEmail);
// emailNotificationDao.sendMail(hub.getId(), subject, body, listDefaultSystemReceiverEmail, emailLogRequest);
// }
List<String> hubEmails = Arrays.stream(hub.getEmail().split(","))
.map(String::trim)
.filter(email -> !email.isEmpty())
.toList();
emailLogRequest.setRecipientEmails(defaultSystemReceiverEmail);
emailNotificationDao.sendMail(hub.getId(), subject, body, listDefaultSystemReceiverEmail, emailLogRequest);
}
emailLogRequest.setRecipientEmails(hub.getEmail()); emailLogRequest.setRecipientEmails(hub.getEmail());
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(hub.getEmail()),emailLogRequest); emailNotificationDao.sendMail(hub.getId(), subject, body,hubEmails,emailLogRequest);
emailLogRequest.setRecipientEmails(rinaldoEmail); emailLogRequest.setRecipientEmails(rinaldoEmail);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLogRequest); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLogRequest);
} }
@@ -1532,6 +1538,22 @@ public class ApplicationDao {
criteriaBuilder.upper(root.get(GepafinConstant.COMMENTS)), criteriaBuilder.upper(root.get(GepafinConstant.COMMENTS)),
"%" + search.toUpperCase() + "%" "%" + search.toUpperCase() + "%"
); );
// Predicate protocolPredicate = criteriaBuilder.like(
// criteriaBuilder.function(
// "TO_CHAR",
// String.class,
// criteriaBuilder.function("CAST", String.class, root.get(GepafinConstant.PROTOCOL).get(GepafinConstant.PROTOCOL_NUMBER))
// ),
// "%" + search + "%"
// );
Predicate callNamePredicate =criteriaBuilder.like(
criteriaBuilder.upper(root.get(GepafinConstant.CALL).get(GepafinConstant.NAME)), // Adjust field name
"%" + search.toUpperCase() + "%"
);
// predicates.add(criteriaBuilder.or(protocolPredicate));
predicates.add(criteriaBuilder.or(callNamePredicate));
predicates.add(criteriaBuilder.or(titlePredicate)); predicates.add(criteriaBuilder.or(titlePredicate));
} }
@@ -1714,5 +1736,11 @@ public class ApplicationDao {
// Step 4: Evaluate the mathematical expression // Step 4: Evaluate the mathematical expression
return Utils.evaluateExpression(expression); return Utils.evaluateExpression(expression);
} }
public ApplicationEntity validateApplicationWithCompany(Long id,Long companyId) {
ApplicationEntity application=applicationRepository.findByIdAndCompanyIdAndIsDeletedFalse(id,companyId);
if (application==null){
throw new CustomValidationException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.PERMISSION_DENIED));
}
return application;
}
} }

View File

@@ -24,7 +24,6 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
@@ -298,7 +297,7 @@ public class ApplicationEvaluationDao {
response.setCreatedDate(entity.getCreatedDate()); response.setCreatedDate(entity.getCreatedDate());
response.setUpdatedDate(entity.getUpdatedDate()); response.setUpdatedDate(entity.getUpdatedDate());
response.setNumberOfCheck(entity.getAssignedApplicationsEntity().getApplication().getCall().getNumberOfCheck()); response.setNumberOfCheck(entity.getAssignedApplicationsEntity().getApplication().getCall().getNumberOfCheck());
response.setProductId(entity.getAssignedApplicationsEntity().getApplication().getCall().getProductId()); response.setAppointmentTemplateId(entity.getAssignedApplicationsEntity().getApplication().getCall().getAppointmentTemplateId());
} }
@@ -1159,7 +1158,7 @@ public class ApplicationEvaluationDao {
LocalDateTime callEndDate = application.getCall().getEndDate(); LocalDateTime callEndDate = application.getCall().getEndDate();
response.setCallEndDate(callEndDate); response.setCallEndDate(callEndDate);
response.setNumberOfCheck(call.getNumberOfCheck()); response.setNumberOfCheck(call.getNumberOfCheck());
response.setProductId(call.getProductId()); response.setAppointmentTemplateId(call.getAppointmentTemplateId());
setCriteriaResponses(entity, application.getId(), response, evaluationCriterias); setCriteriaResponses(entity, application.getId(), response, evaluationCriterias);
setChecklistResponses(entity, application.getId(), response, checklistEntities); setChecklistResponses(entity, application.getId(), response, checklistEntities);
setFileResponses(entity, application.getId(), response, applicationFormEntities); setFileResponses(entity, application.getId(), response, applicationFormEntities);
@@ -2210,7 +2209,8 @@ public class ApplicationEvaluationDao {
ApplicationEvaluationFormResponse response = objectMapper.convertValue(convertedResponse, ApplicationEvaluationFormResponse.class); ApplicationEvaluationFormResponse response = objectMapper.convertValue(convertedResponse, ApplicationEvaluationFormResponse.class);
EvaluationFormEntity evaluationFormEntity = evaluationFormRepository.findByCallIdAndIsDeletedFalse(evaluationEntity.getAssignedApplicationsEntity().getApplication().getCall().getId()); EvaluationFormEntity evaluationFormEntity = evaluationFormRepository.findByCallIdAndIsDeletedFalse(evaluationEntity.getAssignedApplicationsEntity().getApplication().getCall().getId());
response.setNumberOfCheck(evaluationEntity.getAssignedApplicationsEntity().getApplication().getCall().getNumberOfCheck());
response.setAppointmentTemplateId(evaluationEntity.getAssignedApplicationsEntity().getApplication().getApplicationEvaluationId());
if (evaluationFormEntity != null) { if (evaluationFormEntity != null) {
response.setApplicationEvaluationFormResponse(convertEvaluationFormToResponse(evaluationFormEntity, evaluationEntity)); response.setApplicationEvaluationFormResponse(convertEvaluationFormToResponse(evaluationFormEntity, evaluationEntity));
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.dao;
import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.GetObjectRequest;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import feign.FeignException; import feign.FeignException;
@@ -16,18 +17,14 @@ import net.gepafin.tendermanagement.entities.ApplicationEntity;
import net.gepafin.tendermanagement.entities.CompanyEntity; import net.gepafin.tendermanagement.entities.CompanyEntity;
import net.gepafin.tendermanagement.entities.DocumentEntity; import net.gepafin.tendermanagement.entities.DocumentEntity;
import net.gepafin.tendermanagement.entities.HubEntity; import net.gepafin.tendermanagement.entities.HubEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.enums.NotificationTypeEnum; import net.gepafin.tendermanagement.enums.NotificationTypeEnum;
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
import net.gepafin.tendermanagement.model.request.AppointmentCreationRequest; import net.gepafin.tendermanagement.model.request.AppointmentCreationRequest;
import net.gepafin.tendermanagement.model.request.AppointmentNdgRequest; import net.gepafin.tendermanagement.model.request.AppointmentNdgRequest;
import net.gepafin.tendermanagement.model.request.AppointmentVisuraListRequest; import net.gepafin.tendermanagement.model.request.AppointmentVisuraListRequest;
import net.gepafin.tendermanagement.model.request.AppointmentVisuraRequest; import net.gepafin.tendermanagement.model.request.AppointmentVisuraRequest;
import net.gepafin.tendermanagement.model.request.CreateAppointmentRequest; import net.gepafin.tendermanagement.model.request.CreateAppointmentRequest;
import net.gepafin.tendermanagement.model.request.NotificationReq;
import net.gepafin.tendermanagement.model.request.UploadDocToExternalSystemRequest; import net.gepafin.tendermanagement.model.request.UploadDocToExternalSystemRequest;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.model.response.AppointmentCreationResponse; import net.gepafin.tendermanagement.model.response.AppointmentCreationResponse;
@@ -63,7 +60,6 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@@ -406,10 +402,15 @@ public class AppointmentDao {
} }
// Handle non-OK response // Handle non-OK response
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.ERROR_IN_GENERATING_NDG_TRY_AGAIN)); throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.ERROR_IN_GENERATING_NDG_TRY_AGAIN));
} catch (FeignException.Forbidden forbiddenException) {
logForbiddenError();
// Regenerate the token and retry
regenerateTokenAndSave(hub);
} catch (Exception e) { } catch (Exception e) {
log.error("Failed to authenticate user on Odessa : {}", e.getMessage(), e); log.error("Failed to authenticate user on Odessa : {}", e.getMessage(), e);
throw new RuntimeException("Authentication failed on Odessa. try again", e); throw new RuntimeException("Authentication failed on Odessa. try again", e);
} }
return null;
} }
private AppointmentLoginResponse retrieveNdgByVatNumber(String vatNumber, String authorizationToken, HubEntity hub, ApplicationEntity application) { private AppointmentLoginResponse retrieveNdgByVatNumber(String vatNumber, String authorizationToken, HubEntity hub, ApplicationEntity application) {
@@ -626,7 +627,11 @@ public class AppointmentDao {
// Generate authorization token and fetch template data // Generate authorization token and fetch template data
String authorizationToken = getBearerToken(hub); String authorizationToken = getBearerToken(hub);
ResponseEntity<Object> response = appointmentApiService.getAppointmentTemplateForTemplateCreation(authorizationToken); Long appointmentTemplateId = application.getCall().getAppointmentTemplateId();
if (appointmentTemplateId == null) {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPOINTMENT_CANNOT_BE_CREATED));
}
ResponseEntity<Object> response = appointmentApiService.getAppointmentTemplateForTemplateCreation(authorizationToken, appointmentTemplateId);
if (response.getStatusCode() != HttpStatus.OK) { if (response.getStatusCode() != HttpStatus.OK) {
log.error("Failed to retrieve appointment template for appointment creation. Status: {}", response.getStatusCode()); log.error("Failed to retrieve appointment template for appointment creation. Status: {}", response.getStatusCode());
@@ -638,7 +643,7 @@ public class AppointmentDao {
AppointmentCreationRequest templateRichiestaData = parseTemplateResponseData(responseDataForTemplate); AppointmentCreationRequest templateRichiestaData = parseTemplateResponseData(responseDataForTemplate);
// Build the appointment request body // Build the appointment request body
AppointmentCreationRequest appointmentCreationRequest = buildAppointmentCreationRequest(applicationId, createAppointmentRequest, hub.getAreaCode(), AppointmentCreationRequest appointmentCreationRequest = buildAppointmentCreationRequest(applicationId, createAppointmentRequest, appointmentTemplateId,
templateRichiestaData); templateRichiestaData);
String appointmentRequestBody = Utils.convertObjectToJson(appointmentCreationRequest); String appointmentRequestBody = Utils.convertObjectToJson(appointmentCreationRequest);
@@ -646,16 +651,17 @@ public class AppointmentDao {
ResponseEntity<Object> appointmentResponse = appointmentApiService.createAppointment(authorizationToken, context, appointmentRequestBody); ResponseEntity<Object> appointmentResponse = appointmentApiService.createAppointment(authorizationToken, context, appointmentRequestBody);
String appointmentId = extractAppointmentIdFromResponse(appointmentResponse); String appointmentId = extractAppointmentIdFromResponse(appointmentResponse);
if (appointmentId != null) { if (appointmentId == null) {
// Update application with the appointment ID throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPOINTMENT_NOT_CREATED));
application.setAppointmentId(appointmentId);
application.setStatus(ApplicationStatusTypeEnum.APPOINTMENT.getValue());
applicationRepository.save(application);
// Log version history
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationData).newData(application).build());
} }
// Update application with the appointment ID
application.setAppointmentId(appointmentId);
application.setStatus(ApplicationStatusTypeEnum.APPOINTMENT.getValue());
applicationRepository.save(application);
// Log version history
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationData).newData(application).build());
appointmentCreationResponse.setAppointmentId(appointmentId); appointmentCreationResponse.setAppointmentId(appointmentId);
return appointmentCreationResponse; return appointmentCreationResponse;
@@ -684,32 +690,64 @@ public class AppointmentDao {
public AppointmentCreationRequest parseTemplateResponseData(String jsonResponse) { public AppointmentCreationRequest parseTemplateResponseData(String jsonResponse) {
try { try {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonResponse); JsonNode rootNode = objectMapper.readTree(jsonResponse);
JsonNode richiestaClienteArray = rootNode.path(GepafinConstant.DATA_STRING).path(GepafinConstant.RICHIESTA_CLIENTE_STRING); JsonNode richiesteClienteArray = rootNode.path(GepafinConstant.DATA_STRING).path(GepafinConstant.RICHIESTE_CLIENTE_STRING);
// Initialize the result object
AppointmentCreationRequest appointmentCreationRequest = new AppointmentCreationRequest(); AppointmentCreationRequest appointmentCreationRequest = new AppointmentCreationRequest();
AppointmentCreationRequest.Input input = new AppointmentCreationRequest.Input(); AppointmentCreationRequest.Input input = new AppointmentCreationRequest.Input();
// Map `richiestaCliente` array
List<AppointmentCreationRequest.RichiestaCliente> richiestaClienteList = new ArrayList<>(); List<AppointmentCreationRequest.RichiestaCliente> richiestaClienteList = new ArrayList<>();
if (richiestaClienteArray.isArray()) { if (!richiesteClienteArray.isArray()) {
for (JsonNode richiestaNode : richiestaClienteArray) { log.warn("richiesteCliente array is missing or not an array.");
richiestaClienteList.add(objectMapper.treeToValue(richiestaNode, AppointmentCreationRequest.RichiestaCliente.class)); return new AppointmentCreationRequest();
}
} }
for (JsonNode richiestaNode : richiesteClienteArray) {
if (richiestaNode.isNull())
continue;
AppointmentCreationRequest.RichiestaCliente richiestaCliente = new AppointmentCreationRequest.RichiestaCliente();
JsonNode prodottoNode = richiestaNode.path(AppointmentApiConstant.PRODOTTO);
String prodottoCode = prodottoNode.path(AppointmentApiConstant.PRODOTTO_CODE).asText();
richiestaCliente.setCodProdotto(prodottoCode);
richiestaCliente.setIdMotivazione(getIntValue(richiestaNode));
richiestaCliente.setCodAbi(getTextValue(richiestaNode, AppointmentApiConstant.COD_ABI));
richiestaCliente.setCodCab(getTextValue(richiestaNode, AppointmentApiConstant.COD_CAB));
richiestaCliente.setIdNota(getTextValue(richiestaNode, AppointmentApiConstant.ID_NOTA));
richiestaCliente.setImportoAgevolato(getTextValue(richiestaNode, AppointmentApiConstant.IMPORTO_AGEVOLATO));
richiestaCliente.setImportoMedioLungoTermine(getTextValue(richiestaNode, AppointmentApiConstant.IMPORTO_MEDIOLUNGO_TERMINE));
richiestaCliente.setCodTipoProdotto(getTextValue(richiestaNode, AppointmentApiConstant.COD_TIPO_PRODOTTO));
richiestaCliente.setCodCategoriaProdotto(getTextValue(richiestaNode, AppointmentApiConstant.COD_CATEGORIA_PRODOTTO));
richiestaCliente.setCodFormaTecnica(getTextValue(richiestaNode, AppointmentApiConstant.COD_FORMATECNICA));
richiestaCliente.setCodOperazione(getTextValue(richiestaNode, AppointmentApiConstant.COD_OPERAZIONE));
richiestaClienteList.add(richiestaCliente);
}
input.setRichiestaCliente(richiestaClienteList); input.setRichiestaCliente(richiestaClienteList);
appointmentCreationRequest.setInput(input); appointmentCreationRequest.setInput(input);
return appointmentCreationRequest; return appointmentCreationRequest;
} catch (Exception e) { } catch (JsonProcessingException e) {
log.error("Error parsing template response: {}", e.getMessage(), e); log.error("JSON processing error: {}", e.getMessage(), e);
throw new IllegalStateException("Failed to parse template response", e); throw new IllegalStateException("Invalid JSON structure in template response", e);
} }
} }
public AppointmentCreationRequest buildAppointmentCreationRequest(Long applicationId, CreateAppointmentRequest createAppointmentRequest, String areaCode, private String getTextValue(JsonNode node, String fieldName) {
return node.path(fieldName).isTextual() ? node.path(fieldName).asText() : null;
}
private int getIntValue(JsonNode node) {
return node.path(AppointmentApiConstant.MOTIVAZIONE).path(AppointmentApiConstant.MOTIVAZIONE_ID).asInt();
}
public AppointmentCreationRequest buildAppointmentCreationRequest(Long applicationId, CreateAppointmentRequest createAppointmentRequest, Long areaCode,
AppointmentCreationRequest templateRichiestaData) { AppointmentCreationRequest templateRichiestaData) {
ApplicationEntity application = applicationService.validateApplication(applicationId); ApplicationEntity application = applicationService.validateApplication(applicationId);
@@ -733,7 +771,8 @@ public class AppointmentDao {
requestNota.setTitolo(nota.getTitolo()); requestNota.setTitolo(nota.getTitolo());
requestNota.setTesto(nota.getTesto()); requestNota.setTesto(nota.getTesto());
richiestaCliente.setNota(requestNota); richiestaCliente.setNota(requestNota);
richiestaCliente.setDurataMesiFinanziamento(createAppointmentRequest.getDurataMesiFinanziamento());
richiestaCliente.setImportoBreveTermine(createAppointmentRequest.getImportoBreveTermine());
richiestaClienteList.add(richiestaCliente); richiestaClienteList.add(richiestaCliente);
} }

View File

@@ -1,17 +1,24 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
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.entities.*; import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.util.SortBy;
import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository;
import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository;
import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository;
@@ -26,17 +33,20 @@ import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationExceptio
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
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.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 java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static net.gepafin.tendermanagement.util.Utils.log; import static net.gepafin.tendermanagement.util.Utils.log;
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
import static org.apache.commons.lang3.StringUtils.isEmpty;
@Component @Component
public class AssignedApplicationsDao { public class AssignedApplicationsDao {
@@ -201,7 +211,9 @@ public class AssignedApplicationsDao {
assignedApplicationsResponse.setEvaluationEndDate(applicationEvaluationEntity.get().getEndDate()); assignedApplicationsResponse.setEvaluationEndDate(applicationEvaluationEntity.get().getEndDate());
} }
assignedApplicationsResponse.setNumberOfCheck(application.getCall().getNumberOfCheck()); assignedApplicationsResponse.setNumberOfCheck(application.getCall().getNumberOfCheck());
assignedApplicationsResponse.setProductId(application.getCall().getProductId()); assignedApplicationsResponse.setAppointmentTemplateId(application.getCall().getAppointmentTemplateId());
assignedApplicationsResponse.setNdg(application.getNdg());
assignedApplicationsResponse.setAppointmentId(application.getAppointmentId());
return assignedApplicationsResponse; return assignedApplicationsResponse;
} }
@@ -288,6 +300,118 @@ public class AssignedApplicationsDao {
log.info("Assigned application fetched successfully: {}", response); log.info("Assigned application fetched successfully: {}", response);
return response; return response;
} }
public PageableResponseBean<List<AssignedApplicationsResponse>> getAllAssignedApplicationsByPagination(UserEntity user, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean,Long userId) {
Integer pageNo = null;
Integer pageLimit = null;
if (assignedApplicationPageableRequestBean.getGlobalFilters() != null) {
pageNo = assignedApplicationPageableRequestBean.getGlobalFilters().getPage();
pageLimit = assignedApplicationPageableRequestBean.getGlobalFilters().getLimit();
}
if (pageLimit == null || pageLimit <= 0) {
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
}
if (pageNo == null || pageNo <= 0) {
pageNo = GepafinConstant.DEFAULT_PAGE;
}
Specification<AssignedApplicationsEntity> spec = searchByPagination( assignedApplicationPageableRequestBean, user,userId);
Page<AssignedApplicationsEntity> entityPage = assignedApplicationsRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit));
// Prepare the response
List<AssignedApplicationsResponse> assignedApplicationsResponses = entityPage.getContent().stream()
.map(application -> {
AssignedApplicationsResponse response = convertEntityToResponse(application);
return response;
})
.collect(Collectors.toList());
PageableResponseBean<List<AssignedApplicationsResponse>> pageableResponseBean = new PageableResponseBean<>();
pageableResponseBean.setBody(assignedApplicationsResponses);
pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1);
pageableResponseBean.setTotalPages(entityPage.getTotalPages());
pageableResponseBean.setTotalRecords(entityPage.getTotalElements());
pageableResponseBean.setPageSize(entityPage.getSize());
return pageableResponseBean;
}
public Specification<AssignedApplicationsEntity> searchByPagination(AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean, UserEntity userEntity,Long userId) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = getPredicates(assignedApplicationPageableRequestBean, criteriaBuilder, root, userEntity,userId);
SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true);
if (assignedApplicationPageableRequestBean.getGlobalFilters() != null
&& assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy() != null &&
assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals(
isEmpty(assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName()))) {
sortBy.setColumnName(assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName());
sortBy.setSortDesc(true);
if (assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) {
sortBy.setSortDesc(assignedApplicationPageableRequestBean.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(AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean,
CriteriaBuilder criteriaBuilder, Root<AssignedApplicationsEntity> root, UserEntity userEntity,Long userId) {
Integer year = null;
String search = null;
if (assignedApplicationPageableRequestBean.getGlobalFilters() != null) {
year = assignedApplicationPageableRequestBean.getGlobalFilters().getYear();
search = assignedApplicationPageableRequestBean.getGlobalFilters().getSearch();
}
List<Predicate> predicates = new ArrayList<>();
Boolean isBeneficiary = validator.checkIsBeneficiary();
if (userId!=null) {
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userId));
}
if (year != null && year > 0) {
int filterYear = assignedApplicationPageableRequestBean.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.NOTE)),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(titlePredicate));
}
// Filter by `status` (if status list is provided)
if (assignedApplicationPageableRequestBean.getStatus() != null && !assignedApplicationPageableRequestBean.getStatus().isEmpty()) {
List<String> statusValues = assignedApplicationPageableRequestBean.getStatus().stream()
.map(AssignedApplicationEnum::name) // Convert enum to string
.toList();
predicates.add(root.get(GepafinConstant.STATUS).in(statusValues));
}
predicates.add(criteriaBuilder.isFalse(root.get(GepafinConstant.IS_DELETED)));
return predicates;
}
public AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) { public AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) {
AssignedApplicationsEntity assignedApplication = validateAssignedApplication(assignedApplicationId); AssignedApplicationsEntity assignedApplication = validateAssignedApplication(assignedApplicationId);

View File

@@ -202,7 +202,7 @@ public class CallDao {
callEntity.setEndTime(DateTimeUtil.parseTime(createCallRequest.getEndTime())); callEntity.setEndTime(DateTimeUtil.parseTime(createCallRequest.getEndTime()));
callEntity.setHub(userEntity.getHub()); callEntity.setHub(userEntity.getHub());
callEntity.setNumberOfCheck(createCallRequest.getNumberOfCheck()); callEntity.setNumberOfCheck(createCallRequest.getNumberOfCheck());
callEntity.setProductId(createCallRequest.getProductId()); callEntity.setAppointmentTemplateId(createCallRequest.getAppointmentTemplateId());
callEntity = callRepository.save(callEntity); callEntity = callRepository.save(callEntity);
/** This code is responsible for adding a version history log for the "Create Call" operation. **/ /** This code is responsible for adding a version history log for the "Create Call" operation. **/
@@ -610,7 +610,7 @@ public class CallDao {
setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi()); setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi());
setIfUpdated(callEntity::getEvaluationVersion, callEntity::setEvaluationVersion, updateCallRequest.getEvaluationVersion().getValue()); setIfUpdated(callEntity::getEvaluationVersion, callEntity::setEvaluationVersion, updateCallRequest.getEvaluationVersion().getValue());
setIfUpdated(callEntity::getNumberOfCheck, callEntity::setNumberOfCheck, updateCallRequest.getNumberOfCheck()); setIfUpdated(callEntity::getNumberOfCheck, callEntity::setNumberOfCheck, updateCallRequest.getNumberOfCheck());
setIfUpdated(callEntity::getProductId, callEntity::setProductId, updateCallRequest.getProductId()); setIfUpdated(callEntity::getAppointmentTemplateId, callEntity::setAppointmentTemplateId, updateCallRequest.getAppointmentTemplateId());
callEntity = callRepository.save(callEntity); callEntity = callRepository.save(callEntity);
/** This code is responsible for adding a version history log for the "update call step 1" operation **/ /** This code is responsible for adding a version history log for the "update call step 1" operation **/
@@ -718,7 +718,7 @@ public class CallDao {
callDetailsResponseBean.setCreatedDate(callEntity.getCreatedDate()); callDetailsResponseBean.setCreatedDate(callEntity.getCreatedDate());
callDetailsResponseBean.setUpdatedDate(callEntity.getUpdatedDate()); callDetailsResponseBean.setUpdatedDate(callEntity.getUpdatedDate());
callDetailsResponseBean.setNumberOfCheck(callEntity.getNumberOfCheck()); callDetailsResponseBean.setNumberOfCheck(callEntity.getNumberOfCheck());
callDetailsResponseBean.setProductId(callEntity.getProductId()); callDetailsResponseBean.setAppointmentTemplateId(callEntity.getAppointmentTemplateId());
return callDetailsResponseBean; return callDetailsResponseBean;
} }
@@ -743,7 +743,7 @@ public class CallDao {
createCallResponseBean.setAimedTo(amiedTo); createCallResponseBean.setAimedTo(amiedTo);
createCallResponseBean.setCheckList(checkList); createCallResponseBean.setCheckList(checkList);
createCallResponseBean.setNumberOfCheck(callEntity.getNumberOfCheck()); createCallResponseBean.setNumberOfCheck(callEntity.getNumberOfCheck());
createCallResponseBean.setProductId(callEntity.getProductId()); createCallResponseBean.setAppointmentTemplateId(callEntity.getAppointmentTemplateId());
return createCallResponseBean; return createCallResponseBean;
} }

View File

@@ -122,10 +122,40 @@ public class CompanyDao {
userWithCompanyEntity.setPec(companyRequest.getPec()); userWithCompanyEntity.setPec(companyRequest.getPec());
userWithCompanyEntity.setContactName(companyRequest.getContactName()); userWithCompanyEntity.setContactName(companyRequest.getContactName());
userWithCompanyEntity.setContactEmail(companyRequest.getContactEmail()); userWithCompanyEntity.setContactEmail(companyRequest.getContactEmail());
userWithCompanyEntity.setJson(Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()) );
UserWithCompanyEntity userWithCompany = userWithCompanyRepository.save(userWithCompanyEntity); UserWithCompanyEntity userWithCompany = userWithCompanyRepository.save(userWithCompanyEntity);
/** This code is responsible for adding a version history log for the "adding user with company" operation. **/ /** This code is responsible for adding a version history log for the "adding user with company" operation. **/
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(userWithCompany).build()); loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(userWithCompany).build());
if (StringUtils.isEmpty(companyEntity.getJson())) {
companyEntity.setJson(Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()));
Map<String, Object> vatCheckResponse = companyRequest.getVatCheckResponse();
Map<String, Object> data = (Map<String, Object>) vatCheckResponse.get("data");
if (data != null) {
if (data.containsKey("dettaglio")) {
Map<String, Object> dettaglio = (Map<String, Object>) data.get("dettaglio");
if (dettaglio != null) {
if (dettaglio.containsKey("codice_ateco")) {
Object codiceAtecoObj = dettaglio.get("codice_ateco");
String codiceAteco = (codiceAtecoObj != null) ? codiceAtecoObj.toString() : null;
if (codiceAteco != null) {
companyEntity.setCodiceAteco(codiceAteco);
}
}
}
}
}
companyEntity = companyRepository.save(companyEntity);
/** This code is responsible for adding a version history log for "updating company json field" operation. **/
loggingUtil.addVersionHistory(VersionHistoryRequest.builder()
.request(request)
.actionType(VersionActionTypeEnum.INSERT)
.oldData(null)
.newData(companyEntity)
.build());
}
return userWithCompany; return userWithCompany;
} }
@@ -143,6 +173,7 @@ public class CompanyDao {
entity.setNumberOfEmployees(request.getNumberOfEmployees()); entity.setNumberOfEmployees(request.getNumberOfEmployees());
entity.setAnnualRevenue(request.getAnnualRevenue()); entity.setAnnualRevenue(request.getAnnualRevenue());
entity.setHub(userEntity.getHub()); entity.setHub(userEntity.getHub());
entity.setJson(Utils.convertMapIntoJsonString(request.getVatCheckResponse()));
if (request.getVatCheckResponse() != null) { if (request.getVatCheckResponse() != null) {
Map<String, Object> vatCheckResponse = request.getVatCheckResponse(); Map<String, Object> vatCheckResponse = request.getVatCheckResponse();
Map<String, Object> data = (Map<String, Object>) vatCheckResponse.get("data"); Map<String, Object> data = (Map<String, Object>) vatCheckResponse.get("data");
@@ -226,10 +257,10 @@ public class CompanyDao {
UserWithCompanyEntity userWithCompanyEntity = getUserWithCompany(userEntity.getId(), companyId); UserWithCompanyEntity userWithCompanyEntity = getUserWithCompany(userEntity.getId(), companyId);
//cloned entity for old data //cloned entity for old data
UserWithCompanyEntity oldUserWithCompanyData = Utils.getClonedEntityForData(userWithCompanyEntity); UserWithCompanyEntity oldUserWithCompanyData = Utils.getClonedEntityForData(userWithCompanyEntity);
if(StringUtils.isNotBlank(companyRequest.getVatNumber())) { // if(StringUtils.isNotBlank(companyRequest.getVatNumber())) {
String responseJson = companyRequest.getVatCheckResponse() != null ? Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()) : null; // String responseJson = companyRequest.getVatCheckResponse() != null ? Utils.convertMapIntoJsonString(companyRequest.getVatCheckResponse()) : null;
setIfUpdated(userWithCompanyEntity::getJson, userWithCompanyEntity::setJson, responseJson); // setIfUpdated(companyEntity::getJson, companyEntity::setJson, responseJson);
} // }
setIfUpdated(userWithCompanyEntity::getPec, userWithCompanyEntity::setPec, companyRequest.getPec()); setIfUpdated(userWithCompanyEntity::getPec, userWithCompanyEntity::setPec, companyRequest.getPec());
setIfUpdated(userWithCompanyEntity::getEmail, userWithCompanyEntity::setEmail, companyRequest.getEmail()); setIfUpdated(userWithCompanyEntity::getEmail, userWithCompanyEntity::setEmail, companyRequest.getEmail());
setIfUpdated(userWithCompanyEntity::getContactName, userWithCompanyEntity::setContactName, companyRequest.getContactName()); setIfUpdated(userWithCompanyEntity::getContactName, userWithCompanyEntity::setContactName, companyRequest.getContactName());

View File

@@ -248,7 +248,7 @@ public class FlowFormDao {
// //
// return applicationFormEntities.isEmpty() ? null : applicationFormEntities.get(0).getForm().getId(); // return applicationFormEntities.isEmpty() ? null : applicationFormEntities.get(0).getForm().getId();
// } // }
public NextOrPreviousFormResponse getNextOrPreviousForm(ApplicationEntity applicationEntity, Long formId, public NextOrPreviousFormResponse getNextOrPreviousForm(ApplicationEntity applicationEntity,Long companyId, Long formId,
FormActionEnum action) { FormActionEnum action) {
Long calculatedFormId = null; Long calculatedFormId = null;
FormEntity formEntity = null; FormEntity formEntity = null;

View File

@@ -4,6 +4,7 @@ import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Expression; import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root; import jakarta.persistence.criteria.Root;
import jakarta.servlet.http.HttpServletRequest;
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;
@@ -414,4 +415,48 @@ public class NotificationDao {
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userId)); predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userId));
return predicates; return predicates;
} }
public PageableResponseBean<List<NotificationResponse>> getNotificationsByUserIdAndCompanyIdByPagination(Long userId, Long companyId, NotificationRequestBean notificationRequestBean) {
UserWithCompanyEntity userWithCompany;
if (companyId != null) {
userWithCompany = companyDao.validateUserWithCompny(userId, companyId);
}else {
userWithCompany=null;
}
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);
if(userWithCompany!=null){
spec = spec.and((root, query, criteriaBuilder) ->
criteriaBuilder.equal(root.get("userWithCompany").get("id"), userWithCompany.getId()));
}
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;
}
} }

View File

@@ -285,12 +285,12 @@ public class PdfDao {
private Document createPdfTable(List<Map<String, Object>> extractedData, Document document, ContentResponseBean contentResponseBean) throws DocumentException { private Document createPdfTable(List<Map<String, Object>> extractedData, Document document, ContentResponseBean contentResponseBean) throws DocumentException {
// Create a PdfPTable with dynamic column count based on stateFieldMap size // Create a PdfPTable with dynamic column count based on stateFieldMap size
Map<String, String> stateFieldMap = new HashMap<>(); Map<String, String> stateFieldMap = new LinkedHashMap<>();
Map<String, Boolean> stateFieldBoolean = new HashMap<>(); Map<String, Boolean> stateFieldBoolean = new LinkedHashMap<>();
Map<String, Boolean> formulaEnabledMap = new HashMap<>(); Map<String, Boolean> formulaEnabledMap = new LinkedHashMap<>();
Map<String, String> formulaTypeMap = new HashMap<>(); Map<String, String> formulaTypeMap = new LinkedHashMap<>();
Map<String, String> fieldTypeMap = new HashMap<>(); Map<String, String> fieldTypeMap = new LinkedHashMap<>();
Map<String, String> totalMap = new HashMap<>(); Map<String, String> totalMap = new LinkedHashMap<>();
Font lightGrayFont = FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL, new BaseColor(110, 110, 110)); // Light gray Font lightGrayFont = FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL, new BaseColor(110, 110, 110)); // Light gray

View File

@@ -2,15 +2,18 @@ package net.gepafin.tendermanagement.dao;
import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Predicate; 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.RoleActionContextEntity; import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.UserActionEntity; import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.TimePeriodEnum;
import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum;
import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.request.ApplicationPageableRequestBean;
import net.gepafin.tendermanagement.model.response.UserActionResponseBean; import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest;
import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.model.util.SortBy;
import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository;
import net.gepafin.tendermanagement.repositories.RoleActionContextRepository; import net.gepafin.tendermanagement.repositories.RoleActionContextRepository;
import net.gepafin.tendermanagement.repositories.UserActionsRepository; import net.gepafin.tendermanagement.repositories.UserActionsRepository;
@@ -23,9 +26,12 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.apache.commons.lang3.StringUtils.isEmpty;
@Component @Component
public class UserActionDao { public class UserActionDao {
@@ -41,16 +47,14 @@ public class UserActionDao {
@Autowired @Autowired
private RoleActionContextRepository roleActionContextRepository; private RoleActionContextRepository roleActionContextRepository;
public SummaryPageResponseBean getUserAction(HttpServletRequest request, UserEntity userEntity, TimePeriodEnum timeFilter, List<UserActionContextEnum> actionContext){ public SummaryPageResponseBean getUserAction(HttpServletRequest request, UserEntity userEntity){
Long numberOfLoginAttempts = userActionsRepository.countUserLoginAttempts(userEntity.getId()); Long numberOfLoginAttempts = userActionsRepository.countUserLoginAttempts(userEntity.getId());
Long applicationsProcessed = assignedApplicationsRepository.countAssignedApplicationsByUserId(userEntity.getId()); Long applicationsProcessed = assignedApplicationsRepository.countAssignedApplicationsByUserId(userEntity.getId());
List<UserActionEntity> userActions = getFilterUserActions(userEntity.getId(),timeFilter,actionContext); return createSummaryPageResponse(userEntity,numberOfLoginAttempts,applicationsProcessed);
return createSummaryPageResponse(userEntity,numberOfLoginAttempts,applicationsProcessed,userActions);
} }
public SummaryPageResponseBean createSummaryPageResponse(UserEntity user, Long numberOfLoginAttempts, Long applicationsProcessed, List<UserActionEntity> userActions){ public SummaryPageResponseBean createSummaryPageResponse(UserEntity user, Long numberOfLoginAttempts, Long applicationsProcessed){
SummaryPageResponseBean response = new SummaryPageResponseBean(); SummaryPageResponseBean response = new SummaryPageResponseBean();
response.setRole(user.getRoleEntity().getRoleName()); response.setRole(user.getRoleEntity().getRoleName());
response.setLastLogin(user.getLastLogin()); response.setLastLogin(user.getLastLogin());
@@ -59,9 +63,6 @@ public class UserActionDao {
response.setEmail(user.getEmail()); response.setEmail(user.getEmail());
response.setNumberOfLoginAttempts(numberOfLoginAttempts); response.setNumberOfLoginAttempts(numberOfLoginAttempts);
response.setApplicationsProcessed(applicationsProcessed); response.setApplicationsProcessed(applicationsProcessed);
List<UserActionResponseBean> userAction = convertEntityToResponse(userActions);
response.setUserActions(userAction);
return response; return response;
} }
@@ -137,6 +138,7 @@ public class UserActionDao {
responseBean.setResponse(action.getResponse()); responseBean.setResponse(action.getResponse());
responseBean.setCreatedDate(action.getCreatedDate()); responseBean.setCreatedDate(action.getCreatedDate());
responseBean.setUpdatedDate(action.getUpdatedDate()); responseBean.setUpdatedDate(action.getUpdatedDate());
responseBean.setMethodType(action.getMethodType());
return responseBean; return responseBean;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
@@ -157,4 +159,138 @@ public class UserActionDao {
return responseBean; return responseBean;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
public PageableResponseBean<List<UserActionResponseBean>> getUserActionByPagination(UserEntity user, UserActionPaginationRequest userActionPaginationRequest) {
Integer pageNo = null;
Integer pageLimit = null;
if (userActionPaginationRequest.getGlobalFilters() != null) {
pageNo = userActionPaginationRequest.getGlobalFilters().getPage();
pageLimit = userActionPaginationRequest.getGlobalFilters().getLimit();
}
if (pageLimit == null || pageLimit <= 0) {
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
}
if (pageNo == null || pageNo <= 0) {
pageNo = GepafinConstant.DEFAULT_PAGE;
}
Specification<UserActionEntity> spec = search(userActionPaginationRequest,user);
Page<UserActionEntity> entityPage = userActionsRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit));
// Prepare the response
Long numberOfLoginAttempts = userActionsRepository.countUserLoginAttempts(user.getId());
Long applicationsProcessed = assignedApplicationsRepository.countAssignedApplicationsByUserId(user.getId());
List<UserActionResponseBean> userActionResponseBeans = convertEntityToResponse(entityPage.stream().toList());
PageableResponseBean<List<UserActionResponseBean>> pageableResponseBean = new PageableResponseBean<>();
pageableResponseBean.setBody(userActionResponseBeans);
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<UserActionEntity> search(UserActionPaginationRequest userActionPaginationRequest,UserEntity userEntity) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = getPredicates(userActionPaginationRequest, criteriaBuilder, root,userEntity);
SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true);
if (userActionPaginationRequest .getGlobalFilters() != null
&& userActionPaginationRequest.getGlobalFilters().getSortBy() != null &&
userActionPaginationRequest.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals(
isEmpty(userActionPaginationRequest.getGlobalFilters().getSortBy().getColumnName()))) {
sortBy.setColumnName(userActionPaginationRequest.getGlobalFilters().getSortBy().getColumnName());
sortBy.setSortDesc(true);
if (userActionPaginationRequest.getGlobalFilters().getSortBy().getSortDesc() != null) {
sortBy.setSortDesc(userActionPaginationRequest.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(UserActionPaginationRequest userActionPaginationRequest,
CriteriaBuilder criteriaBuilder, Root<UserActionEntity> root,UserEntity userEntity) {
Integer year = null;
String search = null;
if (userActionPaginationRequest.getGlobalFilters() != null) {
year = userActionPaginationRequest.getGlobalFilters().getYear();
search = userActionPaginationRequest.getGlobalFilters().getSearch();
}
List<Predicate> predicates = new ArrayList<>();
if (year != null && year > 0) {
int filterYear = userActionPaginationRequest.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 actionType = criteriaBuilder.like(
criteriaBuilder.upper(root.get(GepafinConstant.ACTION_TYPE)),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(actionType));
Predicate actionContext = criteriaBuilder.like(
criteriaBuilder.upper(root.get(GepafinConstant.ACTION_CONTEXT)),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(actionContext));
Predicate methodType = criteriaBuilder.like(
criteriaBuilder.upper(root.get(GepafinConstant.METHOD_TYPE)),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(methodType));
}
// Filter by `status` (if status list is provided)
if (userActionPaginationRequest.getActionContext() != null && !userActionPaginationRequest.getActionContext().isEmpty()) {
List<String> statusValues = userActionPaginationRequest.getActionContext().stream()
.map(UserActionContextEnum::name) // Convert enum to string
.toList();
predicates.add(root.get("actionContext").in(statusValues));
}
if (userActionPaginationRequest.getActionType() != null && !userActionPaginationRequest.getActionType().isEmpty()) {
List<String> statusValues = userActionPaginationRequest.getActionType().stream()
.map(UserActionLogsEnum::name) // Convert enum to string
.toList();
predicates.add(root.get("actionType").in(statusValues));
}
TimePeriodEnum timeRange= userActionPaginationRequest.getTimeFilter();
if (timeRange != null) {
LocalDateTime startDate = null;
LocalDateTime endDate = LocalDateTime.now();
switch (timeRange) {
case LAST_WEEK -> startDate = endDate.minusWeeks(1);
case LAST_QUARTER -> startDate = endDate.minusMonths(3);
case LAST_SEMESTER -> startDate = endDate.minusMonths(6);
case LAST_YEAR -> startDate = endDate.minusYears(1);
}
if (startDate != null) {
predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startDate, endDate));
}
}
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userEntity.getId()));
return predicates;
}
} }

View File

@@ -1,5 +1,8 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
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 jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import net.gepafin.tendermanagement.config.SamlSuccessHandler; import net.gepafin.tendermanagement.config.SamlSuccessHandler;
@@ -10,6 +13,7 @@ import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.model.util.JWTToken;
import net.gepafin.tendermanagement.model.util.SortBy;
import net.gepafin.tendermanagement.repositories.BeneficiaryRepository; import net.gepafin.tendermanagement.repositories.BeneficiaryRepository;
import net.gepafin.tendermanagement.repositories.UserRepository; import net.gepafin.tendermanagement.repositories.UserRepository;
import net.gepafin.tendermanagement.service.HubService; import net.gepafin.tendermanagement.service.HubService;
@@ -29,8 +33,13 @@ 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.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -38,6 +47,7 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
import static org.apache.commons.lang3.StringUtils.isEmpty;
@Component @Component
public class UserDao { public class UserDao {
@@ -597,11 +607,157 @@ public class UserDao {
log.info("Total users found with role ID {}: {}", roleIds, userResponseBeans.size()); log.info("Total users found with role ID {}: {}", roleIds, userResponseBeans.size());
return userResponseBeans; return userResponseBeans;
} }
public PageableResponseBean<List<UserResponseBean>> getUserByPagination(UserPaginationRequestBean userPaginationRequestBean,UserEntity userEntity) {
Integer pageNo = null;
Integer pageLimit = null;
if (userPaginationRequestBean.getGlobalFilters() != null) {
pageNo = userPaginationRequestBean.getGlobalFilters().getPage();
pageLimit = userPaginationRequestBean.getGlobalFilters().getLimit();
}
if (pageLimit == null || pageLimit <= 0) {
pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT;
}
if (pageNo == null || pageNo <= 0) {
pageNo = GepafinConstant.DEFAULT_PAGE;
}
Specification<UserEntity> spec = search(userPaginationRequestBean,userEntity);
Page<UserEntity> entityPage = userRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit));
List<UserResponseBean> applicationResponses = entityPage.getContent().stream()
.map(user -> {
UserResponseBean response = convertUserEntityToUserResponse(user);
return response;
})
.collect(Collectors.toList());
PageableResponseBean<List<UserResponseBean>> 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<UserEntity> search(UserPaginationRequestBean userPaginationRequestBean,UserEntity userEntity) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = getPredicates(userPaginationRequestBean, criteriaBuilder, root,userEntity);
SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true);
if (userPaginationRequestBean .getGlobalFilters() != null
&& userPaginationRequestBean.getGlobalFilters().getSortBy() != null &&
userPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals(
isEmpty(userPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName()))) {
sortBy.setColumnName(userPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName());
sortBy.setSortDesc(true);
if (userPaginationRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) {
sortBy.setSortDesc(userPaginationRequestBean.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(UserPaginationRequestBean userPaginationRequestBean,
CriteriaBuilder criteriaBuilder, Root<UserEntity> root,UserEntity user) {
Integer year = null;
String search = null;
if (userPaginationRequestBean.getGlobalFilters() != null) {
year = userPaginationRequestBean.getGlobalFilters().getYear();
search = userPaginationRequestBean.getGlobalFilters().getSearch();
}
List<Predicate> predicates = new ArrayList<>();
if (year != null && year > 0) {
int filterYear = userPaginationRequestBean.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 predicate = criteriaBuilder.like(
criteriaBuilder.upper(root.get("firstName")),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(predicate));
Predicate predicate1 = criteriaBuilder.like(
criteriaBuilder.upper(root.get("lastName")),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(predicate1));
Predicate predicate2 = criteriaBuilder.like(
criteriaBuilder.upper(root.get("phoneNumber")),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(predicate2));
Predicate predicate3 = criteriaBuilder.like(
criteriaBuilder.upper(root.get("organization")),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(predicate3));
Predicate predicate4 = criteriaBuilder.like(
criteriaBuilder.upper(root.get("address")),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(predicate4));
Predicate predicate5 = criteriaBuilder.like(
criteriaBuilder.upper(root.get("city")),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(predicate5));
Predicate predicate6 = criteriaBuilder.like(
criteriaBuilder.upper(root.get("country")),
"%" + search.toUpperCase() + "%"
);
predicates.add(criteriaBuilder.or(predicate6));
}
// Filter by `status` (if status list is provided)
if (userPaginationRequestBean.getStatus() != null && !userPaginationRequestBean.getStatus().isEmpty()) {
List<String> statusValues = userPaginationRequestBean.getStatus().stream()
.map(UserStatusEnum::name) // Convert enum to string
.toList();
predicates.add(root.get(GepafinConstant.STATUS).in(statusValues));
}
if (userPaginationRequestBean.getRole() != null && !userPaginationRequestBean.getRole().isEmpty()) {
List<String> roleValues = userPaginationRequestBean.getRole().stream()
.map(RoleStatusEnum::name) // Convert enum to string
.toList();
predicates.add(root.get("roleEntity").get("roleType").in(roleValues));
}
predicates.add(root.get(GepafinConstant.HUB).get("id").in(user.getHub().getId()));
return predicates;
}
public UserResponseBean updateUserDetails(HttpServletRequest request , Long userId, UpdateUserReqForBeneficiary userReq){ public UserResponseBean updateUserDetails(HttpServletRequest request , Long userId, UpdateUserReqForBeneficiary userReq){
log.info("Updating user by beneficiary with ID: {}", userId); log.info("Updating user by beneficiary with ID: {}", userId);
UserEntity userEntity = validator.validateUserId(request, userId); UserEntity userEntity = validator.validateUserId(request, userId);
UserEntity oldUserEntity = Utils.getClonedEntityForData(userEntity); UserEntity oldUserEntity = Utils.getClonedEntityForData(userEntity);
log.info("Current user details: {}", userEntity); log.info("Current user details: {}", userEntity);
log.info("New user details: {}", userReq); log.info("New user details: {}", userReq);
@@ -647,9 +803,4 @@ public class UserDao {
return convertUserEntityToUserResponse(userEntity); return convertUserEntityToUserResponse(userEntity);
} }
} }

View File

@@ -95,7 +95,7 @@ public class CallEntity extends BaseEntity {
@Column(name = "NUMBER_OF_CHECK") @Column(name = "NUMBER_OF_CHECK")
private Long numberOfCheck; private Long numberOfCheck;
@Column(name = "PRODUCT_ID") @Column(name = "APPOINTMENT_TEMPLATE_ID")
private Long productId; private Long appointmentTemplateId;
} }

View File

@@ -59,4 +59,7 @@ public class CompanyEntity extends BaseEntity{
@Column(name = "CODICE_ATECO") @Column(name = "CODICE_ATECO")
private String codiceAteco; private String codiceAteco;
@Column(name = "JSON")
private String json;
} }

View File

@@ -35,9 +35,6 @@ public class UserWithCompanyEntity extends BaseEntity{
@Column(name = "EMAIL") @Column(name = "EMAIL")
private String email; private String email;
@Column(name = "JSON")
private String json;
@Column(name = "IS_DELETED") @Column(name = "IS_DELETED")
private Boolean isDeleted = false; private Boolean isDeleted = false;

View File

@@ -192,7 +192,11 @@ public enum UserActionContextEnum {
GET_USER_ACTION("GET_USER_ACTION"), GET_USER_ACTION("GET_USER_ACTION"),
GET_ACTION_CONTEXT_LABELS("GET_ACTION_CONTEXT_LABELS"); GET_ACTION_CONTEXT_LABELS("GET_ACTION_CONTEXT_LABELS"),
GET_ALL_ASSIGNED_APPLICATION_BY_PAGINATION("GET_ALL_ASSIGNED_APPLICATION_BY_PAGINATION"),
GET_ALL_APPLICATION_AMENDMENT_BY_PAGINATION("GET_ALL_APPLICATION_AMENDMENT_BY_PAGINATION"),
GET_ALL_USER_ACTION_BY_PAGINATION("GET_ALL_USER_ACTION_BY_PAGINATION"),
GET_ALL_USER_BY_PAGINATION("GET_ALL_USER_BY_PAGINATION");
private final String value; private final String value;

View File

@@ -0,0 +1,14 @@
package net.gepafin.tendermanagement.model.request;
import lombok.Data;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
import java.util.List;
@Data
public class ApplicationAmendmentPaginationRequestBean {
private GlobalFilters globalFilters;
private List<ApplicationAmendmentRequestEnum> status;
}

View File

@@ -11,7 +11,7 @@ public class AppointmentCreationRequest {
@Data @Data
public static class Input { public static class Input {
private String id; private Long id;
private String ndg; private String ndg;
private List<RichiestaCliente> richiestaCliente; private List<RichiestaCliente> richiestaCliente;
} }
@@ -20,8 +20,8 @@ public class AppointmentCreationRequest {
public static class RichiestaCliente { public static class RichiestaCliente {
private String codAbi; private String codAbi;
private String codCab; private String codCab;
private Integer durataMesiFinanziamento; private int durataMesiFinanziamento;
private Integer idMotivazione; private int idMotivazione;
private String idNota; private String idNota;
private String importoAgevolato; private String importoAgevolato;
private Double importoBreveTermine; private Double importoBreveTermine;

View File

@@ -0,0 +1,15 @@
package net.gepafin.tendermanagement.model.request;
import lombok.Data;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import java.util.List;
@Data
public class AssignedApplicationPageableRequestBean {
private GlobalFilters globalFilters;
private List<AssignedApplicationEnum> status;
}

View File

@@ -26,7 +26,7 @@ public class CreateCallRequestStep1 {
private Long numberOfCheck; private Long numberOfCheck;
private Long productId; private Long appointmentTemplateId;
private List<LookUpDataReq> aimedTo; private List<LookUpDataReq> aimedTo;

View File

@@ -2,7 +2,6 @@ package net.gepafin.tendermanagement.model.request;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List; import java.util.List;
import lombok.Data; import lombok.Data;
@@ -43,7 +42,7 @@ public class UpdateCallRequestStep1 {
private Long numberOfCheck; private Long numberOfCheck;
private Long productId; private Long appointmentTemplateId;
private EvaluationVersionEnum evaluationVersion; private EvaluationVersionEnum evaluationVersion;

View File

@@ -0,0 +1,21 @@
package net.gepafin.tendermanagement.model.request;
import lombok.Data;
import net.gepafin.tendermanagement.enums.TimePeriodEnum;
import net.gepafin.tendermanagement.enums.UserActionContextEnum;
import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
import java.util.List;
@Data
public class UserActionPaginationRequest {
private GlobalFilters globalFilters;
private TimePeriodEnum timeFilter;
private List<UserActionContextEnum> actionContext;
private List<UserActionLogsEnum> actionType;
}

View File

@@ -0,0 +1,17 @@
package net.gepafin.tendermanagement.model.request;
import lombok.Data;
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
import net.gepafin.tendermanagement.enums.UserStatusEnum;
import java.util.List;
@Data
public class UserPaginationRequestBean {
private GlobalFilters globalFilters;
private List<UserStatusEnum> status;
private List<RoleStatusEnum> role;
}

View File

@@ -44,7 +44,7 @@ public class ApplicationEvaluationFormResponse {
private LocalDateTime dateAccepted; private LocalDateTime dateAccepted;
private LocalDateTime dateRejected; private LocalDateTime dateRejected;
private EvaluationVersionEnum evaluationVersion; private EvaluationVersionEnum evaluationVersion;
private BigDecimal numberOfCheck; private Long numberOfCheck;
private BigDecimal productId; private Long appointmentTemplateId;
} }

View File

@@ -45,7 +45,7 @@ public class ApplicationEvaluationResponse {
private LocalDateTime dateAccepted; private LocalDateTime dateAccepted;
private LocalDateTime dateRejected; private LocalDateTime dateRejected;
private Long numberOfCheck; private Long numberOfCheck;
private Long productId; private Long appointmentTemplateId;
private EvaluationVersionEnum evaluationVersion; private EvaluationVersionEnum evaluationVersion;
} }

View File

@@ -5,7 +5,6 @@ import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.enums.EvaluationVersionEnum; import net.gepafin.tendermanagement.enums.EvaluationVersionEnum;
import net.gepafin.tendermanagement.model.BaseBean; import net.gepafin.tendermanagement.model.BaseBean;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Data @Data
@@ -25,9 +24,10 @@ public class AssignedApplicationsResponse extends BaseBean {
private String companyName; private String companyName;
private LocalDateTime evaluationEndDate; private LocalDateTime evaluationEndDate;
private Long numberOfCheck; private Long numberOfCheck;
private Long productId; private Long appointmentTemplateId;
private EvaluationVersionEnum evaluationVersion; private EvaluationVersionEnum evaluationVersion;
private String ndg;
private String appointmentId;
} }

View File

@@ -59,7 +59,7 @@ public class CallDetailsResponseBean {
private Long numberOfCheck; private Long numberOfCheck;
private Long productId; private Long appointmentTemplateId;
private EvaluationVersionEnum evaluationVersion; private EvaluationVersionEnum evaluationVersion;
} }

View File

@@ -52,7 +52,7 @@ public class CallResponse {
private Long numberOfCheck; private Long numberOfCheck;
private Long productId; private Long appointmentTemplateId;
@JsonSerialize(using = DynamicLocalTimeSerializer.class) @JsonSerialize(using = DynamicLocalTimeSerializer.class)
private LocalTime startTime; private LocalTime startTime;

View File

@@ -14,5 +14,4 @@ public class SummaryPageResponseBean {
private LocalDateTime registrationDate; private LocalDateTime registrationDate;
private Long numberOfLoginAttempts; private Long numberOfLoginAttempts;
private Long applicationsProcessed; private Long applicationsProcessed;
private List<UserActionResponseBean> userActions;
} }

View File

@@ -28,4 +28,11 @@ public interface ApplicationEvaluationFormFieldRepository extends JpaRepository<
@Param("fieldIds") List<String> fieldIds); @Param("fieldIds") List<String> fieldIds);
@Query("SELECT f FROM ApplicationEvaluationFormFieldEntity f " +
"WHERE f.applicationEvaluationForm.id = :applicationEvaluationFormId " +
"AND f.fieldId = :fieldId " +
"AND f.isDeleted = false")
ApplicationEvaluationFormFieldEntity findByFieldIdAndApplicationEvaluationFormId(
@Param("fieldId") String fieldId,
@Param("applicationEvaluationFormId") Long applicationEvaluationFormId);
} }

View File

@@ -162,4 +162,6 @@ public interface ApplicationRepository extends JpaRepository<ApplicationEntity,
List<ApplicationEntity> findByUserIdAndUserWithCompany_IdAndCall_IdAndIsDeletedFalseAndStatusNot( List<ApplicationEntity> findByUserIdAndUserWithCompany_IdAndCall_IdAndIsDeletedFalseAndStatusNot(
Long userId, Long userWithCompanyId, Long callId, String status Long userId, Long userWithCompanyId, Long callId, String status
); );
ApplicationEntity findByIdAndCompanyIdAndIsDeletedFalse(Long id,Long companyId);
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
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;
@@ -10,7 +11,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
@Repository @Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> { public interface UserRepository extends JpaRepository<UserEntity, Long>, JpaSpecificationExecutor<UserEntity> {
UserEntity findByBeneficiaryId(Long beneficiaryId); UserEntity findByBeneficiaryId(Long beneficiaryId);

View File

@@ -4,10 +4,12 @@ import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentPaginationRequestBean;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean;
import java.util.List; import java.util.List;
@@ -27,4 +29,5 @@ public interface ApplicationAmendmentRequestService {
public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus(HttpServletRequest request, Long applicationAmendmentId, ApplicationAmendmentRequestEnum status); public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus(HttpServletRequest request, Long applicationAmendmentId, ApplicationAmendmentRequestEnum status);
void sendReminderEmail(HttpServletRequest request,Long amendmentId); void sendReminderEmail(HttpServletRequest request,Long amendmentId);
PageableResponseBean<List<ApplicationAmendmentRequestResponse>> getApplicationAmendmentByPaginnation(HttpServletRequest request, Long userId, ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean);
} }

View File

@@ -29,7 +29,7 @@ public interface ApplicationService {
public ApplicationResponse createApplication(HttpServletRequest request, Long companyId, ApplicationRequest applicationRequest, Long callId); public ApplicationResponse createApplication(HttpServletRequest request, Long companyId, ApplicationRequest applicationRequest, Long callId);
public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId, FormActionEnum action); public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId,Long companyId, Long formId, FormActionEnum action);
public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status); public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status);
@@ -45,4 +45,5 @@ public interface ApplicationService {
PageableResponseBean<List<ApplicationResponse>> getAllApplicationByPagination(HttpServletRequest request, Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean); PageableResponseBean<List<ApplicationResponse>> getAllApplicationByPagination(HttpServletRequest request, Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean);
public ApplicationEntity validateApplicationWithCompany(Long applicationId,Long companyId);
} }

View File

@@ -2,11 +2,13 @@ package net.gepafin.tendermanagement.service;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity;
import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableRequestBean;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import java.util.List; import java.util.List;
@@ -21,5 +23,6 @@ public interface AssignedApplicationsService {
AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, UpdateAssignedApplicationRequest assignedApplicationsRequest); AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, UpdateAssignedApplicationRequest assignedApplicationsRequest);
AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id); AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id);
AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId); AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId);
PageableResponseBean<List<AssignedApplicationsResponse>> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean);
AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status); AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status);
} }

View File

@@ -7,7 +7,9 @@ import net.gepafin.tendermanagement.model.request.NotificationReq;
import net.gepafin.tendermanagement.model.request.NotificationRequestBean; 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.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.util.Response;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;
import java.util.List; import java.util.List;
@@ -25,4 +27,7 @@ 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); PageableResponseBean<List<NotificationResponse>> getAllNotification(HttpServletRequest request,Long userId, NotificationRequestBean notificationRequestBean);
}
PageableResponseBean<List<NotificationResponse>> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, Long userId, Long companyId, NotificationRequestBean notificationRequestBean);
}

View File

@@ -3,13 +3,19 @@ package net.gepafin.tendermanagement.service;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.TimePeriodEnum;
import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum;
import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest;
import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean;
import net.gepafin.tendermanagement.model.response.UserActionResponseBean;
import java.util.List; import java.util.List;
public interface UserActionService { public interface UserActionService {
public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId, TimePeriodEnum timeFilter, List<UserActionContextEnum> actionContext); public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId);
public List<ActionContextLabelResponse> getActionContextLabels(HttpServletRequest request, Long userId); public List<ActionContextLabelResponse> getActionContextLabels(HttpServletRequest request, Long userId);
public PageableResponseBean<List<UserActionResponseBean>> getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest);
} }

View File

@@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserSamlResponse;
import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.response.UserResponseBean;
import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.model.util.JWTToken;
@@ -47,6 +48,7 @@ public interface UserService {
public UserEntity getUserEntityById(Long userId); public UserEntity getUserEntityById(Long userId);
List<UserResponseBean> getAllUsers(HttpServletRequest request, List<Long> roleIds); List<UserResponseBean> getAllUsers(HttpServletRequest request, List<Long> roleIds);
PageableResponseBean<List<UserResponseBean>> getUserByPagination(HttpServletRequest request, UserPaginationRequestBean userPaginationRequestBean);
UserResponseBean updateUserDetails(HttpServletRequest request, Long userId, UpdateUserReqForBeneficiary userReq); UserResponseBean updateUserDetails(HttpServletRequest request, Long userId, UpdateUserReqForBeneficiary userReq);
} }

View File

@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -31,7 +32,7 @@ public interface AppointmentApiService {
ResponseEntity<Object> getVisuraList(@RequestBody String visuraRequest, @RequestHeader("Authorization") String token); ResponseEntity<Object> getVisuraList(@RequestBody String visuraRequest, @RequestHeader("Authorization") String token);
@GetMapping(value = AppointmentApiConstant.GET_APPOINTMENT_TEMPLATE, consumes = MediaType.APPLICATION_JSON_VALUE) @GetMapping(value = AppointmentApiConstant.GET_APPOINTMENT_TEMPLATE, consumes = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<Object> getAppointmentTemplateForTemplateCreation(@RequestHeader("Authorization") String token); ResponseEntity<Object> getAppointmentTemplateForTemplateCreation(@RequestHeader("Authorization") String token, @RequestParam("idAppuntamentoTemplate") Long templateId);
@PostMapping(value = AppointmentApiConstant.CREATE_APPOINTMENT_FROM_TEMPLATE, consumes = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = AppointmentApiConstant.CREATE_APPOINTMENT_FROM_TEMPLATE, consumes = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<Object> createAppointment(@RequestHeader("Authorization") String token, @RequestHeader("context") String context, String appointmentCreationRequest); ResponseEntity<Object> createAppointment(@RequestHeader("Authorization") String token, @RequestHeader("context") String context, String appointmentCreationRequest);

View File

@@ -8,10 +8,12 @@ import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentPaginationRequestBean;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean;
import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository; import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository;
import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository;
@@ -149,4 +151,10 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm
applicationAmendmentRequestDao.sendReminderEmail(amendmentId); applicationAmendmentRequestDao.sendReminderEmail(amendmentId);
} }
} }
@Override
public PageableResponseBean<List<ApplicationAmendmentRequestResponse>> getApplicationAmendmentByPaginnation(HttpServletRequest request, Long userId, ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean) {
UserEntity user=validator.validateUser(request);
return applicationAmendmentRequestDao.getApplicationAmendmentByPaginnation(userId,amendmentPaginationRequestBean);
}
} }

View File

@@ -17,6 +17,7 @@ import net.gepafin.tendermanagement.model.response.*;
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;
import net.gepafin.tendermanagement.web.rest.api.errors.ForbiddenAccessException;
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.stereotype.Service; import org.springframework.stereotype.Service;
@@ -72,13 +73,24 @@ public class ApplicationServiceImpl implements ApplicationService {
validator.validateUserWithCall(userEntity, callId); validator.validateUserWithCall(userEntity, callId);
return applicationDao.createApplicationByCallId(companyEntity, applicationRequest, callId, userEntity); return applicationDao.createApplicationByCallId(companyEntity, applicationRequest, callId, userEntity);
} }
@Override @Override
public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId, public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long companyId, Long formId,
FormActionEnum action) { FormActionEnum action) {
ApplicationEntity applicationEntity = validateApplication(applicationId); if (companyId !=null) {
validator.validateUserWithCompany(request, applicationEntity.getCompanyId()); validator.validateUserWithCompany(request, companyId);
return flowFormDao.getNextOrPreviousForm(applicationEntity, formId, action); }
ApplicationEntity applicationEntity =null;
if(validator.checkIsBeneficiary()){
if(companyId==null){
throw new ForbiddenAccessException(Status.FORBIDDEN,Translator.toLocale(GepafinConstant.COMPANY_ID_MANDATORY));
}
applicationEntity = validateApplicationWithCompany(applicationId, companyId);
}else {
applicationEntity=validateApplication(applicationId);
}
return flowFormDao.getNextOrPreviousForm(applicationEntity, companyId, formId, action);
} }
@Override @Override
@@ -135,4 +147,9 @@ public class ApplicationServiceImpl implements ApplicationService {
return applicationDao.getAllApplicationByPagination(userEntity,callId,companyId,applicationPageableRequestBean); return applicationDao.getAllApplicationByPagination(userEntity,callId,companyId,applicationPageableRequestBean);
} }
@Override
@Transactional(rollbackFor = Exception.class)
public ApplicationEntity validateApplicationWithCompany(Long applicationId,Long companyId) {
return applicationDao.validateApplicationWithCompany(applicationId,companyId);
}
} }

View File

@@ -4,11 +4,13 @@ import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.dao.AssignedApplicationsDao; import net.gepafin.tendermanagement.dao.AssignedApplicationsDao;
import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableRequestBean;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.service.AssignedApplicationsService;
import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -62,6 +64,13 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ
public AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId) { public AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId) {
return assignedApplicationsDao.validateAssignedApplication(assignedApplicationId); return assignedApplicationsDao.validateAssignedApplication(assignedApplicationId);
} }
@Override
public PageableResponseBean<List<AssignedApplicationsResponse>> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) {
UserEntity user=validator.validateUser(request);
return assignedApplicationsDao.getAllAssignedApplicationsByPagination(user,assignedApplicationPageableRequestBean,userId);
}
@Override @Override
public AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) { public AssignedApplicationsResponse updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) {
return assignedApplicationsDao.updateAssignedApplicationStatus(request, assignedApplicationId, status); return assignedApplicationsDao.updateAssignedApplicationStatus(request, assignedApplicationId, status);

View File

@@ -74,4 +74,9 @@ public class NotificationServiceImpl implements NotificationService {
UserEntity userEntity = validator.validateUser(request); UserEntity userEntity = validator.validateUser(request);
return notificationDao.getAllNotification(userId,notificationRequestBean); return notificationDao.getAllNotification(userId,notificationRequestBean);
} }
@Override
public PageableResponseBean<List<NotificationResponse>> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, Long userId, Long companyId, NotificationRequestBean notificationRequestBean) {
return notificationDao.getNotificationsByUserIdAndCompanyIdByPagination(userId,companyId,notificationRequestBean);
}
} }

View File

@@ -26,6 +26,9 @@ public class PecEmailService implements EmailService {
@Value("${isMailSendingEnabled}") @Value("${isMailSendingEnabled}")
private String isEmailSendingEnabled; private String isEmailSendingEnabled;
@Value("${isPecServiceEnabled}")
private String isPecServiceEnabled;
@Autowired @Autowired
private Validator validator; private Validator validator;
@@ -55,23 +58,27 @@ public class PecEmailService implements EmailService {
emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue());
emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(emailRequest.getRecipient())); emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(emailRequest.getRecipient()));
try { try {
Unirest.setTimeouts(0, 0); if (Boolean.TRUE.equals(Boolean.parseBoolean(isPecServiceEnabled))) {
response2 = Unirest.post(url) Unirest.setTimeouts(0, 0);
.header("Authorization", "Bearer " + authToken) response2 = Unirest.post(url)
.header("Content-Type", "application/json") .header("Authorization", "Bearer " + authToken)
.body(Utils.convertObjectToJson(emailRequest)) // Serialize the emailRequest object to JSON .header("Content-Type", "application/json")
.asString(); .body(Utils.convertObjectToJson(emailRequest)) // Serialize the emailRequest object to JSON
.asString();
}
}catch(Exception e) { }catch(Exception e) {
emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue());
emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE);
emailLogRequest.setErrorMessage(e.getMessage()); emailLogRequest.setErrorMessage(e.getMessage());
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); emailLogDao.createEmailLog(emailLogRequest);
throw new RuntimeException("Failed to send email via PEC: " + response2.getStatus()); throw new RuntimeException("Failed to send email via PEC: " + response2.getStatus());
} }
emailLogRequest.setEmailServiceResponse(response2.getBody()); if(response2 != null) {
emailLogRequest.setEmailServiceResponse(response2.getBody());
}
} }
emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE);
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); emailLogDao.createEmailLog(emailLogRequest);
} }
} }

View File

@@ -5,8 +5,11 @@ import net.gepafin.tendermanagement.dao.UserActionDao;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.TimePeriodEnum;
import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum;
import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest;
import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean;
import net.gepafin.tendermanagement.model.response.UserActionResponseBean;
import net.gepafin.tendermanagement.service.UserActionService; import net.gepafin.tendermanagement.service.UserActionService;
import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -25,9 +28,9 @@ public class UserActionServiceImpl implements UserActionService {
@Override @Override
public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId, TimePeriodEnum timeFilter, List<UserActionContextEnum> actionContext) { public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId) {
UserEntity user = validator.validateUserId(request, userId); UserEntity user = validator.validateUserId(request, userId);
return userActionDao.getUserAction(request,user,timeFilter,actionContext); return userActionDao.getUserAction(request,user);
} }
@Override @Override
@@ -35,4 +38,10 @@ public class UserActionServiceImpl implements UserActionService {
UserEntity user = validator.validateUserId(request, userId); UserEntity user = validator.validateUserId(request, userId);
return userActionDao.getActionContextLabels(request,user); return userActionDao.getActionContextLabels(request,user);
} }
@Override
public PageableResponseBean<List<UserActionResponseBean>> getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) {
UserEntity user = validator.validateUserId(request, userId);
return userActionDao.getUserActionByPagination(user,userActionPaginationRequest);
}
} }

View File

@@ -11,6 +11,7 @@ import net.gepafin.tendermanagement.model.request.UpdateUserReq;
import net.gepafin.tendermanagement.model.request.UserReq; import net.gepafin.tendermanagement.model.request.UserReq;
import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserSamlResponse;
import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.response.UserResponseBean;
import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.model.util.JWTToken;
@@ -131,6 +132,11 @@ public class UserServiceImpl implements UserService {
return userDao.getAllUsers(user, roleIds); return userDao.getAllUsers(user, roleIds);
} }
@Override
public PageableResponseBean<List<UserResponseBean>> getUserByPagination(HttpServletRequest request, UserPaginationRequestBean userPaginationRequestBean) {
UserEntity user = validator.validateUser(request);
return userDao.getUserByPagination(userPaginationRequestBean, user);
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public UserResponseBean updateUserDetails(HttpServletRequest request, Long userId, UpdateUserReqForBeneficiary userReq) { public UserResponseBean updateUserDetails(HttpServletRequest request, Long userId, UpdateUserReqForBeneficiary userReq) {

View File

@@ -200,7 +200,7 @@ public class FieldValidator {
public FieldValidator validateCustomTableValidation(String value, String customRule, String fieldId, ContentResponseBean contentResponseBean) { public FieldValidator validateCustomTableValidation(String value, String customRule, String fieldId, ContentResponseBean contentResponseBean) {
if (customRule == null || value == null) { if (customRule == null ) {
return this; // No custom rule to validate return this; // No custom rule to validate
} }
@@ -226,6 +226,7 @@ public class FieldValidator {
.findFirst() // Get the first matching result .findFirst() // Get the first matching result
.orElse(null); // Default to null if no match .orElse(null); // Default to null if no match
if (tableType!=null){ if (tableType!=null){
try { try {
Object object = PdfUtils.extractRows(value);; Object object = PdfUtils.extractRows(value);;
@@ -291,6 +292,22 @@ public class FieldValidator {
// //
// } // }
boolean hasAtLeastOneNonEmptyPredefinedFalse = fieldValueList.stream()
.anyMatch(field -> stateFieldMap.entrySet().stream()
.filter(entry -> Boolean.FALSE.equals(entry.getValue())) // Check only predefined: false fields
.anyMatch(entry -> {
Object fieldValue = field.get(entry.getKey());
return fieldValue != null && !StringUtils.isEmpty(fieldValue.toString());
})
);
if (!hasAtLeastOneNonEmptyPredefinedFalse) {
errors.add(MessageFormat.format(
Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE),
fieldId));
}
} catch (Exception e) { } catch (Exception e) {
} }
} }

View File

@@ -61,7 +61,7 @@ public class UserActionAspect {
handleSuccessResponse((ResponseEntity<?>) result, storedUserActionId == null ? userActionId : storedUserActionId); handleSuccessResponse((ResponseEntity<?>) result, storedUserActionId == null ? userActionId : storedUserActionId);
} }
} catch (Exception ex) { } catch (Exception ex) {
log.error("Exception occurred: ", ex); // log.error("Exception occurred: ", ex);
handleError(ex, getUserActionIdFromRequest(request)); handleError(ex, getUserActionIdFromRequest(request));
throw ex; throw ex;
} finally { } finally {

View File

@@ -785,5 +785,7 @@ public class Utils {
return input.matches("-?\\d+(\\.\\d+)?"); return input.matches("-?\\d+(\\.\\d+)?");
} }
public static boolean isValidBoolean(String value) {
return "true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value);
}
} }

View File

@@ -9,11 +9,11 @@ import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse;
import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.ApplicationResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean;
import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean;
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;
@@ -78,7 +78,7 @@ public interface ApplicationAmendmentRequestApi {
@GetMapping(value = "", produces = "application/json") @GetMapping(value = "", produces = "application/json")
ResponseEntity<Response<ApplicationAmendmentRequestResponse>> getApplicationAmendmentRequestById(HttpServletRequest request,@Parameter(description = "The application amendment id", required = true) @RequestParam(value = "id", required = true) Long id); ResponseEntity<Response<ApplicationAmendmentRequestResponse>> getApplicationAmendmentRequestById(HttpServletRequest request,@Parameter(description = "The application amendment id", required = true) @RequestParam(value = "id", required = true) Long id);
@Operation(summary = "Api to get all applications amendment request by preInstructor user Id", @Operation(summary = "Api to get all applications amendment request by preInstructor user Id (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 = {
@@ -107,7 +107,7 @@ public interface ApplicationAmendmentRequestApi {
@Parameter(description = "The Application Amendment id", required = true) @PathVariable("id") Long id, @Parameter(description = "The Application Amendment id", required = true) @PathVariable("id") Long id,
@Parameter(description = "Assigned Application request object", required = true) @Valid @RequestBody ApplicationAmendmentRequestBean applicationAmendmentRequestBean); @Parameter(description = "Assigned Application request object", required = true) @Valid @RequestBody ApplicationAmendmentRequestBean applicationAmendmentRequestBean);
@Operation(summary = "Api to get all applications amendment request by beneficary user Id", @Operation(summary = "Api to get all applications amendment request by beneficary user Id (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 = {
@@ -191,4 +191,17 @@ public interface ApplicationAmendmentRequestApi {
@Parameter( required = true) @Parameter( required = true)
@PathVariable(value = "amendmentId") Long amendmentId); @PathVariable(value = "amendmentId") Long amendmentId);
@Operation(summary = "Api to get all application amendment 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", produces = { "application/json" })
ResponseEntity<Response<PageableResponseBean<List<ApplicationAmendmentRequestResponse>>>> getApplicationAmendmentByPaginnation(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId,
@RequestBody ApplicationAmendmentPaginationRequestBean userActionPaginationRequest);
} }

View File

@@ -114,6 +114,7 @@ public interface ApplicationApi {
@GetMapping(value = "/{applicationId}/form/next-previous", produces = "application/json") @GetMapping(value = "/{applicationId}/form/next-previous", produces = "application/json")
ResponseEntity<Response<NextOrPreviousFormResponse>> getNextOrPreviousForm(HttpServletRequest request, ResponseEntity<Response<NextOrPreviousFormResponse>> getNextOrPreviousForm(HttpServletRequest request,
@Parameter(description = "The applicaltion id", required = true) @PathVariable("applicationId") Long applicationId, @Parameter(description = "The applicaltion id", required = true) @PathVariable("applicationId") Long applicationId,
@Parameter(description = "The company id", required = false) @RequestParam(value = "companyId",required = false) Long companyId,
@Parameter(description = "The form id", required = false) @RequestParam(value = "formId", required = false) Long formId, @Parameter(description = "The form id", required = false) @RequestParam(value = "formId", required = false) Long formId,
@RequestParam(value = "action", required = false) FormActionEnum action); @RequestParam(value = "action", required = false) FormActionEnum action);

View File

@@ -6,12 +6,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 jakarta.validation.Valid; import jakarta.validation.Valid;
import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableRequestBean;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest;
import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.ApplicationResponse;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
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.http.MediaType; import org.springframework.http.MediaType;
@@ -58,7 +60,7 @@ public interface AssignedApplicationsApi {
ResponseEntity<Response<Void>> deleteAssignedApplication(HttpServletRequest request, ResponseEntity<Response<Void>> deleteAssignedApplication(HttpServletRequest request,
@Parameter(description = "The assigned application id", required = true) @PathVariable("id") Long id); @Parameter(description = "The assigned application id", required = true) @PathVariable("id") Long id);
@Operation(summary = "Api to get all assigned applications", @Operation(summary = "Api to get all assigned 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 = {
@@ -116,5 +118,18 @@ public interface AssignedApplicationsApi {
@Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) AssignedApplicationEnum status); @Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) AssignedApplicationEnum status);
@Operation(summary = "Api to get all assigned applications 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", produces = "application/json")
ResponseEntity<Response<PageableResponseBean<List<AssignedApplicationsResponse>>>> getAllAssignedApplicationsByPagination(HttpServletRequest request,
@Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId, @RequestBody AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean);
} }

View File

@@ -87,7 +87,7 @@ public interface NotificationApi {
ResponseEntity<Response<Void>> deleteNotification(HttpServletRequest request, ResponseEntity<Response<Void>> deleteNotification(HttpServletRequest request,
@Parameter(description = "The notification id", required = true) @PathVariable(value = "id", required = true) Long id); @Parameter(description = "The notification id", required = true) @PathVariable(value = "id", required = true) Long id);
@Operation(summary = "API to get notifications by user ID and company ID", responses = { @ApiResponse(responseCode = "200", description = "OK"), @Operation(summary = "API to get notifications by user ID and company ID (deprecated) ", responses = { @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 = {
@ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })),
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@@ -110,6 +110,22 @@ public interface NotificationApi {
@PostMapping(value = "/user/{userId}/pagination", consumes = "application/json", produces = "application/json") @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); ResponseEntity<Response<PageableResponseBean<List<NotificationResponse>>>> getAllNotification(HttpServletRequest request,@Parameter(description = "The user id", required = true) @PathVariable(value = "userId") Long userId, @RequestBody NotificationRequestBean notificationRequestBean);
@Operation(summary = "API to get notifications by user ID and company ID 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}/company/{companyId}/pagination", produces = "application/json")
ResponseEntity<Response<PageableResponseBean<List<NotificationResponse>>>> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request,
@Parameter(description = "The user id", required = true) @PathVariable(value = "userId") Long userId,
@Parameter(description = "The company ID", required = true) @PathVariable(value = "companyId") Long companyId,
@RequestBody NotificationRequestBean notificationRequestBean);
} }

View File

@@ -8,20 +8,21 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.TimePeriodEnum;
import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum;
import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest;
import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean;
import net.gepafin.tendermanagement.model.response.UserActionResponseBean;
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.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
public interface UserActionApi { public interface UserActionApi {
@Operation(summary = "Api to get user action", @Operation(summary = "Api to get user summary ",
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 = {
@@ -31,9 +32,7 @@ public interface UserActionApi {
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) })
@GetMapping(value = "/user/{userId}", produces = { "application/json" }) @GetMapping(value = "/user/{userId}", produces = { "application/json" })
ResponseEntity<Response<SummaryPageResponseBean>> getUserAction(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId, ResponseEntity<Response<SummaryPageResponseBean>> getUserAction(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId);
@Parameter(description = "Time Filter") @RequestParam(value = "timeFilter", required = false) TimePeriodEnum timeFilter,
@Parameter(description = "Action Context") @RequestParam(value = "actionContext", required = false) List<UserActionContextEnum> actionContext);
@Operation(summary = "Api to get action context label", @Operation(summary = "Api to get action context label",
responses = { responses = {
@@ -46,4 +45,18 @@ public interface UserActionApi {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) })
@GetMapping(value = "/user/{userId}/action-context", produces = { "application/json" }) @GetMapping(value = "/user/{userId}/action-context", produces = { "application/json" })
ResponseEntity<Response<List<ActionContextLabelResponse>>> getActionContextLabels(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId); ResponseEntity<Response<List<ActionContextLabelResponse>>> getActionContextLabels(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId);
@Operation(summary = "Api to get all user action 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", produces = { "application/json" })
ResponseEntity<Response<PageableResponseBean<List<UserActionResponseBean>>>> getUserActionByPaginnation(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId,
@RequestBody UserActionPaginationRequest userActionPaginationRequest);
} }

View File

@@ -10,6 +10,8 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean;
import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserSamlResponse;
import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.response.UserResponseBean;
import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.model.util.JWTToken;
@@ -225,7 +227,7 @@ public interface UserApi {
ResponseEntity<Response<UserSamlResponse>> validateNewUserToken(HttpServletRequest request, ResponseEntity<Response<UserSamlResponse>> validateNewUserToken(HttpServletRequest request,
@Parameter(description = "The spid token", required = true) @PathVariable("token") String token); @Parameter(description = "The spid token", required = true) @PathVariable("token") String token);
@Operation(summary = "Api to get all users", @Operation(summary = "Api to get all users (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 = {
@@ -244,6 +246,20 @@ public interface UserApi {
@ResponseBody @ResponseBody
void returnNoFavicon(); void returnNoFavicon();
@Operation(summary = "Api to get all user 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", produces = { "application/json" })
ResponseEntity<Response<PageableResponseBean<List<UserResponseBean>>>> getUserByPagination(HttpServletRequest request,
@RequestBody UserPaginationRequestBean userPaginationRequestBean);
@Operation(summary = "Api to update user", @Operation(summary = "Api to update user",
responses = { responses = {
@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "200", description = "OK"),

View File

@@ -36,7 +36,7 @@ public class GlobalExceptionHandler {
@ResponseBody @ResponseBody
public Response<Object> handleCustomValidationException(final CustomValidationException ex) { public Response<Object> handleCustomValidationException(final CustomValidationException ex) {
log.error(ex.getMessage()); log.error(ex.getMessage());
log.error(ex.getLocalizedMessage(), ex); // log.error(ex.getLocalizedMessage(), ex);
return new Response<>(null, ex.getStatus(), ex.getMessage()); return new Response<>(null, ex.getStatus(), ex.getMessage());
} }
@@ -45,14 +45,14 @@ public class GlobalExceptionHandler {
@ResponseBody @ResponseBody
public Response<Object> handleValidationException(final ValidationException ex) { public Response<Object> handleValidationException(final ValidationException ex) {
log.error(ex.getMessage()); log.error(ex.getMessage());
log.error(ex.getLocalizedMessage(), ex); // log.error(ex.getLocalizedMessage(), ex);
return new Response<>(ex.getErrors(), ex.getStatus(), ex.getMessage()); return new Response<>(ex.getErrors(), ex.getStatus(), ex.getMessage());
} }
@ExceptionHandler(ResourceNotFoundException.class) @ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<Response<Void>> handleResourceNotFoundException(ResourceNotFoundException ex) { public ResponseEntity<Response<Void>> handleResourceNotFoundException(ResourceNotFoundException ex) {
log.error(ex.getMessage()); log.error(ex.getMessage());
log.error(ex.getLocalizedMessage(), ex); // log.error(ex.getLocalizedMessage(), ex);
return ResponseEntity.status(HttpStatus.NOT_FOUND) return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new Response<>(null, ex.getStatus(), ex.getMessage())); .body(new Response<>(null, ex.getStatus(), ex.getMessage()));
} }
@@ -71,7 +71,7 @@ public class GlobalExceptionHandler {
@ResponseBody @ResponseBody
public Response<Object> handleInvalidTokenException(final Throwable ex) { public Response<Object> handleInvalidTokenException(final Throwable ex) {
log.error(ex.getMessage()); log.error(ex.getMessage());
log.error(ex.getLocalizedMessage(), ex); // log.error(ex.getLocalizedMessage(), ex);
return new Response<>(ex.getMessage(), Status.UNAUTHORIZED, Translator.toLocale("invalid_signature")); return new Response<>(ex.getMessage(), Status.UNAUTHORIZED, Translator.toLocale("invalid_signature"));
} }
@@ -80,7 +80,7 @@ public class GlobalExceptionHandler {
@ResponseBody @ResponseBody
public Response<Object> unauthorizedAccessException(final Throwable ex) { public Response<Object> unauthorizedAccessException(final Throwable ex) {
log.error(ex.getMessage()); log.error(ex.getMessage());
log.error(ex.getLocalizedMessage(), ex); // log.error(ex.getLocalizedMessage(), ex);
return new Response<>(null, Status.UNAUTHORIZED, ex.getMessage()); return new Response<>(null, Status.UNAUTHORIZED, ex.getMessage());
} }
@@ -115,7 +115,7 @@ public class GlobalExceptionHandler {
@ResponseBody @ResponseBody
public Response<Object> handleUnAuthorizedException(final Throwable ex) { public Response<Object> handleUnAuthorizedException(final Throwable ex) {
log.error(ex.getMessage()); log.error(ex.getMessage());
log.error(ex.getLocalizedMessage(), ex); // log.error(ex.getLocalizedMessage(), ex);
return new Response<>(null, Status.VALIDATION_ERROR, Translator.toLocale("invalid_login")); return new Response<>(null, Status.VALIDATION_ERROR, Translator.toLocale("invalid_login"));
} }

View File

@@ -7,11 +7,9 @@ import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum;
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.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
import net.gepafin.tendermanagement.model.request.UserActionRequest;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean;
import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.model.util.Response;
import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService;
@@ -188,4 +186,15 @@ public class ApplicationAmendmentRequestController implements ApplicationAmendme
.body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.REMINDER_EMAIL_SENT_SUCCESS_MSG))); .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.REMINDER_EMAIL_SENT_SUCCESS_MSG)));
} }
@Override
public ResponseEntity<Response<PageableResponseBean<List<ApplicationAmendmentRequestResponse>>>> getApplicationAmendmentByPaginnation(HttpServletRequest request, Long userId, ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean) {
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW)
.actionContext(UserActionContextEnum.GET_ALL_APPLICATION_AMENDMENT_BY_PAGINATION).build());
PageableResponseBean<List<ApplicationAmendmentRequestResponse>> listPageableResponseBean=applicationAmendmentRequestService.getApplicationAmendmentByPaginnation(request,userId,amendmentPaginationRequestBean);
return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(listPageableResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_DATA_FOR_AMENDMENT_SUCCESS_MSG)));
}
} }

View File

@@ -116,13 +116,13 @@ public class ApplicationApiController implements ApplicationApi {
} }
@Override @Override
public ResponseEntity<Response<NextOrPreviousFormResponse>> getNextOrPreviousForm(HttpServletRequest request, Long applicationId, public ResponseEntity<Response<NextOrPreviousFormResponse>> getNextOrPreviousForm(HttpServletRequest request, Long applicationId,Long companyId,
Long formId, FormActionEnum action) { Long formId, FormActionEnum action) {
/** This code is responsible for creating user action logs for the "get next or previous form" operation. **/ /** This code is responsible for creating user action logs for the "get next or previous form" operation. **/
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_NEXT_PREVIOUS_FORM).build()); loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_NEXT_PREVIOUS_FORM).build());
NextOrPreviousFormResponse data = applicationService.getNextOrPreviousForm(request, applicationId, formId, action); NextOrPreviousFormResponse data = applicationService.getNextOrPreviousForm(request, applicationId,companyId, formId, action);
log.info("Get Next Or Previous Form "); log.info("Get Next Or Previous Form ");
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); .body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG)));

View File

@@ -8,11 +8,14 @@ import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
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.AssignedApplicationPageableRequestBean;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest;
import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest;
import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.ApplicationResponse;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
import net.gepafin.tendermanagement.model.response.NotificationResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.model.util.Response;
import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.service.AssignedApplicationsService;
import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.LoggingUtil;
@@ -93,6 +96,15 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
} }
@Override @Override
public ResponseEntity<Response<PageableResponseBean<List<AssignedApplicationsResponse>>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) {
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW)
.actionContext(UserActionContextEnum.GET_ALL_ASSIGNED_APPLICATION_BY_PAGINATION).build());
PageableResponseBean<List<AssignedApplicationsResponse>> assigenedApplicationResponses=assignedApplicationsService.getAllAssignedApplicationsByPagination(request, userId,assignedApplicationPageableRequestBean);
return ResponseEntity.status(HttpStatus.OK).body(new Response<>(assigenedApplicationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG)));
}
public ResponseEntity<Response<AssignedApplicationsResponse>> updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) { public ResponseEntity<Response<AssignedApplicationsResponse>> updateAssignedApplicationStatus(HttpServletRequest request, Long assignedApplicationId, AssignedApplicationEnum status) {
/** This code is responsible for creating user action logs for the "update assigned application status" operation. **/ /** This code is responsible for creating user action logs for the "update assigned application status" operation. **/

View File

@@ -92,4 +92,11 @@ public class NotificationApiController implements NotificationApi {
return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY))); return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY)));
} }
@Override
public ResponseEntity<Response<PageableResponseBean<List<NotificationResponse>>>> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, Long userId, Long companyId, NotificationRequestBean notificationRequestBean) {
PageableResponseBean<List<NotificationResponse>> notificationResponses=notificationService.getNotificationsByUserIdAndCompanyIdByPagination(request, userId,companyId,notificationRequestBean);
return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY)));
}
} }

View File

@@ -6,9 +6,12 @@ import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.TimePeriodEnum;
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.UserActionPaginationRequest;
import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest;
import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean;
import net.gepafin.tendermanagement.model.response.UserActionResponseBean;
import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.model.util.Response;
import net.gepafin.tendermanagement.service.UserActionService; import net.gepafin.tendermanagement.service.UserActionService;
import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.LoggingUtil;
@@ -33,12 +36,12 @@ public class UserActionApiController implements UserActionApi {
private LoggingUtil loggingUtil; private LoggingUtil loggingUtil;
@Override @Override
public ResponseEntity<Response<SummaryPageResponseBean>> getUserAction(HttpServletRequest request, Long userId, TimePeriodEnum timeFilter, List<UserActionContextEnum> actionContext) { public ResponseEntity<Response<SummaryPageResponseBean>> getUserAction(HttpServletRequest request, Long userId) {
/** This code is responsible for creating user action logs for the "get user action" operation. **/ /** This code is responsible for creating user action logs for the "get user action" operation. **/
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW)
.actionContext(UserActionContextEnum.GET_USER_ACTION).build()); .actionContext(UserActionContextEnum.GET_USER_ACTION).build());
SummaryPageResponseBean userActionResponse= userActionService.getUserAction(request,userId,timeFilter,actionContext); SummaryPageResponseBean userActionResponse= userActionService.getUserAction(request,userId);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(userActionResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.USER_ACTION_FETCHED_SUCCESSFULLY))); .body(new Response<>(userActionResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.USER_ACTION_FETCHED_SUCCESSFULLY)));
} }
@@ -54,5 +57,16 @@ public class UserActionApiController implements UserActionApi {
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(actionContextResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.ACTION_CONTEXT_LABELS_FETCHED_SUCCESSFULLY))); .body(new Response<>(actionContextResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.ACTION_CONTEXT_LABELS_FETCHED_SUCCESSFULLY)));
} }
@Override
public ResponseEntity<Response<PageableResponseBean<List<UserActionResponseBean>>>> getUserActionByPaginnation(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) {
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW)
.actionContext(UserActionContextEnum.GET_ALL_USER_ACTION_BY_PAGINATION).build());
PageableResponseBean<List<UserActionResponseBean>> userActionResponse= userActionService.getUserActionByPagination(request,userId,userActionPaginationRequest);
return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(userActionResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.USER_ACTION_FETCHED_SUCCESSFULLY)));
}
} }

View File

@@ -11,6 +11,7 @@ import net.gepafin.tendermanagement.enums.UserActionContextEnum;
import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.PageableResponseBean;
import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserSamlResponse;
import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.response.UserResponseBean;
import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.model.util.JWTToken;
@@ -249,6 +250,15 @@ public class UserApiController implements UserApi {
} }
@Override @Override
public ResponseEntity<Response<PageableResponseBean<List<UserResponseBean>>>> getUserByPagination(HttpServletRequest request, UserPaginationRequestBean userPaginationRequestBean) {
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW)
.actionContext(UserActionContextEnum.GET_ALL_USER_BY_PAGINATION).build());
PageableResponseBean<List<UserResponseBean>> users = userService.getUserByPagination(request, userPaginationRequestBean);
return ResponseEntity.status(HttpStatus.OK).body(new Response<>(users, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_USERS_SUCCESS_MSG)));
}
public ResponseEntity<Response<UserResponseBean>> updateUserDetails(HttpServletRequest request, public ResponseEntity<Response<UserResponseBean>> updateUserDetails(HttpServletRequest request,
@PathVariable("userId") Long userId, @PathVariable("userId") Long userId,
@Valid @RequestBody UpdateUserReqForBeneficiary userReq) { @Valid @RequestBody UpdateUserReqForBeneficiary userReq) {

View File

@@ -10,7 +10,8 @@ spring.h2.console.enabled=true
isVatCheckGloballyDisabled = false isVatCheckGloballyDisabled = false
isMailSendingEnabled = true isMailSendingEnabled = true
default_System_Receiver_Email=antonio.manca@bflows.net isPecServiceEnabled = false
#default_System_Receiver_Email=antonio.manca@bflows.net
gepafin_email=rinaldo.bonazzo@bflows.net gepafin_email=rinaldo.bonazzo@bflows.net
rinaldo_email=rinaldo.bonazzo@bflows.net rinaldo_email=rinaldo.bonazzo@bflows.net
carlo_email=test@test.test carlo_email=test@test.test

View File

@@ -9,7 +9,8 @@ spring.jpa.show-sql=true
base-url=http://localhost:8080 base-url=http://localhost:8080
isMailSendingEnabled = false isMailSendingEnabled = false
default_System_Receiver_Email=test@test.test isPecServiceEnabled = false
#default_System_Receiver_Email=test@test.test
gepafin_email=test@test.test gepafin_email=test@test.test
rinaldo_email=test@test.test rinaldo_email=test@test.test
carlo_email=test@test.test carlo_email=test@test.test

View File

@@ -16,7 +16,8 @@ spid.ipd.base.url=https://login.regione.umbria.it
active.profile.folder=production active.profile.folder=production
isMailSendingEnabled = true isMailSendingEnabled = true
default_System_Receiver_Email=m.gaudino@gepafin.it,f.marinelli@gepafin.it isPecServiceEnabled = true
#default_System_Receiver_Email=m.gaudino@gepafin.it,f.marinelli@gepafin.it
gepafin_email=bandi@pec.gepafin.it gepafin_email=bandi@pec.gepafin.it
rinaldo_email=rinaldo.bonazzo@bflows.net rinaldo_email=rinaldo.bonazzo@bflows.net
carlo_email=carlo.mancosu@bflows.net carlo_email=carlo.mancosu@bflows.net

View File

@@ -7,7 +7,8 @@ spring.datasource.password=sa
spring.h2.console.enabled=true spring.h2.console.enabled=true
base-url=http://localhost:8080 base-url=http://localhost:8080
isMailSendingEnabled = false isMailSendingEnabled = false
default_System_Receiver_Email=test@test.test isPecServiceEnabled = false
#default_System_Receiver_Email=test@test.test
gepafin_email=test@test.test gepafin_email=test@test.test
rinaldo_email=test@test.test rinaldo_email=test@test.test
carlo_email=test@test.test carlo_email=test@test.test

View File

@@ -2380,6 +2380,17 @@
path="db/dump/update_system_email_template_application_rejected_04_02_2025.sql"/> path="db/dump/update_system_email_template_application_rejected_04_02_2025.sql"/>
</changeSet> </changeSet>
<changeSet id="14-02-2025_PK_124000" author="Piyush Kag">
<addColumn tableName="COMPANY">
<column name="JSON" type="TEXT"/>
</addColumn>
<sqlFile dbms="postgresql"
path="db/dump/insert_json_column_in_company_data_06_02_2025.sql"/>
<dropColumn tableName="USER_WITH_COMPANY" columnName="JSON"/>
</changeSet>
<changeSet id="06-02-2025_NK_155519" author="Nisha Kashyap"> <changeSet id="06-02-2025_NK_155519" author="Nisha Kashyap">
<addColumn tableName="call"> <addColumn tableName="call">
<column name="number_of_check" type="numeric"></column> <column name="number_of_check" type="numeric"></column>
@@ -2418,4 +2429,10 @@
<modifyDataType tableName="call" columnName="product_id" newDataType="INTEGER"/> <modifyDataType tableName="call" columnName="product_id" newDataType="INTEGER"/>
</changeSet> </changeSet>
<changeSet id="17-02-2025_PK_025237" author="Piyush Kag">
<renameColumn tableName="call"
oldColumnName="product_id"
newColumnName="appointment_template_id"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -0,0 +1,16 @@
UPDATE COMPANY C
SET JSON = (
SELECT U.JSON
FROM USER_WITH_COMPANY U
WHERE U.COMPANY_ID = C.ID
AND U.JSON IS NOT NULL
AND U.JSON <> ''
ORDER BY U.ID ASC
LIMIT 1
)
WHERE EXISTS (
SELECT 1 FROM USER_WITH_COMPANY U
WHERE U.COMPANY_ID = C.ID
AND U.JSON IS NOT NULL
AND U.JSON <> ''
);

View File

@@ -378,3 +378,6 @@ formula.amount.not.matches.requested.amount= The {0} does not matches to calcula
appointment.cannot.be.created = Appointment cannot be created because call doesn't have the template id.
appointment.not.created = Appointment not created please try again.
validation.failed.checklist=Validation failed for checklist.

View File

@@ -367,4 +367,6 @@ validation.required.requested.amount=La configurazione dell'importo richiesto
company.id.not.null=L'ID dell'azienda non pu? essere nullo. company.id.not.null=L'ID dell'azienda non pu? essere nullo.
formula.amount.not.matches.requested.amount=Il {0} non corrisponde all'importo calcolato. formula.amount.not.matches.requested.amount=Il {0} non corrisponde all'importo calcolato.
appointment.cannot.be.created = Impossibile creare l'appuntamento perché la chiamata non ha l'ID del modello di appuntamento.
appointment.not.created = Appuntamento non creato, riprova
validation.failed.checklist=Convalida fallita per la checklist.