diff --git a/.github/counter.txt b/.github/counter.txt
index d00491fd7e..7ed6ff82de 100644
--- a/.github/counter.txt
+++ b/.github/counter.txt
@@ -1 +1 @@
-1
+5
diff --git a/.github/last_date.txt b/.github/last_date.txt
index 3eff065eb0..1135f30580 100644
--- a/.github/last_date.txt
+++ b/.github/last_date.txt
@@ -1 +1 @@
-20240727
+20240727
\ No newline at end of file
diff --git a/README.md b/README.md
index bf2f6ce74a..606bd5702c 100644
--- a/README.md
+++ b/README.md
@@ -18,11 +18,7 @@ Developed using Java Enterprise Edition, the system offers both a web applicatio
## Current Version
-
-
-
-Current Version: 3.0.0.20240727.1 (This line will be automatically updated to reflect the latest version)
-
+Current Version: 3.0.0.20240727.5 (This line will be automatically updated to reflect the latest version)
## History
diff --git a/nb-configuration.xml b/nb-configuration.xml
index 6aa3a3c7d9..5315dde908 100644
--- a/nb-configuration.xml
+++ b/nb-configuration.xml
@@ -16,7 +16,7 @@ Any value defined here will override the pom.xml file value but is only applicab
-->
ide
pfv5ee8
- false
none
+ false
diff --git a/pom.xml b/pom.xml
index 48a7a6f5f6..4c202565d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
vfs
3.0.0
war
- sethma
+ ruhunu-demo
${project.build.directory}/endorsed
diff --git a/src/main/java/com/divudi/bean/common/DoctorSpecialityController.java b/src/main/java/com/divudi/bean/common/DoctorSpecialityController.java
index 9c0edc1a8f..e0e213a74c 100644
--- a/src/main/java/com/divudi/bean/common/DoctorSpecialityController.java
+++ b/src/main/java/com/divudi/bean/common/DoctorSpecialityController.java
@@ -120,6 +120,16 @@ private void recreateModel() {
}
public void saveSelected() {
+
+ if(getCurrent().getName() == null || getCurrent().getName().isEmpty()){
+ JsfUtil.addErrorMessage("Name is required");
+ return;
+ }
+
+// if(getCurrent().getDescription()== null || getCurrent().getDescription().isEmpty() ){
+// JsfUtil.addErrorMessage("Description is required");
+// return;
+// }
if (getCurrent().getId() != null && getCurrent().getId() > 0) {
getFacade().edit(current);
diff --git a/src/main/java/com/divudi/bean/common/PatientController.java b/src/main/java/com/divudi/bean/common/PatientController.java
index 0bbc96334e..a45cd81e03 100644
--- a/src/main/java/com/divudi/bean/common/PatientController.java
+++ b/src/main/java/com/divudi/bean/common/PatientController.java
@@ -453,7 +453,7 @@ public void downloadAllPatients() {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=Patients.xlsx");
- try ( ServletOutputStream outputStream = response.getOutputStream()) {
+ try (ServletOutputStream outputStream = response.getOutputStream()) {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
@@ -571,7 +571,7 @@ public void downloadPatientsPhoneNumbers() {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=PatientPhoneNumbers.xlsx");
- try ( ServletOutputStream outputStream = response.getOutputStream()) {
+ try (ServletOutputStream outputStream = response.getOutputStream()) {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
@@ -914,6 +914,16 @@ public String navigateToReceiveDepositsFromPatientProfile() {
JsfUtil.addErrorMessage("No patient selected");
return "";
}
+
+ if(current.getHasAnAccount() == null){
+ JsfUtil.addErrorMessage("Patient has No Account");
+ return "";
+ }
+ if(!current.getHasAnAccount()){
+ JsfUtil.addErrorMessage("Patient has No Account");
+ return "";
+ }
+
paymentMethodData = new PaymentMethodData();
bill = new Bill();
billItem = new BillItem();
@@ -1047,7 +1057,6 @@ public void createPatientInvestigationsTableAllByLoggedInstitution() {
temMap.put("ins", getSessionController().getInstitution());
sql += " order by pi.approveAt desc ";
- //System.err.println("Sql " + sql);
// patientInvestigations = getPatientInvestigationFacade().findByJpql(sql, temMap, TemporalType.TIMESTAMP);
// patientInvestigations=
}
@@ -1563,6 +1572,7 @@ public void quickSearchPatientLongPhoneNumber(ControllerWithPatient controller)
Long searchedPhoneNumber = CommonFunctions.removeSpecialCharsInPhonenumber(quickSearchPhoneNumber);
m.put("pp", searchedPhoneNumber);
quickSearchPatientList = getFacade().findByJpql(j, m);
+ opdBillController.setPaymentMethod(null);
if (quickSearchPatientList == null) {
JsfUtil.addErrorMessage("No Patient found !");
controller.setPatient(null);
@@ -1581,6 +1591,14 @@ public void quickSearchPatientLongPhoneNumber(ControllerWithPatient controller)
patientSearched = quickSearchPatientList.get(0);
controller.setPatient(patientSearched);
controller.setPatientDetailsEditable(false);
+ opdBillController.setPaymentMethod(null);
+ if (controller.getPatient().getHasAnAccount() != null) {
+ if (patientSearched.getHasAnAccount() && configOptionApplicationController.getBooleanValueByKey("Automatically set the PatientDeposit payment Method if a Deposit is Available", false)) {
+ opdBillController.setPaymentMethod(PaymentMethod.PatientDeposit);
+ opdBillController.listnerForPaymentMethodChange();
+ }
+ }
+
quickSearchPatientList = null;
} else {
controller.setPatient(null);
@@ -1608,6 +1626,14 @@ public void selectQuickOneFromQuickSearchPatient(ControllerWithPatient controlle
controller.setPatient(current);
admissionController.fillCurrentPatientAllergies(current);
controller.setPatientDetailsEditable(false);
+ opdBillController.setPaymentMethod(null);
+ if (controller.getPatient().getHasAnAccount() != null) {
+ if (controller.getPatient().getHasAnAccount() && configOptionApplicationController.getBooleanValueByKey("Automatically set the PatientDeposit payment Method if a Deposit is Available", false)) {
+ opdBillController.setPaymentMethod(PaymentMethod.PatientDeposit);
+ opdBillController.listnerForPaymentMethodChange();
+ }
+ }
+
quickSearchPatientList = null;
}
@@ -2042,22 +2068,18 @@ public void createPatientBarcode() {
// return str;
} catch (Exception ex) {
- // ////System.out.println("ex = " + ex.getMessage());
}
} else {
- // ////System.out.println("else = ");
try {
Barcode bc = BarcodeFactory.createCode128A("0000");
bc.setBarHeight(5);
bc.setBarWidth(3);
bc.setDrawingText(true);
BarcodeImageHandler.saveJPEG(bc, barcodeFile);
- // ////System.out.println("12");
InputStream targetStream = new FileInputStream(barcodeFile);
StreamedContent str = DefaultStreamedContent.builder().contentType("image/jpeg").name(barcodeFile.getName()).stream(() -> targetStream).build();
barcode = str;
} catch (Exception ex) {
- // ////System.out.println("ex = " + ex.getMessage());
}
}
}
@@ -2155,7 +2177,6 @@ public void dobChangeListen() {
}
public StreamedContent getPhoto(Patient p) {
- //////System.out.println("p is " + p);
FacesContext context = FacesContext.getCurrentInstance();
if (context.getRenderResponse()) {
return new DefaultStreamedContent();
@@ -2163,7 +2184,6 @@ public StreamedContent getPhoto(Patient p) {
return new DefaultStreamedContent();
} else {
if (p.getId() != null && p.getBaImage() != null) {
- //////System.out.println("giving image");
InputStream targetStream = new ByteArrayInputStream(p.getBaImage());
StreamedContent str = DefaultStreamedContent.builder().contentType(p.getFileType()).name(p.getFileName()).stream(() -> targetStream).build();
return str;
@@ -2306,7 +2326,6 @@ public List completePatient(String query) {
+ " or (p.person.mobile) like :q "
+ " order by p.person.name";
hm.put("q", "%" + query.toUpperCase() + "%");
- //////System.out.println(sql);
suggestions = getFacade().findByJpql(sql, hm, 20);
}
return suggestions;
@@ -2782,11 +2801,6 @@ public String getCountPatientCode(String s) {
String st = "";
if (p != null) {
String str = p.getCode();
-// //System.out.println("str.substring(0,1) = " + str.substring(0, 1));
-// //System.out.println("str.substring(0,2) = " + str.substring(0, 2));
-// //System.out.println("str.substring(2) = " + str.substring(2));
-// //System.out.println("str.substring(3) = " + str.substring(3));
-// //System.out.println("str.substring(3,7) = " + str.substring(3, 7));
long l = Long.parseLong(str.substring(2));
l++;
st += s;
@@ -3691,13 +3705,11 @@ public Object getAsObject(FacesContext facesContext, UIComponent component, Stri
}
PatientController controller = (PatientController) facesContext.getApplication().getELResolver().
getValue(facesContext.getELContext(), null, "patientController");
- //////System.out.println("value at converter getAsObject is " + value);
return controller.getEjbFacade().find(getKey(value));
}
java.lang.Long getKey(String value) {
java.lang.Long key;
- //////System.out.println(value);
if (value == null || value.equals("null") || value.trim().equals("")) {
key = 0l;
} else {
diff --git a/src/main/java/com/divudi/bean/common/SessionController.java b/src/main/java/com/divudi/bean/common/SessionController.java
index 70d3732223..88e048e326 100644
--- a/src/main/java/com/divudi/bean/common/SessionController.java
+++ b/src/main/java/com/divudi/bean/common/SessionController.java
@@ -1084,9 +1084,12 @@ private boolean checkUsersWithoutDepartment() {
m.put("un", userName.toLowerCase());
List allUsers = getFacede().findByJpql(jpql, m);
for (WebUser u : allUsers) {
+ System.out.println("u = " + u.getName());
+ System.out.println("u = " + u.getId());
if ((u.getName()).equalsIgnoreCase(userName)) {
boolean passwordIsOk = SecurityController.matchPassword(password, u.getWebUserPassword());
if (passwordIsOk) {
+ System.out.println("password ok");
departments = listLoggableDepts(u);
@@ -1187,15 +1190,20 @@ public void loadDashboards() {
}
public String selectDepartment() {
+ System.out.println("loggedUser = " + loggedUser);
if (loggedUser == null) {
+ JsfUtil.addErrorMessage("No User logged");
return "/login?faces-redirect=true";
}
+ System.out.println("loggedUser.getId() = " + loggedUser.getId());
if (loggedUser.getWebUserPerson() == null) {
- Person p = new Person();
- p.setName(loggedUser.getName());
- personFacade.create(p);
- loggedUser.setWebUserPerson(p);
- webUserFacade.edit(loggedUser);
+ JsfUtil.addErrorMessage("No person");
+ return "";
+// Person p = new Person();
+// p.setName(loggedUser.getName());
+// personFacade.create(p);
+// loggedUser.setWebUserPerson(p);
+// webUserFacade.edit(loggedUser);
}
loggedUser.setDepartment(department);
@@ -1699,6 +1707,7 @@ public WebUser getLoggedUser() {
* @param loggedUser
*/
public void setLoggedUser(WebUser loggedUser) {
+ System.out.println("loggedUser = " + loggedUser);
this.loggedUser = loggedUser;
}
@@ -1728,7 +1737,10 @@ public List fillUserPrivileges(WebUser twu, Department tdept,
}
m.put("ret", true);
m.put("wu", twu);
+ System.out.println("m = " + m);
+ System.out.println("sql = " + sql);
List twups = getWebUserPrivilegeFacade().findByJpql(sql, m);
+ System.out.println("twups = " + twups);
return twups;
}
diff --git a/src/main/java/com/divudi/bean/lab/PatientInvestigationController.java b/src/main/java/com/divudi/bean/lab/PatientInvestigationController.java
index 094ffc9b1d..c955b2ee14 100644
--- a/src/main/java/com/divudi/bean/lab/PatientInvestigationController.java
+++ b/src/main/java/com/divudi/bean/lab/PatientInvestigationController.java
@@ -52,7 +52,9 @@
import com.divudi.bean.common.util.JsfUtil;
import com.divudi.data.lab.BillBarcode;
import com.divudi.data.lab.PatientInvestigationWrapper;
+import com.divudi.data.lab.PatientSampleWrapper;
import com.divudi.data.lab.SampleTubeLabel;
+import com.divudi.entity.WebUser;
import com.divudi.java.CommonFunctions;
import com.divudi.ws.lims.Lims;
import java.io.Serializable;
@@ -191,7 +193,8 @@ public class PatientInvestigationController implements Serializable {
private List sampleTubeLabels;
- List< BillBarcode> billBarcodes;
+ private List billBarcodes;
+ private List selectedBillBarcodes;
public String navigateToPrintBarcodeFromMenu() {
return "/lab/sample_barcode_printing?faces-redirect=true";
@@ -1172,6 +1175,31 @@ public void prepareToSample() {
checkRefundBillItems(lstToSamle);
}
+ public void generateBarcodesForSelectedBills() {
+ if (selectedBillBarcodes == null) {
+ JsfUtil.addErrorMessage("No Bills Seelcted");
+ return;
+ }
+ if (selectedBillBarcodes.isEmpty()) {
+ JsfUtil.addErrorMessage("No Bills Seelcted");
+ return;
+ }
+ for (BillBarcode bb : selectedBillBarcodes) {
+ List bs = new ArrayList<>();
+ bs.add(bb.getBill());
+ List psws = new ArrayList<>();
+ List pss = prepareSampleCollectionByBillsForRequestss(bs, sessionController.getLoggedUser());
+ if(pss!=null){
+ for(PatientSample ps:pss){
+ PatientSampleWrapper ptsw = new PatientSampleWrapper(ps);
+ psws.add(ptsw);
+ }
+ }
+ bb.setPatientSampleWrappers(psws);
+ }
+
+ }
+
public void listPatientInvestigationAwaitingSamplling() {
String temSql;
Map temMap = new HashMap();
@@ -1187,7 +1215,7 @@ public void listBillsToGenerateBarcodes() {
temSql = "SELECT i "
+ " FROM PatientInvestigation i "
+ " where i.retired=:ret "
- + " and i.barcodeGenerated=:gb "
+ + " and i.barcodeGenerated=:bg "
+ " and i.billItem.bill.billDate between :fromDate and :toDate "
+ " order by i.id desc";
temMap.put("fromDate", getFromDate());
@@ -2051,6 +2079,22 @@ public void setLstForSampleManagement(List lstForSampleMan
this.lstForSampleManagement = lstForSampleManagement;
}
+ public List< BillBarcode> getBillBarcodes() {
+ return billBarcodes;
+ }
+
+ public void setBillBarcodes(List< BillBarcode> billBarcodes) {
+ this.billBarcodes = billBarcodes;
+ }
+
+ public List getSelectedBillBarcodes() {
+ return selectedBillBarcodes;
+ }
+
+ public void setSelectedBillBarcodes(List selectedBillBarcodes) {
+ this.selectedBillBarcodes = selectedBillBarcodes;
+ }
+
/**
*
*/
@@ -2102,12 +2146,178 @@ public void setCommonController(CommonController commonController) {
this.commonController = commonController;
}
- public BillItemFacade getBillItemFacade() {
- return billItemFacade;
+ public List prepareSampleCollectionByBillsForRequestss(List bills, WebUser wu) {
+ String j = "";
+ Map m;
+ Map rPatientSamplesMap = new HashMap<>();
+
+ if (bills == null) {
+ return null;
+ }
+
+ for (Bill b : bills) {
+ m = new HashMap();
+ m.put("can", false);
+ m.put("bill", b);
+ j = "Select pi from PatientInvestigation pi "
+ + " where pi.cancelled=:can "
+ + " and pi.billItem.bill=:bill";
+ List pis = ejbFacade.findByJpql(j, m);
+
+ if (pis == null) {
+ return null;
+ }
+
+ for (PatientInvestigation ptix : pis) {
+
+ Investigation ix = ptix.getInvestigation();
+
+ if (ix == null) {
+ continue;
+ }
+
+ ptix.setCollected(true);
+ ptix.setSampleCollecter(wu);
+ ptix.setSampleDepartment(wu.getDepartment());
+ ptix.setSampleInstitution(wu.getInstitution());
+ ptix.setSampledAt(new Date());
+ ejbFacade.edit(ptix);
+
+ List ixis = getItems(ix);
+
+ if (ixis == null) {
+ continue;
+ }
+
+ for (InvestigationItem ixi : ixis) {
+
+ if (ixi.getIxItemType() == InvestigationItemType.Value) {
+
+ if (ixi.getTube() == null) {
+ continue;
+ }
+ if (ixi.getSample() == null) {
+ continue;
+ }
+
+ j = "select ps from PatientSample ps "
+ + " where ps.tube=:tube "
+ + " and ps.sample=:sample "
+ + " and ps.machine=:machine "
+ + " and ps.patient=:pt "
+ + " and ps.bill=:bill ";
+// + " and ps.collected=:ca
+ m = new HashMap();
+ m.put("tube", ixi.getTube());
+
+ m.put("sample", ixi.getSample());
+
+ m.put("machine", ixi.getMachine());
+
+ m.put("pt", b.getPatient());
+
+ m.put("bill", b);
+// m.put("ca", false);
+ if (ix.isHasMoreThanOneComponant()) {
+ j += " and ps.investigationComponant=:sc ";
+ m.put("sc", ixi.getSampleComponent());
+ }
+
+ PatientSample pts = patientSampleFacade.findFirstByJpql(j, m);
+ if (pts == null) {
+ pts = new PatientSample();
+
+ pts.setTube(ixi.getTube());
+ pts.setSample(ixi.getSample());
+ if (ix.isHasMoreThanOneComponant()) {
+ pts.setInvestigationComponant(ixi.getSampleComponent());
+ }
+ pts.setMachine(ixi.getMachine());
+ pts.setPatient(b.getPatient());
+ pts.setBill(b);
+
+ pts.setSampleDepartment(wu.getDepartment());
+ pts.setSampleInstitution(wu.getInstitution());
+ pts.setSampleCollecter(wu);
+ pts.setSampledAt(new Date());
+ pts.setCreatedAt(new Date());
+ pts.setCreater(wu);
+ pts.setCollected(false);
+ pts.setReadyTosentToAnalyzer(false);
+ pts.setSentToAnalyzer(false);
+ patientSampleFacade.create(pts);
+ }
+ rPatientSamplesMap.put(pts.getId(), pts);
+
+ PatientSampleComponant ptsc;
+ j = "select ps from PatientSampleComponant ps "
+ + " where ps.patientSample=:pts "
+ + " and ps.bill=:bill "
+ + " and ps.patient=:pt "
+ + " and ps.patientInvestigation=:ptix "
+ + " and ps.investigationComponant=:ixc";
+ m = new HashMap();
+ m.put("pts", pts);
+ m.put("bill", b);
+ m.put("pt", b.getPatient());
+ m.put("ptix", ptix);
+ m.put("ixc", ixi.getSampleComponent());
+ m.put("pts", pts);
+
+ m.put("bill", b);
+
+ m.put("pt", b.getPatient());
+
+ m.put("ptix", ptix);
+
+ m.put("ixc", ixi.getSampleComponent());
+
+ ptsc = patientSampleComponantFacade.findFirstByJpql(j, m);
+
+ if (ptsc == null) {
+ ptsc = new PatientSampleComponant();
+ ptsc.setPatientSample(pts);
+ ptsc.setBill(b);
+ ptsc.setPatient(b.getPatient());
+ ptsc.setPatientInvestigation(ptix);
+ ptsc.setInvestigationComponant(ixi.getSampleComponent());
+ ptsc.setCreatedAt(new Date());
+ ptsc.setCreater(wu);
+ patientSampleComponantFacade.create(ptsc);
+ }
+ }
+ }
+ }
+
+ }
+
+ List rPatientSamples = new ArrayList<>(rPatientSamplesMap.values());
+ return rPatientSamples;
}
- public void setBillItemFacade(BillItemFacade billItemFacade) {
- this.billItemFacade = billItemFacade;
+ public List getItems(Investigation ix) {
+ List iis;
+ if (ix == null) {
+ return new ArrayList<>();
+ }
+ Investigation temIx = ix;
+ if (ix.getReportedAs() != null) {
+ if (ix.getReportedAs() instanceof Investigation) {
+ temIx = (Investigation) ix.getReportedAs();
+ }
+ }
+
+ if (ix.getId() != null) {
+ String temSql;
+ temSql = "SELECT i FROM InvestigationItem i where i.retired<>true and i.item=:item order by i.riTop, i.riLeft";
+ Map m = new HashMap();
+ m.put("item", temIx);
+
+ iis = investigationItemFacade.findByJpql(temSql, m);
+ } else {
+ iis = new ArrayList<>();
+ }
+ return iis;
}
}
diff --git a/src/main/java/com/divudi/data/Privileges.java b/src/main/java/com/divudi/data/Privileges.java
index 0beea1f6ac..2a06487d29 100644
--- a/src/main/java/com/divudi/data/Privileges.java
+++ b/src/main/java/com/divudi/data/Privileges.java
@@ -486,7 +486,24 @@ public enum Privileges {
OpticianEmr,
OpticianStockManagement,
OpticianProductCatalog,
- OpticianRepairManagement,;
+ OpticianRepairManagement,
+
+
+ @Deprecated
+ Ophthalmology,
+ @Deprecated
+ OphthalmologyPatientManagement,
+ @Deprecated
+ OphthalmologyAppointmentManagement,
+ @Deprecated
+ OphthalmologyEmr,
+ @Deprecated
+ OphthalmologyStockManagement,
+ @Deprecated
+ OphthalmologyProductCatalog,
+ @Deprecated
+ OphthalmologyRepairManagement,
+ ;
public String getLabel() {
switch (this) {
diff --git a/src/main/java/com/divudi/data/lab/PatientSampleWrapper.java b/src/main/java/com/divudi/data/lab/PatientSampleWrapper.java
index aa6ab84e76..e55af8e0b0 100644
--- a/src/main/java/com/divudi/data/lab/PatientSampleWrapper.java
+++ b/src/main/java/com/divudi/data/lab/PatientSampleWrapper.java
@@ -10,6 +10,15 @@ public class PatientSampleWrapper {
private PatientSample patientSample;
private boolean selected;
+ public PatientSampleWrapper() {
+ }
+
+ public PatientSampleWrapper(PatientSample patientSample) {
+ this.patientSample = patientSample;
+ }
+
+
+
public PatientSample getPatientSample() {
return patientSample;
}
diff --git a/src/main/resources/VERSION.txt b/src/main/resources/VERSION.txt
index fd452aa834..76ecf600f2 100644
--- a/src/main/resources/VERSION.txt
+++ b/src/main/resources/VERSION.txt
@@ -1 +1 @@
-3.0.0.20240727.1
+3.0.0.20240727.5
diff --git a/src/main/webapp/admin/staff/admin_doctor_speciality.xhtml b/src/main/webapp/admin/staff/admin_doctor_speciality.xhtml
index 1b1895d6fe..cf1ef883d0 100644
--- a/src/main/webapp/admin/staff/admin_doctor_speciality.xhtml
+++ b/src/main/webapp/admin/staff/admin_doctor_speciality.xhtml
@@ -27,7 +27,7 @@
icon="fa-solid fa-plus"
class="ui-button-success w-25"
process="btnAdd"
- update="gpDetail" >
+ update="gpDetail lstSelect" >
-
+
-
+
diff --git a/src/main/webapp/cashier/index.xhtml b/src/main/webapp/cashier/index.xhtml
index 4a3dd98fb3..14fedd4d6a 100644
--- a/src/main/webapp/cashier/index.xhtml
+++ b/src/main/webapp/cashier/index.xhtml
@@ -6,7 +6,9 @@
xmlns:h="http://xmlns.jcp.org/jsf/html">
+
+
@@ -95,7 +97,9 @@
+
+