diff --git a/.github/workflows/coop_prod_ci_cd.yml b/.github/workflows/coop_prod_ci_cd.yml index 4795a728f7..de20ceaf8d 100644 --- a/.github/workflows/coop_prod_ci_cd.yml +++ b/.github/workflows/coop_prod_ci_cd.yml @@ -56,8 +56,6 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v3 - with: - ref: 'coop-prod' - name: Download Build Artifact uses: actions/download-artifact@v4 @@ -84,9 +82,8 @@ jobs: # Ensure deployment directory exists ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo mkdir -p $WAR_DIR - sudo chown -R appuser:appuser /home/appuser/app/latest - sudo su - appuser + mkdir -p $WAR_DIR + chown -R appuser:appuser $WAR_DIR cd $WAR_DIR # Remove old backup if it exists @@ -101,18 +98,16 @@ jobs: " # Copy new WAR file to the server - rsync -aL --progress -e "ssh -i private_key.pem" ./*.war $SERVER_USER@$SERVER_IP:/tmp/$WAR_NAME + rsync -aL --progress -e "ssh -i private_key.pem" ./*.war $SERVER_USER@$SERVER_IP:$WAR_DIR/$WAR_NAME - # Move the file to /home/appuser/app/latest/ and set permissions + # Set the WAR file permission ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo mv /tmp/$WAR_NAME $WAR_DIR/ - sudo chown appuser:appuser $WAR_DIR/$WAR_NAME + chown appuser:appuser $WAR_DIR/$WAR_NAME " # Deploy the WAR using asadmin ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo su - appuser - echo 'AS_ADMIN_PASSWORD=${{ secrets.COOP_PROD_PAYARA_ADMIN_PASS }}' > /tmp/payara-admin-pass.txt + echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt undeploy $APP_NAME || true /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt deploy --force=true --contextroot $APP_NAME $WAR_DIR/$WAR_NAME rm /tmp/payara-admin-pass.txt @@ -120,8 +115,7 @@ jobs: # Validate if the application is running ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo su - appuser - echo 'AS_ADMIN_PASSWORD=${{ secrets.COOP_PROD_PAYARA_ADMIN_PASS }}' > /tmp/payara-admin-pass.txt + echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt if /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt list-applications | grep -q '$APP_NAME'; then echo 'Application is running.' else @@ -145,3 +139,4 @@ jobs: # Cleanup rm -f private_key.pem + diff --git a/.github/workflows/digasiri_prod_ci_cd.yml b/.github/workflows/digasiri_prod_ci_cd.yml new file mode 100644 index 0000000000..93d097f277 --- /dev/null +++ b/.github/workflows/digasiri_prod_ci_cd.yml @@ -0,0 +1,141 @@ +name: DIGASIRI-PROD Build & Deployment Pipeline + +on: + push: + branches: + - digasiri-prod + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + + - name: Cache Maven Packages + uses: actions/cache@v3 + with: + path: ~/.m2 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + - name: Update JDBC Data Sources in persistence.xml + run: | + sed -i 's|${JDBC_DATASOURCE}|jdbc/digasiri|' src/main/resources/META-INF/persistence.xml + sed -i 's|${JDBC_AUDIT_DATASOURCE}|jdbc/digasiriAudit|' src/main/resources/META-INF/persistence.xml + + - name: Verify JDBC Data Sources in persistence.xml + run: | + grep '' src/main/resources/META-INF/persistence.xml + + - name: Build with Maven + run: mvn clean package -DskipTests + + - name: Archive Build Artifacts + uses: actions/upload-artifact@v4 + with: + name: build-artifacts + path: target/*.war + overwrite: true + + # - name: Run Tests + # run: mvn test + + deploy: + needs: build + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + - name: Download Build Artifact + uses: actions/download-artifact@v4 + with: + name: build-artifacts + path: ./ + + - name: Deploy to Payara + env: + SERVER_IP: ${{ secrets.DIGASIRI_PROD_SERVER_IP }} + SERVER_USER: ${{ secrets.DIGASIRI_PROD_SERVER_USER }} + SSH_PRIVATE_KEY: ${{ secrets.DIGASIRI_PROD_SSH_PRIVATE_KEY }} + PAYARA_ADMIN_PASS: ${{ secrets.DIGASIRI_PROD_PAYARA_ADMIN_PASS }} + run: | + # Add SSH private key to the SSH agent + echo "$SSH_PRIVATE_KEY" > private_key.pem + chmod 600 private_key.pem + + # Variables + WAR_NAME="digasiri.war" + WAR_DIR="/home/appuser/app/latest" + APP_NAME="digasiri" + SUBDOMAIN="digasiri" + + # Ensure deployment directory exists + ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + mkdir -p $WAR_DIR + chown -R appuser:appuser $WAR_DIR + cd $WAR_DIR + + # Remove old backup if it exists + if [ -f $WAR_NAME.old ]; then + rm $WAR_NAME.old + fi + + # If the current WAR file exists, back it up + if [ -f $WAR_NAME ]; then + mv $WAR_NAME $WAR_NAME.old + fi + " + + # Copy new WAR file to the server + rsync -aL --progress -e "ssh -i private_key.pem" ./*.war $SERVER_USER@$SERVER_IP:$WAR_DIR/$WAR_NAME + + # Set the WAR file permission + ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + chown appuser:appuser $WAR_DIR/$WAR_NAME + " + + # Deploy the WAR using asadmin + ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt + /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt undeploy $APP_NAME || true + /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt deploy --force=true --contextroot $APP_NAME $WAR_DIR/$WAR_NAME + rm /tmp/payara-admin-pass.txt + " + + # Validate if the application is running + ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " + echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt + if /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt list-applications | grep -q '$APP_NAME'; then + echo 'Application is running.' + else + echo 'Application failed to start.' + fi + rm /tmp/payara-admin-pass.txt + " + + # Check if the application is reachable + for i in {1..5}; do + RESPONSE_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://$SUBDOMAIN.carecode.org/$APP_NAME/faces/index1.xhtml) + if [ "$RESPONSE_CODE" == "200" ]; then + echo "Application is reachable and healthy." + break + elif [ "$i" == "5" ]; then + echo "Application is not reachable or unhealthy at https://$SUBDOMAIN.carecode.org/$APP_NAME (HTTP $RESPONSE_CODE)" + break + fi + sleep 10 + done + + # Cleanup + rm -f private_key.pem diff --git a/.github/workflows/rmh_prod_ci_cd.yml b/.github/workflows/rmh_prod_ci_cd.yml index 275eb4c98a..54ab2c4788 100644 --- a/.github/workflows/rmh_prod_ci_cd.yml +++ b/.github/workflows/rmh_prod_ci_cd.yml @@ -56,8 +56,6 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v3 - with: - ref: 'rmh-prod' - name: Download Build Artifact uses: actions/download-artifact@v4 @@ -67,10 +65,10 @@ jobs: - name: Deploy to Payara env: - SERVER_IP: ${{ secrets.COOP_PROD_SERVER_IP }} - SERVER_USER: ${{ secrets.COOP_PROD_SERVER_USER }} - SSH_PRIVATE_KEY: ${{ secrets.COOP_PROD_SSH_PRIVATE_KEY }} - PAYARA_ADMIN_PASS: ${{ secrets.COOP_PROD_PAYARA_ADMIN_PASS }} + SERVER_IP: ${{ secrets.RMH_PROD_SERVER_IP }} + SERVER_USER: ${{ secrets.RMH_PROD_SERVER_USER }} + SSH_PRIVATE_KEY: ${{ secrets.RMH_PROD_SSH_PRIVATE_KEY }} + PAYARA_ADMIN_PASS: ${{ secrets.RMH_PROD_PAYARA_ADMIN_PASS }} run: | # Add SSH private key to the SSH agent echo "$SSH_PRIVATE_KEY" > private_key.pem @@ -84,9 +82,8 @@ jobs: # Ensure deployment directory exists ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo mkdir -p $WAR_DIR - sudo chown -R appuser:appuser /home/appuser/app/latest - sudo su - appuser + mkdir -p $WAR_DIR + chown -R appuser:appuser $WAR_DIR cd $WAR_DIR # Remove old backup if it exists @@ -101,18 +98,16 @@ jobs: " # Copy new WAR file to the server - rsync -aL --progress -e "ssh -i private_key.pem" ./*.war $SERVER_USER@$SERVER_IP:/tmp/$WAR_NAME + rsync -aL --progress -e "ssh -i private_key.pem" ./*.war $SERVER_USER@$SERVER_IP:$WAR_DIR/$WAR_NAME - # Move the file to /home/appuser/app/latest/ and set permissions + # Set the WAR file permission ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo mv /tmp/$WAR_NAME $WAR_DIR/ - sudo chown appuser:appuser $WAR_DIR/$WAR_NAME + chown appuser:appuser $WAR_DIR/$WAR_NAME " # Deploy the WAR using asadmin ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo su - appuser - echo 'AS_ADMIN_PASSWORD=${{ secrets.COOP_PROD_PAYARA_ADMIN_PASS }}' > /tmp/payara-admin-pass.txt + echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt undeploy $APP_NAME || true /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt deploy --force=true --contextroot $APP_NAME $WAR_DIR/$WAR_NAME rm /tmp/payara-admin-pass.txt @@ -120,8 +115,7 @@ jobs: # Validate if the application is running ssh -i private_key.pem -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP " - sudo su - appuser - echo 'AS_ADMIN_PASSWORD=${{ secrets.COOP_PROD_PAYARA_ADMIN_PASS }}' > /tmp/payara-admin-pass.txt + echo 'AS_ADMIN_PASSWORD=$PAYARA_ADMIN_PASS' > /tmp/payara-admin-pass.txt if /opt/payara5/bin/asadmin --user admin --passwordfile /tmp/payara-admin-pass.txt list-applications | grep -q '$APP_NAME'; then echo 'Application is running.' else diff --git a/pom.xml b/pom.xml index e3f603b436..2c0acbc9ba 100644 --- a/pom.xml +++ b/pom.xml @@ -2,10 +2,10 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.divudi - rh + coop 3.0.0 war - rh + coop ${project.build.directory}/endorsed diff --git a/src/main/java/com/divudi/bean/common/BillSearch.java b/src/main/java/com/divudi/bean/common/BillSearch.java index f7708d6b1e..0b62274ffc 100644 --- a/src/main/java/com/divudi/bean/common/BillSearch.java +++ b/src/main/java/com/divudi/bean/common/BillSearch.java @@ -319,6 +319,7 @@ public class BillSearch implements Serializable { private Bill viewingBill; private List viewingIndividualBillsOfBatchBill; private List viewingRefundBills; + private List viewingReferanceBills; private List viewingBillItems; private List viewingBillFees; private List viewingBillComponents; @@ -1394,9 +1395,6 @@ public void calculateRefundTotalForOpdBillForAjex() { double refundingValue = 0; for (BillFee refundingBillFees : refundingBillItem.getBillFees()) { - System.out.println("rbf.getFeeValue() name = " + refundingBillFees.getFee().getName()); - System.out.println("rbf.getFeeValue() = " + refundingBillFees.getFeeValue()); - System.out.println("rbf.getFeeValue() fee = " + refundingBillFees.getFee().getFee()); refundingValue += refundingBillFees.getFeeValue(); } refundingBillItem.setNetValue(refundingValue); @@ -1773,11 +1771,8 @@ public String refundOpdBill() { } if (refundingBill.getBillItems() != null) { - System.out.println("refundingBill = " + refundingBill); for (BillItem refundingBillItemTmp : refundingBill.getBillItems()) { - System.out.println("refundingBillItemTmp = " + refundingBillItemTmp); for (BillFee refundingBillFeeTmp : refundingBillItemTmp.getBillFees()) { - System.out.println("refundingBillFeeTmp = " + refundingBillFeeTmp); if (refundingBillFeeTmp.getReferenceBillFee().getFeeValue() < refundingBillFeeTmp.getFeeValue()) { JsfUtil.addErrorMessage("Pleace Enter Correct Value"); return ""; @@ -2076,15 +2071,8 @@ public void refundBillItems(RefundBill refundingBill) { getBillItemFacede().createAndFlush(rbi); originalBillItem.setRefunded(true); originalBillItem.setBillItemRefunded(true); - System.out.println("bi = " + originalBillItem); - System.out.println("1 bi Refunded= " + originalBillItem.isRefunded()); - System.out.println("1 billItemRefunded= " + originalBillItem.isBillItemRefunded()); getBillItemFacede().editAndFlush(originalBillItem); - System.out.println("2 bi Refunded= " + originalBillItem.isRefunded()); - System.out.println("2 billItemRefunded= " + originalBillItem.isBillItemRefunded()); originalBillItem = billItemFacade.find(bi.getId()); - System.out.println("3 bi Refunded= " + originalBillItem.isRefunded()); - System.out.println("3 billItemRefunded= " + originalBillItem.isBillItemRefunded()); String sql = "Select bf From BillFee bf where " + " bf.retired=false and bf.billItem.id=" + originalBillItem.getId(); List tmp = getBillFeeFacade().findByJpql(sql); @@ -2628,7 +2616,6 @@ public void cancelCashOutBill() { } private void returnBillFee(Bill rb, BillItem bt, List tmp) { - System.out.println("returnBillFee"); for (BillFee nB : tmp) { BillFee bf = new BillFee(); bf.copy(nB); @@ -2949,7 +2936,6 @@ public void cancelBillFee(Bill cancellationProfessionalPaymentBill, List originalProfessionalPaymentFeesForBillItem) { for (BillFee originalProfessionalPaymentFeeForBillItem : originalProfessionalPaymentFeesForBillItem) { BillFee newCancellingBillFee = new BillFee(); - System.out.println("addind new fee under cancelBillFee "); newCancellingBillFee.setFee(originalProfessionalPaymentFeeForBillItem.getFee()); newCancellingBillFee.setPatienEncounter(originalProfessionalPaymentFeeForBillItem.getPatienEncounter()); newCancellingBillFee.setPatient(originalProfessionalPaymentFeeForBillItem.getPatient()); @@ -3606,8 +3592,6 @@ public String navigateToViewOpdCreditBatchBillSettle() { } cashRecieveBillController.setPrintPreview(true); cashRecieveBillController.setCurrent(getBill()); - System.out.println("Preview = " + cashRecieveBillController.isPrintPreview()); - System.out.println("Bill = " + cashRecieveBillController.getCurrent()); return "/credit/credit_compnay_bill_opd?faces-redirect=true;"; } @@ -3904,13 +3888,10 @@ public String navigateToAdminBillByAtomicBillType() { } public String navigateToManageBillByAtomicBillType() { - System.out.println("navigateToManageBillByAtomicBillType"); - System.out.println("bill"); if (bill == null) { JsfUtil.addErrorMessage("No Bill is Selected"); return null; } - System.out.println("bill.getBillTypeAtomic() = " + bill.getBillTypeAtomic()); if (bill.getBillTypeAtomic() == null) { JsfUtil.addErrorMessage("No Bill type"); return null; @@ -4244,7 +4225,6 @@ private void createBillItemsAndBillFeesForOpdRefund() { List billedBillItems = billController.billItemsOfBill(bill); for (BillItem originalBillItem : billedBillItems) { - System.out.println("bi = " + originalBillItem); BillItem newlyCreatedRefundingBillItem = new BillItem(); newlyCreatedRefundingBillItem.copyWithoutFinancialData(originalBillItem); newlyCreatedRefundingBillItem.setBill(refundingBill); @@ -4254,7 +4234,6 @@ private void createBillItemsAndBillFeesForOpdRefund() { List originalBillFeesOfBillItem = billController.billFeesOfBillItem(originalBillItem); for (BillFee originalBillFeeOfBillItem : originalBillFeesOfBillItem) { - System.out.println("bf = " + originalBillFeeOfBillItem); BillFee newlyCreatedRefundingBillFeeOfBillItem = new BillFee(); newlyCreatedRefundingBillFeeOfBillItem.copyWithoutFinancialData(originalBillFeeOfBillItem); @@ -5287,12 +5266,15 @@ private void loadBillDetails(Bill bill) { // System.out.println("viewingBillFees = " + viewingBillFees); viewingBillComponents = billBean.fetchBillComponents(bill); viewingBillPayments = billBean.fetchBillPayments(bill); + viewingReferanceBills = billService.fetchAllReferanceBills(bill); } public Bill getViewingBill() { return viewingBill; } + + public void setViewingBill(Bill viewingBill) { this.viewingBill = viewingBill; } @@ -5369,6 +5351,14 @@ public void setPaymentMethods(List paymentMethods) { this.paymentMethods = paymentMethods; } + public List getViewingReferanceBills() { + return viewingReferanceBills; + } + + public void setViewingReferanceBills(List viewingReferanceBills) { + this.viewingReferanceBills = viewingReferanceBills; + } + public class PaymentSummary { private long idCounter = 0; @@ -5559,7 +5549,6 @@ public String navigateToDownloadBillsAndBillItems1() { } public String findOriginalBillFromCancelledBill(Bill cancelBill) { - System.out.println("findOriginalBillFromCancelledBill"); Bill bill = null; String jpql = "SELECT b FROM Bill b " + " WHERE b.cancelledBill=:bi " diff --git a/src/main/java/com/divudi/bean/common/EnumController.java b/src/main/java/com/divudi/bean/common/EnumController.java index 16b4ffef1d..b0fd19a49e 100644 --- a/src/main/java/com/divudi/bean/common/EnumController.java +++ b/src/main/java/com/divudi/bean/common/EnumController.java @@ -819,6 +819,15 @@ public PaymentMethod[] getPaymentMethodsWithoutCredit() { PaymentMethod.ewallet}; return p; } + + public PaymentMethod[] getPaymentMethodsForSupplierPayments() { + PaymentMethod[] p = {PaymentMethod.Cash, + PaymentMethod.Card, + PaymentMethod.Cheque, + PaymentMethod.Slip, + PaymentMethod.IOU}; + return p; + } public PaymentMethod[] getPaymentMethodsForIwardDeposit() { PaymentMethod[] p = {PaymentMethod.Cash, diff --git a/src/main/java/com/divudi/bean/common/ReportsController.java b/src/main/java/com/divudi/bean/common/ReportsController.java index 956e30e04f..80e8451438 100644 --- a/src/main/java/com/divudi/bean/common/ReportsController.java +++ b/src/main/java/com/divudi/bean/common/ReportsController.java @@ -3248,9 +3248,12 @@ private ReportTemplateRowBundle generateExternalLaboratoryWorkloadBillItems(List parameters.put("bts", bts); if (visitType != null) { - if (visitType.equalsIgnoreCase("IP") || visitType.equalsIgnoreCase("OP") || visitType.equalsIgnoreCase("CC")) { + if (visitType.equalsIgnoreCase("IP") || visitType.equalsIgnoreCase("CC")) { jpql += "AND bill.ipOpOrCc = :type "; parameters.put("type", visitType); + } else if (visitType.equalsIgnoreCase("OP")) { + jpql += "AND (bill.ipOpOrCc = :type OR bill.ipOpOrCc IS NULL) "; + parameters.put("type", visitType); } } @@ -3344,9 +3347,12 @@ private ReportTemplateRowBundle generateExternalLaboratoryWorkloadSummaryBillIte + "AND bill.createdAt BETWEEN :fd AND :td "; if (visitType != null) { - if (visitType.equalsIgnoreCase("IP") || visitType.equalsIgnoreCase("OP") || visitType.equalsIgnoreCase("CC")) { + if (visitType.equalsIgnoreCase("IP") || visitType.equalsIgnoreCase("CC")) { jpql += "AND bill.ipOpOrCc = :type "; parameters.put("type", visitType); + } else if (visitType.equalsIgnoreCase("OP")) { + jpql += "AND (bill.ipOpOrCc = :type OR bill.ipOpOrCc IS NULL) "; + parameters.put("type", visitType); } } diff --git a/src/main/java/com/divudi/bean/common/SearchController.java b/src/main/java/com/divudi/bean/common/SearchController.java index 029ba73a48..70da65eac0 100644 --- a/src/main/java/com/divudi/bean/common/SearchController.java +++ b/src/main/java/com/divudi/bean/common/SearchController.java @@ -681,7 +681,7 @@ public void fillSavedTranserRequestBills() { parametersForSearching.put("fromDepartment", sessionController.getDepartment()); parametersForSearching.put("fromDate", getFromDate()); parametersForSearching.put("toDate", getToDate()); - + bills = getBillFacade().findByJpql(sql, parametersForSearching, TemporalType.TIMESTAMP); } @@ -4556,17 +4556,16 @@ public void createBillItemTableBht(BillType btp) { m.put("bType", btp); m.put("ins", getSessionController().getInstitution()); m.put("class", PreBill.class); - sql = "select bi from BillItem bi" + " where type(bi.bill)=:class " + " and bi.bill.institution=:ins" + " and bi.bill.billType=:bType and " + " bi.createdAt between :fromDate and :toDate "; - + if (getSearchKeyword().getFrmDepartment() != null) { sql += " and bi.bill.department=:dep"; - m.put("dep", getSearchKeyword().getFrmDepartment()); + m.put("dep", getSearchKeyword().getFrmDepartment()); } if (getSearchKeyword().getFrmDepartment() != null) { @@ -4670,9 +4669,7 @@ public void createShiftShortageBillsTable() { bills = getBillFacade().findByJpql(sql, m); if (bills == null || bills.isEmpty()) { - System.err.println("No bills found"); } else { - System.err.println("Bills found: " + bills.size()); } } @@ -9885,7 +9882,6 @@ public void processUserFinancialTransactionalSummaryByPaymentMethod() { if (obj instanceof BillSummaryRow) { billSummaryRows.add((BillSummaryRow) obj); } else { - System.err.println("Unexpected result type: " + obj.getClass().getName()); } } @@ -10586,6 +10582,99 @@ public void listBillTypes() { bundle.calculateTotalByValues(); } + + public String navigateToListBillsWithErrors(){ + bills = null; + return "/dataAdmin/bills_with_errors?faces-redirect=true;"; + } + + public void findBillsWithErrors() { + bills = new ArrayList<>(); + List allBills; + Map params = new HashMap<>(); + StringBuilder jpql = new StringBuilder("select b from Bill b where 1=1 "); + if (toDate != null && fromDate != null) { + jpql.append(" and b.createdAt between :fromDate and :toDate "); + params.put("toDate", toDate); + params.put("fromDate", fromDate); + } + + if (institution != null) { + params.put("ins", institution); + jpql.append(" and b.department.institution = :ins "); + } + + if (department != null) { + params.put("dept", department); + jpql.append(" and b.department = :dept "); + } + + if (site != null) { + params.put("site", site); + jpql.append(" and b.department.site = :site "); + } + + if (webUser != null) { + jpql.append(" and b.creater=:wu "); + params.put("wu", webUser); + } + + if (billClassType != null) { + jpql.append(" and type(b)=:billClassType "); + switch (billClassType) { + case Bill: + params.put("billClassType", com.divudi.entity.Bill.class); + break; + case BilledBill: + params.put("billClassType", com.divudi.entity.BilledBill.class); + break; + case CancelledBill: + params.put("billClassType", com.divudi.entity.CancelledBill.class); + break; + case OtherBill: + params.put("billClassType", com.divudi.entity.Bill.class); + break; + case PreBill: + params.put("billClassType", com.divudi.entity.PreBill.class); + break; + case RefundBill: + params.put("billClassType", com.divudi.entity.RefundBill.class); + break; + + } + } + + if (billType != null) { + jpql.append(" and b.billType=:billType "); + params.put("billType", billType); + } + + if (billTypeAtomic != null) { + jpql.append(" and b.billTypeAtomic=:billTypeAtomic "); + params.put("billTypeAtomic", billTypeAtomic); + } + + // Order by bill ID + jpql.append(" order by b.id "); + + // Execute the query + allBills = getBillFacade().findByJpql(jpql.toString(), params, TemporalType.TIMESTAMP); + + if (allBills != null) { + for (Bill tmpBill : allBills) { + boolean billHasErrors; + billHasErrors = billService.checkBillForErrors(tmpBill); + if (!billHasErrors) { + continue; + } + bills.add(tmpBill); + total += tmpBill.getTotal(); + netTotal += tmpBill.getNetTotal(); + discount += tmpBill.getDiscount(); + } + } + + } public void listBillItems() { billItems = null; @@ -10987,6 +11076,89 @@ && getSearchKeyword().getRefBillNo() == null) { bills = getBillFacade().findByJpql(sql, m, 5000); } + public void searchByInsId() { + if (getSearchKeyword() == null) { + JsfUtil.addErrorMessage("Search keyword is null"); + return; + } + + if (getSearchKeyword().getInsId() == null) { + JsfUtil.addErrorMessage("Enter Ins ID"); + return; + } + bills = null; + String jpql; + Map params = new HashMap<>(); + + jpql = "select b from Bill b where b.id is not null"; + + jpql += " and b.insId=:insId "; + params.put("insId", getSearchKeyword().getInsId()); + + jpql += " order by b.insId"; + + bills = getBillFacade().findByJpql(jpql, params, 500); + } + + public void searchByDeptId() { + if (getSearchKeyword() == null) { + JsfUtil.addErrorMessage("Search keyword is null"); + return; + } + if (getSearchKeyword().getDeptId() == null) { + JsfUtil.addErrorMessage("Enter Ins ID"); + return; + } + bills = null; + String jpql; + Map params = new HashMap<>(); + jpql = "select b from Bill b where b.id is not null"; + jpql += " and b.deptId=:deptId "; + params.put("deptId", getSearchKeyword().getDeptId()); + + jpql += " order by b.deptId"; + + bills = getBillFacade().findByJpql(jpql, params, 500); + } + + public void searchById() { + if (getSearchKeyword() == null) { + JsfUtil.addErrorMessage("Search keyword is null"); + return; + } + if (getSearchKeyword().getId() == null) { + JsfUtil.addErrorMessage("Enter Ins ID"); + return; + } + bills = null; + String jpql; + Map params = new HashMap<>(); + jpql = "select b from Bill b where b.id is not null"; + jpql += " and b.id=:id "; + params.put("id", getSearchKeyword().getId()); + jpql += " order by b.id"; + bills = getBillFacade().findByJpql(jpql, params, 500); + } + + public void searchByBhtNumber() { + if (getSearchKeyword() == null) { + JsfUtil.addErrorMessage("Search keyword is null"); + return; + } + if (getSearchKeyword().getBhtNo() == null) { + JsfUtil.addErrorMessage("Enter Ins ID"); + return; + } + bills = null; + String jpql; + Map params = new HashMap<>(); + jpql = "select b from Bill b where b.id is not null"; + jpql += " and b.patientEncounter.bhtNo=:bhtNo "; + params.put("bhtNo", getSearchKeyword().getBhtNo()); + jpql += " order by b.id"; + bills = getBillFacade().findByJpql(jpql, params, 500); + } + public void createSearchAll() { bills = null; String sql; diff --git a/src/main/java/com/divudi/bean/pharmacy/BhtIssueReturnController.java b/src/main/java/com/divudi/bean/pharmacy/BhtIssueReturnController.java index 6e6ab30f6a..aaf47e86b6 100644 --- a/src/main/java/com/divudi/bean/pharmacy/BhtIssueReturnController.java +++ b/src/main/java/com/divudi/bean/pharmacy/BhtIssueReturnController.java @@ -298,7 +298,7 @@ public void settle() { saveReturnBill(); saveComponent(); - updateMargin(getReturnBill().getBillItems(), getReturnBill(), getReturnBill().getFromDepartment(), getBill().getPatientEncounter().getPaymentMethod()); +// updateMargin(getReturnBill().getBillItems(), getReturnBill(), getReturnBill().getFromDepartment(), getBill().getPatientEncounter().getPaymentMethod()); getBillFacade().edit(getReturnBill()); diff --git a/src/main/java/com/divudi/bean/pharmacy/GrnController.java b/src/main/java/com/divudi/bean/pharmacy/GrnController.java index 84134ff1fc..f5e4204595 100644 --- a/src/main/java/com/divudi/bean/pharmacy/GrnController.java +++ b/src/main/java/com/divudi/bean/pharmacy/GrnController.java @@ -1181,7 +1181,6 @@ public void onEdit(BillItem tmp) { setBatch(tmp); double remains = getPharmacyCalculation().getRemainingQty(tmp.getPharmaceuticalBillItem()); - if (remains < tmp.getPharmaceuticalBillItem().getQtyInUnit()) { tmp.setTmpQty(remains); JsfUtil.addErrorMessage("You cant Change Qty than Remaining qty"); diff --git a/src/main/java/com/divudi/bean/pharmacy/PharmacyController.java b/src/main/java/com/divudi/bean/pharmacy/PharmacyController.java index 6fac8e355b..67be8802e2 100644 --- a/src/main/java/com/divudi/bean/pharmacy/PharmacyController.java +++ b/src/main/java/com/divudi/bean/pharmacy/PharmacyController.java @@ -21,13 +21,7 @@ import com.divudi.data.dataStructure.ItemTransactionSummeryRow; import com.divudi.data.dataStructure.StockAverage; -import com.divudi.entity.Bill; -import com.divudi.entity.BillItem; -import com.divudi.entity.BilledBill; -import com.divudi.entity.Category; -import com.divudi.entity.Department; -import com.divudi.entity.Institution; -import com.divudi.entity.Item; +import com.divudi.entity.*; import com.divudi.entity.pharmacy.Amp; import com.divudi.entity.pharmacy.Ampp; import com.divudi.entity.pharmacy.Atm; @@ -972,6 +966,18 @@ public void generateGrnReportTable() { calculateTotals(bills); } + public static String formatDate(Date date) { + if (date == null) { + return ""; + } + + UserPreference userPreference = new UserPreference(); + String pattern = userPreference.getLongDateTimeFormat(); + + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(date); + } + public void createConsumptionReportTable() { resetFields(); diff --git a/src/main/java/com/divudi/bean/pharmacy/PurchaseOrderController.java b/src/main/java/com/divudi/bean/pharmacy/PurchaseOrderController.java index 861a512dde..79031c2a26 100644 --- a/src/main/java/com/divudi/bean/pharmacy/PurchaseOrderController.java +++ b/src/main/java/com/divudi/bean/pharmacy/PurchaseOrderController.java @@ -142,23 +142,17 @@ public String approve() { JsfUtil.addErrorMessage("Please add bill items"); return ""; } - calTotal(); - saveBill(); - totalBillItemsCount = 0; saveBillComponent(); if (totalBillItemsCount == 0){ JsfUtil.addErrorMessage("Please add item quantities for the bill"); return ""; } - String deptId = billNumberBean.departmentBillNumberGeneratorYearly(getSessionController().getDepartment(), BillTypeAtomic.PHARMACY_ORDER_APPROVAL); - getAprovedBill().setDeptId(deptId); getAprovedBill().setInsId(deptId); - getAprovedBill().setBillTypeAtomic(BillTypeAtomic.PHARMACY_ORDER_APPROVAL); billFacade.edit(getAprovedBill()); notificationController.createNotification(getAprovedBill()); diff --git a/src/main/java/com/divudi/bean/pharmacy/ReportsTransfer.java b/src/main/java/com/divudi/bean/pharmacy/ReportsTransfer.java index 6f21ce4290..69d0d51a4d 100644 --- a/src/main/java/com/divudi/bean/pharmacy/ReportsTransfer.java +++ b/src/main/java/com/divudi/bean/pharmacy/ReportsTransfer.java @@ -151,6 +151,10 @@ public String navigateToTransferIssueByBill() { return "/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_issue_bill?faces-redirect=true"; } + public String navigateBackToTransferIssueByBill() { + return "/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_issue_bill?faces-redirect=true"; + } + public String navigateToTransferReceiveByBill() { transferBills = null; pharmacyController.setManagePharamcyReportIndex(pharmacyDisbursementReportIndex); @@ -1710,18 +1714,18 @@ public void fillDepartmentTransfersRecieveByBill() { jpql.append(" order by b.id"); transferBills = getBillFacade().findByJpql(jpql.toString(), params, TemporalType.TIMESTAMP); - + totalsValue = 0.0; discountsValue = 0.0; netTotalValues = 0.0; for (Bill b : transferBills) { - + discountsValue = discountsValue + b.getDiscount(); netTotalValues = netTotalValues + b.getNetTotal(); - } + } calculatePurachaseValuesOfBillItemsInBill(transferBills); } - + public void fillTheaterTransfersReceiveWithBHTIssue() { FacesContext context = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); diff --git a/src/main/java/com/divudi/bean/report/PharmacyReportController.java b/src/main/java/com/divudi/bean/report/PharmacyReportController.java index 1781921cd6..04e1204d3c 100644 --- a/src/main/java/com/divudi/bean/report/PharmacyReportController.java +++ b/src/main/java/com/divudi/bean/report/PharmacyReportController.java @@ -1949,14 +1949,16 @@ public void processStockLedgerReport() { billTypes.add(BillType.PharmacyIssue); } else if ("transferIssueDoc".equals(documentType)) { - billTypeAtomics.add(BillTypeAtomic.PHARMACY_DIRECT_ISSUE); - billTypeAtomics.add(BillTypeAtomic.PHARMACY_DIRECT_ISSUE_CANCELLED); - billTypeAtomics.add(BillTypeAtomic.PHARMACY_ISSUE); - billTypeAtomics.add(BillTypeAtomic.PHARMACY_ISSUE_CANCELLED); - billTypeAtomics.add(BillTypeAtomic.PHARMACY_ISSUE_RETURN); + billTypes.add(BillType.PharmacyTransferIssue); +// billTypeAtomics.add(BillTypeAtomic.PHARMACY_DIRECT_ISSUE); +// billTypeAtomics.add(BillTypeAtomic.PHARMACY_DIRECT_ISSUE_CANCELLED); +// billTypeAtomics.add(BillTypeAtomic.PHARMACY_ISSUE); +// billTypeAtomics.add(BillTypeAtomic.PHARMACY_ISSUE_CANCELLED); +// billTypeAtomics.add(BillTypeAtomic.PHARMACY_ISSUE_RETURN); } else if ("transferReceiveDoc".equals(documentType)) { - billTypeAtomics.add(BillTypeAtomic.PHARMACY_RECEIVE); - billTypeAtomics.add(BillTypeAtomic.PHARMACY_RECEIVE_CANCELLED); + billTypes.add(BillType.PharmacyTransferReceive); +// billTypeAtomics.add(BillTypeAtomic.PHARMACY_RECEIVE); +// billTypeAtomics.add(BillTypeAtomic.PHARMACY_RECEIVE_CANCELLED); } stockLedgerHistories = new ArrayList(); @@ -2001,12 +2003,20 @@ public void processStockLedgerReport() { jpql += "and s.item=:itm "; m.put("itm", item); } + if ("transferReceiveDoc".equals(documentType) || "transferIssueDoc".equals(documentType)) { + jpql += " and s.department IS NOT NULL "; + } jpql += " order by s.createdAt "; stockLedgerHistories = facade.findByJpql(jpql, m, TemporalType.TIMESTAMP); } public void processClosingStockReport() { + stockSaleValue = 0.0; + stockQty = 0.0; + stockPurchaseValue = 0.0; + stockTotal = 0.0; + List ids; Map params = new HashMap<>(); StringBuilder jpql = new StringBuilder("select MAX(sh.id) " @@ -2056,7 +2066,6 @@ public void processClosingStockReport() { ids = getStockFacade().findLongValuesByJpql(jpql.toString(), params, TemporalType.TIMESTAMP); - // Calculate purchase and sale values stockPurchaseValue = 0.0; stockSaleValue = 0.0; stockTotal = 0.0; @@ -2086,8 +2095,8 @@ public void processClosingStockReport() { } if (reportType.equalsIgnoreCase("itemWise")) { - setStockSaleValue(0.0); - setStockQty(0.0); + stockPurchaseValue = 0.0; + stockQty = 0.0; Map map = new HashMap<>(); @@ -2102,9 +2111,9 @@ public void processClosingStockReport() { pr.getStockHistory().setStockQty(pr.getStockHistory().getStockQty() + row.getStockHistory().getStockQty()); setStockQty(getStockQty() + row.getStockHistory().getStockQty()); - pr.getStockHistory().setStockSaleValue(pr.getStockHistory().getStockSaleValue() + row.getStockHistory().getStockQty() * - row.getStockHistory().getItemBatch().getRetailsaleRate()); - setStockSaleValue(getStockSaleValue() + row.getStockHistory().getStockQty() * row.getStockHistory().getItemBatch().getRetailsaleRate()); + pr.getStockHistory().setStockSaleValue(pr.getStockHistory().getStockSaleValue() + row.getStockHistory().getStockQty() + * row.getStockHistory().getItemBatch().getRetailsaleRate()); + setStockPurchaseValue(getStockPurchaseValue() + row.getStockHistory().getStockQty() * row.getStockHistory().getItemBatch().getPurcahseRate()); } else { if (row.getStockHistory().getStockQty() == 0.0) { continue; @@ -2116,7 +2125,7 @@ public void processClosingStockReport() { row.getStockHistory().getStockQty() * row.getStockHistory().getItemBatch().getRetailsaleRate()); setStockQty(getStockQty() + row.getStockHistory().getStockQty()); - setStockSaleValue(getStockSaleValue() + row.getStockHistory().getStockQty() * row.getStockHistory().getItemBatch().getRetailsaleRate()); + setStockPurchaseValue(getStockPurchaseValue() + row.getStockHistory().getStockQty() * row.getStockHistory().getItemBatch().getPurcahseRate()); } } @@ -2252,9 +2261,9 @@ public void exportExpiryItemReportToExcel() { Row headerRow = sheet.createRow(rowIndex++); String[] headers = {"Department/Staff", "Item Category Code", "Item Category Name", "Item Code", "Item Name", - "Base UOM", "Item Type", "Batch No", "Batch Date", "Expiry Date", "Supplier", - "Shelf life remaining (Days)", "Rate", "MRP", "Quantity", "Item Value", - "Batch wise Item Value", "Batch wise Qty", "Item wise total", "Item wise Qty"}; + "Base UOM", "Item Type", "Batch No", "Batch Date", "Expiry Date", "Supplier", + "Shelf life remaining (Days)", "Rate", "MRP", "Quantity", "Item Value", + "Batch wise Item Value", "Batch wise Qty", "Item wise total", "Item wise Qty"}; for (int i = 0; i < headers.length; i++) { headerRow.createCell(i).setCellValue(headers[i]); @@ -2279,21 +2288,21 @@ public void exportExpiryItemReportToExcel() { row.createCell(5).setCellValue(item.getMeasurementUnit() != null ? item.getMeasurementUnit().getName() : "-"); row.createCell(6).setCellValue(item.getCategory() != null ? item.getCategory().getName() : "-"); row.createCell(7).setCellValue(stock.getItemBatch().getId()); - row.createCell(8).setCellValue(stock.getItemBatch() != null && - stock.getItemBatch().getLastPurchaseBillItem() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill().getCreatedAt() != null + row.createCell(8).setCellValue(stock.getItemBatch() != null + && stock.getItemBatch().getLastPurchaseBillItem() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill().getCreatedAt() != null ? sdf.format(stock.getItemBatch().getLastPurchaseBillItem().getBill().getCreatedAt()) : "-"); - row.createCell(9).setCellValue(stock.getItemBatch() != null && - stock.getItemBatch().getDateOfExpire() != null + row.createCell(9).setCellValue(stock.getItemBatch() != null + && stock.getItemBatch().getDateOfExpire() != null ? sdf.format(stock.getItemBatch().getDateOfExpire()) : "-"); - row.createCell(10).setCellValue(stock.getItemBatch() != null && - stock.getItemBatch().getLastPurchaseBillItem() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill().getFromInstitution() != null + row.createCell(10).setCellValue(stock.getItemBatch() != null + && stock.getItemBatch().getLastPurchaseBillItem() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill().getFromInstitution() != null ? stock.getItemBatch().getLastPurchaseBillItem().getBill().getFromInstitution().getName() : "-"); - row.createCell(11).setCellValue(stock.getItemBatch() != null && - stock.getItemBatch().getDateOfExpire() != null + row.createCell(11).setCellValue(stock.getItemBatch() != null + && stock.getItemBatch().getDateOfExpire() != null ? calculateDaysRemaining(stock.getItemBatch().getDateOfExpire()) : 0); row.createCell(12).setCellValue(stock.getItemBatch() != null ? stock.getItemBatch().getPurcahseRate() : 0); row.createCell(13).setCellValue(stock.getItemBatch() != null ? stock.getItemBatch().getRetailsaleRate() : 0); @@ -2358,8 +2367,8 @@ public void exportExpiryItemReportToPdf() { table.setWidths(columnWidths); String[] headers = {"Department/Staff", "Item Cat Code", "Item Cat Name", "Item Code", "Item Name", "Base UOM", - "Item Type", "Batch No", "Batch Date", "Expiry Date", "Supplier", "Shelf Life (Days)", "Rate", "MRP", - "Quantity", "Item Value", "Batch Wise Item Value", "Batch Wise Qty", "Item Wise Total", "Item Wise Qty"}; + "Item Type", "Batch No", "Batch Date", "Expiry Date", "Supplier", "Shelf Life (Days)", "Rate", "MRP", + "Quantity", "Item Value", "Batch Wise Item Value", "Batch Wise Qty", "Item Wise Total", "Item Wise Qty"}; for (String header : headers) { PdfPCell cell = new PdfPCell(new Phrase(header, FontFactory.getFont(FontFactory.HELVETICA_BOLD, 10))); @@ -2384,15 +2393,15 @@ public void exportExpiryItemReportToPdf() { table.addCell(item.getMeasurementUnit() != null ? item.getMeasurementUnit().getName() : "-"); table.addCell(item.getCategory() != null ? item.getCategory().getName() : "-"); table.addCell(stock.getItemBatch() != null ? String.valueOf(stock.getItemBatch().getId()) : "-"); - table.addCell(stock.getItemBatch() != null && stock.getItemBatch().getLastPurchaseBillItem() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill().getCreatedAt() != null + table.addCell(stock.getItemBatch() != null && stock.getItemBatch().getLastPurchaseBillItem() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill().getCreatedAt() != null ? sdf.format(stock.getItemBatch().getLastPurchaseBillItem().getBill().getCreatedAt()) : "-"); table.addCell(stock.getItemBatch() != null && stock.getItemBatch().getDateOfExpire() != null ? sdf.format(stock.getItemBatch().getDateOfExpire()) : "-"); - table.addCell(stock.getItemBatch() != null && stock.getItemBatch().getLastPurchaseBillItem() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill() != null && - stock.getItemBatch().getLastPurchaseBillItem().getBill().getFromInstitution() != null + table.addCell(stock.getItemBatch() != null && stock.getItemBatch().getLastPurchaseBillItem() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill() != null + && stock.getItemBatch().getLastPurchaseBillItem().getBill().getFromInstitution() != null ? stock.getItemBatch().getLastPurchaseBillItem().getBill().getFromInstitution().getName() : "-"); table.addCell(stock.getItemBatch() != null && stock.getItemBatch().getDateOfExpire() != null ? String.valueOf(calculateDaysRemaining(stock.getItemBatch().getDateOfExpire())) : "0"); @@ -2408,16 +2417,24 @@ public void exportExpiryItemReportToPdf() { table.addCell("-"); table.addCell("-"); } - for (int i = 0; i < 16; i++) table.addCell(" "); + for (int i = 0; i < 16; i++) { + table.addCell(" "); + } table.addCell(String.valueOf(calculateItemWiseTotalOfExpiredItems(item))); table.addCell(String.valueOf(calculateBatchWiseQtyOfExpiredItems(item, batchNumber))); - for (int i = 0; i < 2; i++) table.addCell(" "); + for (int i = 0; i < 2; i++) { + table.addCell(" "); + } + } + for (int i = 0; i < 18; i++) { + table.addCell(" "); } - for (int i = 0; i < 18; i++) table.addCell(" "); table.addCell(String.valueOf(calculateItemWiseTotalOfExpiredItems(item))); table.addCell(String.valueOf(calculateItemWiseQtyOfExpiredItems(item))); } - for (int i = 0; i < 16; i++) table.addCell(" "); + for (int i = 0; i < 16; i++) { + table.addCell(" "); + } table.addCell(String.format("%.2f", stockPurchaseValue)); table.addCell(String.format("%.2f", quantity)); table.addCell(String.format("%.2f", stockPurchaseValue)); diff --git a/src/main/java/com/divudi/data/dataStructure/SearchKeyword.java b/src/main/java/com/divudi/data/dataStructure/SearchKeyword.java index 468e45c87b..aa82585b76 100644 --- a/src/main/java/com/divudi/data/dataStructure/SearchKeyword.java +++ b/src/main/java/com/divudi/data/dataStructure/SearchKeyword.java @@ -59,6 +59,7 @@ public class SearchKeyword { private Item item; private Investigation investigation; private List billTypes; + private Long id; @@ -442,6 +443,15 @@ public void setInvestigation(Investigation investigation) { this.investigation = investigation; } + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + diff --git a/src/main/java/com/divudi/ejb/BillNumberGenerator.java b/src/main/java/com/divudi/ejb/BillNumberGenerator.java index 84ac2e8cd3..f0882c22b9 100644 --- a/src/main/java/com/divudi/ejb/BillNumberGenerator.java +++ b/src/main/java/com/divudi/ejb/BillNumberGenerator.java @@ -1498,9 +1498,9 @@ public String departmentBillNumberGenerator(Institution ins, Department dep, Bil } public String departmentBillNumberGeneratorYearly(Department dep, BillTypeAtomic billType) { - System.out.println("departmentBillNumberGeneratorYearly = "); - System.out.println("billType = " + billType); - System.out.println("dep = " + dep); +// System.out.println("departmentBillNumberGeneratorYearly = "); +// System.out.println("billType = " + billType); +// System.out.println("dep = " + dep); if (dep == null) { return ""; } @@ -1511,7 +1511,7 @@ public String departmentBillNumberGeneratorYearly(Department dep, BillTypeAtomic String billSuffix = configOptionApplicationController.getLongTextValueByKey("Bill Number Suffix for " + billType, ""); System.out.println("billSuffix = " + billSuffix); if (billSuffix == null || billSuffix.trim().equals("")) { - billSuffix = billType.toString(); + billSuffix = ""; } boolean commonBillNumberForAllDepartmentsInstitutionsBillTypeAtomic = configOptionApplicationController.getBooleanValueByKey("Bill Number Generation Strategy - Common Bill Number for All Departments, Institutions and Bill Types", false); diff --git a/src/main/java/com/divudi/ejb/PharmacyBean.java b/src/main/java/com/divudi/ejb/PharmacyBean.java index 09807631bc..9afaf1aaef 100644 --- a/src/main/java/com/divudi/ejb/PharmacyBean.java +++ b/src/main/java/com/divudi/ejb/PharmacyBean.java @@ -471,7 +471,7 @@ public Stock addToStock(PharmaceuticalBillItem pharmaceuticalBillItem, double qt addToStockHistory(pharmaceuticalBillItem, s, staff); return s; } - + public Stock addToStock(PharmaceuticalBillItem pharmaceuticalBillItem, double qty, Department department) { String sql; HashMap hm = new HashMap(); @@ -729,7 +729,7 @@ public boolean deductFromStock(Stock stock, double qty, PharmaceuticalBillItem p return true; } - @Deprecated + public boolean deductFromStockWithoutHistory(Stock stock, double qty, PharmaceuticalBillItem pbi, Department d) { if (stock == null) { return false; @@ -800,7 +800,7 @@ public void addToStockHistory(PharmaceuticalBillItem phItem, Stock stock, Staff return; } - StockHistory sh= new StockHistory(); + StockHistory sh = new StockHistory(); sh.setFromDate(Calendar.getInstance().getTime()); sh.setPbItem(phItem); sh.setHxDate(Calendar.getInstance().get(Calendar.DATE)); @@ -1372,7 +1372,7 @@ public Ampp getAmpp(Amp amp, double issueUnitsPerPack, MeasurementUnit unit) { public Vmp getVmp(Vtm vtm, double strength, MeasurementUnit strengthUnit, PharmaceuticalItemCategory cat) { System.out.println("getVmp"); System.out.println("strength = " + strength); - + String sql; String vmpName = ""; diff --git a/src/main/java/com/divudi/entity/Bill.java b/src/main/java/com/divudi/entity/Bill.java index 338f86ce94..7f1e1dce36 100644 --- a/src/main/java/com/divudi/entity/Bill.java +++ b/src/main/java/com/divudi/entity/Bill.java @@ -406,6 +406,8 @@ public class Bill implements Serializable, RetirableEntity { private String ageAtBilledDate; @Transient private Bill tmpRefBill; + @Transient + private String tmpComments; private String agentRefNo; private boolean billClosed; @@ -2654,6 +2656,14 @@ public void setPaymentGenerationComments(String paymentGenerationComments) { this.paymentGenerationComments = paymentGenerationComments; } + public String getTmpComments() { + return tmpComments; + } + + public void setTmpComments(String tmpComments) { + this.tmpComments = tmpComments; + } + diff --git a/src/main/java/com/divudi/entity/Payment.java b/src/main/java/com/divudi/entity/Payment.java index 193e40d7e8..a199a957f4 100644 --- a/src/main/java/com/divudi/entity/Payment.java +++ b/src/main/java/com/divudi/entity/Payment.java @@ -204,6 +204,10 @@ public class Payment implements Serializable, RetirableEntity { private Institution fromInstitution; @ManyToOne private Institution toInstitution; + + private Staff toStaff; + + public Payment() { cashbookEntryStated = false; @@ -956,4 +960,12 @@ public void setCreditCompany(Institution creditCompany) { this.creditCompany = creditCompany; } + public Staff getToStaff() { + return toStaff; + } + + public void setToStaff(Staff toStaff) { + this.toStaff = toStaff; + } + } diff --git a/src/main/java/com/divudi/service/BillService.java b/src/main/java/com/divudi/service/BillService.java index 2121b67ff7..cb731ba494 100644 --- a/src/main/java/com/divudi/service/BillService.java +++ b/src/main/java/com/divudi/service/BillService.java @@ -45,17 +45,12 @@ import com.divudi.facade.ItemFacade; import com.divudi.facade.PaymentFacade; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; -import java.util.List; -import java.util.Map; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.persistence.TemporalType; -import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.*; -import java.text.SimpleDateFormat; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -676,7 +671,7 @@ public List fetchBills(Date fromDate, jpql += " and b.paymentScheme=:paymentScheme "; params.put("paymentScheme", paymentScheme); } - + jpql += " order by b.createdAt desc "; List fetchedBills = billFacade.findByJpql(jpql, params, TemporalType.TIMESTAMP); return fetchedBills; @@ -744,10 +739,7 @@ public List fetchBillItems(Date fromDate, } jpql += " order by b.createdAt, bi.id "; - System.out.println("jpql = " + jpql); - System.out.println("params = " + params); List fetchedBillItems = billFacade.findByJpql(jpql, params, TemporalType.TIMESTAMP); - System.out.println("fetchedBillItems = " + fetchedBillItems.size()); return fetchedBillItems; } @@ -807,10 +799,7 @@ public List fetchBillItemsWithoutCancellationsAndReturns(Date fromDate } jpql += " order by b.createdAt, bi.id "; - System.out.println("jpql = " + jpql); - System.out.println("params = " + params); List fetchedBillItems = billFacade.findByJpql(jpql, params, TemporalType.TIMESTAMP); - System.out.println("fetchedBillItems = " + fetchedBillItems.size()); return fetchedBillItems; } @@ -844,12 +833,52 @@ public List fetchReturnBills(Bill inputBill) { params.put("ret", false); params.put("btas", btas); params.put("bill", inputBill); - System.out.println("jpql = " + jpql); - System.out.println("params = " + params); List fetchedBills = billFacade.findByJpql(jpql, params, TemporalType.TIMESTAMP); return fetchedBills; } + public List fetchAllReferanceBills(Bill inputBill) { + if (inputBill == null || inputBill.getBillTypeAtomic() == null) { + return null; + } + + Set allRefBills = new LinkedHashSet<>(); + + if (inputBill.getReferenceBill() != null) { + allRefBills.add(inputBill.getReferenceBill()); + } + if (inputBill.getBilledBill() != null) { + allRefBills.add(inputBill.getBilledBill()); + } + if (inputBill.getBackwardReferenceBill() != null) { + allRefBills.add(inputBill.getBackwardReferenceBill()); + } + if (inputBill.getForwardReferenceBill() != null) { + allRefBills.add(inputBill.getForwardReferenceBill()); + } + if (inputBill.getPaidBill() != null) { + allRefBills.add(inputBill.getPaidBill()); + } + + String jpql = "select b from Bill b " + + "where b.billedBill = :bill " + + "or b.referenceBill = :bill " + + "or b.backwardReferenceBill = :bill " + + "or b.forwardReferenceBill = :bill " + + "or b.paidBill = :bill " + + "order by b.createdAt"; + + Map params = new HashMap<>(); + params.put("bill", inputBill); + + List fetchedBills = billFacade.findByJpql(jpql, params, TemporalType.TIMESTAMP); + if (fetchedBills != null) { + allRefBills.addAll(fetchedBills); + } + + return new ArrayList<>(allRefBills); + } + public List fetchPaymentBillItems(Bill inputBill) { String jpql; if (inputBill == null) { @@ -881,10 +910,7 @@ public List fetchPaymentBillItems(Bill inputBill) { params.put("ret", false); params.put("btas", btas); params.put("bill", inputBill); - System.out.println("jpql = " + jpql); - System.out.println("params = " + params); List fetchedBillItems = billItemFacade.findByJpql(jpql, params, TemporalType.TIMESTAMP); - System.out.println("fetchedBillItems = " + fetchedBillItems); return fetchedBillItems; } @@ -1051,4 +1077,49 @@ public Bill importPharmacyGrnBillFromJson(JsonObject jsonObject) { return bill; } + public boolean checkBillForErrors(Bill bill) { + if (bill == null) { + return true; + } + if (bill.getBillTypeAtomic() == null) { + bill.setTmpComments("No Bill Type Atomic"); + return true; + } + boolean hasAtLeatOneError = false; + switch (bill.getBillTypeAtomic()) { + case PHARMACY_GRN: + case PHARMACY_ORDER: + case PHARMACY_ORDER_APPROVAL: + boolean billNetTotalIsNotEqualToBillItemNetTotalError = billNetTotalIsNotEqualToBillItemNetTotal(bill); + System.out.println("billNetTotalIsNotEqualToBillItemNetTotalError = " + billNetTotalIsNotEqualToBillItemNetTotalError); + if (billNetTotalIsNotEqualToBillItemNetTotalError) { + hasAtLeatOneError = true; + } + break; + default: + hasAtLeatOneError = false; + + } + System.out.println("hasAtLeatOneError = " + hasAtLeatOneError); + return hasAtLeatOneError; + } + + public boolean billNetTotalIsNotEqualToBillItemNetTotal(Bill bill) { + if (bill == null || bill.getBillItems() == null) { + return true; + } + + double billNetTotal = Math.abs(bill.getNetTotal()); + double billItemNetTotal = 0.0; + + for (BillItem bi : bill.getBillItems()) { + if (bi != null) { + billItemNetTotal += Math.abs(bi.getNetValue()); + } + } + boolean billNetTotalIsNotEqualToBillItemNetTotalError = Math.abs(billNetTotal - billItemNetTotal) >= 0.01; + System.out.println("billNetTotalIsNotEqualToBillItemNetTotalError = " + billNetTotalIsNotEqualToBillItemNetTotalError); + return billNetTotalIsNotEqualToBillItemNetTotalError; + } + } diff --git a/src/main/java/com/divudi/service/PaymentService.java b/src/main/java/com/divudi/service/PaymentService.java index 329ac9bb4c..bdd79fbea9 100644 --- a/src/main/java/com/divudi/service/PaymentService.java +++ b/src/main/java/com/divudi/service/PaymentService.java @@ -249,6 +249,12 @@ private void populatePaymentDetails(Payment payment, PaymentMethod paymentMethod payment.setPaidValue(paymentMethodData.getStaffCredit().getTotalValue()); payment.setComments(paymentMethodData.getStaffCredit().getComment()); break; + case IOU: + payment.setReferenceNo(paymentMethodData.getIou().getReferenceNo()); + payment.setChequeDate(paymentMethodData.getIou().getDate()); + payment.setToStaff(paymentMethodData.getIou().getToStaff()); + payment.setComments(paymentMethodData.getIou().getComment()); + break; default: break; } diff --git a/src/main/java/com/divudi/ws/common/ApplicationConfig.java b/src/main/java/com/divudi/ws/common/ApplicationConfig.java index fb765393ba..433b4b84a9 100644 --- a/src/main/java/com/divudi/ws/common/ApplicationConfig.java +++ b/src/main/java/com/divudi/ws/common/ApplicationConfig.java @@ -46,6 +46,7 @@ private void addRestResourceClasses(Set> resources) { resources.add(com.divudi.ws.finance.clinical.Fhir.class); resources.add(com.divudi.ws.inward.ApiInward.class); resources.add(com.divudi.ws.lims.Lims.class); + resources.add(com.divudi.ws.lims.LimsMiddlewareController.class); resources.add(com.divudi.ws.lims.MiddlewareController.class); } diff --git a/src/main/webapp/WEB-INF/glassfish-web.xml b/src/main/webapp/WEB-INF/glassfish-web.xml index 157dde8610..8947aba09c 100644 --- a/src/main/webapp/WEB-INF/glassfish-web.xml +++ b/src/main/webapp/WEB-INF/glassfish-web.xml @@ -1,7 +1,7 @@ - /rh + /coop diff --git a/src/main/webapp/analytics/bill_types.xhtml b/src/main/webapp/analytics/bill_types.xhtml index 531a9a0919..cd20cc61bd 100644 --- a/src/main/webapp/analytics/bill_types.xhtml +++ b/src/main/webapp/analytics/bill_types.xhtml @@ -132,6 +132,7 @@ ajax="false" value="List" action="#{searchController.listBillTypes}"/> + diff --git a/src/main/webapp/analytics/bills.xhtml b/src/main/webapp/analytics/bills.xhtml index 8acb355a0a..858f80ecb2 100644 --- a/src/main/webapp/analytics/bills.xhtml +++ b/src/main/webapp/analytics/bills.xhtml @@ -160,7 +160,7 @@ --> + filterMatchMode="contains" > diff --git a/src/main/webapp/dataAdmin/admin_data_administration.xhtml b/src/main/webapp/dataAdmin/admin_data_administration.xhtml index 495c427a1d..0e1b9e34e4 100644 --- a/src/main/webapp/dataAdmin/admin_data_administration.xhtml +++ b/src/main/webapp/dataAdmin/admin_data_administration.xhtml @@ -15,7 +15,9 @@
- + @@ -125,7 +127,7 @@ - +
@@ -137,6 +139,15 @@ action="#{searchController.toSearchBills}" rendered="#{webUserController.hasPrivilege('Search')}"> + + + + +

