diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java index c08f1277..01170cf9 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -213,4 +213,10 @@ public class TBScreening { @org.hibernate.annotations.CreationTimestamp @Column(name = "synced_date") private Timestamp syncedDate; + + @Column(name = "failure_to_gainWeight") + private Boolean failureToGainWeight; + + @Column(name = "decreased_activity_playfulness ") + private Boolean decreasedActivityOrPlayfulness ; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java b/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java index f4370d79..858554da 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java @@ -66,11 +66,4 @@ public class VhncForm { @Column(name = "followup_previous") private Boolean followupPrevius; - @Column(name = "synced_by") - private String syncedBy; - - @org.hibernate.annotations.CreationTimestamp - @Column(name = "synced_date") - private Timestamp syncedDate; - } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java index b4cf0033..c82009cf 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java @@ -9,6 +9,9 @@ @Data public class ANCVisitDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java index b59bb8ea..e534fd25 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/AdolescentHealthDTO.java @@ -8,6 +8,9 @@ import java.util.List; @Data public class AdolescentHealthDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @NotNull(message = "User ID cannot be null") Integer userId; @NotNull(message = "Adolescent health records cannot be null") diff --git a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java index b71086e0..3f3011d3 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java @@ -4,6 +4,9 @@ @Data public class AncCounsellingCareDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private String formId; private Long id ; private Long beneficiaryId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java b/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java index e39f0641..0654b5e3 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/CdrDTO.java @@ -9,6 +9,9 @@ @Data public class CdrDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java index bcc26ff3..9633a4b2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ChildRegisterDTO.java @@ -6,6 +6,9 @@ @Data public class ChildRegisterDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java index d1fb5501..fab5bc4e 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ChildVaccinationDTO.java @@ -8,6 +8,9 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class ChildVaccinationDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private long id; private Long beneficiaryRegId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java index 5e94697a..e5455388 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DeliveryOutcomeDTO.java @@ -1,6 +1,7 @@ package com.iemr.flw.dto.iemr; import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.persistence.Column; import lombok.Data; import java.sql.Timestamp; @@ -30,4 +31,6 @@ public class DeliveryOutcomeDTO { private String createdBy; private Timestamp updatedDate; private String updatedBy; + private String syncedBy; + private Timestamp syncedDate; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java index bf77cd65..3c3feb61 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DewormingFormDTO.java @@ -4,6 +4,9 @@ @Data public class DewormingFormDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private int id = 0; private String dewormingDone; private String dewormingDate; diff --git a/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java index c9ecb63c..9d755546 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DynamicFormDTO.java @@ -39,6 +39,9 @@ @NoArgsConstructor @AllArgsConstructor public class DynamicFormDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long formId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java index 0ec1c876..d2b004f4 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java @@ -11,6 +11,9 @@ @Data public class EligibleCoupleDTO implements Serializable { + private String syncedBy; + private Timestamp syncedDate; + private Long id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java index 6d7a8a5d..e3e88c1b 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleTrackingDTO.java @@ -7,6 +7,9 @@ @Data public class EligibleCoupleTrackingDTO implements Serializable { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java index 2e53ee29..fda157d0 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java @@ -4,6 +4,9 @@ @Data public class FilariasisCampaignDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private String visitDate; private FilariasisCampaignListDTO fields; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java index d53a5823..efc74085 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FormResponseDTO.java @@ -39,6 +39,9 @@ @AllArgsConstructor @Builder public class FormResponseDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long responseId; private Long beneficiaryId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java index 6bb10795..52cc7405 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FormSectionDTO.java @@ -39,6 +39,9 @@ @NoArgsConstructor @AllArgsConstructor public class FormSectionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long sectionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java index 742b0f7b..b7a042e8 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FormVersionDTO.java @@ -32,6 +32,9 @@ @NoArgsConstructor @AllArgsConstructor public class FormVersionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long versionId; private Integer versionNumber; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java index 05fcff99..46891d74 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncPart1DTO.java @@ -6,6 +6,9 @@ @Data public class HbncPart1DTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java index 9a1becc6..0b1a9a05 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncPart2DTO.java @@ -6,6 +6,9 @@ @Data public class HbncPart2DTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java index 6ebb7ef7..59ad402c 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitCardDTO.java @@ -6,6 +6,9 @@ @Data public class HbncVisitCardDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java index a5043b22..2bbc345a 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbncVisitDTO.java @@ -9,6 +9,9 @@ @Data public class HbncVisitDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @SerializedName("id") private Integer id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java index 9a983b50..a3b814d9 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HbycDTO.java @@ -21,6 +21,9 @@ @Data public class HbycDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @SerializedName("visit_day") private String visit_day; // 3 Months, 6 Months, etc. diff --git a/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java b/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java index a2f32c60..5d0fed84 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/HighRiskAssessDTO.java @@ -6,6 +6,9 @@ @Data public class HighRiskAssessDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Integer userId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java index f2d48716..89ee050d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IRSRoundDTO.java @@ -14,6 +14,9 @@ @NoArgsConstructor @AllArgsConstructor public class IRSRoundDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; @NotNull(message = "Date cannot be null") private LocalDate date; diff --git a/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java index 32143753..d9b0004d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IfaDistributionDTO.java @@ -5,6 +5,9 @@ @Data public class IfaDistributionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + @SerializedName("beneficiaryId") private Long beneficiaryId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java index 7aa85646..b7d8b457 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IncentiveActivityDTO.java @@ -8,6 +8,9 @@ @Data public class IncentiveActivityDTO implements Serializable { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; diff --git a/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java b/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java index e2a6787c..5e775d70 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java @@ -62,6 +62,8 @@ public class IncentiveRecordDTO { private String supervisorRole; private Boolean isApproved; + private String syncedBy; + private Timestamp syncedDate; diff --git a/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java index aaf28a29..17686fce 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/LeprosyFollowUpDTO.java @@ -6,6 +6,9 @@ @Data public class LeprosyFollowUpDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java index f47da8ed..b2b8054d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MalariaFollowUpDTO.java @@ -29,6 +29,9 @@ import java.util.List; @Data public class MalariaFollowUpDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Integer userId; private List malariaFollowListUp; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java index e59047ab..136ae987 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MdsrDTO.java @@ -6,6 +6,9 @@ @Data public class MdsrDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java index 882cee35..2a6711e2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MicroBirthPlanDTO.java @@ -7,6 +7,9 @@ import java.util.List; @Data public class MicroBirthPlanDTO implements Serializable { + private String syncedBy; + private java.sql.Timestamp syncedDate; + Integer userId; List entries; diff --git a/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java b/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java index b20dd715..cf6e48ee 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/NotificationDTO.java @@ -6,6 +6,9 @@ @Data public class NotificationDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private String title; private String body; private String token; diff --git a/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java index d43167a7..6cd86e77 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OptionConditionDTO.java @@ -38,6 +38,9 @@ @NoArgsConstructor @AllArgsConstructor public class OptionConditionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long conditionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java index 7bdfd4fd..0b4143b8 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsDistributionDTO.java @@ -4,6 +4,9 @@ @Data public class OrsDistributionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long beneficiaryId; private Long houseHoldId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java index 9bfc4fc7..8829cfd7 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PNCVisitDTO.java @@ -6,6 +6,9 @@ @Data public class PNCVisitDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; // private Integer pncVisit; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java index 5c0adfc9..f0b4f8f9 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PmsmaDTO.java @@ -6,6 +6,9 @@ @Data public class PmsmaDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; private String rchNumber; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java index 5240f667..816db8ed 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PregnantWomanDTO.java @@ -6,6 +6,9 @@ @Data public class PregnantWomanDTO { + private String syncedBy; + private Timestamp syncedDate; + private Long id; private Long benId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java index 6682404a..3c2b1440 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/QuestionOptionDTO.java @@ -38,6 +38,9 @@ @NoArgsConstructor @AllArgsConstructor public class QuestionOptionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long optionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java index 03f1622e..1bcff9c9 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/QuestionResponseDTO.java @@ -37,6 +37,9 @@ @AllArgsConstructor @Builder public class QuestionResponseDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long questionResponseId; private Long questionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java b/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java index 72c144c5..594c8e6e 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/QuestionValidationDTO.java @@ -36,6 +36,9 @@ @NoArgsConstructor @AllArgsConstructor public class QuestionValidationDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long validationId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java b/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java index 11a81430..720b4e26 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/SectionQuestionDTO.java @@ -40,6 +40,9 @@ @NoArgsConstructor @AllArgsConstructor public class SectionQuestionDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long questionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java index 78c918fe..26b27324 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/SectionResponseDTO.java @@ -39,6 +39,9 @@ @AllArgsConstructor @Builder public class SectionResponseDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long sectionResponseId; private Long sectionId; diff --git a/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java b/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java index 64194ff1..84984e2d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java +++ b/src/main/java/com/iemr/flw/dto/iemr/StopTBRegistrationDto.java @@ -5,6 +5,9 @@ @Data public class StopTBRegistrationDto { + private String syncedBy; + private java.sql.Timestamp syncedDate; + // Standard beneficiary fields — forwarded to Common-API @JsonRawValue diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java index b81ca1c1..4a1936d4 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -1,5 +1,6 @@ package com.iemr.flw.dto.iemr; +import jakarta.persistence.Column; import lombok.Data; import java.sql.Timestamp; @@ -7,6 +8,9 @@ @Data public class TBScreeningDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Long benId; @@ -87,5 +91,7 @@ public class TBScreeningDTO { private String hivStatus; private List keyPopulationRiskFactorIds; private List keyPopulationRiskFactors; + private Boolean failureToGainWeight; + private Boolean decreasedActivityOrPlayfulness ; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java index d09fa9bf..23e568ef 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -6,6 +6,9 @@ @Data public class TBSuspectedDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private Long id; private Timestamp updateDate; diff --git a/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java index bee7f247..aa99186a 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java @@ -29,6 +29,9 @@ @Data public class VHNDFormDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private String vhndDate; private String place; private Integer noOfBeneficiariesAttended; diff --git a/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java b/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java index a3019210..5f91cdde 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/VaccineDTO.java @@ -6,6 +6,9 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class VaccineDTO { + private String syncedBy; + private java.sql.Timestamp syncedDate; + private short vaccineId; private String immunizationService; diff --git a/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java b/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java index 99487cc2..125f04d7 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/ChildVaccinationRepo.java @@ -12,9 +12,8 @@ @Repository public interface ChildVaccinationRepo extends JpaRepository { - @Query(value = "SELECT cv FROM ChildVaccination cv WHERE cv.createdBy = :userId and cv.createdDate >= :fromDate and cv.createdDate <= :toDate") - List getChildVaccinationDetails(@Param("userId") String userId, - @Param("fromDate") Timestamp fromDate, @Param("toDate") Timestamp toDate); + @Query(value = "SELECT cv FROM ChildVaccination cv WHERE cv.createdBy = :userId") + List getChildVaccinationDetails(@Param("userId") String userId); ChildVaccination findChildVaccinationByBeneficiaryRegIdAndCreatedDateAndVaccineName(Long benRegId, Timestamp createdDate, String vaccine); diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java index bc6587de..74acfa5f 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -100,18 +100,18 @@ List getStatusCountByAshaIdANM( @Param("endDate") Timestamp endDate); @Query(""" -SELECT - SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) -FROM IncentiveActivityRecord record -WHERE record.ashaId = :ashaId -AND record.isClaimed = true -AND record.isDefaultActivity = true -AND record.createdDate >= :startDate -AND record.createdDate < :endDate -""") + SELECT + SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) + FROM IncentiveActivityRecord record + WHERE record.ashaId = :ashaId + AND record.isClaimed = true + AND record.isDefaultActivity = true + AND record.createdDate >= :startDate + AND record.createdDate < :endDate + """) List getStatusCountByAshaIdOfDefaultActivity( @Param("ashaId") Integer ashaId, @Param("startDate") Timestamp startDate, @@ -119,24 +119,23 @@ List getStatusCountByAshaIdOfDefaultActivity( @Query(""" -SELECT - SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), - SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) -FROM IncentiveActivityRecord record -WHERE record.ashaId = :ashaId -AND record.isClaimed = false -AND record.createdDate >= :startDate -AND record.createdDate < :endDate -""") + SELECT + SUM(CASE WHEN record.approvalStatus = 101 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 102 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus = 103 THEN 1 ELSE 0 END), + SUM(CASE WHEN record.approvalStatus IN (101,105) THEN 1 ELSE 0 END) + FROM IncentiveActivityRecord record + WHERE record.ashaId = :ashaId + AND record.isClaimed = false + AND record.createdDate >= :startDate + AND record.createdDate < :endDate + """) List getStatusUnclaimedCountByAshaId( @Param("ashaId") Integer ashaId, @Param("startDate") Timestamp startDate, @Param("endDate") Timestamp endDate); - @Query("SELECT COALESCE(SUM(record.amount), 0) " + "FROM IncentiveActivityRecord record " + "JOIN IncentiveActivity master ON record.activityId = master.id " + @@ -155,26 +154,26 @@ Long getTotalAmountByAsha( @Query(""" - SELECT COALESCE(SUM(record.amount), 0) - FROM IncentiveActivityRecord record - JOIN IncentiveActivity master ON record.activityId = master.id - WHERE record.ashaId = :ashaId - AND master.state = :stateCode - AND record.isClaimed = true - AND record.startDate >= :fromDate - AND record.endDate <= :toDate - AND ( - :approvalStatus = 0 - OR ( - :approvalStatus = 102 - AND record.approvalStatus IN (102, 105) - ) - OR ( - :approvalStatus <> 102 - AND record.approvalStatus = :approvalStatus - ) - ) -""") + SELECT COALESCE(SUM(record.amount), 0) + FROM IncentiveActivityRecord record + JOIN IncentiveActivity master ON record.activityId = master.id + WHERE record.ashaId = :ashaId + AND master.state = :stateCode + AND record.isClaimed = true + AND record.startDate >= :fromDate + AND record.endDate <= :toDate + AND ( + :approvalStatus = 0 + OR ( + :approvalStatus = 102 + AND record.approvalStatus IN (102, 105) + ) + OR ( + :approvalStatus <> 102 + AND record.approvalStatus = :approvalStatus + ) + ) + """) Long getTotalAmountByAshaANM( @Param("ashaId") Integer ashaId, @Param("fromDate") Timestamp fromDate, @@ -184,27 +183,27 @@ Long getTotalAmountByAshaANM( ); @Query(""" - SELECT COALESCE(SUM(record.amount), 0) - FROM IncentiveActivityRecord record - JOIN IncentiveActivity master ON record.activityId = master.id - WHERE record.ashaId = :ashaId - AND master.state = :stateCode - AND record.isClaimed = true - AND record.isDefaultActivity = false - AND record.startDate >= :fromDate - AND record.endDate <= :toDate - AND ( - :approvalStatus = 0 - OR ( - :approvalStatus = 102 - AND record.approvalStatus IN (102, 105) - ) - OR ( - :approvalStatus <> 102 - AND record.approvalStatus = :approvalStatus - ) - ) -""") + SELECT COALESCE(SUM(record.amount), 0) + FROM IncentiveActivityRecord record + JOIN IncentiveActivity master ON record.activityId = master.id + WHERE record.ashaId = :ashaId + AND master.state = :stateCode + AND record.isClaimed = true + AND record.isDefaultActivity = false + AND record.startDate >= :fromDate + AND record.endDate <= :toDate + AND ( + :approvalStatus = 0 + OR ( + :approvalStatus = 102 + AND record.approvalStatus IN (102, 105) + ) + OR ( + :approvalStatus <> 102 + AND record.approvalStatus = :approvalStatus + ) + ) + """) Long getTotalAmountByAshaANMbeforeClaimedHour( @Param("ashaId") Integer ashaId, @Param("fromDate") Timestamp fromDate, @@ -304,17 +303,17 @@ int updateApprovalStatusByIncentiveId( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.reason = NULL, - iar.otherReason = NULL, - iar.approvalDate = :approvalDate, - iar.verifiedByUserName = :ashaSupervisorUserName - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.reason = NULL, + iar.otherReason = NULL, + iar.approvalDate = :approvalDate, + iar.verifiedByUserName = :ashaSupervisorUserName + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIncentiveIds( @Param("incentiveIds") List incentiveIds, @Param("ashaId") Integer ashaId, @@ -328,19 +327,19 @@ int updateApprovalStatusByIncentiveIds( @Modifying @Transactional @Query(""" -UPDATE IncentiveActivityRecord iar -SET - iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL -WHERE iar.ashaId = :ashaId -AND iar.isClaimed = true -AND iar.createdDate >= :startDate -AND iar.createdDate < :endDate -""") + UPDATE IncentiveActivityRecord iar + SET + iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.ashaId = :ashaId + AND iar.isClaimed = true + AND iar.createdDate >= :startDate + AND iar.createdDate < :endDate + """) int updateApprovalStatusByAshaAndDateRangeForDefaultActivity( @Param("ashaId") Integer ashaId, @Param("approvalStatus") Integer approvalStatus, @@ -354,18 +353,18 @@ int updateApprovalStatusByAshaAndDateRangeForDefaultActivity( @Modifying @Transactional @Query(""" -UPDATE IncentiveActivityRecord iar -SET - iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL -WHERE iar.id = :incentiveId -AND iar.ashaId = :ashaId -AND iar.isClaimed = true -""") + UPDATE IncentiveActivityRecord iar + SET + iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.id = :incentiveId + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIncentiveIdForDefaultActivity( @Param("incentiveId") Long incentiveId, @Param("ashaId") Integer ashaId, @@ -378,18 +377,18 @@ int updateApprovalStatusByIncentiveIdForDefaultActivity( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - AND iar.isDefaultActivity = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + AND iar.isDefaultActivity = true + """) int updateApprovalStatusByIncentiveIdsForDefaultActivity( @Param("incentiveIds") List incentiveIds, @Param("ashaId") Integer ashaId, @@ -403,17 +402,17 @@ int updateApprovalStatusByIncentiveIdsForDefaultActivity( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :approvalStatus, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.approvalDate = :approvalDate, - iar.reason = NULL, - iar.otherReason = NULL - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :approvalStatus, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.approvalDate = :approvalDate, + iar.reason = NULL, + iar.otherReason = NULL + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIncentiveIdsForDefaultActivityForAnm( @Param("incentiveIds") List incentiveIds, @Param("ashaId") Integer ashaId, @@ -422,6 +421,7 @@ int updateApprovalStatusByIncentiveIdsForDefaultActivityForAnm( @Param("ashaSupervisorUserId") Integer ashaSupervisorUserId, @Param("ashaSupervisorUserName") String ashaSupervisorUserName ); + @Modifying @Transactional @Query("UPDATE IncentiveActivityRecord iar " @@ -470,17 +470,17 @@ int updateApprovalStatusByIdAndIncentiveId( @Modifying @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = :status, - iar.verifiedByUserId = :ashaSupervisorUserId, - iar.verifiedByUserName = :ashaSupervisorUserName, - iar.reason = :reason, - iar.otherReason = :otherReason, - iar.approvalDate = :approvalDate - WHERE iar.id IN :incentiveIds - AND iar.ashaId = :ashaId - AND iar.isClaimed = true - """) + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = :status, + iar.verifiedByUserId = :ashaSupervisorUserId, + iar.verifiedByUserName = :ashaSupervisorUserName, + iar.reason = :reason, + iar.otherReason = :otherReason, + iar.approvalDate = :approvalDate + WHERE iar.id IN :incentiveIds + AND iar.ashaId = :ashaId + AND iar.isClaimed = true + """) int updateApprovalStatusByIdsAndIncentiveIds( @Param("status") Integer status, @Param("ashaId") Integer ashaId, @@ -550,6 +550,7 @@ List getRecordsBySuperVisor( @Param("startDate") Timestamp startDate, @Param("endDate") Timestamp endDate, @Param("approvalStatus") Integer approvalStatus); + @Modifying @Transactional @Query("UPDATE IncentiveActivityRecord iar " @@ -568,24 +569,33 @@ int updateClaimStatusByAshaAndIncentiveIds( @Modifying(clearAutomatically = true, flushAutomatically = true) @Transactional @Query(""" - UPDATE IncentiveActivityRecord iar - SET iar.approvalStatus = 102, - iar.isClaimed = false, - iar.calimedDate = NULL, - iar.approvalDate = NULL, - iar.reason = NULL, - iar.otherReason = NULL, - iar.verifiedByUserId = NULL, - iar.verifiedByUserName = NULL, - iar.updatedDate = :updatedDate, - iar.updatedBy = :updatedBy - WHERE iar.approvalStatus = 103 - AND iar.isClaimed = true - AND iar.endDate < :currentMonthStart -""") + UPDATE IncentiveActivityRecord iar + SET iar.approvalStatus = 102, + iar.isClaimed = false, + iar.calimedDate = NULL, + iar.approvalDate = NULL, + iar.reason = NULL, + iar.otherReason = NULL, + iar.verifiedByUserId = NULL, + iar.verifiedByUserName = NULL, + iar.updatedDate = :updatedDate, + iar.updatedBy = :updatedBy + WHERE iar.approvalStatus = 103 + AND iar.isClaimed = true + AND iar.endDate < :currentMonthStart + """) int resetRejectedIncentivesForNewMonth( @Param("currentMonthStart") Timestamp currentMonthStart, @Param("updatedDate") Timestamp updatedDate, @Param("updatedBy") String updatedBy ); + + @Query("SELECT r FROM IncentiveActivityRecord r " + + "WHERE r.ashaId = :ashaId " + + "AND r.approvalStatus = :status") + List findApprovedForMonth( + @Param("ashaId") Integer ashaId, + @Param("status") Integer status); } + + diff --git a/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java b/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java index f444d47a..7e398aff 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/TbTptFollowUpRepo.java @@ -5,9 +5,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.sql.Timestamp; import java.util.List; @Repository public interface TbTptFollowUpRepo extends JpaRepository { List findByUserId(Integer userId); + + List findByBenIdAndRegimenTypeAndTreatmentStartDate(Long benId, String regimenType, Timestamp treatmentStartDate); } diff --git a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java index 46fac5ef..ad944aa4 100644 --- a/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/ChildCareServiceImpl.java @@ -418,7 +418,7 @@ public List getChildVaccinationDetails(GetBenRequestHandler try { String user = beneficiaryRepo.getUserName(dto.getAshaId()); List vaccinationDetails = - childVaccinationRepo.getChildVaccinationDetails(user, dto.getFromDate(), dto.getToDate()); + childVaccinationRepo.getChildVaccinationDetails(user); if (vaccinationDetails.isEmpty()) { return new ArrayList<>(); diff --git a/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java index b650dd43..e12a1c87 100644 --- a/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CoupleServiceImpl.java @@ -335,20 +335,25 @@ private void checkIncentiveForChildGap(Integer stateId, String userName,List delOutList) { IncentiveActivity institutionalDeliveryActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MH_MOTIVATE_INST_DEL", GroupName.MATERNAL_HEALTH.getDisplayName()); IncentiveActivity institutionalDeliveryActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("INST_DELIVERY_ESCORT", GroupName.ACTIVITY.getDisplayName()); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if (placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))) { // Institutional delivery (eligible case) @@ -170,10 +170,10 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 1) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY1); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY1); @@ -188,10 +188,10 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 2) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY2); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY2); @@ -206,10 +206,10 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 3) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY3); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY3); @@ -223,10 +223,10 @@ public void checkAndAddJsyIncentive(List delOutList) { if (deliveryOutcome.getDeliveryOutcome() == 4) { createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityJSY4); if (deliveryOutcome.getPlaceOfDelivery() != null) { - String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery(); + String placeOfDelivery = deliveryOutcome.getPlaceOfDelivery().toLowerCase(); if(placeOfDelivery != null && - (!placeOfDelivery.equalsIgnoreCase("home") || - !placeOfDelivery.equalsIgnoreCase("in transit") || + (!placeOfDelivery.equalsIgnoreCase("home") && + !placeOfDelivery.equalsIgnoreCase("in transit") && !placeOfDelivery.equalsIgnoreCase("other private hospital"))){ createIncentiveRecordforJsy(deliveryOutcome, deliveryOutcome.getBenId(), incentiveActivityInstJSY4); diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java index 4da29ff4..5fb04d0b 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -360,278 +360,210 @@ public void resetRejectedIncentivesForPreviousMonths() { ); } // ================= GROUPED SUMMARY ================= - @Override - public String getAllIncentivesGroupedSummary(GetBenRequestHandler request,Integer userId) { - String roleName = userService.getUserDetail(userId).getRoleName(); - LocalDate start = LocalDate.of(request.getYear(), request.getMonth(), 1); - LocalDate end = start.withDayOfMonth(start.lengthOfMonth()); - + @Transactional(readOnly = true) + public String getAllIncentivesGroupedSummary(GetBenRequestHandler request, Integer userId) { - LocalDate monthStart = LocalDate.of( - request.getYear(), - request.getMonth(), - 1 - ); + String roleName = userService.getUserDetail(userId).getRoleName(); + Integer reqStatus = request.getApprovalStatus(); - Timestamp startTs = - Timestamp.valueOf(monthStart.atStartOfDay()); + Integer stateId = userRepo.getUserRole(request.getUserId()).get(0).getStateId(); + boolean isCG = stateId != null && stateId.intValue() == StateCode.CG.getStateCode(); - Timestamp nextMonthTs = - Timestamp.valueOf(monthStart.plusMonths(1).atStartOfDay()); + logger.info("Request getAllIncentivesGroupedSummary: {}", reqStatus); - Integer villageID = userRepo.getUserRole(request.getUserId()).get(0).getStateId(); - boolean isCG = villageID != null && villageID.intValue() == StateCode.CG.getStateCode(); - logger.info("Request getAllIncentivesGroupedSummary: "+request.getApprovalStatus()); List records = recordRepo.findRecordsByAsha(request.getUserId()) .stream() - .filter(r -> - r.getCreatedDate() != null - - // Month filter using createdDate - && r.getCreatedDate() - .toLocalDateTime() - .getMonthValue() - == request.getMonth() - - && r.getCreatedDate() - .toLocalDateTime() - .getYear() - == request.getYear() - - && Boolean.TRUE.equals(r.getIsClaimed()) - - && ( - // Overdue: 102, 104 or 105 - ( - Objects.equals( - request.getApprovalStatus(), - 104 - ) - && ( - Objects.equals( - r.getApprovalStatus(), - 102 - ) - || Objects.equals( - r.getApprovalStatus(), - 104 - ) - || Objects.equals( - r.getApprovalStatus(), - 105 - ) - ) - ) - - || - - // Verified: 101 or 105 - ( - Objects.equals( - request.getApprovalStatus(), - 105 - ) - && ( - Objects.equals( - r.getApprovalStatus(), - 101 - ) - || Objects.equals( - r.getApprovalStatus(), - 105 - ) - ) - ) - - || - - // Other statuses - ( - !Objects.equals( - request.getApprovalStatus(), - 104 - ) - && !Objects.equals( - request.getApprovalStatus(), - 105 - ) - && Objects.equals( - r.getApprovalStatus(), - request.getApprovalStatus() - ) - ) - ) - ) + .filter(r -> r.getCreatedDate() != null) + .filter(r -> { + LocalDateTime created = r.getCreatedDate().toLocalDateTime(); + return created.getMonthValue() == request.getMonth() + && created.getYear() == request.getYear(); + }) + .filter(r -> Boolean.TRUE.equals(r.getIsClaimed())) + .filter(r -> matchesRequestedStatus(r.getApprovalStatus(), reqStatus)) .collect(Collectors.toList()); - - // Bulk fetch valid activity IDs — state wise List activityIds = records.stream() .map(IncentiveActivityRecord::getActivityId) .collect(Collectors.toList()); - Set validActivityIds = isCG - ? incentivesRepo.findValidActivityIds(activityIds, true) - : incentivesRepo.findValidActivityIds(activityIds, false); + Set validActivityIds = incentivesRepo.findValidActivityIds(activityIds, isCG); + if (validActivityIds == null) { + validActivityIds = Collections.emptySet(); + } + final Set validIds = validActivityIds; - // Filter records based on valid activity IDs - if(isCG){ - if("ASHA Supervisor".equalsIgnoreCase(roleName)){ - if(request.getApprovalStatus().equals(104)){ + if (isCG) { + + if ("ASHA Supervisor".equalsIgnoreCase(roleName)) { + + if (Integer.valueOf(104).equals(reqStatus)) { + records = records.stream() + .filter(r -> validIds.contains(r.getActivityId()) + && Boolean.TRUE.equals(r.getIsDefaultActivity()) + && Objects.equals(r.getApprovalStatus(), 102)) + .collect(Collectors.toList()); + } else if (Integer.valueOf(102).equals(reqStatus)) { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId()) && r.getIsDefaultActivity() && r.getApprovalStatus().equals(102)) + .filter(r -> validIds.contains(r.getActivityId()) + && Boolean.TRUE.equals(r.getIsDefaultActivity()) + && Objects.equals(r.getApprovalStatus(), 102)) .collect(Collectors.toList()); + }else { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId()) && r.getIsDefaultActivity()) + .filter(r -> validIds.contains(r.getActivityId()) + && Boolean.TRUE.equals(r.getIsDefaultActivity())) .collect(Collectors.toList()); } - }else if ("ANM".equalsIgnoreCase(roleName) || "CHO".equalsIgnoreCase(roleName)) { - if(request.getApprovalStatus().equals(102) || request.getApprovalStatus().equals(105)){ - records = records.stream() - .filter(record -> - validActivityIds.contains(record.getActivityId()) - ) - .filter(record -> - !Boolean.TRUE.equals( - record.getIsDefaultActivity() - ) + } else if ("ANM".equalsIgnoreCase(roleName) || "CHO".equalsIgnoreCase(roleName)) { + + if (Integer.valueOf(102).equals(reqStatus) || Integer.valueOf(105).equals(reqStatus)) { - || Boolean.TRUE.equals( - record.getIsApproved() - ) - ) - .collect(Collectors.toList()); - }else if(request.getApprovalStatus().equals(104)){ records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId())) + .filter(r -> validIds.contains(r.getActivityId())) + + // default + approved + 102 -> 105 + .peek(r -> { + if (Objects.equals(r.getApprovalStatus(), 102) + && Boolean.TRUE.equals(r.getIsDefaultActivity()) + && Boolean.TRUE.equals(r.getIsApproved())) { + + logger.info("Changing record status 102 to 105: id={}, activityId={}", + r.getId(), r.getActivityId()); + r.setApprovalStatus(105); + } + }) + .filter(r -> { - if (Objects.equals(request.getApprovalStatus(), 104)) { + boolean isDefault = Boolean.TRUE.equals(r.getIsDefaultActivity()); + boolean isClaimed = Boolean.TRUE.equals(r.getIsClaimed()); + Integer recStatus = r.getApprovalStatus(); - boolean isDefault = - Boolean.TRUE.equals(r.getIsDefaultActivity()); + if (Integer.valueOf(102).equals(reqStatus)) { + return (!isDefault && Objects.equals(recStatus, 102) && isClaimed) + || Objects.equals(recStatus, 105); + } - boolean isApproved = - Boolean.TRUE.equals(r.getIsApproved()); + return Objects.equals(recStatus, 101) + || Objects.equals(recStatus, 105); + }) + .collect(Collectors.toList()); - // All non-default 102 records, - // and approved default 102 records - boolean status102 = - Objects.equals(r.getApprovalStatus(), 102) - && (!isDefault || isApproved); + } else if (Integer.valueOf(104).equals(reqStatus)) { - // Default 105 records, regardless of isApproved - boolean status105 = - Objects.equals(r.getApprovalStatus(), 105) - && isDefault; + records = records.stream() + .filter(r -> validIds.contains(r.getActivityId())) + .filter(r -> { + boolean isDefault = Boolean.TRUE.equals(r.getIsDefaultActivity()); + boolean isApproved = Boolean.TRUE.equals(r.getIsApproved()); - // Existing overdue records - boolean status104 = - Objects.equals(r.getApprovalStatus(), 104); + boolean status102 = Objects.equals(r.getApprovalStatus(), 102) + && (!isDefault || isApproved); - return status102 || status105 || status104; - } + boolean status105 = Objects.equals(r.getApprovalStatus(), 105) + && isDefault; - return Objects.equals( - r.getApprovalStatus(), - request.getApprovalStatus() - ); + boolean status104 = Objects.equals(r.getApprovalStatus(), 104); + + return status102 || status105 || status104; }) .collect(Collectors.toList()); - }else { + + } else { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId())) + .filter(r -> validIds.contains(r.getActivityId())) .collect(Collectors.toList()); } - - - - logger.info( - "ANM/CHO records after default activity filter: {}", - records.size() - ); + logger.info("ANM/CHO records after default activity filter: {}", records.size()); } - }else { + } else { records = records.stream() - .filter(r -> validActivityIds.contains(r.getActivityId())) + .filter(r -> validIds.contains(r.getActivityId())) .collect(Collectors.toList()); } - Map> grouped = records.stream().collect(Collectors.groupingBy(IncentiveActivityRecord::getActivityId)); List> result = new ArrayList<>(); - for (var entry : grouped.entrySet()) { + for (Map.Entry> entry : grouped.entrySet()) { Long activityId = entry.getKey(); List list = entry.getValue(); - IncentiveActivity activity = - incentivesRepo.findById(activityId).orElse(null); - - Integer approvalStatus = list.stream() - .max(Comparator.comparing(IncentiveActivityRecord::getCreatedDate)) - .map(IncentiveActivityRecord::getApprovalStatus) - .orElse(0); + IncentiveActivity activity = incentivesRepo.findById(activityId).orElse(null); + if (activity == null) continue; - boolean isApproved = list.stream() + IncentiveActivityRecord latest = list.stream() .max(Comparator.comparing(IncentiveActivityRecord::getCreatedDate)) - .map(IncentiveActivityRecord::getIsApproved) - .orElse(false); - Long incentiveId = list.stream() - .max(Comparator.comparing(IncentiveActivityRecord::getCreatedDate)) - .map(IncentiveActivityRecord::getId) .orElse(null); + if (latest == null) continue; - if (activity == null) continue; + Integer approvalStatus = latest.getApprovalStatus() != null ? latest.getApprovalStatus() : 0; + boolean isApproved = Boolean.TRUE.equals(latest.getIsApproved()); + Long incentiveId = latest.getId(); long total = list.stream() .mapToLong(r -> r.getAmount() != null ? r.getAmount() : 0) .sum(); Map map = new HashMap<>(); - if(isCG){ - map.put("activityId", activityId); - map.put("incentiveId",incentiveId); - map.put("activityDec", activity.getDescription()); - if(activity.getGroupCategoryName()!=null && !activity.getGroupCategoryName().isEmpty()){ + map.put("activityId", activityId); + map.put("incentiveId", incentiveId); + map.put("activityDec", activity.getDescription()); + map.put("claimCount", list.size()); + map.put("totalAmount", total); + map.put("amount", activity.getRate()); + + if (isCG) { + if (activity.getGroupCategoryName() != null && !activity.getGroupCategoryName().isEmpty()) { map.put("groupName", activity.getGroupCategoryName()); - - }else { + } else { map.put("groupName", activity.getGroup()); - } map.put("isDefault", activity.getIsDefaultActivity()); map.put("approvalStatus", approvalStatus); map.put("isApproved", isApproved); - map.put("claimCount", list.size()); - map.put("totalAmount", total); - map.put("amount", activity.getRate()); - - }else { - map.put("activityId", activityId); - map.put("incentiveId",incentiveId); - map.put("activityDec", activity.getDescription()); + } else { map.put("groupName", activity.getGroup()); - map.put("claimCount", list.size()); - map.put("totalAmount", total); - map.put("amount", activity.getRate()); - } result.add(map); + } + return new Gson().toJson(result); + } + /** + * Request ke status ke hisaab se kaunse DB status allow hain. + */ + private boolean matchesRequestedStatus(Integer recStatus, Integer reqStatus) { + if (Integer.valueOf(104).equals(reqStatus)) { + // Overdue tab: 102, 104, 105 + return Objects.equals(recStatus, 102) + || Objects.equals(recStatus, 104) + || Objects.equals(recStatus, 105); } - return new Gson().toJson(result); + if (Integer.valueOf(105).equals(reqStatus)) { + // Verified tab: 101, 105 + return Objects.equals(recStatus, 101) + || Objects.equals(recStatus, 105); + } + + if (Integer.valueOf(102).equals(reqStatus)) { + return Objects.equals(recStatus, 102) + || Objects.equals(recStatus, 105); + } + + return Objects.equals(recStatus, reqStatus); } private boolean isAfter24Hours(Timestamp claimedDate) { diff --git a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java index cc287117..11ab7f88 100644 --- a/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/SupervisorDashboardServiceImpl.java @@ -2,16 +2,17 @@ import java.math.BigDecimal; import java.sql.Timestamp; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.Month; -import java.time.ZoneId; +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; import com.google.gson.Gson; +import com.iemr.flw.domain.iemr.IncentiveActivity; import com.iemr.flw.domain.iemr.IncentiveActivityRecord; -import com.iemr.flw.dto.iemr.UserServiceRoleDTO; +import com.iemr.flw.dto.iemr.*; +import com.iemr.flw.dto.iemr.Period; import com.iemr.flw.masterEnum.IncentiveApprovalStatus; import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.iemr.*; @@ -45,15 +46,24 @@ public class SupervisorDashboardServiceImpl implements SupervisorDashboardServic @Autowired private IncentiveRecordRepo incentiveRecordRepo; + @Autowired + private IncentivesRepo incentivesRepo; + @Autowired private JwtUtil jwtUtil; @Autowired private UserService userService; + @Autowired + EmployeeMasterRepo employeeMasterRepo; + @Autowired private NotificationService notificationService; + @Autowired + private UtpreronaPaymentIntegrationImpl paymentService; + @Override public String getSupervisorDashboard(Integer supervisorUserID, Integer month, Integer year,Integer facilityId) { JSONObject result = new JSONObject(); @@ -864,7 +874,6 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci } logger.info("Other:" + rows); - long pending = 0, verified = 0, rejected = 0 , unclaimedCount = 0 , overDue = 0 ; long overallVerified = 0, overallRejected = 0, overallPending = 0 , overallUnclaimed=0 ,overallOverDue =0; @@ -881,6 +890,13 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci for (Object[] row : rows) { + long pending = 0; + long verified = 0; + long rejected = 0; + long unclaimedCount = 0; + long overDue = 0; + + Map asha = new HashMap<>(); Integer ashaId = ((Number) row[0]).intValue(); @@ -1234,45 +1250,32 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci if (Objects.equals(approvalStatusID, 102)) { incentiveActivityRecord = dbRecords.stream() - - .filter(record -> - Objects.equals(record.getApprovalStatus(), 102) - || Objects.equals( - record.getApprovalStatus(), 105 - ) - ) - .peek(record -> { if (Objects.equals(record.getApprovalStatus(), 102) - && Boolean.TRUE.equals( - record.getIsDefaultActivity() - ) - && Boolean.TRUE.equals( - record.getIsApproved() - )) { + && Boolean.TRUE.equals(record.getIsDefaultActivity()) + && Boolean.TRUE.equals(record.getIsApproved())) { - logger.info( - "Changing record status 102 to 105: " + - "id={}, activityId={}", - record.getId(), - record.getActivityId() - ); + logger.info("Changing record status 102 to 105: id={}, activityId={}", + record.getId(), record.getActivityId()); record.setApprovalStatus(105); } }) + .filter(record -> { + boolean isDefault = Boolean.TRUE.equals(record.getIsDefaultActivity()); + boolean isClaimed = Boolean.TRUE.equals(record.getIsClaimed()); + Integer status = record.getApprovalStatus(); + boolean default105 = isDefault && Objects.equals(status, 105); - .filter(record -> - !Boolean.TRUE.equals( - record.getIsDefaultActivity() - ) - || Boolean.TRUE.equals( - record.getIsApproved() - ) - ) - .collect(Collectors.toList()); + boolean nonDefault102Claimed = !isDefault && Objects.equals(status, 102) && isClaimed; + + boolean other105 = !isDefault && Objects.equals(status, 105); + + return nonDefault102Claimed || default105 || other105; + }) + .collect(Collectors.toList()); totalAmount = incentiveActivityRecord.stream() .map(IncentiveActivityRecord::getAmount) .filter(Objects::nonNull) @@ -1464,15 +1467,12 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci - if (verified > 0) overallVerified += 1; - if (rejected > 0) overallRejected += 1; + if (verified > 0) overallVerified++; + if (rejected > 0) overallRejected++; if (pending > 0) { - if (isOverDue) { - overallOverDue++; - } else { - overallPending++; - } + if (isOverDue) overallOverDue++; else overallPending++; } + if (unclaimedCount > 0) overallUnclaimed++; if (unclaimedCount > 0) overallUnclaimed += 1; @@ -1528,6 +1528,7 @@ public Map getAshasAtFacility(Integer supervisorId, Integer faci approvalStatus.put("pending", overallPending); approvalStatus.put("rejected", overallRejected); approvalStatus.put("unClaimed", overallUnclaimed); + approvalStatus.put("overDue", overallOverDue); response.put("approvalStatus", approvalStatus); response.put("data", ashaList); @@ -1719,6 +1720,33 @@ public int updateApprovalStatus(Integer ashaId, ashaSupervisorUserId, ashaSupervisorDetails ); + + boolean isApproved = !approvalStatus.equals(IncentiveApprovalStatus.REJECTED.getCode()); + + // Final approval: AM mein supervisor/CHO, CG mein sirf ANM + // (CG mein ASHA Supervisor ka status 105 intermediate hai, uspar payment nahi) + boolean isFinalApprover = + ashaSupervisorDetails.getStateId().equals(StateCode.AM.getStateCode()) + || (ashaSupervisorDetails.getStateId().equals(StateCode.CG.getStateCode()) + && "ANM".equalsIgnoreCase(ashaSupervisorDetails.getRoleName())); + + if (isApproved && isFinalApprover) { + List approvedRecords; + + if (incentiveIds == null || incentiveIds.trim().isEmpty()) { + approvedRecords = incentiveRecordRepo + .findApprovedForMonth( + ashaId, approvalStatus); + } else { + List ids = Arrays.stream(incentiveIds.split(",")) + .map(String::trim).filter(v -> !v.isEmpty()) + .map(Long::valueOf).collect(Collectors.toList()); + approvedRecords = incentiveRecordRepo.findAllById(ids); + } + + triggerPayment(ashaId, month, year, approvedRecords, + ashaSupervisorDetails, ashaSupervisorUserId); + } } return updatedCount; @@ -1796,6 +1824,129 @@ private void sendApprovalNotification( } } + public void triggerPayment(Integer ashaId, Integer month, Integer year, + List approvedRecords, + UserServiceRoleDTO supervisor, Integer supervisorUserId) { + + logger.info("========================================"); + logger.info("SSD Request Send to portal"); + logger.info("========================================"); + + try { + if (approvedRecords == null || approvedRecords.isEmpty()) { + logger.info("No approved records, payment not triggered for asha {}", ashaId); + return; + } + + LocalDate first = LocalDate.of(year, month, 1); + + Period period = new Period(); + period.setStart(first.toString()); + period.setEnd(first.withDayOfMonth(first.lengthOfMonth()).toString()); + + VerifiedBy verifiedBy = new VerifiedBy(); + verifiedBy.setEmployeeId("NRHM-22547"); + verifiedBy.setName(supervisor.getUserName()); + + Map> byActivity = + approvedRecords.stream() + .collect(Collectors.groupingBy( + IncentiveActivityRecord::getActivityId + )); + + List items = new ArrayList<>(); + + byActivity.forEach((activityId, recs) -> { + + var activityOpt = incentivesRepo.findById(activityId); + + // Activity not found -> skip + if (activityOpt.isEmpty()) { + logger.warn( + "Activity not found, skipping payment item. activityId={}", + activityId + ); + return; + } + + var activity = activityOpt.get(); + + // State Activity Code null -> skip + if (activity.getStateActivityCode() == null) { + logger.warn( + "State Activity Code is null, skipping payment item. activityId={}", + activityId + ); + return; + } + + long count = recs.size(); + + long total = recs.stream() + .mapToLong(r -> r.getAmount() == null ? 0L : r.getAmount()) + .sum(); + + PaymentItem item = new PaymentItem(); + + item.setActivityCode( + String.valueOf(activity.getStateActivityCode()) + ); + + item.setCount(String.valueOf(count)); + item.setIncentiveAmount(String.valueOf(total)); + + items.add(item); + }); + + // Agar saare records ka activity code null tha + if (items.isEmpty()) { + logger.info( + "No valid payment items found for asha {}, payment not triggered", + ashaId + ); + return; + } + + String timestamp = OffsetDateTime.now(ZoneId.of("Asia/Kolkata")) + .truncatedTo(ChronoUnit.SECONDS) + .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); + + if (employeeMasterRepo.findUserByUserID(ashaId) != null) { + + String empId = employeeMasterRepo + .findUserByUserID(ashaId) + .getEmployeeID(); + + if (empId != null) { + + PaymentRequest paymentRequest = new PaymentRequest( + UUID.randomUUID().toString(), + "AMRIT", + period, + String.valueOf(30638), + timestamp, + verifiedBy, + items + ); + + logger.info( + "PAYMENT REQUEST Payload: {}", + new Gson().toJson(paymentRequest) + ); + + paymentService.sendPaymentRequest(paymentRequest); + } + } + + } catch (Exception e) { + logger.error( + "Payment request failed for asha {}: {}", + ashaId, + e.getMessage(), + e + ); + } + } private JSONObject buildEmptyIncentiveSummary() { JSONObject summary = new JSONObject(); summary.put("verified", 0); diff --git a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java index 3f212533..1bbc5ec0 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -56,6 +56,9 @@ public class TBConfirmedCaseServiceImpl implements TBConfirmedCaseService { @Autowired private TbReferralFollowUpRepo tbReferralFollowUpRepo; + @Autowired + private IncentiveLogicImpl incentiveLogic; + @Autowired private TbTptFollowUpRepo tbTptFollowUpRepo; public TBConfirmedCaseServiceImpl(TBConfirmedTreatmentRepository repository, @@ -417,6 +420,8 @@ public String saveTptFollowUp(TbTptFollowUpDTO requestDTO, String token) { } tbTptFollowUpRepo.save(tbTptFollowUp); + + createTptIncentiveIfEligible(tbTptFollowUp); } response.setResponse("TPT follow up saved successfully"); @@ -431,6 +436,58 @@ public String saveTptFollowUp(TbTptFollowUpDTO requestDTO, String token) { } + private static final Map MIN_FOLLOW_UPS = Map.of( + "1HP", 1, + "3HP", 3, + "3RH", 3, + "4R", 4, + "6H", 6, + "6LFX", 6 + ); + + + private void createTptIncentiveIfEligible(TbTptFollowUp saved) { + + // 1. Basic conditions + if (!Boolean.TRUE.equals(saved.getTreatmentCompleted()) + || saved.getActualTreatmentCompletionDate() == null + || saved.getRegimenType() == null + || saved.getTreatmentStartDate() == null + || saved.getBenId() == null) { + return; + } + + // 2. Regimen ka minimum follow-up count + Integer minRequired = MIN_FOLLOW_UPS.get(saved.getRegimenType().trim().toUpperCase()); + if (minRequired == null) { + return; // unknown regimen + } + + List cycleRows = tbTptFollowUpRepo + .findByBenIdAndRegimenTypeAndTreatmentStartDate( + saved.getBenId(), + saved.getRegimenType(), + saved.getTreatmentStartDate()); + + long completedMonths = cycleRows.stream() + .map(TbTptFollowUp::getFollowUpMonth) + .filter(Objects::nonNull) + .map(String::trim) + .distinct() + .count(); + + if (completedMonths < minRequired) { + return; + } + Timestamp completionDate = saved.getActualTreatmentCompletionDate(); + + incentiveLogic.incentiveForTbPreventiveFollowUp( + saved.getBenId(), + completionDate, + completionDate, + saved.getUserId()); + } + @Override public String getTptFollowUp(String token) { diff --git a/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java b/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java index 30a79102..3edb8845 100644 --- a/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java +++ b/src/main/java/com/iemr/flw/service/impl/UTPReronaPaymentJob.java @@ -49,7 +49,7 @@ public void run(String... args) { log.info("FLW application started successfully and is now running."); log.info("========================================"); - triggerStaticPayment(); + // triggerStaticPayment(); } // ✅ Separate method — call this for immediate testing diff --git a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java index c21cc9a5..ff1482e0 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -149,8 +149,15 @@ private Boolean saveVhncFormData(VhncFormDTO vhncFormDTO, Integer userID) { vhncForm.setFormType("VHNC"); vhncFormRepo.save(vhncForm); + if(vhncFormDTO.getVhncDate()!=null && !vhncFormDTO.getVhncDate().isEmpty()){ - checkVhncIncentive(vhncForm.getCreatedDate(),Math.toIntExact(vhncForm.getUserId())); + Timestamp timestamp = Timestamp.valueOf( + LocalDate.parse(vhncForm.getVhncDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) + .atStartOfDay() + ); + + checkVhncIncentive(timestamp,Math.toIntExact(vhncForm.getUserId())); + } return true; } @@ -170,8 +177,17 @@ private Boolean savePhcForm(PhcReviewMeetingFormDTO dto, Integer userID) { phcReviewForm.setImage2(dto.getImage2()); phcReviewForm.setFormType("PHC"); phcReviewFormRepo.save(phcReviewForm); + if(dto.getPhcReviewDate()!=null && !dto.getPhcReviewDate().isEmpty()){ + + Timestamp timestamp = Timestamp.valueOf( + LocalDate.parse(phcReviewForm.getPhcReviewDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) + .atStartOfDay() + ); + + checkPhcMeetingIncentive(timestamp,Math.toIntExact(phcReviewForm.getUserId())); + } + - checkPhcMeetingIncentive(phcReviewForm.getCreatedDate(),Math.toIntExact(phcReviewForm.getUserId())); return true; } @@ -278,8 +294,18 @@ private Boolean saveVhndFormData(VHNDFormDTO vhndFormDTO, Integer userID) { vhndForm.setFormType("VHND"); vhndRepo.save(vhndForm); + if (vhndFormDTO.getVhndDate() != null + && !vhndFormDTO.getVhndDate().isEmpty()) { - checkVhndIncentive(vhndForm.getCreatedDate(),vhndForm.getUserId()); + Timestamp timestamp = Timestamp.valueOf( + LocalDate.parse( + vhndFormDTO.getVhndDate(), + DateTimeFormatter.ofPattern("dd-MM-yyyy") + ).atStartOfDay() + ); + + checkVhndIncentive(timestamp, vhndForm.getUserId()); + } return true;