From 0e01a33fdd94e86b6997608df9751c44f989934a Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Mon, 8 Dec 2025 17:07:20 +0530 Subject: [PATCH 001/118] feat: added the new crash log --- src/main/environment/common_ci.properties | 2 + src/main/environment/common_docker.properties | 2 + .../environment/common_example.properties | 2 + .../flw/controller/CrashLogController.java | 63 +++++++++ .../java/com/iemr/flw/domain/iemr/M_User.java | 86 ++++++------ .../flw/dto/crashlogs/CrashLogRequest.java | 10 ++ .../com/iemr/flw/service/CrashLogService.java | 9 ++ .../flw/service/impl/AshaProfileImpl.java | 15 +- .../flw/service/impl/CrashLogServiceImpl.java | 128 ++++++++++++++++++ .../flw/utils/JwtUserIdValidationFilter.java | 2 +- 10 files changed, 268 insertions(+), 51 deletions(-) create mode 100644 src/main/java/com/iemr/flw/controller/CrashLogController.java create mode 100644 src/main/java/com/iemr/flw/dto/crashlogs/CrashLogRequest.java create mode 100644 src/main/java/com/iemr/flw/service/CrashLogService.java create mode 100644 src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index ba6a855d..347e06a3 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -36,3 +36,5 @@ source-address=@env.SMS_CONSENT_SOURCE_ADDRESS@ sms-username=@env.SMS_USERNAME@ sms-password=@env.SMS_PASSWORD@ send-message-url=@env.SMS_MESSAGE_URL@ + +crash.logs.base.path=@env.CRASH_LOGS_PATH@ diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index cb3a613a..958a9a19 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -34,3 +34,5 @@ sms-username=${SMS_USERNAME} sms-password=${SMS_PASSWORD} send-message-url=${SMS_MESSAGE_URL} + +crash.logs.base.path=${CRASH_LOGS_PATH} diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index ae5adaa7..51873ab6 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -36,6 +36,8 @@ sms-username= sms-password= send-message-url= +crash.logs.base.path= + diff --git a/src/main/java/com/iemr/flw/controller/CrashLogController.java b/src/main/java/com/iemr/flw/controller/CrashLogController.java new file mode 100644 index 00000000..335d7dbb --- /dev/null +++ b/src/main/java/com/iemr/flw/controller/CrashLogController.java @@ -0,0 +1,63 @@ +package com.iemr.flw.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iemr.flw.dto.crashlogs.CrashLogRequest; +import com.iemr.flw.service.CrashLogService; +import com.iemr.flw.utils.JwtUtil; +import com.iemr.flw.utils.response.OutputResponse; + +@RestController +@RequestMapping(value = "/crash-logs", headers = "Authorization") +public class CrashLogController { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Autowired + private CrashLogService crashLogService; + + @Autowired + private JwtUtil jwtUtil; + + @Autowired + private ObjectMapper objectMapper; + + @PostMapping(value = "/upload", consumes = "multipart/form-data") + public String uploadCrashLog( + @RequestHeader(value = "JwtToken") String jwtToken, // Changed from Authorization + @RequestParam("file") MultipartFile file, + @RequestParam("metadata") String metadataJson) { + + OutputResponse response = new OutputResponse(); + + try { + // No need to remove "Bearer " prefix - JwtToken header contains raw JWT + Integer userId = jwtUtil.extractUserId(jwtToken); + + // Parse metadata JSON + CrashLogRequest request = objectMapper.readValue(metadataJson, CrashLogRequest.class); + + // Save crash log file + String filePath = crashLogService.saveCrashLog(request, userId, file); + + // Build success response + response.setResponse("Crash log saved successfully. File path: " + filePath); + logger.info("Crash log uploaded successfully for userId: " + userId); + + } catch (Exception e) { + logger.error("Error uploading crash log: " + e.getMessage(), e); + response.setError(e); + } + + return response.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/M_User.java b/src/main/java/com/iemr/flw/domain/iemr/M_User.java index 38687573..0187a613 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/M_User.java +++ b/src/main/java/com/iemr/flw/domain/iemr/M_User.java @@ -3,6 +3,7 @@ import java.sql.Timestamp; import java.time.LocalDate; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.Expose; import jakarta.persistence.Column; @@ -21,135 +22,136 @@ import java.time.LocalDate; @Entity -@Table(name = "m_User",schema = "db_iemr") +@Table(name = "m_User", schema = "db_iemr") @Data public class M_User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Expose - @Column(name="UserID") + @Column(name = "UserID") private Integer userID; @Expose - @Column(name="TitleID") + @Column(name = "TitleID") private Integer titleID; @Expose - @Column(name="FirstName") + @Column(name = "FirstName") private String firstName; @Expose - @Column(name="MiddleName") + @Column(name = "MiddleName") private String middleName; @Expose - @Column(name="LastName") + @Column(name = "LastName") private String lastName; @Expose - @Column(name="GenderID") + @Column(name = "GenderID") private Short genderID; @Expose - @Column(name="MaritalStatusID") + @Column(name = "MaritalStatusID") private Integer maritalStatusID; @Expose - @Column(name="DesignationID") + @Column(name = "DesignationID") private Integer designationID; @Expose - @Column(name="AadhaarNo") + @Column(name = "AadhaarNo") private String aadhaarNo; @Expose - @Column(name="PAN") + @JsonProperty("pan") + @Column(name = "PAN") private String pAN; @Expose - @Column(name="DOB") - private LocalDate dOB; + @JsonProperty("dob") + @Column(name = "DOB") + private Timestamp dOB; @Expose - @Column(name="DOJ") - private LocalDate dOJ; + @JsonProperty("doj") + @Column(name = "DOJ") + private Timestamp dOJ; @Expose - @Column(name="QualificationID") + @Column(name = "QualificationID") private Integer qualificationID; @Expose - @Column(name="HealthProfessionalID") + @Column(name = "HealthProfessionalID") private String healthProfessionalID; @Expose - @Column(name="UserName") + @Column(name = "UserName") private String userName; @Expose - @Column(name="Password") + @Column(name = "Password") private String password; @Expose - @Column(name="IsExternal") + @Column(name = "IsExternal") private Boolean isExternal; @Expose - @Column(name="AgentID") + @Column(name = "AgentID") private String agentID; @Expose - @Column(name="AgentPassword") + @Column(name = "AgentPassword") private String agentPassword; @Expose - @Column(name="EmailID") + @Column(name = "EmailID") private String emailID; @Expose - @Column(name="StatusID") + @Column(name = "StatusID") private Integer statusID; @Expose - @Column(name="EmergencyContactPerson") + @Column(name = "EmergencyContactPerson") private String emergencyContactPerson; @Expose - @Column(name="EmergencyContactNo") + @Column(name = "EmergencyContactNo") private String emergencyContactNo; @Expose - @Column(name="IsSupervisor") + @Column(name = "IsSupervisor") private Boolean isSupervisor; @Expose - @Column(name="Deleted",insertable = false, updatable = true) + @Column(name = "Deleted", insertable = false, updatable = true) private Boolean deleted; @Expose - @Column(name="CreatedBy") + @Column(name = "CreatedBy") private String createdBy; @Expose - @Column(name="EmployeeID") + @Column(name = "EmployeeID") private String employeeID; @Expose - @Column(name="CreatedDate",insertable = false, updatable = false) + @Column(name = "CreatedDate", insertable = false, updatable = false) private Timestamp createdDate; @Expose - @Column(name="ModifiedBy") + @Column(name = "ModifiedBy") private String modifiedBy; @Expose - @Column(name="LastModDate",insertable = false, updatable = false) + @Column(name = "LastModDate", insertable = false, updatable = false) private Timestamp lastModDate; @Expose - @Column(name="Remarks") + @Column(name = "Remarks") private String remarks; @Expose - @Column(name="ContactNo") + @Column(name = "ContactNo") private String contactNo; - @Expose - @Column(name="IsProviderAdmin") + @Column(name = "IsProviderAdmin") private Boolean isProviderAdmin; @Expose - @Column(name="ServiceProviderID") + @Column(name = "ServiceProviderID") private Integer serviceProviderID; - - @Expose @Column(name = "failed_attempt", insertable = false) private Integer failedAttempt; + public M_User() { // TODO Auto-generated constructor stub } public M_User(Integer userID, String userName) { // TODO Auto-generated constructor stub - this.userID=userID; - this.userName=userName; + this.userID = userID; + this.userName = userName; } } diff --git a/src/main/java/com/iemr/flw/dto/crashlogs/CrashLogRequest.java b/src/main/java/com/iemr/flw/dto/crashlogs/CrashLogRequest.java new file mode 100644 index 00000000..2e0bf107 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/crashlogs/CrashLogRequest.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.crashlogs; + +import lombok.Data; + +@Data +public class CrashLogRequest { + private String appVersion; + private String deviceId; + private String timestamp; +} diff --git a/src/main/java/com/iemr/flw/service/CrashLogService.java b/src/main/java/com/iemr/flw/service/CrashLogService.java new file mode 100644 index 00000000..f0ffe35e --- /dev/null +++ b/src/main/java/com/iemr/flw/service/CrashLogService.java @@ -0,0 +1,9 @@ +package com.iemr.flw.service; + +import com.iemr.flw.dto.crashlogs.CrashLogRequest; +import org.springframework.web.multipart.MultipartFile; +import com.iemr.flw.utils.exception.IEMRException; + +public interface CrashLogService { + String saveCrashLog(CrashLogRequest request, Integer userId, MultipartFile file) throws IEMRException; +} \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java index 9f884ced..29ca30da 100644 --- a/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java @@ -99,16 +99,15 @@ private AshaWorker getDetails(Integer userID) { M_User m_user = Objects.requireNonNull(employeeMasterInter.getUserDetails(userID), "User details not found for ID: " + userID); AshaWorker ashaWorker = new AshaWorker(); ashaWorker.setEmployeeId(m_user.getUserID()); - ashaWorker.setDob(m_user.getDOB()); - LocalDate doj = m_user.getDOJ(); - - if (doj == null) { - doj = LocalDate.now(); - } - + // Convert DOB (Timestamp) to LocalDate + java.sql.Timestamp dobTimestamp = m_user.getDOB(); + LocalDate dob = dobTimestamp != null ? dobTimestamp.toLocalDateTime().toLocalDate() : null; + ashaWorker.setDob(dob); + // Convert DOJ (Timestamp) to LocalDate + java.sql.Timestamp dojTimestamp = m_user.getDOJ(); + LocalDate doj = dojTimestamp != null ? dojTimestamp.toLocalDateTime().toLocalDate() : LocalDate.now(); ashaWorker.setDateOfJoining(doj); ashaWorker.setName(String.format("%s %s", Objects.toString(m_user.getFirstName(), ""), Objects.toString(m_user.getLastName(), "")).trim()); - ashaWorker.setMobileNumber(m_user.getContactNo()); ashaWorker.setAlternateMobileNumber(m_user.getEmergencyContactNo()); ashaWorker.setProviderServiceMapID(m_user.getServiceProviderID()); diff --git a/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java new file mode 100644 index 00000000..da2fbaa0 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java @@ -0,0 +1,128 @@ +package com.iemr.flw.service.impl; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Paths; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import com.iemr.flw.dto.crashlogs.CrashLogRequest; +import com.iemr.flw.service.CrashLogService; +import com.iemr.flw.utils.exception.IEMRException; +import org.springframework.beans.factory.annotation.Value; + +@Service +public class CrashLogServiceImpl implements CrashLogService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Value("${crash.logs.base.path}") + private String crashLogsBasePath; + + @Override + public String saveCrashLog(CrashLogRequest request, Integer userId, MultipartFile file) + throws IEMRException { + + try { + // 🛡️ Validate file + if (file.isEmpty()) { + throw new IEMRException("Uploaded file is empty"); + } + + String originalFilename = file.getOriginalFilename(); + if (originalFilename == null) { + throw new IEMRException("Invalid filename"); + } + + // Prevent path traversal + String safeOriginalName = Paths.get(originalFilename).getFileName().toString(); + + // Only allow .txt + if (!safeOriginalName.toLowerCase().endsWith(".txt")) { + throw new IEMRException("Only .txt files are allowed"); + } + + // Validate MIME + String contentType = file.getContentType(); + if (contentType == null || + (!contentType.equals("text/plain") && + !contentType.equals("application/octet-stream"))) { + throw new IEMRException("Invalid file type. Only plain text allowed."); + } + + // Block binary content + if (isBinaryFile(file.getBytes())) { + throw new IEMRException("Binary files are not allowed. Upload valid text logs only."); + } + + // 📁 Create date-based folder + LocalDate date = LocalDate.now(); + String dateFolder = date.format(DateTimeFormatter.ISO_LOCAL_DATE); + + File dateDir = new File(crashLogsBasePath, dateFolder); + if (!dateDir.exists() && !dateDir.mkdirs()) { + throw new IEMRException("Failed to create folder: " + dateDir.getAbsolutePath()); + } + + // Use timestamp as sent by frontend (NO conversion) + String rawTimestamp = request.getTimestamp(); // Already "yyyy-MM-dd HH:mm:ss" + + // Make timestamp filename-safe + String safeTimestamp = rawTimestamp + .replace(" ", "_") + .replace(":", "-"); + + // 📝 Final file name + String filename = String.format( + "%d_%s_%s_%s.txt", + userId, + sanitizeFilename(request.getAppVersion()), + sanitizeFilename(request.getDeviceId()), + sanitizeFilename(safeTimestamp)); + + File crashLogFile = new File(dateDir, filename); + + // 💾 Save file + try (FileOutputStream fos = new FileOutputStream(crashLogFile)) { + fos.write(file.getBytes()); + } + + String relativePath = dateFolder + "/" + filename; + logger.info("Crash log saved: " + relativePath); + + return relativePath; + + } catch (IOException e) { + logger.error("Error saving crash log", e); + throw new IEMRException("Error saving crash log: " + e.getMessage(), e); + } + } + + // Detect binary content + private boolean isBinaryFile(byte[] data) { + int len = Math.min(data.length, 2048); + for (int i = 0; i < len; i++) { + byte b = data[i]; + if (b < 0x09) + return true; + if (b > 0x0D && b < 0x20) + return true; + } + return false; + } + + // Sanitize metadata for filename safety + private String sanitizeFilename(String input) { + if (input == null) + return "unknown"; + return input.replaceAll("[^a-zA-Z0-9.-]", "_"); + } +} diff --git a/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java index 73fcc3df..fcefd712 100644 --- a/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/flw/utils/JwtUserIdValidationFilter.java @@ -76,7 +76,7 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo } // Skip login and public endpoints - if (true) { + if (shouldSkipPath(path, contextPath)) { filterChain.doFilter(servletRequest, servletResponse); return; } From 09ad4162cba43d35bc14f0251d04ae829f887054 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 9 Dec 2025 21:55:30 +0530 Subject: [PATCH 002/118] Update incentive for missing supporting documents --- .../flw/controller/IncentiveController.java | 45 +++++-- .../flw/controller/MaaMeetingController.java | 48 +++++++- .../domain/iemr/IncentiveActivityRecord.java | 6 + .../domain/iemr/IncentivePendingActivity.java | 39 ++++++ .../flw/dto/iemr/MaaMeetingRequestDTO.java | 1 + .../iemr/flw/dto/iemr/PendingActivityDTO.java | 14 +++ .../IncentivePendingActivityRepository.java | 14 +++ .../iemr/flw/service/IncentiveService.java | 3 + .../iemr/flw/service/MaaMeetingService.java | 111 ++++++++++++++++-- .../service/impl/IncentiveServiceImpl.java | 39 +++++- 10 files changed, 292 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java diff --git a/src/main/java/com/iemr/flw/controller/IncentiveController.java b/src/main/java/com/iemr/flw/controller/IncentiveController.java index 670d611b..c76d26ae 100644 --- a/src/main/java/com/iemr/flw/controller/IncentiveController.java +++ b/src/main/java/com/iemr/flw/controller/IncentiveController.java @@ -3,6 +3,7 @@ import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.IncentiveActivityDTO; import com.iemr.flw.dto.iemr.IncentiveRequestDTO; +import com.iemr.flw.dto.iemr.PendingActivityDTO; import com.iemr.flw.service.IncentiveService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.response.OutputResponse; @@ -29,8 +30,8 @@ public class IncentiveController { IncentiveService incentiveService; @Operation(summary = "save incentive master") - @RequestMapping(value = { "/masterData/saveAll" }, method = { RequestMethod.POST }) - public String saveIncentiveMasterData(@RequestBody List activityDTOS,@RequestHeader(value = "Authorization") String authorization, HttpServletRequest request) { + @RequestMapping(value = {"/masterData/saveAll"}, method = {RequestMethod.POST}) + public String saveIncentiveMasterData(@RequestBody List activityDTOS, @RequestHeader(value = "Authorization") String authorization, HttpServletRequest request) { OutputResponse response = new OutputResponse(); try { logger.info("Saving All incentives"); @@ -50,9 +51,9 @@ public String saveIncentiveMasterData(@RequestBody List ac } @Operation(summary = "get incentive master") - @RequestMapping(value = { "/masterData/getAll" }, method = { RequestMethod.POST }) + @RequestMapping(value = {"/masterData/getAll"}, method = {RequestMethod.POST}) public String saveIncentiveMasterData(@RequestBody IncentiveRequestDTO incentiveRequestDTO, - @RequestHeader(value = "Authorization") String Authorization) { + @RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); try { @@ -61,7 +62,7 @@ public String saveIncentiveMasterData(@RequestBody IncentiveRequestDTO incentive // add logic for different state or district if (incentiveRequestDTO != null) { String s = incentiveService.getIncentiveMaster(incentiveRequestDTO); - logger.info("All incentives"+s); + logger.info("All incentives" + s); if (s != null) response.setResponse(s); @@ -77,13 +78,10 @@ public String saveIncentiveMasterData(@RequestBody IncentiveRequestDTO incentive } - - - @Operation(summary = "get high risk assessment data of all beneficiaries registered with given user id") - @RequestMapping(value = { "/fetchUserData" }, method = { RequestMethod.POST }) + @RequestMapping(value = {"/fetchUserData"}, method = {RequestMethod.POST}) public String getAllIncentivesByUserId(@RequestBody GetBenRequestHandler requestDTO, - @RequestHeader(value = "Authorization") String Authorization) { + @RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); try { @@ -91,7 +89,30 @@ public String getAllIncentivesByUserId(@RequestBody GetBenRequestHandler request logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " + requestDTO); String s = incentiveService.getAllIncentivesByUserId(requestDTO); - logger.info("User Incentive:"+s); + logger.info("User Incentive:" + s); + if (s != null) + response.setResponse(s); + else + response.setError(5000, "No record found"); + } else + response.setError(5000, "Invalid/NULL request obj"); + } catch (Exception e) { + logger.error("Error in high risk assessment data : " + e); + response.setError(5000, "Error in high risk assessment data : " + e); + } + return response.toString(); + } + + @RequestMapping(value = {"/update"}, method = RequestMethod.POST) + public String updateIncentive(@RequestBody PendingActivityDTO requestDTO) { + OutputResponse response = new OutputResponse(); + try { + + if (requestDTO != null) { + logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " + + requestDTO); + String s = incentiveService.updateIncentive(requestDTO); + logger.info("User Incentive:" + s); if (s != null) response.setResponse(s); else @@ -103,6 +124,8 @@ public String getAllIncentivesByUserId(@RequestBody GetBenRequestHandler request response.setError(5000, "Error in high risk assessment data : " + e); } return response.toString(); + + } } diff --git a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java index d9bcdb1b..0c73d46e 100644 --- a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java +++ b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java @@ -49,8 +49,54 @@ public ResponseEntity saveMeeting( dto.setAshaId(Integer.parseInt(ashaId)); dto.setCreatedBY(createdBy); dto.setMeetingImages(meetingImages != null ? meetingImages.toArray(new MultipartFile[0]) : null); + if (dto != null) { + service.saveMeeting(dto); - service.saveMeeting(dto); + } + return ResponseEntity.ok("Saved Successfully"); + } catch (Exception e) { + return ResponseEntity.badRequest().body(e.getMessage()); + } + } + + @PostMapping(value = "/update", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity updateMeeting( + @RequestPart("meetingDate") String meetingDate, + @RequestPart("place") String place, + @RequestPart("participants") String participants, + @RequestPart("ashaId") String ashaId, + @RequestPart("createdBy") String createdBy, + @RequestPart(value = "meetingImages", required = false) List meetingImages) { + try { + MaaMeetingRequestDTO dto = new MaaMeetingRequestDTO(); + if (meetingDate != null) { + dto.setMeetingDate(LocalDate.parse(meetingDate)); + + } + if (place != null) { + dto.setPlace(place); + + } + if (participants != null) { + dto.setParticipants(Integer.parseInt(participants)); + + } + if (ashaId != null) { + dto.setAshaId(Integer.parseInt(ashaId)); + + } + if (createdBy != null) { + dto.setCreatedBY(createdBy); + + } + if (meetingImages != null) { + dto.setMeetingImages(meetingImages != null ? meetingImages.toArray(new MultipartFile[0]) : null); + + } + if (dto != null) { + service.updateMeeting(dto); + + } return ResponseEntity.ok("Saved Successfully"); } catch (Exception e) { return ResponseEntity.badRequest().body(e.getMessage()); diff --git a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java index 5b921bb4..f4adf8df 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java +++ b/src/main/java/com/iemr/flw/domain/iemr/IncentiveActivityRecord.java @@ -46,4 +46,10 @@ public class IncentiveActivityRecord { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "is_eligible") + private Boolean isEligible; + + @Column(name = "is_default_activity") + private Boolean isDefaultActivity; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java b/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java new file mode 100644 index 00000000..870a48f5 --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/IncentivePendingActivity.java @@ -0,0 +1,39 @@ +package com.iemr.flw.domain.iemr; + +import java.util.Date; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "incentive_pending_activity", schema = "db_iemr") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class IncentivePendingActivity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "activity_id", nullable = false) + private Long activityId; + + @Column(name = "record_id", nullable = false) + private Long recordId; + + @Column(name = "module_name", nullable = false, length = 100) + private String moduleName; + + @Column(name = "user_id", nullable = false) + private Integer userId; + + @Column(name = "created_date") + private Date createdDate; + + @Column(name = "updated_date") + private Date updatedDate; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java index c08c8d64..9d4c19b1 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java @@ -8,6 +8,7 @@ @Data public class MaaMeetingRequestDTO { + private Long id; private LocalDate meetingDate; private String place; private Integer participants; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java new file mode 100644 index 00000000..4d8dbd99 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java @@ -0,0 +1,14 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +@Data +public class PendingActivityDTO { + private Long id; + private Integer userId; + private List Images; + private String moduleName; +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java new file mode 100644 index 00000000..bb53cb5b --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java @@ -0,0 +1,14 @@ +package com.iemr.flw.repo.iemr; + +import java.util.Optional; +import com.iemr.flw.domain.iemr.IncentivePendingActivity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + + +@Repository +public interface IncentivePendingActivityRepository extends JpaRepository { + + Optional findByUserIdAndModuleNameActivityId(Integer userId, String moduleName,Long activityId); + +} diff --git a/src/main/java/com/iemr/flw/service/IncentiveService.java b/src/main/java/com/iemr/flw/service/IncentiveService.java index ab49a0cd..d6bb5550 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveService.java @@ -3,6 +3,7 @@ import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.IncentiveActivityDTO; import com.iemr.flw.dto.iemr.IncentiveRequestDTO; +import com.iemr.flw.dto.iemr.PendingActivityDTO; import java.util.List; @@ -13,4 +14,6 @@ public interface IncentiveService { String getIncentiveMaster(IncentiveRequestDTO incentiveRequestDTO); String getAllIncentivesByUserId(GetBenRequestHandler requestDTO); + + String updateIncentive(PendingActivityDTO pendingActivityDTO); } diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index d5f4c5bd..2c48df26 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -3,28 +3,20 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.iemr.flw.domain.iemr.IncentiveActivity; -import com.iemr.flw.domain.iemr.IncentiveActivityRecord; -import com.iemr.flw.domain.iemr.MaaMeeting; -import com.iemr.flw.domain.iemr.UwinSession; +import com.iemr.flw.domain.iemr.*; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.MaaMeetingRequestDTO; import com.iemr.flw.dto.iemr.MaaMeetingResponseDTO; import com.iemr.flw.masterEnum.GroupName; -import com.iemr.flw.repo.iemr.IncentiveRecordRepo; -import com.iemr.flw.repo.iemr.IncentivesRepo; -import com.iemr.flw.repo.iemr.MaaMeetingRepository; -import com.iemr.flw.repo.iemr.UserServiceRoleRepo; +import com.iemr.flw.repo.iemr.*; +import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Base64; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service @@ -40,6 +32,9 @@ public class MaaMeetingService { private final MaaMeetingRepository repository; private final ObjectMapper objectMapper; + @Autowired + private IncentivePendingActivityRepository incentivePendingActivityRepository; + public MaaMeetingService(MaaMeetingRepository repository, ObjectMapper objectMapper) { this.repository = repository; this.objectMapper = objectMapper; @@ -69,12 +64,61 @@ public MaaMeeting saveMeeting(MaaMeetingRequestDTO req) throws Exception { String imagesJson = objectMapper.writeValueAsString(base64Images); meeting.setMeetingImagesJson(imagesJson); } + checkAndAddIncentive(meeting); return repository.save(meeting); } + public MaaMeeting updateMeeting(MaaMeetingRequestDTO req) throws JsonProcessingException { + MaaMeeting existingMeeting = repository.findById(req.getId()) + .orElseThrow(() -> new EntityNotFoundException("Meeting not found: " + req.getId())); + + // ✅ NULL CHECK + if (req.getMeetingDate() != null) { + existingMeeting.setMeetingDate(req.getMeetingDate()); + } + if (req.getPlace() != null) { + existingMeeting.setPlace(req.getPlace()); + } + if (req.getParticipants() != null) { + existingMeeting.setParticipants(req.getParticipants()); + } + if (req.getAshaId() != null) { + existingMeeting.setAshaId(req.getAshaId()); + } + if (req.getCreatedBY() != null) { // ✅ Typo fixed: CreatedBY → CreatedBy + existingMeeting.setCreatedBy(req.getCreatedBY()); + } + + // Images - only if provided + if (req.getMeetingImages() != null && req.getMeetingImages().length > 0) { + List base64Images = Arrays.stream(req.getMeetingImages()) + .filter(file -> file != null && !file.isEmpty()) + .map(this::convertToBase64) + .collect(Collectors.toList()); + existingMeeting.setMeetingImagesJson(objectMapper.writeValueAsString(base64Images)); + } + + checkAndAddIncentive(existingMeeting); + if(existingMeeting.getMeetingImagesJson()!=null){ + checkAndUpdateIncentive(existingMeeting); + + } + return repository.save(existingMeeting); + } + + + private String convertToBase64(MultipartFile file) { + try { + return Base64.getEncoder().encodeToString(file.getBytes()); + } catch (IOException e) { + throw new RuntimeException("Failed to convert image to Base64: " + file.getOriginalFilename(), e); + } + } + + public List getAllMeetings(GetBenRequestHandler getBenRequestHandler) throws Exception { @@ -107,6 +151,29 @@ public List getAllMeetings(GetBenRequestHandler getBenReq return dto; }).collect(Collectors.toList()); } + private void updatePendingActivity(Integer userId,Long recordId,Long activityId,String moduleName){ + IncentivePendingActivity incentivePendingActivity = new IncentivePendingActivity(); + incentivePendingActivity.setActivityId(activityId); + incentivePendingActivity.setRecordId(recordId); + incentivePendingActivity.setUserId(userId); + incentivePendingActivity.setModuleName(moduleName); + if(incentivePendingActivity!=null){ + incentivePendingActivityRepository.save(incentivePendingActivity); + } + + } + private void checkAndUpdateIncentive(MaaMeeting meeting) { + IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); + IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); + if(incentiveActivityAM!=null){ + updateIncentive(incentiveActivityAM,meeting); + } + if(incentiveActivityCH!=null){ + updateIncentive(incentiveActivityCH,meeting); + + } + + } private void checkAndAddIncentive(MaaMeeting meeting) { IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); @@ -135,10 +202,30 @@ record = new IncentiveActivityRecord(); record.setUpdatedBy(meeting.getCreatedBy()); record.setBenId(0L); record.setAshaId(meeting.getAshaId()); + if(meeting.getMeetingImagesJson()!=null){ + record.setIsEligible(true); + }else { + record.setIsEligible(false); + updatePendingActivity(meeting.getAshaId(),meeting.getId(),record.getId(),"MAA_MEETING"); + + } record.setAmount(Long.valueOf(incentiveActivity.getRate())); recordRepo.save(record); } } + private void updateIncentive(IncentiveActivity incentiveActivity,MaaMeeting meeting){ + IncentiveActivityRecord record = recordRepo + .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L,meeting.getAshaId()); + + if (record!= null) { + record = new IncentiveActivityRecord(); + record.setIsEligible(true); + recordRepo.save(record); + } + + } + + } 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 6a42b76d..9d5ede87 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -6,22 +6,22 @@ import com.iemr.flw.domain.iemr.IncentiveActivity; import com.iemr.flw.domain.iemr.IncentiveActivityLangMapping; import com.iemr.flw.domain.iemr.IncentiveActivityRecord; +import com.iemr.flw.domain.iemr.IncentivePendingActivity; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.identity.BeneficiaryRepo; -import com.iemr.flw.repo.iemr.IncentiveActivityLangMappingRepo; -import com.iemr.flw.repo.iemr.IncentiveRecordRepo; -import com.iemr.flw.repo.iemr.IncentivesRepo; -import com.iemr.flw.repo.iemr.UserServiceRoleRepo; +import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.IncentiveService; +import com.iemr.flw.service.MaaMeetingService; import com.iemr.flw.utils.JwtUtil; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import java.math.BigInteger; import java.sql.Timestamp; @@ -50,9 +50,15 @@ public class IncentiveServiceImpl implements IncentiveService { @Autowired private JwtUtil jwtUtil; + @Autowired + private IncentivePendingActivityRepository incentivePendingActivityRepository; + @Autowired private UserServiceRoleRepo userRepo; + @Autowired + private MaaMeetingService maaMeetingService; + @Override public String saveIncentivesMaster(List activityDTOS) { try { @@ -187,6 +193,31 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); return gson.toJson(dtos); } + + @Override + public String updateIncentive(PendingActivityDTO pendingActivityDTO) { + Optional incentivePendingActivity = incentivePendingActivityRepository.findByUserIdAndModuleNameActivityId(pendingActivityDTO.getUserId(),pendingActivityDTO.getModuleName(),pendingActivityDTO.getId()); + + if(incentivePendingActivity.isPresent()){ + IncentivePendingActivity existingIncentivePendingActivity = incentivePendingActivity.get(); + if(existingIncentivePendingActivity.getModuleName().equals("MAA_MEETING")){ + if(pendingActivityDTO.getImages()!=null){ + try { + MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); + maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); + maaMeetingService.updateMeeting(maaMeetingRequestDTO); + + }catch (Exception e){ + return e.getMessage(); + } + + } + } + } + return null; + + } + private void checkMonthlyAshaIncentive(Integer ashaId){ IncentiveActivity MOBILEBILLREIMB_ACTIVITY = incentivesRepo.findIncentiveMasterByNameAndGroup("MOBILE_BILL_REIMB", GroupName.OTHER_INCENTIVES.getDisplayName()); IncentiveActivity ADDITIONAL_ASHA_INCENTIVE = incentivesRepo.findIncentiveMasterByNameAndGroup("ADDITIONAL_ASHA_INCENTIVE", GroupName.ADDITIONAL_INCENTIVE.getDisplayName()); From f383508c6dfdf6f5b2f0351e10615f60aac4c420 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 15 Dec 2025 17:39:44 +0530 Subject: [PATCH 003/118] fix jpa query issue --- .../flw/repo/iemr/IncentivePendingActivityRepository.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java index bb53cb5b..9bac8d21 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentivePendingActivityRepository.java @@ -8,7 +8,11 @@ @Repository public interface IncentivePendingActivityRepository extends JpaRepository { - - Optional findByUserIdAndModuleNameActivityId(Integer userId, String moduleName,Long activityId); + Optional + findByUserIdAndModuleNameAndActivityId( + Integer userId, + String moduleName, + Long activityId + ); } From 1306881c8c9aa12de25bb246feb9a0d9c5698723 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 15 Dec 2025 18:39:38 +0530 Subject: [PATCH 004/118] fix jpa query issue --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 9d5ede87..5580e896 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -196,7 +196,7 @@ public String getAllIncentivesByUserId(GetBenRequestHandler request) { @Override public String updateIncentive(PendingActivityDTO pendingActivityDTO) { - Optional incentivePendingActivity = incentivePendingActivityRepository.findByUserIdAndModuleNameActivityId(pendingActivityDTO.getUserId(),pendingActivityDTO.getModuleName(),pendingActivityDTO.getId()); + Optional incentivePendingActivity = incentivePendingActivityRepository.findByUserIdAndModuleNameAndActivityId(pendingActivityDTO.getUserId(),pendingActivityDTO.getModuleName(),pendingActivityDTO.getId()); if(incentivePendingActivity.isPresent()){ IncentivePendingActivity existingIncentivePendingActivity = incentivePendingActivity.get(); From 17d872d198579554f16997c8b7812350711080d6 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:44:13 +0530 Subject: [PATCH 005/118] Update common_ci.properties --- src/main/environment/common_ci.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 6dd8fd04..c24982b7 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -36,4 +36,4 @@ sms-username=@env.SMS_USERNAME@ sms-password=@env.SMS_PASSWORD@ send-message-url=@env.SMS_MESSAGE_URL@ -crash.logs.base.path=@env.CRASH_LOGS_PATH@ +//crash.logs.base.path=@env.CRASH_LOGS_PATH@ From 603e2e3ea1d2b88838bb81dfe7c476edebe38dc8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:44:26 +0530 Subject: [PATCH 006/118] Reformat common_docker.properties for consistency --- src/main/environment/common_docker.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index 2351a47e..95012c97 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -35,4 +35,5 @@ sms-password=${SMS_PASSWORD} send-message-url=${SMS_MESSAGE_URL} -crash.logs.base.path=${CRASH_LOGS_PATH} +//crash.logs.base.path=${CRASH_LOGS_PATH} + From 2cdff4a64006e8c24f6e1046b473a28277346e7b Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:44:55 +0530 Subject: [PATCH 007/118] Reformat common_docker.properties for consistency --- src/main/environment/common_docker.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index 95012c97..b6650a5d 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -35,5 +35,6 @@ sms-password=${SMS_PASSWORD} send-message-url=${SMS_MESSAGE_URL} -//crash.logs.base.path=${CRASH_LOGS_PATH} +#crash.logs.base.path=${CRASH_LOGS_PATH} + From aa49f97cd5890a57cee57708ea1260e1beda0698 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:45:09 +0530 Subject: [PATCH 008/118] Update common_ci.properties --- src/main/environment/common_ci.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index c24982b7..b5aa3f02 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -36,4 +36,4 @@ sms-username=@env.SMS_USERNAME@ sms-password=@env.SMS_PASSWORD@ send-message-url=@env.SMS_MESSAGE_URL@ -//crash.logs.base.path=@env.CRASH_LOGS_PATH@ +#crash.logs.base.path=@env.CRASH_LOGS_PATH@ From 2b74a485f5e7b523a1cc69e79729b793ad7cc1f2 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:47:52 +0530 Subject: [PATCH 009/118] Update CrashLogServiceImpl.java --- .../java/com/iemr/flw/service/impl/CrashLogServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java index da2fbaa0..4c85ae66 100644 --- a/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CrashLogServiceImpl.java @@ -24,7 +24,7 @@ public class CrashLogServiceImpl implements CrashLogService { private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - @Value("${crash.logs.base.path}") + // @Value("${crash.logs.base.path}") private String crashLogsBasePath; @Override From edd3046f386b52b00e1c15bd3e36a1641b852599 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 22 Dec 2025 16:34:51 +0530 Subject: [PATCH 010/118] add new column in anc visit (Amm-2039) --- src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java | 6 ++++++ src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java b/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java index c5240d1c..4128f082 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java @@ -167,6 +167,12 @@ public class ANCVisit { @Column(name = "date_of_sterilisation") private Timestamp dateSterilisation; + @Column (name = "place_of_anc") + private String placeOfAnc; + + @Column(name = "place_of_ancId") + private Integer placeOfAncId; + 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 f028655f..b4cf0033 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java @@ -63,6 +63,8 @@ public class ANCVisitDTO { private Timestamp visitDate; private Timestamp dateSterilisation; private Boolean isYesOrNo; + private String placeOfAnc; + private Integer placeOfAncId; } From 1d65ac9d2e64ad4270b2d07fefe43151a800fef8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 23 Dec 2025 14:03:57 +0530 Subject: [PATCH 011/118] Household Soft-delete Option functionality --- .../com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java index 9ab4f822..1a53e8d1 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java @@ -325,4 +325,8 @@ public class RMNCHHouseHoldDetails { @Column(name = "mohallaName") private String mohallaName; + @Expose + @Column(name = "isDeactivate") + private String isDeactivate; + } From 128578bf0ed5019e957db40f15bcfa792a8191e1 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 23 Dec 2025 17:58:32 +0530 Subject: [PATCH 012/118] change data type of isDeactivate --- .../com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java index 1a53e8d1..3a3ccec8 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java @@ -327,6 +327,6 @@ public class RMNCHHouseHoldDetails { @Expose @Column(name = "isDeactivate") - private String isDeactivate; + private Boolean isDeactivate; } From da327ecb13123d169a125f4c6912c9658f4812c8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Tue, 23 Dec 2025 18:02:17 +0530 Subject: [PATCH 013/118] Change isDeactivate type from String to Boolean --- .../com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java index 1a53e8d1..3a3ccec8 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHHouseHoldDetails.java @@ -327,6 +327,6 @@ public class RMNCHHouseHoldDetails { @Expose @Column(name = "isDeactivate") - private String isDeactivate; + private Boolean isDeactivate; } From 4ee69e32057912e8c24efcdf30c42ce2cf771861 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 24 Dec 2025 10:51:42 +0530 Subject: [PATCH 014/118] feature of Anc Counselling question --- .../controller/MaternalHealthController.java | 50 ++++++- .../flw/domain/iemr/AncCounsellingCare.java | 128 ++++++++++++++++++ .../flw/dto/iemr/AncCounsellingCareDTO.java | 16 +++ .../dto/iemr/AncCounsellingCareListDTO.java | 79 +++++++++++ .../flw/repo/iemr/AncCounsellingCareRepo.java | 10 ++ .../flw/service/MaternalHealthService.java | 2 + .../impl/MaternalHealthServiceImpl.java | 69 ++++++++++ 7 files changed, 353 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index e23cc8ed..3c601bb1 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -15,7 +15,6 @@ import io.swagger.v3.oas.annotations.Operation; import jakarta.servlet.http.HttpServletRequest; -import org.checkerframework.checker.units.qual.A; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -141,6 +140,55 @@ public String getANCVisitDetails(@RequestBody GetBenRequestHandler requestDTO, return response.toString(); } + @Operation(summary = "save anc visit question") + @RequestMapping(value = { "/ancVisit/question/saveAll" }, method = { RequestMethod.POST }) + public String saveANCVisitQuestion(@RequestBody List ancVisitQuestionsDTOS, + @RequestHeader(value = "Authorization") String Authorization) { + OutputResponse response = new OutputResponse(); + try { + if (ancVisitQuestionsDTOS.size() != 0) { + + logger.info("Saving ANC visits with timestamp : " + new Timestamp(System.currentTimeMillis())); + String s = maternalHealthService.saveANCVisitQuestions(ancVisitQuestionsDTOS,Authorization); + if (s != null) + response.setResponse(s); + else + response.setError(500, "Saving anc data to db failed"); + } else + response.setError(500, "Invalid/NULL request obj"); + } catch (Exception e) { + logger.error("Error in save ANC visit details : ",e); + + response.setError(500, "Error in save ANC visit details : " + e); + } + return response.toString(); + } + + @Operation(summary = "get anc visit questions") + @RequestMapping(value = { "/ancVisit/questions/getAll" }, method = { RequestMethod.POST }) + public String getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, + @RequestHeader(value = "Authorization") String Authorization) { + OutputResponse response = new OutputResponse(); + try { + if (requestDTO != null) { + logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " + + requestDTO); + List result = maternalHealthService.getANCVisits(requestDTO); + Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); + String s = gson.toJson(result); + if (s != null) + response.setResponse(s); + else + response.setError(5000, "No record found"); + } else + response.setError(5000, "Invalid/NULL request obj"); + } catch (Exception e) { + logger.error("Error in Anc visit get data : " + e); + response.setError(5000, "Error in Anc visit get data : " + e); + } + return response.toString(); + } + @Operation(summary = "save Delivery Outcome details") @RequestMapping(value = { "/deliveryOutcome/saveAll" }, method = { RequestMethod.POST }) public String saveDeliveryOutcome(@RequestBody List deliveryOutcomeDTOS, diff --git a/src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java b/src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java new file mode 100644 index 00000000..46737f12 --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/AncCounsellingCare.java @@ -0,0 +1,128 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Entity +@Table(name = "anc_counselling_care", schema = "db_iemr") +@Data +public class AncCounsellingCare { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "beneficiary_id", nullable = false) + private Long beneficiaryId; + + @Column(name = "visit_date") + private LocalDate visitDate; + + @Column(name = "home_visit_date", nullable = false) + private LocalDate homeVisitDate; + + @Column(name = "anc_visit_id", nullable = false) + private Long ancVisitId; + + @Column(name = "user_id") + private Integer userId; + + @Column(name = "created_by") + private String createdBy; + + @Column(name = "updated_by") + private String updatedBy; + + @Column(name = "created_at", updatable = false) + private LocalDateTime createdAt; + + @Column(name = "updated_at") + private LocalDateTime updatedAt; + + /* ---------- BOOLEAN FLAGS ---------- */ + + @Column(name = "select_all") + private Boolean selectAll = false; + + @Column(name = "swelling") + private Boolean swelling = false; + + @Column(name = "high_bp") + private Boolean highBp = false; + + @Column(name = "convulsions") + private Boolean convulsions = false; + + @Column(name = "anemia") + private Boolean anemia = false; + + @Column(name = "reduced_fetal_movement") + private Boolean reducedFetalMovement = false; + + @Column(name = "age_risk") + private Boolean ageRisk = false; + + @Column(name = "child_gap") + private Boolean childGap = false; + + @Column(name = "short_height") + private Boolean shortHeight = false; + + @Column(name = "pre_preg_weight") + private Boolean prePregWeight = false; + + @Column(name = "bleeding") + private Boolean bleeding = false; + + @Column(name = "miscarriage_history") + private Boolean miscarriageHistory = false; + + @Column(name = "four_plus_delivery") + private Boolean fourPlusDelivery = false; + + @Column(name = "first_delivery") + private Boolean firstDelivery = false; + + @Column(name = "twin_pregnancy") + private Boolean twinPregnancy = false; + + @Column(name = "c_section_history") + private Boolean cSectionHistory = false; + + @Column(name = "pre_existing_disease") + private Boolean preExistingDisease = false; + + @Column(name = "fever_malaria") + private Boolean feverMalaria = false; + + @Column(name = "jaundice") + private Boolean jaundice = false; + + @Column(name = "sickle_cell") + private Boolean sickleCell = false; + + @Column(name = "prolonged_labor") + private Boolean prolongedLabor = false; + + @Column(name = "malpresentation") + private Boolean malpresentation = false; + + /* ---------- Lifecycle Hooks ---------- */ + + @PrePersist + protected void onCreate() { + this.createdAt = LocalDateTime.now(); + this.updatedAt = LocalDateTime.now(); + } + + @PreUpdate + protected void onUpdate() { + this.updatedAt = LocalDateTime.now(); + } + + /* ---------- Getters & Setters ---------- */ + // Lombok use kar raha ho toh @Getter @Setter laga sakta hai +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java new file mode 100644 index 00000000..04693322 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java @@ -0,0 +1,16 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class AncCounsellingCareDTO { + private String formId; + private Long ancVisitId; + private Long beneficiaryId; + private String visitDate; + private AncCounsellingCareListDTO fields; + +} + + + diff --git a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java new file mode 100644 index 00000000..f73443d7 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java @@ -0,0 +1,79 @@ +package com.iemr.flw.dto.iemr; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +@Data +public class AncCounsellingCareListDTO { + + @SerializedName("home_visit_date") + private String homeVisitDate; + + @SerializedName("select_all") + private String selectAll; + + @SerializedName("swelling") + private String swelling; + + @SerializedName("high_bp") + private String highBp; + + @SerializedName("convulsions") + private String convulsions; + + @SerializedName("anemia") + private String anemia; + + @SerializedName("reduced_fetal_movement") + private String reducedFetalMovement; + + @SerializedName("age_risk") + private String ageRisk; + + @SerializedName("child_gap") + private String childGap; + + @SerializedName("short_height") + private String shortHeight; + + @SerializedName("pre_preg_weight") + private String prePregWeight; + + @SerializedName("bleeding") + private String bleeding; + + @SerializedName("miscarriage_history") + private String miscarriageHistory; + + @SerializedName("four_plus_delivery") + private String fourPlusDelivery; + + @SerializedName("first_delivery") + private String firstDelivery; + + @SerializedName("twin_pregnancy") + private String twinPregnancy; + + @SerializedName("c_section_history") + private String cSectionHistory; + + @SerializedName("pre_existing_disease") + private String preExistingDisease; + + @SerializedName("fever_malaria") + private String feverMalaria; + + @SerializedName("jaundice") + private String jaundice; + + @SerializedName("sickle_cell") + private String sickleCell; + + @SerializedName("prolonged_labor") + private String prolongedLabor; + + @SerializedName("malpresentation") + private String malpresentation; + + +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java b/src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java new file mode 100644 index 00000000..6d9349b1 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java @@ -0,0 +1,10 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.AncCare; +import com.iemr.flw.domain.iemr.AncCounsellingCare; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AncCounsellingCareRepo extends JpaRepository { +} diff --git a/src/main/java/com/iemr/flw/service/MaternalHealthService.java b/src/main/java/com/iemr/flw/service/MaternalHealthService.java index c4af2768..e5081303 100644 --- a/src/main/java/com/iemr/flw/service/MaternalHealthService.java +++ b/src/main/java/com/iemr/flw/service/MaternalHealthService.java @@ -2,6 +2,7 @@ import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; +import com.iemr.flw.utils.exception.IEMRException; import org.springframework.stereotype.Component; import java.util.List; @@ -25,4 +26,5 @@ public interface MaternalHealthService { String savePNCVisit(List pncVisitDTOs); + String saveANCVisitQuestions(List ancVisitQuestionsDTOS, String authorization) throws IEMRException; } diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 53ba1d28..9ba33c02 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -8,6 +8,8 @@ import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.MaternalHealthService; +import com.iemr.flw.utils.JwtUtil; +import com.iemr.flw.utils.exception.IEMRException; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +19,7 @@ import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -58,6 +61,9 @@ public class MaternalHealthServiceImpl implements MaternalHealthService { @Autowired private IncentiveRecordRepo recordRepo; + @Autowired + private JwtUtil jwtUtil; + ObjectMapper mapper = new ObjectMapper(); @@ -67,6 +73,9 @@ public class MaternalHealthServiceImpl implements MaternalHealthService { @Autowired private SMSServiceImpl smsServiceImpl; + @Autowired + private AncCounsellingCareRepo ancCounsellingCareRepo; + public static final List PNC_PERIODS = Arrays.asList("1st Day", "3rd Day", "7th Day", "14th Day", "21st Day", "28th Day", "42nd Day"); @@ -357,6 +366,66 @@ public String savePNCVisit(List pncVisitDTOs) { return null; } + @Override + public String saveANCVisitQuestions(List dtos, String authorization) throws IEMRException { + + List entities = new ArrayList<>(); + + for (AncCounsellingCareDTO dto : dtos) { + + AncCounsellingCare entity = new AncCounsellingCare(); + + entity.setBeneficiaryId(dto.getBeneficiaryId()); + entity.setAncVisitId(dto.getAncVisitId()); + + entity.setHomeVisitDate( + LocalDate.parse(dto.getVisitDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) + ); + AncCounsellingCareListDTO fields = dto.getFields(); + + entity.setHomeVisitDate( + LocalDate.parse(fields.getHomeVisitDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) + ); + + entity.setSelectAll(yesNoToBoolean(fields.getSelectAll())); + + entity.setSwelling(yesNoToBoolean(fields.getSwelling())); + entity.setHighBp(yesNoToBoolean(fields.getHighBp())); + entity.setConvulsions(yesNoToBoolean(fields.getConvulsions())); + entity.setAnemia(yesNoToBoolean(fields.getAnemia())); + entity.setReducedFetalMovement(yesNoToBoolean(fields.getReducedFetalMovement())); + entity.setAgeRisk(yesNoToBoolean(fields.getAgeRisk())); + entity.setChildGap(yesNoToBoolean(fields.getChildGap())); + entity.setUserId(jwtUtil.extractUserId(authorization)); + entity.setCreatedBy(jwtUtil.extractUsername(authorization)); + entity.setUpdatedBy(jwtUtil.extractUsername(authorization)); + entity.setShortHeight(yesNoToBoolean(fields.getShortHeight())); + entity.setPrePregWeight(yesNoToBoolean(fields.getPrePregWeight())); + entity.setBleeding(yesNoToBoolean(fields.getBleeding())); + entity.setMiscarriageHistory(yesNoToBoolean(fields.getMiscarriageHistory())); + entity.setFourPlusDelivery(yesNoToBoolean(fields.getFourPlusDelivery())); + entity.setFirstDelivery(yesNoToBoolean(fields.getFirstDelivery())); + entity.setTwinPregnancy(yesNoToBoolean(fields.getTwinPregnancy())); + entity.setCSectionHistory(yesNoToBoolean(fields.getCSectionHistory())); + entity.setPreExistingDisease(yesNoToBoolean(fields.getPreExistingDisease())); + entity.setFeverMalaria(yesNoToBoolean(fields.getFeverMalaria())); + entity.setJaundice(yesNoToBoolean(fields.getJaundice())); + entity.setSickleCell(yesNoToBoolean(fields.getSickleCell())); + entity.setProlongedLabor(yesNoToBoolean(fields.getProlongedLabor())); + entity.setMalpresentation(yesNoToBoolean(fields.getMalpresentation())); + + entities.add(entity); + } + + ancCounsellingCareRepo.saveAll(entities); + + return "ANC Counselling & Care data saved successfully"; + } + private Boolean yesNoToBoolean(String value) { + return "Yes".equalsIgnoreCase(value); + } + + private void checkAndAddAntaraIncentive(List recordList, PNCVisit ect) { Integer userId = userRepo.getUserIdByName(ect.getCreatedBy()); logger.info("ContraceptionMethod:" + ect.getContraceptionMethod()); From 8a5174dbebf1580429b0e2158a54815f3e2b1be7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 24 Dec 2025 11:48:36 +0530 Subject: [PATCH 015/118] feature of Anc Counselling getAll api --- .../controller/MaternalHealthController.java | 6 +- .../flw/repo/iemr/AncCounsellingCareRepo.java | 3 + .../flw/service/MaternalHealthService.java | 2 + .../impl/MaternalHealthServiceImpl.java | 57 +++++++++++++++++++ 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index 3c601bb1..f0859890 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -141,7 +141,7 @@ public String getANCVisitDetails(@RequestBody GetBenRequestHandler requestDTO, } @Operation(summary = "save anc visit question") - @RequestMapping(value = { "/ancVisit/question/saveAll" }, method = { RequestMethod.POST }) + @RequestMapping(value = { "/ancVisit/counselling/saveAll" }, method = { RequestMethod.POST }) public String saveANCVisitQuestion(@RequestBody List ancVisitQuestionsDTOS, @RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); @@ -165,7 +165,7 @@ public String saveANCVisitQuestion(@RequestBody List ancV } @Operation(summary = "get anc visit questions") - @RequestMapping(value = { "/ancVisit/questions/getAll" }, method = { RequestMethod.POST }) + @RequestMapping(value = { "/ancVisit/counselling/getAll" }, method = { RequestMethod.POST }) public String getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, @RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); @@ -173,7 +173,7 @@ public String getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, if (requestDTO != null) { logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " + requestDTO); - List result = maternalHealthService.getANCVisits(requestDTO); + List result = maternalHealthService.getANCCounselling(requestDTO); Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); String s = gson.toJson(result); if (s != null) diff --git a/src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java b/src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java index 6d9349b1..714dae59 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/AncCounsellingCareRepo.java @@ -5,6 +5,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface AncCounsellingCareRepo extends JpaRepository { + List findAllByUserId(Integer userId); } diff --git a/src/main/java/com/iemr/flw/service/MaternalHealthService.java b/src/main/java/com/iemr/flw/service/MaternalHealthService.java index e5081303..dae0e4eb 100644 --- a/src/main/java/com/iemr/flw/service/MaternalHealthService.java +++ b/src/main/java/com/iemr/flw/service/MaternalHealthService.java @@ -27,4 +27,6 @@ public interface MaternalHealthService { String savePNCVisit(List pncVisitDTOs); String saveANCVisitQuestions(List ancVisitQuestionsDTOS, String authorization) throws IEMRException; + + List getANCCounselling(GetBenRequestHandler requestDTO); } diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 9ba33c02..b9375b6b 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -421,6 +421,63 @@ public String saveANCVisitQuestions(List dtos, String aut return "ANC Counselling & Care data saved successfully"; } + + @Override + public List getANCCounselling(GetBenRequestHandler requestDTO) { + + List entities = + ancCounsellingCareRepo.findAllByUserId(requestDTO.getUserId()); + + List response = new ArrayList<>(); + + for (AncCounsellingCare entity : entities) { + + AncCounsellingCareListDTO fields = new AncCounsellingCareListDTO(); + + fields.setHomeVisitDate(entity.getHomeVisitDate().toString()); + fields.setSelectAll(booleanToYesNo(entity.getSelectAll())); + fields.setSwelling(booleanToYesNo(entity.getSwelling())); + fields.setHighBp(booleanToYesNo(entity.getHighBp())); + fields.setConvulsions(booleanToYesNo(entity.getConvulsions())); + fields.setAnemia(booleanToYesNo(entity.getAnemia())); + fields.setReducedFetalMovement(booleanToYesNo(entity.getReducedFetalMovement())); + fields.setAgeRisk(booleanToYesNo(entity.getAgeRisk())); + fields.setChildGap(booleanToYesNo(entity.getChildGap())); + + fields.setShortHeight(booleanToYesNo(entity.getShortHeight())); + fields.setPrePregWeight(booleanToYesNo(entity.getPrePregWeight())); + fields.setBleeding(booleanToYesNo(entity.getBleeding())); + fields.setMiscarriageHistory(booleanToYesNo(entity.getMiscarriageHistory())); + fields.setFourPlusDelivery(booleanToYesNo(entity.getFourPlusDelivery())); + fields.setFirstDelivery(booleanToYesNo(entity.getFirstDelivery())); + fields.setTwinPregnancy(booleanToYesNo(entity.getTwinPregnancy())); + fields.setCSectionHistory(booleanToYesNo(entity.getCSectionHistory())); + fields.setPreExistingDisease(booleanToYesNo(entity.getPreExistingDisease())); + fields.setFeverMalaria(booleanToYesNo(entity.getFeverMalaria())); + fields.setJaundice(booleanToYesNo(entity.getJaundice())); + fields.setSickleCell(booleanToYesNo(entity.getSickleCell())); + fields.setProlongedLabor(booleanToYesNo(entity.getProlongedLabor())); + fields.setMalpresentation(booleanToYesNo(entity.getMalpresentation())); + + AncCounsellingCareDTO dto = new AncCounsellingCareDTO(); + dto.setFormId("anc_form_001"); + dto.setAncVisitId(entity.getAncVisitId()); + dto.setBeneficiaryId(entity.getBeneficiaryId()); + dto.setVisitDate(entity.getVisitDate() != null ? entity.getVisitDate().toString() : null); + dto.setFields(fields); + + response.add(dto); + } + + return response; + } + + private String booleanToYesNo(Boolean value) { + return Boolean.TRUE.equals(value) ? "Yes" : "No"; + } + + + private Boolean yesNoToBoolean(String value) { return "Yes".equalsIgnoreCase(value); } From 8aea9eaf471f23398f37d081804f94aa2a2732ac Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 24 Dec 2025 11:51:34 +0530 Subject: [PATCH 016/118] fix error code --- .../com/iemr/flw/controller/MaternalHealthController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index f0859890..c87595fb 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -179,12 +179,12 @@ public String getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, if (s != null) response.setResponse(s); else - response.setError(5000, "No record found"); + response.setError(500, "No record found"); } else - response.setError(5000, "Invalid/NULL request obj"); + response.setError(500, "Invalid/NULL request obj"); } catch (Exception e) { logger.error("Error in Anc visit get data : " + e); - response.setError(5000, "Error in Anc visit get data : " + e); + response.setError(500, "Error in Anc visit get data : " + e); } return response.toString(); } From c220538b6bbdd042c6850bb3d727bb5483f3d5a8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 29 Dec 2025 14:04:44 +0530 Subject: [PATCH 017/118] add soft delete key --- .../com/iemr/flw/service/impl/BeneficiaryServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 510d4b53..759edfb4 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -405,6 +405,13 @@ private String getMappingsForAddressIDs(List addressLi resultMap.put("isMarried", benDetailsRMNCH_OBJ.getIsMarried()); resultMap.put("doYouHavechildren", benDetailsRMNCH_OBJ.getDoYouHavechildren()); resultMap.put("noofAlivechildren ",benDetailsRMNCH_OBJ.getNoofAlivechildren()); + if(houseHoldRepo.getByHouseHoldID(benDetailsRMNCH_OBJ.getHouseoldId())!=null){ + resultMap.put("isDeactivate",true); + + }else { + resultMap.put("isDeactivate",false); + + } From af518c863fe1a0fbc74793f103391962598cf33b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 30 Dec 2025 16:24:24 +0530 Subject: [PATCH 018/118] remove anc visit id --- src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java | 1 - .../com/iemr/flw/service/impl/MaternalHealthServiceImpl.java | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) 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 04693322..76aff81d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareDTO.java @@ -5,7 +5,6 @@ @Data public class AncCounsellingCareDTO { private String formId; - private Long ancVisitId; private Long beneficiaryId; private String visitDate; private AncCounsellingCareListDTO fields; diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index b9375b6b..87e3d446 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -376,7 +376,7 @@ public String saveANCVisitQuestions(List dtos, String aut AncCounsellingCare entity = new AncCounsellingCare(); entity.setBeneficiaryId(dto.getBeneficiaryId()); - entity.setAncVisitId(dto.getAncVisitId()); + entity.setAncVisitId(0L); entity.setHomeVisitDate( LocalDate.parse(dto.getVisitDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) @@ -461,7 +461,6 @@ public List getANCCounselling(GetBenRequestHandler reques AncCounsellingCareDTO dto = new AncCounsellingCareDTO(); dto.setFormId("anc_form_001"); - dto.setAncVisitId(entity.getAncVisitId()); dto.setBeneficiaryId(entity.getBeneficiaryId()); dto.setVisitDate(entity.getVisitDate() != null ? entity.getVisitDate().toString() : null); dto.setFields(fields); From 86665e632c5639fa089ffe0b8e9b54207190f778 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 30 Dec 2025 16:50:31 +0530 Subject: [PATCH 019/118] add jwt token in header --- .../java/com/iemr/flw/controller/MaternalHealthController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index c87595fb..114201fb 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -143,7 +143,7 @@ public String getANCVisitDetails(@RequestBody GetBenRequestHandler requestDTO, @Operation(summary = "save anc visit question") @RequestMapping(value = { "/ancVisit/counselling/saveAll" }, method = { RequestMethod.POST }) public String saveANCVisitQuestion(@RequestBody List ancVisitQuestionsDTOS, - @RequestHeader(value = "Authorization") String Authorization) { + @RequestHeader(value = "JwtToken") String Authorization) { OutputResponse response = new OutputResponse(); try { if (ancVisitQuestionsDTOS.size() != 0) { From a6bca15135b3d298283aca890c3dfad3c64e3d0e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 30 Dec 2025 17:00:39 +0530 Subject: [PATCH 020/118] fix null pomiter issue --- .../impl/MaternalHealthServiceImpl.java | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 87e3d446..95eea2e4 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.sql.Timestamp; import java.time.LocalDate; @@ -369,6 +370,8 @@ public String savePNCVisit(List pncVisitDTOs) { @Override public String saveANCVisitQuestions(List dtos, String authorization) throws IEMRException { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + List entities = new ArrayList<>(); for (AncCounsellingCareDTO dto : dtos) { @@ -378,17 +381,28 @@ public String saveANCVisitQuestions(List dtos, String aut entity.setBeneficiaryId(dto.getBeneficiaryId()); entity.setAncVisitId(0L); - entity.setHomeVisitDate( - LocalDate.parse(dto.getVisitDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) - ); + // ✅ visitDate (DTO level) + if (StringUtils.hasText(dto.getVisitDate())) { + entity.setVisitDate( + LocalDate.parse(dto.getVisitDate(), formatter) + ); + } else { + throw new IllegalArgumentException("visitDate is mandatory"); + } + AncCounsellingCareListDTO fields = dto.getFields(); + if (fields == null) { + throw new IllegalArgumentException("fields object is missing"); + } - entity.setHomeVisitDate( - LocalDate.parse(fields.getHomeVisitDate(), DateTimeFormatter.ofPattern("dd-MM-yyyy")) - ); + // ✅ homeVisitDate (fields level) + if (StringUtils.hasText(fields.getHomeVisitDate())) { + entity.setHomeVisitDate( + LocalDate.parse(fields.getHomeVisitDate(), formatter) + ); + } entity.setSelectAll(yesNoToBoolean(fields.getSelectAll())); - entity.setSwelling(yesNoToBoolean(fields.getSwelling())); entity.setHighBp(yesNoToBoolean(fields.getHighBp())); entity.setConvulsions(yesNoToBoolean(fields.getConvulsions())); @@ -396,9 +410,6 @@ public String saveANCVisitQuestions(List dtos, String aut entity.setReducedFetalMovement(yesNoToBoolean(fields.getReducedFetalMovement())); entity.setAgeRisk(yesNoToBoolean(fields.getAgeRisk())); entity.setChildGap(yesNoToBoolean(fields.getChildGap())); - entity.setUserId(jwtUtil.extractUserId(authorization)); - entity.setCreatedBy(jwtUtil.extractUsername(authorization)); - entity.setUpdatedBy(jwtUtil.extractUsername(authorization)); entity.setShortHeight(yesNoToBoolean(fields.getShortHeight())); entity.setPrePregWeight(yesNoToBoolean(fields.getPrePregWeight())); entity.setBleeding(yesNoToBoolean(fields.getBleeding())); @@ -414,12 +425,16 @@ public String saveANCVisitQuestions(List dtos, String aut entity.setProlongedLabor(yesNoToBoolean(fields.getProlongedLabor())); entity.setMalpresentation(yesNoToBoolean(fields.getMalpresentation())); + entity.setUserId(jwtUtil.extractUserId(authorization)); + entity.setCreatedBy(jwtUtil.extractUsername(authorization)); + entity.setUpdatedBy(jwtUtil.extractUsername(authorization)); + entities.add(entity); } ancCounsellingCareRepo.saveAll(entities); - return "ANC Counselling & Care data saved successfully"; + } @Override From 23fac7ed0d2ed0770e483d3c73e01e1d10dbc4a6 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 30 Dec 2025 17:31:36 +0530 Subject: [PATCH 021/118] fix null pomiter issue --- .../impl/MaternalHealthServiceImpl.java | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 95eea2e4..d8c78e08 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -10,6 +10,7 @@ import com.iemr.flw.service.MaternalHealthService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; +import jakarta.transaction.Transactional; import org.modelmapper.ModelMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +22,7 @@ import java.time.LocalDate; import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.*; import java.util.stream.Collectors; @@ -368,40 +370,45 @@ public String savePNCVisit(List pncVisitDTOs) { } @Override + @Transactional public String saveANCVisitQuestions(List dtos, String authorization) throws IEMRException { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); - List entities = new ArrayList<>(); for (AncCounsellingCareDTO dto : dtos) { - AncCounsellingCare entity = new AncCounsellingCare(); - - entity.setBeneficiaryId(dto.getBeneficiaryId()); - entity.setAncVisitId(0L); - - // ✅ visitDate (DTO level) - if (StringUtils.hasText(dto.getVisitDate())) { - entity.setVisitDate( - LocalDate.parse(dto.getVisitDate(), formatter) - ); - } else { + if (!StringUtils.hasText(dto.getVisitDate())) { throw new IllegalArgumentException("visitDate is mandatory"); } AncCounsellingCareListDTO fields = dto.getFields(); if (fields == null) { - throw new IllegalArgumentException("fields object is missing"); + throw new IllegalArgumentException("fields object is mandatory"); + } + + LocalDate visitDate; + try { + visitDate = LocalDate.parse(dto.getVisitDate(), formatter); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("Invalid visitDate format, expected dd-MM-yyyy"); } - // ✅ homeVisitDate (fields level) - if (StringUtils.hasText(fields.getHomeVisitDate())) { - entity.setHomeVisitDate( - LocalDate.parse(fields.getHomeVisitDate(), formatter) - ); + LocalDate homeVisitDate; + try { + homeVisitDate = StringUtils.hasText(fields.getHomeVisitDate()) + ? LocalDate.parse(fields.getHomeVisitDate(), formatter) + : visitDate; // ✅ fallback + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("Invalid home_visit_date format, expected dd-MM-yyyy"); } + AncCounsellingCare entity = new AncCounsellingCare(); + entity.setBeneficiaryId(dto.getBeneficiaryId()); + entity.setAncVisitId(0L); + entity.setVisitDate(visitDate); + entity.setHomeVisitDate(homeVisitDate); + entity.setSelectAll(yesNoToBoolean(fields.getSelectAll())); entity.setSwelling(yesNoToBoolean(fields.getSwelling())); entity.setHighBp(yesNoToBoolean(fields.getHighBp())); @@ -434,9 +441,9 @@ public String saveANCVisitQuestions(List dtos, String aut ancCounsellingCareRepo.saveAll(entities); return "ANC Counselling & Care data saved successfully"; - } + @Override public List getANCCounselling(GetBenRequestHandler requestDTO) { From dd418de4aafb454a3455f5a2696e34dbe0b0b18d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 30 Dec 2025 18:17:39 +0530 Subject: [PATCH 022/118] fix response issue --- .../controller/MaternalHealthController.java | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index 114201fb..5b74b572 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -18,6 +18,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.sql.Timestamp; @@ -90,6 +92,7 @@ public String getPregnantWomanList(@RequestBody GetBenRequestHandler requestDTO, response.setError(5000, "Error in pregnant woman get data : " + e); } return response.toString(); + } @Operation(summary = "save anc visit details") @@ -166,27 +169,39 @@ public String saveANCVisitQuestion(@RequestBody List ancV @Operation(summary = "get anc visit questions") @RequestMapping(value = { "/ancVisit/counselling/getAll" }, method = { RequestMethod.POST }) - public String getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, - @RequestHeader(value = "Authorization") String Authorization) { - OutputResponse response = new OutputResponse(); + public ResponseEntity>> getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, + @RequestHeader(value = "JwtToken") String Authorization) { + StandardResponse> response = new StandardResponse<>(); + try { if (requestDTO != null) { - logger.info("request object with timestamp : " + new Timestamp(System.currentTimeMillis()) + " " - + requestDTO); + logger.info("Request: " + requestDTO); + List result = maternalHealthService.getANCCounselling(requestDTO); - Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); - String s = gson.toJson(result); - if (s != null) - response.setResponse(s); - else - response.setError(500, "No record found"); - } else - response.setError(500, "Invalid/NULL request obj"); + + response.setStatusCode(200); + response.setStatus("Success"); + response.setErrorMessage("Success"); + response.setData(result); + + return ResponseEntity.ok(response); + + } else { + response.setStatusCode(400); + response.setStatus("Failed"); + response.setErrorMessage("Invalid request object"); + response.setData(null); + return ResponseEntity.badRequest().body(response); + } } catch (Exception e) { - logger.error("Error in Anc visit get data : " + e); - response.setError(500, "Error in Anc visit get data : " + e); + logger.error("Exception in fetching HBNC visits", e); + + response.setStatusCode(500); + response.setStatus("Failed"); + response.setErrorMessage("Internal Server Error: " + e.getMessage()); + response.setData(null); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } - return response.toString(); } @Operation(summary = "save Delivery Outcome details") @@ -211,6 +226,7 @@ public String saveDeliveryOutcome(@RequestBody List delivery response.setError(5000, "Error in save delivery outcome details : " + e); } return response.toString(); + } @Operation(summary = "get Delivery Outcome details") From 9f67b3f3b376155237edb53d178382d1c7dc84db Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 30 Dec 2025 18:20:28 +0530 Subject: [PATCH 023/118] fix response issue --- .../com/iemr/flw/service/impl/MaternalHealthServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index d8c78e08..ad577572 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -448,7 +448,7 @@ public String saveANCVisitQuestions(List dtos, String aut public List getANCCounselling(GetBenRequestHandler requestDTO) { List entities = - ancCounsellingCareRepo.findAllByUserId(requestDTO.getUserId()); + ancCounsellingCareRepo.findAllByUserId(requestDTO.getAshaId()); List response = new ArrayList<>(); From 552ce35bca0d55d34f56300ce784bbc7734cc6d1 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 31 Dec 2025 08:20:10 +0530 Subject: [PATCH 024/118] fix response of get api --- .../controller/MaternalHealthController.java | 6 +- .../dto/iemr/AncCounsellingCareListDTO.java | 92 +++++++++---------- .../iemr/AncCounsellingCareResponseDTO.java | 17 ++++ .../flw/service/MaternalHealthService.java | 2 +- .../impl/MaternalHealthServiceImpl.java | 83 +++++++++-------- 5 files changed, 113 insertions(+), 87 deletions(-) create mode 100644 src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareResponseDTO.java diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index 5b74b572..e65eacda 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -169,15 +169,15 @@ public String saveANCVisitQuestion(@RequestBody List ancV @Operation(summary = "get anc visit questions") @RequestMapping(value = { "/ancVisit/counselling/getAll" }, method = { RequestMethod.POST }) - public ResponseEntity>> getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, + public ResponseEntity>> getANCVisitQuestion(@RequestBody GetBenRequestHandler requestDTO, @RequestHeader(value = "JwtToken") String Authorization) { - StandardResponse> response = new StandardResponse<>(); + StandardResponse> response = new StandardResponse<>(); try { if (requestDTO != null) { logger.info("Request: " + requestDTO); - List result = maternalHealthService.getANCCounselling(requestDTO); + List result = maternalHealthService.getANCCounselling(requestDTO); response.setStatusCode(200); response.setStatus("Success"); diff --git a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java index f73443d7..981e34e2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareListDTO.java @@ -6,74 +6,74 @@ @Data public class AncCounsellingCareListDTO { - @SerializedName("home_visit_date") - private String homeVisitDate; + @SerializedName("home_visit_date") + private String homeVisitDate; - @SerializedName("select_all") - private String selectAll; + @SerializedName("select_all") + private String selectAll; - @SerializedName("swelling") - private String swelling; + @SerializedName("swelling") + private String swelling; - @SerializedName("high_bp") - private String highBp; + @SerializedName("high_bp") + private String highBp; - @SerializedName("convulsions") - private String convulsions; + @SerializedName("convulsions") + private String convulsions; - @SerializedName("anemia") - private String anemia; + @SerializedName("anemia") + private String anemia; - @SerializedName("reduced_fetal_movement") - private String reducedFetalMovement; + @SerializedName("reduced_fetal_movement") + private String reducedFetalMovement; - @SerializedName("age_risk") - private String ageRisk; + @SerializedName("age_risk") + private String ageRisk; - @SerializedName("child_gap") - private String childGap; + @SerializedName("child_gap") + private String childGap; - @SerializedName("short_height") - private String shortHeight; + @SerializedName("short_height") + private String shortHeight; - @SerializedName("pre_preg_weight") - private String prePregWeight; + @SerializedName("pre_preg_weight") + private String prePregWeight; - @SerializedName("bleeding") - private String bleeding; + @SerializedName("bleeding") + private String bleeding; - @SerializedName("miscarriage_history") - private String miscarriageHistory; + @SerializedName("miscarriage_history") + private String miscarriageHistory; - @SerializedName("four_plus_delivery") - private String fourPlusDelivery; + @SerializedName("four_plus_delivery") + private String fourPlusDelivery; - @SerializedName("first_delivery") - private String firstDelivery; + @SerializedName("first_delivery") + private String firstDelivery; - @SerializedName("twin_pregnancy") - private String twinPregnancy; + @SerializedName("twin_pregnancy") + private String twinPregnancy; - @SerializedName("c_section_history") - private String cSectionHistory; + @SerializedName("c_section_history") + private String cSectionHistory; - @SerializedName("pre_existing_disease") - private String preExistingDisease; + @SerializedName("pre_existing_disease") + private String preExistingDisease; - @SerializedName("fever_malaria") - private String feverMalaria; + @SerializedName("fever_malaria") + private String feverMalaria; - @SerializedName("jaundice") - private String jaundice; + @SerializedName("jaundice") + private String jaundice; - @SerializedName("sickle_cell") - private String sickleCell; + @SerializedName("sickle_cell") + private String sickleCell; - @SerializedName("prolonged_labor") - private String prolongedLabor; + @SerializedName("prolonged_labor") + private String prolongedLabor; - @SerializedName("malpresentation") - private String malpresentation; + @SerializedName("malpresentation") + private String malpresentation; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareResponseDTO.java new file mode 100644 index 00000000..2e019558 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/AncCounsellingCareResponseDTO.java @@ -0,0 +1,17 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +import java.util.Map; + +@Data +public class AncCounsellingCareResponseDTO { + private String formId; + private Long beneficiaryId; + private String visitDate; + private Map fields; // for dynamic form fields + +} + + + diff --git a/src/main/java/com/iemr/flw/service/MaternalHealthService.java b/src/main/java/com/iemr/flw/service/MaternalHealthService.java index dae0e4eb..33de9bc9 100644 --- a/src/main/java/com/iemr/flw/service/MaternalHealthService.java +++ b/src/main/java/com/iemr/flw/service/MaternalHealthService.java @@ -28,5 +28,5 @@ public interface MaternalHealthService { String saveANCVisitQuestions(List ancVisitQuestionsDTOS, String authorization) throws IEMRException; - List getANCCounselling(GetBenRequestHandler requestDTO); + List getANCCounselling(GetBenRequestHandler requestDTO); } diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index ad577572..8914941f 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -445,52 +445,61 @@ public String saveANCVisitQuestions(List dtos, String aut @Override - public List getANCCounselling(GetBenRequestHandler requestDTO) { + public List getANCCounselling(GetBenRequestHandler requestDTO) { List entities = ancCounsellingCareRepo.findAllByUserId(requestDTO.getAshaId()); - List response = new ArrayList<>(); + List responseDTOList = new ArrayList<>(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); for (AncCounsellingCare entity : entities) { - AncCounsellingCareListDTO fields = new AncCounsellingCareListDTO(); - - fields.setHomeVisitDate(entity.getHomeVisitDate().toString()); - fields.setSelectAll(booleanToYesNo(entity.getSelectAll())); - fields.setSwelling(booleanToYesNo(entity.getSwelling())); - fields.setHighBp(booleanToYesNo(entity.getHighBp())); - fields.setConvulsions(booleanToYesNo(entity.getConvulsions())); - fields.setAnemia(booleanToYesNo(entity.getAnemia())); - fields.setReducedFetalMovement(booleanToYesNo(entity.getReducedFetalMovement())); - fields.setAgeRisk(booleanToYesNo(entity.getAgeRisk())); - fields.setChildGap(booleanToYesNo(entity.getChildGap())); - - fields.setShortHeight(booleanToYesNo(entity.getShortHeight())); - fields.setPrePregWeight(booleanToYesNo(entity.getPrePregWeight())); - fields.setBleeding(booleanToYesNo(entity.getBleeding())); - fields.setMiscarriageHistory(booleanToYesNo(entity.getMiscarriageHistory())); - fields.setFourPlusDelivery(booleanToYesNo(entity.getFourPlusDelivery())); - fields.setFirstDelivery(booleanToYesNo(entity.getFirstDelivery())); - fields.setTwinPregnancy(booleanToYesNo(entity.getTwinPregnancy())); - fields.setCSectionHistory(booleanToYesNo(entity.getCSectionHistory())); - fields.setPreExistingDisease(booleanToYesNo(entity.getPreExistingDisease())); - fields.setFeverMalaria(booleanToYesNo(entity.getFeverMalaria())); - fields.setJaundice(booleanToYesNo(entity.getJaundice())); - fields.setSickleCell(booleanToYesNo(entity.getSickleCell())); - fields.setProlongedLabor(booleanToYesNo(entity.getProlongedLabor())); - fields.setMalpresentation(booleanToYesNo(entity.getMalpresentation())); - - AncCounsellingCareDTO dto = new AncCounsellingCareDTO(); - dto.setFormId("anc_form_001"); - dto.setBeneficiaryId(entity.getBeneficiaryId()); - dto.setVisitDate(entity.getVisitDate() != null ? entity.getVisitDate().toString() : null); - dto.setFields(fields); - - response.add(dto); + AncCounsellingCareResponseDTO responseDTO = new AncCounsellingCareResponseDTO(); + responseDTO.setFormId("anc_form_001"); + responseDTO.setBeneficiaryId(entity.getBeneficiaryId()); // Update with actual value + responseDTO.setVisitDate(entity.getVisitDate().format(formatter)); // Format visit.getVisitDate() + + // 🔹 fields map + Map fields = new HashMap<>(); + + fields.put("home_visit_date", + entity.getHomeVisitDate() != null + ? entity.getHomeVisitDate().format(formatter) + : null); + + fields.put("select_all", booleanToYesNo(entity.getSelectAll())); + fields.put("swelling", booleanToYesNo(entity.getSwelling())); + fields.put("high_bp", booleanToYesNo(entity.getHighBp())); + fields.put("convulsions", booleanToYesNo(entity.getConvulsions())); + fields.put("anemia", booleanToYesNo(entity.getAnemia())); + fields.put("reduced_fetal_movement", booleanToYesNo(entity.getReducedFetalMovement())); + fields.put("age_risk", booleanToYesNo(entity.getAgeRisk())); + fields.put("child_gap", booleanToYesNo(entity.getChildGap())); + fields.put("short_height", booleanToYesNo(entity.getShortHeight())); + fields.put("pre_preg_weight", booleanToYesNo(entity.getPrePregWeight())); + fields.put("bleeding", booleanToYesNo(entity.getBleeding())); + fields.put("miscarriage_history", booleanToYesNo(entity.getMiscarriageHistory())); + fields.put("four_plus_delivery", booleanToYesNo(entity.getFourPlusDelivery())); + fields.put("first_delivery", booleanToYesNo(entity.getFirstDelivery())); + fields.put("twin_pregnancy", booleanToYesNo(entity.getTwinPregnancy())); + fields.put("c_section_history", booleanToYesNo(entity.getCSectionHistory())); + fields.put("pre_existing_disease", booleanToYesNo(entity.getPreExistingDisease())); + fields.put("fever_malaria", booleanToYesNo(entity.getFeverMalaria())); + fields.put("jaundice", booleanToYesNo(entity.getJaundice())); + fields.put("sickle_cell", booleanToYesNo(entity.getSickleCell())); + fields.put("prolonged_labor", booleanToYesNo(entity.getProlongedLabor())); + fields.put("malpresentation", booleanToYesNo(entity.getMalpresentation())); + + responseDTO.setFields(fields); + responseDTOList.add(responseDTO); + + + + } + return responseDTOList; - return response; } private String booleanToYesNo(Boolean value) { From 52de84cb4d49f7ba301e9d0765a39747df211009 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 5 Jan 2026 15:14:01 +0530 Subject: [PATCH 025/118] Beneficiary Soft-delete. --- .../identity/RMNCHBeneficiaryDetailsRmnch.java | 3 +++ .../flw/service/impl/BeneficiaryServiceImpl.java | 13 ++----------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java index ac336da1..297694b7 100644 --- a/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java +++ b/src/main/java/com/iemr/flw/domain/identity/RMNCHBeneficiaryDetailsRmnch.java @@ -386,6 +386,9 @@ public class RMNCHBeneficiaryDetailsRmnch { @Expose private Integer noofAlivechildren; + @Expose + private Boolean isDeactivate; + @Expose @Transient private Integer servicePointID; diff --git a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java index 759edfb4..f5a75785 100644 --- a/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/BeneficiaryServiceImpl.java @@ -404,17 +404,8 @@ private String getMappingsForAddressIDs(List addressLi resultMap.put("noOfchildren", benDetailsRMNCH_OBJ.getNoOfchildren()); resultMap.put("isMarried", benDetailsRMNCH_OBJ.getIsMarried()); resultMap.put("doYouHavechildren", benDetailsRMNCH_OBJ.getDoYouHavechildren()); - resultMap.put("noofAlivechildren ",benDetailsRMNCH_OBJ.getNoofAlivechildren()); - if(houseHoldRepo.getByHouseHoldID(benDetailsRMNCH_OBJ.getHouseoldId())!=null){ - resultMap.put("isDeactivate",true); - - }else { - resultMap.put("isDeactivate",false); - - } - - - + resultMap.put("noofAlivechildren",benDetailsRMNCH_OBJ.getNoofAlivechildren()); + resultMap.put("isDeactivate",benDetailsRMNCH_OBJ.getIsDeactivate()); resultMap.put("BenRegId", m.getBenRegId()); // adding asha id / created by - user id From bb2f1fe1b8a046e600cdb7963ccc9c5957af04ab Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Jan 2026 15:22:02 +0530 Subject: [PATCH 026/118] cdtf_visit_details AMM-2046 and AMM-2045 --- .../controller/DiseaseControlController.java | 37 ++++++++-- .../iemr/ChronicDiseaseVisitEntity.java | 72 +++++++++++++++++++ .../flw/dto/iemr/ChronicDiseaseVisitDTO.java | 38 ++++++++++ .../iemr/ChronicDiseaseVisitRepository.java | 10 +++ .../flw/service/DiseaseControlService.java | 2 + .../impl/DiseaseControlServiceImpl.java | 46 ++++++++++++ 6 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java diff --git a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java index 2f5d4264..0c225e23 100644 --- a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java +++ b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java @@ -34,11 +34,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.LinkedHashMap; @@ -314,5 +310,36 @@ public ResponseEntity> getAllMobilizationMosquitoNet(@Reques return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } } + @RequestMapping(value = "cdtfVisit/saveAll", method = RequestMethod.POST) + public ResponseEntity> saveVisit( + @RequestBody List requestList,@RequestHeader(value = "JwtToken") String token) { + + Map response = new LinkedHashMap<>(); + logger.info("Chronic Disease Visit Save Request: {}", requestList); + + try { + List savedList = + diseaseControlService.saveChronicDiseaseVisit(requestList,token); + + if (savedList != null && !savedList.isEmpty()) { + response.put("statusCode", HttpStatus.OK.value()); + response.put("message", "Data saved successfully"); + response.put("data", savedList); + return ResponseEntity.ok(response); + } else { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "No data saved"); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); + } + + } catch (Exception e) { + logger.error("Error saving Chronic Disease Visit :", e); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java b/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java new file mode 100644 index 00000000..c236ffa7 --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java @@ -0,0 +1,72 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Entity +@Table(name = "cdtf_visit_details") +@Data +public class ChronicDiseaseVisitEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "beneficiary_id") + private Long benId; + + @Column(name = "household_id") + private Long hhId; + + @Column(name = "form_id") + private String formId; + + @Column(name = "version") + private Integer version; + + @Column(name = "visit_no") + private Integer visitNo; + + @Column(name = "follow_up_no") + private Integer followUpNo; + + @Column(name = "diagnosis_codes", columnDefinition = "TEXT") + private String diagnosisCodes; + + @Column(name = "treatment_start_date") + private LocalDate treatmentStartDate; + + @Column(name = "form_data_json", columnDefinition = "JSON") + private String formDataJson; + + @Column(name = "user_id") + private Integer userID; + + @Column(name = "created_by") + private String createdBy; + + @Column(name = "created_date") + private LocalDateTime createdDate; + + @Column(name = "updated_by") + private Integer updatedBy; + + @Column(name = "updated_date") + private LocalDateTime updatedDate; + + // 🔹 Auto timestamps + @PrePersist + protected void onCreate() { + this.createdDate = LocalDateTime.now(); + this.updatedDate = LocalDateTime.now(); + } + + @PreUpdate + protected void onUpdate() { + this.updatedDate = LocalDateTime.now(); + } + + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java new file mode 100644 index 00000000..7ec119c4 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java @@ -0,0 +1,38 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class ChronicDiseaseVisitDTO { + + @JsonProperty("id") + private Long id; + + @JsonProperty("benId") + private Long benId; + + @JsonProperty("hhId") + private Long hhId; + + @JsonProperty("formId") + private String formId; + + @JsonProperty("version") + private Integer version; + + @JsonProperty("visitNo") + private Integer visitNo; + + @JsonProperty("followUpNo") + private Integer followUpNo; + + @JsonProperty("diagnosisCodes") + private String diagnosisCodes; + + @JsonProperty("treatmentStartDate") + private String treatmentStartDate; // yyyy-MM-dd + + @JsonProperty("formDataJson") + private String formDataJson; +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java b/src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java new file mode 100644 index 00000000..dc422710 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java @@ -0,0 +1,10 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.ChronicDiseaseVisitEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ChronicDiseaseVisitRepository + extends JpaRepository { +} diff --git a/src/main/java/com/iemr/flw/service/DiseaseControlService.java b/src/main/java/com/iemr/flw/service/DiseaseControlService.java index 92accf4a..08ad1013 100644 --- a/src/main/java/com/iemr/flw/service/DiseaseControlService.java +++ b/src/main/java/com/iemr/flw/service/DiseaseControlService.java @@ -25,6 +25,7 @@ package com.iemr.flw.service; import com.iemr.flw.dto.iemr.*; +import com.iemr.flw.utils.exception.IEMRException; import java.util.List; @@ -44,4 +45,5 @@ public interface DiseaseControlService { public String saveLeprosyFollowUp(LeprosyFollowUpDTO leprosyDTO); List getAllLeprosyFollowUpData(String createdBy); + List saveChronicDiseaseVisit(List requestList,String token) throws IEMRException; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index bc780038..377f50b6 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -31,6 +31,8 @@ import com.iemr.flw.masterEnum.DiseaseType; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.DiseaseControlService; +import com.iemr.flw.utils.JwtUtil; +import com.iemr.flw.utils.exception.IEMRException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -77,7 +79,11 @@ public class DiseaseControlServiceImpl implements DiseaseControlService { private MosquitoNetRepository mosquitoNetRepository; + @Autowired + private ChronicDiseaseVisitRepository chronicDiseaseVisitRepository; + @Autowired + private JwtUtil jwtUtil; private final Logger logger = LoggerFactory.getLogger(CoupleController.class); @@ -998,4 +1004,44 @@ record = new IncentiveActivityRecord(); } } + + + @Override + public List saveChronicDiseaseVisit( + List requestList,String token) throws IEMRException { + + List responseList = new ArrayList<>(); + + for (ChronicDiseaseVisitDTO dto : requestList) { + + ChronicDiseaseVisitEntity entity = new ChronicDiseaseVisitEntity(); + + entity.setBenId(dto.getBenId()); + entity.setHhId(dto.getHhId()); + entity.setFormId(dto.getFormId()); + entity.setVersion(dto.getVersion()); + entity.setVisitNo(dto.getVisitNo()); + entity.setFollowUpNo(dto.getFollowUpNo()); + entity.setDiagnosisCodes(dto.getDiagnosisCodes()); + entity.setFormDataJson(dto.getFormDataJson()); + entity.setUserID(jwtUtil.extractUserId(token)); + entity.setCreatedBy(jwtUtil.extractUsername(token)); + + + if (dto.getTreatmentStartDate() != null) { + entity.setTreatmentStartDate( + LocalDate.parse(dto.getTreatmentStartDate()) + ); + } + + ChronicDiseaseVisitEntity savedEntity = + chronicDiseaseVisitRepository.save(entity); + + dto.setId(savedEntity.getId()); + responseList.add(dto); + } + + return responseList; + } + } \ No newline at end of file From dd63a8946539e2e64cc74aef4054c7712b8862a7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Jan 2026 15:45:59 +0530 Subject: [PATCH 027/118] cdtf_visit_details get api AMM-2046 and AMM-2045 --- .../controller/DiseaseControlController.java | 27 +++++++++++++++ .../iemr/ChronicDiseaseVisitRepository.java | 4 +++ .../flw/service/DiseaseControlService.java | 3 ++ .../impl/DiseaseControlServiceImpl.java | 34 +++++++++++++++++++ 4 files changed, 68 insertions(+) diff --git a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java index 0c225e23..e89a5306 100644 --- a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java +++ b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java @@ -340,6 +340,33 @@ public ResponseEntity> saveVisit( } } + @RequestMapping(value = "cdtfVisit/getAll", method = RequestMethod.POST) + public ResponseEntity> getVisitDetails( + @RequestBody GetBenRequestHandler getBenRequestHandler) { + + Map response = new LinkedHashMap<>(); + + try { + List result = + diseaseControlService.getCdtfVisits(getBenRequestHandler); + + if (result != null && !result.isEmpty()) { + response.put("statusCode", HttpStatus.OK.value()); + response.put("data", result); + return ResponseEntity.ok(response); + } else { + response.put("statusCode", HttpStatus.NOT_FOUND.value()); + response.put("message", "No records found"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + + } catch (Exception e) { + logger.error("Error fetching Chronic Disease Visit :", e); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java b/src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java index dc422710..e63835a9 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/ChronicDiseaseVisitRepository.java @@ -4,7 +4,11 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface ChronicDiseaseVisitRepository extends JpaRepository { + + List findByUserID(Integer ashaId); } diff --git a/src/main/java/com/iemr/flw/service/DiseaseControlService.java b/src/main/java/com/iemr/flw/service/DiseaseControlService.java index 08ad1013..65e315dc 100644 --- a/src/main/java/com/iemr/flw/service/DiseaseControlService.java +++ b/src/main/java/com/iemr/flw/service/DiseaseControlService.java @@ -24,6 +24,7 @@ */ package com.iemr.flw.service; +import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.utils.exception.IEMRException; @@ -46,4 +47,6 @@ public interface DiseaseControlService { List getAllLeprosyFollowUpData(String createdBy); List saveChronicDiseaseVisit(List requestList,String token) throws IEMRException; + + List getCdtfVisits(GetBenRequestHandler getBenRequestHandler); } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index 377f50b6..e26ef5af 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.iemr.flw.controller.CoupleController; import com.iemr.flw.domain.iemr.*; +import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.DiseaseType; import com.iemr.flw.repo.iemr.*; @@ -1044,4 +1045,37 @@ public List saveChronicDiseaseVisit( return responseList; } + @Override + public List getCdtfVisits(GetBenRequestHandler getBenRequestHandler) { + + List entityList = chronicDiseaseVisitRepository.findByUserID(getBenRequestHandler.getAshaId()); + + List dtoList = new ArrayList<>(); + + for (ChronicDiseaseVisitEntity entity : entityList) { + + ChronicDiseaseVisitDTO dto = new ChronicDiseaseVisitDTO(); + + dto.setId(entity.getId()); + dto.setBenId(entity.getBenId()); + dto.setHhId(entity.getHhId()); + dto.setFormId(entity.getFormId()); + dto.setVersion(entity.getVersion()); + dto.setVisitNo(entity.getVisitNo()); + dto.setFollowUpNo(entity.getFollowUpNo()); + dto.setDiagnosisCodes(entity.getDiagnosisCodes()); + dto.setFormDataJson(entity.getFormDataJson()); + + if (entity.getTreatmentStartDate() != null) { + dto.setTreatmentStartDate( + entity.getTreatmentStartDate().toString() + ); + } + + dtoList.add(dto); + } + + return dtoList; + } + } \ No newline at end of file From b723320b47b8c43f999c0d937ec1ee8639d26567 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Jan 2026 16:50:41 +0530 Subject: [PATCH 028/118] Add new parameters in leprosy suspected API AMM-2071 --- .../flw/domain/iemr/ScreeningLeprosy.java | 72 +++++++++++++++++++ .../iemr/flw/dto/iemr/DiseaseLeprosyDTO.java | 24 +++++++ .../impl/DiseaseControlServiceImpl.java | 54 ++++++++++++++ 3 files changed, 150 insertions(+) diff --git a/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java index 225a1dfc..4efc6dcc 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java @@ -143,6 +143,78 @@ public class ScreeningLeprosy { @Column(name = "treatment_status", length = 100) private String treatmentStatus; + @Column(name = "recurrent_ulceration_id") + private Integer recurrentUlcerationId; + + @Column(name = "recurrent_tingling_id") + private Integer recurrentTinglingId; + + @Column(name = "hypopigmented_patch_id") + private Integer hypopigmentedPatchId; + + @Column(name = "thickened_skin_id") + private Integer thickenedSkinId; + + @Column(name = "skin_nodules_id") + private Integer skinNodulesId; + + @Column(name = "skin_patch_discoloration_id") + private Integer skinPatchDiscolorationId; + + @Column(name = "recurrent_numbness_id") + private Integer recurrentNumbnessId; + + @Column(name = "clawing_fingers_id") + private Integer clawingFingersId; + + @Column(name = "tingling_numbness_extremities_id") + private Integer tinglingNumbnessExtremitiesId; + + @Column(name = "inability_close_eyelid_id") + private Integer inabilityCloseEyelidId; + + @Column(name = "difficulty_holding_objects_id") + private Integer difficultyHoldingObjectsId; + + @Column(name = "weakness_feet_id") + private Integer weaknessFeetId; + + @Column(name = "recurrent_ulceration", length = 10) + private String recurrentUlceration; + + @Column(name = "recurrent_tingling", length = 10) + private String recurrentTingling; + + @Column(name = "hypopigmented_patch", length = 50) + private String hypopigmentedPatch; + + @Column(name = "thickened_skin", length = 10) + private String thickenedSkin; + + @Column(name = "skin_nodules", length = 10) + private String skinNodules; + + @Column(name = "skin_patch_discoloration", length = 50) + private String skinPatchDiscoloration; + + @Column(name = "recurrent_numbness", length = 10) + private String recurrentNumbness; + + @Column(name = "clawing_fingers", length = 10) + private String clawingFingers; + + @Column(name = "tingling_numbness_extremities", length = 50) + private String tinglingNumbnessExtremities; + + @Column(name = "inability_close_eyelid", length = 10) + private String inabilityCloseEyelid; + + @Column(name = "difficulty_holding_objects", length = 50) + private String difficultyHoldingObjects; + + @Column(name = "weakness_feet", length = 10) + private String weaknessFeet; + @Column(name = "CreatedBy", length = 100) private String createdBy; diff --git a/src/main/java/com/iemr/flw/dto/iemr/DiseaseLeprosyDTO.java b/src/main/java/com/iemr/flw/dto/iemr/DiseaseLeprosyDTO.java index c0acbe71..47489c54 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/DiseaseLeprosyDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/DiseaseLeprosyDTO.java @@ -72,4 +72,28 @@ public class DiseaseLeprosyDTO { private Timestamp createdDate; private String modifiedBy; private Timestamp lastModDate; + private Integer recurrentUlcerationId; + private Integer recurrentTinglingId; + private Integer hypopigmentedPatchId; + private Integer thickenedSkinId; + private Integer skinNodulesId; + private Integer skinPatchDiscolorationId; + private Integer recurrentNumbnessId; + private Integer clawingFingersId; + private Integer tinglingNumbnessExtremitiesId; + private Integer inabilityCloseEyelidId; + private Integer difficultyHoldingObjectsId; + private Integer weaknessFeetId; + private String recurrentUlceration; + private String recurrentTingling; + private String hypopigmentedPatch; + private String thickenedSkin; + private String skinNodules; + private String skinPatchDiscoloration; + private String recurrentNumbness; + private String clawingFingers; + private String tinglingNumbnessExtremities; + private String inabilityCloseEyelid; + private String difficultyHoldingObjects; + private String weaknessFeet; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index e26ef5af..3ba522da 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -724,6 +724,33 @@ private ScreeningLeprosy saveLeprosyData(DiseaseLeprosyDTO diseaseControlData) { diseaseLeprosy.setModifiedBy(diseaseControlData.getModifiedBy()); diseaseLeprosy.setLastModDate(diseaseControlData.getLastModDate()); + diseaseLeprosy.setRecurrentUlcerationId(diseaseControlData.getRecurrentUlcerationId()); + diseaseLeprosy.setRecurrentTinglingId(diseaseControlData.getRecurrentTinglingId()); + diseaseLeprosy.setHypopigmentedPatchId(diseaseControlData.getHypopigmentedPatchId()); + diseaseLeprosy.setThickenedSkinId(diseaseControlData.getThickenedSkinId()); + diseaseLeprosy.setSkinNodulesId(diseaseControlData.getSkinNodulesId()); + diseaseLeprosy.setSkinPatchDiscolorationId(diseaseControlData.getSkinPatchDiscolorationId()); + diseaseLeprosy.setRecurrentNumbnessId(diseaseControlData.getRecurrentNumbnessId()); + diseaseLeprosy.setClawingFingersId(diseaseControlData.getClawingFingersId()); + diseaseLeprosy.setTinglingNumbnessExtremitiesId(diseaseControlData.getTinglingNumbnessExtremitiesId()); + diseaseLeprosy.setInabilityCloseEyelidId(diseaseControlData.getInabilityCloseEyelidId()); + diseaseLeprosy.setDifficultyHoldingObjectsId(diseaseControlData.getDifficultyHoldingObjectsId()); + diseaseLeprosy.setWeaknessFeetId(diseaseControlData.getWeaknessFeetId()); + + diseaseLeprosy.setRecurrentUlceration(diseaseControlData.getRecurrentUlceration()); + diseaseLeprosy.setRecurrentTingling(diseaseControlData.getRecurrentTingling()); + diseaseLeprosy.setHypopigmentedPatch(diseaseControlData.getHypopigmentedPatch()); + diseaseLeprosy.setThickenedSkin(diseaseControlData.getThickenedSkin()); + diseaseLeprosy.setSkinNodules(diseaseControlData.getSkinNodules()); + diseaseLeprosy.setSkinPatchDiscoloration(diseaseControlData.getSkinPatchDiscoloration()); + diseaseLeprosy.setRecurrentNumbness(diseaseControlData.getRecurrentNumbness()); + diseaseLeprosy.setClawingFingers(diseaseControlData.getClawingFingers()); + diseaseLeprosy.setTinglingNumbnessExtremities(diseaseControlData.getTinglingNumbnessExtremities()); + diseaseLeprosy.setInabilityCloseEyelid(diseaseControlData.getInabilityCloseEyelid()); + diseaseLeprosy.setDifficultyHoldingObjects(diseaseControlData.getDifficultyHoldingObjects()); + diseaseLeprosy.setWeaknessFeet(diseaseControlData.getWeaknessFeet()); + + return diseaseLeprosy; } @@ -768,6 +795,33 @@ private String updateLeprosyData(DiseaseLeprosyDTO diseaseControlData) { existingDiseaseLeprosy.setModifiedBy(diseaseControlData.getModifiedBy()); existingDiseaseLeprosy.setLastModDate(diseaseControlData.getLastModDate()); + existingDiseaseLeprosy.setRecurrentUlcerationId(diseaseControlData.getRecurrentUlcerationId()); + existingDiseaseLeprosy.setRecurrentTinglingId(diseaseControlData.getRecurrentTinglingId()); + existingDiseaseLeprosy.setHypopigmentedPatchId(diseaseControlData.getHypopigmentedPatchId()); + existingDiseaseLeprosy.setThickenedSkinId(diseaseControlData.getThickenedSkinId()); + existingDiseaseLeprosy.setSkinNodulesId(diseaseControlData.getSkinNodulesId()); + existingDiseaseLeprosy.setSkinPatchDiscolorationId(diseaseControlData.getSkinPatchDiscolorationId()); + existingDiseaseLeprosy.setRecurrentNumbnessId(diseaseControlData.getRecurrentNumbnessId()); + existingDiseaseLeprosy.setClawingFingersId(diseaseControlData.getClawingFingersId()); + existingDiseaseLeprosy.setTinglingNumbnessExtremitiesId(diseaseControlData.getTinglingNumbnessExtremitiesId()); + existingDiseaseLeprosy.setInabilityCloseEyelidId(diseaseControlData.getInabilityCloseEyelidId()); + existingDiseaseLeprosy.setDifficultyHoldingObjectsId(diseaseControlData.getDifficultyHoldingObjectsId()); + existingDiseaseLeprosy.setWeaknessFeetId(diseaseControlData.getWeaknessFeetId()); + + existingDiseaseLeprosy.setRecurrentUlceration(diseaseControlData.getRecurrentUlceration()); + existingDiseaseLeprosy.setRecurrentTingling(diseaseControlData.getRecurrentTingling()); + existingDiseaseLeprosy.setHypopigmentedPatch(diseaseControlData.getHypopigmentedPatch()); + existingDiseaseLeprosy.setThickenedSkin(diseaseControlData.getThickenedSkin()); + existingDiseaseLeprosy.setSkinNodules(diseaseControlData.getSkinNodules()); + existingDiseaseLeprosy.setSkinPatchDiscoloration(diseaseControlData.getSkinPatchDiscoloration()); + existingDiseaseLeprosy.setRecurrentNumbness(diseaseControlData.getRecurrentNumbness()); + existingDiseaseLeprosy.setClawingFingers(diseaseControlData.getClawingFingers()); + existingDiseaseLeprosy.setTinglingNumbnessExtremities(diseaseControlData.getTinglingNumbnessExtremities()); + existingDiseaseLeprosy.setInabilityCloseEyelid(diseaseControlData.getInabilityCloseEyelid()); + existingDiseaseLeprosy.setDifficultyHoldingObjects(diseaseControlData.getDifficultyHoldingObjects()); + existingDiseaseLeprosy.setWeaknessFeet(diseaseControlData.getWeaknessFeet()); + + diseaseLeprosyRepository.save(existingDiseaseLeprosy); // Return the updated entity return "Data update successfully"; From 42384974a298d120662059c5898e1da7e52d029e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 6 Jan 2026 16:59:47 +0530 Subject: [PATCH 029/118] add new column --- .../com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java | 5 ++++- .../java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java | 6 ++++++ .../iemr/flw/service/impl/DiseaseControlServiceImpl.java | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java b/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java index c236ffa7..10689cff 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ChronicDiseaseVisitEntity.java @@ -23,7 +23,7 @@ public class ChronicDiseaseVisitEntity { @Column(name = "form_id") private String formId; - @Column(name = "version") + @Column(name = "version") private Integer version; @Column(name = "visit_no") @@ -38,6 +38,9 @@ public class ChronicDiseaseVisitEntity { @Column(name = "treatment_start_date") private LocalDate treatmentStartDate; + @Column(name = "follow_up_date") + private LocalDate followUpDate; + @Column(name = "form_data_json", columnDefinition = "JSON") private String formDataJson; diff --git a/src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java index 7ec119c4..2a2790ad 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ChronicDiseaseVisitDTO.java @@ -1,8 +1,11 @@ package com.iemr.flw.dto.iemr; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.persistence.Column; import lombok.Data; +import java.time.LocalDate; + @Data public class ChronicDiseaseVisitDTO { @@ -27,6 +30,9 @@ public class ChronicDiseaseVisitDTO { @JsonProperty("followUpNo") private Integer followUpNo; + @Column(name = "followUpDate") + private LocalDate followUpDate; + @JsonProperty("diagnosisCodes") private String diagnosisCodes; diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index 3ba522da..d5f009ea 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -1077,10 +1077,12 @@ public List saveChronicDiseaseVisit( entity.setVersion(dto.getVersion()); entity.setVisitNo(dto.getVisitNo()); entity.setFollowUpNo(dto.getFollowUpNo()); + entity.setFollowUpDate(dto.getFollowUpDate()); entity.setDiagnosisCodes(dto.getDiagnosisCodes()); entity.setFormDataJson(dto.getFormDataJson()); entity.setUserID(jwtUtil.extractUserId(token)); entity.setCreatedBy(jwtUtil.extractUsername(token)); + entity.setUpdatedBy(jwtUtil.extractUserId(token)); if (dto.getTreatmentStartDate() != null) { @@ -1117,6 +1119,7 @@ public List getCdtfVisits(GetBenRequestHandler getBenReq dto.setVersion(entity.getVersion()); dto.setVisitNo(entity.getVisitNo()); dto.setFollowUpNo(entity.getFollowUpNo()); + dto.setFollowUpDate(entity.getFollowUpDate()); dto.setDiagnosisCodes(entity.getDiagnosisCodes()); dto.setFormDataJson(entity.getFormDataJson()); From b85db376633e4671fd367cf9bdb88e0287e981b5 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 7 Jan 2026 10:43:31 +0530 Subject: [PATCH 030/118] change release version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d87cbdec..fe37dd00 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iemr.common.flw flw-api - 3.7.0 + 3.6.2 war FLW-API From bd5071911a053c560d3916ffa0cae41b2a6838e9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 8 Jan 2026 14:32:13 +0530 Subject: [PATCH 031/118] AMM-2079 --- .../com/iemr/flw/domain/iemr/VhncForm.java | 23 +++++++++++++++++++ .../com/iemr/flw/dto/iemr/VhncFormDTO.java | 8 +++++++ .../impl/VillageLevelFormServiceImpl.java | 8 +++++++ 3 files changed, 39 insertions(+) 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 5b53b27e..858554da 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/VhncForm.java @@ -1,6 +1,7 @@ package com.iemr.flw.domain.iemr; import jakarta.persistence.*; +import jakarta.xml.bind.annotation.XmlAccessorOrder; import lombok.Data; import org.hibernate.annotations.CreationTimestamp; @@ -43,4 +44,26 @@ public class VhncForm { @Column(name = "form_type") private String formType; + + @Column(name = "village_name") + private String villageName; + + @Column(name = "anm") + private Integer anm; + + @Column(name = "aww") + private Integer aww; + + @Column(name = "no_of_pragnent_women") + private Integer noOfPragnentWoment; + + @Column(name = "no_of_lacting_mother") + private Integer noOfLactingMother; + + @Column(name = "no_of_committee") + private Integer noOfCommittee; + + @Column(name = "followup_previous") + private Boolean followupPrevius; + } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/dto/iemr/VhncFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/VhncFormDTO.java index 8a12be96..a2515b42 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/VhncFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/VhncFormDTO.java @@ -34,4 +34,12 @@ public class VhncFormDTO { private Integer noOfBeneficiariesAttended; private String image1; private String image2; + private String villageName; + private Integer anm; + private Integer aww; + private Integer noOfPragnentWoment; + private Integer noOfLactingMother; + private Integer noOfCommittee; + private Boolean followupPrevius; + } \ No newline at end of file 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 71bbdbad..8630d444 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -132,6 +132,14 @@ private Boolean saveVhncFormData(VhncFormDTO vhncFormDTO, Integer userID) { vhncForm.setImage2(vhncFormDTO.getImage2()); vhncForm.setImage1(vhncFormDTO.getImage1()); vhncForm.setPlace(vhncFormDTO.getPlace()); + vhncForm.setVillageName(vhncForm.getVillageName()); + vhncForm.setAnm(vhncForm.getAnm()); + vhncForm.setAww(vhncForm.getAww()); + vhncForm.setNoOfPragnentWoment(vhncForm.getNoOfPragnentWoment()); + vhncForm.setNoOfLactingMother(vhncForm.getNoOfLactingMother()); + vhncForm.setNoOfCommittee(vhncForm.getNoOfCommittee()); + vhncForm.setFollowupPrevius(vhncForm.getFollowupPrevius()); + vhncForm.setNoOfBeneficiariesAttended(vhncFormDTO.getNoOfBeneficiariesAttended()); vhncForm.setFormType("VHNC"); From fa30de33c8879f6af1a579752975f8e9d3df7f8a Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 9 Jan 2026 16:23:50 +0530 Subject: [PATCH 032/118] AMM-2079 --- .../service/impl/VillageLevelFormServiceImpl.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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 8630d444..9efd528b 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -132,13 +132,13 @@ private Boolean saveVhncFormData(VhncFormDTO vhncFormDTO, Integer userID) { vhncForm.setImage2(vhncFormDTO.getImage2()); vhncForm.setImage1(vhncFormDTO.getImage1()); vhncForm.setPlace(vhncFormDTO.getPlace()); - vhncForm.setVillageName(vhncForm.getVillageName()); - vhncForm.setAnm(vhncForm.getAnm()); - vhncForm.setAww(vhncForm.getAww()); - vhncForm.setNoOfPragnentWoment(vhncForm.getNoOfPragnentWoment()); - vhncForm.setNoOfLactingMother(vhncForm.getNoOfLactingMother()); - vhncForm.setNoOfCommittee(vhncForm.getNoOfCommittee()); - vhncForm.setFollowupPrevius(vhncForm.getFollowupPrevius()); + vhncForm.setVillageName(vhncFormDTO.getVillageName()); + vhncForm.setAnm(vhncFormDTO.getAnm()); + vhncForm.setAww(vhncFormDTO.getAww()); + vhncForm.setNoOfPragnentWoment(vhncFormDTO.getNoOfPragnentWoment()); + vhncForm.setNoOfLactingMother(vhncFormDTO.getNoOfLactingMother()); + vhncForm.setNoOfCommittee(vhncFormDTO.getNoOfCommittee()); + vhncForm.setFollowupPrevius(vhncFormDTO.getFollowupPrevius()); vhncForm.setNoOfBeneficiariesAttended(vhncFormDTO.getNoOfBeneficiariesAttended()); From 624752175b00dd1488c63b9a9de0e506462e60be Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Fri, 9 Jan 2026 16:31:40 +0530 Subject: [PATCH 033/118] Update pom.xml --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index fe37dd00..42245b93 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iemr.common.flw flw-api - 3.6.2 + 3.7.0 war FLW-API @@ -420,4 +420,4 @@ - \ No newline at end of file + From ec9f17bb82568944e11c18cb05ffe2fd28ba7470 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 9 Jan 2026 17:03:04 +0530 Subject: [PATCH 034/118] Amm-2081 --- .../com/iemr/flw/domain/iemr/VHNDForm.java | 33 +++++++++++++++++++ .../com/iemr/flw/dto/iemr/VHNDFormDTO.java | 12 +++++++ .../impl/VillageLevelFormServiceImpl.java | 10 ++++++ 3 files changed, 55 insertions(+) diff --git a/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java b/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java index 488b33c4..758cc449 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/VHNDForm.java @@ -37,6 +37,39 @@ public class VHNDForm { @Column(name = "form_type") private String formType; + @Column(name = "vhnd_place_id") + private Integer vhndPlaceId; + + @Column(name = "pregnant_women_anc") + private String pregnantWomenAnc; + + @Column(name = "lactating_mothers_pnc") + private String lactatingMothersPnc; + + @Column(name = "children_immunization") + private String childrenImmunization; + + @Column(name = "select_all_education") + private Boolean selectAllEducation; + + @Column(name = "knowledge_balanced_diet") + private String knowledgeBalancedDiet; + + @Column(name = "care_during_pregnancy") + private String careDuringPregnancy; + + @Column(name = "importance_breastfeeding") + private String importanceBreastfeeding; + + @Column(name = "complementary_feeding") + private String complementaryFeeding; + + @Column(name = "hygiene_sanitation") + private String hygieneSanitation; + + @Column(name = "family_planning_healthcare") + private String familyPlanningHealthcare; + @Column(name = "created_by") private String createdBy; 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 0dec7976..bee7f247 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/VHNDFormDTO.java @@ -24,6 +24,7 @@ */ package com.iemr.flw.dto.iemr; +import jakarta.persistence.Column; import lombok.Data; @Data @@ -33,6 +34,17 @@ public class VHNDFormDTO { private Integer noOfBeneficiariesAttended; private String image1; private String image2; + private Integer vhndPlaceId; + private String pregnantWomenAnc; + private String lactatingMothersPnc; + private String childrenImmunization; + private Boolean selectAllEducation; + private String knowledgeBalancedDiet; + private String careDuringPregnancy; + private String importanceBreastfeeding; + private String complementaryFeeding; + private String hygieneSanitation; + private String familyPlanningHealthcare; } 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 9efd528b..a4df2b7d 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -210,6 +210,16 @@ private Boolean saveVhndFormData(VHNDFormDTO vhndFormDTO, Integer userID) { vhndForm.setImage1(vhndFormDTO.getImage1()); vhndForm.setPlace(vhndFormDTO.getPlace()); vhndForm.setNoOfBeneficiariesAttended(vhndFormDTO.getNoOfBeneficiariesAttended()); + vhndForm.setPregnantWomenAnc(vhndFormDTO.getPregnantWomenAnc()); + vhndForm.setLactatingMothersPnc(vhndFormDTO.getLactatingMothersPnc()); + vhndForm.setChildrenImmunization(vhndFormDTO.getChildrenImmunization()); + vhndForm.setSelectAllEducation(vhndFormDTO.getSelectAllEducation()); + vhndForm.setKnowledgeBalancedDiet(vhndFormDTO.getKnowledgeBalancedDiet()); + vhndForm.setCareDuringPregnancy(vhndFormDTO.getCareDuringPregnancy()); + vhndForm.setImportanceBreastfeeding(vhndFormDTO.getImportanceBreastfeeding()); + vhndForm.setComplementaryFeeding(vhndFormDTO.getComplementaryFeeding()); + vhndForm.setHygieneSanitation(vhndFormDTO.getHygieneSanitation()); + vhndForm.setFamilyPlanningHealthcare(vhndFormDTO.getFamilyPlanningHealthcare()); vhndForm.setFormType("VHND"); vhndRepo.save(vhndForm); checkAndAddIncentives(vhndForm.getVhndDate(), vhndForm.getUserId(), "VHND_PARTICIPATION", vhndForm.getCreatedBy()); From 9f0bfa571a125cbe829e81c0f554de28e31e4c3b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 9 Jan 2026 19:02:26 +0530 Subject: [PATCH 035/118] fix auth --- .../flw/controller/VillageLevelFormController.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java b/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java index ddbb7a76..09df6833 100644 --- a/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java +++ b/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java @@ -36,13 +36,13 @@ import java.util.Map; @RestController -@RequestMapping(value = "/forms/villageLevel", headers = "Authorization") +@RequestMapping(value = "/forms/villageLevel") public class VillageLevelFormController { @Autowired private VillageLevelFormService villageLevelFormService; - @RequestMapping(value = "vhnd/saveAll", method = RequestMethod.POST, headers = "Authorization") + @RequestMapping(value = "vhnd/saveAll") public ResponseEntity> saveVhndForm(@RequestBody VhndDto dto) { Map response = new HashMap<>(); if (!dto.getEntries().isEmpty()) { @@ -64,7 +64,7 @@ public ResponseEntity> saveVhndForm(@RequestBody VhndDto dto } - @RequestMapping(value = "vhnc/saveAll", method = RequestMethod.POST, headers = "Authorization") + @RequestMapping(value = "vhnc/saveAll", method = RequestMethod.POST) public ResponseEntity> saveVhncForm(@RequestBody VhncDto dto) { Map response = new HashMap<>(); @@ -87,7 +87,7 @@ public ResponseEntity> saveVhncForm(@RequestBody VhncDto dto } - @RequestMapping(value = "phc/saveAll", method = RequestMethod.POST, headers = "Authorization") + @RequestMapping(value = "phc/saveAll", method = RequestMethod.POST) public ResponseEntity> savePhcForm(@RequestBody PhcReviewMeetingDTO dto) { Map response = new HashMap<>(); @@ -109,7 +109,7 @@ public ResponseEntity> savePhcForm(@RequestBody PhcReviewMee } - @RequestMapping(value = "ahd/saveAll", method = RequestMethod.POST, headers = "Authorization") + @RequestMapping(value = "ahd/saveAll", method = RequestMethod.POST) public ResponseEntity> saveAhdForm(@RequestBody AhdMeetingDto dto) { Map response = new HashMap<>(); @@ -129,7 +129,7 @@ public ResponseEntity> saveAhdForm(@RequestBody AhdMeetingDt } - @RequestMapping(value = "deworming/saveAll", method = RequestMethod.POST, headers = "Authorization") + @RequestMapping(value = "deworming/saveAll", method = RequestMethod.POST) public ResponseEntity> saveDewormingForm(@RequestBody DewormingDto dto) { Map response = new HashMap<>(); @@ -150,7 +150,7 @@ public ResponseEntity> saveDewormingForm(@RequestBody Deworm } - @RequestMapping(value = "getAll", method = RequestMethod.POST, headers = "Authorization") + @RequestMapping(value = "getAll", method = RequestMethod.POST) public ResponseEntity> getVillageLevelFormData(@RequestBody GetVillageLevelRequestHandler getVillageLevelRequestHandler) { Map response = new LinkedHashMap<>(); From e8930c696c190ac94c7ccf823fd4c4b56cbecf7f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 9 Jan 2026 19:03:02 +0530 Subject: [PATCH 036/118] fix auth --- .../com/iemr/flw/controller/VillageLevelFormController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java b/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java index 09df6833..884f794d 100644 --- a/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java +++ b/src/main/java/com/iemr/flw/controller/VillageLevelFormController.java @@ -42,7 +42,7 @@ public class VillageLevelFormController { @Autowired private VillageLevelFormService villageLevelFormService; - @RequestMapping(value = "vhnd/saveAll") + @RequestMapping(value = "vhnd/saveAll",method = RequestMethod.POST) public ResponseEntity> saveVhndForm(@RequestBody VhndDto dto) { Map response = new HashMap<>(); if (!dto.getEntries().isEmpty()) { From 4bda32abd241f5856a7f830baadd441bef9108ce Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Jan 2026 11:21:51 +0530 Subject: [PATCH 037/118] enhancement in mam meeting api add new column AMM-2102 --- .../flw/controller/MaaMeetingController.java | 9 +++ .../com/iemr/flw/domain/iemr/MaaMeeting.java | 13 ++++ .../flw/dto/iemr/MaaMeetingRequestDTO.java | 6 ++ .../flw/dto/iemr/MaaMeetingResponseDTO.java | 5 ++ .../iemr/flw/service/MaaMeetingService.java | 70 ++++++++++++------- 5 files changed, 79 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java index 0c73d46e..1ed1bb01 100644 --- a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java +++ b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java @@ -35,6 +35,10 @@ public MaaMeetingController(MaaMeetingService service) { @PostMapping(value = "/saveAll", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity saveMeeting( + @RequestPart("villageName") String villageName, + @RequestPart("noOfPragnentWoment") String noOfPragnentWomen, + @RequestPart("noOfLactingMother") String noOfLactingMother, + @RequestPart("mitaninActivityCheckList") List mitaninActivityCheckList, @RequestPart("meetingDate") String meetingDate, @RequestPart("place") String place, @RequestPart("participants") String participants, @@ -48,6 +52,11 @@ public ResponseEntity saveMeeting( dto.setParticipants(Integer.parseInt(participants)); dto.setAshaId(Integer.parseInt(ashaId)); dto.setCreatedBY(createdBy); + dto.setVillageName(villageName); + dto.setNoOfLactingMother(Integer.parseInt(noOfLactingMother)); + dto.setNoOfPragnentWomen(Integer.parseInt(noOfPragnentWomen)); + dto.setMitaninActivityCheckList(mitaninActivityCheckList); + dto.setMeetingImages(meetingImages != null ? meetingImages.toArray(new MultipartFile[0]) : null); if (dto != null) { service.saveMeeting(dto); diff --git a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java index 2bfb2970..0e843714 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java @@ -5,6 +5,7 @@ import java.sql.Timestamp; import java.time.LocalDate; +import java.util.List; @Entity @Data @@ -39,6 +40,18 @@ public class MaaMeeting { @Column(name = "meeting_images", columnDefinition = "LONGTEXT") private String meetingImagesJson; + @Column(name = "village_name") + private String villageName; + + @Column(name = "no_of_pragnent_women") + private Integer noOfPragnentWomen; + + @Column(name = "no_of_lacting_mother") + private Integer noOfLactingMother; + + @Column(name = "mitanin_activity_checkList") + private String mitaninActivityCheckList; + @Column(name = "created_by") private String createdBy; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java index 9d4c19b1..8211be66 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java @@ -1,10 +1,12 @@ package com.iemr.flw.dto.iemr; import lombok.Data; +import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.multipart.MultipartFile; import java.sql.Timestamp; import java.time.LocalDate; +import java.util.List; @Data public class MaaMeetingRequestDTO { @@ -14,5 +16,9 @@ public class MaaMeetingRequestDTO { private Integer participants; private MultipartFile[] meetingImages; // up to 5 images private Integer ashaId; + private String villageName; + private Integer noOfPragnentWomen; + private Integer noOfLactingMother; + private List mitaninActivityCheckList; private String createdBY; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java index 9ba81ad8..0f1f6e67 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java @@ -35,6 +35,11 @@ public class MaaMeetingResponseDTO { example = "[\"iVBORw0KGgoAAAANSUhEUgAA...\", \"iVBORw0KGgoAAAANSUhEUgBB...\"]") private List meetingImages; + private String villageName; + private String noOfPragnentWomen; + private String noOfLactingMother; + private List mitaninActivityCheckList; + @Column(name = "created_by") private String createdBy; diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 2c48df26..97a5a602 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -46,6 +46,12 @@ public MaaMeeting saveMeeting(MaaMeetingRequestDTO req) throws Exception { meeting.setPlace(req.getPlace()); meeting.setParticipants(req.getParticipants()); meeting.setAshaId(req.getAshaId()); + meeting.setNoOfLactingMother(req.getNoOfLactingMother()); + meeting.setNoOfPragnentWomen(req.getNoOfPragnentWomen()); + meeting.setVillageName(req.getVillageName()); + String checklistJson = + objectMapper.writeValueAsString(req.getMitaninActivityCheckList()); + meeting.setMitaninActivityCheckList(checklistJson); meeting.setCreatedBy(req.getCreatedBY()); // Convert meeting images to Base64 JSON @@ -102,7 +108,7 @@ public MaaMeeting updateMeeting(MaaMeetingRequestDTO req) throws JsonProcessingE } checkAndAddIncentive(existingMeeting); - if(existingMeeting.getMeetingImagesJson()!=null){ + if (existingMeeting.getMeetingImagesJson() != null) { checkAndUpdateIncentive(existingMeeting); } @@ -119,8 +125,6 @@ private String convertToBase64(MultipartFile file) { } - - public List getAllMeetings(GetBenRequestHandler getBenRequestHandler) throws Exception { List meetings = repository.findByAshaId(getBenRequestHandler.getAshaId()); @@ -131,13 +135,28 @@ public List getAllMeetings(GetBenRequestHandler getBenReq dto.setPlace(meeting.getPlace()); dto.setParticipants(meeting.getParticipants()); dto.setAshaId(meeting.getAshaId()); + dto.setVillageName(meeting.getVillageName()); + dto.setNoOfLactingMother(String.valueOf(meeting.getNoOfLactingMother())); + dto.setNoOfPragnentWomen(String.valueOf(meeting.getNoOfPragnentWomen())); + List checklist = + null; + try { + checklist = objectMapper.readValue( + meeting.getMitaninActivityCheckList(), + new TypeReference>() {} + ); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + dto.setMitaninActivityCheckList(checklist); dto.setCreatedBy(meeting.getCreatedBy()); try { if (meeting.getMeetingImagesJson() != null) { List base64Images = objectMapper.readValue( meeting.getMeetingImagesJson(), - new TypeReference>() {} + new TypeReference>() { + } ); dto.setMeetingImages(base64Images); @@ -151,45 +170,48 @@ public List getAllMeetings(GetBenRequestHandler getBenReq return dto; }).collect(Collectors.toList()); } - private void updatePendingActivity(Integer userId,Long recordId,Long activityId,String moduleName){ + + private void updatePendingActivity(Integer userId, Long recordId, Long activityId, String moduleName) { IncentivePendingActivity incentivePendingActivity = new IncentivePendingActivity(); incentivePendingActivity.setActivityId(activityId); incentivePendingActivity.setRecordId(recordId); incentivePendingActivity.setUserId(userId); incentivePendingActivity.setModuleName(moduleName); - if(incentivePendingActivity!=null){ + if (incentivePendingActivity != null) { incentivePendingActivityRepository.save(incentivePendingActivity); } } + private void checkAndUpdateIncentive(MaaMeeting meeting) { IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); - if(incentiveActivityAM!=null){ - updateIncentive(incentiveActivityAM,meeting); + if (incentiveActivityAM != null) { + updateIncentive(incentiveActivityAM, meeting); } - if(incentiveActivityCH!=null){ - updateIncentive(incentiveActivityCH,meeting); + if (incentiveActivityCH != null) { + updateIncentive(incentiveActivityCH, meeting); } } + private void checkAndAddIncentive(MaaMeeting meeting) { IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); - if(incentiveActivityAM!=null){ - addIncentive(incentiveActivityAM,meeting); - } - if(incentiveActivityCH!=null){ - addIncentive(incentiveActivityCH,meeting); + if (incentiveActivityAM != null) { + addIncentive(incentiveActivityAM, meeting); + } + if (incentiveActivityCH != null) { + addIncentive(incentiveActivityCH, meeting); - } + } } - private void addIncentive(IncentiveActivity incentiveActivity,MaaMeeting meeting){ + private void addIncentive(IncentiveActivity incentiveActivity, MaaMeeting meeting) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L,meeting.getAshaId()); + .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L, meeting.getAshaId()); if (record == null) { record = new IncentiveActivityRecord(); @@ -202,11 +224,11 @@ record = new IncentiveActivityRecord(); record.setUpdatedBy(meeting.getCreatedBy()); record.setBenId(0L); record.setAshaId(meeting.getAshaId()); - if(meeting.getMeetingImagesJson()!=null){ + if (meeting.getMeetingImagesJson() != null) { record.setIsEligible(true); - }else { + } else { record.setIsEligible(false); - updatePendingActivity(meeting.getAshaId(),meeting.getId(),record.getId(),"MAA_MEETING"); + updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); } record.setAmount(Long.valueOf(incentiveActivity.getRate())); @@ -215,11 +237,11 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(IncentiveActivity incentiveActivity,MaaMeeting meeting){ + private void updateIncentive(IncentiveActivity incentiveActivity, MaaMeeting meeting) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L,meeting.getAshaId()); + .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L, meeting.getAshaId()); - if (record!= null) { + if (record != null) { record = new IncentiveActivityRecord(); record.setIsEligible(true); recordRepo.save(record); From 27d624dd803b1c7009c00bf9ad2362309756a16e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Jan 2026 12:05:27 +0530 Subject: [PATCH 038/118] fix column type issue --- .../flw/controller/MaaMeetingController.java | 2 +- .../iemr/flw/dto/iemr/MaaMeetingRequestDTO.java | 2 +- .../iemr/flw/dto/iemr/MaaMeetingResponseDTO.java | 2 +- .../com/iemr/flw/service/MaaMeetingService.java | 16 ++-------------- 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java index 1ed1bb01..83741682 100644 --- a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java +++ b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java @@ -38,7 +38,7 @@ public ResponseEntity saveMeeting( @RequestPart("villageName") String villageName, @RequestPart("noOfPragnentWoment") String noOfPragnentWomen, @RequestPart("noOfLactingMother") String noOfLactingMother, - @RequestPart("mitaninActivityCheckList") List mitaninActivityCheckList, + @RequestPart("mitaninActivityCheckList") String mitaninActivityCheckList, @RequestPart("meetingDate") String meetingDate, @RequestPart("place") String place, @RequestPart("participants") String participants, diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java index 8211be66..e4ca6af5 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java @@ -19,6 +19,6 @@ public class MaaMeetingRequestDTO { private String villageName; private Integer noOfPragnentWomen; private Integer noOfLactingMother; - private List mitaninActivityCheckList; + private String mitaninActivityCheckList; private String createdBY; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java index 0f1f6e67..b56356c2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java @@ -38,7 +38,7 @@ public class MaaMeetingResponseDTO { private String villageName; private String noOfPragnentWomen; private String noOfLactingMother; - private List mitaninActivityCheckList; + private String mitaninActivityCheckList; @Column(name = "created_by") private String createdBy; diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 97a5a602..9c103078 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -49,9 +49,7 @@ public MaaMeeting saveMeeting(MaaMeetingRequestDTO req) throws Exception { meeting.setNoOfLactingMother(req.getNoOfLactingMother()); meeting.setNoOfPragnentWomen(req.getNoOfPragnentWomen()); meeting.setVillageName(req.getVillageName()); - String checklistJson = - objectMapper.writeValueAsString(req.getMitaninActivityCheckList()); - meeting.setMitaninActivityCheckList(checklistJson); + meeting.setMitaninActivityCheckList(req.getMitaninActivityCheckList()); meeting.setCreatedBy(req.getCreatedBY()); // Convert meeting images to Base64 JSON @@ -138,17 +136,7 @@ public List getAllMeetings(GetBenRequestHandler getBenReq dto.setVillageName(meeting.getVillageName()); dto.setNoOfLactingMother(String.valueOf(meeting.getNoOfLactingMother())); dto.setNoOfPragnentWomen(String.valueOf(meeting.getNoOfPragnentWomen())); - List checklist = - null; - try { - checklist = objectMapper.readValue( - meeting.getMitaninActivityCheckList(), - new TypeReference>() {} - ); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - dto.setMitaninActivityCheckList(checklist); + dto.setMitaninActivityCheckList(meeting.getMitaninActivityCheckList()); dto.setCreatedBy(meeting.getCreatedBy()); try { From 862d708435b4920bdcab5cc5e9862cdf76972baf Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Jan 2026 12:12:33 +0530 Subject: [PATCH 039/118] AMM-2100 --- .../java/com/iemr/flw/domain/iemr/PHCReviewForm.java | 12 ++++++++++++ .../iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java b/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java index 50ec3375..d65ff551 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java @@ -42,6 +42,18 @@ public class PHCReviewForm { @Column(name = "created_date", updatable = false) private Timestamp createdDate; + @Column(name = "village_name ") + private String villageName; + + @Column(name = "mitanin_history") + private String mitaninHistory; + + @Column(name = "mitanin_activity_checkList") + private String mitaninActivityCheckList; + + @Column(name = "place_Id") + private Integer placeId; + @Column(name = "form_type") private String formType; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java index 00830988..e94e34b2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java @@ -1,5 +1,6 @@ package com.iemr.flw.dto.iemr; +import jakarta.persistence.Column; import lombok.Data; @Data @@ -8,6 +9,10 @@ public class PhcReviewMeetingFormDTO { private String phcReviewDate; private String place; private Integer noOfBeneficiariesAttended; + private String villageName; + private String mitaninHistory; + private String mitaninActivityCheckList; + private Integer placeId; private String image1; private String image2; From d6c0aa0852cffd0abf190da6c9154c5bc07db976 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Jan 2026 12:12:54 +0530 Subject: [PATCH 040/118] AMM-2100 --- .../iemr/flw/service/impl/VillageLevelFormServiceImpl.java | 4 ++++ 1 file changed, 4 insertions(+) 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 a4df2b7d..fbaff0d5 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -157,6 +157,10 @@ private Boolean savePhcForm(PhcReviewMeetingFormDTO dto, Integer userID) { phcReviewForm.setPlace(dto.getPlace()); phcReviewForm.setNoOfBeneficiariesAttended(dto.getNoOfBeneficiariesAttended()); phcReviewForm.setImage1(dto.getImage1()); + phcReviewForm.setVillageName(dto.getVillageName()); + phcReviewForm.setMitaninActivityCheckList(dto.getMitaninActivityCheckList()); + phcReviewForm.setPlaceId(dto.getPlaceId()); + phcReviewForm.setMitaninHistory(dto.getMitaninHistory()); phcReviewForm.setImage2(dto.getImage2()); phcReviewForm.setFormType("PHC"); phcReviewFormRepo.save(phcReviewForm); From 18094526fee9dbf92e278a7fbc5a175b512480a7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Jan 2026 12:14:31 +0530 Subject: [PATCH 041/118] AMM-2100 --- src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java | 1 + src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java | 1 - src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java | 1 + .../com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java | 1 + 4 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java b/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java index d65ff551..4dea0ce7 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PHCReviewForm.java @@ -56,4 +56,5 @@ public class PHCReviewForm { @Column(name = "form_type") private String formType; + } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java index 4efc6dcc..a943affe 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningLeprosy.java @@ -26,7 +26,6 @@ import jakarta.persistence.*; import lombok.Data; - import java.sql.Timestamp; import java.util.Date; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java index e94e34b2..b08386c6 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PhcReviewMeetingFormDTO.java @@ -17,4 +17,5 @@ public class PhcReviewMeetingFormDTO { private String image2; + } \ No newline at end of file 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 fbaff0d5..c64654d3 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -232,6 +232,7 @@ private Boolean saveVhndFormData(VHNDFormDTO vhndFormDTO, Integer userID) { } + @Override public List getAll(GetVillageLevelRequestHandler getVillageLevelRequestHandler) { if (Objects.equals(getVillageLevelRequestHandler.getFormType(), "VHND")) { From 40d8b228b098cc283f614ae7375766684c6a4496 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Jan 2026 18:16:03 +0530 Subject: [PATCH 042/118] AMM-2102 --- .../iemr/flw/controller/MaaMeetingController.java | 2 ++ .../java/com/iemr/flw/domain/iemr/MaaMeeting.java | 3 +++ .../com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java | 1 + .../iemr/flw/dto/iemr/MaaMeetingResponseDTO.java | 1 + .../com/iemr/flw/service/MaaMeetingService.java | 13 +++++++++++++ 5 files changed, 20 insertions(+) diff --git a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java index 83741682..0b247fe3 100644 --- a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java +++ b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java @@ -38,6 +38,7 @@ public ResponseEntity saveMeeting( @RequestPart("villageName") String villageName, @RequestPart("noOfPragnentWoment") String noOfPragnentWomen, @RequestPart("noOfLactingMother") String noOfLactingMother, + @RequestPart("isSelectAll") String isSelectAll, @RequestPart("mitaninActivityCheckList") String mitaninActivityCheckList, @RequestPart("meetingDate") String meetingDate, @RequestPart("place") String place, @@ -53,6 +54,7 @@ public ResponseEntity saveMeeting( dto.setAshaId(Integer.parseInt(ashaId)); dto.setCreatedBY(createdBy); dto.setVillageName(villageName); + dto.setIsSelectAll(isSelectAll); dto.setNoOfLactingMother(Integer.parseInt(noOfLactingMother)); dto.setNoOfPragnentWomen(Integer.parseInt(noOfPragnentWomen)); dto.setMitaninActivityCheckList(mitaninActivityCheckList); diff --git a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java index 0e843714..90cca318 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java @@ -52,6 +52,9 @@ public class MaaMeeting { @Column(name = "mitanin_activity_checkList") private String mitaninActivityCheckList; + @Column(name = "is_select_all") + private Boolean isSelectAll; + @Column(name = "created_by") private String createdBy; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java index e4ca6af5..b0a67e55 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java @@ -20,5 +20,6 @@ public class MaaMeetingRequestDTO { private Integer noOfPragnentWomen; private Integer noOfLactingMother; private String mitaninActivityCheckList; + private String isSelectAll; private String createdBY; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java index b56356c2..29c57167 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java @@ -39,6 +39,7 @@ public class MaaMeetingResponseDTO { private String noOfPragnentWomen; private String noOfLactingMother; private String mitaninActivityCheckList; + private String isSelectAll; @Column(name = "created_by") private String createdBy; diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 9c103078..350c9125 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -50,6 +50,12 @@ public MaaMeeting saveMeeting(MaaMeetingRequestDTO req) throws Exception { meeting.setNoOfPragnentWomen(req.getNoOfPragnentWomen()); meeting.setVillageName(req.getVillageName()); meeting.setMitaninActivityCheckList(req.getMitaninActivityCheckList()); + if(Objects.equals(req.getIsSelectAll(), "Yes")){ + meeting.setIsSelectAll(true); + }else { + meeting.setIsSelectAll(false); + + } meeting.setCreatedBy(req.getCreatedBY()); // Convert meeting images to Base64 JSON @@ -137,6 +143,13 @@ public List getAllMeetings(GetBenRequestHandler getBenReq dto.setNoOfLactingMother(String.valueOf(meeting.getNoOfLactingMother())); dto.setNoOfPragnentWomen(String.valueOf(meeting.getNoOfPragnentWomen())); dto.setMitaninActivityCheckList(meeting.getMitaninActivityCheckList()); + if(meeting.getIsSelectAll()){ + dto.setIsSelectAll("Yes"); + + }else { + dto.setIsSelectAll("No"); + + } dto.setCreatedBy(meeting.getCreatedBy()); try { From de29668af3620e728f46c1837a69938ace87b247 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 13 Jan 2026 18:24:41 +0530 Subject: [PATCH 043/118] AMM-2102 --- .../java/com/iemr/flw/domain/iemr/MaaMeeting.java | 2 +- .../com/iemr/flw/service/MaaMeetingService.java | 14 ++------------ 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java index 90cca318..364ecb57 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java @@ -53,7 +53,7 @@ public class MaaMeeting { private String mitaninActivityCheckList; @Column(name = "is_select_all") - private Boolean isSelectAll; + private String isSelectAll; @Column(name = "created_by") private String createdBy; diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 350c9125..631398f9 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -50,12 +50,8 @@ public MaaMeeting saveMeeting(MaaMeetingRequestDTO req) throws Exception { meeting.setNoOfPragnentWomen(req.getNoOfPragnentWomen()); meeting.setVillageName(req.getVillageName()); meeting.setMitaninActivityCheckList(req.getMitaninActivityCheckList()); - if(Objects.equals(req.getIsSelectAll(), "Yes")){ - meeting.setIsSelectAll(true); - }else { - meeting.setIsSelectAll(false); + meeting.setIsSelectAll(req.getIsSelectAll()); - } meeting.setCreatedBy(req.getCreatedBY()); // Convert meeting images to Base64 JSON @@ -143,13 +139,7 @@ public List getAllMeetings(GetBenRequestHandler getBenReq dto.setNoOfLactingMother(String.valueOf(meeting.getNoOfLactingMother())); dto.setNoOfPragnentWomen(String.valueOf(meeting.getNoOfPragnentWomen())); dto.setMitaninActivityCheckList(meeting.getMitaninActivityCheckList()); - if(meeting.getIsSelectAll()){ - dto.setIsSelectAll("Yes"); - - }else { - dto.setIsSelectAll("No"); - - } + dto.setIsSelectAll(meeting.getIsSelectAll()); dto.setCreatedBy(meeting.getCreatedBy()); try { From 07e0cd5b4e85480d814f82bcfde919e8e7e062e8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Jan 2026 12:08:26 +0530 Subject: [PATCH 044/118] AMM-2102 remove select all column --- .../java/com/iemr/flw/controller/MaaMeetingController.java | 2 -- src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java | 3 --- src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java | 1 - src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java | 1 - src/main/java/com/iemr/flw/service/MaaMeetingService.java | 2 -- 5 files changed, 9 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java index 0b247fe3..83741682 100644 --- a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java +++ b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java @@ -38,7 +38,6 @@ public ResponseEntity saveMeeting( @RequestPart("villageName") String villageName, @RequestPart("noOfPragnentWoment") String noOfPragnentWomen, @RequestPart("noOfLactingMother") String noOfLactingMother, - @RequestPart("isSelectAll") String isSelectAll, @RequestPart("mitaninActivityCheckList") String mitaninActivityCheckList, @RequestPart("meetingDate") String meetingDate, @RequestPart("place") String place, @@ -54,7 +53,6 @@ public ResponseEntity saveMeeting( dto.setAshaId(Integer.parseInt(ashaId)); dto.setCreatedBY(createdBy); dto.setVillageName(villageName); - dto.setIsSelectAll(isSelectAll); dto.setNoOfLactingMother(Integer.parseInt(noOfLactingMother)); dto.setNoOfPragnentWomen(Integer.parseInt(noOfPragnentWomen)); dto.setMitaninActivityCheckList(mitaninActivityCheckList); diff --git a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java index 364ecb57..0e843714 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java +++ b/src/main/java/com/iemr/flw/domain/iemr/MaaMeeting.java @@ -52,9 +52,6 @@ public class MaaMeeting { @Column(name = "mitanin_activity_checkList") private String mitaninActivityCheckList; - @Column(name = "is_select_all") - private String isSelectAll; - @Column(name = "created_by") private String createdBy; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java index b0a67e55..e4ca6af5 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingRequestDTO.java @@ -20,6 +20,5 @@ public class MaaMeetingRequestDTO { private Integer noOfPragnentWomen; private Integer noOfLactingMother; private String mitaninActivityCheckList; - private String isSelectAll; private String createdBY; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java index 29c57167..b56356c2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/MaaMeetingResponseDTO.java @@ -39,7 +39,6 @@ public class MaaMeetingResponseDTO { private String noOfPragnentWomen; private String noOfLactingMother; private String mitaninActivityCheckList; - private String isSelectAll; @Column(name = "created_by") private String createdBy; diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 631398f9..d3319821 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -50,7 +50,6 @@ public MaaMeeting saveMeeting(MaaMeetingRequestDTO req) throws Exception { meeting.setNoOfPragnentWomen(req.getNoOfPragnentWomen()); meeting.setVillageName(req.getVillageName()); meeting.setMitaninActivityCheckList(req.getMitaninActivityCheckList()); - meeting.setIsSelectAll(req.getIsSelectAll()); meeting.setCreatedBy(req.getCreatedBY()); @@ -139,7 +138,6 @@ public List getAllMeetings(GetBenRequestHandler getBenReq dto.setNoOfLactingMother(String.valueOf(meeting.getNoOfLactingMother())); dto.setNoOfPragnentWomen(String.valueOf(meeting.getNoOfPragnentWomen())); dto.setMitaninActivityCheckList(meeting.getMitaninActivityCheckList()); - dto.setIsSelectAll(meeting.getIsSelectAll()); dto.setCreatedBy(meeting.getCreatedBy()); try { From 33e1faf29cd831b1d81f85920624ccbef24139a3 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 14 Jan 2026 12:47:46 +0530 Subject: [PATCH 045/118] fix pending incentive code --- src/main/java/com/iemr/flw/service/MaaMeetingService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index d3319821..cb23b7b9 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -217,7 +217,7 @@ record = new IncentiveActivityRecord(); record.setIsEligible(true); } else { record.setIsEligible(false); - updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); + // updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); } record.setAmount(Long.valueOf(incentiveActivity.getRate())); From e310c5c442866e610bc48c65149f8c2f4e86a9d2 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:29:22 +0530 Subject: [PATCH 046/118] api for ORS campaign AMM-2104 --- .../flw/controller/CampaignController.java | 78 ++++++++++++++++ .../com/iemr/flw/domain/iemr/CampaignOrs.java | 63 +++++++++++++ .../com/iemr/flw/dto/iemr/OrsCampaignDTO.java | 10 ++ .../iemr/flw/dto/iemr/OrsCampaignListDTO.java | 16 ++++ .../iemr/flw/repo/iemr/OrsCampaignRepo.java | 17 ++++ .../com/iemr/flw/service/CampaignService.java | 11 +++ .../flw/service/impl/CampaignServiceImpl.java | 92 +++++++++++++++++++ 7 files changed, 287 insertions(+) create mode 100644 src/main/java/com/iemr/flw/controller/CampaignController.java create mode 100644 src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/OrsCampaignDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/OrsCampaignRepo.java create mode 100644 src/main/java/com/iemr/flw/service/CampaignService.java create mode 100644 src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java new file mode 100644 index 00000000..3ee70aee --- /dev/null +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -0,0 +1,78 @@ +package com.iemr.flw.controller; + +import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import com.iemr.flw.service.CampaignService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping(value = "/Campaign") +public class CampaignController { + private final Logger logger = LoggerFactory.getLogger(CampaignController.class); + + @Autowired + private CampaignService campaignService; + + @RequestMapping(value = "ors/distribution/saveAll", method = RequestMethod.POST) + public ResponseEntity> saveOrsDistribution(@RequestBody List orsCampaignDTO, @RequestHeader(value = "jwtToken") String token) { + + Map response = new LinkedHashMap<>(); + + try { + Object result = campaignService.saveOrsCampaign(orsCampaignDTO,token); + + + if (result != null) { + response.put("statusCode", HttpStatus.OK.value()); + response.put("data", result); + return ResponseEntity.ok(response); + } else { + response.put("statusCode", HttpStatus.NOT_FOUND.value()); + response.put("message", "No records found"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + + } catch (Exception e) { + logger.error("Error save ors distribution :", e); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + + @RequestMapping(value = "ors/distribution/getAll", method = RequestMethod.POST) + public ResponseEntity> getAllOrsDistribution(@RequestHeader(value = "jwtToken") String token) { + + Map response = new LinkedHashMap<>(); + + try { + List result = campaignService.getOrsCampaign(token); + + + if (result != null) { + response.put("statusCode", HttpStatus.OK.value()); + response.put("data", result); + return ResponseEntity.ok(response); + } else { + response.put("statusCode", HttpStatus.NOT_FOUND.value()); + response.put("message", "No records found"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + + } catch (Exception e) { + logger.error("Error save ors distribution :", e); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } +} diff --git a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java new file mode 100644 index 00000000..b9fab48e --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java @@ -0,0 +1,63 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Entity +@Table(name = "campaign_ors") +@Data +public class CampaignOrs { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "start_date", nullable = false) + private LocalDate startDate; + + @Column(name = "end_date", nullable = false) + private LocalDate endDate; + + @Column(name = "user_id", nullable = false) + private Integer userId; + + @Column(name = "number_of_families", nullable = false) + private Integer numberOfFamilies = 0; + + /** + * Store JSON array like ["img1.jpg","img2.jpg"] + * MySQL JSON column + */ + @Column(name = "campaign_photos", columnDefinition = "json") + private String campaignPhotos; + + @Column(name = "created_by", length = 200) + private String createdBy; + + @Column(name = "updated_by", length = 200) + private String updatedBy; + + @Column(name = "created_date", updatable = false) + private LocalDateTime createdDate; + + @Column(name = "updated_date") + private LocalDateTime updatedDate; + + /* ---------- Auto timestamps ---------- */ + + @PrePersist + protected void onCreate() { + this.createdDate = LocalDateTime.now(); + this.updatedDate = LocalDateTime.now(); + } + + @PreUpdate + protected void onUpdate() { + this.updatedDate = LocalDateTime.now(); + } + + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignDTO.java new file mode 100644 index 00000000..dbd83c26 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignDTO.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class OrsCampaignDTO { + private Long id; + private String visitDate; + private OrsCampaignListDTO fields; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java new file mode 100644 index 00000000..1b2d64f4 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -0,0 +1,16 @@ +package com.iemr.flw.dto.iemr; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.sql.Timestamp; + +@Data +public class OrsCampaignListDTO { + private String visit_date; + private Timestamp end_date; + private String number_of_families; + private String campaign_photos; + + +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/OrsCampaignRepo.java b/src/main/java/com/iemr/flw/repo/iemr/OrsCampaignRepo.java new file mode 100644 index 00000000..fbbe380b --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/OrsCampaignRepo.java @@ -0,0 +1,17 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface OrsCampaignRepo extends JpaRepository { + Page findByUserId(Integer userId, Pageable pageable); +} diff --git a/src/main/java/com/iemr/flw/service/CampaignService.java b/src/main/java/com/iemr/flw/service/CampaignService.java new file mode 100644 index 00000000..05f1f4be --- /dev/null +++ b/src/main/java/com/iemr/flw/service/CampaignService.java @@ -0,0 +1,11 @@ +package com.iemr.flw.service; + +import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import com.iemr.flw.utils.exception.IEMRException; + +import java.util.List; + +public interface CampaignService { + Object saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException; + List getOrsCampaign(String token) throws IEMRException; +} diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java new file mode 100644 index 00000000..67d98fea --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -0,0 +1,92 @@ +package com.iemr.flw.service.impl; + +import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import com.iemr.flw.repo.iemr.OrsCampaignRepo; +import com.iemr.flw.service.CampaignService; +import com.iemr.flw.utils.JwtUtil; +import com.iemr.flw.utils.exception.IEMRException; +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.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class CampaignServiceImpl implements CampaignService { + + @Autowired + private OrsCampaignRepo orsCampaignRepo; + + @Autowired + private JwtUtil jwtUtil; + + @Override + public Object saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException { + if (orsCampaignDTO == null || orsCampaignDTO.isEmpty()) { + return null; + } + + List campaignOrsRequest = new ArrayList<>(); + Integer userId = jwtUtil.extractUserId(token); + String userName = jwtUtil.extractUsername(token); + + for (OrsCampaignDTO campaignDTO : orsCampaignDTO) { + if (campaignDTO.getFields() == null) { + continue; // or throw exception based on your requirements + } + + CampaignOrs campaignOrsEntity = new CampaignOrs(); // Create new entity for each DTO + campaignOrsEntity.setUserId(userId); + campaignOrsEntity.setCreatedBy(userName); + campaignOrsEntity.setUpdatedBy(userName); + + try { + campaignOrsEntity.setNumberOfFamilies( + Integer.parseInt(campaignDTO.getFields().getNumber_of_families()) + ); + } catch (NumberFormatException e) { + // Handle invalid number format - log or throw exception + throw new IEMRException("Invalid number format for families"); + } + + campaignOrsEntity.setCampaignPhotos(campaignDTO.getFields().getCampaign_photos()); + campaignOrsRequest.add(campaignOrsEntity); + } + + if (!campaignOrsRequest.isEmpty()) { + orsCampaignRepo.saveAll(campaignOrsRequest); + return campaignOrsRequest; + } + + return null; + } + + @Override + public List getOrsCampaign(String token) throws IEMRException { + Integer userId = jwtUtil.extractUserId(token); + List orsCampaignDTOSResponse = new ArrayList<>(); + int page=0; + int pageSize =10; + Page campaignOrsPage; + do{ + Pageable pageable = PageRequest.of(page,pageSize); + campaignOrsPage = orsCampaignRepo.findByUserId(userId,pageable); + for(CampaignOrs campaignOrs:campaignOrsPage.getContent()){ + OrsCampaignDTO dto = convertToDTO(campaignOrs); + orsCampaignDTOSResponse.add(dto); + } + page++; + }while (campaignOrsPage.hasNext()); + return orsCampaignDTOSResponse; + } + private OrsCampaignDTO convertToDTO(CampaignOrs campaign) { + OrsCampaignDTO dto = new OrsCampaignDTO(); + // Set DTO fields from entity + // dto.setXxx(campaign.getXxx()); + return dto; + } +} From ba717c66e5a8d2ae9f9610e0efd62993236d02df Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:33:10 +0530 Subject: [PATCH 047/118] api for ORS campaign AMM-2104 --- src/main/java/com/iemr/flw/controller/CampaignController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index 3ee70aee..1ca2d695 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -14,7 +14,7 @@ import java.util.Map; @RestController -@RequestMapping(value = "/Campaign") +@RequestMapping(value = "/campaign") public class CampaignController { private final Logger logger = LoggerFactory.getLogger(CampaignController.class); From 8e7a8f34558a35c2f72e8a3bde6977086c4d1351 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:47:35 +0530 Subject: [PATCH 048/118] api for ORS campaign AMM-2104 --- .../java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java | 5 +++-- .../com/iemr/flw/service/impl/CampaignServiceImpl.java | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java index 1b2d64f4..f10ce4d1 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -4,11 +4,12 @@ import lombok.Data; import java.sql.Timestamp; +import java.time.LocalDate; @Data public class OrsCampaignListDTO { - private String visit_date; - private Timestamp end_date; + private LocalDate start_date; + private LocalDate end_date; private String number_of_families; private String campaign_photos; diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 67d98fea..f072144d 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -2,6 +2,7 @@ import com.iemr.flw.domain.iemr.CampaignOrs; import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import com.iemr.flw.dto.iemr.OrsCampaignListDTO; import com.iemr.flw.repo.iemr.OrsCampaignRepo; import com.iemr.flw.service.CampaignService; import com.iemr.flw.utils.JwtUtil; @@ -85,8 +86,12 @@ public List getOrsCampaign(String token) throws IEMRException { } private OrsCampaignDTO convertToDTO(CampaignOrs campaign) { OrsCampaignDTO dto = new OrsCampaignDTO(); - // Set DTO fields from entity - // dto.setXxx(campaign.getXxx()); + OrsCampaignListDTO orsCampaignListDTO = new OrsCampaignListDTO(); + orsCampaignListDTO.setCampaign_photos(campaign.getCampaignPhotos()); + orsCampaignListDTO.setEnd_date(campaign.getEndDate()); + orsCampaignListDTO.setStart_date(campaign.getStartDate()); + orsCampaignListDTO.setNumber_of_families(String.valueOf(campaign.getNumberOfFamilies())); + dto.setFields(orsCampaignListDTO); return dto; } } From a2ea2ca3358b8f78a810b8a4ae689cabab9ea043 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:51:55 +0530 Subject: [PATCH 049/118] api for ORS campaign AMM-2104 --- .../iemr/flw/dto/iemr/OrsCampaignListDTO.java | 16 ++++++++++++---- .../flw/service/impl/CampaignServiceImpl.java | 12 ++++++------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java index f10ce4d1..3ed417b2 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -1,5 +1,6 @@ package com.iemr.flw.dto.iemr; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; import lombok.Data; @@ -8,10 +9,17 @@ @Data public class OrsCampaignListDTO { - private LocalDate start_date; - private LocalDate end_date; - private String number_of_families; - private String campaign_photos; + @JsonProperty("start_date") + private LocalDate StartDate; + + @JsonProperty("end_date") + private LocalDate EndDate; + + @JsonProperty("number_of_families") + private String NumberOfFamilies; + + @JsonProperty("campaign_photos") + private String CampaignPhotos; } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index f072144d..0955aee7 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -47,14 +47,14 @@ public Object saveOrsCampaign(List orsCampaignDTO, String token) try { campaignOrsEntity.setNumberOfFamilies( - Integer.parseInt(campaignDTO.getFields().getNumber_of_families()) + Integer.parseInt(campaignDTO.getFields().getNumberOfFamilies()) ); } catch (NumberFormatException e) { // Handle invalid number format - log or throw exception throw new IEMRException("Invalid number format for families"); } - campaignOrsEntity.setCampaignPhotos(campaignDTO.getFields().getCampaign_photos()); + campaignOrsEntity.setCampaignPhotos(campaignDTO.getFields().getCampaignPhotos()); campaignOrsRequest.add(campaignOrsEntity); } @@ -87,10 +87,10 @@ public List getOrsCampaign(String token) throws IEMRException { private OrsCampaignDTO convertToDTO(CampaignOrs campaign) { OrsCampaignDTO dto = new OrsCampaignDTO(); OrsCampaignListDTO orsCampaignListDTO = new OrsCampaignListDTO(); - orsCampaignListDTO.setCampaign_photos(campaign.getCampaignPhotos()); - orsCampaignListDTO.setEnd_date(campaign.getEndDate()); - orsCampaignListDTO.setStart_date(campaign.getStartDate()); - orsCampaignListDTO.setNumber_of_families(String.valueOf(campaign.getNumberOfFamilies())); + orsCampaignListDTO.setCampaignPhotos(campaign.getCampaignPhotos()); + orsCampaignListDTO.setEndDate(campaign.getEndDate()); + orsCampaignListDTO.setStartDate(campaign.getStartDate()); + orsCampaignListDTO.setNumberOfFamilies(String.valueOf(campaign.getNumberOfFamilies())); dto.setFields(orsCampaignListDTO); return dto; } From 5e3e951508ac35040a363c79bac39b8a7a2c10dd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:53:02 +0530 Subject: [PATCH 050/118] api for ORS campaign AMM-2104 --- src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java index b9fab48e..9d4c5c1a 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java +++ b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java @@ -7,7 +7,7 @@ import java.time.LocalDateTime; @Entity -@Table(name = "campaign_ors") +@Table(name = "campaign_ors",schema = "db_iemr") @Data public class CampaignOrs { From f1cb12f9d2dbf0ff0fad634dd915a77737e31cf8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:54:43 +0530 Subject: [PATCH 051/118] api for ORS campaign AMM-2104 --- .../java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 0955aee7..917b2662 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -12,6 +12,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @@ -26,6 +27,7 @@ public class CampaignServiceImpl implements CampaignService { private JwtUtil jwtUtil; @Override + @Transactional public Object saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException { if (orsCampaignDTO == null || orsCampaignDTO.isEmpty()) { return null; @@ -67,6 +69,7 @@ public Object saveOrsCampaign(List orsCampaignDTO, String token) } @Override + @Transactional public List getOrsCampaign(String token) throws IEMRException { Integer userId = jwtUtil.extractUserId(token); List orsCampaignDTOSResponse = new ArrayList<>(); From 6cdbbf8f7a1b2699d93820b0e17ab89e48c7d7b1 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:55:15 +0530 Subject: [PATCH 052/118] api for ORS campaign AMM-2104 --- src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 917b2662..3ef919d2 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -69,7 +69,6 @@ public Object saveOrsCampaign(List orsCampaignDTO, String token) } @Override - @Transactional public List getOrsCampaign(String token) throws IEMRException { Integer userId = jwtUtil.extractUserId(token); List orsCampaignDTOSResponse = new ArrayList<>(); From 33b0fa19f3a56ea5b74616bb14232087eb22a888 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 14:57:46 +0530 Subject: [PATCH 053/118] api for ORS campaign AMM-2104 --- .../flw/service/impl/CampaignServiceImpl.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 3ef919d2..98ae7eb2 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @Service @@ -28,9 +29,9 @@ public class CampaignServiceImpl implements CampaignService { @Override @Transactional - public Object saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException { + public List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException { if (orsCampaignDTO == null || orsCampaignDTO.isEmpty()) { - return null; + return Collections.emptyList(); // } List campaignOrsRequest = new ArrayList<>(); @@ -39,10 +40,10 @@ public Object saveOrsCampaign(List orsCampaignDTO, String token) for (OrsCampaignDTO campaignDTO : orsCampaignDTO) { if (campaignDTO.getFields() == null) { - continue; // or throw exception based on your requirements + continue; } - CampaignOrs campaignOrsEntity = new CampaignOrs(); // Create new entity for each DTO + CampaignOrs campaignOrsEntity = new CampaignOrs(); campaignOrsEntity.setUserId(userId); campaignOrsEntity.setCreatedBy(userName); campaignOrsEntity.setUpdatedBy(userName); @@ -52,7 +53,6 @@ public Object saveOrsCampaign(List orsCampaignDTO, String token) Integer.parseInt(campaignDTO.getFields().getNumberOfFamilies()) ); } catch (NumberFormatException e) { - // Handle invalid number format - log or throw exception throw new IEMRException("Invalid number format for families"); } @@ -61,11 +61,11 @@ public Object saveOrsCampaign(List orsCampaignDTO, String token) } if (!campaignOrsRequest.isEmpty()) { - orsCampaignRepo.saveAll(campaignOrsRequest); - return campaignOrsRequest; + List savedCampaigns = orsCampaignRepo.saveAll(campaignOrsRequest); + return savedCampaigns; } - return null; + return Collections.emptyList(); } @Override From 2a87fea8a0cf9ebf0277e90097237e4a71740094 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 16:56:57 +0530 Subject: [PATCH 054/118] api for Pulse polio campaign AMM-2105 --- .../flw/controller/CampaignController.java | 61 ++++++++++++- .../flw/domain/iemr/PulsePolioCampaign.java | 63 +++++++++++++ .../iemr/flw/dto/iemr/PolioCampaignDTO.java | 10 +++ .../flw/dto/iemr/PolioCampaignListDTO.java | 23 +++++ .../flw/repo/iemr/PulsePolioCampaignRepo.java | 13 +++ .../com/iemr/flw/service/CampaignService.java | 4 + .../flw/service/impl/CampaignServiceImpl.java | 90 ++++++++++++++++++- 7 files changed, 260 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/PolioCampaignDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/PulsePolioCampaignRepo.java diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index 1ca2d695..730fb46d 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -1,6 +1,7 @@ package com.iemr.flw.controller; import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import com.iemr.flw.dto.iemr.PolioCampaignDTO; import com.iemr.flw.service.CampaignService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,7 +42,7 @@ public ResponseEntity> saveOrsDistribution(@RequestBody List } } catch (Exception e) { - logger.error("Error save ors distribution :", e); + logger.error("Error save ors distribution :", e.getMessage()); response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); response.put("errorMessage", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); @@ -69,7 +70,63 @@ public ResponseEntity> getAllOrsDistribution(@RequestHeader( } } catch (Exception e) { - logger.error("Error save ors distribution :", e); + logger.error("Error save ors distribution :", e.getMessage()); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + + @RequestMapping(value = "polio/campaign/saveAll", method = RequestMethod.POST) + public ResponseEntity> savePolioCampaign(@RequestBody List polioCampaignDTOS, @RequestHeader(value = "jwtToken") String token) { + + Map response = new LinkedHashMap<>(); + + try { + Object result = campaignService.savePolioCampaign(polioCampaignDTOS,token); + + + if (result != null) { + response.put("statusCode", HttpStatus.OK.value()); + response.put("data", result); + return ResponseEntity.ok(response); + } else { + response.put("statusCode", HttpStatus.NOT_FOUND.value()); + response.put("message", "No records found"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + + } catch (Exception e) { + logger.error("Error save polio:", e.getMessage()); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + + @RequestMapping(value = "polio/campaign/getAll", method = RequestMethod.POST) + public ResponseEntity> getAllPolioCampaign(@RequestHeader(value = "jwtToken") String token) { + + Map response = new LinkedHashMap<>(); + + try { + List result = campaignService.getPolioCampaign(token); + + + if (result != null) { + response.put("statusCode", HttpStatus.OK.value()); + response.put("data", result); + return ResponseEntity.ok(response); + } else { + response.put("statusCode", HttpStatus.NOT_FOUND.value()); + response.put("message", "No records found"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + + } catch (Exception e) { + logger.error("Error save ors distribution :", e.getMessage()); response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); response.put("errorMessage", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); diff --git a/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java new file mode 100644 index 00000000..446217eb --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java @@ -0,0 +1,63 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Entity +@Table(name = "campaign_pulse_polio",schema = "db_iemr") +@Data +public class PulsePolioCampaign { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "start_date", nullable = false) + private LocalDate startDate; + + @Column(name = "end_date", nullable = false) + private LocalDate endDate; + + @Column(name = "user_id", nullable = false) + private Integer userId; + + @Column(name = "number_of_children", nullable = false) + private Integer numberOfChildren = 0; + + /** + * Store JSON array like ["img1.jpg","img2.jpg"] + * MySQL JSON column + */ + @Column(name = "campaign_photos", columnDefinition = "json") + private String campaignPhotos; + + @Column(name = "created_by", length = 200) + private String createdBy; + + @Column(name = "updated_by", length = 200) + private String updatedBy; + + @Column(name = "created_date", updatable = false) + private LocalDateTime createdDate; + + @Column(name = "updated_date") + private LocalDateTime updatedDate; + + /* ---------- Auto timestamps ---------- */ + + @PrePersist + protected void onCreate() { + this.createdDate = LocalDateTime.now(); + this.updatedDate = LocalDateTime.now(); + } + + @PreUpdate + protected void onUpdate() { + this.updatedDate = LocalDateTime.now(); + } + + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignDTO.java new file mode 100644 index 00000000..7f6cfc87 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignDTO.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class PolioCampaignDTO { + private Long id; + private String visitDate; + private PolioCampaignListDTO fields; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java new file mode 100644 index 00000000..5c172ffa --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java @@ -0,0 +1,23 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class PolioCampaignListDTO { + @JsonProperty("start_date") + private LocalDate startDate; + + @JsonProperty("end_date") + private LocalDate endDate; + + @JsonProperty("number_of_children") + private String numberOfChildren; + + @JsonProperty("campaign_photos") + private String campaignPhotos; + + +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/PulsePolioCampaignRepo.java b/src/main/java/com/iemr/flw/repo/iemr/PulsePolioCampaignRepo.java new file mode 100644 index 00000000..c2cded97 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/PulsePolioCampaignRepo.java @@ -0,0 +1,13 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.domain.iemr.PulsePolioCampaign; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PulsePolioCampaignRepo extends JpaRepository { + Page findByUserId(Integer userId, Pageable pageable); +} diff --git a/src/main/java/com/iemr/flw/service/CampaignService.java b/src/main/java/com/iemr/flw/service/CampaignService.java index 05f1f4be..e7301665 100644 --- a/src/main/java/com/iemr/flw/service/CampaignService.java +++ b/src/main/java/com/iemr/flw/service/CampaignService.java @@ -1,11 +1,15 @@ package com.iemr.flw.service; import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import com.iemr.flw.dto.iemr.PolioCampaignDTO; import com.iemr.flw.utils.exception.IEMRException; import java.util.List; public interface CampaignService { Object saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException; + Object savePolioCampaign(List polioCampaignDTOS, String token) throws IEMRException; List getOrsCampaign(String token) throws IEMRException; + + List getPolioCampaign(String token) throws IEMRException; } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 98ae7eb2..6baade1a 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -1,9 +1,13 @@ package com.iemr.flw.service.impl; import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.domain.iemr.PulsePolioCampaign; import com.iemr.flw.dto.iemr.OrsCampaignDTO; import com.iemr.flw.dto.iemr.OrsCampaignListDTO; +import com.iemr.flw.dto.iemr.PolioCampaignDTO; +import com.iemr.flw.dto.iemr.PolioCampaignListDTO; import com.iemr.flw.repo.iemr.OrsCampaignRepo; +import com.iemr.flw.repo.iemr.PulsePolioCampaignRepo; import com.iemr.flw.service.CampaignService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; @@ -24,6 +28,9 @@ public class CampaignServiceImpl implements CampaignService { @Autowired private OrsCampaignRepo orsCampaignRepo; + @Autowired + private PulsePolioCampaignRepo pulsePolioCampaignRepo; + @Autowired private JwtUtil jwtUtil; @@ -79,14 +86,77 @@ public List getOrsCampaign(String token) throws IEMRException { Pageable pageable = PageRequest.of(page,pageSize); campaignOrsPage = orsCampaignRepo.findByUserId(userId,pageable); for(CampaignOrs campaignOrs:campaignOrsPage.getContent()){ - OrsCampaignDTO dto = convertToDTO(campaignOrs); + OrsCampaignDTO dto = convertOrsToDTO(campaignOrs); orsCampaignDTOSResponse.add(dto); } page++; }while (campaignOrsPage.hasNext()); return orsCampaignDTOSResponse; } - private OrsCampaignDTO convertToDTO(CampaignOrs campaign) { + + + @Override + @Transactional + public List savePolioCampaign(List orsCampaignDTO, String token) throws IEMRException { + if (orsCampaignDTO == null || orsCampaignDTO.isEmpty()) { + return Collections.emptyList(); // + } + + List campaignPolioRequest = new ArrayList<>(); + Integer userId = jwtUtil.extractUserId(token); + String userName = jwtUtil.extractUsername(token); + + for (PolioCampaignDTO campaignDTO : orsCampaignDTO) { + if (campaignDTO.getFields() == null) { + continue; + } + + PulsePolioCampaign campaignPolioEntity = new PulsePolioCampaign(); + campaignPolioEntity.setUserId(userId); + campaignPolioEntity.setCreatedBy(userName); + campaignPolioEntity.setUpdatedBy(userName); + + try { + campaignPolioEntity.setNumberOfChildren( + Integer.parseInt(campaignDTO.getFields().getNumberOfChildren()) + ); + } catch (NumberFormatException e) { + throw new IEMRException("Invalid number format for families"); + } + + campaignPolioEntity.setCampaignPhotos(campaignDTO.getFields().getCampaignPhotos()); + campaignPolioRequest.add(campaignPolioEntity); + } + + if (!campaignPolioRequest.isEmpty()) { + List savedCampaigns = pulsePolioCampaignRepo.saveAll(campaignPolioRequest); + return savedCampaigns; + } + + return Collections.emptyList(); + } + + @Override + public List getPolioCampaign(String token) throws IEMRException { + Integer userId = jwtUtil.extractUserId(token); + List polioCampaignDTOSResponse = new ArrayList<>(); + int page=0; + int pageSize =10; + Page campaignPolioPage; + do{ + Pageable pageable = PageRequest.of(page,pageSize); + campaignPolioPage = pulsePolioCampaignRepo.findByUserId(userId,pageable); + for(PulsePolioCampaign campaignOrs:campaignPolioPage.getContent()){ + PolioCampaignDTO dto = convertPolioToDTO(campaignOrs); + polioCampaignDTOSResponse.add(dto); + } + page++; + }while (campaignPolioPage.hasNext()); + return polioCampaignDTOSResponse; + } + + + private OrsCampaignDTO convertOrsToDTO(CampaignOrs campaign) { OrsCampaignDTO dto = new OrsCampaignDTO(); OrsCampaignListDTO orsCampaignListDTO = new OrsCampaignListDTO(); orsCampaignListDTO.setCampaignPhotos(campaign.getCampaignPhotos()); @@ -96,4 +166,20 @@ private OrsCampaignDTO convertToDTO(CampaignOrs campaign) { dto.setFields(orsCampaignListDTO); return dto; } + + private PolioCampaignDTO convertPolioToDTO(PulsePolioCampaign campaign) { + PolioCampaignDTO dto = new PolioCampaignDTO(); + PolioCampaignListDTO polioCampaignListDTO = new PolioCampaignListDTO(); + polioCampaignListDTO.setCampaignPhotos(campaign.getCampaignPhotos()); + polioCampaignListDTO.setEndDate(campaign.getEndDate()); + polioCampaignListDTO.setStartDate(campaign.getStartDate()); + polioCampaignListDTO.setNumberOfChildren(String.valueOf(campaign.getNumberOfChildren())); + dto.setFields(polioCampaignListDTO); + return dto; + } + + + + + } From 44c18f784d2c87060130b47da3eca9e664908e40 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 15 Jan 2026 19:09:59 +0530 Subject: [PATCH 055/118] fix option parameter issue --- .../flw/controller/MaaMeetingController.java | 59 +++++++++++++------ 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java index 83741682..49c2236b 100644 --- a/src/main/java/com/iemr/flw/controller/MaaMeetingController.java +++ b/src/main/java/com/iemr/flw/controller/MaaMeetingController.java @@ -35,35 +35,56 @@ public MaaMeetingController(MaaMeetingService service) { @PostMapping(value = "/saveAll", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity saveMeeting( - @RequestPart("villageName") String villageName, - @RequestPart("noOfPragnentWoment") String noOfPragnentWomen, - @RequestPart("noOfLactingMother") String noOfLactingMother, - @RequestPart("mitaninActivityCheckList") String mitaninActivityCheckList, - @RequestPart("meetingDate") String meetingDate, - @RequestPart("place") String place, - @RequestPart("participants") String participants, - @RequestPart("ashaId") String ashaId, - @RequestPart("createdBy") String createdBy, - @RequestPart(value = "meetingImages", required = false) List meetingImages) { + + @RequestPart(value = "villageName", required = false) String villageName, + @RequestPart(value = "noOfPragnentWoment", required = false) String noOfPragnentWomen, + @RequestPart(value = "noOfLactingMother", required = false) String noOfLactingMother, + @RequestPart(value = "mitaninActivityCheckList", required = false) String mitaninActivityCheckList, + @RequestPart(value = "meetingDate") String meetingDate, + @RequestPart(value = "place", required = false) String place, + @RequestPart(value = "participants") String participants, + @RequestPart(value = "ashaId", required = false) String ashaId, + @RequestPart(value = "createdBy", required = false) String createdBy, + @RequestPart(value = "meetingImages", required = false) List meetingImages + ) { try { MaaMeetingRequestDTO dto = new MaaMeetingRequestDTO(); - dto.setMeetingDate(LocalDate.parse(meetingDate)); + + if (meetingDate != null && !meetingDate.isEmpty()) { + dto.setMeetingDate(LocalDate.parse(meetingDate)); + } + dto.setPlace(place); - dto.setParticipants(Integer.parseInt(participants)); - dto.setAshaId(Integer.parseInt(ashaId)); - dto.setCreatedBY(createdBy); dto.setVillageName(villageName); - dto.setNoOfLactingMother(Integer.parseInt(noOfLactingMother)); - dto.setNoOfPragnentWomen(Integer.parseInt(noOfPragnentWomen)); dto.setMitaninActivityCheckList(mitaninActivityCheckList); + dto.setCreatedBY(createdBy); - dto.setMeetingImages(meetingImages != null ? meetingImages.toArray(new MultipartFile[0]) : null); - if (dto != null) { - service.saveMeeting(dto); + if (participants != null && !participants.isEmpty()) { + dto.setParticipants(Integer.parseInt(participants)); + } + if (ashaId != null && !ashaId.isEmpty()) { + dto.setAshaId(Integer.parseInt(ashaId)); } + + if (noOfLactingMother != null && !noOfLactingMother.isEmpty()) { + dto.setNoOfLactingMother(Integer.parseInt(noOfLactingMother)); + } + + if (noOfPragnentWomen != null && !noOfPragnentWomen.isEmpty()) { + dto.setNoOfPragnentWomen(Integer.parseInt(noOfPragnentWomen)); + } + + if (meetingImages != null && !meetingImages.isEmpty()) { + dto.setMeetingImages(meetingImages.toArray(new MultipartFile[0])); + } + + service.saveMeeting(dto); + return ResponseEntity.ok("Saved Successfully"); + } catch (Exception e) { + e.printStackTrace(); return ResponseEntity.badRequest().body(e.getMessage()); } } From 3c91469c4c78ab7b8bfd3938f1a6405ea35a21b9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 09:45:00 +0530 Subject: [PATCH 056/118] fix request issue in ors campaign --- .../flw/controller/CampaignController.java | 75 ++++++++++--- .../iemr/flw/dto/iemr/OrsCampaignListDTO.java | 3 +- .../dto/iemr/OrsCampaignListResponseDTO.java | 15 +++ .../flw/dto/iemr/OrsCampaignResponseDTO.java | 10 ++ .../com/iemr/flw/service/CampaignService.java | 3 +- .../flw/service/impl/CampaignServiceImpl.java | 101 +++++++++++++----- 6 files changed, 163 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index 730fb46d..16a0080d 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -1,18 +1,22 @@ package com.iemr.flw.controller; -import com.iemr.flw.dto.iemr.OrsCampaignDTO; -import com.iemr.flw.dto.iemr.PolioCampaignDTO; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.dto.iemr.*; import com.iemr.flw.service.CampaignService; +import com.iemr.flw.utils.exception.IEMRException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.sql.Timestamp; +import java.util.*; @RestController @RequestMapping(value = "/campaign") @@ -22,28 +26,69 @@ public class CampaignController { @Autowired private CampaignService campaignService; - @RequestMapping(value = "ors/distribution/saveAll", method = RequestMethod.POST) - public ResponseEntity> saveOrsDistribution(@RequestBody List orsCampaignDTO, @RequestHeader(value = "jwtToken") String token) { + @PostMapping("/ors/distribution/saveAll") + public ResponseEntity> saveOrsDistribution( + @RequestPart("formDataJson") String fields, + @RequestPart(value = "campaignPhotos", required = false) List campaignPhotos, + @RequestHeader("jwtToken") String token) { Map response = new LinkedHashMap<>(); try { - Object result = campaignService.saveOrsCampaign(orsCampaignDTO,token); + // Validate input + if (fields == null || fields.trim().isEmpty()) { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Form data is required"); + return ResponseEntity.badRequest().body(response); + } + + // Parse JSON to DTO + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + OrsCampaignListDTO orsCampaignFields = objectMapper.readValue(fields, OrsCampaignListDTO.class); + + // Set campaign photos if present + if (campaignPhotos != null && !campaignPhotos.isEmpty()) { + orsCampaignFields.setCampaignPhotos(campaignPhotos.toArray(new MultipartFile[0])); + } + // Create DTO + OrsCampaignDTO campaignDTO = new OrsCampaignDTO(); + campaignDTO.setFields(orsCampaignFields); + + List orsCampaignDTOList = Collections.singletonList(campaignDTO); + + // Save to database + Object result = campaignService.saveOrsCampaign(orsCampaignDTOList, token); if (result != null) { - response.put("statusCode", HttpStatus.OK.value()); + response.put("statusCode", HttpStatus.CREATED.value()); + response.put("message", "Campaign saved successfully"); response.put("data", result); - return ResponseEntity.ok(response); + return ResponseEntity.status(HttpStatus.CREATED).body(response); } else { - response.put("statusCode", HttpStatus.NOT_FOUND.value()); - response.put("message", "No records found"); - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Failed to save campaign"); + return ResponseEntity.badRequest().body(response); } + } catch (JsonProcessingException e) { + logger.error("JSON parsing error: {}", e.getMessage(), e); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Invalid JSON format"); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.badRequest().body(response); + + } catch (IEMRException e) { + logger.error("Business logic error: {}", e.getMessage(), e); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", e.getMessage()); + return ResponseEntity.badRequest().body(response); + } catch (Exception e) { - logger.error("Error save ors distribution :", e.getMessage()); + logger.error("Error saving ORS distribution: {}", e.getMessage(), e); response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("message", "Internal server error occurred"); response.put("errorMessage", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } @@ -56,7 +101,7 @@ public ResponseEntity> getAllOrsDistribution(@RequestHeader( Map response = new LinkedHashMap<>(); try { - List result = campaignService.getOrsCampaign(token); + List result = campaignService.getOrsCampaign(token); if (result != null) { diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java index 3ed417b2..7f8b6757 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; import lombok.Data; +import org.springframework.web.multipart.MultipartFile; import java.sql.Timestamp; import java.time.LocalDate; @@ -19,7 +20,7 @@ public class OrsCampaignListDTO { private String NumberOfFamilies; @JsonProperty("campaign_photos") - private String CampaignPhotos; + private MultipartFile[] CampaignPhotos; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java new file mode 100644 index 00000000..7b8ec2da --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java @@ -0,0 +1,15 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +import java.time.LocalDate; +import java.util.List; + +@Data +public class OrsCampaignListResponseDTO { + private Long id; + private LocalDate startDate; + private LocalDate endDate; + private String numberOfFamilies; + private List campaignPhotos; // Base64 or URLs +} \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java new file mode 100644 index 00000000..44351ddb --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class OrsCampaignResponseDTO { + private Long id; + private String visitDate; + private OrsCampaignListResponseDTO fields; +} diff --git a/src/main/java/com/iemr/flw/service/CampaignService.java b/src/main/java/com/iemr/flw/service/CampaignService.java index e7301665..8c690e25 100644 --- a/src/main/java/com/iemr/flw/service/CampaignService.java +++ b/src/main/java/com/iemr/flw/service/CampaignService.java @@ -1,6 +1,7 @@ package com.iemr.flw.service; import com.iemr.flw.dto.iemr.OrsCampaignDTO; +import com.iemr.flw.dto.iemr.OrsCampaignResponseDTO; import com.iemr.flw.dto.iemr.PolioCampaignDTO; import com.iemr.flw.utils.exception.IEMRException; @@ -9,7 +10,7 @@ public interface CampaignService { Object saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException; Object savePolioCampaign(List polioCampaignDTOS, String token) throws IEMRException; - List getOrsCampaign(String token) throws IEMRException; + List getOrsCampaign(String token) throws IEMRException; List getPolioCampaign(String token) throws IEMRException; } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 6baade1a..f8a315a8 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -1,11 +1,11 @@ package com.iemr.flw.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import com.iemr.flw.domain.iemr.CampaignOrs; import com.iemr.flw.domain.iemr.PulsePolioCampaign; -import com.iemr.flw.dto.iemr.OrsCampaignDTO; -import com.iemr.flw.dto.iemr.OrsCampaignListDTO; -import com.iemr.flw.dto.iemr.PolioCampaignDTO; -import com.iemr.flw.dto.iemr.PolioCampaignListDTO; +import com.iemr.flw.dto.iemr.*; import com.iemr.flw.repo.iemr.OrsCampaignRepo; import com.iemr.flw.repo.iemr.PulsePolioCampaignRepo; import com.iemr.flw.service.CampaignService; @@ -17,8 +17,11 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.ArrayList; +import java.util.Base64; import java.util.Collections; import java.util.List; @@ -63,7 +66,11 @@ public List saveOrsCampaign(List orsCampaignDTO, St throw new IEMRException("Invalid number format for families"); } - campaignOrsEntity.setCampaignPhotos(campaignDTO.getFields().getCampaignPhotos()); + MultipartFile[] photos = campaignDTO.getFields().getCampaignPhotos(); + if (photos != null && photos.length > 0) { + String base64Json = convertPhotosToBase64Json(photos); + campaignOrsEntity.setCampaignPhotos(base64Json); + } campaignOrsRequest.add(campaignOrsEntity); } @@ -76,21 +83,21 @@ public List saveOrsCampaign(List orsCampaignDTO, St } @Override - public List getOrsCampaign(String token) throws IEMRException { + public List getOrsCampaign(String token) throws IEMRException { Integer userId = jwtUtil.extractUserId(token); - List orsCampaignDTOSResponse = new ArrayList<>(); - int page=0; - int pageSize =10; + List orsCampaignDTOSResponse = new ArrayList<>(); + int page = 0; + int pageSize = 10; Page campaignOrsPage; - do{ - Pageable pageable = PageRequest.of(page,pageSize); - campaignOrsPage = orsCampaignRepo.findByUserId(userId,pageable); - for(CampaignOrs campaignOrs:campaignOrsPage.getContent()){ - OrsCampaignDTO dto = convertOrsToDTO(campaignOrs); + do { + Pageable pageable = PageRequest.of(page, pageSize); + campaignOrsPage = orsCampaignRepo.findByUserId(userId, pageable); + for (CampaignOrs campaignOrs : campaignOrsPage.getContent()) { + OrsCampaignResponseDTO dto = convertOrsToDTO(campaignOrs); orsCampaignDTOSResponse.add(dto); } page++; - }while (campaignOrsPage.hasNext()); + } while (campaignOrsPage.hasNext()); return orsCampaignDTOSResponse; } @@ -140,27 +147,29 @@ public List savePolioCampaign(List orsCamp public List getPolioCampaign(String token) throws IEMRException { Integer userId = jwtUtil.extractUserId(token); List polioCampaignDTOSResponse = new ArrayList<>(); - int page=0; - int pageSize =10; + int page = 0; + int pageSize = 10; Page campaignPolioPage; - do{ - Pageable pageable = PageRequest.of(page,pageSize); - campaignPolioPage = pulsePolioCampaignRepo.findByUserId(userId,pageable); - for(PulsePolioCampaign campaignOrs:campaignPolioPage.getContent()){ + do { + Pageable pageable = PageRequest.of(page, pageSize); + campaignPolioPage = pulsePolioCampaignRepo.findByUserId(userId, pageable); + for (PulsePolioCampaign campaignOrs : campaignPolioPage.getContent()) { PolioCampaignDTO dto = convertPolioToDTO(campaignOrs); polioCampaignDTOSResponse.add(dto); } page++; - }while (campaignPolioPage.hasNext()); + } while (campaignPolioPage.hasNext()); return polioCampaignDTOSResponse; } - private OrsCampaignDTO convertOrsToDTO(CampaignOrs campaign) { - OrsCampaignDTO dto = new OrsCampaignDTO(); - OrsCampaignListDTO orsCampaignListDTO = new OrsCampaignListDTO(); - orsCampaignListDTO.setCampaignPhotos(campaign.getCampaignPhotos()); - orsCampaignListDTO.setEndDate(campaign.getEndDate()); + private OrsCampaignResponseDTO convertOrsToDTO(CampaignOrs campaign) { + OrsCampaignResponseDTO dto = new OrsCampaignResponseDTO(); + OrsCampaignListResponseDTO orsCampaignListDTO = new OrsCampaignListResponseDTO(); + if (campaign.getCampaignPhotos() != null) { + List photosList = parseBase64Json(campaign.getCampaignPhotos()); + orsCampaignListDTO.setCampaignPhotos(photosList); // ✅ Now List matches + } orsCampaignListDTO.setEndDate(campaign.getEndDate()); orsCampaignListDTO.setStartDate(campaign.getStartDate()); orsCampaignListDTO.setNumberOfFamilies(String.valueOf(campaign.getNumberOfFamilies())); dto.setFields(orsCampaignListDTO); @@ -177,9 +186,47 @@ private PolioCampaignDTO convertPolioToDTO(PulsePolioCampaign campaign) { dto.setFields(polioCampaignListDTO); return dto; } + private List parseBase64Json(String jsonString) { + try { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(jsonString, new TypeReference>() {}); + } catch (JsonProcessingException e) { + return Collections.emptyList(); + } + } + + + private String convertPhotosToBase64Json(MultipartFile[] photos) throws IEMRException { + try { + List base64Images = new ArrayList<>(); + for (MultipartFile photo : photos) { + if (photo != null && !photo.isEmpty()) { + // Get file bytes + byte[] bytes = photo.getBytes(); + // Convert to Base64 + String base64 = Base64.getEncoder().encodeToString(bytes); + // Get content type (image/jpeg, image/png, etc.) + String contentType = photo.getContentType(); + if (contentType == null) { + contentType = "image/jpeg"; // default + } + // Create data URL format: data:image/jpeg;base64,xxxxx + String base64Image = "data:" + contentType + ";base64," + base64; + base64Images.add(base64Image); + } + } + + // Convert list to JSON array string + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.writeValueAsString(base64Images); + } catch (IOException e) { + throw new IEMRException("Error converting photos to base64: " + e.getMessage()); + } + } } + From 58b7a06c54feda72c06745e9d5db0e45167e3e5a Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 09:53:43 +0530 Subject: [PATCH 057/118] fix request issue in pulse polio campaign --- .../flw/controller/CampaignController.java | 68 +++++++++++++++---- .../flw/dto/iemr/PolioCampaignListDTO.java | 3 +- .../iemr/PolioCampaignListResponseDTO.java | 25 +++++++ .../dto/iemr/PolioCampaignResponseDTO.java | 10 +++ .../com/iemr/flw/service/CampaignService.java | 9 ++- .../flw/service/impl/CampaignServiceImpl.java | 55 ++++++++++----- 6 files changed, 136 insertions(+), 34 deletions(-) create mode 100644 src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index 16a0080d..e11bc744 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.domain.iemr.PulsePolioCampaign; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.service.CampaignService; import com.iemr.flw.utils.exception.IEMRException; @@ -59,9 +60,9 @@ public ResponseEntity> saveOrsDistribution( List orsCampaignDTOList = Collections.singletonList(campaignDTO); // Save to database - Object result = campaignService.saveOrsCampaign(orsCampaignDTOList, token); + List result = campaignService.saveOrsCampaign(orsCampaignDTOList, token); - if (result != null) { + if (result != null && !result.isEmpty()) { response.put("statusCode", HttpStatus.CREATED.value()); response.put("message", "Campaign saved successfully"); response.put("data", result); @@ -123,28 +124,69 @@ public ResponseEntity> getAllOrsDistribution(@RequestHeader( } - @RequestMapping(value = "polio/campaign/saveAll", method = RequestMethod.POST) - public ResponseEntity> savePolioCampaign(@RequestBody List polioCampaignDTOS, @RequestHeader(value = "jwtToken") String token) { + @PostMapping("/polio/campaign/saveAll") + public ResponseEntity> savePolioCampaign( + @RequestPart("formDataJson") String fields, + @RequestPart(value = "campaignPhotos", required = false) List campaignPhotos, + @RequestHeader("jwtToken") String token) { Map response = new LinkedHashMap<>(); try { - Object result = campaignService.savePolioCampaign(polioCampaignDTOS,token); + // Validate input + if (fields == null || fields.trim().isEmpty()) { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Form data is required"); + return ResponseEntity.badRequest().body(response); + } + // Parse JSON to DTO + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + PolioCampaignListDTO polioCampaignFields = objectMapper.readValue(fields, PolioCampaignListDTO.class); - if (result != null) { - response.put("statusCode", HttpStatus.OK.value()); + // Set campaign photos if present + if (campaignPhotos != null && !campaignPhotos.isEmpty()) { + polioCampaignFields.setCampaignPhotos(campaignPhotos.toArray(new MultipartFile[0])); + } + + // Create DTO + PolioCampaignDTO campaignDTO = new PolioCampaignDTO(); + campaignDTO.setFields(polioCampaignFields); + + List polioCampaignDTOList = Collections.singletonList(campaignDTO); + + // Save to database + List result = campaignService.savePolioCampaign(polioCampaignDTOList, token); + + if (result != null && !result.isEmpty()) { + response.put("statusCode", HttpStatus.CREATED.value()); + response.put("message", "Polio campaign saved successfully"); response.put("data", result); - return ResponseEntity.ok(response); + return ResponseEntity.status(HttpStatus.CREATED).body(response); } else { - response.put("statusCode", HttpStatus.NOT_FOUND.value()); - response.put("message", "No records found"); - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Failed to save polio campaign"); + return ResponseEntity.badRequest().body(response); } + } catch (JsonProcessingException e) { + logger.error("JSON parsing error: {}", e.getMessage(), e); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Invalid JSON format"); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.badRequest().body(response); + + } catch (IEMRException e) { + logger.error("Business logic error: {}", e.getMessage(), e); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", e.getMessage()); + return ResponseEntity.badRequest().body(response); + } catch (Exception e) { - logger.error("Error save polio:", e.getMessage()); + logger.error("Error saving polio campaign: {}", e.getMessage(), e); response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("message", "Internal server error occurred"); response.put("errorMessage", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } @@ -157,7 +199,7 @@ public ResponseEntity> getAllPolioCampaign(@RequestHeader(va Map response = new LinkedHashMap<>(); try { - List result = campaignService.getPolioCampaign(token); + List result = campaignService.getPolioCampaign(token); if (result != null) { diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java index 5c172ffa..649d3adf 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; @@ -17,7 +18,7 @@ public class PolioCampaignListDTO { private String numberOfChildren; @JsonProperty("campaign_photos") - private String campaignPhotos; + private MultipartFile[] campaignPhotos; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java new file mode 100644 index 00000000..603d1676 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java @@ -0,0 +1,25 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.time.LocalDate; +import java.util.List; + +@Data +public class PolioCampaignListResponseDTO { + @JsonProperty("start_date") + private LocalDate startDate; + + @JsonProperty("end_date") + private LocalDate endDate; + + @JsonProperty("number_of_children") + private String numberOfChildren; + + @JsonProperty("campaign_photos") + private List campaignPhotos; + + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java new file mode 100644 index 00000000..06370ac0 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class PolioCampaignResponseDTO { + private Long id; + private String visitDate; + private PolioCampaignListResponseDTO fields; +} diff --git a/src/main/java/com/iemr/flw/service/CampaignService.java b/src/main/java/com/iemr/flw/service/CampaignService.java index 8c690e25..f443c0ed 100644 --- a/src/main/java/com/iemr/flw/service/CampaignService.java +++ b/src/main/java/com/iemr/flw/service/CampaignService.java @@ -1,16 +1,19 @@ package com.iemr.flw.service; +import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.domain.iemr.PulsePolioCampaign; import com.iemr.flw.dto.iemr.OrsCampaignDTO; import com.iemr.flw.dto.iemr.OrsCampaignResponseDTO; import com.iemr.flw.dto.iemr.PolioCampaignDTO; +import com.iemr.flw.dto.iemr.PolioCampaignResponseDTO; import com.iemr.flw.utils.exception.IEMRException; import java.util.List; public interface CampaignService { - Object saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException; - Object savePolioCampaign(List polioCampaignDTOS, String token) throws IEMRException; + List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException; + List savePolioCampaign(List polioCampaignDTOS, String token) throws IEMRException; List getOrsCampaign(String token) throws IEMRException; - List getPolioCampaign(String token) throws IEMRException; + List getPolioCampaign(String token) throws IEMRException; } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index f8a315a8..e1f2c1c0 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -104,16 +104,18 @@ public List getOrsCampaign(String token) throws IEMRExce @Override @Transactional - public List savePolioCampaign(List orsCampaignDTO, String token) throws IEMRException { - if (orsCampaignDTO == null || orsCampaignDTO.isEmpty()) { - return Collections.emptyList(); // + public List savePolioCampaign(List polioCampaignDTOs, String token) + throws IEMRException { + + if (polioCampaignDTOs == null || polioCampaignDTOs.isEmpty()) { + throw new IEMRException("Campaign data is required"); } List campaignPolioRequest = new ArrayList<>(); Integer userId = jwtUtil.extractUserId(token); String userName = jwtUtil.extractUsername(token); - for (PolioCampaignDTO campaignDTO : orsCampaignDTO) { + for (PolioCampaignDTO campaignDTO : polioCampaignDTOs) { if (campaignDTO.getFields() == null) { continue; } @@ -123,15 +125,29 @@ public List savePolioCampaign(List orsCamp campaignPolioEntity.setCreatedBy(userName); campaignPolioEntity.setUpdatedBy(userName); + // Set start and end dates + campaignPolioEntity.setStartDate(campaignDTO.getFields().getStartDate()); + campaignPolioEntity.setEndDate(campaignDTO.getFields().getEndDate()); + + // Parse number of children try { - campaignPolioEntity.setNumberOfChildren( - Integer.parseInt(campaignDTO.getFields().getNumberOfChildren()) - ); + String childrenStr = campaignDTO.getFields().getNumberOfChildren(); + if (childrenStr != null && !childrenStr.trim().isEmpty()) { + campaignPolioEntity.setNumberOfChildren(Integer.parseInt(childrenStr)); + } else { + campaignPolioEntity.setNumberOfChildren(0); + } } catch (NumberFormatException e) { - throw new IEMRException("Invalid number format for families"); + throw new IEMRException("Invalid number format for children: " + e.getMessage()); + } + + // Convert photos to base64 JSON array + MultipartFile[] photos = campaignDTO.getFields().getCampaignPhotos(); + if (photos != null && photos.length > 0) { + String base64Json = convertPhotosToBase64Json(photos); + campaignPolioEntity.setCampaignPhotos(base64Json); } - campaignPolioEntity.setCampaignPhotos(campaignDTO.getFields().getCampaignPhotos()); campaignPolioRequest.add(campaignPolioEntity); } @@ -140,13 +156,14 @@ public List savePolioCampaign(List orsCamp return savedCampaigns; } - return Collections.emptyList(); + throw new IEMRException("No valid campaign data to save"); } + @Override - public List getPolioCampaign(String token) throws IEMRException { + public List getPolioCampaign(String token) throws IEMRException { Integer userId = jwtUtil.extractUserId(token); - List polioCampaignDTOSResponse = new ArrayList<>(); + List polioCampaignDTOSResponse = new ArrayList<>(); int page = 0; int pageSize = 10; Page campaignPolioPage; @@ -154,7 +171,7 @@ public List getPolioCampaign(String token) throws IEMRExceptio Pageable pageable = PageRequest.of(page, pageSize); campaignPolioPage = pulsePolioCampaignRepo.findByUserId(userId, pageable); for (PulsePolioCampaign campaignOrs : campaignPolioPage.getContent()) { - PolioCampaignDTO dto = convertPolioToDTO(campaignOrs); + PolioCampaignResponseDTO dto = convertPolioToDTO(campaignOrs); polioCampaignDTOSResponse.add(dto); } page++; @@ -170,16 +187,20 @@ private OrsCampaignResponseDTO convertOrsToDTO(CampaignOrs campaign) { List photosList = parseBase64Json(campaign.getCampaignPhotos()); orsCampaignListDTO.setCampaignPhotos(photosList); // ✅ Now List matches } orsCampaignListDTO.setEndDate(campaign.getEndDate()); + orsCampaignListDTO.setStartDate(campaign.getStartDate()); orsCampaignListDTO.setNumberOfFamilies(String.valueOf(campaign.getNumberOfFamilies())); dto.setFields(orsCampaignListDTO); return dto; } - private PolioCampaignDTO convertPolioToDTO(PulsePolioCampaign campaign) { - PolioCampaignDTO dto = new PolioCampaignDTO(); - PolioCampaignListDTO polioCampaignListDTO = new PolioCampaignListDTO(); - polioCampaignListDTO.setCampaignPhotos(campaign.getCampaignPhotos()); + private PolioCampaignResponseDTO convertPolioToDTO(PulsePolioCampaign campaign) { + PolioCampaignResponseDTO dto = new PolioCampaignResponseDTO(); + PolioCampaignListResponseDTO polioCampaignListDTO = new PolioCampaignListResponseDTO(); + if (campaign.getCampaignPhotos() != null) { + List photosList = parseBase64Json(campaign.getCampaignPhotos()); + polioCampaignListDTO.setCampaignPhotos(photosList); // ✅ Now List matches + } polioCampaignListDTO.setEndDate(campaign.getEndDate()); polioCampaignListDTO.setStartDate(campaign.getStartDate()); polioCampaignListDTO.setNumberOfChildren(String.valueOf(campaign.getNumberOfChildren())); From 9e0349902ef8988d60ba306ca13cae14d66d1c12 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 12:26:57 +0530 Subject: [PATCH 058/118] fix request issue in ors and pulse polio campaign --- .../flw/controller/CampaignController.java | 138 +++++++++++++++++- 1 file changed, 130 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index e11bc744..7b9daf3e 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -1,6 +1,7 @@ package com.iemr.flw.controller; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.iemr.flw.domain.iemr.CampaignOrs; @@ -30,12 +31,13 @@ public class CampaignController { @PostMapping("/ors/distribution/saveAll") public ResponseEntity> saveOrsDistribution( @RequestPart("formDataJson") String fields, - @RequestPart(value = "campaignPhotos", required = false) List campaignPhotos, @RequestHeader("jwtToken") String token) { Map response = new LinkedHashMap<>(); try { + logger.info("Received formDataJson: {}", fields.substring(0, Math.min(100, fields.length()))); // Log first 100 chars + // Validate input if (fields == null || fields.trim().isEmpty()) { response.put("statusCode", HttpStatus.BAD_REQUEST.value()); @@ -46,16 +48,27 @@ public ResponseEntity> saveOrsDistribution( // Parse JSON to DTO ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); - OrsCampaignListDTO orsCampaignFields = objectMapper.readValue(fields, OrsCampaignListDTO.class); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - // Set campaign photos if present - if (campaignPhotos != null && !campaignPhotos.isEmpty()) { - orsCampaignFields.setCampaignPhotos(campaignPhotos.toArray(new MultipartFile[0])); + OrsCampaignDTO requestDTO = objectMapper.readValue(fields, OrsCampaignDTO.class); + + // Validate fields + if (requestDTO.getFields() == null) { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Campaign fields are required"); + return ResponseEntity.badRequest().body(response); } + logger.info("Parsed DTO - Start Date: {}, End Date: {}, Families: {}, Photos: {}", + requestDTO.getFields().getStartDate(), + requestDTO.getFields().getEndDate(), + requestDTO.getFields().getNumberOfFamilies(), + requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().length : 0 + ); + // Create DTO OrsCampaignDTO campaignDTO = new OrsCampaignDTO(); - campaignDTO.setFields(orsCampaignFields); + campaignDTO.setFields(requestDTO.getFields()); List orsCampaignDTOList = Collections.singletonList(campaignDTO); @@ -126,6 +139,115 @@ public ResponseEntity> getAllOrsDistribution(@RequestHeader( @PostMapping("/polio/campaign/saveAll") public ResponseEntity> savePolioCampaign( + @RequestPart("formDataJson") String fields, + @RequestHeader("jwtToken") String token) { + + Map response = new LinkedHashMap<>(); + + try { + logger.info("Received filariasis campaign data"); + + // Validate input + if (fields == null || fields.trim().isEmpty()) { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Form data is required"); + return ResponseEntity.badRequest().body(response); + } + + // Parse JSON to DTO + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + PolioCampaignDTO requestDTO = objectMapper.readValue(fields, PolioCampaignDTO.class); + + // Validate fields + if (requestDTO.getFields() == null) { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Campaign fields are required"); + return ResponseEntity.badRequest().body(response); + } + + logger.info("Parsed DTO - Start Date: {}, End Date: {}, Families: {}, Individuals: {}, Photos: {}", + requestDTO.getFields().getStartDate(), + requestDTO.getFields().getEndDate(), + requestDTO.getFields().getNumberOfChildren(), + requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().length : 0 + ); + + // Create DTO + PolioCampaignDTO campaignDTO = new PolioCampaignDTO(); + campaignDTO.setFields(requestDTO.getFields()); + + List filariasisCampaignDTOList = Collections.singletonList(campaignDTO); + + // Save to database + List result = campaignService.savePolioCampaign(filariasisCampaignDTOList, token); + + if (result != null && !result.isEmpty()) { + response.put("statusCode", HttpStatus.CREATED.value()); + response.put("message", "Filariasis (MDA) campaign saved successfully"); + response.put("data", result); + return ResponseEntity.status(HttpStatus.CREATED).body(response); + } else { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Failed to save filariasis campaign"); + return ResponseEntity.badRequest().body(response); + } + + } catch (JsonProcessingException e) { + logger.error("JSON parsing error: {}", e.getMessage(), e); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Invalid JSON format"); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.badRequest().body(response); + + } catch (IEMRException e) { + logger.error("Business logic error: {}", e.getMessage(), e); + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", e.getMessage()); + return ResponseEntity.badRequest().body(response); + + } catch (Exception e) { + logger.error("Error saving filariasis campaign: {}", e.getMessage(), e); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("message", "Internal server error occurred"); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + + @RequestMapping(value = "polio/campaign/getAll", method = RequestMethod.POST) + public ResponseEntity> getAllPolioCampaign(@RequestHeader(value = "jwtToken") String token) { + + Map response = new LinkedHashMap<>(); + + try { + List result = campaignService.getPolioCampaign(token); + + + if (result != null) { + response.put("statusCode", HttpStatus.OK.value()); + response.put("data", result); + return ResponseEntity.ok(response); + } else { + response.put("statusCode", HttpStatus.NOT_FOUND.value()); + response.put("message", "No records found"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } + + } catch (Exception e) { + logger.error("Error save ors distribution :", e.getMessage()); + response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); + response.put("errorMessage", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + + + @PostMapping("/filariasis/campaign/saveAll") + public ResponseEntity> saveFilariasisCampaign( @RequestPart("formDataJson") String fields, @RequestPart(value = "campaignPhotos", required = false) List campaignPhotos, @RequestHeader("jwtToken") String token) { @@ -193,8 +315,8 @@ public ResponseEntity> savePolioCampaign( } - @RequestMapping(value = "polio/campaign/getAll", method = RequestMethod.POST) - public ResponseEntity> getAllPolioCampaign(@RequestHeader(value = "jwtToken") String token) { + @RequestMapping(value = "filariasis/campaign/getAll", method = RequestMethod.POST) + public ResponseEntity> getAllFilariasisCampaign(@RequestHeader(value = "jwtToken") String token) { Map response = new LinkedHashMap<>(); From 46eb10cb6fd9ba2c7c0845ca3478ee95341934dd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 12:34:35 +0530 Subject: [PATCH 059/118] make changes in tb api --- .../com/iemr/flw/controller/TBController.java | 15 ++- .../com/iemr/flw/domain/iemr/TBScreening.java | 113 ++++++++++++++--- .../com/iemr/flw/dto/iemr/TBScreeningDTO.java | 120 +++--------------- 3 files changed, 120 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index 6beb9008..39f119e2 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -42,9 +42,9 @@ public String getAllScreeningByUserId(@RequestBody GetBenRequestHandler requestD if (s != null) response.setResponse(s); else - response.setError(5000, "No record found"); + response.setError(500, "No record found"); } else - response.setError(5000, "Invalid/NULL request obj"); + response.setError(500, "Invalid/NULL request obj"); } catch (Exception e) { logger.error("Error in tb screening get data : " + e); response.setError(5000, "Error in tb screening get data : " + e); @@ -66,9 +66,9 @@ public String saveAllScreeningByUserId(@RequestBody TBScreeningRequestDTO reques if (s != null) response.setResponse(s); else - response.setError(5000, "No record found"); + response.setError(500, "No record found"); } else - response.setError(5000, "Invalid/NULL request obj"); + response.setError(500, "Invalid/NULL request obj"); } catch (Exception e) { logger.error("Error in save tb screening details : " + e); response.setError(5000, "Error in save tb suspected details : " + e); @@ -91,12 +91,12 @@ public String getAllSuspectedByUserId(@RequestBody GetBenRequestHandler requestD if (s != null) response.setResponse(s); else - response.setError(5000, "No record found"); + response.setError(500, "No record found"); } else - response.setError(5000, "Invalid/NULL request obj"); + response.setError(500, "Invalid/NULL request obj"); } catch (Exception e) { logger.error("Error in get data : " + e); - response.setError(5000, "Error in get data : " + e); + response.setError(500, "Error in get data : " + e); } return response.toString(); } @@ -124,4 +124,5 @@ public String saveAllSuspectedByUserId(@RequestBody TBSuspectedRequestDTO reques } return response.toString(); } + } 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 9bf7ea8d..3b6af4fa 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -4,9 +4,10 @@ import jakarta.persistence.*; import java.sql.Timestamp; +import java.time.LocalDateTime; @Entity -@Table(name = "tb_screening", schema = "db_iemr") +@Table(name = "screening_tb", schema = "db_iemr") @Data public class TBScreening { @@ -23,27 +24,105 @@ public class TBScreening { @Column(name = "visit_date") private Timestamp visitDate; - @Column(name = "cough_check") - private Boolean coughMoreThan2Weeks; + @Column(name = "visit_code", nullable = false) + private Long visitCode; - @Column(name = "blood_check") - private Boolean bloodInSputum; + // Visit Information + @Column(name = "visit_label", length = 100, nullable = false) + private String visitLabel; - @Column(name = "fever_check") - private Boolean feverMoreThan2Weeks; + @Column(name = "type_of_tb_case", length = 50, nullable = false) + private String typeOfTBCase; - @Column(name = "weight_check") - private Boolean lossOfWeight; + @Column(name = "reason_for_suspicion", length = 500) + private String reasonForSuspicion; - @Column(name = "sweats_check") - private Boolean nightSweats; + // Symptoms + @Column(name = "has_symptoms", nullable = false) + private Boolean hasSymptoms = false; - @Column(name = "history_check") - private Boolean historyOfTb; + // Sputum Test + @Column(name = "is_sputum_collected") + private Boolean isSputumCollected; - @Column(name = "drugs_check") - private Boolean takingAntiTBDrugs; + @Column(name = "sputum_submitted_at", length = 200) + private String sputumSubmittedAt; - @Column(name = "family_check") - private Boolean familySufferingFromTB; + @Column(name = "nikshay_id", length = 50) + private String nikshayId; + + @Column(name = "sputum_test_result", length = 50) + private String sputumTestResult; + + // Chest X-Ray + @Column(name = "is_chest_xray_done") + private Boolean isChestXRayDone; + + @Column(name = "chest_xray_result", length = 100) + private String chestXRayResult; + + // Referral & Confirmation + @Column(name = "referral_facility", length = 200) + private String referralFacility; + + @Column(name = "is_tb_confirmed") + private Boolean isTBConfirmed; + + @Column(name = "is_drtb_confirmed") + private Boolean isDRTBConfirmed; + + @Column(name = "is_confirmed", nullable = false) + private Boolean isConfirmed = false; + + @Column(name = "referred") + private Boolean referred; + + @Column(name = "follow_ups", columnDefinition = "TEXT") + private String followUps; + + + @Column(name = "provider_service_map_id") + private Integer providerServiceMapId; + + @Column(name = "created_by", length = 200) + private String createdBy; + + @Column(name = "updated_by", length = 200) + private String updatedBy; + + @Column(name = "created_date", updatable = false) + private LocalDateTime createdDate; + + @Column(name = "updated_date") + private LocalDateTime updatedDate; + + @Column(name = "deleted") + private Boolean deleted = false; + + @Column(name = "processed", length = 4) + private String processed = "N"; + + @PrePersist + protected void onCreate() { + this.createdDate = LocalDateTime.now(); + this.updatedDate = LocalDateTime.now(); + if (this.hasSymptoms == null) { + this.hasSymptoms = false; + } + if (this.isConfirmed == null) { + this.isConfirmed = false; + } + + if (this.deleted == null) { + this.deleted = false; + } + if (this.processed == null) { + this.processed = "N"; + } + } + + @PreUpdate + protected void onUpdate() { + this.updatedDate = LocalDateTime.now(); + } } 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 270526bd..9b30b5ba 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -12,108 +12,20 @@ public class TBScreeningDTO { private Long benId; private Timestamp visitDate; - - private Boolean coughMoreThan2Weeks; - - private Boolean bloodInSputum; - - private Boolean feverMoreThan2Weeks; - - private Boolean lossOfWeight; - - private Boolean nightSweats; - - private Boolean historyOfTb; - - private Boolean takingAntiTBDrugs; - - private Boolean familySufferingFromTB; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getBenId() { - return benId; - } - - public void setBenId(Long benId) { - this.benId = benId; - } - - public Timestamp getVisitDate() { - return visitDate; - } - - public void setVisitDate(Timestamp visitDate) { - this.visitDate = visitDate; - } - - public Boolean getCoughMoreThan2Weeks() { - return coughMoreThan2Weeks; - } - - public void setCoughMoreThan2Weeks(Boolean coughMoreThan2Weeks) { - this.coughMoreThan2Weeks = coughMoreThan2Weeks; - } - - public Boolean getBloodInSputum() { - return bloodInSputum; - } - - public void setBloodInSputum(Boolean bloodInSputum) { - this.bloodInSputum = bloodInSputum; - } - - public Boolean getFeverMoreThan2Weeks() { - return feverMoreThan2Weeks; - } - - public void setFeverMoreThan2Weeks(Boolean feverMoreThan2Weeks) { - this.feverMoreThan2Weeks = feverMoreThan2Weeks; - } - - public Boolean getLossOfWeight() { - return lossOfWeight; - } - - public void setLossOfWeight(Boolean lossOfWeight) { - this.lossOfWeight = lossOfWeight; - } - - public Boolean getNightSweats() { - return nightSweats; - } - - public void setNightSweats(Boolean nightSweats) { - this.nightSweats = nightSweats; - } - - public Boolean getHistoryOfTb() { - return historyOfTb; - } - - public void setHistoryOfTb(Boolean historyOfTb) { - this.historyOfTb = historyOfTb; - } - - public Boolean getTakingAntiTBDrugs() { - return takingAntiTBDrugs; - } - - public void setTakingAntiTBDrugs(Boolean takingAntiTBDrugs) { - this.takingAntiTBDrugs = takingAntiTBDrugs; - } - - public Boolean getFamilySufferingFromTB() { - return familySufferingFromTB; - } - - public void setFamilySufferingFromTB(Boolean familySufferingFromTB) { - this.familySufferingFromTB = familySufferingFromTB; - } + private String visitLabel; + private String typeOfTBCase; + private String reasonForSuspicion; + private Boolean hasSymptoms; + private Boolean isSputumCollected; + private String sputumSubmittedAt; + private String nikshayId; + private String sputumTestResult; + private Boolean isChestXRayDone; + private String chestXRayResult; + private String referralFacility; + private Boolean isTBConfirmed; + private Boolean isDRTBConfirmed; + private Boolean isConfirmed = false; + private Boolean referred; + private String followUps; } From e96c8a8e8ad1f198d28858d62644ec3f3a660d0e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 12:50:31 +0530 Subject: [PATCH 060/118] make tb api changes --- .../com/iemr/flw/controller/TBController.java | 4 +- .../com/iemr/flw/domain/iemr/TBScreening.java | 113 +++-------------- .../com/iemr/flw/domain/iemr/TBSuspected.java | 43 +++++++ .../com/iemr/flw/dto/iemr/TBScreeningDTO.java | 120 +++++++++++++++--- .../com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 19 +-- 5 files changed, 177 insertions(+), 122 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index 39f119e2..56afcb98 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -115,9 +115,9 @@ public String saveAllSuspectedByUserId(@RequestBody TBSuspectedRequestDTO reques if (s != null) response.setResponse(s); else - response.setError(5000, "No record found"); + response.setError(500, "No record found"); } else - response.setError(5000, "Invalid/NULL request obj"); + response.setError(500, "Invalid/NULL request obj"); } catch (Exception e) { logger.error("Error in save tb suspected details : " + e); response.setError(5000, "Error in save tb suspected details : " + e); 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 3b6af4fa..9bf7ea8d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -4,10 +4,9 @@ import jakarta.persistence.*; import java.sql.Timestamp; -import java.time.LocalDateTime; @Entity -@Table(name = "screening_tb", schema = "db_iemr") +@Table(name = "tb_screening", schema = "db_iemr") @Data public class TBScreening { @@ -24,105 +23,27 @@ public class TBScreening { @Column(name = "visit_date") private Timestamp visitDate; - @Column(name = "visit_code", nullable = false) - private Long visitCode; + @Column(name = "cough_check") + private Boolean coughMoreThan2Weeks; - // Visit Information - @Column(name = "visit_label", length = 100, nullable = false) - private String visitLabel; + @Column(name = "blood_check") + private Boolean bloodInSputum; - @Column(name = "type_of_tb_case", length = 50, nullable = false) - private String typeOfTBCase; + @Column(name = "fever_check") + private Boolean feverMoreThan2Weeks; - @Column(name = "reason_for_suspicion", length = 500) - private String reasonForSuspicion; + @Column(name = "weight_check") + private Boolean lossOfWeight; - // Symptoms - @Column(name = "has_symptoms", nullable = false) - private Boolean hasSymptoms = false; + @Column(name = "sweats_check") + private Boolean nightSweats; - // Sputum Test - @Column(name = "is_sputum_collected") - private Boolean isSputumCollected; + @Column(name = "history_check") + private Boolean historyOfTb; - @Column(name = "sputum_submitted_at", length = 200) - private String sputumSubmittedAt; + @Column(name = "drugs_check") + private Boolean takingAntiTBDrugs; - @Column(name = "nikshay_id", length = 50) - private String nikshayId; - - @Column(name = "sputum_test_result", length = 50) - private String sputumTestResult; - - // Chest X-Ray - @Column(name = "is_chest_xray_done") - private Boolean isChestXRayDone; - - @Column(name = "chest_xray_result", length = 100) - private String chestXRayResult; - - // Referral & Confirmation - @Column(name = "referral_facility", length = 200) - private String referralFacility; - - @Column(name = "is_tb_confirmed") - private Boolean isTBConfirmed; - - @Column(name = "is_drtb_confirmed") - private Boolean isDRTBConfirmed; - - @Column(name = "is_confirmed", nullable = false) - private Boolean isConfirmed = false; - - @Column(name = "referred") - private Boolean referred; - - @Column(name = "follow_ups", columnDefinition = "TEXT") - private String followUps; - - - @Column(name = "provider_service_map_id") - private Integer providerServiceMapId; - - @Column(name = "created_by", length = 200) - private String createdBy; - - @Column(name = "updated_by", length = 200) - private String updatedBy; - - @Column(name = "created_date", updatable = false) - private LocalDateTime createdDate; - - @Column(name = "updated_date") - private LocalDateTime updatedDate; - - @Column(name = "deleted") - private Boolean deleted = false; - - @Column(name = "processed", length = 4) - private String processed = "N"; - - @PrePersist - protected void onCreate() { - this.createdDate = LocalDateTime.now(); - this.updatedDate = LocalDateTime.now(); - if (this.hasSymptoms == null) { - this.hasSymptoms = false; - } - if (this.isConfirmed == null) { - this.isConfirmed = false; - } - - if (this.deleted == null) { - this.deleted = false; - } - if (this.processed == null) { - this.processed = "N"; - } - } - - @PreUpdate - protected void onUpdate() { - this.updatedDate = LocalDateTime.now(); - } + @Column(name = "family_check") + private Boolean familySufferingFromTB; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java index 7cb945a8..481e613d 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java @@ -40,4 +40,47 @@ public class TBSuspected { @Column(name = "followups") private String followUps; + + @Column(name = "visit_code", nullable = false) + private Long visitCode; + + // Visit Information + @Column(name = "visit_label", length = 100, nullable = false) + private String visitLabel; + + @Column(name = "type_of_tb_case", length = 50, nullable = false) + private String typeOfTBCase; + + @Column(name = "reason_for_suspicion", length = 500) + private String reasonForSuspicion; + + // Symptoms + @Column(name = "has_symptoms", nullable = false) + private Boolean hasSymptoms = false; + + // Chest X-Ray + @Column(name = "is_chest_xray_done") + private Boolean isChestXRayDone; + + @Column(name = "chest_xray_result", length = 100) + private String chestXRayResult; + + // Referral & Confirmation + @Column(name = "referral_facility", length = 200) + private String referralFacility; + + @Column(name = "is_tb_confirmed") + private Boolean isTBConfirmed; + + @Column(name = "is_drtb_confirmed") + private Boolean isDRTBConfirmed; + + @Column(name = "is_confirmed", nullable = false) + private Boolean isConfirmed = false; + + @Column(name = "provider_service_map_id") + private Integer providerServiceMapId; + + + } 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 9b30b5ba..270526bd 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -12,20 +12,108 @@ public class TBScreeningDTO { private Long benId; private Timestamp visitDate; - private String visitLabel; - private String typeOfTBCase; - private String reasonForSuspicion; - private Boolean hasSymptoms; - private Boolean isSputumCollected; - private String sputumSubmittedAt; - private String nikshayId; - private String sputumTestResult; - private Boolean isChestXRayDone; - private String chestXRayResult; - private String referralFacility; - private Boolean isTBConfirmed; - private Boolean isDRTBConfirmed; - private Boolean isConfirmed = false; - private Boolean referred; - private String followUps; + + private Boolean coughMoreThan2Weeks; + + private Boolean bloodInSputum; + + private Boolean feverMoreThan2Weeks; + + private Boolean lossOfWeight; + + private Boolean nightSweats; + + private Boolean historyOfTb; + + private Boolean takingAntiTBDrugs; + + private Boolean familySufferingFromTB; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getBenId() { + return benId; + } + + public void setBenId(Long benId) { + this.benId = benId; + } + + public Timestamp getVisitDate() { + return visitDate; + } + + public void setVisitDate(Timestamp visitDate) { + this.visitDate = visitDate; + } + + public Boolean getCoughMoreThan2Weeks() { + return coughMoreThan2Weeks; + } + + public void setCoughMoreThan2Weeks(Boolean coughMoreThan2Weeks) { + this.coughMoreThan2Weeks = coughMoreThan2Weeks; + } + + public Boolean getBloodInSputum() { + return bloodInSputum; + } + + public void setBloodInSputum(Boolean bloodInSputum) { + this.bloodInSputum = bloodInSputum; + } + + public Boolean getFeverMoreThan2Weeks() { + return feverMoreThan2Weeks; + } + + public void setFeverMoreThan2Weeks(Boolean feverMoreThan2Weeks) { + this.feverMoreThan2Weeks = feverMoreThan2Weeks; + } + + public Boolean getLossOfWeight() { + return lossOfWeight; + } + + public void setLossOfWeight(Boolean lossOfWeight) { + this.lossOfWeight = lossOfWeight; + } + + public Boolean getNightSweats() { + return nightSweats; + } + + public void setNightSweats(Boolean nightSweats) { + this.nightSweats = nightSweats; + } + + public Boolean getHistoryOfTb() { + return historyOfTb; + } + + public void setHistoryOfTb(Boolean historyOfTb) { + this.historyOfTb = historyOfTb; + } + + public Boolean getTakingAntiTBDrugs() { + return takingAntiTBDrugs; + } + + public void setTakingAntiTBDrugs(Boolean takingAntiTBDrugs) { + this.takingAntiTBDrugs = takingAntiTBDrugs; + } + + public Boolean getFamilySufferingFromTB() { + return familySufferingFromTB; + } + + public void setFamilySufferingFromTB(Boolean familySufferingFromTB) { + this.familySufferingFromTB = familySufferingFromTB; + } } 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 8d224a9c..b44e0ed4 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -10,18 +10,21 @@ public class TBSuspectedDTO { private Long id; private Long benId; - - private Timestamp visitDate; - + private Long visitCode; + private String visitLabel; + private String typeOfTBCase; + private String reasonForSuspicion; + private Boolean hasSymptoms; private Boolean isSputumCollected; - private String sputumSubmittedAt; - private String nikshayId; - private String sputumTestResult; - + private Boolean isChestXRayDone; + private String chestXRayResult; + private String referralFacility; + private Boolean isTBConfirmed; + private Boolean isDRTBConfirmed; + private Boolean isConfirmed; private Boolean referred; - private String followUps; } From 27f033a02629fdb0821811c58a5309743d8a04d0 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 12:57:23 +0530 Subject: [PATCH 061/118] fix date issue in request --- src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java | 3 +++ src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java index 7f8b6757..5c92c3ac 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -1,5 +1,6 @@ package com.iemr.flw.dto.iemr; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; import lombok.Data; @@ -10,9 +11,11 @@ @Data public class OrsCampaignListDTO { + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") @JsonProperty("start_date") private LocalDate StartDate; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") @JsonProperty("end_date") private LocalDate EndDate; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java index 649d3adf..86a2c6d6 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java @@ -1,5 +1,6 @@ package com.iemr.flw.dto.iemr; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import org.springframework.web.multipart.MultipartFile; @@ -8,9 +9,11 @@ @Data public class PolioCampaignListDTO { + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") @JsonProperty("start_date") private LocalDate startDate; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") @JsonProperty("end_date") private LocalDate endDate; From 9964f790176ceeb7b2ab530a7fa0b24009c4747e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 13:14:05 +0530 Subject: [PATCH 062/118] fix image issue --- .../flw/controller/CampaignController.java | 7 ++- .../iemr/flw/dto/iemr/OrsCampaignListDTO.java | 3 +- .../flw/dto/iemr/PolioCampaignListDTO.java | 3 +- .../flw/service/impl/CampaignServiceImpl.java | 58 ++++++++++--------- 4 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index 7b9daf3e..5304784a 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -63,7 +63,7 @@ public ResponseEntity> saveOrsDistribution( requestDTO.getFields().getStartDate(), requestDTO.getFields().getEndDate(), requestDTO.getFields().getNumberOfFamilies(), - requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().length : 0 + requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().size() : 0 ); // Create DTO @@ -172,7 +172,8 @@ public ResponseEntity> savePolioCampaign( requestDTO.getFields().getStartDate(), requestDTO.getFields().getEndDate(), requestDTO.getFields().getNumberOfChildren(), - requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().length : 0 + + requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().size() : 0 ); // Create DTO @@ -269,7 +270,7 @@ public ResponseEntity> saveFilariasisCampaign( // Set campaign photos if present if (campaignPhotos != null && !campaignPhotos.isEmpty()) { - polioCampaignFields.setCampaignPhotos(campaignPhotos.toArray(new MultipartFile[0])); + // polioCampaignFields.setCampaignPhotos(campaignPhotos.toArray(new MultipartFile[0])); } // Create DTO diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java index 5c92c3ac..552c4fc8 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -8,6 +8,7 @@ import java.sql.Timestamp; import java.time.LocalDate; +import java.util.List; @Data public class OrsCampaignListDTO { @@ -23,7 +24,7 @@ public class OrsCampaignListDTO { private String NumberOfFamilies; @JsonProperty("campaign_photos") - private MultipartFile[] CampaignPhotos; + private List campaignPhotos; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java index 86a2c6d6..670e790b 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java @@ -6,6 +6,7 @@ import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; +import java.util.List; @Data public class PolioCampaignListDTO { @@ -21,7 +22,7 @@ public class PolioCampaignListDTO { private String numberOfChildren; @JsonProperty("campaign_photos") - private MultipartFile[] campaignPhotos; + private List campaignPhotos; // base64 strings } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index e1f2c1c0..45992c98 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -66,11 +66,21 @@ public List saveOrsCampaign(List orsCampaignDTO, St throw new IEMRException("Invalid number format for families"); } - MultipartFile[] photos = campaignDTO.getFields().getCampaignPhotos(); - if (photos != null && photos.length > 0) { - String base64Json = convertPhotosToBase64Json(photos); - campaignOrsEntity.setCampaignPhotos(base64Json); + List photos = campaignDTO.getFields().getCampaignPhotos(); + + if (photos != null && !photos.isEmpty()) { + + // remove null / empty / invalid entries + List validPhotos = photos.stream() + .filter(p -> p != null && !p.trim().isEmpty()) + .toList(); + + if (!validPhotos.isEmpty()) { + String base64Json = convertPhotosToBase64Json(validPhotos); + campaignOrsEntity.setCampaignPhotos(base64Json); + } } + campaignOrsRequest.add(campaignOrsEntity); } @@ -142,12 +152,14 @@ public List savePolioCampaign(List polioCa } // Convert photos to base64 JSON array - MultipartFile[] photos = campaignDTO.getFields().getCampaignPhotos(); - if (photos != null && photos.length > 0) { + List photos = campaignDTO.getFields().getCampaignPhotos(); + + if (photos != null && !photos.isEmpty()) { String base64Json = convertPhotosToBase64Json(photos); campaignPolioEntity.setCampaignPhotos(base64Json); } + campaignPolioRequest.add(campaignPolioEntity); } @@ -217,37 +229,29 @@ private List parseBase64Json(String jsonString) { } - private String convertPhotosToBase64Json(MultipartFile[] photos) throws IEMRException { + private String convertPhotosToBase64Json(List photos) throws IEMRException { try { - List base64Images = new ArrayList<>(); + List cleanedBase64Images = new ArrayList<>(); - for (MultipartFile photo : photos) { - if (photo != null && !photo.isEmpty()) { - // Get file bytes - byte[] bytes = photo.getBytes(); + for (String photo : photos) { + if (photo != null && !photo.trim().isEmpty()) { - // Convert to Base64 - String base64 = Base64.getEncoder().encodeToString(bytes); + // remove data:image/...;base64, if present + String cleanBase64 = photo.contains(",") + ? photo.substring(photo.indexOf(",") + 1) + : photo; - // Get content type (image/jpeg, image/png, etc.) - String contentType = photo.getContentType(); - if (contentType == null) { - contentType = "image/jpeg"; // default - } - - // Create data URL format: data:image/jpeg;base64,xxxxx - String base64Image = "data:" + contentType + ";base64," + base64; - base64Images.add(base64Image); + cleanedBase64Images.add(cleanBase64); } } - // Convert list to JSON array string ObjectMapper objectMapper = new ObjectMapper(); - return objectMapper.writeValueAsString(base64Images); + return objectMapper.writeValueAsString(cleanedBase64Images); - } catch (IOException e) { - throw new IEMRException("Error converting photos to base64: " + e.getMessage()); + } catch (Exception e) { + throw new IEMRException("Error processing base64 photos: " + e.getMessage()); } } + } From 7266b1c985ec899ce4175ff2b45afd98e7829cbb Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 14:30:00 +0530 Subject: [PATCH 063/118] fix base64 image issue --- .../com/iemr/flw/service/CampaignService.java | 5 ++-- .../flw/service/impl/CampaignServiceImpl.java | 28 ++++++------------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/CampaignService.java b/src/main/java/com/iemr/flw/service/CampaignService.java index f443c0ed..1f2cf092 100644 --- a/src/main/java/com/iemr/flw/service/CampaignService.java +++ b/src/main/java/com/iemr/flw/service/CampaignService.java @@ -1,5 +1,6 @@ package com.iemr.flw.service; +import com.fasterxml.jackson.core.JsonProcessingException; import com.iemr.flw.domain.iemr.CampaignOrs; import com.iemr.flw.domain.iemr.PulsePolioCampaign; import com.iemr.flw.dto.iemr.OrsCampaignDTO; @@ -11,8 +12,8 @@ import java.util.List; public interface CampaignService { - List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException; - List savePolioCampaign(List polioCampaignDTOS, String token) throws IEMRException; + List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException, JsonProcessingException; + List savePolioCampaign(List polioCampaignDTOS, String token) throws IEMRException, JsonProcessingException; List getOrsCampaign(String token) throws IEMRException; List getPolioCampaign(String token) throws IEMRException; diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 45992c98..63e64212 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -39,7 +39,7 @@ public class CampaignServiceImpl implements CampaignService { @Override @Transactional - public List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException { + public List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException, JsonProcessingException { if (orsCampaignDTO == null || orsCampaignDTO.isEmpty()) { return Collections.emptyList(); // } @@ -66,20 +66,9 @@ public List saveOrsCampaign(List orsCampaignDTO, St throw new IEMRException("Invalid number format for families"); } - List photos = campaignDTO.getFields().getCampaignPhotos(); - - if (photos != null && !photos.isEmpty()) { - - // remove null / empty / invalid entries - List validPhotos = photos.stream() - .filter(p -> p != null && !p.trim().isEmpty()) - .toList(); - - if (!validPhotos.isEmpty()) { - String base64Json = convertPhotosToBase64Json(validPhotos); - campaignOrsEntity.setCampaignPhotos(base64Json); - } - } + ObjectMapper mapper = new ObjectMapper(); + String jsonPhotos = mapper.writeValueAsString(campaignDTO.getFields().getCampaignPhotos()); + campaignOrsEntity.setCampaignPhotos(jsonPhotos); campaignOrsRequest.add(campaignOrsEntity); } @@ -115,7 +104,7 @@ public List getOrsCampaign(String token) throws IEMRExce @Override @Transactional public List savePolioCampaign(List polioCampaignDTOs, String token) - throws IEMRException { + throws IEMRException, JsonProcessingException { if (polioCampaignDTOs == null || polioCampaignDTOs.isEmpty()) { throw new IEMRException("Campaign data is required"); @@ -154,10 +143,9 @@ public List savePolioCampaign(List polioCa // Convert photos to base64 JSON array List photos = campaignDTO.getFields().getCampaignPhotos(); - if (photos != null && !photos.isEmpty()) { - String base64Json = convertPhotosToBase64Json(photos); - campaignPolioEntity.setCampaignPhotos(base64Json); - } + ObjectMapper mapper = new ObjectMapper(); + String jsonPhotos = mapper.writeValueAsString(campaignDTO.getFields().getCampaignPhotos()); + campaignPolioEntity.setCampaignPhotos(jsonPhotos); campaignPolioRequest.add(campaignPolioEntity); From d24f9cda47a4a081fc40cf424e57d01bf6831fd8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 14:48:19 +0530 Subject: [PATCH 064/118] fix base64 image issue --- .../flw/controller/CampaignController.java | 14 +++++++------- .../iemr/flw/dto/iemr/OrsCampaignListDTO.java | 2 +- .../flw/dto/iemr/PolioCampaignListDTO.java | 2 +- .../flw/service/impl/CampaignServiceImpl.java | 19 ++++++++++++++++--- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index 5304784a..070a3ea8 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -63,7 +63,7 @@ public ResponseEntity> saveOrsDistribution( requestDTO.getFields().getStartDate(), requestDTO.getFields().getEndDate(), requestDTO.getFields().getNumberOfFamilies(), - requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().size() : 0 + requestDTO.getFields().getCampaignPhotos() ); // Create DTO @@ -145,7 +145,7 @@ public ResponseEntity> savePolioCampaign( Map response = new LinkedHashMap<>(); try { - logger.info("Received filariasis campaign data"); + logger.info("Received polio campaign data"); // Validate input if (fields == null || fields.trim().isEmpty()) { @@ -173,26 +173,26 @@ public ResponseEntity> savePolioCampaign( requestDTO.getFields().getEndDate(), requestDTO.getFields().getNumberOfChildren(), - requestDTO.getFields().getCampaignPhotos() != null ? requestDTO.getFields().getCampaignPhotos().size() : 0 + requestDTO.getFields().getCampaignPhotos() ); // Create DTO PolioCampaignDTO campaignDTO = new PolioCampaignDTO(); campaignDTO.setFields(requestDTO.getFields()); - List filariasisCampaignDTOList = Collections.singletonList(campaignDTO); + List polioCampaignDTOList = Collections.singletonList(campaignDTO); // Save to database - List result = campaignService.savePolioCampaign(filariasisCampaignDTOList, token); + List result = campaignService.savePolioCampaign(polioCampaignDTOList, token); if (result != null && !result.isEmpty()) { response.put("statusCode", HttpStatus.CREATED.value()); - response.put("message", "Filariasis (MDA) campaign saved successfully"); + response.put("message", "polio campaign saved successfully"); response.put("data", result); return ResponseEntity.status(HttpStatus.CREATED).body(response); } else { response.put("statusCode", HttpStatus.BAD_REQUEST.value()); - response.put("message", "Failed to save filariasis campaign"); + response.put("message", "Failed to save Polio campaign"); return ResponseEntity.badRequest().body(response); } diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java index 552c4fc8..71f54a5f 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -24,7 +24,7 @@ public class OrsCampaignListDTO { private String NumberOfFamilies; @JsonProperty("campaign_photos") - private List campaignPhotos; + private String campaignPhotos; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java index 670e790b..ef6b2268 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java @@ -22,7 +22,7 @@ public class PolioCampaignListDTO { private String numberOfChildren; @JsonProperty("campaign_photos") - private List campaignPhotos; // base64 strings + private String campaignPhotos; // base64 strings } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 63e64212..cda1479c 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -67,7 +67,14 @@ public List saveOrsCampaign(List orsCampaignDTO, St } ObjectMapper mapper = new ObjectMapper(); - String jsonPhotos = mapper.writeValueAsString(campaignDTO.getFields().getCampaignPhotos()); + String photosStr = campaignDTO.getFields().getCampaignPhotos(); + + List photosList = Collections.emptyList(); + if (photosStr != null && !photosStr.isEmpty()) { + photosList = mapper.readValue(photosStr, new TypeReference>() {}); + } + + String jsonPhotos = mapper.writeValueAsString(photosList); campaignOrsEntity.setCampaignPhotos(jsonPhotos); campaignOrsRequest.add(campaignOrsEntity); @@ -141,10 +148,16 @@ public List savePolioCampaign(List polioCa } // Convert photos to base64 JSON array - List photos = campaignDTO.getFields().getCampaignPhotos(); ObjectMapper mapper = new ObjectMapper(); - String jsonPhotos = mapper.writeValueAsString(campaignDTO.getFields().getCampaignPhotos()); + String photosStr = campaignDTO.getFields().getCampaignPhotos(); + + List photosList = Collections.emptyList(); + if (photosStr != null && !photosStr.isEmpty()) { + photosList = mapper.readValue(photosStr, new TypeReference>() {}); + } + + String jsonPhotos = mapper.writeValueAsString(photosList); campaignPolioEntity.setCampaignPhotos(jsonPhotos); From e35b9d0636e11e625c9bddb6808bfc44a317b11f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 15:05:54 +0530 Subject: [PATCH 065/118] fix base64 image issue --- src/main/java/com/iemr/flw/controller/CampaignController.java | 1 - src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index 070a3ea8..bf7db306 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -36,7 +36,6 @@ public ResponseEntity> saveOrsDistribution( Map response = new LinkedHashMap<>(); try { - logger.info("Received formDataJson: {}", fields.substring(0, Math.min(100, fields.length()))); // Log first 100 chars // Validate input if (fields == null || fields.trim().isEmpty()) { diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index cda1479c..b66f430b 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -77,6 +77,7 @@ public List saveOrsCampaign(List orsCampaignDTO, St String jsonPhotos = mapper.writeValueAsString(photosList); campaignOrsEntity.setCampaignPhotos(jsonPhotos); + campaignOrsRequest.add(campaignOrsEntity); } From 7522177ec713ac2143b3de68eabdd68a1a018bf6 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 15:08:56 +0530 Subject: [PATCH 066/118] change status code --- .../com/iemr/flw/controller/CampaignController.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index bf7db306..c35ef03c 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -75,10 +75,10 @@ public ResponseEntity> saveOrsDistribution( List result = campaignService.saveOrsCampaign(orsCampaignDTOList, token); if (result != null && !result.isEmpty()) { - response.put("statusCode", HttpStatus.CREATED.value()); + response.put("statusCode", HttpStatus.OK.value()); response.put("message", "Campaign saved successfully"); response.put("data", result); - return ResponseEntity.status(HttpStatus.CREATED).body(response); + return ResponseEntity.status(HttpStatus.OK).body(response); } else { response.put("statusCode", HttpStatus.BAD_REQUEST.value()); response.put("message", "Failed to save campaign"); @@ -185,10 +185,10 @@ public ResponseEntity> savePolioCampaign( List result = campaignService.savePolioCampaign(polioCampaignDTOList, token); if (result != null && !result.isEmpty()) { - response.put("statusCode", HttpStatus.CREATED.value()); + response.put("statusCode", HttpStatus.OK.value()); response.put("message", "polio campaign saved successfully"); response.put("data", result); - return ResponseEntity.status(HttpStatus.CREATED).body(response); + return ResponseEntity.status(HttpStatus.OK).body(response); } else { response.put("statusCode", HttpStatus.BAD_REQUEST.value()); response.put("message", "Failed to save Polio campaign"); @@ -282,10 +282,10 @@ public ResponseEntity> saveFilariasisCampaign( List result = campaignService.savePolioCampaign(polioCampaignDTOList, token); if (result != null && !result.isEmpty()) { - response.put("statusCode", HttpStatus.CREATED.value()); + response.put("statusCode", HttpStatus.OK.value()); response.put("message", "Polio campaign saved successfully"); response.put("data", result); - return ResponseEntity.status(HttpStatus.CREATED).body(response); + return ResponseEntity.status(HttpStatus.OK).body(response); } else { response.put("statusCode", HttpStatus.BAD_REQUEST.value()); response.put("message", "Failed to save polio campaign"); From 68d09dd04a409412963bae4993d375974cd1436a Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 15:14:08 +0530 Subject: [PATCH 067/118] change status code --- .../flw/controller/ChildCareController.java | 4 ++-- .../flw/service/impl/CampaignServiceImpl.java | 21 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/ChildCareController.java b/src/main/java/com/iemr/flw/controller/ChildCareController.java index d5e4335f..e29193c1 100644 --- a/src/main/java/com/iemr/flw/controller/ChildCareController.java +++ b/src/main/java/com/iemr/flw/controller/ChildCareController.java @@ -40,7 +40,7 @@ public class ChildCareController { @Operation(summary = "save HBYC details") @RequestMapping(value = {"/hbycVisit/saveAll"}, method = {RequestMethod.POST}) public String saveHbycRecords(@RequestBody List hbycDTOs, - @RequestHeader(value = "Authorization") String Authorization) { + @RequestHeader(value = "JwtToken") String token) { ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); // Pretty print @@ -52,7 +52,7 @@ public String saveHbycRecords(@RequestBody List hbycDTOs, logger.info("Saving All HBYC Details"); if (hbycDTOs != null) { - String s = childCareService.registerHBYC(hbycDTOs); + String s = childCareService.registerHBYC(hbycDTOs,token); if (s != null) response.setResponse(s); else diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index b66f430b..107eb67a 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -59,13 +59,18 @@ public List saveOrsCampaign(List orsCampaignDTO, St campaignOrsEntity.setUpdatedBy(userName); try { - campaignOrsEntity.setNumberOfFamilies( - Integer.parseInt(campaignDTO.getFields().getNumberOfFamilies()) - ); + String familiesStr = campaignDTO.getFields().getNumberOfFamilies(); + if (familiesStr != null && !familiesStr.trim().isEmpty()) { + double familiesDouble = Double.parseDouble(familiesStr); + campaignOrsEntity.setNumberOfFamilies((int) familiesDouble); + } else { + campaignOrsEntity.setNumberOfFamilies(0); // default 0 + } } catch (NumberFormatException e) { - throw new IEMRException("Invalid number format for families"); + throw new IEMRException("Invalid number format for families: " + campaignDTO.getFields().getNumberOfFamilies()); } + ObjectMapper mapper = new ObjectMapper(); String photosStr = campaignDTO.getFields().getCampaignPhotos(); @@ -140,7 +145,13 @@ public List savePolioCampaign(List polioCa try { String childrenStr = campaignDTO.getFields().getNumberOfChildren(); if (childrenStr != null && !childrenStr.trim().isEmpty()) { - campaignPolioEntity.setNumberOfChildren(Integer.parseInt(childrenStr)); + try { + // parse as double first, then cast to int + double childrenDouble = Double.parseDouble(childrenStr); + campaignPolioEntity.setNumberOfChildren((int) childrenDouble); + } catch (NumberFormatException e) { + campaignPolioEntity.setNumberOfChildren(0); // default 0 if invalid + } } else { campaignPolioEntity.setNumberOfChildren(0); } From 7aac355fe554df488dc641db19af8202feed1544 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Fri, 16 Jan 2026 15:20:14 +0530 Subject: [PATCH 068/118] Update ChildCareController.java --- src/main/java/com/iemr/flw/controller/ChildCareController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/controller/ChildCareController.java b/src/main/java/com/iemr/flw/controller/ChildCareController.java index e29193c1..e1e2c91f 100644 --- a/src/main/java/com/iemr/flw/controller/ChildCareController.java +++ b/src/main/java/com/iemr/flw/controller/ChildCareController.java @@ -52,7 +52,7 @@ public String saveHbycRecords(@RequestBody List hbycDTOs, logger.info("Saving All HBYC Details"); if (hbycDTOs != null) { - String s = childCareService.registerHBYC(hbycDTOs,token); + String s = childCareService.registerHBYC(hbycDTOs); if (s != null) response.setResponse(s); else From b57ab885530884faa18209bbeadb553f627e9e8b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 15:32:57 +0530 Subject: [PATCH 069/118] fix issue image --- .../flw/service/impl/CampaignServiceImpl.java | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 107eb67a..6a806bce 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -71,16 +71,11 @@ public List saveOrsCampaign(List orsCampaignDTO, St } - ObjectMapper mapper = new ObjectMapper(); - String photosStr = campaignDTO.getFields().getCampaignPhotos(); - - List photosList = Collections.emptyList(); - if (photosStr != null && !photosStr.isEmpty()) { - photosList = mapper.readValue(photosStr, new TypeReference>() {}); - } - - String jsonPhotos = mapper.writeValueAsString(photosList); - campaignOrsEntity.setCampaignPhotos(jsonPhotos); + List photos = campaignDTO.getFields().getCampaignPhotos(); + String photosStr = (photos != null && !photos.isEmpty()) + ? String.join(",", photos) + : null; + campaignOrsEntity.setCampaignPhotos(photosStr); campaignOrsRequest.add(campaignOrsEntity); @@ -161,16 +156,12 @@ public List savePolioCampaign(List polioCa // Convert photos to base64 JSON array - ObjectMapper mapper = new ObjectMapper(); - String photosStr = campaignDTO.getFields().getCampaignPhotos(); - - List photosList = Collections.emptyList(); - if (photosStr != null && !photosStr.isEmpty()) { - photosList = mapper.readValue(photosStr, new TypeReference>() {}); - } + List photosList = campaignDTO.getFields().getCampaignPhotos(); + String photosStr = (photosList != null && !photosList.isEmpty()) + ? String.join(",", photosList) + : null; - String jsonPhotos = mapper.writeValueAsString(photosList); - campaignPolioEntity.setCampaignPhotos(jsonPhotos); + campaignPolioEntity.setCampaignPhotos(photosStr); campaignPolioRequest.add(campaignPolioEntity); From 9d4eb33b1cf4fc4cfe4234d96f8ae4ec205b85f8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 15:37:31 +0530 Subject: [PATCH 070/118] fix issue image --- src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java | 2 +- src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java index 71f54a5f..552c4fc8 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListDTO.java @@ -24,7 +24,7 @@ public class OrsCampaignListDTO { private String NumberOfFamilies; @JsonProperty("campaign_photos") - private String campaignPhotos; + private List campaignPhotos; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java index ef6b2268..a42ef3c6 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListDTO.java @@ -18,11 +18,11 @@ public class PolioCampaignListDTO { @JsonProperty("end_date") private LocalDate endDate; - @JsonProperty("number_of_children") + @JsonProperty("children_vaccinated") private String numberOfChildren; @JsonProperty("campaign_photos") - private String campaignPhotos; // base64 strings + private List campaignPhotos; } From 3c19e25141a3c3159499ca0570785d161feb635d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 15:50:31 +0530 Subject: [PATCH 071/118] fix date issue --- .../java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 6a806bce..a2b09896 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -57,6 +57,8 @@ public List saveOrsCampaign(List orsCampaignDTO, St campaignOrsEntity.setUserId(userId); campaignOrsEntity.setCreatedBy(userName); campaignOrsEntity.setUpdatedBy(userName); + campaignOrsEntity.setStartDate(campaignDTO.getFields().getStartDate()); + campaignOrsEntity.setStartDate(campaignDTO.getFields().getEndDate()); try { String familiesStr = campaignDTO.getFields().getNumberOfFamilies(); From b296e9b2c1a0fc59993606e8223ed2ecba1246fa Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 16:42:09 +0530 Subject: [PATCH 072/118] Filariasis Campaign --- .../flw/controller/CampaignController.java | 42 +++++-- .../flw/domain/iemr/FilariasisCampaign.java | 66 ++++++++++ .../flw/dto/iemr/FilariasisCampaignDTO.java | 10 ++ .../dto/iemr/FilariasisCampaignListDTO.java | 30 +++++ .../FilariasisCampaignListResponseDTO.java | 30 +++++ .../flw/dto/iemr/FilariasisResponseDTO.java | 10 ++ .../flw/repo/iemr/FilariasisCampaignRepo.java | 13 ++ .../com/iemr/flw/service/CampaignService.java | 12 +- .../flw/service/impl/CampaignServiceImpl.java | 118 ++++++++++++++++++ 9 files changed, 314 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/FilariasisResponseDTO.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/FilariasisCampaignRepo.java diff --git a/src/main/java/com/iemr/flw/controller/CampaignController.java b/src/main/java/com/iemr/flw/controller/CampaignController.java index c35ef03c..93a19afd 100644 --- a/src/main/java/com/iemr/flw/controller/CampaignController.java +++ b/src/main/java/com/iemr/flw/controller/CampaignController.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.domain.iemr.FilariasisCampaign; import com.iemr.flw.domain.iemr.PulsePolioCampaign; import com.iemr.flw.dto.iemr.*; import com.iemr.flw.service.CampaignService; @@ -249,12 +250,13 @@ public ResponseEntity> getAllPolioCampaign(@RequestHeader(va @PostMapping("/filariasis/campaign/saveAll") public ResponseEntity> saveFilariasisCampaign( @RequestPart("formDataJson") String fields, - @RequestPart(value = "campaignPhotos", required = false) List campaignPhotos, @RequestHeader("jwtToken") String token) { Map response = new LinkedHashMap<>(); try { + logger.info("Received polio campaign data"); + // Validate input if (fields == null || fields.trim().isEmpty()) { response.put("statusCode", HttpStatus.BAD_REQUEST.value()); @@ -265,30 +267,44 @@ public ResponseEntity> saveFilariasisCampaign( // Parse JSON to DTO ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); - PolioCampaignListDTO polioCampaignFields = objectMapper.readValue(fields, PolioCampaignListDTO.class); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - // Set campaign photos if present - if (campaignPhotos != null && !campaignPhotos.isEmpty()) { - // polioCampaignFields.setCampaignPhotos(campaignPhotos.toArray(new MultipartFile[0])); + FilariasisCampaignDTO requestDTO = objectMapper.readValue(fields, FilariasisCampaignDTO.class); + + // Validate fields + if (requestDTO.getFields() == null) { + response.put("statusCode", HttpStatus.BAD_REQUEST.value()); + response.put("message", "Campaign fields are required"); + return ResponseEntity.badRequest().body(response); } + logger.info("Parsed DTO - Start Date: {}, End Date: {}, Families: {}, Individuals: {}, Photos: {}", + requestDTO.getFields().getStartDate(), + requestDTO.getFields().getEndDate(), + requestDTO.getFields().getNumberOfIndividuals(), + requestDTO.getFields().getNumberOfIndividuals(), + + requestDTO.getFields().getMdaPhotos() + ); + // Create DTO - PolioCampaignDTO campaignDTO = new PolioCampaignDTO(); - campaignDTO.setFields(polioCampaignFields); + FilariasisCampaignDTO campaignDTO = new FilariasisCampaignDTO(); + campaignDTO.setFields(requestDTO.getFields()); + + List filariasisCampaignDTOS = Collections.singletonList(campaignDTO); - List polioCampaignDTOList = Collections.singletonList(campaignDTO); // Save to database - List result = campaignService.savePolioCampaign(polioCampaignDTOList, token); + List result = campaignService.saveFilariasisCampaign(filariasisCampaignDTOS, token); if (result != null && !result.isEmpty()) { response.put("statusCode", HttpStatus.OK.value()); - response.put("message", "Polio campaign saved successfully"); + response.put("message", "filariasis campaign saved successfully"); response.put("data", result); return ResponseEntity.status(HttpStatus.OK).body(response); } else { response.put("statusCode", HttpStatus.BAD_REQUEST.value()); - response.put("message", "Failed to save polio campaign"); + response.put("message", "Failed to save filariasis campaign"); return ResponseEntity.badRequest().body(response); } @@ -306,7 +322,7 @@ public ResponseEntity> saveFilariasisCampaign( return ResponseEntity.badRequest().body(response); } catch (Exception e) { - logger.error("Error saving polio campaign: {}", e.getMessage(), e); + logger.error("Error saving filariasis campaign: {}", e.getMessage(), e); response.put("statusCode", HttpStatus.INTERNAL_SERVER_ERROR.value()); response.put("message", "Internal server error occurred"); response.put("errorMessage", e.getMessage()); @@ -321,7 +337,7 @@ public ResponseEntity> getAllFilariasisCampaign(@RequestHead Map response = new LinkedHashMap<>(); try { - List result = campaignService.getPolioCampaign(token); + List result = campaignService.getAllFilariasisCampaign(token); if (result != null) { diff --git a/src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java b/src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java new file mode 100644 index 00000000..b9f98ee8 --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/FilariasisCampaign.java @@ -0,0 +1,66 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Entity +@Table(name = "campaign_filariasis_mda",schema = "db_iemr") +@Data +public class FilariasisCampaign { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "start_date", nullable = false) + private LocalDate startDate; + + @Column(name = "end_date", nullable = false) + private LocalDate endDate; + + @Column(name = "user_id", nullable = false) + private Integer userId; + + @Column(name = "no_of_families", nullable = false) + private Integer numberOfFamilies = 0; + + @Column(name = "no_of_individuals", nullable = false) + private Integer numberOfIndividuals = 0; + + /** + * Store JSON array like ["img1.jpg","img2.jpg"] + * MySQL JSON column + */ + @Column(name = "mda_photos", columnDefinition = "json") + private String campaignPhotos; + + @Column(name = "created_by", length = 200) + private String createdBy; + + @Column(name = "updated_by", length = 200) + private String updatedBy; + + @Column(name = "created_date", updatable = false) + private LocalDateTime createdDate; + + @Column(name = "updated_date") + private LocalDateTime updatedDate; + + /* ---------- Auto timestamps ---------- */ + + @PrePersist + protected void onCreate() { + this.createdDate = LocalDateTime.now(); + this.updatedDate = LocalDateTime.now(); + } + + @PreUpdate + protected void onUpdate() { + this.updatedDate = LocalDateTime.now(); + } + + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java new file mode 100644 index 00000000..2e53ee29 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignDTO.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class FilariasisCampaignDTO { + private Long id; + private String visitDate; + private FilariasisCampaignListDTO fields; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListDTO.java new file mode 100644 index 00000000..81438df9 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListDTO.java @@ -0,0 +1,30 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDate; +import java.util.List; + +@Data +public class FilariasisCampaignListDTO { + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") + @JsonProperty("start_date") + private LocalDate startDate; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") + @JsonProperty("end_date") + private LocalDate endDate; + + @JsonProperty("no_of_families") + private String numberOfFamilies; + + @JsonProperty("no_of_individuals") + private String numberOfIndividuals; + + @JsonProperty("mda_photos") + private List mdaPhotos; + + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java new file mode 100644 index 00000000..644448a7 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java @@ -0,0 +1,30 @@ +package com.iemr.flw.dto.iemr; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDate; +import java.util.List; + +@Data +public class FilariasisCampaignListResponseDTO { + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") + @JsonProperty("start_date") + private LocalDate startDate; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") + @JsonProperty("end_date") + private LocalDate endDate; + + @JsonProperty("no_of_families") + private String numberOfFamilies; + + @JsonProperty("no_of_individuals") + private String numberOfIndividuals; + + @JsonProperty("mda_photos") + private List mdaPhotos; + + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisResponseDTO.java new file mode 100644 index 00000000..7b6dc5aa --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisResponseDTO.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class FilariasisResponseDTO { + private Long id; + private Long houseHoldId; + private FilariasisCampaignListResponseDTO fields; +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/FilariasisCampaignRepo.java b/src/main/java/com/iemr/flw/repo/iemr/FilariasisCampaignRepo.java new file mode 100644 index 00000000..1fe0d3e2 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/FilariasisCampaignRepo.java @@ -0,0 +1,13 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.FilariasisCampaign; +import com.iemr.flw.domain.iemr.PulsePolioCampaign; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FilariasisCampaignRepo extends JpaRepository { + Page findByUserId(Integer userId, Pageable pageable); +} diff --git a/src/main/java/com/iemr/flw/service/CampaignService.java b/src/main/java/com/iemr/flw/service/CampaignService.java index 1f2cf092..d1ac0201 100644 --- a/src/main/java/com/iemr/flw/service/CampaignService.java +++ b/src/main/java/com/iemr/flw/service/CampaignService.java @@ -2,19 +2,23 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.domain.iemr.FilariasisCampaign; import com.iemr.flw.domain.iemr.PulsePolioCampaign; -import com.iemr.flw.dto.iemr.OrsCampaignDTO; -import com.iemr.flw.dto.iemr.OrsCampaignResponseDTO; -import com.iemr.flw.dto.iemr.PolioCampaignDTO; -import com.iemr.flw.dto.iemr.PolioCampaignResponseDTO; +import com.iemr.flw.dto.iemr.*; import com.iemr.flw.utils.exception.IEMRException; import java.util.List; public interface CampaignService { List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException, JsonProcessingException; + List savePolioCampaign(List polioCampaignDTOS, String token) throws IEMRException, JsonProcessingException; + List getOrsCampaign(String token) throws IEMRException; List getPolioCampaign(String token) throws IEMRException; + + List saveFilariasisCampaign(List filariasisCampaignDTOS, String token) throws IEMRException; + + List getAllFilariasisCampaign(String token) throws IEMRException; } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index a2b09896..32596222 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -4,8 +4,10 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.iemr.flw.domain.iemr.CampaignOrs; +import com.iemr.flw.domain.iemr.FilariasisCampaign; import com.iemr.flw.domain.iemr.PulsePolioCampaign; import com.iemr.flw.dto.iemr.*; +import com.iemr.flw.repo.iemr.FilariasisCampaignRepo; import com.iemr.flw.repo.iemr.OrsCampaignRepo; import com.iemr.flw.repo.iemr.PulsePolioCampaignRepo; import com.iemr.flw.service.CampaignService; @@ -34,6 +36,9 @@ public class CampaignServiceImpl implements CampaignService { @Autowired private PulsePolioCampaignRepo pulsePolioCampaignRepo; + @Autowired + private FilariasisCampaignRepo filariasisCampaignRepo; + @Autowired private JwtUtil jwtUtil; @@ -178,6 +183,85 @@ public List savePolioCampaign(List polioCa } + @Override + @Transactional + public List saveFilariasisCampaign(List filariasisCampaignDTOS, String token) throws IEMRException { + + if (filariasisCampaignDTOS == null || filariasisCampaignDTOS.isEmpty()) { + throw new IEMRException("Campaign data is required"); + } + + List campaignPolioRequest = new ArrayList<>(); + Integer userId = jwtUtil.extractUserId(token); + String userName = jwtUtil.extractUsername(token); + + for (FilariasisCampaignDTO campaignDTO : filariasisCampaignDTOS) { + if (campaignDTO.getFields() == null) { + continue; + } + + FilariasisCampaign filariasisCampaign = new FilariasisCampaign(); + filariasisCampaign.setUserId(userId); + filariasisCampaign.setCreatedBy(userName); + filariasisCampaign.setUpdatedBy(userName); + + // Set start and end dates + filariasisCampaign.setStartDate(campaignDTO.getFields().getStartDate()); + filariasisCampaign.setEndDate(campaignDTO.getFields().getEndDate()); + + // Parse number of children + try { + String numberOfFamilies = campaignDTO.getFields().getNumberOfFamilies(); + String numberOfIndividuals = campaignDTO.getFields().getNumberOfIndividuals(); + if (numberOfFamilies != null && !numberOfFamilies.trim().isEmpty()) { + try { + // parse as double first, then cast to int + double noDouble = Double.parseDouble(numberOfFamilies); + filariasisCampaign.setNumberOfFamilies((int) noDouble); + } catch (NumberFormatException e) { + filariasisCampaign.setNumberOfFamilies(0); // default 0 if invalid + } + } else { + filariasisCampaign.setNumberOfFamilies(0); + } + + if (numberOfIndividuals != null && !numberOfIndividuals.trim().isEmpty()) { + try { + // parse as double first, then cast to int + double noDouble = Double.parseDouble(numberOfIndividuals); + filariasisCampaign.setNumberOfFamilies((int) noDouble); + } catch (NumberFormatException e) { + filariasisCampaign.setNumberOfIndividuals(0); // default 0 if invalid + } + } else { + filariasisCampaign.setNumberOfIndividuals(0); + } + } catch (NumberFormatException e) { + throw new IEMRException("Invalid number format for children: " + e.getMessage()); + } + + // Convert photos to base64 JSON array + + List photosList = campaignDTO.getFields().getMdaPhotos(); + String photosStr = (photosList != null && !photosList.isEmpty()) + ? String.join(",", photosList) + : null; + + filariasisCampaign.setCampaignPhotos(photosStr); + + + campaignPolioRequest.add(filariasisCampaign); + } + + if (!campaignPolioRequest.isEmpty()) { + List savedCampaigns = filariasisCampaignRepo.saveAll(campaignPolioRequest); + return savedCampaigns; + } + + throw new IEMRException("No valid campaign data to save"); + } + + @Override public List getPolioCampaign(String token) throws IEMRException { Integer userId = jwtUtil.extractUserId(token); @@ -197,6 +281,25 @@ public List getPolioCampaign(String token) throws IEMR return polioCampaignDTOSResponse; } + @Override + public List getAllFilariasisCampaign(String token) throws IEMRException { + Integer userId = jwtUtil.extractUserId(token); + List filariasisResponseDTOS = new ArrayList<>(); + int page = 0; + int pageSize = 10; + Page campaignPolioPage; + do { + Pageable pageable = PageRequest.of(page, pageSize); + campaignPolioPage = filariasisCampaignRepo.findByUserId(userId, pageable); + for (FilariasisCampaign campaignOrs : campaignPolioPage.getContent()) { + FilariasisResponseDTO dto = convertFilariasisDTO(campaignOrs); + filariasisResponseDTOS.add(dto); + } + page++; + } while (campaignPolioPage.hasNext()); + return filariasisResponseDTOS; + } + private OrsCampaignResponseDTO convertOrsToDTO(CampaignOrs campaign) { OrsCampaignResponseDTO dto = new OrsCampaignResponseDTO(); @@ -225,6 +328,21 @@ private PolioCampaignResponseDTO convertPolioToDTO(PulsePolioCampaign campaign) dto.setFields(polioCampaignListDTO); return dto; } + + private FilariasisResponseDTO convertFilariasisDTO(FilariasisCampaign campaign) { + FilariasisResponseDTO dto = new FilariasisResponseDTO(); + FilariasisCampaignListResponseDTO filariasisCampaignListDTO = new FilariasisCampaignListResponseDTO(); + if (campaign.getCampaignPhotos() != null) { + List photosList = parseBase64Json(campaign.getCampaignPhotos()); + filariasisCampaignListDTO.setMdaPhotos(photosList); // ✅ Now List matches + } + filariasisCampaignListDTO.setEndDate(campaign.getEndDate()); + filariasisCampaignListDTO.setStartDate(campaign.getStartDate()); + filariasisCampaignListDTO.setNumberOfFamilies(String.valueOf(campaign.getNumberOfFamilies())); + filariasisCampaignListDTO.setNumberOfIndividuals(String.valueOf(campaign.getNumberOfIndividuals())); + dto.setFields(filariasisCampaignListDTO); + return dto; + } private List parseBase64Json(String jsonString) { try { ObjectMapper objectMapper = new ObjectMapper(); From 2aa90c8238c48442e873330b6811917e79106ff2 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 16:49:13 +0530 Subject: [PATCH 073/118] Tb confirmed cases --- .../com/iemr/flw/controller/TBController.java | 66 ++++++++ .../flw/domain/iemr/TBConfirmedCaseDTO.java | 29 ++++ .../iemr/flw/dto/iemr/TBConfirmedCase.java | 75 +++++++++ .../iemr/TBConfirmedTreatmentRepository.java | 18 ++ .../flw/service/TBConfirmedCaseService.java | 18 ++ .../impl/TBConfirmedCaseServiceImpl.java | 154 ++++++++++++++++++ 6 files changed, 360 insertions(+) create mode 100644 src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCaseDTO.java create mode 100644 src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCase.java create mode 100644 src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java create mode 100644 src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java create mode 100644 src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index 56afcb98..e18b1abb 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -1,14 +1,17 @@ package com.iemr.flw.controller; +import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.TBScreeningRequestDTO; import com.iemr.flw.dto.iemr.TBSuspectedRequestDTO; +import com.iemr.flw.service.TBConfirmedCaseService; import com.iemr.flw.service.TBScreeningService; import com.iemr.flw.service.TBSuspectedService; import com.iemr.flw.utils.response.OutputResponse; import io.swagger.v3.oas.annotations.Operation; +import org.checkerframework.checker.units.qual.A; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +31,9 @@ public class TBController { @Autowired private TBSuspectedService tbSuspectedService; + @Autowired + private TBConfirmedCaseService tbConfirmedCaseService; + @Operation(summary = "get tb screening data of all beneficiaries registered with given user id") @RequestMapping(value = { "/screening/getAll" }, method = { RequestMethod.POST }) public String getAllScreeningByUserId(@RequestBody GetBenRequestHandler requestDTO, @@ -125,4 +131,64 @@ public String saveAllSuspectedByUserId(@RequestBody TBSuspectedRequestDTO reques return response.toString(); } + @Operation(summary = "save tb confirmed case data of beneficiary") + @RequestMapping(value = { "/confirmed/save" }, method = { RequestMethod.POST }) + public String saveConfirmedCase( + @RequestBody TBConfirmedCaseDTO requestDTO, + @RequestHeader(value = "jwtToken") String token) { + + OutputResponse response = new OutputResponse(); + + try { + if (requestDTO != null) { + + logger.info("request object with timestamp : " + + new Timestamp(System.currentTimeMillis()) + " " + + requestDTO); + + String result = tbConfirmedCaseService.save(requestDTO, token); + + if (result != null) + response.setResponse(result); + else + response.setError(500, "No record saved"); + + } else { + response.setError(500, "Invalid/NULL request obj"); + } + } catch (Exception e) { + logger.error("Error in save tb confirmed case details : ", e); + response.setError(500, "Error in save tb confirmed case details : " + e.getMessage()); + } + + return response.toString(); + } + + @Operation(summary = "get tb confirmed case by beneficiary id") + @RequestMapping(value = { "/confirmed/getAll}" }, method = { RequestMethod.GET }) + public String getConfirmedByBenId( + @PathVariable Long benId, + @RequestHeader(value = "jwtToken") String token) { + + OutputResponse response = new OutputResponse(); + + try { + String result = + tbConfirmedCaseService.getByUserId(token); + + if (result != null) + response.setResponse(result); + else + response.setError(404, "No record found"); + + } catch (Exception e) { + logger.error("Error in get tb confirmed case details : ", e); + response.setError(500, "Error in get tb confirmed case details : " + e.getMessage()); + } + + return response.toString(); + } + + + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCaseDTO.java b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCaseDTO.java new file mode 100644 index 00000000..180c3bbe --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCaseDTO.java @@ -0,0 +1,29 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class TBConfirmedCaseDTO { + + private Long benId; + private Integer userId; + private Integer suspectedTbId; + private String regimenType; + private LocalDate treatmentStartDate; + private LocalDate expectedTreatmentCompletionDate; + private LocalDate followUpDate; + private String monthlyFollowUpDone; + private String adherenceToMedicines; + private Boolean anyDiscomfort; + private Boolean treatmentCompleted; + private LocalDate actualTreatmentCompletionDate; + private String treatmentOutcome; + private LocalDate dateOfDeath; + private String placeOfDeath; + private String reasonForDeath ; + private String reasonForNotCompleting; + +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCase.java b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCase.java new file mode 100644 index 00000000..2c01638b --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCase.java @@ -0,0 +1,75 @@ +package com.iemr.flw.dto.iemr; + +import jakarta.persistence.*; +import lombok.Data; + +import java.sql.Timestamp; +import java.time.LocalDate; + +@Entity +@Data +@Table(name = "tb_confirmed_cases",schema = "db_iemr") +public class TBConfirmedCase { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "ben_id", nullable = false) + private Long benId; + @Column(name = "user_id",nullable = false) + + private Integer userId; + + @Column(name = "suspected_tb_id", nullable = false) + private Integer suspectedTbId; + + @Column(name = "regimen_type") + private String regimenType; + + @Column(name = "treatment_start_date") + private LocalDate treatmentStartDate; + + @Column(name = "expected_treatment_completion_date") + private LocalDate expectedTreatmentCompletionDate; + + @Column(name = "follow_up_date") + private LocalDate followUpDate; + + @Column(name = "monthly_follow_up_done") + private String monthlyFollowUpDone; + + @Column(name = "adherence_to_medicines") + private String adherenceToMedicines; + + @Column(name = "any_discomfort") + private Boolean anyDiscomfort; + + @Column(name = "treatment_completed") + private Boolean treatmentCompleted; + + @Column(name = "actual_treatment_completion_date") + private LocalDate actualTreatmentCompletionDate; + + @Column(name = "treatment_outcome") + private String treatmentOutcome; + + @Column(name = "date_of_death") + private LocalDate dateOfDeath; + + @Column(name = "place_of_death") + private String placeOfDeath; + + @Column(name = "reason_for_death") + private String reasonForDeath = "Tuberculosis"; + + @Column(name = "reason_for_not_completing") + private String reasonForNotCompleting; + + @Column(name = "created_at") + private LocalDate createdAt = LocalDate.now(); + + @Column(name = "updated_at") + private LocalDate updatedAt; + +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java new file mode 100644 index 00000000..d3cceaf2 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java @@ -0,0 +1,18 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.dto.iemr.TBConfirmedCase; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface TBConfirmedTreatmentRepository + extends JpaRepository { + + List findByBenId(Long benId); + List findByUserId(Integer benId); + + Optional findByBenIdAndSuspectedTbId(Long benId, Integer suspectedTbId); +} diff --git a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java new file mode 100644 index 00000000..beaffa09 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java @@ -0,0 +1,18 @@ +package com.iemr.flw.service; + +import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; +import com.iemr.flw.dto.iemr.TBConfirmedCase; +import io.swagger.v3.oas.annotations.info.License; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public interface TBConfirmedCaseService { + + String save(TBConfirmedCaseDTO tbConfirmedCaseDTO, String token) throws Exception; + + String getByBenId(Long benId, String authorisation) throws Exception; + + String getByUserId(String authorisation) throws Exception; +} diff --git a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java new file mode 100644 index 00000000..5a46795f --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -0,0 +1,154 @@ +package com.iemr.flw.service.impl; + +import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; +import com.iemr.flw.dto.iemr.TBConfirmedCase; +import com.iemr.flw.repo.iemr.TBConfirmedTreatmentRepository; +import com.iemr.flw.service.TBConfirmedCaseService; + +import com.iemr.flw.utils.JwtUtil; +import com.iemr.flw.utils.response.OutputResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class TBConfirmedCaseServiceImpl implements TBConfirmedCaseService { + + private static final Logger logger = LoggerFactory.getLogger(TBConfirmedCaseServiceImpl.class); + + private final TBConfirmedTreatmentRepository repository; + + @Autowired + private JwtUtil jwtUtil; + public TBConfirmedCaseServiceImpl(TBConfirmedTreatmentRepository repository) { + this.repository = repository; + } + + @Override + public String save(TBConfirmedCaseDTO dto, String authorisation) throws Exception { + OutputResponse response = new OutputResponse(); + + try { + if (dto != null) { + logger.info("Saving TB confirmed case: " + dto); + + TBConfirmedCase entity = new TBConfirmedCase(); + + entity.setBenId(dto.getBenId()); + entity.setUserId(dto.getUserId()); + entity.setSuspectedTbId(dto.getSuspectedTbId()); + entity.setRegimenType(dto.getRegimenType()); + entity.setTreatmentStartDate(dto.getTreatmentStartDate()); + entity.setExpectedTreatmentCompletionDate(dto.getExpectedTreatmentCompletionDate()); + entity.setFollowUpDate(dto.getFollowUpDate()); + entity.setMonthlyFollowUpDone(dto.getMonthlyFollowUpDone()); + entity.setAdherenceToMedicines(dto.getAdherenceToMedicines()); + entity.setAnyDiscomfort(dto.getAnyDiscomfort()); + entity.setTreatmentCompleted(dto.getTreatmentCompleted()); + entity.setActualTreatmentCompletionDate(dto.getActualTreatmentCompletionDate()); + entity.setTreatmentOutcome(dto.getTreatmentOutcome()); + entity.setDateOfDeath(dto.getDateOfDeath()); + entity.setPlaceOfDeath(dto.getPlaceOfDeath()); + entity.setReasonForDeath(dto.getReasonForDeath()); + entity.setReasonForNotCompleting(dto.getReasonForNotCompleting()); + + repository.save(entity); + + response.setResponse("TB Confirmed case saved successfully"); + + } else { + response.setError(500, "Invalid/NULL request obj"); + } + } catch (Exception e) { + logger.error("Error saving TB confirmed case", e); + response.setError(5000, "Error saving TB confirmed case: " + e.getMessage()); + } + + return response.toString(); + } + + @Override + public String getByBenId(Long benId, String authorisation) throws Exception { + OutputResponse response = new OutputResponse(); + + try { + List list = repository.findByBenId(benId); + + if (list != null && !list.isEmpty()) { + List dtoList = list.stream() + .map(this::toDTO) + .collect(Collectors.toList()); + + response.setResponse(dtoList.toString()); + } else { + response.setError(404, "No record found for benId: " + benId); + } + + } catch (Exception e) { + logger.error("Error getting TB confirmed case by benId", e); + response.setError(5000, "Error getting TB confirmed case: " + e.getMessage()); + } + + return response.toString(); + } + + @Override + public String getByUserId(String authorisation) throws Exception { + OutputResponse response = new OutputResponse(); + + + try { + Integer userId = jwtUtil.extractUserId(authorisation); + + List list = repository.findByUserId(userId) + .stream() + .filter(x -> x.getUserId() != null && x.getUserId().equals(userId)) + .collect(Collectors.toList()); + + if (!list.isEmpty()) { + List dtoList = list.stream() + .map(this::toDTO) + .collect(Collectors.toList()); + + response.setResponse(dtoList.toString()); + } else { + response.setError(404, "No record found for userId: " + userId); + } + + } catch (Exception e) { + logger.error("Error getting TB confirmed case by userId", e); + response.setError(5000, "Error getting TB confirmed case: " + e.getMessage()); + } + + return response.toString(); + } + + // Utility: convert entity -> DTO + private TBConfirmedCaseDTO toDTO(TBConfirmedCase entity) { + TBConfirmedCaseDTO dto = new TBConfirmedCaseDTO(); + + dto.setBenId(entity.getBenId()); + dto.setUserId(entity.getUserId()); + dto.setSuspectedTbId(entity.getSuspectedTbId()); + dto.setRegimenType(entity.getRegimenType()); + dto.setTreatmentStartDate(entity.getTreatmentStartDate()); + dto.setExpectedTreatmentCompletionDate(entity.getExpectedTreatmentCompletionDate()); + dto.setFollowUpDate(entity.getFollowUpDate()); + dto.setMonthlyFollowUpDone(entity.getMonthlyFollowUpDone()); + dto.setAdherenceToMedicines(entity.getAdherenceToMedicines()); + dto.setAnyDiscomfort(entity.getAnyDiscomfort()); + dto.setTreatmentCompleted(entity.getTreatmentCompleted()); + dto.setActualTreatmentCompletionDate(entity.getActualTreatmentCompletionDate()); + dto.setTreatmentOutcome(entity.getTreatmentOutcome()); + dto.setDateOfDeath(entity.getDateOfDeath()); + dto.setPlaceOfDeath(entity.getPlaceOfDeath()); + dto.setReasonForDeath(entity.getReasonForDeath()); + dto.setReasonForNotCompleting(entity.getReasonForNotCompleting()); + + return dto; + } +} From 66ba4e8261ef772574b2cb1c6cdddecd44bf62f4 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 17:07:26 +0530 Subject: [PATCH 074/118] Tb confirmed cases --- src/main/java/com/iemr/flw/controller/TBController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index e18b1abb..f395f59b 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -165,7 +165,7 @@ public String saveConfirmedCase( } @Operation(summary = "get tb confirmed case by beneficiary id") - @RequestMapping(value = { "/confirmed/getAll}" }, method = { RequestMethod.GET }) + @RequestMapping(value = { "/confirmed/getAll" }, method = { RequestMethod.GET }) public String getConfirmedByBenId( @PathVariable Long benId, @RequestHeader(value = "jwtToken") String token) { From 539a3e16851b69c08ac105d1ada3fd92af0a9787 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 17:19:10 +0530 Subject: [PATCH 075/118] Tb confirmed cases --- .../com/iemr/flw/{dto => domain}/iemr/TBConfirmedCase.java | 2 +- .../iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java | 2 +- .../java/com/iemr/flw/service/TBConfirmedCaseService.java | 4 ---- .../com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java | 2 +- 4 files changed, 3 insertions(+), 7 deletions(-) rename src/main/java/com/iemr/flw/{dto => domain}/iemr/TBConfirmedCase.java (98%) diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCase.java b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java similarity index 98% rename from src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCase.java rename to src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java index 2c01638b..2d0da6ea 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCase.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java @@ -1,4 +1,4 @@ -package com.iemr.flw.dto.iemr; +package com.iemr.flw.domain.iemr; import jakarta.persistence.*; import lombok.Data; diff --git a/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java index d3cceaf2..c3fae1e2 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java @@ -1,6 +1,6 @@ package com.iemr.flw.repo.iemr; -import com.iemr.flw.dto.iemr.TBConfirmedCase; +import com.iemr.flw.domain.iemr.TBConfirmedCase; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java index beaffa09..61a8d2a3 100644 --- a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java +++ b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java @@ -1,12 +1,8 @@ package com.iemr.flw.service; import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; -import com.iemr.flw.dto.iemr.TBConfirmedCase; -import io.swagger.v3.oas.annotations.info.License; import org.springframework.stereotype.Service; -import java.util.List; - @Service public interface TBConfirmedCaseService { 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 5a46795f..14c7acad 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -1,7 +1,7 @@ package com.iemr.flw.service.impl; import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; -import com.iemr.flw.dto.iemr.TBConfirmedCase; +import com.iemr.flw.domain.iemr.TBConfirmedCase; import com.iemr.flw.repo.iemr.TBConfirmedTreatmentRepository; import com.iemr.flw.service.TBConfirmedCaseService; From cc5dc006519a712ae8de12b393c92893e4b125d8 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 17:37:15 +0530 Subject: [PATCH 076/118] fix end date --- src/main/java/com/iemr/flw/controller/TBController.java | 1 - .../java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index f395f59b..96a89491 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -167,7 +167,6 @@ public String saveConfirmedCase( @Operation(summary = "get tb confirmed case by beneficiary id") @RequestMapping(value = { "/confirmed/getAll" }, method = { RequestMethod.GET }) public String getConfirmedByBenId( - @PathVariable Long benId, @RequestHeader(value = "jwtToken") String token) { OutputResponse response = new OutputResponse(); diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 32596222..56e3549a 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -63,7 +63,7 @@ public List saveOrsCampaign(List orsCampaignDTO, St campaignOrsEntity.setCreatedBy(userName); campaignOrsEntity.setUpdatedBy(userName); campaignOrsEntity.setStartDate(campaignDTO.getFields().getStartDate()); - campaignOrsEntity.setStartDate(campaignDTO.getFields().getEndDate()); + campaignOrsEntity.setEndDate(campaignDTO.getFields().getEndDate()); try { String familiesStr = campaignDTO.getFields().getNumberOfFamilies(); From 4ec2146aeef192f110b9f3262a6086263039f3b4 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 16 Jan 2026 18:04:30 +0530 Subject: [PATCH 077/118] fix ors id issue --- .../com/iemr/flw/domain/iemr/CampaignOrs.java | 6 +----- .../flw/domain/iemr/PulsePolioCampaign.java | 7 ++----- .../dto/iemr/OrsCampaignListResponseDTO.java | 20 ++++++++++++++----- .../flw/dto/iemr/OrsCampaignResponseDTO.java | 1 - .../dto/iemr/PolioCampaignResponseDTO.java | 1 - .../flw/service/impl/CampaignServiceImpl.java | 6 ++++-- 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java index 9d4c5c1a..1b53bfa1 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java +++ b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java @@ -27,11 +27,7 @@ public class CampaignOrs { @Column(name = "number_of_families", nullable = false) private Integer numberOfFamilies = 0; - /** - * Store JSON array like ["img1.jpg","img2.jpg"] - * MySQL JSON column - */ - @Column(name = "campaign_photos", columnDefinition = "json") + @Column(name = "campaign_photos") private String campaignPhotos; @Column(name = "created_by", length = 200) diff --git a/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java index 446217eb..e4733b6f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java @@ -27,11 +27,8 @@ public class PulsePolioCampaign { @Column(name = "number_of_children", nullable = false) private Integer numberOfChildren = 0; - /** - * Store JSON array like ["img1.jpg","img2.jpg"] - * MySQL JSON column - */ - @Column(name = "campaign_photos", columnDefinition = "json") + + @Column(name = "campaign_photos") private String campaignPhotos; @Column(name = "created_by", length = 200) diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java index 7b8ec2da..8527b806 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java @@ -1,5 +1,7 @@ package com.iemr.flw.dto.iemr; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.time.LocalDate; @@ -7,9 +9,17 @@ @Data public class OrsCampaignListResponseDTO { - private Long id; - private LocalDate startDate; - private LocalDate endDate; - private String numberOfFamilies; - private List campaignPhotos; // Base64 or URLs + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") + @JsonProperty("start_date") + private LocalDate StartDate; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy") + @JsonProperty("end_date") + private LocalDate EndDate; + + @JsonProperty("number_of_families") + private String NumberOfFamilies; + + @JsonProperty("campaign_photos") + private List campaignPhotos; } \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java index 44351ddb..5c8b954d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignResponseDTO.java @@ -5,6 +5,5 @@ @Data public class OrsCampaignResponseDTO { private Long id; - private String visitDate; private OrsCampaignListResponseDTO fields; } diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java index 06370ac0..a6504236 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignResponseDTO.java @@ -5,6 +5,5 @@ @Data public class PolioCampaignResponseDTO { private Long id; - private String visitDate; private PolioCampaignListResponseDTO fields; } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 56e3549a..326212c4 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -307,10 +307,11 @@ private OrsCampaignResponseDTO convertOrsToDTO(CampaignOrs campaign) { if (campaign.getCampaignPhotos() != null) { List photosList = parseBase64Json(campaign.getCampaignPhotos()); orsCampaignListDTO.setCampaignPhotos(photosList); // ✅ Now List matches - } orsCampaignListDTO.setEndDate(campaign.getEndDate()); - + } + orsCampaignListDTO.setEndDate(campaign.getEndDate()); orsCampaignListDTO.setStartDate(campaign.getStartDate()); orsCampaignListDTO.setNumberOfFamilies(String.valueOf(campaign.getNumberOfFamilies())); + dto.setId(campaign.getId()); dto.setFields(orsCampaignListDTO); return dto; } @@ -325,6 +326,7 @@ private PolioCampaignResponseDTO convertPolioToDTO(PulsePolioCampaign campaign) polioCampaignListDTO.setEndDate(campaign.getEndDate()); polioCampaignListDTO.setStartDate(campaign.getStartDate()); polioCampaignListDTO.setNumberOfChildren(String.valueOf(campaign.getNumberOfChildren())); + dto.setId(campaign.getId()); dto.setFields(polioCampaignListDTO); return dto; } From 28a231b2261db542278c5ba18b92905c35278e87 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Fri, 16 Jan 2026 20:36:54 +0530 Subject: [PATCH 078/118] Enable SpringDoc API docs and Swagger UI --- src/main/resources/application.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ab7eae2a..034fbcc4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -63,12 +63,12 @@ fhir-url= # TM Config tm-url= -springdoc.api-docs.enabled=false -springdoc.swagger-ui.enabled=false +springdoc.api-docs.enabled=true +springdoc.swagger-ui.enabled=true spring.redis.host=localhost spring.main.allow-bean-definition-overriding=true spring.redis.password= spring.redis.port=6379 -notificationurl=https://uatamrit.piramalswasthya.org/common-api/firebaseNotification/sendNotification \ No newline at end of file +notificationurl=https://uatamrit.piramalswasthya.org/common-api/firebaseNotification/sendNotification From 41db3b3e4c8deac58311782cee3ca7d5e2bbee09 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Sun, 18 Jan 2026 22:31:29 +0530 Subject: [PATCH 079/118] remove has_symptoms --- src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java | 3 --- src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 1 - 2 files changed, 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java index 481e613d..9ea5ce64 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java @@ -54,9 +54,6 @@ public class TBSuspected { @Column(name = "reason_for_suspicion", length = 500) private String reasonForSuspicion; - // Symptoms - @Column(name = "has_symptoms", nullable = false) - private Boolean hasSymptoms = false; // Chest X-Ray @Column(name = "is_chest_xray_done") 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 b44e0ed4..9c56df39 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -14,7 +14,6 @@ public class TBSuspectedDTO { private String visitLabel; private String typeOfTBCase; private String reasonForSuspicion; - private Boolean hasSymptoms; private Boolean isSputumCollected; private String sputumSubmittedAt; private String nikshayId; From 72fdce158a70401697d09a72cce86b3d7eff9ee4 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Sun, 18 Jan 2026 22:40:05 +0530 Subject: [PATCH 080/118] remove isConfirmed --- src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java | 3 --- src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 1 - 2 files changed, 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java index 9ea5ce64..7a69a17f 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java @@ -72,9 +72,6 @@ public class TBSuspected { @Column(name = "is_drtb_confirmed") private Boolean isDRTBConfirmed; - @Column(name = "is_confirmed", nullable = false) - private Boolean isConfirmed = false; - @Column(name = "provider_service_map_id") private Integer providerServiceMapId; 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 9c56df39..821b0f03 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -23,7 +23,6 @@ public class TBSuspectedDTO { private String referralFacility; private Boolean isTBConfirmed; private Boolean isDRTBConfirmed; - private Boolean isConfirmed; private Boolean referred; private String followUps; } From cd6b0a24d362a094def426cab9ced9bbb85d21cd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Sun, 18 Jan 2026 22:47:49 +0530 Subject: [PATCH 081/118] remove visit_code --- src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java | 3 --- src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 1 - 2 files changed, 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java index 7a69a17f..3fe2d66a 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java @@ -41,9 +41,6 @@ public class TBSuspected { @Column(name = "followups") private String followUps; - @Column(name = "visit_code", nullable = false) - private Long visitCode; - // Visit Information @Column(name = "visit_label", length = 100, nullable = false) private String visitLabel; 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 821b0f03..52c46e5b 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -10,7 +10,6 @@ public class TBSuspectedDTO { private Long id; private Long benId; - private Long visitCode; private String visitLabel; private String typeOfTBCase; private String reasonForSuspicion; From 84a28bc6bf94978108c37e23f6226b5196ab8fbe Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Sun, 18 Jan 2026 22:48:33 +0530 Subject: [PATCH 082/118] remove visit_code --- src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java index 3fe2d66a..417600f1 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java @@ -42,10 +42,10 @@ public class TBSuspected { private String followUps; // Visit Information - @Column(name = "visit_label", length = 100, nullable = false) + @Column(name = "visit_label") private String visitLabel; - @Column(name = "type_of_tb_case", length = 50, nullable = false) + @Column(name = "type_of_tb_case") private String typeOfTBCase; @Column(name = "reason_for_suspicion", length = 500) From 169bafea9d98fa8b9236d88f6de6f9a0b2081824 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Sun, 18 Jan 2026 23:26:55 +0530 Subject: [PATCH 083/118] fix photo campaign issue --- .../flw/service/impl/CampaignServiceImpl.java | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 326212c4..b1d618b0 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -305,8 +305,26 @@ private OrsCampaignResponseDTO convertOrsToDTO(CampaignOrs campaign) { OrsCampaignResponseDTO dto = new OrsCampaignResponseDTO(); OrsCampaignListResponseDTO orsCampaignListDTO = new OrsCampaignListResponseDTO(); if (campaign.getCampaignPhotos() != null) { - List photosList = parseBase64Json(campaign.getCampaignPhotos()); - orsCampaignListDTO.setCampaignPhotos(photosList); // ✅ Now List matches + ObjectMapper objectMapper = new ObjectMapper(); + List photosList = new ArrayList<>(); + + String photoStr = campaign.getCampaignPhotos(); + + if (photoStr != null && !photoStr.trim().isEmpty()) { + try { + // try JSON list + photosList = objectMapper.readValue( + photoStr, + new TypeReference>() {} + ); + } catch (Exception e) { + // fallback: single image + photosList.add(photoStr.trim()); + } + } + + orsCampaignListDTO.setCampaignPhotos(photosList); + // ✅ Now List matches } orsCampaignListDTO.setEndDate(campaign.getEndDate()); orsCampaignListDTO.setStartDate(campaign.getStartDate()); @@ -320,7 +338,26 @@ private PolioCampaignResponseDTO convertPolioToDTO(PulsePolioCampaign campaign) PolioCampaignResponseDTO dto = new PolioCampaignResponseDTO(); PolioCampaignListResponseDTO polioCampaignListDTO = new PolioCampaignListResponseDTO(); if (campaign.getCampaignPhotos() != null) { - List photosList = parseBase64Json(campaign.getCampaignPhotos()); + ObjectMapper objectMapper = new ObjectMapper(); + List photosList = new ArrayList<>(); + + String photoStr = campaign.getCampaignPhotos(); + + if (photoStr != null && !photoStr.trim().isEmpty()) { + try { + // try JSON list + photosList = objectMapper.readValue( + photoStr, + new TypeReference>() {} + ); + } catch (Exception e) { + // fallback: single image + photosList.add(photoStr.trim()); + } + } + + polioCampaignListDTO.setCampaignPhotos(photosList); + polioCampaignListDTO.setCampaignPhotos(photosList); // ✅ Now List matches } polioCampaignListDTO.setEndDate(campaign.getEndDate()); From dedbc4aa5413333ca1f077d24d52f969e0f66809 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 10:43:36 +0530 Subject: [PATCH 084/118] fix data type issue --- .../FilariasisCampaignListResponseDTO.java | 2 +- .../dto/iemr/OrsCampaignListResponseDTO.java | 2 +- .../iemr/PolioCampaignListResponseDTO.java | 4 +- .../com/iemr/flw/service/CampaignService.java | 2 +- .../flw/service/impl/CampaignServiceImpl.java | 92 ++++++++----------- 5 files changed, 44 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java index 644448a7..be62cfe0 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java @@ -21,7 +21,7 @@ public class FilariasisCampaignListResponseDTO { private String numberOfFamilies; @JsonProperty("no_of_individuals") - private String numberOfIndividuals; + private Double numberOfIndividuals; @JsonProperty("mda_photos") private List mdaPhotos; diff --git a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java index 8527b806..e72fb04c 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/OrsCampaignListResponseDTO.java @@ -18,7 +18,7 @@ public class OrsCampaignListResponseDTO { private LocalDate EndDate; @JsonProperty("number_of_families") - private String NumberOfFamilies; + private Double NumberOfFamilies; @JsonProperty("campaign_photos") private List campaignPhotos; diff --git a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java index 603d1676..f27468f3 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PolioCampaignListResponseDTO.java @@ -15,8 +15,8 @@ public class PolioCampaignListResponseDTO { @JsonProperty("end_date") private LocalDate endDate; - @JsonProperty("number_of_children") - private String numberOfChildren; + @JsonProperty("children_vaccinated") + private Double numberOfChildren; @JsonProperty("campaign_photos") private List campaignPhotos; diff --git a/src/main/java/com/iemr/flw/service/CampaignService.java b/src/main/java/com/iemr/flw/service/CampaignService.java index d1ac0201..26c67a6a 100644 --- a/src/main/java/com/iemr/flw/service/CampaignService.java +++ b/src/main/java/com/iemr/flw/service/CampaignService.java @@ -18,7 +18,7 @@ public interface CampaignService { List getPolioCampaign(String token) throws IEMRException; - List saveFilariasisCampaign(List filariasisCampaignDTOS, String token) throws IEMRException; + List saveFilariasisCampaign(List filariasisCampaignDTOS, String token) throws IEMRException, JsonProcessingException; List getAllFilariasisCampaign(String token) throws IEMRException; } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index b1d618b0..08a966cd 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -42,6 +42,9 @@ public class CampaignServiceImpl implements CampaignService { @Autowired private JwtUtil jwtUtil; + @Autowired + private ObjectMapper objectMapper; + @Override @Transactional public List saveOrsCampaign(List orsCampaignDTO, String token) throws IEMRException, JsonProcessingException { @@ -77,13 +80,11 @@ public List saveOrsCampaign(List orsCampaignDTO, St throw new IEMRException("Invalid number format for families: " + campaignDTO.getFields().getNumberOfFamilies()); } - - List photos = campaignDTO.getFields().getCampaignPhotos(); - String photosStr = (photos != null && !photos.isEmpty()) - ? String.join(",", photos) - : null; - campaignOrsEntity.setCampaignPhotos(photosStr); - + OrsCampaignListDTO campaignListDTO = new OrsCampaignListDTO(); + if(campaignListDTO!=null){ + String photosJson = objectMapper.writeValueAsString(campaignListDTO.getCampaignPhotos()); + campaignOrsEntity.setCampaignPhotos(photosJson); + } campaignOrsRequest.add(campaignOrsEntity); } @@ -163,13 +164,13 @@ public List savePolioCampaign(List polioCa // Convert photos to base64 JSON array - List photosList = campaignDTO.getFields().getCampaignPhotos(); - String photosStr = (photosList != null && !photosList.isEmpty()) - ? String.join(",", photosList) - : null; + PolioCampaignListDTO polioCampaignListDTO = campaignDTO.getFields(); + if(polioCampaignListDTO!=null){ + String photosJson = objectMapper.writeValueAsString(polioCampaignListDTO.getCampaignPhotos()); + campaignPolioEntity.setCampaignPhotos(photosJson); - campaignPolioEntity.setCampaignPhotos(photosStr); + } campaignPolioRequest.add(campaignPolioEntity); } @@ -185,7 +186,7 @@ public List savePolioCampaign(List polioCa @Override @Transactional - public List saveFilariasisCampaign(List filariasisCampaignDTOS, String token) throws IEMRException { + public List saveFilariasisCampaign(List filariasisCampaignDTOS, String token) throws IEMRException, JsonProcessingException { if (filariasisCampaignDTOS == null || filariasisCampaignDTOS.isEmpty()) { throw new IEMRException("Campaign data is required"); @@ -241,14 +242,13 @@ public List saveFilariasisCampaign(List photosList = campaignDTO.getFields().getMdaPhotos(); - String photosStr = (photosList != null && !photosList.isEmpty()) - ? String.join(",", photosList) - : null; - - filariasisCampaign.setCampaignPhotos(photosStr); + } campaignPolioRequest.add(filariasisCampaign); } @@ -322,13 +322,11 @@ private OrsCampaignResponseDTO convertOrsToDTO(CampaignOrs campaign) { photosList.add(photoStr.trim()); } } - orsCampaignListDTO.setCampaignPhotos(photosList); - // ✅ Now List matches } orsCampaignListDTO.setEndDate(campaign.getEndDate()); orsCampaignListDTO.setStartDate(campaign.getStartDate()); - orsCampaignListDTO.setNumberOfFamilies(String.valueOf(campaign.getNumberOfFamilies())); + orsCampaignListDTO.setNumberOfFamilies(Double.valueOf(campaign.getNumberOfFamilies())); dto.setId(campaign.getId()); dto.setFields(orsCampaignListDTO); return dto; @@ -338,7 +336,6 @@ private PolioCampaignResponseDTO convertPolioToDTO(PulsePolioCampaign campaign) PolioCampaignResponseDTO dto = new PolioCampaignResponseDTO(); PolioCampaignListResponseDTO polioCampaignListDTO = new PolioCampaignListResponseDTO(); if (campaign.getCampaignPhotos() != null) { - ObjectMapper objectMapper = new ObjectMapper(); List photosList = new ArrayList<>(); String photoStr = campaign.getCampaignPhotos(); @@ -357,12 +354,10 @@ private PolioCampaignResponseDTO convertPolioToDTO(PulsePolioCampaign campaign) } polioCampaignListDTO.setCampaignPhotos(photosList); - - polioCampaignListDTO.setCampaignPhotos(photosList); // ✅ Now List matches } polioCampaignListDTO.setEndDate(campaign.getEndDate()); polioCampaignListDTO.setStartDate(campaign.getStartDate()); - polioCampaignListDTO.setNumberOfChildren(String.valueOf(campaign.getNumberOfChildren())); + polioCampaignListDTO.setNumberOfChildren(Double.valueOf(campaign.getNumberOfChildren())); dto.setId(campaign.getId()); dto.setFields(polioCampaignListDTO); return dto; @@ -372,13 +367,27 @@ private FilariasisResponseDTO convertFilariasisDTO(FilariasisCampaign campaign) FilariasisResponseDTO dto = new FilariasisResponseDTO(); FilariasisCampaignListResponseDTO filariasisCampaignListDTO = new FilariasisCampaignListResponseDTO(); if (campaign.getCampaignPhotos() != null) { - List photosList = parseBase64Json(campaign.getCampaignPhotos()); - filariasisCampaignListDTO.setMdaPhotos(photosList); // ✅ Now List matches + List photosList = new ArrayList<>(); + String photoStr = campaign.getCampaignPhotos(); + + if (photoStr != null && !photoStr.trim().isEmpty()) { + try { + // try JSON list + photosList = objectMapper.readValue( + photoStr, + new TypeReference>() {} + ); + } catch (Exception e) { + // fallback: single image + photosList.add(photoStr.trim()); + } + } + + filariasisCampaignListDTO.setMdaPhotos(photosList); } filariasisCampaignListDTO.setEndDate(campaign.getEndDate()); filariasisCampaignListDTO.setStartDate(campaign.getStartDate()); - filariasisCampaignListDTO.setNumberOfFamilies(String.valueOf(campaign.getNumberOfFamilies())); - filariasisCampaignListDTO.setNumberOfIndividuals(String.valueOf(campaign.getNumberOfIndividuals())); + filariasisCampaignListDTO.setNumberOfIndividuals(Double.valueOf(campaign.getNumberOfIndividuals())); dto.setFields(filariasisCampaignListDTO); return dto; } @@ -392,29 +401,6 @@ private List parseBase64Json(String jsonString) { } - private String convertPhotosToBase64Json(List photos) throws IEMRException { - try { - List cleanedBase64Images = new ArrayList<>(); - - for (String photo : photos) { - if (photo != null && !photo.trim().isEmpty()) { - - // remove data:image/...;base64, if present - String cleanBase64 = photo.contains(",") - ? photo.substring(photo.indexOf(",") + 1) - : photo; - - cleanedBase64Images.add(cleanBase64); - } - } - - ObjectMapper objectMapper = new ObjectMapper(); - return objectMapper.writeValueAsString(cleanedBase64Images); - - } catch (Exception e) { - throw new IEMRException("Error processing base64 photos: " + e.getMessage()); - } - } } From b6e39e82c336d9ce395353da57aa421ce368faec Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 10:59:44 +0530 Subject: [PATCH 085/118] add column defination --- src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java | 2 +- src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java | 2 +- .../java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java index 1b53bfa1..e33e1543 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java +++ b/src/main/java/com/iemr/flw/domain/iemr/CampaignOrs.java @@ -27,7 +27,7 @@ public class CampaignOrs { @Column(name = "number_of_families", nullable = false) private Integer numberOfFamilies = 0; - @Column(name = "campaign_photos") + @Column(name = "campaign_photos",columnDefinition = "LONGTEXT") private String campaignPhotos; @Column(name = "created_by", length = 200) diff --git a/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java index e4733b6f..ddf7b8b6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java +++ b/src/main/java/com/iemr/flw/domain/iemr/PulsePolioCampaign.java @@ -28,7 +28,7 @@ public class PulsePolioCampaign { private Integer numberOfChildren = 0; - @Column(name = "campaign_photos") + @Column(name = "campaign_photos",columnDefinition = "LONGTEXT") private String campaignPhotos; @Column(name = "created_by", length = 200) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 08a966cd..0005bfb2 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -42,8 +42,7 @@ public class CampaignServiceImpl implements CampaignService { @Autowired private JwtUtil jwtUtil; - @Autowired - private ObjectMapper objectMapper; + private ObjectMapper objectMapper = new ObjectMapper(); @Override @Transactional From ca5d70cce6e19add5f1a8278a6057f4302410d1d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 11:25:33 +0530 Subject: [PATCH 086/118] add ors image --- .../java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 0005bfb2..29c67a96 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -79,7 +79,8 @@ public List saveOrsCampaign(List orsCampaignDTO, St throw new IEMRException("Invalid number format for families: " + campaignDTO.getFields().getNumberOfFamilies()); } - OrsCampaignListDTO campaignListDTO = new OrsCampaignListDTO(); + OrsCampaignListDTO campaignListDTO = campaignDTO.getFields(); + if(campaignListDTO!=null){ String photosJson = objectMapper.writeValueAsString(campaignListDTO.getCampaignPhotos()); campaignOrsEntity.setCampaignPhotos(photosJson); From 08251ddd994d3c6e3805eb76be5549018d9b90eb Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 18:59:00 +0530 Subject: [PATCH 087/118] add NumberOfIndividuals --- .../java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 29c67a96..04ad5c37 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -230,7 +230,7 @@ public List saveFilariasisCampaign(List Date: Mon, 19 Jan 2026 19:15:40 +0530 Subject: [PATCH 088/118] add NumberOfIndividuals --- .../iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java | 2 +- .../java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java index be62cfe0..6baa38d9 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java @@ -18,7 +18,7 @@ public class FilariasisCampaignListResponseDTO { private LocalDate endDate; @JsonProperty("no_of_families") - private String numberOfFamilies; + private Double numberOfFamilies; @JsonProperty("no_of_individuals") private Double numberOfIndividuals; diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 04ad5c37..4db9209a 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -388,6 +388,7 @@ private FilariasisResponseDTO convertFilariasisDTO(FilariasisCampaign campaign) filariasisCampaignListDTO.setEndDate(campaign.getEndDate()); filariasisCampaignListDTO.setStartDate(campaign.getStartDate()); filariasisCampaignListDTO.setNumberOfIndividuals(Double.valueOf(campaign.getNumberOfIndividuals())); + filariasisCampaignListDTO.setNumberOfFamilies(Double.valueOf(campaign.getNumberOfFamilies())); dto.setFields(filariasisCampaignListDTO); return dto; } From 5a5cdd3c04dd014923fbb6eb7d028c597a3da2a0 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 19:16:34 +0530 Subject: [PATCH 089/118] add NumberOfIndividuals --- .../com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java | 1 + src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java index 6baa38d9..700d4665 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/FilariasisCampaignListResponseDTO.java @@ -27,4 +27,5 @@ public class FilariasisCampaignListResponseDTO { private List mdaPhotos; + } diff --git a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java index 4db9209a..d989df6c 100644 --- a/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/CampaignServiceImpl.java @@ -389,6 +389,7 @@ private FilariasisResponseDTO convertFilariasisDTO(FilariasisCampaign campaign) filariasisCampaignListDTO.setStartDate(campaign.getStartDate()); filariasisCampaignListDTO.setNumberOfIndividuals(Double.valueOf(campaign.getNumberOfIndividuals())); filariasisCampaignListDTO.setNumberOfFamilies(Double.valueOf(campaign.getNumberOfFamilies())); + dto.setFields(filariasisCampaignListDTO); return dto; } From 88238398f26aa13b7a0195f195ce1a8791bff605 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 19:32:49 +0530 Subject: [PATCH 090/118] add api for tb confirmed cases --- .../com/iemr/flw/controller/TBController.java | 5 +- .../iemr/flw/domain/iemr/TBConfirmedCase.java | 2 +- .../flw/dto/iemr/TBConfirmedRequestDTO.java | 13 +++++ .../flw/service/TBConfirmedCaseService.java | 4 +- .../impl/TBConfirmedCaseServiceImpl.java | 50 +++++++++++-------- 5 files changed, 48 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java diff --git a/src/main/java/com/iemr/flw/controller/TBController.java b/src/main/java/com/iemr/flw/controller/TBController.java index 96a89491..e95c3ab4 100644 --- a/src/main/java/com/iemr/flw/controller/TBController.java +++ b/src/main/java/com/iemr/flw/controller/TBController.java @@ -2,6 +2,7 @@ import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; import com.iemr.flw.dto.identity.GetBenRequestHandler; +import com.iemr.flw.dto.iemr.TBConfirmedRequestDTO; import com.iemr.flw.dto.iemr.TBScreeningRequestDTO; import com.iemr.flw.dto.iemr.TBSuspectedRequestDTO; import com.iemr.flw.service.TBConfirmedCaseService; @@ -134,7 +135,7 @@ public String saveAllSuspectedByUserId(@RequestBody TBSuspectedRequestDTO reques @Operation(summary = "save tb confirmed case data of beneficiary") @RequestMapping(value = { "/confirmed/save" }, method = { RequestMethod.POST }) public String saveConfirmedCase( - @RequestBody TBConfirmedCaseDTO requestDTO, + @RequestBody TBConfirmedRequestDTO requestDTO, @RequestHeader(value = "jwtToken") String token) { OutputResponse response = new OutputResponse(); @@ -146,7 +147,7 @@ public String saveConfirmedCase( + new Timestamp(System.currentTimeMillis()) + " " + requestDTO); - String result = tbConfirmedCaseService.save(requestDTO, token); + String result = tbConfirmedCaseService.save(requestDTO.getTbConfirmedList(), token); if (result != null) response.setResponse(result); diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java index 2d0da6ea..826fa290 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java @@ -17,8 +17,8 @@ public class TBConfirmedCase { @Column(name = "ben_id", nullable = false) private Long benId; - @Column(name = "user_id",nullable = false) + @Column(name = "user_id",nullable = false) private Integer userId; @Column(name = "suspected_tb_id", nullable = false) diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java new file mode 100644 index 00000000..d3e76a4a --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedRequestDTO.java @@ -0,0 +1,13 @@ +package com.iemr.flw.dto.iemr; + +import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; +import lombok.Data; +import java.util.List; + +@Data +public class TBConfirmedRequestDTO { + + private Long userId; + + private List tbConfirmedList; +} diff --git a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java index 61a8d2a3..64505b79 100644 --- a/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java +++ b/src/main/java/com/iemr/flw/service/TBConfirmedCaseService.java @@ -3,10 +3,12 @@ import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; import org.springframework.stereotype.Service; +import java.util.List; + @Service public interface TBConfirmedCaseService { - String save(TBConfirmedCaseDTO tbConfirmedCaseDTO, String token) throws Exception; + String save(List tbConfirmedCaseDTO, String token) throws Exception; String getByBenId(Long benId, String authorisation) throws Exception; 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 14c7acad..c09e30e8 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -29,34 +29,40 @@ public TBConfirmedCaseServiceImpl(TBConfirmedTreatmentRepository repository) { } @Override - public String save(TBConfirmedCaseDTO dto, String authorisation) throws Exception { + public String save(List request, String authorisation) throws Exception { OutputResponse response = new OutputResponse(); try { - if (dto != null) { - logger.info("Saving TB confirmed case: " + dto); + if (request != null) { + logger.info("Saving TB confirmed case: " + request); TBConfirmedCase entity = new TBConfirmedCase(); + for(TBConfirmedCaseDTO dto:request){ + entity.setBenId(dto.getBenId()); + entity.setUserId(dto.getUserId()); + entity.setSuspectedTbId(dto.getSuspectedTbId()); + entity.setRegimenType(dto.getRegimenType()); + entity.setTreatmentStartDate(dto.getTreatmentStartDate()); + entity.setExpectedTreatmentCompletionDate(dto.getExpectedTreatmentCompletionDate()); + entity.setFollowUpDate(dto.getFollowUpDate()); + entity.setMonthlyFollowUpDone(dto.getMonthlyFollowUpDone()); + entity.setAdherenceToMedicines(dto.getAdherenceToMedicines()); + entity.setAnyDiscomfort(dto.getAnyDiscomfort()); + entity.setTreatmentCompleted(dto.getTreatmentCompleted()); + entity.setActualTreatmentCompletionDate(dto.getActualTreatmentCompletionDate()); + entity.setTreatmentOutcome(dto.getTreatmentOutcome()); + entity.setDateOfDeath(dto.getDateOfDeath()); + entity.setPlaceOfDeath(dto.getPlaceOfDeath()); + entity.setReasonForDeath(dto.getReasonForDeath()); + entity.setReasonForNotCompleting(dto.getReasonForNotCompleting()); + if(entity!=null){ + repository.save(entity); + + } + } + + - entity.setBenId(dto.getBenId()); - entity.setUserId(dto.getUserId()); - entity.setSuspectedTbId(dto.getSuspectedTbId()); - entity.setRegimenType(dto.getRegimenType()); - entity.setTreatmentStartDate(dto.getTreatmentStartDate()); - entity.setExpectedTreatmentCompletionDate(dto.getExpectedTreatmentCompletionDate()); - entity.setFollowUpDate(dto.getFollowUpDate()); - entity.setMonthlyFollowUpDone(dto.getMonthlyFollowUpDone()); - entity.setAdherenceToMedicines(dto.getAdherenceToMedicines()); - entity.setAnyDiscomfort(dto.getAnyDiscomfort()); - entity.setTreatmentCompleted(dto.getTreatmentCompleted()); - entity.setActualTreatmentCompletionDate(dto.getActualTreatmentCompletionDate()); - entity.setTreatmentOutcome(dto.getTreatmentOutcome()); - entity.setDateOfDeath(dto.getDateOfDeath()); - entity.setPlaceOfDeath(dto.getPlaceOfDeath()); - entity.setReasonForDeath(dto.getReasonForDeath()); - entity.setReasonForNotCompleting(dto.getReasonForNotCompleting()); - - repository.save(entity); response.setResponse("TB Confirmed case saved successfully"); From c6109b4dc5978fe003aae0063d67c5a0866aa8f5 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 19:42:24 +0530 Subject: [PATCH 091/118] add api for tb confirmed cases --- src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java | 2 -- .../com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java index 826fa290..adacdb1b 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBConfirmedCase.java @@ -21,8 +21,6 @@ public class TBConfirmedCase { @Column(name = "user_id",nullable = false) private Integer userId; - @Column(name = "suspected_tb_id", nullable = false) - private Integer suspectedTbId; @Column(name = "regimen_type") private String regimenType; 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 c09e30e8..2f4a26b7 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -40,7 +40,6 @@ public String save(List request, String authorisation) throw for(TBConfirmedCaseDTO dto:request){ entity.setBenId(dto.getBenId()); entity.setUserId(dto.getUserId()); - entity.setSuspectedTbId(dto.getSuspectedTbId()); entity.setRegimenType(dto.getRegimenType()); entity.setTreatmentStartDate(dto.getTreatmentStartDate()); entity.setExpectedTreatmentCompletionDate(dto.getExpectedTreatmentCompletionDate()); @@ -139,7 +138,6 @@ private TBConfirmedCaseDTO toDTO(TBConfirmedCase entity) { dto.setBenId(entity.getBenId()); dto.setUserId(entity.getUserId()); - dto.setSuspectedTbId(entity.getSuspectedTbId()); dto.setRegimenType(entity.getRegimenType()); dto.setTreatmentStartDate(entity.getTreatmentStartDate()); dto.setExpectedTreatmentCompletionDate(entity.getExpectedTreatmentCompletionDate()); From 129fa37640e10d2525f82f73ef9d00ff1c6aa590 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 19 Jan 2026 19:46:39 +0530 Subject: [PATCH 092/118] Update TBConfirmedTreatmentRepository.java --- .../com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java index c3fae1e2..31345dd4 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java @@ -14,5 +14,4 @@ public interface TBConfirmedTreatmentRepository List findByBenId(Long benId); List findByUserId(Integer benId); - Optional findByBenIdAndSuspectedTbId(Long benId, Integer suspectedTbId); } From f25f046afc34eab851f772d1bc52b8cbb68c692b Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 19 Jan 2026 19:55:42 +0530 Subject: [PATCH 093/118] Update TBConfirmedCaseServiceImpl.java --- .../com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2f4a26b7..3040558c 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -39,7 +39,7 @@ public String save(List request, String authorisation) throw TBConfirmedCase entity = new TBConfirmedCase(); for(TBConfirmedCaseDTO dto:request){ entity.setBenId(dto.getBenId()); - entity.setUserId(dto.getUserId()); + entity.setUserId(jwtUtil.extractUserId(authorisation)); entity.setRegimenType(dto.getRegimenType()); entity.setTreatmentStartDate(dto.getTreatmentStartDate()); entity.setExpectedTreatmentCompletionDate(dto.getExpectedTreatmentCompletionDate()); From 726bfe145a091fb9c64bb7e758504ae85fb5e517 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 19 Jan 2026 20:02:15 +0530 Subject: [PATCH 094/118] Update TBConfirmedCaseServiceImpl.java --- .../impl/TBConfirmedCaseServiceImpl.java | 34 ++++--------------- 1 file changed, 7 insertions(+), 27 deletions(-) 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 3040558c..bd8dddfa 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -4,7 +4,8 @@ import com.iemr.flw.domain.iemr.TBConfirmedCase; import com.iemr.flw.repo.iemr.TBConfirmedTreatmentRepository; import com.iemr.flw.service.TBConfirmedCaseService; - +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.response.OutputResponse; import org.slf4j.Logger; @@ -103,33 +104,12 @@ public String getByBenId(Long benId, String authorisation) throws Exception { @Override public String getByUserId(String authorisation) throws Exception { - OutputResponse response = new OutputResponse(); - - - try { - Integer userId = jwtUtil.extractUserId(authorisation); - - List list = repository.findByUserId(userId) - .stream() - .filter(x -> x.getUserId() != null && x.getUserId().equals(userId)) - .collect(Collectors.toList()); - - if (!list.isEmpty()) { - List dtoList = list.stream() - .map(this::toDTO) - .collect(Collectors.toList()); + Integer userId = jwtUtil.extractUserId(authorisation); - response.setResponse(dtoList.toString()); - } else { - response.setError(404, "No record found for userId: " + userId); - } - - } catch (Exception e) { - logger.error("Error getting TB confirmed case by userId", e); - response.setError(5000, "Error getting TB confirmed case: " + e.getMessage()); - } - - return response.toString(); + List list = repository.findByUserId(userId); + + Gson gson = new GsonBuilder().setDateFormat("MMM dd, yyyy h:mm:ss a").create(); + return gson.toJson(list); } // Utility: convert entity -> DTO From 6d9d005819fa1db1a4fa2d2858cf0d33f0087cfc Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 19 Jan 2026 20:27:19 +0530 Subject: [PATCH 095/118] Update TBSuspectedDTO.java --- src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 1 + 1 file changed, 1 insertion(+) 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 52c46e5b..2eb0950c 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -12,6 +12,7 @@ public class TBSuspectedDTO { private Long benId; private String visitLabel; private String typeOfTBCase; + private Timestamp visitDate; private String reasonForSuspicion; private Boolean isSputumCollected; private String sputumSubmittedAt; From 05281620a1a688fdac4009de9c9afead51d9351e Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 22:46:12 +0530 Subject: [PATCH 096/118] add api for tb confirmed cases --- .../com/iemr/flw/domain/iemr/TBSuspected.java | 2 ++ .../com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 2 ++ .../iemr/TBConfirmedTreatmentRepository.java | 2 -- .../impl/TBConfirmedCaseServiceImpl.java | 36 ++++++------------- .../com/iemr/flw/utils/LocalDateAdapter.java | 20 +++++++++++ 5 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/iemr/flw/utils/LocalDateAdapter.java diff --git a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java index 417600f1..2de2baf8 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBSuspected.java @@ -72,6 +72,8 @@ public class TBSuspected { @Column(name = "provider_service_map_id") private Integer providerServiceMapId; + @Column(name = "is_confirmed") + private Boolean isConfirmed; } 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 52c46e5b..29fb25f6 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -11,6 +11,7 @@ public class TBSuspectedDTO { private Long benId; private String visitLabel; + private Timestamp visitDate; private String typeOfTBCase; private String reasonForSuspicion; private Boolean isSputumCollected; @@ -21,6 +22,7 @@ public class TBSuspectedDTO { private String chestXRayResult; private String referralFacility; private Boolean isTBConfirmed; + private Boolean isConfirmed; private Boolean isDRTBConfirmed; private Boolean referred; private String followUps; diff --git a/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java index c3fae1e2..8b9303ea 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java +++ b/src/main/java/com/iemr/flw/repo/iemr/TBConfirmedTreatmentRepository.java @@ -13,6 +13,4 @@ public interface TBConfirmedTreatmentRepository List findByBenId(Long benId); List findByUserId(Integer benId); - - Optional findByBenIdAndSuspectedTbId(Long benId, Integer suspectedTbId); } 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 2f4a26b7..212a83d7 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -1,17 +1,21 @@ package com.iemr.flw.service.impl; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; import com.iemr.flw.domain.iemr.TBConfirmedCase; import com.iemr.flw.repo.iemr.TBConfirmedTreatmentRepository; import com.iemr.flw.service.TBConfirmedCaseService; import com.iemr.flw.utils.JwtUtil; +import com.iemr.flw.utils.LocalDateAdapter; import com.iemr.flw.utils.response.OutputResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @@ -39,7 +43,7 @@ public String save(List request, String authorisation) throw TBConfirmedCase entity = new TBConfirmedCase(); for(TBConfirmedCaseDTO dto:request){ entity.setBenId(dto.getBenId()); - entity.setUserId(dto.getUserId()); + entity.setUserId(jwtUtil.extractUserId(authorisation)); entity.setRegimenType(dto.getRegimenType()); entity.setTreatmentStartDate(dto.getTreatmentStartDate()); entity.setExpectedTreatmentCompletionDate(dto.getExpectedTreatmentCompletionDate()); @@ -103,33 +107,15 @@ public String getByBenId(Long benId, String authorisation) throws Exception { @Override public String getByUserId(String authorisation) throws Exception { - OutputResponse response = new OutputResponse(); - - - try { - Integer userId = jwtUtil.extractUserId(authorisation); - - List list = repository.findByUserId(userId) - .stream() - .filter(x -> x.getUserId() != null && x.getUserId().equals(userId)) - .collect(Collectors.toList()); - - if (!list.isEmpty()) { - List dtoList = list.stream() - .map(this::toDTO) - .collect(Collectors.toList()); - response.setResponse(dtoList.toString()); - } else { - response.setError(404, "No record found for userId: " + userId); - } + Integer userId = jwtUtil.extractUserId(authorisation); + List list = repository.findByUserId(userId); - } catch (Exception e) { - logger.error("Error getting TB confirmed case by userId", e); - response.setError(5000, "Error getting TB confirmed case: " + e.getMessage()); - } + Gson gson = new GsonBuilder() + .registerTypeAdapter(LocalDate.class, new LocalDateAdapter()) + .create(); - return response.toString(); + return gson.toJson(list); } // Utility: convert entity -> DTO diff --git a/src/main/java/com/iemr/flw/utils/LocalDateAdapter.java b/src/main/java/com/iemr/flw/utils/LocalDateAdapter.java new file mode 100644 index 00000000..d0081c29 --- /dev/null +++ b/src/main/java/com/iemr/flw/utils/LocalDateAdapter.java @@ -0,0 +1,20 @@ +package com.iemr.flw.utils; + +import com.google.gson.*; +import java.lang.reflect.Type; +import java.time.LocalDate; + +public class LocalDateAdapter + implements JsonSerializer, JsonDeserializer { + + @Override + public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src.toString()); // yyyy-MM-dd + } + + @Override + public LocalDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + return LocalDate.parse(json.getAsString()); + } +} From 35355e38f69cd00727d1e2c8540de6b5a3346fc5 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 19 Jan 2026 23:11:19 +0530 Subject: [PATCH 097/118] add api for tb confirmed cases --- src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java | 1 - 1 file changed, 1 deletion(-) 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 13231fd4..29fb25f6 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBSuspectedDTO.java @@ -13,7 +13,6 @@ public class TBSuspectedDTO { private String visitLabel; private Timestamp visitDate; private String typeOfTBCase; - private Timestamp visitDate; private String reasonForSuspicion; private Boolean isSputumCollected; private String sputumSubmittedAt; From 1f6d2c689f2724e0634772ee6190edf03c9c535c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 20 Jan 2026 11:01:48 +0530 Subject: [PATCH 098/118] add api for tb tb confirmed cases --- .../flw/dto/iemr/TBConfirmedCasesResponseDTO.java | 11 +++++++++++ .../flw/service/impl/TBConfirmedCaseServiceImpl.java | 8 +++++--- 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCasesResponseDTO.java diff --git a/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCasesResponseDTO.java b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCasesResponseDTO.java new file mode 100644 index 00000000..42504dcd --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/TBConfirmedCasesResponseDTO.java @@ -0,0 +1,11 @@ +package com.iemr.flw.dto.iemr; + +import com.iemr.flw.domain.iemr.TBConfirmedCase; +import lombok.Data; + +import java.util.List; +@Data +public class TBConfirmedCasesResponseDTO { + Integer userId ; + List tbConfirmedCases; +} 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 9b4f80a7..39b12177 100644 --- a/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/TBConfirmedCaseServiceImpl.java @@ -4,6 +4,7 @@ import com.google.gson.GsonBuilder; import com.iemr.flw.domain.iemr.TBConfirmedCaseDTO; import com.iemr.flw.domain.iemr.TBConfirmedCase; +import com.iemr.flw.dto.iemr.TBConfirmedCasesResponseDTO; import com.iemr.flw.repo.iemr.TBConfirmedTreatmentRepository; import com.iemr.flw.service.TBConfirmedCaseService; import com.google.gson.Gson; @@ -108,15 +109,16 @@ public String getByBenId(Long benId, String authorisation) throws Exception { @Override public String getByUserId(String authorisation) throws Exception { - + TBConfirmedCasesResponseDTO tbConfirmedCasesResponseDTO = new TBConfirmedCasesResponseDTO(); Integer userId = jwtUtil.extractUserId(authorisation); List list = repository.findByUserId(userId); - + tbConfirmedCasesResponseDTO.setUserId(userId); + tbConfirmedCasesResponseDTO.setTbConfirmedCases(list); Gson gson = new GsonBuilder() .registerTypeAdapter(LocalDate.class, new LocalDateAdapter()) .create(); - return gson.toJson(list); + return gson.toJson(tbConfirmedCasesResponseDTO); } // Utility: convert entity -> DTO From 68e12262befbdd276cc1a5f0e49ac58e0bdda6bd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 20 Jan 2026 16:52:04 +0530 Subject: [PATCH 099/118] AMM-2135 add More Parameters in the API --- .../com/iemr/flw/domain/iemr/TBScreening.java | 24 +++++++++++++++++++ .../com/iemr/flw/dto/iemr/TBScreeningDTO.java | 11 +++++++++ 2 files changed, 35 insertions(+) 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 9bf7ea8d..aab7d251 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -46,4 +46,28 @@ public class TBScreening { @Column(name = "family_check") private Boolean familySufferingFromTB; + + @Column(name = "rise_of_fever") + private Boolean riseOfFever; + + @Column(name = "loss_of_appetite") + private Boolean lossOfAppetite; + + @Column(name = "age") + private Boolean age; + + @Column(name = "diabetic") + private Boolean diabetic; + + @Column(name = "tobacco_user") + private Boolean tobaccoUser; + + @Column(name = "bmi") + private Boolean bmi; + + @Column(name = "contact_with_tb_patient") + private Boolean contactWithTBPatient; + + @Column(name = "history_of_tb_in_last_five_yrs") + private Boolean historyOfTBInLastFiveYrs; } 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 270526bd..73e9a030 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -29,6 +29,17 @@ public class TBScreeningDTO { private Boolean familySufferingFromTB; + private Boolean riseOfFever; + private Boolean lossOfAppetite; + private Boolean age; + private Boolean diabetic; + private Boolean tobaccoUser; + private Boolean bmi; + private Boolean contactWithTBPatient; + private Boolean historyOfTBInLastFiveYrs; + + + public Long getId() { return id; } From 4cc15d4d46eb8ba52986d5db0752c6d57818ac83 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 21 Jan 2026 16:43:11 +0530 Subject: [PATCH 100/118] add new column in tb screening --- src/main/java/com/iemr/flw/domain/iemr/TBScreening.java | 9 +++++++++ src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java | 4 ++++ 2 files changed, 13 insertions(+) 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 aab7d251..6789f9bf 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java +++ b/src/main/java/com/iemr/flw/domain/iemr/TBScreening.java @@ -70,4 +70,13 @@ public class TBScreening { @Column(name = "history_of_tb_in_last_five_yrs") private Boolean historyOfTBInLastFiveYrs; + + @Column(name = "sympotomatic") + private String sympotomatic; + + @Column(name = "asymptomatic") + private String asymptomatic; + + @Column(name = "recommandate_test") + private String recommandateTest; } 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 73e9a030..017d73af 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/TBScreeningDTO.java @@ -37,6 +37,10 @@ public class TBScreeningDTO { private Boolean bmi; private Boolean contactWithTBPatient; private Boolean historyOfTBInLastFiveYrs; + private String sympotomatic; + private String asymptomatic; + private String recommandateTest; + From 448d38361905f2b0f5ea1eb41c3088d3b384a760 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Mon, 2 Feb 2026 17:49:26 +0530 Subject: [PATCH 101/118] Update common_docker.properties --- src/main/environment/common_docker.properties | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/environment/common_docker.properties b/src/main/environment/common_docker.properties index b6650a5d..befe0069 100644 --- a/src/main/environment/common_docker.properties +++ b/src/main/environment/common_docker.properties @@ -1,5 +1,5 @@ -fhir-url = ${FHIR_URL} -tm-url = ${TM_URL} +fhir-url = ${FHIR_API} +tm-url = ${TM_API} ##--------------------------------------------## Primary db------------------------------------------------------------------- @@ -38,3 +38,4 @@ send-message-url=${SMS_MESSAGE_URL} #crash.logs.base.path=${CRASH_LOGS_PATH} + From 5fbfea4ab4d1ab845d10accfbe81e659718cf96c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 3 Feb 2026 12:25:03 +0530 Subject: [PATCH 102/118] Check is document is upload during claim incentive --- src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java | 5 +++++ 1 file changed, 5 insertions(+) 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 58da9958..9a07f65c 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/IncentiveRecordDTO.java @@ -1,5 +1,6 @@ package com.iemr.flw.dto.iemr; +import jakarta.persistence.Column; import lombok.Data; import java.sql.Timestamp; @@ -30,5 +31,9 @@ public class IncentiveRecordDTO { private Timestamp updatedDate; private String updatedBy; + + private Boolean isEligible; + + private Boolean isDefaultActivity; } From 6a3b96b925d8030268f1ed5f1082ccee547c1a04 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 5 Feb 2026 11:45:58 +0530 Subject: [PATCH 103/118] Incentive for Completing treatment of PB (Paucibacillary) leprosy patients --- .../controller/DiseaseControlController.java | 4 +- .../flw/service/DiseaseControlService.java | 2 +- .../flw/service/IncentiveLogicService.java | 10 ++ .../impl/DiseaseControlServiceImpl.java | 40 +++--- .../flw/service/impl/IncentiveLogicImpl.java | 115 ++++++++++++++++++ 5 files changed, 152 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/iemr/flw/service/IncentiveLogicService.java create mode 100644 src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java diff --git a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java index e89a5306..5ca4db8d 100644 --- a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java +++ b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java @@ -142,13 +142,13 @@ public ResponseEntity> saveFilaria(@RequestBody FilariaDTO f } @RequestMapping(value = "leprosy/saveAll", method = RequestMethod.POST, consumes = "application/json", produces = "application/json",headers = "Authorization") - public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO) { + public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO,@RequestHeader(value = "JwtToken") String token) { Map response = new HashMap<>(); try { if(leprosyDTO!=null){ response.put("status", "Success"); response.put("statusCode", 200); - response.put("data", diseaseControlService.saveLeprosy(leprosyDTO)); + response.put("data", diseaseControlService.saveLeprosy(leprosyDTO,token)); }else { response.put("message", "Invalid request"); response.put("statusCode", 400); diff --git a/src/main/java/com/iemr/flw/service/DiseaseControlService.java b/src/main/java/com/iemr/flw/service/DiseaseControlService.java index 65e315dc..db20d712 100644 --- a/src/main/java/com/iemr/flw/service/DiseaseControlService.java +++ b/src/main/java/com/iemr/flw/service/DiseaseControlService.java @@ -35,7 +35,7 @@ public interface DiseaseControlService { public String saveKalaAzar(KalaAzarDTO kalaAzarDTO); public String saveAES(AesJeDTO aesJeDTO); public String saveFilaria(FilariaDTO filariaDTO); - public String saveLeprosy(LeprosyDTO leprosyDTO); + public String saveLeprosy(LeprosyDTO leprosyDTO, String token); public Object getAllScreeningData(GetDiseaseRequestHandler getDiseaseRequestHandler); public List saveMosquitoMobilizationNet(List mosquitoNetDTOList); diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java new file mode 100644 index 00000000..3c48c1cf --- /dev/null +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -0,0 +1,10 @@ +package com.iemr.flw.service; + +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public interface IncentiveLogicService { + public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); +} diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index d5f009ea..f5d3ff73 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -32,6 +32,7 @@ import com.iemr.flw.masterEnum.DiseaseType; import com.iemr.flw.repo.iemr.*; import com.iemr.flw.service.DiseaseControlService; +import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; import org.slf4j.Logger; @@ -45,6 +46,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; + import org.modelmapper.ModelMapper; @Service @@ -86,8 +88,11 @@ public class DiseaseControlServiceImpl implements DiseaseControlService { @Autowired private JwtUtil jwtUtil; + @Autowired + private IncentiveLogicService incentiveLogicService; + - private final Logger logger = LoggerFactory.getLogger(CoupleController.class); + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); @Override public String saveMalaria(MalariaDTO diseaseControlDTO) { @@ -109,7 +114,7 @@ public String saveMalaria(MalariaDTO diseaseControlDTO) { @Override public String saveKalaAzar(KalaAzarDTO diseaseControlDTO) { - logger.info("Save request: "+diseaseControlDTO.toString()); + logger.info("Save request: " + diseaseControlDTO.toString()); for (DiseaseKalaAzarDTO diseaseControlData : diseaseControlDTO.getKalaAzarLists()) { if (diseaseKalaAzarRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { return updateKalaAzarDisease(diseaseControlData); @@ -275,7 +280,7 @@ private String updateFilaria(DiseaseFilariasisDTO diseaseControlData) { @Override - public String saveLeprosy(LeprosyDTO diseaseControlDTO) { + public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { for (DiseaseLeprosyDTO diseaseControlData : diseaseControlDTO.getLeprosyLists()) { if (diseaseLeprosyRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { return updateLeprosyData(diseaseControlData); @@ -283,7 +288,15 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO) { if (diseaseControlDTO.getUserId() != null) { diseaseControlData.setUserId(diseaseControlDTO.getUserId()); } - diseaseLeprosyRepository.save(saveLeprosyData(diseaseControlData)); + ScreeningLeprosy screeningLeprosy = diseaseLeprosyRepository.save(saveLeprosyData(diseaseControlData)); + if (screeningLeprosy != null) { + if (screeningLeprosy.getIsConfirmed()) { + if (screeningLeprosy.getTypeOfLeprosy().toLowerCase().equals("PB (Paucibacillary)")) { + incentiveLogicService.incentiveForLeprosyConfirmed(screeningLeprosy.getBenId(), screeningLeprosy.getTreatmentStartDate(), screeningLeprosy.getTreatmentEndDate(), token); + } + } + } + return "Data add successfully"; } @@ -356,10 +369,10 @@ private String updateLeprosyFollowUpData(LeprosyFollowUpDTO data, LeprosyFollowU public String saveLeprosyFollowUp(LeprosyFollowUpDTO dto) { if (dto == null) return "Invalid data"; - LeprosyFollowUp entity = saveLeprosyFollowUpData(dto); - leprosyFollowUpRepository.save(entity); - return "Follow-up data added successfully"; - + LeprosyFollowUp entity = saveLeprosyFollowUpData(dto); + leprosyFollowUpRepository.save(entity); + return "Follow-up data added successfully"; + } @Override @@ -609,7 +622,7 @@ public Object getAllLeprosy(GetDiseaseRequestHandler getDiseaseRequestHandler) { private ScreeningKalaAzar saveKalaAzarDisease(DiseaseKalaAzarDTO dto) { - logger.info("KalaAzarRequest: "+dto); + logger.info("KalaAzarRequest: " + dto); ScreeningKalaAzar entity = new ScreeningKalaAzar(); entity.setBenId(dto.getBenId()); @@ -948,12 +961,10 @@ public List saveMosquitoMobilizationNet(List mos }).collect(Collectors.toList()); - // ✅ Save all List savedEntities = mosquitoNetRepository.saveAll(entityList); - // ✅ Entity → DTO return return savedEntities.stream().map(entity -> { @@ -1001,15 +1012,13 @@ public List getAllMosquitoMobilizationNet(Integer userId) { mosquitoNetListDTO.setIs_net_distributed(entity.getIsNetDistributed()); mosquitoNetListDTO.setVisit_date(entity.getVisitDate().format(formatter)); - dto.setFields(mosquitoNetListDTO); + dto.setFields(mosquitoNetListDTO); return dto; }).collect(Collectors.toList()); } - - private void checkAndAddIncentives(ScreeningMalaria diseaseScreening) { IncentiveActivity diseaseScreeningActivity; if (Objects.equals(diseaseScreening.getCaseStatus(), "Confirmed Case")) { @@ -1060,10 +1069,9 @@ record = new IncentiveActivityRecord(); } - @Override public List saveChronicDiseaseVisit( - List requestList,String token) throws IEMRException { + List requestList, String token) throws IEMRException { List responseList = new ArrayList<>(); diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java new file mode 100644 index 00000000..08b7e404 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -0,0 +1,115 @@ +package com.iemr.flw.service.impl; + +import com.iemr.flw.domain.iemr.IncentiveActivity; +import com.iemr.flw.domain.iemr.IncentiveActivityRecord; +import com.iemr.flw.masterEnum.GroupName; +import com.iemr.flw.masterEnum.StateCode; +import com.iemr.flw.repo.iemr.IncentiveRecordRepo; +import com.iemr.flw.repo.iemr.IncentivesRepo; +import com.iemr.flw.service.IncentiveLogicService; +import com.iemr.flw.service.UserService; +import com.iemr.flw.utils.JwtUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.util.Date; + +@Service +public class IncentiveLogicImpl implements IncentiveLogicService { + + private static final Logger logger = LoggerFactory.getLogger(IncentiveLogicImpl.class); + + @Autowired + private IncentivesRepo incentivesRepo; + + @Autowired + private IncentiveRecordRepo incentiveRecordRepo; + + @Autowired + private JwtUtil jwtUtil; + + @Autowired + private UserService userService; + + @Override + public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token) { + try { + Integer stateCode = userService.getUserDetail(jwtUtil.extractUserId(token)).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", jwtUtil.extractUserId(token)); + return; + } + + String activityName = "NLEP_PB_TREATMENT"; + + if (stateCode.equals(StateCode.AM.getStateCode())) { + processIncentive(activityName, GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, treatmentStartDate, treatmentEndDate, token); + } + if (stateCode.equals(StateCode.CG.getStateCode())) { + processIncentive(activityName, GroupName.ACTIVITY.getDisplayName(), + benId, treatmentStartDate, treatmentEndDate, token); + } + + + } catch (Exception e) { + logger.error("Check Leprosy Incentive Exception: ", e); + } + } + + private void processIncentive(String activityName, String groupName, Long benId, + Date startDate, Date endDate, String token) { + try { + IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, groupName); + + if (activity == null) { + logger.info("No IncentiveActivity found for name: {} and group: {}", activityName, groupName); + return; + } + + saveIncentive(activity, benId, startDate, endDate, token); + + } catch (Exception e) { + logger.error("Process Incentive Exception: ", e); + } + } + + private void saveIncentive(IncentiveActivity activity, Long benId, Date startDate, Date endDate, String token) { + try { + Timestamp startTimestamp = new Timestamp(startDate.getTime()); + Timestamp endTimestamp = new Timestamp(endDate.getTime()); + String username = jwtUtil.extractUsername(token); + + IncentiveActivityRecord record = incentiveRecordRepo + .findRecordByActivityIdCreatedDateBenId(activity.getId(), startTimestamp, benId); + + if (record != null) { + logger.info("Incentive already exists for benId: {}, activityId: {}", benId, activity.getId()); + return; + } + + record = new IncentiveActivityRecord(); + record.setActivityId(activity.getId()); + record.setCreatedDate(startTimestamp); + record.setUpdatedDate(startTimestamp); + record.setStartDate(startTimestamp); + record.setEndDate(endTimestamp); + record.setCreatedBy(username); + record.setUpdatedBy(username); + record.setBenId(benId); + record.setAshaId(jwtUtil.extractUserId(token)); + record.setName(activity.getName()); + record.setAmount(Long.valueOf(activity.getRate())); + + incentiveRecordRepo.save(record); + logger.info("Leprosy Incentive saved successfully for benId: {}", benId); + + } catch (Exception e) { + logger.error("Save Leprosy Incentive Exception: ", e); + } + } +} From e4af5f98b2a4c2bdbd39e32c6d28bcf3ecedfdd0 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 13:10:58 +0530 Subject: [PATCH 104/118] fix code rabit comment --- .../flw/service/IncentiveLogicService.java | 4 +- .../impl/DiseaseControlServiceImpl.java | 17 +++- .../flw/service/impl/IncentiveLogicImpl.java | 87 ++++++++++++++----- .../impl/MaternalHealthServiceImpl.java | 2 + 4 files changed, 87 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index 3c48c1cf..ec3d86b8 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -1,10 +1,10 @@ package com.iemr.flw.service; +import com.iemr.flw.domain.iemr.IncentiveActivityRecord; import org.springframework.stereotype.Service; import java.util.Date; -@Service public interface IncentiveLogicService { - public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); + public IncentiveActivityRecord incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); } diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index f5d3ff73..7a22fc8f 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -35,6 +35,7 @@ import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; +import jakarta.transaction.Transactional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -280,6 +281,7 @@ private String updateFilaria(DiseaseFilariasisDTO diseaseControlData) { @Override + @Transactional public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { for (DiseaseLeprosyDTO diseaseControlData : diseaseControlDTO.getLeprosyLists()) { if (diseaseLeprosyRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { @@ -292,7 +294,20 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { if (screeningLeprosy != null) { if (screeningLeprosy.getIsConfirmed()) { if (screeningLeprosy.getTypeOfLeprosy().toLowerCase().equals("PB (Paucibacillary)")) { - incentiveLogicService.incentiveForLeprosyConfirmed(screeningLeprosy.getBenId(), screeningLeprosy.getTreatmentStartDate(), screeningLeprosy.getTreatmentEndDate(), token); + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyConfirmed( + screeningLeprosy.getBenId(), + screeningLeprosy.getTreatmentStartDate(), + screeningLeprosy.getTreatmentEndDate(), + token); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + } } } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java index 08b7e404..7ab0367e 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -35,64 +35,106 @@ public class IncentiveLogicImpl implements IncentiveLogicService { private UserService userService; @Override - public void incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token) { + public IncentiveActivityRecord incentiveForLeprosyConfirmed( + Long benId, + Date treatmentStartDate, + Date treatmentEndDate, + String token) { + try { - Integer stateCode = userService.getUserDetail(jwtUtil.extractUserId(token)).getStateId(); + Integer userId = jwtUtil.extractUserId(token); + Integer stateCode = userService.getUserDetail(userId).getStateId(); if (stateCode == null) { - logger.warn("State code is null for user: {}", jwtUtil.extractUserId(token)); - return; + logger.warn("State code is null for user: {}", userId); + return null; } String activityName = "NLEP_PB_TREATMENT"; if (stateCode.equals(StateCode.AM.getStateCode())) { - processIncentive(activityName, GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), - benId, treatmentStartDate, treatmentEndDate, token); + return processIncentive( + activityName, + GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + token); } + if (stateCode.equals(StateCode.CG.getStateCode())) { - processIncentive(activityName, GroupName.ACTIVITY.getDisplayName(), - benId, treatmentStartDate, treatmentEndDate, token); + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + token); } + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; } catch (Exception e) { logger.error("Check Leprosy Incentive Exception: ", e); + return null; } } - private void processIncentive(String activityName, String groupName, Long benId, + + private IncentiveActivityRecord processIncentive(String activityName, String groupName, Long benId, Date startDate, Date endDate, String token) { try { IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, groupName); if (activity == null) { logger.info("No IncentiveActivity found for name: {} and group: {}", activityName, groupName); - return; + return null ; } - saveIncentive(activity, benId, startDate, endDate, token); + return saveIncentive(activity, benId, startDate, endDate, token); } catch (Exception e) { logger.error("Process Incentive Exception: ", e); + return null; + } } - private void saveIncentive(IncentiveActivity activity, Long benId, Date startDate, Date endDate, String token) { + private IncentiveActivityRecord saveIncentive( + IncentiveActivity activity, + Long benId, + Date startDate, + Date endDate, + String token) { + try { + + if (activity == null || benId == null || startDate == null || endDate == null) { + logger.warn("Invalid input for saving incentive"); + return null; + } + Timestamp startTimestamp = new Timestamp(startDate.getTime()); Timestamp endTimestamp = new Timestamp(endDate.getTime()); + + Integer userId = jwtUtil.extractUserId(token); String username = jwtUtil.extractUsername(token); - IncentiveActivityRecord record = incentiveRecordRepo - .findRecordByActivityIdCreatedDateBenId(activity.getId(), startTimestamp, benId); + // 🔍 duplicate check + IncentiveActivityRecord existing = incentiveRecordRepo + .findRecordByActivityIdCreatedDateBenId( + activity.getId(), startTimestamp, benId); - if (record != null) { - logger.info("Incentive already exists for benId: {}, activityId: {}", benId, activity.getId()); - return; + if (existing != null) { + logger.info("Incentive already exists for benId: {}, activityId: {}", + benId, activity.getId()); + return existing; } - record = new IncentiveActivityRecord(); + // 🆕 create record + IncentiveActivityRecord record = new IncentiveActivityRecord(); record.setActivityId(activity.getId()); record.setCreatedDate(startTimestamp); record.setUpdatedDate(startTimestamp); @@ -101,15 +143,20 @@ record = new IncentiveActivityRecord(); record.setCreatedBy(username); record.setUpdatedBy(username); record.setBenId(benId); - record.setAshaId(jwtUtil.extractUserId(token)); + record.setAshaId(userId); record.setName(activity.getName()); record.setAmount(Long.valueOf(activity.getRate())); - incentiveRecordRepo.save(record); + record = incentiveRecordRepo.save(record); + logger.info("Leprosy Incentive saved successfully for benId: {}", benId); + return record; + } catch (Exception e) { logger.error("Save Leprosy Incentive Exception: ", e); + return null; } } + } diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index 8914941f..b7e818c8 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -7,6 +7,7 @@ import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; +import com.iemr.flw.service.IncentiveService; import com.iemr.flw.service.MaternalHealthService; import com.iemr.flw.utils.JwtUtil; import com.iemr.flw.utils.exception.IEMRException; @@ -440,6 +441,7 @@ public String saveANCVisitQuestions(List dtos, String aut } ancCounsellingCareRepo.saveAll(entities); + return "ANC Counselling & Care data saved successfully"; } From 22c538e0c67f29186559cb06c538e987a5a0d14d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 13:14:13 +0530 Subject: [PATCH 105/118] fix code rabit comment --- .../com/iemr/flw/service/impl/DiseaseControlServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index 7a22fc8f..ca2ad1f7 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -293,7 +293,7 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { ScreeningLeprosy screeningLeprosy = diseaseLeprosyRepository.save(saveLeprosyData(diseaseControlData)); if (screeningLeprosy != null) { if (screeningLeprosy.getIsConfirmed()) { - if (screeningLeprosy.getTypeOfLeprosy().toLowerCase().equals("PB (Paucibacillary)")) { + if (screeningLeprosy.getTypeOfLeprosy().equals("PB (Paucibacillary)")) { IncentiveActivityRecord incentiveActivityRecord = incentiveLogicService.incentiveForLeprosyConfirmed( screeningLeprosy.getBenId(), From 249b22befa05bb4cba0640ee07ee79540643f6ec Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 15:32:30 +0530 Subject: [PATCH 106/118] fix code rabit comment --- .../controller/DiseaseControlController.java | 4 +- .../flw/service/DiseaseControlService.java | 2 +- .../flw/service/IncentiveLogicService.java | 7 +- .../impl/DiseaseControlServiceImpl.java | 39 +++++- .../flw/service/impl/IncentiveLogicImpl.java | 113 ++++++++++++++++-- .../impl/MaternalHealthServiceImpl.java | 5 + 6 files changed, 151 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java index 5ca4db8d..e89a5306 100644 --- a/src/main/java/com/iemr/flw/controller/DiseaseControlController.java +++ b/src/main/java/com/iemr/flw/controller/DiseaseControlController.java @@ -142,13 +142,13 @@ public ResponseEntity> saveFilaria(@RequestBody FilariaDTO f } @RequestMapping(value = "leprosy/saveAll", method = RequestMethod.POST, consumes = "application/json", produces = "application/json",headers = "Authorization") - public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO,@RequestHeader(value = "JwtToken") String token) { + public ResponseEntity> saveLeprosy(@RequestBody LeprosyDTO leprosyDTO) { Map response = new HashMap<>(); try { if(leprosyDTO!=null){ response.put("status", "Success"); response.put("statusCode", 200); - response.put("data", diseaseControlService.saveLeprosy(leprosyDTO,token)); + response.put("data", diseaseControlService.saveLeprosy(leprosyDTO)); }else { response.put("message", "Invalid request"); response.put("statusCode", 400); diff --git a/src/main/java/com/iemr/flw/service/DiseaseControlService.java b/src/main/java/com/iemr/flw/service/DiseaseControlService.java index db20d712..65e315dc 100644 --- a/src/main/java/com/iemr/flw/service/DiseaseControlService.java +++ b/src/main/java/com/iemr/flw/service/DiseaseControlService.java @@ -35,7 +35,7 @@ public interface DiseaseControlService { public String saveKalaAzar(KalaAzarDTO kalaAzarDTO); public String saveAES(AesJeDTO aesJeDTO); public String saveFilaria(FilariaDTO filariaDTO); - public String saveLeprosy(LeprosyDTO leprosyDTO, String token); + public String saveLeprosy(LeprosyDTO leprosyDTO); public Object getAllScreeningData(GetDiseaseRequestHandler getDiseaseRequestHandler); public List saveMosquitoMobilizationNet(List mosquitoNetDTOList); diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index ec3d86b8..a0aa5ec1 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -6,5 +6,10 @@ import java.util.Date; public interface IncentiveLogicService { - public IncentiveActivityRecord incentiveForLeprosyConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, String token); + public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveAssistingANCVisits(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + + } diff --git a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java index ca2ad1f7..88932659 100644 --- a/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/DiseaseControlServiceImpl.java @@ -282,7 +282,7 @@ private String updateFilaria(DiseaseFilariasisDTO diseaseControlData) { @Override @Transactional - public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { + public String saveLeprosy(LeprosyDTO diseaseControlDTO) { for (DiseaseLeprosyDTO diseaseControlData : diseaseControlDTO.getLeprosyLists()) { if (diseaseLeprosyRepository.findByBenId(diseaseControlData.getBenId()).isPresent()) { return updateLeprosyData(diseaseControlData); @@ -295,11 +295,44 @@ public String saveLeprosy(LeprosyDTO diseaseControlDTO, String token) { if (screeningLeprosy.getIsConfirmed()) { if (screeningLeprosy.getTypeOfLeprosy().equals("PB (Paucibacillary)")) { IncentiveActivityRecord incentiveActivityRecord = - incentiveLogicService.incentiveForLeprosyConfirmed( + incentiveLogicService.incentiveForLeprosyPaucibacillaryConfirmed( screeningLeprosy.getBenId(), screeningLeprosy.getTreatmentStartDate(), screeningLeprosy.getTreatmentEndDate(), - token); + diseaseControlDTO.getUserId()); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + + } + if (screeningLeprosy.getTypeOfLeprosy().equals("MB (Multibacillary)")) { + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForLeprosyMultibacillaryConfirmed( + screeningLeprosy.getBenId(), + screeningLeprosy.getTreatmentStartDate(), + screeningLeprosy.getTreatmentEndDate(), + diseaseControlDTO.getUserId()); + + if (incentiveActivityRecord != null) { + logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", + incentiveActivityRecord.getId()); + } else { + logger.info("Incentive not created"); + } + + } + + if (screeningLeprosy.getIsConfirmed()) { + IncentiveActivityRecord incentiveActivityRecord = + incentiveLogicService.incentiveForIdentificationLeprosy( + screeningLeprosy.getBenId(), + screeningLeprosy.getTreatmentStartDate(), + screeningLeprosy.getTreatmentEndDate(), + diseaseControlDTO.getUserId()); if (incentiveActivityRecord != null) { logger.info("Incentive processed for Screening Leprosy successfully. RecordId={}", diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java index 7ab0367e..1257b8a5 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -6,6 +6,7 @@ import com.iemr.flw.masterEnum.StateCode; import com.iemr.flw.repo.iemr.IncentiveRecordRepo; import com.iemr.flw.repo.iemr.IncentivesRepo; +import com.iemr.flw.repo.iemr.UserServiceRoleRepo; import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.UserService; import com.iemr.flw.utils.JwtUtil; @@ -34,15 +35,64 @@ public class IncentiveLogicImpl implements IncentiveLogicService { @Autowired private UserService userService; + @Autowired + private UserServiceRoleRepo userServiceRoleRepo; + + @Override + public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed( + Long benId, + Date treatmentStartDate, + Date treatmentEndDate, + Integer userId) { + + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "NLEP_PB_TREATMENT"; + + if (stateCode.equals(StateCode.AM.getStateCode())) { + return processIncentive( + activityName, + GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check Leprosy Incentive Exception: ", e); + return null; + } + } + @Override - public IncentiveActivityRecord incentiveForLeprosyConfirmed( + public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed( Long benId, Date treatmentStartDate, Date treatmentEndDate, - String token) { + Integer userId) { try { - Integer userId = jwtUtil.extractUserId(token); Integer stateCode = userService.getUserDetail(userId).getStateId(); if (stateCode == null) { @@ -59,7 +109,7 @@ public IncentiveActivityRecord incentiveForLeprosyConfirmed( benId, treatmentStartDate, treatmentEndDate, - token); + userId); } if (stateCode.equals(StateCode.CG.getStateCode())) { @@ -69,7 +119,7 @@ public IncentiveActivityRecord incentiveForLeprosyConfirmed( benId, treatmentStartDate, treatmentEndDate, - token); + userId); } // state not supported @@ -82,9 +132,50 @@ public IncentiveActivityRecord incentiveForLeprosyConfirmed( } } + @Override + public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "NLEP_CASE_DETECTION"; + + if (stateCode.equals(StateCode.AM.getStateCode())) { + return processIncentive( + activityName, + GroupName.UMBRELLA_PROGRAMMES.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check Leprosy Incentive Exception: ", e); + return null; + } + } private IncentiveActivityRecord processIncentive(String activityName, String groupName, Long benId, - Date startDate, Date endDate, String token) { + Date startDate, Date endDate, Integer userId) { try { IncentiveActivity activity = incentivesRepo.findIncentiveMasterByNameAndGroup(activityName, groupName); @@ -93,7 +184,7 @@ private IncentiveActivityRecord processIncentive(String activityName, String gro return null ; } - return saveIncentive(activity, benId, startDate, endDate, token); + return saveIncentive(activity, benId, startDate, endDate, userId); } catch (Exception e) { logger.error("Process Incentive Exception: ", e); @@ -107,7 +198,7 @@ private IncentiveActivityRecord saveIncentive( Long benId, Date startDate, Date endDate, - String token) { + Integer userId) { try { @@ -119,8 +210,6 @@ private IncentiveActivityRecord saveIncentive( Timestamp startTimestamp = new Timestamp(startDate.getTime()); Timestamp endTimestamp = new Timestamp(endDate.getTime()); - Integer userId = jwtUtil.extractUserId(token); - String username = jwtUtil.extractUsername(token); // 🔍 duplicate check IncentiveActivityRecord existing = incentiveRecordRepo @@ -140,8 +229,8 @@ private IncentiveActivityRecord saveIncentive( record.setUpdatedDate(startTimestamp); record.setStartDate(startTimestamp); record.setEndDate(endTimestamp); - record.setCreatedBy(username); - record.setUpdatedBy(username); + record.setCreatedBy(userServiceRoleRepo.getUserNamedByUserId(userId)); + record.setUpdatedBy(userServiceRoleRepo.getUserNamedByUserId(userId)); record.setBenId(benId); record.setAshaId(userId); record.setName(activity.getName()); diff --git a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java index b7e818c8..52ff5e1d 100644 --- a/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/MaternalHealthServiceImpl.java @@ -7,6 +7,7 @@ import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.identity.BeneficiaryRepo; import com.iemr.flw.repo.iemr.*; +import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.IncentiveService; import com.iemr.flw.service.MaternalHealthService; import com.iemr.flw.utils.JwtUtil; @@ -22,6 +23,7 @@ import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.*; @@ -68,6 +70,9 @@ public class MaternalHealthServiceImpl implements MaternalHealthService { @Autowired private JwtUtil jwtUtil; + @Autowired + private IncentiveLogicService incentiveLogicService; + ObjectMapper mapper = new ObjectMapper(); From d14afc4d473382f0bb644189e881f975eb734293 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 6 Feb 2026 15:48:29 +0530 Subject: [PATCH 107/118] fix code rabit comment --- src/main/java/com/iemr/flw/service/IncentiveLogicService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index a0aa5ec1..64001863 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -9,7 +9,6 @@ public interface IncentiveLogicService { public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); - public IncentiveActivityRecord incentiveAssistingANCVisits(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); } From e9ee718951d8ceef5946edcf42bb9c173eea9f48 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 9 Feb 2026 15:57:26 +0530 Subject: [PATCH 108/118] Changes incentive loigc for CG in VillageLevel --- .../flw/service/IncentiveLogicService.java | 4 + .../flw/service/impl/IncentiveLogicImpl.java | 104 +++++++++++++++++- .../impl/VillageLevelFormServiceImpl.java | 27 ++++- 3 files changed, 128 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java index 64001863..1b3529b1 100644 --- a/src/main/java/com/iemr/flw/service/IncentiveLogicService.java +++ b/src/main/java/com/iemr/flw/service/IncentiveLogicService.java @@ -10,5 +10,9 @@ public interface IncentiveLogicService { public IncentiveActivityRecord incentiveForIdentificationLeprosy(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForVhndMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + + public IncentiveActivityRecord incentiveForClusterMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); + public IncentiveActivityRecord incentiveForAttendingVhsnc(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId); } diff --git a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java index 1257b8a5..c564fab7 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveLogicImpl.java @@ -80,7 +80,7 @@ public IncentiveActivityRecord incentiveForLeprosyPaucibacillaryConfirmed( return null; } catch (Exception e) { - logger.error("Check Leprosy Incentive Exception: ", e); + logger.error("Check NLEP_PB_TREATMENT Incentive Exception: ", e); return null; } } @@ -127,7 +127,103 @@ public IncentiveActivityRecord incentiveForLeprosyMultibacillaryConfirmed( return null; } catch (Exception e) { - logger.error("Check Leprosy Incentive Exception: ", e); + logger.error("Check NLEP_PB_TREATMENT Incentive Exception: ", e); + return null; + } + } + + @Override + public IncentiveActivityRecord incentiveForVhndMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "VHND_PARTICIPATION"; + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check VHND_PARTICIPATION Incentive Exception: ", e); + return null; + } + } + + @Override + public IncentiveActivityRecord incentiveForClusterMeeting(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "CLUSTER_MEETING"; + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check CLUSTER_MEETING Incentive Exception: ", e); + return null; + } + } + + @Override + public IncentiveActivityRecord incentiveForAttendingVhsnc(Long benId, Date treatmentStartDate, Date treatmentEndDate, Integer userId) { + try { + Integer stateCode = userService.getUserDetail(userId).getStateId(); + + if (stateCode == null) { + logger.warn("State code is null for user: {}", userId); + return null; + } + + String activityName = "VHSNC_MEETING"; + + if (stateCode.equals(StateCode.CG.getStateCode())) { + return processIncentive( + activityName, + GroupName.ACTIVITY.getDisplayName(), + benId, + treatmentStartDate, + treatmentEndDate, + userId); + } + + // state not supported + logger.info("No incentive mapping for stateCode: {}", stateCode); + return null; + + } catch (Exception e) { + logger.error("Check VHSNC_MEETING Incentive Exception: ", e); return null; } } @@ -238,12 +334,12 @@ private IncentiveActivityRecord saveIncentive( record = incentiveRecordRepo.save(record); - logger.info("Leprosy Incentive saved successfully for benId: {}", benId); + logger.info("Incentive saved successfully for benId: {}", benId); return record; } catch (Exception e) { - logger.error("Save Leprosy Incentive Exception: ", e); + logger.error("Error Incentive Exception: ", e); return null; } } 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 c64654d3..579b84c9 100644 --- a/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/VillageLevelFormServiceImpl.java @@ -29,6 +29,7 @@ import com.iemr.flw.dto.iemr.*; import com.iemr.flw.masterEnum.GroupName; import com.iemr.flw.repo.iemr.*; +import com.iemr.flw.service.IncentiveLogicService; import com.iemr.flw.service.VillageLevelFormService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,8 +38,10 @@ import java.sql.Timestamp; import java.time.LocalDate; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -70,6 +73,9 @@ public class VillageLevelFormServiceImpl implements VillageLevelFormService { @Autowired private AHDFormRepo ahdFormRepo; + @Autowired + private IncentiveLogicService incentiveLogicService; + @Override public Boolean saveForm(VhndDto dto) { @@ -144,7 +150,12 @@ private Boolean saveVhncFormData(VhncFormDTO vhncFormDTO, Integer userID) { vhncForm.setFormType("VHNC"); vhncFormRepo.save(vhncForm); - checkAndAddIncentives(vhncForm.getVhncDate(), Math.toIntExact(vhncForm.getUserId()), "VHSNC_MEETING", vhncForm.getCreatedBy()); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + LocalDate localDate = LocalDate.parse(vhncForm.getVhncDate(), formatter); + + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + incentiveLogicService.incentiveForAttendingVhsnc(0L,date,date,Math.toIntExact(vhncForm.getUserId())); return true; } @@ -164,7 +175,12 @@ private Boolean savePhcForm(PhcReviewMeetingFormDTO dto, Integer userID) { phcReviewForm.setImage2(dto.getImage2()); phcReviewForm.setFormType("PHC"); phcReviewFormRepo.save(phcReviewForm); - checkAndAddIncentives(phcReviewForm.getPhcReviewDate(), Math.toIntExact(phcReviewForm.getUserId()), "CLUSTER_MEETING", phcReviewForm.getCreatedBy()); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + LocalDate localDate = LocalDate.parse(phcReviewForm.getPhcReviewDate(), formatter); + + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + incentiveLogicService.incentiveForClusterMeeting(0L,date,date,Math.toIntExact(phcReviewForm.getUserId())); return true; } @@ -226,7 +242,12 @@ private Boolean saveVhndFormData(VHNDFormDTO vhndFormDTO, Integer userID) { vhndForm.setFamilyPlanningHealthcare(vhndFormDTO.getFamilyPlanningHealthcare()); vhndForm.setFormType("VHND"); vhndRepo.save(vhndForm); - checkAndAddIncentives(vhndForm.getVhndDate(), vhndForm.getUserId(), "VHND_PARTICIPATION", vhndForm.getCreatedBy()); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + LocalDate localDate = LocalDate.parse(vhndForm.getVhndDate(), formatter); + + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + incentiveLogicService.incentiveForVhndMeeting(0L,date,date,vhndForm.getUserId()); return true; From 56d1bd2433b940fff6348a62bed8298128caf9a9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 10 Feb 2026 15:45:42 +0530 Subject: [PATCH 109/118] incentive upload files --- .../java/com/iemr/flw/controller/IncentiveController.java | 4 ++-- src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/IncentiveController.java b/src/main/java/com/iemr/flw/controller/IncentiveController.java index c76d26ae..082c1cf0 100644 --- a/src/main/java/com/iemr/flw/controller/IncentiveController.java +++ b/src/main/java/com/iemr/flw/controller/IncentiveController.java @@ -103,8 +103,8 @@ public String getAllIncentivesByUserId(@RequestBody GetBenRequestHandler request return response.toString(); } - @RequestMapping(value = {"/update"}, method = RequestMethod.POST) - public String updateIncentive(@RequestBody PendingActivityDTO requestDTO) { + @RequestMapping(value = {"/update"}, method = RequestMethod.POST, consumes = {"multipart/form-data"}) + public String updateIncentive(@ModelAttribute PendingActivityDTO requestDTO) { OutputResponse response = new OutputResponse(); try { diff --git a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java index 4d8dbd99..df15d41d 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/PendingActivityDTO.java @@ -9,6 +9,6 @@ public class PendingActivityDTO { private Long id; private Integer userId; - private List Images; + private List images; private String moduleName; } From 79ddfa2d1ce9f7595ed4a30864d99d69eff4c9b9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 17:15:31 +0530 Subject: [PATCH 110/118] incentive upload files --- .../java/com/iemr/flw/controller/IncentiveController.java | 6 +++--- src/main/java/com/iemr/flw/service/MaaMeetingService.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/flw/controller/IncentiveController.java b/src/main/java/com/iemr/flw/controller/IncentiveController.java index 082c1cf0..ba60dffb 100644 --- a/src/main/java/com/iemr/flw/controller/IncentiveController.java +++ b/src/main/java/com/iemr/flw/controller/IncentiveController.java @@ -116,12 +116,12 @@ public String updateIncentive(@ModelAttribute PendingActivityDTO requestDTO) { if (s != null) response.setResponse(s); else - response.setError(5000, "No record found"); + response.setError(500, "No record found"); } else - response.setError(5000, "Invalid/NULL request obj"); + response.setError(500, "Invalid/NULL request obj"); } catch (Exception e) { logger.error("Error in high risk assessment data : " + e); - response.setError(5000, "Error in high risk assessment data : " + e); + response.setError(500, "Error in high risk assessment data : " + e); } return response.toString(); diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index cb23b7b9..d3319821 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -217,7 +217,7 @@ record = new IncentiveActivityRecord(); record.setIsEligible(true); } else { record.setIsEligible(false); - // updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); + updatePendingActivity(meeting.getAshaId(), meeting.getId(), record.getId(), "MAA_MEETING"); } record.setAmount(Long.valueOf(incentiveActivity.getRate())); From dc864992e7766643da7e9664b098373143a0af25 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 17:32:53 +0530 Subject: [PATCH 111/118] incentive upload files --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 5580e896..3dfd7278 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,6 +205,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); + maaMeetingRequestDTO.setId(pendingActivityDTO.getId()); maaMeetingService.updateMeeting(maaMeetingRequestDTO); }catch (Exception e){ From 72612315a233b673660b56e444cd722cc5ad0afc Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 17:38:50 +0530 Subject: [PATCH 112/118] add record id --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3dfd7278..08749cdd 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,7 +205,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingRequestDTO.setId(pendingActivityDTO.getId()); + maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); maaMeetingService.updateMeeting(maaMeetingRequestDTO); }catch (Exception e){ From c7f27583c51b6a7426be16132c25929c04ae0adb Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 11 Feb 2026 18:00:40 +0530 Subject: [PATCH 113/118] add record id --- .../java/com/iemr/flw/service/impl/IncentiveServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 08749cdd..37d53864 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,7 +205,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); + maaMeetingRequestDTO.setId(1L); maaMeetingService.updateMeeting(maaMeetingRequestDTO); }catch (Exception e){ From 917f8bc878313aecc19cebce0efe94f7d8521088 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 12 Feb 2026 12:57:30 +0530 Subject: [PATCH 114/118] add record id --- .../flw/repo/iemr/IncentiveRecordRepo.java | 2 + .../iemr/flw/service/MaaMeetingService.java | 53 ++++++++++++++----- .../service/impl/IncentiveServiceImpl.java | 4 +- 3 files changed, 43 insertions(+), 16 deletions(-) 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 6b8db13e..2f6dcbe3 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -16,6 +16,8 @@ public interface IncentiveRecordRepo extends JpaRepository new EntityNotFoundException("Meeting not found: " + req.getId())); + + // ✅ NULL CHECK + if (req.getMeetingDate() != null) { + existingMeeting.setMeetingDate(req.getMeetingDate()); + } + if (req.getPlace() != null) { + existingMeeting.setPlace(req.getPlace()); + } + if (req.getParticipants() != null) { + existingMeeting.setParticipants(req.getParticipants()); + } + if (req.getAshaId() != null) { + existingMeeting.setAshaId(req.getAshaId()); + } + if (req.getCreatedBY() != null) { // ✅ Typo fixed: CreatedBY → CreatedBy + existingMeeting.setCreatedBy(req.getCreatedBY()); + } + + // Images - only if provided + if (req.getMeetingImages() != null && req.getMeetingImages().length > 0) { + List base64Images = Arrays.stream(req.getMeetingImages()) + .filter(file -> file != null && !file.isEmpty()) + .map(this::convertToBase64) + .collect(Collectors.toList()); + existingMeeting.setMeetingImagesJson(objectMapper.writeValueAsString(base64Images)); + } + if (existingMeeting.getMeetingImagesJson() != null) { - checkAndUpdateIncentive(existingMeeting); + checkAndUpdateIncentive(incentiveRecordId); } return repository.save(existingMeeting); @@ -172,17 +206,8 @@ private void updatePendingActivity(Integer userId, Long recordId, Long activityI } - private void checkAndUpdateIncentive(MaaMeeting meeting) { - IncentiveActivity incentiveActivityAM = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.CHILD_HEALTH.getDisplayName()); - IncentiveActivity incentiveActivityCH = incentivesRepo.findIncentiveMasterByNameAndGroup("MAA_QUARTERLY_MEETING", GroupName.ACTIVITY.getDisplayName()); - if (incentiveActivityAM != null) { - updateIncentive(incentiveActivityAM, meeting); - } - if (incentiveActivityCH != null) { - updateIncentive(incentiveActivityCH, meeting); - - } - + private void checkAndUpdateIncentive(Long incentiveId) { + updateIncentive(incentiveId); } private void checkAndAddIncentive(MaaMeeting meeting) { @@ -226,9 +251,9 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(IncentiveActivity incentiveActivity, MaaMeeting meeting) { + private void updateIncentive(Long id ) { IncentiveActivityRecord record = recordRepo - .findRecordByActivityIdCreatedDateBenId(incentiveActivity.getId(), Timestamp.valueOf(meeting.getMeetingDate().atStartOfDay()), 0L, meeting.getAshaId()); + .findRecordById(id); if (record != null) { record = new IncentiveActivityRecord(); 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 37d53864..c18d7e50 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -205,8 +205,8 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { try { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); - maaMeetingRequestDTO.setId(1L); - maaMeetingService.updateMeeting(maaMeetingRequestDTO); + maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); + maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); }catch (Exception e){ return e.getMessage(); From 4db1fb2a0e667fe01deca76ba3124e020d7ee0af Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 12 Feb 2026 13:08:25 +0530 Subject: [PATCH 115/118] fix method name --- .../com/iemr/flw/repo/iemr/IncentiveRecordRepo.java | 3 ++- .../java/com/iemr/flw/service/MaaMeetingService.java | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) 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 2f6dcbe3..0c2dc21b 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/IncentiveRecordRepo.java @@ -9,6 +9,7 @@ import java.sql.Timestamp; import java.util.List; +import java.util.Optional; @Repository public interface IncentiveRecordRepo extends JpaRepository { @@ -16,7 +17,7 @@ public interface IncentiveRecordRepo extends JpaRepository findById(Long id); @Query("select record from IncentiveActivityRecord record where record.activityId = :id and record.createdDate = :createdDate and record.benId = :benId and record.ashaId = :ashaId") diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index cd734110..87010d90 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -251,17 +251,17 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(Long id ) { - IncentiveActivityRecord record = recordRepo - .findRecordById(id); + private void updateIncentive(Long id) { - if (record != null) { - record = new IncentiveActivityRecord(); + Optional optionalRecord = recordRepo.findById(id); + + if (optionalRecord.isPresent()) { + IncentiveActivityRecord record = optionalRecord.get(); record.setIsEligible(true); recordRepo.save(record); } - } + } From adf16a4804c6365f0f1eb7539a8c7b0d5773dfb7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 12 Feb 2026 13:17:47 +0530 Subject: [PATCH 116/118] make changes in response --- .../com/iemr/flw/service/MaaMeetingService.java | 16 ++++++++++------ .../flw/service/impl/IncentiveServiceImpl.java | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/flw/service/MaaMeetingService.java b/src/main/java/com/iemr/flw/service/MaaMeetingService.java index 87010d90..bde156a6 100644 --- a/src/main/java/com/iemr/flw/service/MaaMeetingService.java +++ b/src/main/java/com/iemr/flw/service/MaaMeetingService.java @@ -111,7 +111,7 @@ public MaaMeeting updateMeeting(MaaMeetingRequestDTO req) throws JsonProcessingE return repository.save(existingMeeting); } - public MaaMeeting updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long incentiveRecordId) throws JsonProcessingException { + public String updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long incentiveRecordId) throws JsonProcessingException { MaaMeeting existingMeeting = repository.findById(req.getId()) .orElseThrow(() -> new EntityNotFoundException("Meeting not found: " + req.getId())); @@ -140,12 +140,14 @@ public MaaMeeting updateMeetingFromFileUpload(MaaMeetingRequestDTO req,Long ince .collect(Collectors.toList()); existingMeeting.setMeetingImagesJson(objectMapper.writeValueAsString(base64Images)); } + repository.save(existingMeeting); if (existingMeeting.getMeetingImagesJson() != null) { - checkAndUpdateIncentive(incentiveRecordId); + return checkAndUpdateIncentive(incentiveRecordId); } - return repository.save(existingMeeting); + + return "Fail to update meeting image"; } @@ -206,8 +208,8 @@ private void updatePendingActivity(Integer userId, Long recordId, Long activityI } - private void checkAndUpdateIncentive(Long incentiveId) { - updateIncentive(incentiveId); + private String checkAndUpdateIncentive(Long incentiveId) { + return updateIncentive(incentiveId); } private void checkAndAddIncentive(MaaMeeting meeting) { @@ -251,7 +253,7 @@ record = new IncentiveActivityRecord(); } - private void updateIncentive(Long id) { + private String updateIncentive(Long id) { Optional optionalRecord = recordRepo.findById(id); @@ -259,7 +261,9 @@ private void updateIncentive(Long id) { IncentiveActivityRecord record = optionalRecord.get(); record.setIsEligible(true); recordRepo.save(record); + return "Incentive update successfully"; } + return "Fail to update Incentive"; } 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 c18d7e50..8d644667 100644 --- a/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IncentiveServiceImpl.java @@ -206,7 +206,7 @@ public String updateIncentive(PendingActivityDTO pendingActivityDTO) { MaaMeetingRequestDTO maaMeetingRequestDTO = new MaaMeetingRequestDTO(); maaMeetingRequestDTO.setMeetingImages(pendingActivityDTO.getImages().toArray(new MultipartFile[0])); maaMeetingRequestDTO.setId(existingIncentivePendingActivity.getRecordId()); - maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); + return maaMeetingService.updateMeetingFromFileUpload(maaMeetingRequestDTO,pendingActivityDTO.getId()); }catch (Exception e){ return e.getMessage(); From e57f425bdf5e62ee0d4dce727f60e13240f4c995 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 13 Feb 2026 15:22:03 +0530 Subject: [PATCH 117/118] add column kala azar api disease_type_id --- src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java b/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java index eb8b0107..d6bcd7b6 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ScreeningKalaAzar.java @@ -45,7 +45,7 @@ public class ScreeningKalaAzar { @Column(name = "house_hold_details_Id",nullable = false) private Long houseHoldDetailsId; - @Column(name = "userID") + @Column(name = "user_id") private Integer userId; @Temporal(TemporalType.DATE) @@ -97,7 +97,7 @@ public class ScreeningKalaAzar { @Column(name = "created_by") private String createdBy; - @Column(name = "diseaseTypeID") + @Column(name = "disease_type_id") private Integer diseaseTypeId; @Column(name = "refer_to_name") From 019e5a9557fd6608fe9032a312c681f6a8543e00 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Fri, 13 Feb 2026 15:22:18 +0530 Subject: [PATCH 118/118] add column kala azar api disease_type_id --- .../java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java index b294a3dc..891b83ac 100644 --- a/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java +++ b/src/main/java/com/iemr/flw/service/impl/IRSRoundServiceImpl.java @@ -33,6 +33,6 @@ public List addRounds(List dtos) { @Override public List getRounds(Long householdId) { - return irsRoundRepository.findByHouseholdId(householdId); + return irsRoundRepository.findAll(); } }