WILL BE DEPRECATED SOON. IF NEEDED TO KEEP, PLEASE DISCUSS

+ diff --git a/src/main/webapp/dataAdmin/bills_with_errors.xhtml b/src/main/webapp/dataAdmin/bills_with_errors.xhtml new file mode 100644 index 0000000000..e2c6ec9eef --- /dev/null +++ b/src/main/webapp/dataAdmin/bills_with_errors.xhtml @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+
+ diff --git a/src/main/webapp/dataAdmin/search_bill.xhtml b/src/main/webapp/dataAdmin/search_bill.xhtml index 553390c36e..afa40fa21f 100644 --- a/src/main/webapp/dataAdmin/search_bill.xhtml +++ b/src/main/webapp/dataAdmin/search_bill.xhtml @@ -13,48 +13,64 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -189,40 +209,50 @@ -
- - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - +
diff --git a/src/main/webapp/dealerPayment/dealor_due.xhtml b/src/main/webapp/dealerPayment/dealor_due.xhtml index d1fdfdbfbc..3867f55305 100644 --- a/src/main/webapp/dealerPayment/dealor_due.xhtml +++ b/src/main/webapp/dealerPayment/dealor_due.xhtml @@ -179,20 +179,25 @@ - + + ajax="false"> + disabled="#{b.referenceBill.billTypeAtomic eq 'SUPPLIER_PAYMENT' or b.paidAmount ne 0.0}"> + diff --git a/src/main/webapp/dealerPayment/pay_supplier.xhtml b/src/main/webapp/dealerPayment/pay_supplier.xhtml index e4fbe7a920..8b645158cc 100644 --- a/src/main/webapp/dealerPayment/pay_supplier.xhtml +++ b/src/main/webapp/dealerPayment/pay_supplier.xhtml @@ -72,7 +72,7 @@ - + + + - - + + + + + + - - + + - - + + + + diff --git a/src/main/webapp/dealerPayment/settle_supplier_payment.xhtml b/src/main/webapp/dealerPayment/settle_supplier_payment.xhtml index ba0515f9a9..ee6835e8f0 100644 --- a/src/main/webapp/dealerPayment/settle_supplier_payment.xhtml +++ b/src/main/webapp/dealerPayment/settle_supplier_payment.xhtml @@ -35,7 +35,7 @@ - + - + - + - + + + + + + + diff --git a/src/main/webapp/inward/inward_bill_service.xhtml b/src/main/webapp/inward/inward_bill_service.xhtml index 9f317fe03e..d7726dcaf4 100644 --- a/src/main/webapp/inward/inward_bill_service.xhtml +++ b/src/main/webapp/inward/inward_bill_service.xhtml @@ -21,7 +21,7 @@ -
+
-
- - - - - - -
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
@@ -229,8 +199,20 @@
- - +
+
+ + +
+ + +
-
-
+
+
- -
-
+
-
+
-
+
+ value="#{billBhtController.currentBillItem.qty}" + style="text-align: right; padding-right: 10px;">
-
-
+
+
-
+
-
+
-
+
-
+
+
+
diff --git a/src/main/webapp/opd/view/bill_admin.xhtml b/src/main/webapp/opd/view/bill_admin.xhtml index 2279870207..d0813bd2a4 100644 --- a/src/main/webapp/opd/view/bill_admin.xhtml +++ b/src/main/webapp/opd/view/bill_admin.xhtml @@ -5,10 +5,7 @@ xmlns:p="http://primefaces.org/ui" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" - xmlns:bi="http://xmlns.jcp.org/jsf/composite/bill" - xmlns:prints="http://xmlns.jcp.org/jsf/composite/ezcomp/prints" - xmlns:view="http://xmlns.jcp.org/jsf/composite/ezcomp/view" - xmlns:common="http://xmlns.jcp.org/jsf/composite/ezcomp/common"> + xmlns:view="http://xmlns.jcp.org/jsf/composite/ezcomp/view"> @@ -163,6 +160,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/pharmacy/pharmacy_analytics.xhtml b/src/main/webapp/pharmacy/pharmacy_analytics.xhtml index 68d0fd2ea7..d706e448ab 100644 --- a/src/main/webapp/pharmacy/pharmacy_analytics.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_analytics.xhtml @@ -206,6 +206,7 @@
+ @@ -213,9 +214,7 @@ - - + - + diff --git a/src/main/webapp/pharmacy/pharmacy_bill_retail_sale.xhtml b/src/main/webapp/pharmacy/pharmacy_bill_retail_sale.xhtml index deed4919d0..362bc7d3af 100644 --- a/src/main/webapp/pharmacy/pharmacy_bill_retail_sale.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_bill_retail_sale.xhtml @@ -1295,7 +1295,12 @@
- + + +
+ +
+
diff --git a/src/main/webapp/pharmacy/pharmacy_purhcase_order_approving.xhtml b/src/main/webapp/pharmacy/pharmacy_purhcase_order_approving.xhtml index 983db50520..92726a51bb 100644 --- a/src/main/webapp/pharmacy/pharmacy_purhcase_order_approving.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_purhcase_order_approving.xhtml @@ -102,11 +102,11 @@ - #{bi.item.name} + - #{bi.item.code} + @@ -127,7 +127,7 @@ - + diff --git a/src/main/webapp/pharmacy/pharmacy_report_bht_issue_bill.xhtml b/src/main/webapp/pharmacy/pharmacy_report_bht_issue_bill.xhtml index 14270cf358..b9cff0bb70 100644 --- a/src/main/webapp/pharmacy/pharmacy_report_bht_issue_bill.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_report_bht_issue_bill.xhtml @@ -55,7 +55,7 @@ value="Excel" icon="fas fa-file-excel" class="ui-button-success mx-2"> - + - + - - + + -   + -   +
@@ -90,100 +93,228 @@
- + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+ + + + + + + + + +
+ + + + #{i.billType} - + - + - + - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +
+ diff --git a/src/main/webapp/pharmacy/pharmacy_report_grn_detail.xhtml b/src/main/webapp/pharmacy/pharmacy_report_grn_detail.xhtml index bd2d17fe00..0c22735949 100644 --- a/src/main/webapp/pharmacy/pharmacy_report_grn_detail.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_report_grn_detail.xhtml @@ -31,8 +31,8 @@ forceSelection="true" rendered="true" requiredMessage="You must select a department" > - - + + + /> @@ -78,8 +78,8 @@ - - + + @@ -119,7 +119,7 @@ - + - + @@ -158,6 +158,7 @@ --> @@ -222,7 +223,7 @@ - + @@ -269,7 +270,7 @@ - + - + @@ -411,7 +412,7 @@ - + - + - + @@ -557,14 +558,14 @@ - + - + @@ -706,6 +707,658 @@
+ + + + + + + + + + + + + + + + + + + + + + + +    + + + +      + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Summary + + + + + + + + + + + + + + + + +
+ + + diff --git a/src/main/webapp/pharmacy/pharmacy_reprint_transfer_isssue.xhtml b/src/main/webapp/pharmacy/pharmacy_reprint_transfer_isssue.xhtml index 011fce8b1b..4cab3e6a8f 100644 --- a/src/main/webapp/pharmacy/pharmacy_reprint_transfer_isssue.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_reprint_transfer_isssue.xhtml @@ -19,20 +19,26 @@
-
+
+ value="Back to Issued List"/> + diff --git a/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_issue_bill.xhtml b/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_issue_bill.xhtml index f5742c908f..c5b5db654a 100644 --- a/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_issue_bill.xhtml +++ b/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_issue_bill.xhtml @@ -1,5 +1,5 @@ - + - + - + - - + +   @@ -79,92 +84,95 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + Cancelled - + Returned - + - + - + - + - + - + - + - + - + + + + + + +   + +   + +

