|
3 | 3 | // Generated Oct 7, 2020 12:49:21 PM by Hibernate Tools 5.2.10.Final
|
4 | 4 |
|
5 | 5 | import org.hibernate.Query;
|
| 6 | +import org.openmrs.DrugOrder; |
| 7 | +import org.openmrs.Order; |
| 8 | +import org.openmrs.OrderType; |
6 | 9 | import org.openmrs.api.db.hibernate.DbSession;
|
7 | 10 | import org.openmrs.api.db.hibernate.DbSessionFactory;
|
8 | 11 | import org.openmrs.module.icare.billing.models.Invoice;
|
9 | 12 | import org.openmrs.module.icare.billing.models.InvoiceItem;
|
| 13 | +import org.openmrs.module.icare.billing.models.Prescription; |
10 | 14 | import org.openmrs.module.icare.core.dao.BaseDAO;
|
11 | 15 | import org.openmrs.module.icare.billing.models.DiscountInvoiceItem;
|
12 | 16 |
|
@@ -98,26 +102,60 @@ public List<Invoice> findByVisitUuidAndPending(String visitUuid) {
|
98 | 102 |
|
99 | 103 | public List<Object[]> getTotalAmountFromPaidInvoices(Date startDate, Date endDate, String provider) {
|
100 | 104 | 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 |
102 | 111 | 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); |
104 | 114 | }
|
| 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 | + |
105 | 132 | if (provider != null) {
|
106 | 133 | if (queryStr.contains("WHERE")) {
|
107 |
| - queryStr += " AND inv.id.order.orderer.uuid = :provider "; |
| 134 | + queryStr += " AND o.orderer.uuid = :provider "; |
108 | 135 | } else {
|
109 |
| - queryStr += " WHERE inv.id.order.orderer.uuid = :provider "; |
| 136 | + queryStr += " WHERE o.orderer.uuid = :provider "; |
110 | 137 | }
|
111 | 138 | }
|
112 | 139 | 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. |
114 | 146 | if (startDate != null && endDate != null) {
|
115 |
| - query.setParameter("startDate", startDate); |
116 |
| - query.setParameter("endDate", endDate); |
| 147 | + queryStr += " WHERE o.dateCreated BETWEEN :startDate AND :endDate "; |
117 | 148 | }
|
| 149 | + |
118 | 150 | 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 | + } |
120 | 156 | }
|
121 |
| - return query.list(); |
| 157 | + |
| 158 | + queryStr += " GROUP BY inv.id.item"; |
| 159 | + return queryStr; |
122 | 160 | }
|
123 | 161 | }
|
0 commit comments