Resolved conflict

This commit is contained in:
rajesh
2025-06-06 15:17:53 +05:30
55 changed files with 1601 additions and 1305 deletions

View File

@@ -571,7 +571,7 @@ public class GepafinConstant {
public static final String PROTOCOL_EXTERNAL_NUMBER="NUM_PG"; public static final String PROTOCOL_EXTERNAL_NUMBER="NUM_PG";
public static final String PROTOCOL_EXTERNAL_DATE="DATA_PG_DT"; public static final String PROTOCOL_EXTERNAL_DATE="DATA_PG_DT";
public static final String PROTOCOL_DOC_SUFFIX="#noauth"; public static final String PROTOCOL_DOC_SUFFIX="#noauth";
public static final String CREATE_NDG="CHECK_OR_CREATE_NDG_CODE";
} }

View File

@@ -17,6 +17,11 @@ import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum; import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.model.util.SortBy; import net.gepafin.tendermanagement.model.util.SortBy;
import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.repositories.*;
@@ -1990,7 +1995,7 @@ public class ApplicationDao {
} }
// Wrap it in ="..." to make Excel treat it as a literal string // Wrap it in ="..." to make Excel treat it as a literal string
return "=\"" + stringValue.replace("\"", "\"\"") + "\""; return stringValue;
} catch (Exception e) { } catch (Exception e) {
return ""; return "";

View File

@@ -18,10 +18,7 @@ import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity;
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.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.enums.NotificationTypeEnum;
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;
@@ -55,6 +52,8 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.File; import java.io.File;
@@ -66,7 +65,10 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.ScheduledExecutorService;
@Slf4j @Slf4j
@Component @Component
@@ -150,7 +152,8 @@ public class AppointmentDao {
@Autowired @Autowired
private ApplicationEvaluationDao applicationEvaluationDao; private ApplicationEvaluationDao applicationEvaluationDao;
private final Map<Long, ExecutorService> executorMap = new ConcurrentHashMap<>(); private final Map<Long, ScheduledExecutorService> executorMap = new ConcurrentHashMap<>();
private final ConcurrentHashMap<Long, ExecutorService> threadForDocumentMap = new ConcurrentHashMap<>(); private final ConcurrentHashMap<Long, ExecutorService> threadForDocumentMap = new ConcurrentHashMap<>();
@@ -159,6 +162,8 @@ public class AppointmentDao {
public NdgResponse checkNdgForAppointment(Long applicationId) { public NdgResponse checkNdgForAppointment(Long applicationId) {
log.info("Starting NDG check for appointment. applicationId: {}", applicationId); log.info("Starting NDG check for appointment. applicationId: {}", applicationId);
ApplicationEntity application = applicationService.validateApplication(applicationId); ApplicationEntity application = applicationService.validateApplication(applicationId);
ApplicationEntity oldApplication = Utils.getClonedEntityForData(application);
NdgResponse ndgResponse = new NdgResponse(); NdgResponse ndgResponse = new NdgResponse();
if (application.getNdgStatus() != null && application.getNdgStatus().equalsIgnoreCase(GepafinConstant.NDG_IN_PROGRESS)) { if (application.getNdgStatus() != null && application.getNdgStatus().equalsIgnoreCase(GepafinConstant.NDG_IN_PROGRESS)) {
log.warn("NDG generation already in progress. applicationId: {}", applicationId); log.warn("NDG generation already in progress. applicationId: {}", applicationId);
@@ -175,6 +180,10 @@ public class AppointmentDao {
application.setNdgStatus(GepafinConstant.NDG_IN_PROGRESS); application.setNdgStatus(GepafinConstant.NDG_IN_PROGRESS);
applicationRepository.save(application); applicationRepository.save(application);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
// Start async processing // Start async processing
HubEntity hub = hubRepository.findByHubId(application.getHubId()); HubEntity hub = hubRepository.findByHubId(application.getHubId());
loginToOdessa(hub, application); loginToOdessa(hub, application);
@@ -432,35 +441,92 @@ public class AppointmentDao {
} }
private void startAsyncNdgProcessing(Long applicationId) { private void startAsyncNdgProcessing(Long applicationId) {
// Check if a thread is already running for this application // If already polling for this applicationId, do nothing:
if (executorMap.containsKey(applicationId)) { if (executorMap.containsKey(applicationId)) {
log.warn("Async processing already running for applicationId: {}", applicationId); log.warn("Async processing already running for applicationId: {}", applicationId);
return; return;
} }
ServletRequestAttributes requestAttributes = new ServletRequestAttributes(request);
// Create a dedicated thread for asynchronous processing ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(runnable -> {
ExecutorService executor = Executors.newSingleThreadExecutor(runnable -> { Thread t = new Thread(runnable);
Thread thread = new Thread(runnable); t.setName("AsyncNdgProcessing-" + applicationId);
thread.setName("AsyncNdgProcessing-" + applicationId); return t;
return thread;
}); });
executorMap.put(applicationId, executor); executorMap.put(applicationId, scheduler);
executor.submit(() -> { // Record the start time so we can stop after 2 hours:
long startTime = System.currentTimeMillis();
long twoHoursMs = TimeUnit.HOURS.toMillis(2);
long fifteenMin = 15; // in MINUTES
// We need a reference to cancel the scheduled task from inside itself when we're done:
AtomicReference<ScheduledFuture<?>> futureRef = new AtomicReference<>();
Runnable pollingTask = () -> {
RequestContextHolder.setRequestAttributes(requestAttributes, true);
Utils.setHttpServletRequestForThread(request,HttpMethodEnum.POST.getValue(),GepafinConstant.CREATE_NDG, (Long) request.getAttribute(GepafinConstant.USER_ACTION_ID));
try { try {
log.info("Starting async processing for applicationId: {}", applicationId); // 1) If 2 hours have already passed, mark as FAILED and shut down:
processNdgGeneration(applicationId); if (System.currentTimeMillis() - startTime > twoHoursMs) {
} catch (Exception e) { ApplicationEntity app = applicationService.validateApplication(applicationId);
log.error("Error in async NDG processing for applicationId: {}", applicationId, e); log.warn("2-hour timeout reached for applicationId {}. Marking NDG_FAILED.", applicationId);
} finally { app.setNdgStatus(GepafinConstant.NDG_FAILED);
// Cleanup resources applicationRepository.save(app);
ExecutorService executorToShutdown = executorMap.remove(applicationId);
if (executorToShutdown != null) { futureRef.get().cancel(false);
executorToShutdown.shutdown(); shutdownScheduler(applicationId);
return;
}
// 2) Otherwise, call processNdgGeneration once:
processNdgGeneration(applicationId);
// 3) After return, check if NDG is now set or timed out. If so, cancel & shut down:
ApplicationEntity updated = applicationService.validateApplication(applicationId);
if (isNdgValid(updated.getNdg())) {
log.info("NDG found for applicationId {}. Shutting down scheduler.", applicationId);
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
} else if (updated.getNdgStatus() != null && updated.getNdgStatus().equals(GepafinConstant.NDG_FAILED)) {
log.info("NDG status is NDG_FAILED for applicationId {}. Shutting down scheduler.", applicationId);
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
}
// Otherwise: no NDG yet, not timed out → next run happens in 15 minutes automatically.
} catch (Exception ex) {
log.error("Unexpected error during scheduled polling for applicationId {}: {}", applicationId, ex.getMessage(), ex);
try {
ApplicationEntity checkApp = applicationService.validateApplication(applicationId);
if (System.currentTimeMillis() - startTime > twoHoursMs) {
log.warn("After exception, 2-hour window passed for applicationId {}. Marking NDG_FAILED.", applicationId);
checkApp.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(checkApp);
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
}
} catch (Exception ignore) {
futureRef.get().cancel(false);
shutdownScheduler(applicationId);
} }
log.info("Async processing completed for applicationId: {}", applicationId);
} }
}); };
// Schedule pollingTask: run now (delay=0), then every fifteen minutes:
ScheduledFuture<?> future = scheduler.scheduleWithFixedDelay(pollingTask, 0, // initial delay = 0 min → run immediately
fifteenMin, // subsequent runs every 15 minutes
TimeUnit.MINUTES);
futureRef.set(future);
}
private void shutdownScheduler(Long applicationId) {
ScheduledExecutorService shed = executorMap.remove(applicationId);
if (shed != null) {
shed.shutdownNow();
}
log.info("Scheduler shut down for applicationId: {}", applicationId);
} }
private void processNdgGeneration(Long applicationId) { private void processNdgGeneration(Long applicationId) {
@@ -486,83 +552,120 @@ public class AppointmentDao {
// Try retrieving NDG by VAT number // Try retrieving NDG by VAT number
AppointmentLoginResponse ndgResponse = retrieveNdgByVatNumber(company.getVatNumber(), authorizationToken, hub, application); AppointmentLoginResponse ndgResponse = retrieveNdgByVatNumber(company.getVatNumber(), authorizationToken, hub, application);
if (isNdgValid(ndgResponse.getNdg())) { if (isNdgValid(ndgResponse.getNdg())) {
saveNdgAndIdVisura(application, company, ndgResponse.getNdg(), null); saveNdgAndIdVisura(application, company, ndgResponse.getNdg());
log.info("NDG successfully generated for applicationId: {}", applicationId); log.info("NDG successfully generated for applicationId: {}", applicationId);
} else { } else {
// If NDG isn't immediately available, start polling log.info("Polling for NDG for applicationId: {}", applicationId);
handleNdgPolling(application, company, hub, authorizationToken); handleNdgPolling(application, company, hub, authorizationToken);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Exception occurred during NDG generation. ApplicationId: {}, CompanyId: {}, HubId: {}, Error: {}", log.error("Exception occurred during NDG generation. ApplicationId: {}, CompanyId: {}, HubId: {}, Error: {}", applicationId, company.getId(), hub.getId(),
applicationId, company.getId(), hub.getId(), e.getMessage(), e); e.getMessage(), e);
} }
} }
private void handleNdgPolling(ApplicationEntity application, CompanyEntity company, HubEntity hub, String authorizationToken) { private void handleNdgPolling(ApplicationEntity application, CompanyEntity company, HubEntity hub, String authorizationToken) {
log.info("Starting singleshot NDG polling attempt for applicationId: {}, CompanyId: {}, HubId: {}", application.getId(), company.getId(), hub.getId());
ApplicationEntity oldApplication = Utils.getClonedEntityForData(application);
CompanyEntity oldCompanyEntity=Utils.getClonedEntityForData(company);
long startTime = System.currentTimeMillis();
long twoHoursMs = TimeUnit.HOURS.toMillis(2);
try { try {
log.info("Starting NDG polling for applicationId: {}, CompanyId: {}, HubId: {}", application.getId(),company.getId(), hub.getId()); // 1) If NDG was already populated (perhaps by another thread), skip polling.
long startTime = System.currentTimeMillis(); if (application.getNdg() != null) {
log.info("NDG already present for applicationId {}. Exiting singleshot polling.", application.getId());
while (true) { return;
if (application.getNdg() != null) { }
log.info("NDG retrieved for applicationId: {}", application.getId());
break; // 2) Attempt to create Visura (this may immediately return a valid NDG)
} AppointmentLoginResponse visuraResponse = createVisura(company, authorizationToken, hub);
try { // 2a) If createVisura gave us a valid NDG, persist & exit
// Fetch Visura list and attempt to parse NDG String fetchedNdg = visuraResponse.getNdg();
String visuraListJson = getVisuraList(application.getIdVisura(), authorizationToken, application, hub); if (isNdgValid(fetchedNdg)) {
log.debug("Parsing NDG from visura list response | ApplicationId: {}", application.getId()); log.info("Valid NDG retrieved from createVisura(): {} | applicationId: {}", fetchedNdg, application.getId());
String ndg = parseNdgFromVisuraListResponse(visuraListJson);
if (isNdgValid(ndg)) { company.setNdg(fetchedNdg);
// CompanyEntity oldCompanyData = Utils.getClonedEntityForData(company); application.setNdg(fetchedNdg);
// ApplicationEntity oldApplicationData = Utils.getClonedEntityForData(application); application.setNdgStatus(GepafinConstant.NDG_GENERATED);
application.setStatus(ApplicationStatusTypeEnum.NDG.getValue());
log.info("Valid NDG retrieved: {} | ApplicationId: {}", ndg, application.getId()); application.setIdVisura(visuraResponse.getIdVisura());
company.setNdg(ndg);
application.setNdg(ndg); companyRepository.save(company);
application.setNdgStatus(GepafinConstant.NDG_GENERATED); applicationRepository.save(application);
application.setStatus(ApplicationStatusTypeEnum.NDG.getValue()); loggingUtil.addVersionHistory(
applicationRepository.save(application); VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
companyRepository.save(company); loggingUtil.addVersionHistory(
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId()); VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCompanyEntity).newData(company).build());
// Map<String, String> placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.NDG_GENERATION);
ApplicationEvaluationEntity eval = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId());
Map<String, String> placeHolders = new HashMap<>(); Map<String, String> placeholders = new HashMap<>();
placeHolders.put("{{call_name}}", application.getCall().getName()); placeholders.put("{{call_name}}", application.getCall().getName());
String protocolNumber=application.getProtocol().getExternalProtocolNumber(); placeholders.put("{{protocol_number}}", String.valueOf(application.getProtocol().getProtocolNumber()));
if(protocolNumber==null){ notificationDao.sendNotificationToInstructor(placeholders, eval, NotificationTypeEnum.NDG_GENERATION);
protocolNumber= String.valueOf(application.getProtocol().getProtocolNumber()); notificationDao.sendNotificationToSuperUser(application, placeholders, NotificationTypeEnum.NDG_GENERATION);
}
placeHolders.put("{{protocol_number}}", protocolNumber); log.info("NDG saved successfully for applicationId: {}", application.getId());
notificationDao.sendNotificationToInstructor(placeHolders, applicationEvaluationEntity, NotificationTypeEnum.NDG_GENERATION); return;
notificationDao.sendNotificationToSuperUser(application, placeHolders, NotificationTypeEnum.NDG_GENERATION); }
log.info("NDG saved successfully for applicationId: {}", application.getId());
break; // 2b) If no immediate NDG, fetch the Visura list JSON and parse out NDG
} String visuraListJson = getVisuraList(visuraResponse.getIdVisura(), authorizationToken, application, hub);
log.debug("Parsing NDG from VisuraList JSON for applicationId: {}", application.getId());
// Check if polling has timed out String parsedNdg = parseNdgFromVisuraListResponse(visuraListJson);
if (System.currentTimeMillis() - startTime > TimeUnit.HOURS.toMillis(2)) {
log.warn("NDG polling timed out for applicationId: {}", application.getId()); if (isNdgValid(parsedNdg)) {
application.setNdgStatus(GepafinConstant.NDG_FAILED); log.info("Valid NDG parsed from VisuraList: {} | applicationId: {}", parsedNdg, application.getId());
applicationRepository.save(application);
break; company.setNdg(parsedNdg);
} application.setNdg(parsedNdg);
application.setNdgStatus(GepafinConstant.NDG_GENERATED);
// Wait before the next polling attempt application.setStatus(ApplicationStatusTypeEnum.NDG.getValue());
Thread.sleep(TimeUnit.MINUTES.toMillis(15)); application.setIdVisura(visuraResponse.getIdVisura());
} catch (InterruptedException e) {
log.warn("NDG polling interrupted for applicationId: {}", application.getId()); companyRepository.save(company);
Thread.currentThread().interrupt(); applicationRepository.save(application);
break; loggingUtil.addVersionHistory(
} catch (Exception e) { VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
log.error("Error during NDG polling for applicationId: {}", application.getId(), e); loggingUtil.addVersionHistory(
} VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCompanyEntity).newData(company).build());
ApplicationEvaluationEntity eval = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId());
Map<String, String> placeholders = new HashMap<>();
placeholders.put("{{call_name}}", application.getCall().getName());
placeholders.put("{{protocol_number}}", String.valueOf(application.getProtocol().getProtocolNumber()));
notificationDao.sendNotificationToInstructor(placeholders, eval, NotificationTypeEnum.NDG_GENERATION);
notificationDao.sendNotificationToSuperUser(application, placeholders, NotificationTypeEnum.NDG_GENERATION);
log.info("NDG saved successfully for applicationId: {}", application.getId());
return;
}
// 3) Neither direct API nor parsing yielded a valid NDG. Check timeout.
if (System.currentTimeMillis() - startTime > twoHoursMs) {
log.warn("NDG polling timed out after 2 hours for applicationId: {}", application.getId());
application.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(application);
return;
}
// 4) No NDG yet—just return. The scheduler will retry in 15 minutes.
log.info("No valid NDG yet for applicationId {}. Returning to scheduler—next attempt in 15 minutes.", application.getId());
} catch (Exception e) {
log.error("Exception during NDG polling for applicationId: {}", application.getId(), e);
// If timeout after exception, mark NDG_FAILED
if (System.currentTimeMillis() - startTime > twoHoursMs) {
log.warn("Example: exiting singleshot polling due to timeout after exception for applicationId: {}", application.getId());
application.setNdgStatus(GepafinConstant.NDG_FAILED);
applicationRepository.save(application);
} else {
log.info("Exception occurred but not timed out for applicationId {}. Returning to scheduler for next attempt in 15 minutes.", application.getId());
} }
} finally {
log.info("NDG polling completed for applicationId: {}", application.getId());
} }
log.info("NDG polling completed for applicationId: {}", application.getId());
} }
private static String getBearerToken(HubEntity hub) { private static String getBearerToken(HubEntity hub) {
@@ -575,24 +678,26 @@ public class AppointmentDao {
return ndg != null && !ndg.isEmpty(); return ndg != null && !ndg.isEmpty();
} }
private void saveNdgAndIdVisura(ApplicationEntity application, CompanyEntity company, String ndg, String idVisura) { private void saveNdgAndIdVisura(ApplicationEntity application, CompanyEntity company, String ndg) {
ApplicationEntity oldApplication = Utils.getClonedEntityForData(application);
CompanyEntity oldCompanyEntity=Utils.getClonedEntityForData(company);
application.setNdg(ndg); application.setNdg(ndg);
application.setIdVisura(idVisura);
application.setNdgStatus(GepafinConstant.NDG_GENERATED); application.setNdgStatus(GepafinConstant.NDG_GENERATED);
application.setStatus(ApplicationStatusTypeEnum.NDG.getValue()); application.setStatus(ApplicationStatusTypeEnum.NDG.getValue());
company.setNdg(ndg); company.setNdg(ndg);
companyRepository.save(company); companyRepository.save(company);
applicationRepository.save(application); applicationRepository.save(application);
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplication).newData(application).build());
loggingUtil.addVersionHistory(
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCompanyEntity).newData(company).build());
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId()); ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(application.getApplicationEvaluationId());
// Map<String, String> placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.NDG_GENERATION); // Map<String, String> placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.NDG_GENERATION);
Map<String, String> placeHolders = new HashMap<>(); Map<String, String> placeHolders = new HashMap<>();
placeHolders.put("{{call_name}}", application.getCall().getName()); placeHolders.put("{{call_name}}", application.getCall().getName());
String protocolNumber=application.getProtocol().getExternalProtocolNumber(); placeHolders.put("{{protocol_number}}", String.valueOf(application.getProtocol().getProtocolNumber()));
if(protocolNumber==null){
protocolNumber= String.valueOf(application.getProtocol().getProtocolNumber());
}
placeHolders.put("{{protocol_number}}", protocolNumber);
notificationDao.sendNotificationToInstructor(placeHolders, applicationEvaluationEntity, NotificationTypeEnum.NDG_GENERATION); notificationDao.sendNotificationToInstructor(placeHolders, applicationEvaluationEntity, NotificationTypeEnum.NDG_GENERATION);
notificationDao.sendNotificationToSuperUser(application, placeHolders, NotificationTypeEnum.NDG_GENERATION); notificationDao.sendNotificationToSuperUser(application, placeHolders, NotificationTypeEnum.NDG_GENERATION);
log.info("NDG saved for applicationId: {}, {}", application.getId(), application.getNdg()); log.info("NDG saved for applicationId: {}, {}", application.getId(), application.getNdg());
@@ -758,19 +863,28 @@ public class AppointmentDao {
public AppointmentLoginResponse parseVisuraResponse(String jsonResponse) { public AppointmentLoginResponse parseVisuraResponse(String jsonResponse) {
try { try {
// Log full raw JSON for debug purposes
log.info("Raw Visura JSON Response: {}", jsonResponse);
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonResponse); JsonNode rootNode = objectMapper.readTree(jsonResponse);
JsonNode dataNode = rootNode.get(GepafinConstant.DATA_STRING); JsonNode dataNode = rootNode.get(GepafinConstant.DATA_STRING);
if (dataNode != null) { if (dataNode != null && dataNode.isObject()) {
AppointmentLoginResponse response = new AppointmentLoginResponse(); AppointmentLoginResponse response = new AppointmentLoginResponse();
response.setIdVisura(normalizeNullValue(dataNode.get(GepafinConstant.ID_VISURA_STRING).asText())); JsonNode idVisuraNode = dataNode.get(GepafinConstant.ID_VISURA_STRING);
response.setNdg(normalizeNullValue(dataNode.get(GepafinConstant.NDG_STRING).asText())); JsonNode ndgNode = dataNode.get(GepafinConstant.NDG_STRING);
if (idVisuraNode == null || ndgNode == null) {
log.error("Missing expected fields in 'data' node. JSON: {}", dataNode);
}
response.setIdVisura(normalizeNullValue(idVisuraNode != null ? idVisuraNode.asText() : null));
response.setNdg(normalizeNullValue(ndgNode != null ? ndgNode.asText() : null));
return response; return response;
} else { } else {
throw new RuntimeException("Invalid JSON structure: Missing 'data' node."); System.err.println("Invalid JSON: 'data' node is missing or not an object.");
throw new RuntimeException("Invalid JSON structure: Missing or malformed 'data' node.");
} }
} catch (Exception e) { } catch (Exception e) {
System.err.println("Exception while parsing Visura response: " + e.getMessage());
throw new RuntimeException("Failed to parse response: " + e.getMessage(), e); throw new RuntimeException("Failed to parse response: " + e.getMessage(), e);
} }
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import net.gepafin.tendermanagement.model.response.EmailSendResponse; import net.gepafin.tendermanagement.model.response.EmailSendResponse;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -10,6 +11,7 @@ import java.util.List;
@Entity @Entity
@Table(name="application_amendment_request") @Table(name="application_amendment_request")
@Data @Data
@Where(clause = "is_deleted = false")
public class ApplicationAmendmentRequestEntity extends BaseEntity { public class ApplicationAmendmentRequestEntity extends BaseEntity {
@Column(name = "NOTE") @Column(name = "NOTE")
@@ -33,9 +35,6 @@ public class ApplicationAmendmentRequestEntity extends BaseEntity {
@Column(name = "FORM_FIELDS") @Column(name = "FORM_FIELDS")
private String formFields; private String formFields;
@Column(name="IS_DELETED")
private Boolean isDeleted=false;
@Column(name = "STATUS") @Column(name = "STATUS")
private String status; private String status;

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;
import org.hibernate.annotations.Where;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -9,6 +10,7 @@ import java.time.LocalDateTime;
@Entity @Entity
@Table(name = "APPLICATION") @Table(name = "APPLICATION")
@Data @Data
@Where(clause = "is_deleted = false")
public class ApplicationEntity extends BaseEntity { public class ApplicationEntity extends BaseEntity {
@Column(name = "USER_ID") @Column(name = "USER_ID")
@@ -30,9 +32,6 @@ public class ApplicationEntity extends BaseEntity {
@JoinColumn(name = "CALL_ID", nullable = false) @JoinColumn(name = "CALL_ID", nullable = false)
private CallEntity call; private CallEntity call;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@OneToOne @OneToOne
@JoinColumn(name = "PROTOCOL_NUMBER") @JoinColumn(name = "PROTOCOL_NUMBER")
private ProtocolEntity protocol; private ProtocolEntity protocol;

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import net.gepafin.tendermanagement.model.response.EmailSendResponse; import net.gepafin.tendermanagement.model.response.EmailSendResponse;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -10,6 +11,7 @@ import java.util.List;
@Data @Data
@Entity @Entity
@Table(name = "application_evaluation") @Table(name = "application_evaluation")
@Where(clause = "is_deleted = false")
public class ApplicationEvaluationEntity extends BaseEntity{ public class ApplicationEvaluationEntity extends BaseEntity{
@Column(name = "application_Id") @Column(name = "application_Id")
@@ -39,9 +41,6 @@ public class ApplicationEvaluationEntity extends BaseEntity{
@Column(name = "MOTIVATION") @Column(name = "MOTIVATION")
private String motivation; private String motivation;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@ManyToOne @ManyToOne
@JoinColumn(name = "assigned_applications_id", nullable = true) @JoinColumn(name = "assigned_applications_id", nullable = true)
private AssignedApplicationsEntity assignedApplicationsEntity; private AssignedApplicationsEntity assignedApplicationsEntity;

View File

@@ -2,16 +2,15 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Data @Data
@Table(name = "APPLICATION_EVALUATION_FORM") @Table(name = "APPLICATION_EVALUATION_FORM")
@Where(clause = "is_deleted = false")
public class ApplicationEvaluationFormEntity extends BaseEntity{ public class ApplicationEvaluationFormEntity extends BaseEntity{
private Long applicationId; private Long applicationId;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@ManyToOne @ManyToOne
@JoinColumn(name = "EVALUATION_ID") @JoinColumn(name = "EVALUATION_ID")
private ApplicationEvaluationEntity applicationEvaluation; private ApplicationEvaluationEntity applicationEvaluation;

View File

@@ -2,10 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Data @Data
@Table(name = "APPLICATION_EVALUATION_FORM_FIELD") @Table(name = "APPLICATION_EVALUATION_FORM_FIELD")
@Where(clause = "is_deleted = false")
public class ApplicationEvaluationFormFieldEntity extends BaseEntity { public class ApplicationEvaluationFormFieldEntity extends BaseEntity {
@ManyToOne @ManyToOne
@@ -18,7 +20,4 @@ public class ApplicationEvaluationFormFieldEntity extends BaseEntity {
@Column(name = "FIELD_VALUE") @Column(name = "FIELD_VALUE")
private String fieldValue; private String fieldValue;
@Column(name="IS_DELETED")
private Boolean isDeleted;
} }

View File

@@ -2,11 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "APPLICATION_FORM") @Table(name = "APPLICATION_FORM")
@Data @Data
@Where(clause = "is_deleted = false")
public class ApplicationFormEntity extends BaseEntity { public class ApplicationFormEntity extends BaseEntity {
@ManyToOne @ManyToOne

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -11,6 +12,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class ApplicationFormFieldEntity extends BaseEntity { public class ApplicationFormFieldEntity extends BaseEntity {
@ManyToOne @ManyToOne

View File

@@ -6,10 +6,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Data @Data
@Entity @Entity
@Table(name = "application_signed_document") @Table(name = "application_signed_document")
@Where(clause = "is_deleted = false")
public class ApplicationSignedDocumentEntity extends BaseEntity { public class ApplicationSignedDocumentEntity extends BaseEntity {
@ManyToOne @ManyToOne

View File

@@ -2,13 +2,14 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Entity @Entity
@Data @Data
@Table(name = "assigned_applications") @Table(name = "assigned_applications")
@Where(clause = "is_deleted = false")
public class AssignedApplicationsEntity extends BaseEntity{ public class AssignedApplicationsEntity extends BaseEntity{
@ManyToOne @ManyToOne
@@ -27,9 +28,7 @@ public class AssignedApplicationsEntity extends BaseEntity{
@Column(name = "NOTE") @Column(name = "NOTE")
private String note; private String note;
@Column(name="IS_DELETED")
private Boolean isDeleted=false;
@Column(nullable = false) @Column(nullable = false)
private LocalDateTime assignedAt; private LocalDateTime assignedAt;
} }

View File

@@ -22,7 +22,12 @@ public class BaseEntity {
@Column(name = "UPDATED_DATE") @Column(name = "UPDATED_DATE")
LocalDateTime updatedDate; LocalDateTime updatedDate;
@PrePersist
@Column(name="IS_DELETED")
private Boolean isDeleted = false;
@PrePersist
public void setCreatedDate() { public void setCreatedDate() {
this.createdDate = DateTimeUtil.DateServerToUTC(LocalDateTime.now()); this.createdDate = DateTimeUtil.DateServerToUTC(LocalDateTime.now());
this.updatedDate = DateTimeUtil.DateServerToUTC(LocalDateTime.now()); this.updatedDate = DateTimeUtil.DateServerToUTC(LocalDateTime.now());

View File

@@ -7,10 +7,12 @@ import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Email;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "BENEFICIARY") @Table(name = "BENEFICIARY")
@Data @Data
@Where(clause = "is_deleted = false")
public class BeneficiaryEntity extends BaseEntity { public class BeneficiaryEntity extends BaseEntity {
@Email @Email

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -14,6 +15,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class BeneficiaryPreferredCallEntity extends BaseEntity{ public class BeneficiaryPreferredCallEntity extends BaseEntity{
@Id @Id
@@ -35,9 +37,6 @@ public class BeneficiaryPreferredCallEntity extends BaseEntity{
@Column(name = "STATUS", length = 255) @Column(name = "STATUS", length = 255)
private String status; private String status;
@Column(name="IS_DELETED")
private Boolean isDeleted;
@ManyToOne @ManyToOne
@JoinColumn(name = "USER_WITH_COMPANY_ID") @JoinColumn(name = "USER_WITH_COMPANY_ID")
private UserWithCompanyEntity userWithCompany; private UserWithCompanyEntity userWithCompany;

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import org.hibernate.annotations.Where;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -16,6 +17,7 @@ import java.time.LocalTime;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class CallEntity extends BaseEntity { public class CallEntity extends BaseEntity {
@Column(name = "NAME", length = 255) @Column(name = "NAME", length = 255)

View File

@@ -2,10 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "CALL_TARGET_AUDIENCE_CHECKLIST") @Table(name = "CALL_TARGET_AUDIENCE_CHECKLIST")
@Data @Data
@Where(clause = "is_deleted = false")
public class CallTargetAudienceChecklistEntity extends BaseEntity{ public class CallTargetAudienceChecklistEntity extends BaseEntity{
@ManyToOne @ManyToOne
@@ -19,8 +21,4 @@ public class CallTargetAudienceChecklistEntity extends BaseEntity{
@Column(name = "IS_VALIDATED") @Column(name = "IS_VALIDATED")
private Boolean isValidated; private Boolean isValidated;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -6,12 +6,14 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Entity @Entity
@Table(name = "communication") @Table(name = "communication")
@Data @Data
@Where(clause = "is_deleted = false")
public class CommunicationEntity extends BaseEntity { public class CommunicationEntity extends BaseEntity {
@Column(name = "COMMUNICATION_TITLE") @Column(name = "COMMUNICATION_TITLE")
@@ -20,9 +22,6 @@ public class CommunicationEntity extends BaseEntity {
@Column(name = "COMMUNICATION_COMMENT") @Column(name = "COMMUNICATION_COMMENT")
private String communicationComment; private String communicationComment;
@Column(name = "IS_DELETED")
private Boolean isDeleted = false;
@Column(name = "COMMENTED_DATE") @Column(name = "COMMENTED_DATE")
private LocalDateTime commentedDate; private LocalDateTime commentedDate;

View File

@@ -2,12 +2,14 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Entity @Entity
@Table(name = "COMPANY_DOCUMENT") @Table(name = "COMPANY_DOCUMENT")
@Data @Data
@Where(clause = "is_deleted = false")
public class CompanyDocumentEntity extends BaseEntity { public class CompanyDocumentEntity extends BaseEntity {
@Column(name = "FILE_NAME") @Column(name = "FILE_NAME")
@@ -25,9 +27,6 @@ public class CompanyDocumentEntity extends BaseEntity {
@Column(name="COMPANY_ID") @Column(name="COMPANY_ID")
private Long companyId; private Long companyId;
@Column(name ="IS_DELETED")
private Boolean isDeleted = false;
@Column(name="UPLOADED_BY") @Column(name="UPLOADED_BY")
private Long uploadedBy; private Long uploadedBy;

View File

@@ -8,10 +8,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "COMPANY") @Table(name = "COMPANY")
@Data @Data
@Where(clause = "is_deleted = false")
public class CompanyEntity extends BaseEntity{ public class CompanyEntity extends BaseEntity{
@Column(name = "COMPANY_NAME") @Column(name = "COMPANY_NAME")

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "criteria_form_field") @Table(name = "criteria_form_field")
@Data @Data
@Where(clause = "is_deleted = false")
public class CriteriaFormFieldEntity extends BaseEntity { public class CriteriaFormFieldEntity extends BaseEntity {
private Long callId; private Long callId;
@@ -18,7 +20,4 @@ public class CriteriaFormFieldEntity extends BaseEntity {
private Long evaluationCriteriaId; private Long evaluationCriteriaId;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "document_category") @Table(name = "document_category")
@Data @Data
@Where(clause = "is_deleted = false")
public class DocumentCategoryEntity extends BaseEntity { public class DocumentCategoryEntity extends BaseEntity {
@Column(name = "CATEGORY_NAME") @Column(name = "CATEGORY_NAME")
@@ -16,7 +18,4 @@ public class DocumentCategoryEntity extends BaseEntity {
@Column(name = "DESCRIPTION") @Column(name = "DESCRIPTION")
private String description; private String description;
@Column(name ="IS_DELETED")
private Boolean isDeleted = false;
} }

View File

@@ -6,10 +6,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "DOCUMENT") @Table(name = "DOCUMENT")
@Data @Data
@Where(clause = "is_deleted = false")
public class DocumentEntity extends BaseEntity{ public class DocumentEntity extends BaseEntity{
@Column(name = "FILE_NAME", length = 255) @Column(name = "FILE_NAME", length = 255)
private String fileName; private String fileName;
@@ -26,9 +28,6 @@ public class DocumentEntity extends BaseEntity{
@Column(name="SOURCE_ID") @Column(name="SOURCE_ID")
private Long sourceId; private Long sourceId;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
@Column(name="DOCUMENT_ATTACHMENT_ID") @Column(name="DOCUMENT_ATTACHMENT_ID")
private String documentAttachmentId; private String documentAttachmentId;

View File

@@ -1,12 +1,14 @@
package net.gepafin.tendermanagement.entities; package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Entity @Entity
@Data @Data
@Table(name = "email_log") @Table(name = "email_log")
@Where(clause = "is_deleted = false")
public class EmailLogEntity extends BaseEntity{ public class EmailLogEntity extends BaseEntity{
@Column(name = "email_type", nullable = false, length = 255) @Column(name = "email_type", nullable = false, length = 255)
@@ -54,9 +56,6 @@ public class EmailLogEntity extends BaseEntity{
@Column(name = "call_id") @Column(name = "call_id")
private Long callId; private Long callId;
@Column(name = "is_deleted")
private Boolean isDeleted;
@ManyToOne @ManyToOne
@JoinColumn(name = "user_action_id") @JoinColumn(name = "user_action_id")
private UserActionEntity userAction; private UserActionEntity userAction;

View File

@@ -5,6 +5,7 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -12,6 +13,7 @@ import java.math.BigDecimal;
@Entity @Entity
@Table(name = "EVALUATION_CRITERIA") @Table(name = "EVALUATION_CRITERIA")
@Data @Data
@Where(clause = "is_deleted = false")
public class EvaluationCriteriaEntity extends BaseEntity { public class EvaluationCriteriaEntity extends BaseEntity {
@ManyToOne @ManyToOne
@@ -25,7 +27,4 @@ public class EvaluationCriteriaEntity extends BaseEntity {
@Column(name = "SCORE", nullable = false) @Column(name = "SCORE", nullable = false)
private BigDecimal score; private BigDecimal score;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -5,12 +5,15 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "EVALUATION_FORM") @Table(name = "EVALUATION_FORM")
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class EvaluationFormEntity extends BaseEntity{ public class EvaluationFormEntity extends BaseEntity{
@@ -24,6 +27,4 @@ public class EvaluationFormEntity extends BaseEntity{
@Column(name = "CONTENT") @Column(name = "CONTENT")
private String content; private String content;
@Column(name="IS_DELETED")
private Boolean isDeleted;
} }

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "expiration_config") @Table(name = "expiration_config")
@Data @Data
@Where(clause = "is_deleted = false")
public class ExpirationConfigEntity extends BaseEntity { public class ExpirationConfigEntity extends BaseEntity {
@Column(name="INTERVAL_DAYS") @Column(name="INTERVAL_DAYS")
@@ -15,7 +17,4 @@ public class ExpirationConfigEntity extends BaseEntity {
@Column(name="TYPE") @Column(name="TYPE")
private String type; private String type;
@Column(name="IS_DELETED")
private Boolean isDeleted;
} }

View File

@@ -9,11 +9,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "FAQ") @Table(name = "FAQ")
@Data @Data
@Where(clause = "is_deleted = false")
public class FaqEntity extends BaseEntity { public class FaqEntity extends BaseEntity {
@ManyToOne @ManyToOne
@@ -39,9 +40,6 @@ public class FaqEntity extends BaseEntity {
@Column(name = "RESPONSE_DATE") @Column(name = "RESPONSE_DATE")
private LocalDateTime responseDate; private LocalDateTime responseDate;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
@Column(name ="COMPANY_ID") @Column(name ="COMPANY_ID")
private Long companyId; private Long companyId;

View File

@@ -1,6 +1,7 @@
package net.gepafin.tendermanagement.entities; package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -10,6 +11,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class FlowDataEntity extends BaseEntity{ public class FlowDataEntity extends BaseEntity{
@Column(name = "FORM_ID") @Column(name = "FORM_ID")
@@ -23,4 +25,5 @@ public class FlowDataEntity extends BaseEntity{
@Column(name="CALL_ID") @Column(name="CALL_ID")
private Long callId; private Long callId;
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -11,6 +12,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class FlowEdgesEntity extends BaseEntity { public class FlowEdgesEntity extends BaseEntity {
@Column(name = "SOURCE_ID") @Column(name = "SOURCE_ID")

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Builder; import lombok.Builder;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "FORM") @Table(name = "FORM")
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class FormEntity extends BaseEntity{ public class FormEntity extends BaseEntity{
@Column(name = "LABEL", length = 255) @Column(name = "LABEL", length = 255)

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Builder; import lombok.Builder;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "FORM_FIELD") @Table(name = "FORM_FIELD")
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class FormFieldEntity extends BaseEntity{ public class FormFieldEntity extends BaseEntity{
@Column(name = "NAME", length = 255) @Column(name = "NAME", length = 255)
@@ -31,4 +33,5 @@ public class FormFieldEntity extends BaseEntity{
@Column(name = "SORT_ORDER") @Column(name = "SORT_ORDER")
private Integer sortOrder; private Integer sortOrder;
} }

View File

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.Builder; import lombok.Builder;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "FORM_TEMPLATE") @Table(name = "FORM_TEMPLATE")
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@Where(clause = "is_deleted = false")
public class FormTemplateEntity extends BaseEntity{ public class FormTemplateEntity extends BaseEntity{
@Column(name = "LABEL", length = 255) @Column(name = "LABEL", length = 255)

View File

@@ -15,7 +15,4 @@ public class GlobalConfigEntity extends BaseEntity{
@Column(name = "TYPE") @Column(name = "TYPE")
private String type; private String type;
@Column(name = "IS_DELETED")
private Boolean isDeleted = false;
} }

View File

@@ -4,12 +4,13 @@ import jakarta.persistence.*;
import jakarta.validation.constraints.Size; import jakarta.validation.constraints.Size;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name="hub") @Table(name="hub")
@Setter @Setter
@Getter @Getter
@Where(clause = "is_deleted = false")
public class HubEntity extends BaseEntity{ public class HubEntity extends BaseEntity{
@Column(name = "COMPANY_NAME") @Column(name = "COMPANY_NAME")

View File

@@ -3,11 +3,13 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "hub_user") @Table(name = "hub_user")
@Getter @Getter
@Setter @Setter
@Where(clause = "is_deleted = false")
public class HubUserEntity extends BaseEntity{ public class HubUserEntity extends BaseEntity{
@ManyToOne @ManyToOne

View File

@@ -2,12 +2,14 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Entity @Entity
@Table(name = "LOGIN_ATTEMPT") @Table(name = "LOGIN_ATTEMPT")
@Data @Data
@Where(clause = "is_deleted = false")
public class LoginAttemptEntity extends BaseEntity{ public class LoginAttemptEntity extends BaseEntity{
@Column(name = "USERNAME") @Column(name = "USERNAME")

View File

@@ -3,10 +3,12 @@ package net.gepafin.tendermanagement.entities;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "LOOKUP_DATA") @Table(name = "LOOKUP_DATA")
@Data @Data
@Where(clause = "is_deleted = false")
public class LookUpDataEntity extends BaseEntity{ public class LookUpDataEntity extends BaseEntity{
@Column(name = "TITLE", columnDefinition = "TEXT", nullable = true) @Column(name = "TITLE", columnDefinition = "TEXT", nullable = true)

View File

@@ -6,10 +6,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "NOTIFICATION") @Table(name = "NOTIFICATION")
@Data @Data
@Where(clause = "is_deleted = false")
public class NotificationEntity extends BaseEntity { public class NotificationEntity extends BaseEntity {
@Column(name = "USER_ID") @Column(name = "USER_ID")
@@ -24,9 +26,6 @@ public class NotificationEntity extends BaseEntity {
@Column(name = "STATUS") @Column(name = "STATUS")
private String status; private String status;
@Column(name = "IS_DELETED")
private Boolean isDeleted;
@Column(name = "NOTIFICATION_TYPE") @Column(name = "NOTIFICATION_TYPE")
private String notificationType; private String notificationType;

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Data @Data
@Table(name = "NOTIFICATION_TYPE") @Table(name = "NOTIFICATION_TYPE")
@Where(clause = "is_deleted = false")
public class NotificationTypeEntity extends BaseEntity { public class NotificationTypeEntity extends BaseEntity {
@Column(name = "NOTIFICATION_NAME") @Column(name = "NOTIFICATION_NAME")
@@ -18,7 +20,4 @@ public class NotificationTypeEntity extends BaseEntity {
@Column(name = "TITLE") @Column(name = "TITLE")
private String title; private String title;
@Column(name="IS_DELETED")
private Boolean isDeleted;
} }

View File

@@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import net.gepafin.tendermanagement.config.LocalTimeAttributeConverter; import net.gepafin.tendermanagement.config.LocalTimeAttributeConverter;
import org.hibernate.annotations.Where;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
@@ -10,6 +11,7 @@ import java.time.LocalTime;
@Entity @Entity
@Table(name = "PROTOCOL") @Table(name = "PROTOCOL")
@Data @Data
@Where(clause = "is_deleted = false")
public class ProtocolEntity extends BaseEntity { public class ProtocolEntity extends BaseEntity {
@Column(name = "PROTOCOL_NUMBER", nullable = false) @Column(name = "PROTOCOL_NUMBER", nullable = false)

View File

@@ -6,6 +6,7 @@ import jakarta.persistence.Table;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.Where;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -13,6 +14,7 @@ import java.math.BigDecimal;
@Table(name = "REGION") @Table(name = "REGION")
@Getter @Getter
@Setter @Setter
@Where(clause = "is_deleted = false")
public class RegionEntity extends BaseEntity { public class RegionEntity extends BaseEntity {
@Column(name = "REGION_NAME", length = 255, nullable = true) @Column(name = "REGION_NAME", length = 255, nullable = true)

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Data @Data
@Table(name ="role_action_context") @Table(name ="role_action_context")
@Where(clause = "is_deleted = false")
public class RoleActionContextEntity extends BaseEntity { public class RoleActionContextEntity extends BaseEntity {
@Column(name = "action_context") @Column(name = "action_context")
@@ -16,9 +18,6 @@ public class RoleActionContextEntity extends BaseEntity {
@Column(name = "role_id") @Column(name = "role_id")
private Long roleId; private Long roleId;
@Column(name="is_deleted")
private Boolean isDeleted;
@Column(name = "is_viewed") @Column(name = "is_viewed")
private Boolean isViewed; private Boolean isViewed;

View File

@@ -4,11 +4,13 @@ import jakarta.persistence.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "ROLE") @Table(name = "ROLE")
@Getter @Getter
@Setter @Setter
@Where(clause = "is_deleted = false")
public class RoleEntity extends BaseEntity { public class RoleEntity extends BaseEntity {
@Column(name = "ROLE_NAME", length = 255, nullable = true) @Column(name = "ROLE_NAME", length = 255, nullable = true)

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "s3_path_configuration") @Table(name = "s3_path_configuration")
@Data @Data
@Where(clause = "is_deleted = false")
public class S3ConfigEntity extends BaseEntity { public class S3ConfigEntity extends BaseEntity {
@Column(name = "TYPE") @Column(name = "TYPE")
@@ -21,5 +23,6 @@ public class S3ConfigEntity extends BaseEntity {
@Column(name = "PARENT_FOLDER") @Column(name = "PARENT_FOLDER")
private String parentFolder; private String parentFolder;
} }

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "SAML_RESPONSE") @Table(name = "SAML_RESPONSE")
@Data @Data
@Where(clause = "is_deleted = false")
public class SamlResponseEntity extends BaseEntity{ public class SamlResponseEntity extends BaseEntity{
@Column(name = "AUTHENTICATION_OBJECT") @Column(name = "AUTHENTICATION_OBJECT")
@@ -31,5 +33,4 @@ public class SamlResponseEntity extends BaseEntity{
@Column(name = "TOKEN") @Column(name = "TOKEN")
private String token; private String token;
} }

View File

@@ -8,10 +8,12 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne; import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "system_email_template") @Table(name = "system_email_template")
@Data @Data
@Where(clause = "is_deleted = false")
public class SystemEmailTemplatesEntity extends BaseEntity { public class SystemEmailTemplatesEntity extends BaseEntity {
@@ -33,9 +35,6 @@ public class SystemEmailTemplatesEntity extends BaseEntity {
@Column(name = "SYSTEM") @Column(name = "SYSTEM")
private Boolean system; private Boolean system;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
@Column(name = "email_scenario") @Column(name = "email_scenario")
private String emailScenario; private String emailScenario;

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Data @Data
@Entity @Entity
@Table(name = "user_action") @Table(name = "user_action")
@Where(clause = "is_deleted = false")
public class UserActionEntity extends BaseEntity { public class UserActionEntity extends BaseEntity {
@Column(name = "USER_ID") @Column(name = "USER_ID")
@@ -40,7 +42,4 @@ public class UserActionEntity extends BaseEntity {
@Column(name = "RESPONSE") @Column(name = "RESPONSE")
private String response; private String response;
@Column(name = "IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -2,10 +2,12 @@ package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Data @Data
@Entity @Entity
@Table(name = "user_company_delegation") @Table(name = "user_company_delegation")
@Where(clause = "is_deleted = false")
public class UserCompanyDelegationEntity extends BaseEntity{ public class UserCompanyDelegationEntity extends BaseEntity{
@Column(name="USER_ID") @Column(name="USER_ID")

View File

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.Where;
import net.gepafin.tendermanagement.model.response.EmailSendResponse; import net.gepafin.tendermanagement.model.response.EmailSendResponse;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -16,6 +17,7 @@ import java.util.List;
@Table(name = "GEPAFIN_USER") @Table(name = "GEPAFIN_USER")
@Getter @Getter
@Setter @Setter
@Where(clause = "is_deleted = false")
public class UserEntity extends BaseEntity { public class UserEntity extends BaseEntity {
@Column(name = "PASSWORD", columnDefinition = "TEXT",nullable = true) @Column(name = "PASSWORD", columnDefinition = "TEXT",nullable = true)

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Entity @Entity
@Table(name = "USER_WITH_COMPANY") @Table(name = "USER_WITH_COMPANY")
@Data @Data
@Where(clause = "is_deleted = false")
public class UserWithCompanyEntity extends BaseEntity{ public class UserWithCompanyEntity extends BaseEntity{
@Column(name = "USER_ID") @Column(name = "USER_ID")
@@ -35,7 +37,4 @@ public class UserWithCompanyEntity extends BaseEntity{
@Column(name = "EMAIL") @Column(name = "EMAIL")
private String email; private String email;
@Column(name = "IS_DELETED")
private Boolean isDeleted = false;
} }

View File

@@ -4,10 +4,12 @@ import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where;
@Data @Data
@Entity @Entity
@Table(name = "version_history") @Table(name = "version_history")
@Where(clause = "is_deleted = false")
public class VersionHistoryEntity extends BaseEntity { public class VersionHistoryEntity extends BaseEntity {
@Column(name = "OLD_DATA", columnDefinition = "LONGTEXT") @Column(name = "OLD_DATA", columnDefinition = "LONGTEXT")
@@ -30,7 +32,4 @@ public class VersionHistoryEntity extends BaseEntity {
@Column(name = "USER_ID") @Column(name = "USER_ID")
private Long userId; private Long userId;
@Column(name = "IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -0,0 +1,18 @@
package net.gepafin.tendermanagement.enums;
import com.fasterxml.jackson.annotation.JsonValue;
public enum HttpMethodEnum {
POST("POST"), PUT("PUT"), GET("GET"), DELETE("DELETE");
private String value;
HttpMethodEnum(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}

View File

@@ -1052,5 +1052,17 @@ public class Utils {
headers.add(org.apache.http.HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"); headers.add(org.apache.http.HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0");
return headers; return headers;
} }
public static void setHttpServletRequestForThread(HttpServletRequest request,String methodType, String remoteUser, Long userActionId) {
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.setRequestURI(request.getRequestURI());
mockRequest.setMethod(methodType);
mockRequest.setRemoteUser(remoteUser); // or pass it in if needed
mockRequest.setAttribute(GepafinConstant.USER_ACTION_ID, userActionId);
ServletRequestAttributes attributes = new ServletRequestAttributes(mockRequest);
RequestContextHolder.setRequestAttributes(attributes, true);
}
} }

View File

@@ -2737,6 +2737,132 @@
</insert> </insert>
</changeSet> </changeSet>
<changeSet id="09-01-2025_PK_120129" author="Piyush Kag">
<addColumn tableName="application_signed_document">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="APPLICATION_FORM">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="APPLICATION_FORM_FIELD">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="BENEFICIARY">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="CALL">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="COMPANY">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FLOW_DATA">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FLOW_EDGES">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FORM">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FORM_FIELD">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="FORM_TEMPLATE">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="hub">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="LOGIN_ATTEMPT">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="LOOKUP_DATA">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="PROTOCOL">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="REGION">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="ROLE">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="s3_path_configuration">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="SAML_RESPONSE">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="user_company_delegation">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="GEPAFIN_USER">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
<changeSet id="08-04-2025_PK_160730" author="Piyush kag"> <changeSet id="08-04-2025_PK_160730" author="Piyush kag">
<sqlFile dbms="postgresql" <sqlFile dbms="postgresql"