diff --git a/src/main/java/com/iemr/common/data/mmuDrugHistory/PrescribedMMUDrugDetail.java b/src/main/java/com/iemr/common/data/mmuDrugHistory/PrescribedMMUDrugDetail.java new file mode 100644 index 00000000..e478420d --- /dev/null +++ b/src/main/java/com/iemr/common/data/mmuDrugHistory/PrescribedMMUDrugDetail.java @@ -0,0 +1,119 @@ +package com.iemr.common.data.mmuDrugHistory; + +import java.sql.Date; +import java.sql.Timestamp; + +import com.google.gson.annotations.Expose; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; +import lombok.Data; + +@Entity +@Data +@Table(name = "t_prescribeddrug") +public class PrescribedMMUDrugDetail { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Expose + @Column(name = "PrescribedDrugID") + private Long prescribedDrugID; + + @Expose + @Column(name = "BeneficiaryRegID") + private Long beneficiaryRegID; + + @Expose + @Column(name = "BenVisitID") + private Long benVisitID; + + @Expose + @Column(name = "ProviderServiceMapID") + private Integer providerServiceMapID; + + @Expose + @Column(name = "VisitCode") + private Long visitCode; + + @Expose + @Column(name = "PrescriptionID") + private Long prescriptionID; + + @OneToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "PrescriptionID", referencedColumnName = "PrescriptionID", insertable = false, updatable = false) + private PrescriptionMMU prescription; + + @Expose + @Column(name = "DrugForm") + private String formName; + + @Expose + @Column(name = "DrugTradeOrBrandName") + private String drugTradeOrBrandName; + + @Expose + @Column(name = "DrugID") + private Integer drugID; + + @Expose + @Column(name = "GenericDrugName") + private String drugName; + + @Expose + @Column(name = "DrugStrength") + private String drugStrength; + + @Expose + @Column(name = "Dose") + private String dose; + + @Expose + @Column(name = "Route") + private String route; + + @Expose + @Column(name = "Frequency") + private String frequency; + + @Expose + @Column(name = "Duration") + private String duration; + + @Expose + @Column(name = "DuartionUnit") + private String unit; + + @Expose + @Column(name = "RelationToFood") + private String relationToFood; + + @Expose + @Column(name = "SpecialInstruction") + private String instructions; + + @Expose + @Column(name = "QtyPrescribed") + private Integer qtyPrescribed; + + @Expose + @Column(name = "Deleted", insertable = false, updatable = true) + private Boolean deleted; + + @Expose + @Column(name = "Processed", insertable = false, updatable = true) + private String processed; + + @Expose + @Column(name = "CreatedBy") + private String createdBy; + +} \ No newline at end of file diff --git a/src/main/java/com/iemr/common/data/mmuDrugHistory/PrescriptionMMU.java b/src/main/java/com/iemr/common/data/mmuDrugHistory/PrescriptionMMU.java new file mode 100644 index 00000000..cd3f655e --- /dev/null +++ b/src/main/java/com/iemr/common/data/mmuDrugHistory/PrescriptionMMU.java @@ -0,0 +1,43 @@ +package com.iemr.common.data.mmuDrugHistory; + +import com.google.gson.annotations.Expose; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; + +@Entity +@Data +@Table(name = "t_prescription") +public class PrescriptionMMU { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Expose + @Column(name = "PrescriptionID", insertable = false, updatable = false) + private Long prescriptionID; + + @Expose + @Column(name = "BenVisitID") + private Long benVisitID; + + @Expose + @Column(name = "ProviderServiceMapID") + private Integer providerServiceMapID; + + @Expose + @Column(name = "DiagnosisProvided") + private String diagnosisProvided; + + @Expose + @Column(name = "Remarks") + private String remarks; + + @Expose + @Column(name = "Deleted", insertable = false, updatable = true) + private Boolean deleted; + +} diff --git a/src/main/java/com/iemr/common/dto/sms/SMSTemplateDTO.java b/src/main/java/com/iemr/common/dto/sms/SMSTemplateDTO.java new file mode 100644 index 00000000..ab71d8cc --- /dev/null +++ b/src/main/java/com/iemr/common/dto/sms/SMSTemplateDTO.java @@ -0,0 +1,114 @@ +package com.iemr.common.dto.sms; + +public class SMSTemplateDTO { + private Integer smsTemplateID; + private String smsTemplateName; + private String smsTemplate; + private String dltTemplateId; + private String smsSenderID; + private Integer smsTypeID; + private Integer providerServiceMapID; + private Boolean deleted; + private String createdBy; + private String modifiedBy; + private String createdDate; + private String lastModDate; + + // Getters and Setters for all fields + + public Integer getSmsTemplateID() { + return smsTemplateID; + } + + public void setSmsTemplateID(Integer smsTemplateID) { + this.smsTemplateID = smsTemplateID; + } + + public String getSmsTemplateName() { + return smsTemplateName; + } + + public void setSmsTemplateName(String smsTemplateName) { + this.smsTemplateName = smsTemplateName; + } + + public String getSmsTemplate() { + return smsTemplate; + } + + public void setSmsTemplate(String smsTemplate) { + this.smsTemplate = smsTemplate; + } + + public String getDltTemplateId() { + return dltTemplateId; + } + + public void setDltTemplateId(String dltTemplateId) { + this.dltTemplateId = dltTemplateId; + } + + public String getSmsSenderID() { + return smsSenderID; + } + + public void setSmsSenderID(String smsSenderID) { + this.smsSenderID = smsSenderID; + } + + public Integer getSmsTypeID() { + return smsTypeID; + } + + public void setSmsTypeID(Integer smsTypeID) { + this.smsTypeID = smsTypeID; + } + + public Integer getProviderServiceMapID() { + return providerServiceMapID; + } + + public void setProviderServiceMapID(Integer providerServiceMapID) { + this.providerServiceMapID = providerServiceMapID; + } + + public Boolean getDeleted() { + return deleted; + } + + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } + + public String getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + + public String getModifiedBy() { + return modifiedBy; + } + + public void setModifiedBy(String modifiedBy) { + this.modifiedBy = modifiedBy; + } + + public String getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(String createdDate) { + this.createdDate = createdDate; + } + + public String getLastModDate() { + return lastModDate; + } + + public void setLastModDate(String lastModDate) { + this.lastModDate = lastModDate; + } +} diff --git a/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java b/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java index 7fe629f1..1982a74f 100644 --- a/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java +++ b/src/main/java/com/iemr/common/mapper/sms/SMSMapper.java @@ -21,7 +21,9 @@ */ package com.iemr.common.mapper.sms; +import java.text.SimpleDateFormat; import java.util.List; +import java.sql.Timestamp; import org.mapstruct.IterableMapping; import org.mapstruct.Mapper; @@ -33,6 +35,7 @@ import com.iemr.common.data.sms.SMSParametersMap; import com.iemr.common.data.sms.SMSTemplate; import com.iemr.common.data.sms.SMSType; +import com.iemr.common.dto.sms.SMSTemplateDTO; import com.iemr.common.model.sms.CreateSMSRequest; import com.iemr.common.model.sms.FullSMSTemplateResponse; import com.iemr.common.model.sms.SMSParameterMapModel; @@ -110,4 +113,25 @@ public interface SMSMapper @IterableMapping(elementTargetType = FullSMSTemplateResponse.class) List smsTemplateToFullResponse(List smsTemplate); + @Mapping(source = "smsTemplateID", target = "smsTemplateID") + @Mapping(source = "smsTemplateName", target = "smsTemplateName") + @Mapping(source = "smsTemplate", target = "smsTemplate") + @Mapping(source = "dltTemplateId", target = "dltTemplateId") + @Mapping(source = "smsSenderID", target = "smsSenderID") + @Mapping(source = "smsTypeID", target = "smsTypeID") + @Mapping(source = "providerServiceMapID", target = "providerServiceMapID") + @Mapping(source = "deleted", target = "deleted") + @Mapping(source = "createdBy", target = "createdBy") + @Mapping(source = "modifiedBy", target = "modifiedBy") + @Mapping(target = "createdDate", expression = "java(formatDate(template.getCreatedDate()))") + @Mapping(target = "lastModDate", expression = "java(formatDate(template.getLastModDate()))") + SMSTemplateDTO smsTemplateToDTO(SMSTemplate template); + + default String formatDate(Timestamp timestamp) { + if (timestamp == null) { + return null; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + return sdf.format(timestamp); + } } diff --git a/src/main/java/com/iemr/common/repository/mmuDrugHistory/PrescribedMMUDrugRepository.java b/src/main/java/com/iemr/common/repository/mmuDrugHistory/PrescribedMMUDrugRepository.java new file mode 100644 index 00000000..17eb2c13 --- /dev/null +++ b/src/main/java/com/iemr/common/repository/mmuDrugHistory/PrescribedMMUDrugRepository.java @@ -0,0 +1,11 @@ +package com.iemr.common.repository.mmuDrugHistory; + +import com.iemr.common.data.mmuDrugHistory.PrescribedMMUDrugDetail; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PrescribedMMUDrugRepository extends CrudRepository { + PrescribedMMUDrugDetail findByPrescribedDrugID(Long prescribedDrugID); + +} diff --git a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java index af9cbf1c..efe0d16a 100644 --- a/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java +++ b/src/main/java/com/iemr/common/service/sms/SMSServiceImpl.java @@ -68,6 +68,7 @@ import com.iemr.common.data.location.States; import com.iemr.common.data.mctshistory.MctsDataReaderDetail; import com.iemr.common.data.mctshistory.MctsOutboundCall; +import com.iemr.common.data.mmuDrugHistory.PrescribedMMUDrugDetail; import com.iemr.common.data.sms.SMSNotification; import com.iemr.common.data.sms.SMSParameters; import com.iemr.common.data.sms.SMSParametersMap; @@ -76,6 +77,7 @@ import com.iemr.common.data.telemedicine.PrescribedDrugDetail; import com.iemr.common.data.users.User; import com.iemr.common.data.videocall.VideoCallParameters; +import com.iemr.common.dto.sms.SMSTemplateDTO; import com.iemr.common.mapper.sms.SMSMapper; import com.iemr.common.model.beneficiary.BeneficiaryModel; import com.iemr.common.model.sms.CreateSMSRequest; @@ -95,6 +97,7 @@ import com.iemr.common.repository.location.LocationDistrictRepository; import com.iemr.common.repository.location.LocationStateRepository; import com.iemr.common.repository.mctshistory.OutboundHistoryRepository; +import com.iemr.common.repository.mmuDrugHistory.PrescribedMMUDrugRepository; import com.iemr.common.repository.sms.SMSNotificationRepository; import com.iemr.common.repository.sms.SMSParameterMapRepository; import com.iemr.common.repository.sms.SMSParameterRepository; @@ -164,6 +167,9 @@ public class SMSServiceImpl implements SMSService { @Autowired PrescribedDrugRepository prescribedDrugRepository; + @Autowired + PrescribedMMUDrugRepository prescribedMMUDrugRepository; + @Autowired OutboundHistoryRepository outboundHistoryRepository; @@ -218,10 +224,16 @@ public String saveSMSTemplate(CreateSMSRequest smsRequest) throws Exception { } SMSTemplate smsTemplate; SMSTemplate request = smsMapper.createRequestToSMSTemplate(smsRequest); - smsTemplate = smsTemplateRepository.save(request); - saveSMSParameterMaps(smsRequest, smsTemplate.getSmsTemplateID()); - smsTemplate = smsTemplateRepository.findBySmsTemplateID(smsTemplate.getSmsTemplateID()); - return OutputMapper.gsonWithoutExposeRestriction().toJson(smsMapper.smsTemplateToResponse(smsTemplate)); + SMSTemplate savedTemplate = smsTemplateRepository.save(request); + + saveSMSParameterMaps(smsRequest, savedTemplate.getSmsTemplateID()); + + + SMSTemplate fetchedTemplate = smsTemplateRepository.findBySmsTemplateID(savedTemplate.getSmsTemplateID()); + + SMSTemplateDTO responseDTO = smsMapper.smsTemplateToDTO(fetchedTemplate); + + return OutputMapper.gsonWithoutExposeRestriction().toJson(responseDTO); } /** @@ -267,7 +279,13 @@ private void saveSMSParameterMaps(CreateSMSRequest smsRequest, Integer smsTempla List smsParameterMapModels = smsRequest.getSmsParameterMaps(); for (SMSParameterMapModel smsParameterMapModel : smsParameterMapModels) { smsParameterMapModel.setSmsTemplateID(smsTemplateID); - smsParameterMapRepository.save(smsMapper.smsParameterMapModelToSMSParametersMap(smsParameterMapModel)); + SMSParametersMap entity = smsMapper.smsParameterMapModelToSMSParametersMap(smsParameterMapModel); + + if (entity.getCreatedBy() == null) { + entity.setCreatedBy(smsRequest.getCreatedBy()); + } + + SMSParametersMap savedEntity = smsParameterMapRepository.save(entity); } } @@ -684,61 +702,64 @@ private SMSNotification prepareSMS( String methodName = smsParametersMap.getSmsParameter().getDataName(); // DataVariableName String variableValue = ""; switch (paramType) { - case "Beneficiary": - variableValue = getBeneficiaryData(className, methodName, request, beneficiary); - benID = variableValue; - break; - case "Institute": - if (request.getIs1097() == true) { - variableValue = getInstituteData(className, methodName, request, authToken); - } else { - variableValue = getDirectoryserviceData(className, methodName, request); - } - break; - case "User": - variableValue = getUserData(className, methodName, request, authToken); - break; - case "Feedback": - variableValue = getFeedbackData(className, methodName, request, authToken); - break; - case "Prescription": - variableValue = getPrescriptionData(className, methodName, request, beneficiary); - break; - case "Blood on Call": - variableValue = getBloodOnCallData(className, methodName, request, beneficiary); - break; - case "Food Safety Complaint": - variableValue = getFoodSafetyComplaintData(className, methodName, request); - break; - case "Epidemic Outbreak Complaint": - variableValue = getEpidemicComplaintData(className, methodName, request); - break; - case "Grievance Tracking": - variableValue = getGrievanceData(className, methodName, request, authToken, beneficiary); - break; - case "MCTS Call Alert": - variableValue = getMCTSCallAlertData(className, methodName, request); - break; - case "Organ Donation": - variableValue = getOrganDonationData(className, methodName, request); - break; - case "TM Schedule": - variableValue = getSpecializationAndTcDateInfo(className, methodName, request); - break; - case "COVID-19": - variableValue = getCOVIDData(className, methodName, request); - break; - case "IMRMMR": - variableValue = getIMRMMRData(className, methodName, request); - break; - case "104 appointment": - variableValue = getUptsuData(className, methodName, request); - break; - case "Grievance": - variableValue = getGrievanceData(className, methodName, request, authToken, beneficiary); - break; - default: - break; + case "Beneficiary": + variableValue = getBeneficiaryData(className, methodName, request, beneficiary); + benID = variableValue; + break; + case "Institute": + if (request.getIs1097() == true) { + variableValue = getInstituteData(className, methodName, request, authToken); + } else { + variableValue = getDirectoryserviceData(className, methodName, request); + } + break; + case "User": + variableValue = getUserData(className, methodName, request, authToken); + break; + case "Feedback": + variableValue = getFeedbackData(className, methodName, request, authToken); + break; + case "Prescription": + variableValue = getPrescriptionData(className, methodName, request, beneficiary); + break; + case "Blood on Call": + variableValue = getBloodOnCallData(className, methodName, request, beneficiary); + break; + case "Food Safety Complaint": + variableValue = getFoodSafetyComplaintData(className, methodName, request); + break; + case "Epidemic Outbreak Complaint": + variableValue = getEpidemicComplaintData(className, methodName, request); + break; + case "Grievance Tracking": + variableValue = getGrievanceData(className, methodName, request, authToken, beneficiary); + break; + case "MCTS Call Alert": + variableValue = getMCTSCallAlertData(className, methodName, request); + break; + case "Organ Donation": + variableValue = getOrganDonationData(className, methodName, request); + break; + case "TM Schedule": + variableValue = getSpecializationAndTcDateInfo(className, methodName, request); + break; + case "COVID-19": + variableValue = getCOVIDData(className, methodName, request); + break; + case "IMRMMR": + variableValue = getIMRMMRData(className, methodName, request); + break; + case "104 appointment": + variableValue = getUptsuData(className, methodName, request); + break; + case "Grievance": + variableValue = getGrievanceData(className, methodName, request, authToken, beneficiary); + break; + case "MMUPrescription": + variableValue = getMMUPrescriptionData(className, methodName, request, beneficiary); + break; + default: + break; } if (variable.equalsIgnoreCase("SMS_PHONE_NO")) { if (request.getIsBloodBankSMS() == true) { @@ -1304,6 +1325,108 @@ private String getEpidemicComplaintData(String className, String methodName, SMS return variableValue; } + private String getMMUPrescriptionData(String className, String methodName, SMSRequest request, + BeneficiaryModel beneficiary) throws NoSuchMethodException, SecurityException, IllegalAccessException, + IllegalArgumentException, InvocationTargetException, ClassNotFoundException { + PrescribedMMUDrugDetail prescribedMMUDrug = prescribedMMUDrugRepository + .findByPrescribedDrugID(request.getPrescribedDrugID()); + String variableValue = ""; + switch (methodName.toLowerCase()) { + case "diagnosis": + // Format: "Diagnosis, DrugName(DrugStrength)" + StringBuilder diagnosisBuilder = new StringBuilder(); + + // Add diagnosis + String diagnosis = prescribedMMUDrug.getPrescription() != null + && prescribedMMUDrug.getPrescription().getDiagnosisProvided() != null + ? prescribedMMUDrug.getPrescription().getDiagnosisProvided().trim() + : ""; + + if (!diagnosis.isEmpty()) { + diagnosisBuilder.append(diagnosis); + } + + // Add drug name with strength + String drugName = prescribedMMUDrug.getDrugName(); + String drugStrength = prescribedMMUDrug.getDrugStrength(); + + if (drugName != null && !drugName.trim().isEmpty()) { + if (diagnosisBuilder.length() > 0) { + diagnosisBuilder.append(", "); + } + diagnosisBuilder.append(drugName.trim()); + + if (drugStrength != null && !drugStrength.trim().isEmpty()) { + diagnosisBuilder.append(" (").append(drugStrength.trim()).append(")"); + } + } + + variableValue = diagnosisBuilder.toString(); + break; + case "dosage": + // Format: "duration unit, dose, frequency" + StringBuilder dosageBuilder = new StringBuilder(); + + // Add duration with unit + String duration = prescribedMMUDrug.getDuration(); + String unit = prescribedMMUDrug.getUnit(); + + if (duration != null && !duration.trim().isEmpty()) { + dosageBuilder.append(duration.trim()); + if (unit != null && !unit.trim().isEmpty()) { + dosageBuilder.append(" ").append(unit.trim()); + } + } + + // Add dose + String dose = prescribedMMUDrug.getDose(); + if (dose != null && !dose.trim().isEmpty()) { + if (dosageBuilder.length() > 0) { + dosageBuilder.append(", "); + } + dosageBuilder.append(dose.trim()); + } + + // Add frequency + String frequency = prescribedMMUDrug.getFrequency(); + if (frequency != null && !frequency.trim().isEmpty()) { + if (dosageBuilder.length() > 0) { + dosageBuilder.append(", "); + } + dosageBuilder.append(frequency.trim()); + } + + variableValue = dosageBuilder.toString(); + break; + + case "by": + // Format: "route, By: CreatedBy" + StringBuilder doctorBuilder = new StringBuilder(); + + // Add route + String route = prescribedMMUDrug.getRoute(); + if (route != null && !route.trim().isEmpty()) { + doctorBuilder.append(route.trim()); + } + + // Add created by + String createdBy = prescribedMMUDrug.getCreatedBy(); + if (createdBy != null && !createdBy.trim().isEmpty()) { + if (doctorBuilder.length() > 0) { + doctorBuilder.append(", "); + } + doctorBuilder.append("By: ").append(createdBy.trim()); + } + + variableValue = doctorBuilder.toString(); + break; + default: + break; + } + return variableValue; + } + + private String getGrievanceData(String className, String methodName, SMSRequest request, String authToken, BeneficiaryModel beneficiary) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {