diff --git a/src/main/java/com/gcc/commissionerreview/controller/AttendanceController.java b/src/main/java/com/gcc/commissionerreview/controller/AttendanceController.java index 1e0afd4..e0dc612 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/AttendanceController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/AttendanceController.java @@ -32,7 +32,6 @@ public class AttendanceController { System.out.println("Zone Summary Result for "+empType+ ":"+ result); return result; - // return attendanceService.getZoneSummary(empType, fromDate, toDate); } @GetMapping("/zoneSummaryPark") @@ -75,8 +74,6 @@ public class AttendanceController { System.out.println("Detailed Result: " + result); return result; - - // return attendanceService.getDetailedList(empType, category, fromDate, toDate, zone, parkName); } } diff --git a/src/main/java/com/gcc/commissionerreview/service/AttendanceService.java b/src/main/java/com/gcc/commissionerreview/service/AttendanceService.java index 9dd6cd0..be6dd95 100644 --- a/src/main/java/com/gcc/commissionerreview/service/AttendanceService.java +++ b/src/main/java/com/gcc/commissionerreview/service/AttendanceService.java @@ -21,15 +21,19 @@ public class AttendanceService { private JdbcTemplate jdbcTemplate; @Autowired - public void setFeedbackDataSource(@Qualifier("mysqlNULMDataSource") DataSource dataSource) { + public void setDataSource(@Qualifier("mysqlNULMDataSource") DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } private static final DateTimeFormatter INPUT_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy", Locale.ENGLISH); public List> getAbstractCounts() { - String sql = "SELECT emp_type, count(enrollment_id) as totalCount FROM enrollment_table " - + "where isactive =1 and isdelete = 0 and zone != 0 group by emp_type"; + String sql = "SELECT emp_type, COUNT(enrollment_id) AS totalCount, " + + "SUM(CASE WHEN facial_attendance = 1 THEN 1 ELSE 0 END) AS facialRegistered, " + + "SUM(CASE WHEN facial_attendance = 0 THEN 1 ELSE 0 END) AS facialNotRegistered " + + "FROM enrollment_table " + + "WHERE isactive = 1 AND isdelete = 0 AND zone != 0 " + + "GROUP BY emp_type"; return jdbcTemplate.queryForList(sql); } @@ -55,16 +59,29 @@ public class AttendanceService { System.out.println("EmpType: " + empType + ", From: " + fromDateTime + ", To: " + toDateTime); - String sql = "SELECT et.zone, count(distinct et.enrollment_id) as TotalCount, " - + "count(distinct case when att.indatetime >= ? and att.indatetime <= ? then att.enrollment_id end) as AttendanceMarked, " - + "count(distinct case when att.oddatetime >= ? and att.oddatetime <= ? then att.enrollment_id end) as ODCount, " - + "count(distinct case when att.leavedatetime >= ? and att.leavedatetime <= ? then att.enrollment_id end) as LeaveCount " + String sql = "WITH facial_data AS ( " + + "SELECT zone, " + + "SUM(CASE WHEN facial_attendance = 1 THEN 1 ELSE 0 END) AS facialRegistered, " + + "SUM(CASE WHEN facial_attendance = 0 THEN 1 ELSE 0 END) AS facialNotRegistered " + + "FROM enrollment_table " + + "WHERE isactive = 1 AND isdelete = 0 AND emp_type = ? AND zone != 0 " + + "GROUP BY zone " + + ") " + + "SELECT et.zone, " + + "COUNT(DISTINCT et.enrollment_id) AS TotalCount, " + + "COALESCE(fd.facialRegistered, 0) AS facialRegistered, " + + "COALESCE(fd.facialNotRegistered, 0) AS facialNotRegistered, " + + "COUNT(DISTINCT CASE WHEN att.indatetime >= ? AND att.indatetime <= ? THEN att.enrollment_id END) AS AttendanceMarked, " + + "COUNT(DISTINCT CASE WHEN att.oddatetime >= ? AND att.oddatetime <= ? THEN att.enrollment_id END) AS ODCount, " + + "COUNT(DISTINCT CASE WHEN att.leavedatetime >= ? AND att.leavedatetime <= ? THEN att.enrollment_id END) AS LeaveCount " + "FROM enrollment_table et " - + "left join attendance att on et.enrollment_id = att.enrollment_id " - + "where et.isactive =1 and et.isdelete = 0 and et.emp_type = ? and et.zone !=0 " - + "group by et.zone order by et.zone"; + + "LEFT JOIN attendance att ON et.enrollment_id = att.enrollment_id " + + "LEFT JOIN facial_data fd ON et.zone = fd.zone " + + "WHERE et.isactive = 1 AND et.isdelete = 0 AND et.emp_type = ? AND et.zone != 0 " + + "GROUP BY et.zone, fd.facialRegistered, fd.facialNotRegistered " + + "ORDER BY et.zone"; - return jdbcTemplate.queryForList(sql, new Object[] { fromDateTime, toDateTime, fromDateTime, toDateTime, fromDateTime, toDateTime, empType }); + return jdbcTemplate.queryForList(sql, new Object[] { empType, fromDateTime, toDateTime, fromDateTime, toDateTime, fromDateTime, toDateTime, empType }); } public List> getDetailedList(String empType, String category, String fromDateStr, String toDateStr, Integer zone, String parkName) { @@ -155,16 +172,27 @@ public class AttendanceService { System.out.println("Zone: " + zone + ", From: " + fromDateTime + ", To: " + toDateTime); - String sql = "SELECT et.park_name, count(distinct et.enrollment_id) as TotalCount, " - + "count(distinct case when att.indatetime >= ? and att.indatetime <= ? then att.enrollment_id end) as AttendanceMarked, " - + "count(distinct case when att.oddatetime >= ? and att.oddatetime <= ? then att.enrollment_id end) as ODCount, " - + "count(distinct case when att.leavedatetime >= ? and att.leavedatetime <= ? then att.enrollment_id end) as LeaveCount " + String sql = "WITH facial_data AS ( " + + "SELECT park_name, " + + "SUM(CASE WHEN facial_attendance = 1 THEN 1 ELSE 0 END) AS facialRegistered, " + + "SUM(CASE WHEN facial_attendance = 0 THEN 1 ELSE 0 END) AS facialNotRegistered " + + "FROM enrollment_table " + + "WHERE isactive = 1 AND isdelete = 0 AND emp_type = 'Park' AND zone = ? AND park_name != '' " + + "GROUP BY park_name " + + ") " + + "SELECT et.park_name, COUNT(DISTINCT et.enrollment_id) AS TotalCount, " + + "COALESCE(fd.facialRegistered, 0) AS facialRegistered, COALESCE(fd.facialNotRegistered, 0) AS facialNotRegistered, " + + "COUNT(DISTINCT CASE WHEN att.indatetime >= ? AND att.indatetime <= ? THEN att.enrollment_id END) AS AttendanceMarked, " + + "COUNT(DISTINCT CASE WHEN att.oddatetime >= ? AND att.oddatetime <= ? THEN att.enrollment_id END) AS ODCount, " + + "COUNT(DISTINCT CASE WHEN att.leavedatetime >= ? AND att.leavedatetime <= ? THEN att.enrollment_id END) AS LeaveCount " + "FROM enrollment_table et " - + "left join attendance att on et.enrollment_id = att.enrollment_id " - + "where et.isactive =1 and et.isdelete = 0 and et.emp_type = 'Park' and et.zone !=0 and et.zone = ? and et.park_name != '' " - + "group by et.park_name order by et.park_name"; + + "LEFT JOIN attendance att ON et.enrollment_id = att.enrollment_id " + + "LEFT JOIN facial_data fd ON et.park_name = fd.park_name " + + "WHERE et.isactive = 1 AND et.isdelete = 0 AND et.emp_type = 'Park' AND et.zone != 0 AND et.zone = ? AND et.park_name != '' " + + "GROUP BY et.park_name, fd.facialRegistered, fd.facialNotRegistered " + + "ORDER BY et.park_name"; - return jdbcTemplate.queryForList(sql, new Object[] { fromDateTime, toDateTime, fromDateTime, toDateTime, fromDateTime, toDateTime, zone }); + return jdbcTemplate.queryForList(sql, new Object[] { zone, fromDateTime, toDateTime, fromDateTime, toDateTime, fromDateTime, toDateTime, zone }); } } diff --git a/src/main/resources/templates/modules/attendance-dashboard.html b/src/main/resources/templates/modules/attendance-dashboard.html index 5a05560..864dfd9 100644 --- a/src/main/resources/templates/modules/attendance-dashboard.html +++ b/src/main/resources/templates/modules/attendance-dashboard.html @@ -6,6 +6,7 @@ Attendance Dashboard +