Skip to content

Commit 7324915

Browse files
authored
Merge pull request #451 from udsm-dhis2-lab/feature/collected-amount
Feature/collected amount
2 parents 110ae1f + b19e1b6 commit 7324915

File tree

14 files changed

+806
-526
lines changed

14 files changed

+806
-526
lines changed

omods/core/api/src/main/java/org/openmrs/module/icare/billing/dao/InvoiceDAO.java

+47-9
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
// Generated Oct 7, 2020 12:49:21 PM by Hibernate Tools 5.2.10.Final
44

55
import org.hibernate.Query;
6+
import org.openmrs.DrugOrder;
7+
import org.openmrs.Order;
8+
import org.openmrs.OrderType;
69
import org.openmrs.api.db.hibernate.DbSession;
710
import org.openmrs.api.db.hibernate.DbSessionFactory;
811
import org.openmrs.module.icare.billing.models.Invoice;
912
import org.openmrs.module.icare.billing.models.InvoiceItem;
13+
import org.openmrs.module.icare.billing.models.Prescription;
1014
import org.openmrs.module.icare.core.dao.BaseDAO;
1115
import org.openmrs.module.icare.billing.models.DiscountInvoiceItem;
1216

@@ -98,26 +102,60 @@ public List<Invoice> findByVisitUuidAndPending(String visitUuid) {
98102

99103
public List<Object[]> getTotalAmountFromPaidInvoices(Date startDate, Date endDate, String provider) {
100104
DbSession session = this.getSession();
101-
String queryStr = "SELECT SUM(inv.price * inv.quantity) as total, inv.id.item FROM InvoiceItem inv ";
105+
106+
String queryStr = formulateQueryString(startDate, endDate, provider);
107+
108+
Query query = session.createQuery(queryStr);
109+
110+
// Set parameters for date range
102111
if (startDate != null && endDate != null) {
103-
queryStr += " WHERE inv.id.order.dataActivated BETWEEN :startDate AND :endDate ";
112+
query.setParameter("startDate", startDate);
113+
query.setParameter("endDate", endDate);
104114
}
115+
116+
// Set parameter for provider
117+
if (provider != null) {
118+
query.setParameter("provider", provider);
119+
}
120+
121+
return query.list();
122+
}
123+
124+
private String formulateQueryString(Date startDate, Date endDate, String provider) {
125+
String queryStr = "SELECT SUM(inv.price * inv.quantity) as total, inv.id.item, inv " + "FROM InvoiceItem inv "
126+
+ "JOIN inv.id.order o ";
127+
// Use polymorphic queries to ensure DrugOrder, as a subclass of Order, is included.
128+
if (startDate != null && endDate != null) {
129+
queryStr += " WHERE o.dateCreated BETWEEN :startDate AND :endDate ";
130+
}
131+
105132
if (provider != null) {
106133
if (queryStr.contains("WHERE")) {
107-
queryStr += " AND inv.id.order.orderer.uuid = :provider ";
134+
queryStr += " AND o.orderer.uuid = :provider ";
108135
} else {
109-
queryStr += " WHERE inv.id.order.orderer.uuid = :provider ";
136+
queryStr += " WHERE o.orderer.uuid = :provider ";
110137
}
111138
}
112139
queryStr += " GROUP BY inv.id.item";
113-
Query query = session.createQuery(queryStr);
140+
141+
// new Prescription();
142+
queryStr += " UNION ALL ";
143+
queryStr += "SELECT SUM(inv.price * inv.quantity) as total, inv.id.item, inv " + "FROM InvoiceItem inv "
144+
+ "JOIN inv.id.order o LEFT JOIN Prescription p ON p.order = o ";
145+
// Use polymorphic queries to ensure DrugOrder, as a subclass of Order, is included.
114146
if (startDate != null && endDate != null) {
115-
query.setParameter("startDate", startDate);
116-
query.setParameter("endDate", endDate);
147+
queryStr += " WHERE o.dateCreated BETWEEN :startDate AND :endDate ";
117148
}
149+
118150
if (provider != null) {
119-
query.setParameter("provider", provider);
151+
if (queryStr.contains("WHERE")) {
152+
queryStr += " AND o.orderer.uuid = :provider ";
153+
} else {
154+
queryStr += " WHERE o.orderer.uuid = :provider ";
155+
}
120156
}
121-
return query.list();
157+
158+
queryStr += " GROUP BY inv.id.item";
159+
return queryStr;
122160
}
123161
}

0 commit comments

Comments
 (0)