diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 5869fc81..f984d0e0 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -360,5 +360,6 @@ public class GepafinConstant { public static final String STATUS_CODE_STRING = "statusCode"; public static final String GET_STATUS_CODE_STRING = "status"; public static final String MESSAGE_STRING = "message"; + public static final String AMOUNT_ACCEPTED_REQUIRED_WHILE_APPROVING_APPLICATION="amount.accepted.required"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index c8185408..4f38e7e9 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -47,6 +47,7 @@ import jakarta.servlet.http.HttpServletRequest; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.math.BigDecimal; import java.text.MessageFormat; import java.time.LocalDateTime; import java.util.*; @@ -423,6 +424,10 @@ public class ApplicationDao { if(applicationEntity.getProtocol() != null) { responseBean.setProtocolNumber(applicationEntity.getProtocol().getProtocolNumber()); } + responseBean.setAmountAccepted(applicationEntity.getAmountAccepted()); + responseBean.setAmountRequested(applicationEntity.getAmountRequested()); + responseBean.setDateAccepted(applicationEntity.getDateAccepted()); + responseBean.setDateRejected(applicationEntity.getDateRejected()); return responseBean; } @@ -442,6 +447,10 @@ public class ApplicationDao { response.setCallId(entity.getCall().getId()); response.setCreatedDate(entity.getCreatedDate()); response.setUpdatedDate(entity.getUpdatedDate()); + response.setAmountAccepted(entity.getAmountAccepted()); + response.setAmountRequested(entity.getAmountRequested()); + response.setDateAccepted(entity.getDateAccepted()); + response.setDateRejected(entity.getDateRejected()); if(entity.getProtocol() != null) { response.setProtocolNumber(entity.getProtocol().getProtocolNumber()); } @@ -480,6 +489,30 @@ public class ApplicationDao { List newDocumentIds = validateFileUploadDocuments(applicationFormFieldRequestBean, formEntity); validateFileUploadDocuments(applicationFormFieldRequestBean, formEntity); VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; + List contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); + + contentResponseBeans.stream() + .filter(content -> "numberinput".equals(content.getName())) + .map(ContentResponseBean::getSettings) + .flatMap(List::stream) + .filter(setting -> "isRequestedAmount".equals(setting.getName()) && Boolean.TRUE.equals(setting.getValue())) + .findFirst() + .ifPresent(setting -> { + Object fieldValue = applicationFormFieldRequestBean.getFieldValue(); + if(fieldValue!=null) { + if (fieldValue instanceof String) { + try { + BigDecimal amountRequested = new BigDecimal((String) fieldValue); + applicationFormEntity.getApplication().setAmountRequested(amountRequested); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Field value is not a valid number: " + fieldValue, e); + } + } else { + throw new IllegalArgumentException("Field value is not a String: " + fieldValue); + } + } + }); + ApplicationFormFieldEntity oldApplicationFormFieldData = null; @@ -811,6 +844,10 @@ public class ApplicationDao { applicationGetResponseBean.setCallId(applicationEntity.getCall().getId()); applicationGetResponseBean.setCallTitle(applicationEntity.getCall().getName()); applicationGetResponseBean.setCompanyId(applicationEntity.getCompanyId()); + applicationGetResponseBean.setAmountAccepted(applicationEntity.getAmountAccepted()); + applicationGetResponseBean.setAmountRequested(applicationEntity.getAmountRequested()); + applicationGetResponseBean.setDateAccepted(applicationEntity.getDateAccepted()); + applicationGetResponseBean.setDateRejected(applicationEntity.getDateRejected()); if(applicationEntity.getProtocol() != null) { applicationGetResponseBean.setProtocolNumber(applicationEntity.getProtocol().getProtocolNumber()); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index c264a078..7cced04a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.time.Duration; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; @@ -582,6 +583,10 @@ public class ApplicationEvaluationDao { CompanyEntity company = companyService.validateCompany(application.getCompanyId()); response.setCompanyName(company.getCompanyName()); } + response.setAmountAccepted(application.getAmountAccepted()); + response.setAmountRequested(application.getAmountRequested()); + response.setDateAccepted(application.getDateAccepted()); + response.setDateRejected(application.getDateRejected()); } @@ -596,7 +601,8 @@ public class ApplicationEvaluationDao { Optional assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId); ApplicationEvaluationEntity oldApplicationEvaluation = null; - VersionActionTypeEnum actionType; + ApplicationEntity application = applicationService.validateApplication(assignedApplications.get().getApplication().getId()); + VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; if (existingEntityOptional.isPresent()) { entity = existingEntityOptional.get(); oldApplicationEvaluation = Utils.getClonedEntityForData(entity); @@ -612,10 +618,15 @@ public class ApplicationEvaluationDao { entity.setIsDeleted(false); setIfUpdated(entity::getNote, entity::setNote, req.getNote()); setIfUpdated(entity::getMotivation, entity::setMotivation, req.getMotivation()); + if(Boolean.TRUE.equals(req.getApplicationStatus().equals(ApplicationStatusForEvaluation.APPROVED)) && (req.getAmountAccepted()==null || req.getAmountAccepted().compareTo(BigDecimal.ZERO) < 0)){ + throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.AMOUNT_ACCEPTED_REQUIRED_WHILE_APPROVING_APPLICATION)); + } + if (req.getAmountAccepted() != null && req.getAmountAccepted().compareTo(BigDecimal.ZERO) > 0) { + application.setAmountAccepted(req.getAmountAccepted()); + } actionType = VersionActionTypeEnum.UPDATE; } else { AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId); - ApplicationEntity application = applicationService.validateApplication(assignedApplicationsEntity.getApplication().getId()); entity = convertToEntity(user, req, assignedApplicationId); actionType = VersionActionTypeEnum.INSERT; @@ -644,7 +655,6 @@ public class ApplicationEvaluationDao { loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldApplicationEvaluation).newData(entity).build()); if (status != null) { - ApplicationEntity application = applicationService.validateApplication(assignedApplications.get().getApplication().getId()); AssignedApplicationsEntity assignedApplicationsEntity = assignedApplications.get(); return updateApplicationEvaluationStatus(application, assignedApplicationsEntity, status); } else { @@ -1821,9 +1831,15 @@ public class ApplicationEvaluationDao { if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.APPROVED.getValue())))) { + application.setDateAccepted(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + application.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + application = applicationRepository.save(application); emailNotificationDao.sendAdmissibilityNotificationEmailForApprovedApplication(application); } if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.REJECTED.getValue())))) { + application.setDateRejected(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + application.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + application = applicationRepository.save(application); emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(application,existingEntity); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java index 97fef3cb..91b94b90 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DashboardDao.java @@ -1,5 +1,9 @@ package net.gepafin.tendermanagement.dao; +import net.gepafin.tendermanagement.entities.CompanyEntity; +import net.gepafin.tendermanagement.entities.UserActionEntity; +import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.entities.UserWithCompanyEntity; import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.enums.CallStatusEnum; import net.gepafin.tendermanagement.enums.RoleStatusEnum; @@ -11,9 +15,15 @@ import net.gepafin.tendermanagement.model.response.SuperAdminWidgetResponseBean; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.CompanyService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -45,11 +55,14 @@ public class DashboardDao { @Autowired private ApplicationEvaluationRepository applicationEvaluationRepository; + @Autowired + private UserActionsRepository userActionsRepository; + public SuperAdminWidgetResponseBean getDashboardWidget(UserEntity requestedUserEntity) { SuperAdminWidgetResponseBean widgetResponseBean = new SuperAdminWidgetResponseBean(); widgetResponseBean.setWidget1(createWidget1(requestedUserEntity)); -// List widgetBars = callRepository.findApplicationsPerCall(); -// widgetResponseBean.setWidgetBars(widgetBars); + Map widgetBars =getStatistics(requestedUserEntity); + widgetResponseBean.setWidgetBars(widgetBars); return widgetResponseBean; } @@ -62,7 +75,8 @@ public class DashboardDao { setSubmittedApplications(widget1, requestedUserEntity); setDraftApplications(widget1, requestedUserEntity); setNumberOfCompanies(widget1, requestedUserEntity); - + setAmountRequested(widget1,requestedUserEntity); + setAmountAccepted(widget1,requestedUserEntity); return widget1; } @@ -79,6 +93,20 @@ public class DashboardDao { } } + private void setAmountRequested(Widget1 widget1, UserEntity requestedUserEntity) { + BigDecimal amountRequested = applicationRepository.findTotalAmountRequestedOfApplication(requestedUserEntity.getHub().getId()); + if (amountRequested != null) { + widget1.setTotalAmountRequested(amountRequested); + } + } + + private void setAmountAccepted(Widget1 widget1, UserEntity requestedUserEntity) { + BigDecimal amountAccepted = applicationRepository.findTotalAmountAcceptedOfApplication(requestedUserEntity.getHub().getId()); + if (amountAccepted != null) { + widget1.setTotalAmountAccepted(amountAccepted); + } + } + private void setRegisteredUsers(Widget1 widget1, UserEntity requestedUserEntity) { Long activeUsers = userRepository.countByStatusAndRoleEntityRoleTypeAndHubId(UserStatusEnum.ACTIVE.getValue(), RoleStatusEnum.ROLE_BENEFICIARY.getValue(), requestedUserEntity.getHub().getId()); @@ -142,6 +170,35 @@ public class DashboardDao { return beneficiaryWidgetResponseBean; } + public Map getStatistics(UserEntity requestedUser) { + Map stats = new HashMap<>(); + + // Get applications per call + List applicationsPerCall = applicationRepository.findApplicationsPerCallWithName(requestedUser.getHub().getId()); + stats.put("APPLICATION_PER_CALL", applicationsPerCall.stream().map(result -> { + Map callData = new HashMap<>(); + callData.put("CALL", result[0]); // Call name + callData.put("APPLICATIONS", result[1]); // Application count + return callData; + }).toList()); + + // Get applications grouped by status + List applicationsByStatus = applicationRepository.findApplicationsByStatus(requestedUser.getHub().getId()); + stats.put("APPLICATION_STATUSES", applicationsByStatus.stream().map(result -> { + Map statusData = new HashMap<>(); + statusData.put("STATUS", result[0]); // Application status + statusData.put("COUNT", result[1]); // Count of applications + return statusData; + }).toList()); + + return stats; + } +// public Page getUserAction(UserEntity requestedUserEntity){ +// Pageable pageable = PageRequest.of(0, 20); // Get the first 20 records +// List roles=List.of(RoleStatusEnum.ROLE_PRE_INSTRUCTOR.getValue(),RoleStatusEnum.ROLE_GEPAFIN_OPERATOR.getValue(),RoleStatusEnum.ROLE_INSTRUCTOR_MANAGER.getValue()); +// Page userActionEntities=userActionsRepository.findActionsByRoleNamesAndHubId(roles,requestedUserEntity.getHub().getId(),pageable); +// return userActionEntities; +// } public ApplicationWidgetResponseBean getApplicationDetails(UserEntity userEntity) { ApplicationWidgetResponseBean applicationWidgetResponseBean = initializeResponseBean(); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java index 4a42daf7..faec3489 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java @@ -309,6 +309,10 @@ public class FlowFormDao { if(applicationEntity.getProtocol() != null) { nextOrPreviousFormResponse.setProtocolNumber(applicationEntity.getProtocol().getProtocolNumber()); } + nextOrPreviousFormResponse.setAmountAccepted(applicationEntity.getAmountAccepted()); + nextOrPreviousFormResponse.setAmountRequested(applicationEntity.getAmountRequested()); + nextOrPreviousFormResponse.setDateAccepted(applicationEntity.getDateAccepted()); + nextOrPreviousFormResponse.setDateRejected(applicationEntity.getDateRejected()); return nextOrPreviousFormResponse; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java index 39e26f4b..c6880af4 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEntity.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.entities; import jakarta.persistence.*; import lombok.*; +import java.math.BigDecimal; import java.time.LocalDateTime; @Entity @@ -55,4 +56,16 @@ public class ApplicationEntity extends BaseEntity { @Column(name = "APPOINTMENT_ID") private String appointmentId; - } \ No newline at end of file + @Column(name="AMOUNT_REQUESTED") + private BigDecimal amountRequested; + + @Column(name="AMOUNT_ACCEPTED") + private BigDecimal amountAccepted; + + @Column(name="DATE_ACCEPTED") + private LocalDateTime dateAccepted; + + @Column(name="DATE_REJECTED") + private LocalDateTime dateRejected; + +} \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java index 6616c288..bd63054c 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.model.request; import lombok.Data; import net.gepafin.tendermanagement.enums.ApplicationStatusForEvaluation; +import java.math.BigDecimal; import java.util.List; @Data public class ApplicationEvaluationRequest { @@ -15,4 +16,5 @@ public class ApplicationEvaluationRequest { private String note; private ApplicationStatusForEvaluation applicationStatus; private String motivation; + private BigDecimal amountAccepted; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java index 7da6d25f..c2fcd6cb 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java @@ -4,6 +4,7 @@ import lombok.Data; import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -38,4 +39,8 @@ public class ApplicationEvaluationResponse { private LocalDateTime assignedAt; private String ndg; private String appointmentId; + private BigDecimal amountRequested; + private BigDecimal amountAccepted; + private LocalDateTime dateAccepted; + private LocalDateTime dateRejected; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationGetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationGetResponseBean.java index aa686023..77048d15 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationGetResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationGetResponseBean.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -26,6 +27,15 @@ public class ApplicationGetResponseBean { private Long protocolNumber; + private BigDecimal amountRequested; + + private BigDecimal amountAccepted; + + private LocalDateTime dateAccepted; + + private LocalDateTime dateRejected; + + private List form; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java index 24ad5a34..1aae69e2 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponse.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; import net.gepafin.tendermanagement.model.response.ApplicationFormFieldResponseBean; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -37,4 +38,12 @@ public class ApplicationResponse{ private String assignedUserName; + private BigDecimal amountRequested; + + private BigDecimal amountAccepted; + + private LocalDateTime dateAccepted; + + private LocalDateTime dateRejected; + } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponseBean.java index 6b99961f..3c9016bd 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationResponseBean.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; import net.gepafin.tendermanagement.model.BaseBean; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -19,6 +20,14 @@ public class ApplicationResponseBean extends BaseBean { private Long protocolNumber; + private BigDecimal amountRequested; + + private BigDecimal amountAccepted; + + private LocalDateTime dateAccepted; + + private LocalDateTime dateRejected; + private List formFields; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/NextOrPreviousFormResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/NextOrPreviousFormResponse.java index 8925e7f6..bea417a1 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/NextOrPreviousFormResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/NextOrPreviousFormResponse.java @@ -3,6 +3,9 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import java.math.BigDecimal; +import java.time.LocalDateTime; + @Data public class NextOrPreviousFormResponse { @@ -25,6 +28,14 @@ public class NextOrPreviousFormResponse { private Long protocolNumber; private ApplicationStatusTypeEnum applicationStatus; + + private BigDecimal amountRequested; + + private BigDecimal amountAccepted; + + private LocalDateTime dateAccepted; + + private LocalDateTime dateRejected; private FormApplicationResponse applicationFormResponse; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java index 6ed30e56..02744ace 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/SuperAdminWidgetResponseBean.java @@ -1,14 +1,17 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; +import net.gepafin.tendermanagement.entities.UserActionEntity; +import org.springframework.data.domain.Page; import java.util.List; +import java.util.Map; @Data public class SuperAdminWidgetResponseBean { private Widget1 widget1; -// private List widgetBars; + private Map widgetBars; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/Widget1.java b/src/main/java/net/gepafin/tendermanagement/model/response/Widget1.java index 75c68758..a6b1ad88 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/Widget1.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/Widget1.java @@ -23,4 +23,8 @@ public class Widget1 { private BigDecimal totalActiveFinancing; + private BigDecimal totalAmountRequested; + + private BigDecimal totalAmountAccepted; + } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index 3b35e921..c46c52c7 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.math.BigDecimal; import java.util.List; import java.util.Optional; @@ -24,7 +25,6 @@ public interface ApplicationRepository extends JpaRepository findByIdAndUserIdAndIsDeletedFalse(Long id,Long userId); - Optional findByUserIdAndUserWithCompanyIdAndCallIdAndIsDeletedFalse(Long userId, Long userWithCompanyId, Long callId); public Optional findByIdAndUserIdAndCallIdAndIsDeletedFalse(Long applicationId, Long userId, Long callId); @@ -45,6 +45,23 @@ public interface ApplicationRepository extends JpaRepository findApplicationsPerCallWithName(@Param("hubId") Long hubId); + + // Count Applications by Status by Hub ID + @Query("SELECT a.status, COUNT(a.id) FROM ApplicationEntity a WHERE a.isDeleted = false AND a.call.hub.id = :hubId GROUP BY a.status") + List findApplicationsByStatus(@Param("hubId") Long hubId); + + @Query("SELECT SUM(a.amountRequested) " + + "FROM ApplicationEntity a " + + "WHERE a.hubId = :hubId AND a.status IN ('SUBMIT', 'SOCCORSO', 'APPROVED', 'EVALUATION', 'APPOINTMENT', 'NDG', 'ADMISSIBLE','REJECTED')") + BigDecimal findTotalAmountRequestedOfApplication(@Param("hubId") Long hubId); + + @Query("SELECT SUM(a.amountAccepted) " + + "FROM ApplicationEntity a " + + "WHERE a.hubId = :hubId AND a.status = 'APPROVED'") + BigDecimal findTotalAmountAcceptedOfApplication(@Param("hubId") Long hubId); + @Query("SELECT COUNT(a) FROM ApplicationEntity a WHERE a.hubId = :hubId AND a.status = 'SUBMIT' AND a.isDeleted = false") public Long countApplicationsByHubId(@Param("hubId") Long hubId); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java index 938f19f6..5cfed300 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java @@ -47,6 +47,10 @@ public interface CallRepository extends JpaRepository { BigDecimal findTotalAmountOfPublishedCallsAndHubId(@Param("hubId") Long hubId); @Query("SELECT c FROM CallEntity c WHERE c.id IN :ids AND c.status IN :status") List findByIdInAndStatusIn(@Param("ids") List ids, @Param("status") List status); + + @Query("SELECT SUM(c.amount) FROM CallEntity c WHERE c.hub.id = :hubId AND c.status = 'PUBLISH'") + BigDecimal findTotalAmountOfPublishedCalls(@Param("hubId") Long hubId); + List findByIdIn(@Param("ids") List ids); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/UserActionsRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/UserActionsRepository.java index 804fdb9b..eb93f8dd 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/UserActionsRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/UserActionsRepository.java @@ -1,10 +1,18 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.UserActionEntity; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface UserActionsRepository extends JpaRepository { + UserActionEntity findUserActionById(Long id); + UserActionEntity findUserActionByIdAndIsDeletedFalse(Long id); } diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 4b73b739..24972538 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -2189,4 +2189,12 @@ path="db/dump/insert_expiration_scheduler_data_07_01_2025.sql"/> + + + + + + + + diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 44a27275..c743b3fa 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -346,3 +346,4 @@ notification.sent.successfully=Notification sent successfully. notification.deleted.successfully=Notification deleted successfully. notification.updated.successfully=Notification updated successfully. user.with.company.not.found = User with company not found for user or company. +amount.accepted.required=Amount accepted is required while approving the application. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 0b22e9e3..14a5dbb5 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -329,7 +329,6 @@ appointment.created.successfully = Appuntamento creato con successo. error.try.again = Errore di chiamata di servizio durante l'esecuzione dell'operazione. Riprovare. document.uploading.is.in.progress = Il documento ? in fase di caricamento. all.document.checked.and.one.checklist.checked=Tutti i documenti devono essere controllati e almeno una checklist deve essere controllata. -<<<<<<< HEAD #notification messsages notification.already.in.state=La notifica � gi� nello stato fornito. @@ -339,5 +338,4 @@ notification.sent.successfully=Notifica inviata con successo. notification.deleted.successfully=Notifica eliminata con successo. notification.updated.successfully=Notifica aggiornata con successo. user.with.company.not.found = Utente con azienda non trovato per utente o azienda. -======= ->>>>>>> 832666a4d412c2c81f5c1dfb5b1866aba2c40bdd +amount.accepted.required=L'importo accettato è obbligatorio durante l'approvazione della domanda.