Untitled
unknown
java
a year ago
2.0 kB
36
Indexable
public double getCustomerBalance(int id, Long toTime, boolean expired) {
if (expired) {
// Replace these with your actual logic to retrieve configuration values
int deadline = getConfig("payments.deadline", getConfig("invoices.paytime", 0));
if (toTime == null) {
toTime = System.currentTimeMillis() / 1000; // Convert to seconds
}
// Build the query based on transaction type and document types
StringBuilder query = new StringBuilder("SELECT SUM(value * currencyvalue) FROM cash ");
query.append("LEFT JOIN documents doc ON doc.id = cash.docid ");
query.append("LEFT JOIN customers cust ON cust.id = cash.customerid ");
query.append("LEFT JOIN divisions ON divisions.id = cust.divisionid ");
query.append("WHERE cust.id = ? ");
List<Integer> docTypes = Arrays.asList(DOC_RECEIPT, DOC_CNOTE, DOC_INVOICE, DOC_DNOTE);
if (cash.type != 0) {
query.append("AND cash.time < ? "); // Non-payment transactions before toTime
} else {
int payTime = calculatePayTime(cust, divisions);
query.append("AND cash.time + ").append(payTime * 86400).append(" < ? "); // Payment transactions before deadline
}
query.append(" OR (cash.docid IS NOT NULL AND (");
for (int i = 0; i < docTypes.size(); i++) {
query.append("doc.type = ?");
if (i < docTypes.size() - 1) {
query.append(" OR ");
}
}
query.append(" AND cash.time < ? OR ");
for (int i = 0; i < docTypes.size(); i++) {
query.append("doc.type = ?");
if (i < docTypes.size() - 1) {
query.append(" OR ");
}
}
query.append(" AND doc.cdate + doc.paytime * 86400 < ?))");
return executeQuery(query.toString(), id, toTime, docTypes, docTypes, toTime);
} else {
StringBuilder query = new StringBuilder("SELECT SUM(value * currencyvalue) FROM cash WHERE customerid = ?");
if (toTime != null) {
query.append(" AND time < ?");
}
return executeQuery(query.toString(), id, (toTime != null ? toTime : Long.MAX_VALUE));
}
}Editor is loading...
Leave a Comment