Resolved Conflicts
This commit is contained in:
@@ -487,6 +487,10 @@ public class GepafinConstant {
|
||||
public static final String DATA="data";
|
||||
|
||||
public static final String FILE_SELECT = "fileselect";
|
||||
public static final String PREFERRED_CALL_ID="preferredCallId";
|
||||
|
||||
public static final String REGION_ID="regionId";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -424,7 +424,7 @@ public class ApplicationDao {
|
||||
responseBean.setCallTitle(applicationEntity.getCall().getName());
|
||||
responseBean.setCallEndDate(applicationEntity.getCall().getEndDate());
|
||||
responseBean.setCallEndTime(applicationEntity.getCall().getEndTime());
|
||||
responseBean.setModifiedDate(applicationEntity.getCall().getUpdatedDate());
|
||||
responseBean.setModifiedDate(applicationEntity.getUpdatedDate());
|
||||
responseBean.setCallId(applicationEntity.getCall().getId());
|
||||
responseBean.setSubmissionDate(applicationEntity.getSubmissionDate());
|
||||
responseBean.setStatus(applicationEntity.getStatus());
|
||||
|
||||
@@ -4,17 +4,18 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||
import jakarta.persistence.criteria.Predicate;
|
||||
import jakarta.persistence.criteria.Root;
|
||||
import jakarta.persistence.criteria.*;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import net.gepafin.tendermanagement.entities.*;
|
||||
import net.gepafin.tendermanagement.enums.*;
|
||||
@@ -1058,10 +1059,14 @@ public class CallDao {
|
||||
|
||||
Integer year = null;
|
||||
String search = null;
|
||||
Map<String, FilterCriteria> filters = new HashMap<>();
|
||||
if (callPageableRequestBean.getGlobalFilters() != null) {
|
||||
year = callPageableRequestBean.getGlobalFilters().getYear();
|
||||
search = callPageableRequestBean.getGlobalFilters().getSearch();
|
||||
}
|
||||
if (callPageableRequestBean.getFilters() != null) {
|
||||
filters = callPageableRequestBean.getFilters();
|
||||
}
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
if (year != null && year > 0) {
|
||||
int filterYear = callPageableRequestBean.getGlobalFilters().getYear();
|
||||
@@ -1104,7 +1109,7 @@ public class CallDao {
|
||||
.toList();
|
||||
predicates.add(root.get(GepafinConstant.STATUS).in(statusValues));
|
||||
}
|
||||
|
||||
applyFilters(root, criteriaBuilder, predicates, filters);
|
||||
predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.HUB).get(GepafinConstant.ID), userEntity.getHub().getId()));
|
||||
|
||||
|
||||
@@ -1112,6 +1117,130 @@ public class CallDao {
|
||||
|
||||
}
|
||||
|
||||
private void applyFilters(Root<?> root, CriteriaBuilder criteriaBuilder, List<Predicate> predicates, Map<String, FilterCriteria> filters) {
|
||||
if (Boolean.FALSE.equals(filters.isEmpty())) {
|
||||
for (Map.Entry<String, FilterCriteria> entry : filters.entrySet()) {
|
||||
String fieldName = entry.getKey();
|
||||
FilterCriteria filterCriteria = entry.getValue();
|
||||
Object value = filterCriteria.getValue();
|
||||
MatchModeEnum matchMode = filterCriteria.getMatchMode();
|
||||
|
||||
if (value != null && matchMode != null) {
|
||||
Path<?> fieldPath = getFieldPath(root, fieldName);
|
||||
if (fieldPath != null) {
|
||||
applyStringFilter(fieldPath, criteriaBuilder, predicates, value, matchMode);
|
||||
applyNumberFilter(fieldPath, criteriaBuilder, predicates, value, matchMode);
|
||||
applyDateFilter(fieldPath, criteriaBuilder, predicates, value, matchMode,root);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void applyStringFilter(Path<?> fieldPath, CriteriaBuilder criteriaBuilder, List<Predicate> predicates, Object value, MatchModeEnum matchMode) {
|
||||
if (value instanceof String) {
|
||||
String valueStr = (String) value;
|
||||
if (fieldPath.getJavaType().equals(String.class)) {
|
||||
MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue());
|
||||
switch (mode) {
|
||||
case CONTAINS ->
|
||||
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), "%" + valueStr.toLowerCase() + "%"));
|
||||
case EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, valueStr));
|
||||
case STARTSWITH ->
|
||||
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), valueStr.toLowerCase() + "%"));
|
||||
case ENDSWITH ->
|
||||
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), "%" + valueStr.toLowerCase()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void applyNumberFilter(Path<?> fieldPath, CriteriaBuilder criteriaBuilder, List<Predicate> predicates, Object value, MatchModeEnum matchMode) {
|
||||
if (Number.class.isAssignableFrom(fieldPath.getJavaType())) {
|
||||
Number numberValue = null;
|
||||
if (value instanceof Number) {
|
||||
numberValue = (Number) value;
|
||||
}
|
||||
MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue());
|
||||
switch (mode) {
|
||||
case EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, numberValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void applyDateFilter(Path<?> fieldPath, CriteriaBuilder criteriaBuilder, List<Predicate> predicates, Object value, MatchModeEnum matchMode, Root<?> root) {
|
||||
if (fieldPath.getJavaType().equals(LocalDateTime.class)) {
|
||||
// Convert input string: Replace 'T' with space
|
||||
String formattedValue = value.toString().replace("T", " ");
|
||||
|
||||
// Handle timezones and UTC (`Z` or `+HH:mm`)
|
||||
if (formattedValue.contains("Z") || formattedValue.matches(".*[+-]\\d{2}:\\d{2}$")) {
|
||||
OffsetDateTime offsetDateTime = OffsetDateTime.parse(value.toString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
|
||||
formattedValue = offsetDateTime.toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
|
||||
}
|
||||
|
||||
// Check if more than 3 decimal places exist
|
||||
if (formattedValue.contains(".")) {
|
||||
int dotIndex = formattedValue.indexOf(".");
|
||||
if (formattedValue.length() > dotIndex + 4) {
|
||||
formattedValue = formattedValue.substring(0, dotIndex + 4); // Keep only 3 decimals
|
||||
}
|
||||
} else {
|
||||
formattedValue += ".000"; // Ensure 3 decimals
|
||||
}
|
||||
|
||||
// Define correct date-time format
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
|
||||
|
||||
// Parse the formatted value into LocalDateTime
|
||||
LocalDateTime dateTimeValue = LocalDateTime.parse(formattedValue, formatter);
|
||||
|
||||
// Extract only the date portion
|
||||
LocalDate dateValue = dateTimeValue.toLocalDate();
|
||||
|
||||
// Convert database field to LocalDate for date-only comparison
|
||||
Expression<LocalDate> dateField = criteriaBuilder.function("DATE", LocalDate.class, fieldPath);
|
||||
|
||||
MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue());
|
||||
|
||||
switch (mode) {
|
||||
case DATEIS -> predicates.add(criteriaBuilder.equal(dateField, dateValue));
|
||||
case DATEISNOT -> predicates.add(criteriaBuilder.notEqual(dateField, dateValue));
|
||||
case BEFORE -> predicates.add(criteriaBuilder.lessThan(fieldPath.as(Timestamp.class), Timestamp.valueOf(dateTimeValue)));
|
||||
case AFTER -> predicates.add(criteriaBuilder.greaterThan(fieldPath.as(Timestamp.class), Timestamp.valueOf(dateTimeValue)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private Path<?> getFieldPath(Root<?> root, String fieldName) {
|
||||
try {
|
||||
return switch (fieldName) {
|
||||
|
||||
case GepafinConstant.REGION_ID -> {
|
||||
// Ensure join is only created if not already present
|
||||
Join<?, RegionEntity> regionJoin = root.getJoins().stream()
|
||||
.filter(j -> j.getAttribute().getName().equals("region"))
|
||||
.findFirst()
|
||||
.map(j -> (Join<?, RegionEntity>) j)
|
||||
.orElseGet(() -> root.join("region", JoinType.LEFT));
|
||||
|
||||
yield regionJoin.get("id");
|
||||
}
|
||||
|
||||
default -> root.get(fieldName);
|
||||
};
|
||||
} catch (IllegalArgumentException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public CallResponse createCallStep2EvaluationV2(CallEntity callEntity, CreateCallRequestStep2EvaluationV2 createCallRequest, UserEntity user) {
|
||||
|
||||
convertToDocumentEntities(createCallRequest.getDocs(), callEntity.getId(), DocumentTypeEnum.DOCUMENT);
|
||||
|
||||
@@ -4,14 +4,14 @@ import com.fasterxml.jackson.annotation.JsonValue;
|
||||
|
||||
|
||||
public enum MatchModeEnum {
|
||||
STARTSWITH("Starts with"),
|
||||
ENDSWITH("Ends with"),
|
||||
CONTAINS("Contains"),
|
||||
EQUALS("Equals"),
|
||||
DATEIS("Date is"),
|
||||
DATEISNOT("Date is not"),
|
||||
BEFORE("Date is before"),
|
||||
AFTER("Date is after");
|
||||
STARTSWITH("startsWith"),
|
||||
ENDSWITH("endsWith"),
|
||||
CONTAINS("contains"),
|
||||
EQUALS("equals"),
|
||||
DATEIS("dateIs"),
|
||||
DATEISNOT("dateIsNot"),
|
||||
BEFORE("dateBefore"),
|
||||
AFTER("dateAfter");
|
||||
|
||||
private String value;
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ public enum RoleStatusEnum {
|
||||
ROLE_SUPER_ADMIN("ROLE_SUPER_ADMIN"),
|
||||
ROLE_PRE_INSTRUCTOR("ROLE_PRE_INSTRUCTOR"),
|
||||
ROLE_GEPAFIN_OPERATOR("ROLE_GEPAFIN_OPERATOR"),
|
||||
ROLE_INSTRUCTOR_MANAGER("ROLE_INSTRUCTOR_MANAGER");
|
||||
ROLE_INSTRUCTOR_MANAGER("ROLE_INSTRUCTOR_MANAGER"),
|
||||
ROLE_CONFIDI("ROLE_CONFIDI");
|
||||
|
||||
private String value;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import lombok.Data;
|
||||
import net.gepafin.tendermanagement.enums.CallStatusEnum;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class CallPageableRequestBean {
|
||||
@@ -11,4 +12,6 @@ public class CallPageableRequestBean {
|
||||
private GlobalFilters globalFilters;
|
||||
|
||||
private List<CallStatusEnum> status;
|
||||
|
||||
private Map<String, FilterCriteria> filters;
|
||||
}
|
||||
|
||||
@@ -2561,5 +2561,71 @@
|
||||
<sqlFile dbms="postgresql"
|
||||
path="db/dump/update_form_field_data_03-03-2025.sql"/>
|
||||
</changeSet>
|
||||
<changeSet id="05-03-2025_NK_190115" author="Nisha Kashyap">
|
||||
<sql dbms="postgresql">select
|
||||
setval('gepafin_schema.role_id_seq', (select
|
||||
max(id)+1
|
||||
from gepafin_schema.role), false)
|
||||
</sql>
|
||||
<sql dbms="postgresql">select
|
||||
setval('gepafin_schema.beneficiary_id_seq', (select
|
||||
max(id)+1
|
||||
from gepafin_schema.beneficiary), false)
|
||||
</sql>
|
||||
<insert tableName="role">
|
||||
<column name="role_name" value="confidi"/>
|
||||
<column name="role_type" value="ROLE_CONFIDI"/>
|
||||
<column name="description"
|
||||
value="Companies or individuals looking for financing opportunities. They can view, search, and apply to available confidi calls."/>
|
||||
<column name="created_date" value="2025-03-05 00:00:00"/>
|
||||
<column name="updated_date" value="2025-03-05 00:00:00"/>
|
||||
<column name="permissions" value="VIEW_CONFIDI_CALLS, APPLY_CONFIDI_CALLS"/>
|
||||
<column name="region_id" valueComputed="1"/>
|
||||
</insert>
|
||||
|
||||
<insert tableName="BENEFICIARY">
|
||||
<column name="EMAIL" value="confidi@test.test"/>
|
||||
<column name="FIRST_NAME" value="Test"/>
|
||||
<column name="LAST_NAME" value="Confidi"/>
|
||||
<column name="PHONE_NUMBER" value="1234567890"/>
|
||||
<column name="ORGANIZATION" value="ConfidiOrg"/>
|
||||
<column name="ADDRESS" value="789 Victory Road"/>
|
||||
<column name="CITY" value="Naples"/>
|
||||
<column name="COUNTRY" value="Italy"/>
|
||||
<column name="CODICE_FISCALE" value="0123456789"/>
|
||||
<column name="DATE_OF_BIRTH" value="1985-06-15T00:00:00"/>
|
||||
<column name="PRIVACY" value="true"/>
|
||||
<column name="TERMS" value="true"/>
|
||||
<column name="MARKETING" value="false"/>
|
||||
<column name="OFFERS" value="true"/>
|
||||
<column name="THIRD_PARTY" value="false"/>
|
||||
<column name="HUB_ID" value="1"/>
|
||||
</insert>
|
||||
|
||||
<insert tableName="GEPAFIN_USER">
|
||||
<column name="email" value="confidi@test.test"/>
|
||||
<column name="password" value="$2a$10$doUyOcEm8WPuFfpFT5y18.1DvZzF7exbqgy9X0P27cUBK7YWbfzzS"/>
|
||||
<column name="first_name" value="Test"/>
|
||||
<column name="last_name" value="Confidi"/>
|
||||
<column name="last_login" value="2024-03-05T12:00:00"/>
|
||||
<column name="organization" value="ConfidiOrg"/>
|
||||
<column name="role_id" valueComputed="(SELECT id FROM role WHERE role_type = 'ROLE_CONFIDI')"/>
|
||||
<column name="status" value="ACTIVE"/>
|
||||
<column name="last_login" value="2024-12-19 00:00:00"/>
|
||||
<column name="organization" value="ConfidiOrg"/>
|
||||
<column name="address" value="789 Victory Road"/>
|
||||
<column name="city" value="Naples"/>
|
||||
<column name="country" value="Italy"/>
|
||||
<column name="hub_id" value="1"/>
|
||||
<column name="beneficiary_id" valueComputed="(SELECT id FROM BENEFICIARY WHERE EMAIL = 'confidi@test.test' ORDER BY id DESC LIMIT 1)"/>
|
||||
</insert>
|
||||
|
||||
</changeSet>
|
||||
<changeSet id="06-03-2025_NK_190111" author="Nisha Kashyap">
|
||||
<update tableName="role">
|
||||
<column name="permissions" value="VIEW_CONFIDI_CALLS,APPLY_CONFIDI_CALLS"/>
|
||||
<where>role_type = 'ROLE_CONFIDI'</where>
|
||||
</update>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
|
||||
Reference in New Issue
Block a user