+   + + + +   + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cancelled + + + + Returned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ diff --git a/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_receive_bill.xhtml b/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_receive_bill.xhtml index 850a89910a..ad13146fca 100644 --- a/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_receive_bill.xhtml +++ b/src/main/webapp/pharmacy/reports/disbursement_reports/pharmacy_report_transfer_receive_bill.xhtml @@ -42,7 +42,7 @@ value="Excel" icon="fas fa-file-excel" class="ui-button-success mx-2"> - + - + - + - +
+ - + - +
+ - + @@ -92,60 +92,61 @@ --> - + - + - - + + - - + + - + - + - + - - + + - + - + - + - + - + @@ -153,16 +154,117 @@ - +
+
+ + + + + +
+ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/main/webapp/pharmacy/reports/summary_reports/pharmacy_income_report.xhtml b/src/main/webapp/pharmacy/reports/summary_reports/pharmacy_income_report.xhtml index 7842386e4d..fd7ce392bb 100644 --- a/src/main/webapp/pharmacy/reports/summary_reports/pharmacy_income_report.xhtml +++ b/src/main/webapp/pharmacy/reports/summary_reports/pharmacy_income_report.xhtml @@ -201,146 +201,147 @@ - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -351,6 +352,8 @@ + + diff --git a/src/main/webapp/reports/inventoryReports/closing_stock_report.xhtml b/src/main/webapp/reports/inventoryReports/closing_stock_report.xhtml index 745a056758..f7a95a63b1 100644 --- a/src/main/webapp/reports/inventoryReports/closing_stock_report.xhtml +++ b/src/main/webapp/reports/inventoryReports/closing_stock_report.xhtml @@ -292,16 +292,6 @@ - - - @@ -380,11 +370,11 @@ + value="#{p.stockHistory.stockQty * p.stockHistory.itemBatch.purcahseRate}"> - + diff --git a/src/main/webapp/reports/inventoryReports/consumption.xhtml b/src/main/webapp/reports/inventoryReports/consumption.xhtml index 9959ee70ee..90651b2694 100644 --- a/src/main/webapp/reports/inventoryReports/consumption.xhtml +++ b/src/main/webapp/reports/inventoryReports/consumption.xhtml @@ -384,14 +384,14 @@ width="6em" filterMatchMode="contains" sortBy="#{b.createdAt}" - filterBy="#{b.createdAt}"> + filterBy="#{pharmacyController.formatDate(b.createdAt)}"> - + @@ -509,7 +509,7 @@ width="8em" filterMatchMode="contains" sortBy="#{i.bill.createdAt}" - filterBy="#{i.bill.createdAt}"> + filterBy="#{pharmacyController.formatDate(i.bill.createdAt)}"> diff --git a/src/main/webapp/resources/css/ohmis.css b/src/main/webapp/resources/css/ohmis.css index 6547411546..3e56dd45c5 100644 --- a/src/main/webapp/resources/css/ohmis.css +++ b/src/main/webapp/resources/css/ohmis.css @@ -328,6 +328,83 @@ th.align-right-header .ui-column-title { padding: 0 !important; } + +.compact-column-borders { + --content-padding: 0.0rem; /* Remove padding */ + --inline-spacing: 0.0rem; /* Remove spacing */ + --border-radius: 0px; /* No border rounding */ + border-collapse: collapse; /* Ensures borders align properly */ + width: 100%; +} + +.compact-column-borders td, +.compact-column-borders th { + border-left: 1px solid black; + border-right: 1px solid black; + padding: 2px !important; /* Minimal padding */ + margin: 0 !important; + line-height: 1; /* Remove extra spacing */ + text-align: left; + white-space: nowrap; /* Prevent text wrapping */ + overflow: hidden; /* Hide overflowing text */ + text-overflow: ellipsis; /* Show "..." for cut-off text */ + max-width: 10em; /* Adjust based on column width */ +} + +.compact-column-borders th { + font-weight: bold; + text-align: center; + background: #f8f8f8; +} + +.compact-column-borders tr { + height: auto !important; /* Prevent row height increase */ + border-bottom: none !important; /* Remove row borders */ + border-top: none !important; /* Remove row borders */ +} + +.compact-column-borders th:first-child, +.compact-column-borders td:first-child { + border-left: none; /* Remove left border for first column */ +} + +.compact-column-borders th:last-child, +.compact-column-borders td:last-child { + border-right: none; /* Remove right border for last column */ +} + +/* Bold footer text */ +.compact-column-borders tfoot td { + font-weight: bold !important; + border-top: 1px solid black !important; /* Add border above footer */ +} + +.compact-column-borders .ui-datatable-header, +.compact-column-borders .ui-datatable-footer { + margin: 0 !important; + padding: 2px !important; + line-height: 1.1; +} + +/* Hide empty footer cells */ +.compact-column-borders .ui-datatable-footer td:empty { + display: none; +} + +.compact-column-borders .ui-state-default { + margin: 0 !important; + padding: 0 !important; +} + +/* Border below header */ +.compact-column-borders thead { + border-bottom: 1px solid black !important; +} + + + + + .light-grey-background { background-color: #e2e3e5; /* Slightly darker grey than before */ color: #343a40; /* Dark grey text, ensuring good contrast */ @@ -598,13 +675,23 @@ th.align-right-header .ui-column-title { } } -@media screen { - .printingOnly{ +@media print { + .printingOnly { + display: block !important; + } + .screenOnly { display: none !important; - } } +@media screen { + .printingOnly { + display: none !important; + } + .screenOnly { + display: block !important; + } +} /* Adjust the size of the autocomplete dropdown panel */ diff --git a/src/main/webapp/resources/ezcomp/view/bill_item_list_edit.xhtml b/src/main/webapp/resources/ezcomp/view/bill_item_list_edit.xhtml index 5788a38ae6..83a16b091c 100644 --- a/src/main/webapp/resources/ezcomp/view/bill_item_list_edit.xhtml +++ b/src/main/webapp/resources/ezcomp/view/bill_item_list_edit.xhtml @@ -15,11 +15,19 @@ -

Bill Items

- - - - + + + + + + + + + @@ -27,6 +35,10 @@
+ + + + diff --git a/src/main/webapp/resources/paymentMethod/iou.xhtml b/src/main/webapp/resources/paymentMethod/iou.xhtml new file mode 100644 index 0000000000..42d2d11f08 --- /dev/null +++ b/src/main/webapp/resources/paymentMethod/iou.xhtml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/resources/pharmacy/po.xhtml b/src/main/webapp/resources/pharmacy/po.xhtml index 2739cacca0..4f48b6daf6 100644 --- a/src/main/webapp/resources/pharmacy/po.xhtml +++ b/src/main/webapp/resources/pharmacy/po.xhtml @@ -140,6 +140,18 @@
+ + + + Total + + + + + + + +