@@ -992,28 +992,29 @@ public ReportResult invokeReport(String reportId, Object... params) throws Excep
992992 result .getTables ().add (getTable (true , "Offene Zeiterfassungsprojekte" , query , params ));
993993 } else if (Reports .RPT_TSHEETS_VALUES .equals (reportId )) {
994994 String query = "SELECT "
995- + "DATE_FORMAT(tsp.time_stopped, '%Y-%m') AS Monat, "
996- + "CONCAT(tsp.principal, ', ', DATE_FORMAT(tsp.time_stopped, '%Y-%m')) AS MitarbeiterMonat, "
997- + "tsp.principal AS Mitarbeiter, "
998- + "SUM((GREATEST(1, CEILING(TIMESTAMPDIFF(MINUTE, tsp.time_started, tsp.time_stopped) / ts.interval_minutes)) * ts.interval_minutes DIV 1) / 60 * tsp.unit_price) AS UmsatzNetto "
999- + "FROM timesheet_positions tsp "
1000- + "LEFT JOIN timesheets ts ON ts.id = tsp.timesheet_id "
1001- + "WHERE tsp.time_stopped >= ? "
1002- + "AND tsp.time_stopped <= ? "
1003- + "GROUP BY Monat, Mitarbeiter "
1004- + "ORDER BY Monat ASC, Mitarbeiter ASC" ;
995+ + "DATE_FORMAT(tsp.time_stopped, '%Y-%m') AS Monat, "
996+ + "CONCAT(tsp.principal, ', ', DATE_FORMAT(MIN(tsp.time_stopped), '%Y-%m')) AS MitarbeiterMonat, "
997+ + "tsp.principal AS Mitarbeiter, "
998+ + "SUM((GREATEST(1, CEILING(TIMESTAMPDIFF(MINUTE, tsp.time_started, tsp.time_stopped) / ts.interval_minutes)) * ts.interval_minutes DIV 1) / 60 * tsp.unit_price) AS UmsatzNetto "
999+ + "FROM timesheet_positions tsp "
1000+ + "LEFT JOIN timesheets ts ON ts.id = tsp.timesheet_id "
1001+ + "WHERE tsp.time_stopped >= ? "
1002+ + "AND tsp.time_stopped <= ? "
1003+ + "GROUP BY Monat, Mitarbeiter "
1004+ + "ORDER BY Monat ASC, Mitarbeiter ASC" ;
1005+
10051006 result .getTables ().add (getTable (false , "Gebuchte Zeiten pro Mitarbeiter und Monat" , query , params ));
10061007 String query2 = "SELECT "
1007- + "DATE_FORMAT(tsp.time_stopped, '%Y') AS Jahr, "
1008- + "CONCAT(tsp.principal, ', ', DATE_FORMAT(tsp.time_stopped, '%Y')) AS MitarbeiterJahr, "
1009- + "tsp.principal AS Mitarbeiter, "
1010- + "SUM((GREATEST(1, CEILING(TIMESTAMPDIFF(MINUTE, tsp.time_started, tsp.time_stopped) / ts.interval_minutes)) * ts.interval_minutes DIV 1) / 60 * tsp.unit_price) AS UmsatzNetto "
1011- + "FROM timesheet_positions tsp "
1012- + "LEFT JOIN timesheets ts ON ts.id = tsp.timesheet_id "
1013- + "WHERE tsp.time_stopped >= ? "
1014- + "AND tsp.time_stopped <= ? "
1015- + "GROUP BY Jahr, Mitarbeiter "
1016- + "ORDER BY Jahr ASC, Mitarbeiter ASC" ;
1008+ + "DATE_FORMAT(tsp.time_stopped, '%Y') AS Jahr, "
1009+ + "CONCAT(tsp.principal, ', ', DATE_FORMAT(MIN( tsp.time_stopped) , '%Y')) AS MitarbeiterJahr, "
1010+ + "tsp.principal AS Mitarbeiter, "
1011+ + "SUM((GREATEST(1, CEILING(TIMESTAMPDIFF(MINUTE, tsp.time_started, tsp.time_stopped) / ts.interval_minutes)) * ts.interval_minutes DIV 1) / 60 * tsp.unit_price) AS UmsatzNetto "
1012+ + "FROM timesheet_positions tsp "
1013+ + "LEFT JOIN timesheets ts ON ts.id = tsp.timesheet_id "
1014+ + "WHERE tsp.time_stopped >= ? "
1015+ + "AND tsp.time_stopped <= ? "
1016+ + "GROUP BY Jahr, Mitarbeiter "
1017+ + "ORDER BY Jahr ASC, Mitarbeiter ASC" ;
10171018 result .getTables ().add (getTable (false , "Gebuchte Zeiten pro Mitarbeiter und Jahr" , query2 , params ));
10181019 } else if (Reports .RPT_TSHEETS_OPEN_POSITIONS .equals (reportId )) {
10191020 String query = "SELECT cases.id, cases.fileNumber as Aktenzeichen, cases.name as Rubrum, cases.reason as wegen, \n "
0 commit comments