Skip to content

Commit

Permalink
added lawyer and assistant to a variety of reports. added new sub-tab…
Browse files Browse the repository at this point in the history
…les to existing reports. issue #2286
  • Loading branch information
j-dimension committed May 30, 2024
1 parent 773fe75 commit 40bb6d2
Showing 1 changed file with 46 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -710,8 +710,7 @@ public class ReportService implements ReportServiceRemote {
public ReportResult invokeReport(String reportId, Object... params) throws Exception {
// fixed values - could be refactored later to be taken from database
HashMap<String, String> reportPrivs = new HashMap<>();
reportPrivs.put(Reports.RPT_INV_OPEN, PRIVILEGE_COMMON);
reportPrivs.put(Reports.RPT_CASES_BYMONTH, PRIVILEGE_COMMON);
reportPrivs.put(Reports.RPT_CASES_BYMONTH, PRIVILEGE_CONFIDENTIAL);
reportPrivs.put(Reports.RPT_CASES_BYYEAR, PRIVILEGE_COMMON);

reportPrivs.put(Reports.RPT_INV_ALL, PRIVILEGE_COMMON);
Expand Down Expand Up @@ -763,6 +762,27 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep

String query2 = "select 'Akten' as Serie, DATE_FORMAT(date_created,'%Y-%m') as Monat, count(*) as Akten from cases c where c.date_created>=? and c.date_created<=? group by Monat order by Monat asc";
result.getBarCharts().add(getBarChart(false, "Akten pro Monat", "Monat", "Anzahl Akten", query2, 1, 2, 3, params));

// determine all lawyers for the timeframe
String queryLawyers = "SELECT distinct(lawyer) FROM cases c WHERE c.date_created >= ? AND c.date_created <= ? order by lawyer asc";
ReportResultTable lawyerTable=getTable(false, "lawyers", queryLawyers, params);

StringBuilder casesByLawyerQuery=new StringBuilder();
casesByLawyerQuery.append("SELECT DATE_FORMAT(date_created,'%Y-%m') AS Monat, ");
ArrayList<Object[]> lawyerRows=lawyerTable.getValues();
for(Object[] lawyerRow: lawyerRows) {
String lawyer=(String)lawyerRow[0];
if(lawyer!=null && !("".equalsIgnoreCase(lawyer))) {
casesByLawyerQuery.append("CAST(SUM(CASE WHEN c.lawyer = '").append(lawyer).append("' THEN 1 ELSE 0 END) AS UNSIGNED) AS '").append(lawyer).append("',");
}
}
casesByLawyerQuery.append("CAST(SUM(CASE WHEN c.lawyer IS NULL OR c.lawyer = '' THEN 1 ELSE 0 END) AS UNSIGNED) AS Unbekannt\n"
+ "FROM cases c\n"
+ "WHERE c.date_created >= ? AND c.date_created <= ?\n"
+ "GROUP BY Monat\n"
+ "ORDER BY Monat ASC");
result.getTables().add(getTable(false, "Akten pro Monat und Anwalt", casesByLawyerQuery.toString(), params));

} else if (Reports.RPT_INV_ALL.equals(reportId)) {
String query = "SELECT inv.case_id, inv.invoice_no as RNr, invt.display_name as Belegart, \n"
+ " case \n"
Expand All @@ -777,7 +797,7 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep
+ " else 'unbekannt'\n"
+ " end as Status,\n"
+ " round(inv.total, 2) Nettobetrag, round(inv.total_gross, 2) Bruttobetrag, ifnull(round(sum(acce.in_earnings), 2), 0) Zahlungseingang, inv.currency as Waehrung, DATE_FORMAT(inv.created,'%Y-%m-%d') as erstellt,\n"
+ " DATE_FORMAT(inv.due_date,'%Y-%m-%d') as faellig, inv.name as Bezeichnung, inv.description as Beschreibung, cont.name as EmpfaengerName, cont.company as EmpfaengerFirma, cases.fileNumber as Aktenzeichen, cases.name as Rubrum, cases.reason as wegen FROM invoices inv\n"
+ " DATE_FORMAT(inv.due_date,'%Y-%m-%d') as faellig, inv.name as Bezeichnung, inv.description as Beschreibung, cont.name as EmpfaengerName, cont.company as EmpfaengerFirma, cases.fileNumber as Aktenzeichen, cases.name as Rubrum, cases.reason as wegen, cases.lawyer as Anwalt, cases.assistant as Sachbearbeiter FROM invoices inv\n"
+ "left join case_account_entries acce on acce.invoice_id=inv.id \n"
+ "left join contacts cont on inv.contact_id=cont.id\n"
+ "left join invoice_types invt on inv.invoice_type=invt.id\n"
Expand All @@ -800,7 +820,7 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep
+ " else 'unbekannt'\n"
+ " end as Status,\n"
+ " round(inv.total, 2) Nettobetrag, round(inv.total_gross, 2) Bruttobetrag, ifnull(round(sum(acce.in_earnings), 2), 0) Zahlungseingang, inv.currency as Waehrung, DATE_FORMAT(inv.created,'%Y-%m-%d') as erstellt,\n"
+ " DATE_FORMAT(inv.due_date,'%Y-%m-%d') as faellig, TIMESTAMPDIFF(DAY, inv.due_date, curdate()) as TageFaellig, inv.name as Bezeichnung, inv.description as Beschreibung, cont.name as EmpfaengerName, cont.company as EmpfaengerFirma, cases.fileNumber as Aktenzeichen, cases.name as Rubrum, cases.reason as wegen FROM invoices inv\n"
+ " DATE_FORMAT(inv.due_date,'%Y-%m-%d') as faellig, TIMESTAMPDIFF(DAY, inv.due_date, curdate()) as TageFaellig, inv.name as Bezeichnung, inv.description as Beschreibung, cont.name as EmpfaengerName, cont.company as EmpfaengerFirma, cases.fileNumber as Aktenzeichen, cases.name as Rubrum, cases.reason as wegen, cases.lawyer as Anwalt, cases.assistant as Sachbearbeiter FROM invoices inv\n"
+ "left join case_account_entries acce on acce.invoice_id=inv.id \n"
+ "left join contacts cont on inv.contact_id=cont.id\n"
+ "left join invoice_types invt on inv.invoice_type=invt.id\n"
Expand Down Expand Up @@ -860,7 +880,7 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep
+ " else 'unbekannt'\n"
+ " end as Status,\n"
+ " round(inv.total, 2) Nettobetrag, round(inv.total_gross, 2) Bruttobetrag, ifnull(round(sum(acce.in_earnings), 2), 0) Zahlungseingang, inv.currency as Waehrung, DATE_FORMAT(inv.created,'%Y-%m-%d') as erstellt,\n"
+ " DATE_FORMAT(inv.due_date,'%Y-%m-%d') as faellig, TIMESTAMPDIFF(DAY, inv.due_date, curdate()) as TageFaellig, inv.name as Bezeichnung, inv.description as Beschreibung, cont.name as EmpfaengerName, cont.company as EmpfaengerFirma, cases.fileNumber as Aktenzeichen, cases.name as Rubrum, cases.reason as wegen FROM invoices inv\n"
+ " DATE_FORMAT(inv.due_date,'%Y-%m-%d') as faellig, TIMESTAMPDIFF(DAY, inv.due_date, curdate()) as TageFaellig, inv.name as Bezeichnung, inv.description as Beschreibung, cont.name as EmpfaengerName, cont.company as EmpfaengerFirma, cases.fileNumber as Aktenzeichen, cases.name as Rubrum, cases.reason as wegen, cases.lawyer as Anwalt, cases.assistant as Sachbearbeiter FROM invoices inv\n"
+ "left join case_account_entries acce on acce.invoice_id=inv.id \n"
+ "left join contacts cont on inv.contact_id=cont.id\n"
+ "left join invoice_types invt on inv.invoice_type=invt.id\n"
Expand Down Expand Up @@ -992,8 +1012,8 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep

} else if (Reports.RPT_ACCOUNTS_ESCROW.equals(reportId)) {
String query = "select * from (\n"
+ "select case_id, fileNumber as Aktenzeichen, name as Rubrum, reason as wegen, sum(in_escrow) as FremdgeldEin, sum(out_escrow) as FremdgeldAus, sum(in_escrow)-sum(out_escrow) as Differenz from (\n"
+ "select case_id, fileNumber, name, reason, date_created, in_escrow, out_escrow from case_account_entries\n"
+ "select case_id, fileNumber as Aktenzeichen, name as Rubrum, reason as wegen, lawyer as Anwalt, assistant as Sachbearbeiter, sum(in_escrow) as FremdgeldEin, sum(out_escrow) as FremdgeldAus, sum(in_escrow)-sum(out_escrow) as Differenz from (\n"
+ "select case_id, fileNumber, name, reason, lawyer, assistant, date_created, in_escrow, out_escrow from case_account_entries\n"
+ "left join cases on cases.id=case_account_entries.case_id where date_created>=? and date_created<=?\n"
+ ") bookings \n"
+ "group by case_id\n"
Expand All @@ -1005,8 +1025,8 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep

} else if (Reports.RPT_ACCOUNTS_EARNINGS.equals(reportId)) {
String query = "select * from (\n"
+ "select case_id, fileNumber as Aktenzeichen, name as Rubrum, reason as wegen, subjectField as Sachgebiet, sum(in_earnings) as Einnahmen, sum(out_spendings) as Ausgaben, sum(in_earnings)-sum(out_spendings) as Ergebnis from (\n"
+ "select case_id, fileNumber, name, reason, date_created, subjectField, in_earnings, out_spendings from case_account_entries\n"
+ "select case_id, fileNumber as Aktenzeichen, name as Rubrum, reason as wegen, lawyer as Anwalt, assistant as Sachbearbeiter, subjectField as Sachgebiet, sum(in_earnings) as Einnahmen, sum(out_spendings) as Ausgaben, sum(in_earnings)-sum(out_spendings) as Ergebnis from (\n"
+ "select case_id, fileNumber, name, reason, lawyer, assistant, date_created, subjectField, in_earnings, out_spendings from case_account_entries\n"
+ "left join cases on cases.id=case_account_entries.case_id where date_created>=? and date_created<=? \n"
+ ") bookings \n"
+ "group by case_id\n"
Expand All @@ -1018,14 +1038,30 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep

} else if (Reports.RPT_ACCOUNTS_BOOKINGS.equals(reportId)) {
String query = "\n"
+ "select case_account_entries.case_id, fileNumber as Aktenzeichen, cases.name as Rubrum, reason as wegen, DATE_FORMAT(entry_date,'%Y-%m-%d') as Buchungsdatum, case_account_entries.description as Kommentar, in_earnings as Einnahmen, out_spendings as Ausgaben, in_expenditure as AuslagenEin, out_expenditure as AuslagenAus, in_escrow as FremdgeldEin, out_escrow as FremdgeldAus, invoice_no as BelegNr, invoices.name as Bezeichung, round(invoices.total_gross, 2) Bruttobetrag from case_account_entries\n"
+ "select case_account_entries.case_id, fileNumber as Aktenzeichen, cases.name as Rubrum, reason as wegen, lawyer as Anwalt, assistant as Sachbearbeiter, DATE_FORMAT(entry_date,'%Y-%m-%d') as Buchungsdatum, case_account_entries.description as Kommentar, in_earnings as Einnahmen, out_spendings as Ausgaben, in_expenditure as AuslagenEin, out_expenditure as AuslagenAus, in_escrow as FremdgeldEin, out_escrow as FremdgeldAus, invoice_no as BelegNr, invoices.name as Bezeichung, round(invoices.total_gross, 2) Bruttobetrag from case_account_entries\n"
+ "left join cases on cases.id=case_account_entries.case_id \n"
+ "left join invoices on invoices.id=case_account_entries.invoice_id \n"
+ "where entry_date>=? and entry_date<=?\n"
+ "order by entry_date asc;";
ReportResultTable mainTable = getTable(true, "Buchungen", query, params);

result.getTables().add(mainTable);

Collection<ReportResultTable> subTables = this.splitTable(mainTable, "Anwalt");
ArrayList<ReportResultTable> sortedSubTables = new ArrayList<>();
sortedSubTables.addAll(subTables);
Collections.sort(sortedSubTables, (ReportResultTable o1, ReportResultTable o2) -> {
String s1 = o1.getTableName();
String s2 = o2.getTableName();
if (s1 == null) {
s1 = "";
}
if (s2 == null) {
s2 = "";
}
return s1.compareTo(s2);
});
result.getTables().addAll(sortedSubTables);

}

Expand Down

0 comments on commit 40bb6d2

Please sign in to comment.