From f27e490d046acd5564bcdd5ea5e5b94ef5a8a901 Mon Sep 17 00:00:00 2001 From: AJITHKUMAR12 <48044092+AJITHKUMAR12@users.noreply.github.com> Date: Sat, 8 Aug 2026 17:15:14 +0530 Subject: [PATCH] changes in coworkspace ,community hall and implemented swimmingpool --- .../configuration/DataSourceConfig.java | 16 +- .../controller/CoworkspaceApicontroller.java | 15 + .../controller/MainController.java | 5 + .../controller/SwimmingPoolApiController.java | 51 + .../service/CommunityHallService.java | 4 +- .../service/CoworkspaceService.java | 440 ++++--- .../service/SwimmingPoolApiService.java | 159 +++ .../templates/modules/community.html | 187 ++- .../templates/modules/communitycaretaker.html | 178 ++- .../templates/modules/communityrefund.html | 108 +- .../templates/modules/communityreport.html | 8 +- .../templates/modules/coworkspace.html | 281 ++++- .../templates/modules/swimmingpoolreport.html | 1105 +++++++++++++++++ 13 files changed, 2318 insertions(+), 239 deletions(-) create mode 100644 src/main/java/com/gcc/commissionerreview/controller/SwimmingPoolApiController.java create mode 100644 src/main/java/com/gcc/commissionerreview/service/SwimmingPoolApiService.java create mode 100644 src/main/resources/templates/modules/swimmingpoolreport.html diff --git a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java index 6bff841..f290539 100644 --- a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java +++ b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java @@ -17,8 +17,8 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement public class DataSourceConfig { -// private static String host = "localhost:3306"; -// private static String dbpassword = "root"; + // private static String host = "localhost:3306"; + // private static String dbpassword = "root"; private static String host = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306"; private static String dbpassword = "gcc-facial-password"; @@ -239,6 +239,7 @@ public class DataSourceConfig { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://" + host + "/coworkingspace"); + // dataSource.setUrl("jdbc:mysql://" + host + "/coworkingspace_latest"); dataSource.setUsername("root"); dataSource.setPassword(dbpassword); @@ -256,4 +257,15 @@ public class DataSourceConfig { return dataSource; } + ////////// Swimming pool ////////////////////// + @Bean(name = "mysqlSwimmingPoolDataSource") + public DataSource mysqlSwimmingPoolDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://" + host + "/swimmingpool"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/CoworkspaceApicontroller.java b/src/main/java/com/gcc/commissionerreview/controller/CoworkspaceApicontroller.java index ab8e0ef..9568245 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/CoworkspaceApicontroller.java +++ b/src/main/java/com/gcc/commissionerreview/controller/CoworkspaceApicontroller.java @@ -82,4 +82,19 @@ public class CoworkspaceApicontroller { } + @GetMapping("/desk-slot-summary") + public ResponseEntity deskSlotSummary( + @RequestParam Integer bid, + @RequestParam Integer cid, + @RequestParam String fromDate, + @RequestParam String toDate) { + + return ResponseEntity.ok( + reportService.getDeskSlotSummary( + bid, + cid, + fromDate, + toDate)); + } + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/MainController.java b/src/main/java/com/gcc/commissionerreview/controller/MainController.java index 524d0bf..c3979b0 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/MainController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/MainController.java @@ -378,4 +378,9 @@ public class MainController { return "modules/foodschemeanddistribution"; } + @GetMapping("/swimmingpoolreport") + public String swimmingpoolreport(Model model) { + return "modules/swimmingpoolreport"; + } + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/SwimmingPoolApiController.java b/src/main/java/com/gcc/commissionerreview/controller/SwimmingPoolApiController.java new file mode 100644 index 0000000..fcb9511 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/controller/SwimmingPoolApiController.java @@ -0,0 +1,51 @@ +package com.gcc.commissionerreview.controller; + +import com.gcc.commissionerreview.service.SwimmingPoolApiService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/commissionerreview/api/swimmingpoolreport") + +public class SwimmingPoolApiController { + + @Autowired + private SwimmingPoolApiService swimmingPoolApiService ; + + + @GetMapping("/getBookDetails") + public List> getAbstractReport(){ + + return swimmingPoolApiService.getBookDetails(); + } + + + + @GetMapping("/getAbstractReport") + public List> getAbstractReport( + + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return swimmingPoolApiService.getAbstractReport(fromDate, toDate); + } + + + @GetMapping("/getDetailsReport") + public List> getDetailsReport( + @RequestParam String registerDate, + @RequestParam Integer slotOrder) { + + return swimmingPoolApiService.getDetailsReport(registerDate, slotOrder); + } + + + + +} diff --git a/src/main/java/com/gcc/commissionerreview/service/CommunityHallService.java b/src/main/java/com/gcc/commissionerreview/service/CommunityHallService.java index 01fc0c0..6397f17 100644 --- a/src/main/java/com/gcc/commissionerreview/service/CommunityHallService.java +++ b/src/main/java/com/gcc/commissionerreview/service/CommunityHallService.java @@ -241,7 +241,7 @@ public class CommunityHallService { sql.append( """ select hd.zone, hd.division, hd.hall_id, hd.hall_name, date_format(hd.c_date, '%d-%m-%Y') as hall_Created_date, - case when hd.is_active = 1 then 'Active Hall' else 'Deactivated Hall' end as Hall_Status, + case when hd.is_active = 1 then 'Active' else 'Deactivated' end as Hall_Status, hd.hall_incharge_name as caretaker_name, hd.hall_incharge_no as caretake_no, count(bd.booking_id) as total_no_of_bookings, sum( case when bd.booking_status = 'CANCELED' THEN 1 ELSE 0 END) AS cancelled_bookings, @@ -374,7 +374,7 @@ public class CommunityHallService { sql.append( """ select hd.zone, hd.division, hd.hall_id, hd.hall_name, date_format(hd.c_date, '%d-%m-%Y') as hall_Created_date, - case when hd.is_active = 1 then 'Active Hall' else 'Deactivated Hall' end as Hall_Status, + case when hd.is_active = 1 then 'Active' else 'Deactivated' end as Hall_Status, hd.hall_incharge_name as caretaker_name, hd.hall_incharge_no as caretake_no, count(bd.booking_id) as total_no_of_bookings, sum( case when bd.booking_status = 'CANCELED' THEN 1 ELSE 0 END) AS cancelled_bookings, diff --git a/src/main/java/com/gcc/commissionerreview/service/CoworkspaceService.java b/src/main/java/com/gcc/commissionerreview/service/CoworkspaceService.java index 2feddcb..2c7b342 100644 --- a/src/main/java/com/gcc/commissionerreview/service/CoworkspaceService.java +++ b/src/main/java/com/gcc/commissionerreview/service/CoworkspaceService.java @@ -354,6 +354,8 @@ public class CoworkspaceService { b.name AS building_name, b.inauguration_date, + b.zone, + b.ward, DATEDIFF(CURDATE(), DATE(b.inauguration_date)) AS operational_days, COUNT(bk.booking_id) AS total_bookings, @@ -475,7 +477,7 @@ public class CoworkspaceService { cs.total_slot ORDER BY - b.bid + b.zone,b.ward """); return jdbcTemplate.queryForList(sql.toString(), params.toArray()); @@ -486,8 +488,14 @@ public class CoworkspaceService { sql.append( """ SELECT - b.bid, b.name AS building_name, b.inauguration_date, + b.bid, b.name AS building_name, b.inauguration_date,b.zone,b.ward, CASE WHEN DATE(b.inauguration_date) > ? THEN 0 ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 END AS coverage_days, + (SELECT c.cid + FROM category c + WHERE c.bid = b.bid + AND c.display_name = 'Desk Space' + LIMIT 1 + ) AS desk_space_cid, ( CASE @@ -635,7 +643,7 @@ public class CoworkspaceService { ) AS meeting_booked_slots FROM buildings b WHERE b.isactive = 1 AND b.isdelete = 0 - ORDER BY b.bid + ORDER BY b.zone,b.ward """); List params = new ArrayList<>(); @@ -672,146 +680,50 @@ public class CoworkspaceService { StringBuilder sql = new StringBuilder(); sql.append( """ - SELECT - b.bid, - b.name AS building_name, - b.inauguration_date, - CASE WHEN DATE(b.inauguration_date) > ? THEN 0 ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 END AS coverage_days, - /* CASE - WHEN DATE(b.inauguration_date) > ? THEN 0 - ELSE DATEDIFF( - ?, - GREATEST(DATE(b.inauguration_date), ?) - ) + 1 - END - * - ( - SELECT COALESCE( - SUM( - CASE - WHEN sl.slotid IN (8,9,110,111,62,61) THEN 2 - ELSE 1 - END - ),0) - FROM category c - INNER JOIN subcategory sc - ON sc.cid = c.cid - INNER JOIN slots sl - ON sl.scid = sc.scid - WHERE c.bid = b.bid - AND c.display_name = 'Desk Space' - AND c.isactive = 1 - AND c.isdelete = 0 - AND sc.isactive = 1 - AND sc.isdelete = 0 - AND sl.isactive = 1 - AND sl.isdelete = 0 - ) AS desk_available_slots, */ - ( - CASE - WHEN DATE(b.inauguration_date) > ? THEN 0 - ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 - END - ) - * - ( - SELECT COALESCE( - SUM( - ( - CASE - WHEN sl.slotid IN (8,9,110,111,62,61) THEN 2 - ELSE 1 - END - ) * sc.capacity - ),0) - FROM category c - INNER JOIN subcategory sc - ON sc.cid = c.cid - INNER JOIN slots sl - ON sl.scid = sc.scid - WHERE c.bid = b.bid - AND c.display_name = 'Desk Space' - AND c.isactive = 1 - AND c.isdelete = 0 - AND sc.isactive = 1 - AND sc.isdelete = 0 - AND sl.isactive = 1 - AND sl.isdelete = 0 - ) AS desk_available_slots, - - ( - SELECT COALESCE(count(cl.bookingid),0) - FROM calendar cl - INNER JOIN booking bk ON bk.booking_id = cl.bookingid - INNER JOIN category c ON c.cid = bk.cid AND c.bid = bk.bid - WHERE bk.bid = b.bid - AND c.display_name = 'Desk Space' - AND DATE(cl.bdate) BETWEEN ? AND ? - AND cl.is_active = 1 AND cl.is_delete = 0 - AND bk.booking_status = 'success' - ) AS desk_booked_slots, - ( - CASE - WHEN DATE(b.inauguration_date) > ? THEN 0 - ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 - END - ) - * - ( - SELECT COALESCE( - SUM(COUNT(sl.slotid) * sc.capacity),0 - ) - FROM category c - INNER JOIN subcategory sc ON sc.cid = c.cid - INNER JOIN slots sl ON sl.scid = sc.scid - WHERE c.bid = b.bid - AND c.display_name = 'Learning Centre' - AND c.isactive = 1 - AND c.isdelete = 0 - AND sc.isactive = 1 - AND sc.isdelete = 0 - AND sl.isactive = 1 - AND sl.isdelete = 0 - ) AS learning_available_slots, - /* ( - CASE WHEN DATE(b.inauguration_date) > ? THEN 0 ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 END - ) * 5 AS learning_available_slots,*/ - ( - SELECT COALESCE(count(cl.bookingid), 0) - FROM calendar cl - INNER JOIN booking bk ON bk.booking_id = cl.bookingid - INNER JOIN category c ON c.cid = bk.cid AND c.bid = bk.bid - WHERE bk.bid = b.bid - AND c.display_name = 'Learning Centre' - AND DATE(cl.bdate) BETWEEN GREATEST(DATE(b.inauguration_date), ?) AND ? - AND cl.is_active = 1 AND cl.is_delete = 0 - AND bk.booking_status = 'success' - ) AS learning_booked_slots, - ( - - CASE - WHEN DATE(b.inauguration_date) > ? THEN 0 - ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 - END - ) - * - ( - SELECT COALESCE( - SUM(sc.capacity),0 - ) + SELECT + b.bid, + b.name AS building_name, + b.inauguration_date, + CASE WHEN DATE(b.inauguration_date) > ? THEN 0 ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 END AS coverage_days, + ( + SELECT c.cid FROM category c - INNER JOIN subcategory sc ON sc.cid = c.cid - INNER JOIN slots sl ON sl.scid = sc.scid WHERE c.bid = b.bid - AND c.display_name = 'Meeting Rooms' - AND c.isactive = 1 - AND c.isdelete = 0 - AND sc.isactive = 1 - AND sc.isdelete = 0 - AND sl.isactive = 1 - AND sl.isdelete = 0 - ) AS meeting_available_slots, - ( + AND c.display_name = 'Desk Space' + LIMIT 1 + ) AS desk_space_cid, + + /* CASE + WHEN DATE(b.inauguration_date) > ? THEN 0 + ELSE DATEDIFF( + ?, + GREATEST(DATE(b.inauguration_date), ?) + ) + 1 + END + * + ( + SELECT COALESCE( + SUM( + CASE + WHEN sl.slotid IN (8,9,110,111,62,61) THEN 2 + ELSE 1 + END + ),0) + FROM category c + INNER JOIN subcategory sc + ON sc.cid = c.cid + INNER JOIN slots sl + ON sl.scid = sc.scid + WHERE c.bid = b.bid + AND c.display_name = 'Desk Space' + AND c.isactive = 1 + AND c.isdelete = 0 + AND sc.isactive = 1 + AND sc.isdelete = 0 + AND sl.isactive = 1 + AND sl.isdelete = 0 + ) AS desk_available_slots, */ + ( CASE WHEN DATE(b.inauguration_date) > ? THEN 0 ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 @@ -819,36 +731,140 @@ public class CoworkspaceService { ) * ( - SELECT COUNT(sl.slotid) + SELECT COALESCE( + SUM( + ( + CASE + WHEN sl.slotid IN (8,9,110,111,62,61) THEN 2 + ELSE 1 + END + ) * sc.capacity + ),0) FROM category c INNER JOIN subcategory sc ON sc.cid = c.cid INNER JOIN slots sl ON sl.scid = sc.scid WHERE c.bid = b.bid - AND c.display_name = 'Meeting Rooms' + AND c.display_name = 'Desk Space' AND c.isactive = 1 AND c.isdelete = 0 AND sc.isactive = 1 AND sc.isdelete = 0 AND sl.isactive = 1 AND sl.isdelete = 0 - ) AS meeting_available_slots,*/ + ) AS desk_available_slots, + ( - SELECT COUNT(cl.calid) - FROM calendar cl - INNER JOIN booking bk ON bk.booking_id = cl.bookingid - INNER JOIN category c ON c.cid = bk.cid AND c.bid = bk.bid - WHERE bk.bid = b.bid - AND c.display_name = 'Meeting Rooms' - AND DATE(cl.bdate) BETWEEN GREATEST(DATE(b.inauguration_date), ?) AND ? - AND cl.is_active = 1 AND cl.is_delete = 0 - AND bk.booking_status = 'success' - ) AS meeting_booked_slots - FROM buildings b - WHERE b.isactive = 1 AND b.isdelete = 0 - ORDER BY b.bid - """); + SELECT COALESCE(count(cl.bookingid),0) + FROM calendar cl + INNER JOIN booking bk ON bk.booking_id = cl.bookingid + INNER JOIN category c ON c.cid = bk.cid AND c.bid = bk.bid + WHERE bk.bid = b.bid + AND c.display_name = 'Desk Space' + AND DATE(cl.bdate) BETWEEN ? AND ? + AND cl.is_active = 1 AND cl.is_delete = 0 + AND bk.booking_status = 'success' + ) AS desk_booked_slots, + ( + CASE + WHEN DATE(b.inauguration_date) > ? THEN 0 + ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 + END + ) + * + ( + SELECT COALESCE( + SUM(COUNT(sl.slotid) * sc.capacity),0 + ) + FROM category c + INNER JOIN subcategory sc ON sc.cid = c.cid + INNER JOIN slots sl ON sl.scid = sc.scid + WHERE c.bid = b.bid + AND c.display_name = 'Learning Centre' + AND c.isactive = 1 + AND c.isdelete = 0 + AND sc.isactive = 1 + AND sc.isdelete = 0 + AND sl.isactive = 1 + AND sl.isdelete = 0 + ) AS learning_available_slots, + /* ( + CASE WHEN DATE(b.inauguration_date) > ? THEN 0 ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 END + ) * 5 AS learning_available_slots,*/ + ( + SELECT COALESCE(count(cl.bookingid), 0) + FROM calendar cl + INNER JOIN booking bk ON bk.booking_id = cl.bookingid + INNER JOIN category c ON c.cid = bk.cid AND c.bid = bk.bid + WHERE bk.bid = b.bid + AND c.display_name = 'Learning Centre' + AND DATE(cl.bdate) BETWEEN GREATEST(DATE(b.inauguration_date), ?) AND ? + AND cl.is_active = 1 AND cl.is_delete = 0 + AND bk.booking_status = 'success' + ) AS learning_booked_slots, + ( + + CASE + WHEN DATE(b.inauguration_date) > ? THEN 0 + ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 + END + ) + * + ( + SELECT COALESCE( + SUM(sc.capacity),0 + ) + FROM category c + INNER JOIN subcategory sc ON sc.cid = c.cid + INNER JOIN slots sl ON sl.scid = sc.scid + WHERE c.bid = b.bid + AND c.display_name = 'Meeting Rooms' + AND c.isactive = 1 + AND c.isdelete = 0 + AND sc.isactive = 1 + AND sc.isdelete = 0 + AND sl.isactive = 1 + AND sl.isdelete = 0 + ) AS meeting_available_slots, + ( + CASE + WHEN DATE(b.inauguration_date) > ? THEN 0 + ELSE DATEDIFF(?, GREATEST(DATE(b.inauguration_date), ?)) + 1 + END + ) + * + ( + SELECT COUNT(sl.slotid) + FROM category c + INNER JOIN subcategory sc + ON sc.cid = c.cid + INNER JOIN slots sl + ON sl.scid = sc.scid + WHERE c.bid = b.bid + AND c.display_name = 'Meeting Rooms' + AND c.isactive = 1 + AND c.isdelete = 0 + AND sc.isactive = 1 + AND sc.isdelete = 0 + AND sl.isactive = 1 + AND sl.isdelete = 0 + ) AS meeting_available_slots,*/ + ( + SELECT COUNT(cl.calid) + FROM calendar cl + INNER JOIN booking bk ON bk.booking_id = cl.bookingid + INNER JOIN category c ON c.cid = bk.cid AND c.bid = bk.bid + WHERE bk.bid = b.bid + AND c.display_name = 'Meeting Rooms' + AND DATE(cl.bdate) BETWEEN GREATEST(DATE(b.inauguration_date), ?) AND ? + AND cl.is_active = 1 AND cl.is_delete = 0 + AND bk.booking_status = 'success' + ) AS meeting_booked_slots + FROM buildings b + WHERE b.isactive = 1 AND b.isdelete = 0 + ORDER BY b.bid + """); List params = new ArrayList<>(); // COVERAGE DAYS @@ -885,4 +901,112 @@ public class CoworkspaceService { return jdbcTemplate.queryForList(sql.toString(), params.toArray()); } + + public List> getDeskSlotSummary( + Integer bid, + Integer cid, + String fromDate, + String toDate) { + + String sql = """ + SELECT + + d.slot_date, + + /* Available Slots Per Day */ + ( + SELECT COALESCE( + MAX( + CASE + WHEN sl.slotid IN (8,9,110,111,62,61) + THEN sc.capacity * 2 + ELSE sc.capacity + END + ),0) + FROM category c + INNER JOIN subcategory sc + ON sc.cid = c.cid + INNER JOIN slots sl + ON sl.scid = sc.scid + WHERE c.bid = ? + AND c.cid = ? + AND c.isactive = 1 + AND c.isdelete = 0 + AND sc.isactive = 1 + AND sc.isdelete = 0 + AND sl.isactive = 1 + AND sl.isdelete = 0 + ) AS available_slots, + + /* Attended (Slot Count) */ + ( + SELECT COALESCE( + SUM( + CASE + WHEN c1.slotid IN (8,9,110,111,62,61) + THEN 2 + ELSE 1 + END + ),0) + FROM calendar c1 + INNER JOIN booking b1 + ON b1.booking_id = c1.bookingid + WHERE b1.bid = ? + AND b1.cid = ? + AND b1.booking_status = 'success' + AND DATE(c1.bdate)=d.slot_date + AND c1.is_active = 1 + AND c1.is_delete = 0 + ) AS attended, + + /* Not Attended (Absent Booking Count) */ + ( + SELECT COUNT(DISTINCT a.booking_id) + FROM attendance a + INNER JOIN booking b2 + ON b2.booking_id = a.booking_id + INNER JOIN calendar c2 + ON c2.bookingid = b2.booking_id + WHERE b2.bid = ? + AND b2.cid = ? + AND b2.booking_status='success' + AND DATE(c2.bdate)=d.slot_date + AND a.attendance_status='ABSENT' + ) AS not_attended + + FROM + ( + SELECT DISTINCT DATE(bdate) AS slot_date + FROM calendar + WHERE bid = ? + AND cid = ? + AND DATE(bdate) BETWEEN ? AND ? + AND is_active = 1 + AND is_delete = 0 + ) d + + ORDER BY d.slot_date + """; + + return jdbcTemplate.queryForList( + sql, + + // Available Slots + bid, + cid, + + // Attended + bid, + cid, + + // Not Attended + bid, + cid, + + // Date List + bid, + cid, + fromDate, + toDate); + } } diff --git a/src/main/java/com/gcc/commissionerreview/service/SwimmingPoolApiService.java b/src/main/java/com/gcc/commissionerreview/service/SwimmingPoolApiService.java new file mode 100644 index 0000000..eeb3ee5 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/service/SwimmingPoolApiService.java @@ -0,0 +1,159 @@ +package com.gcc.commissionerreview.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import javax.sql.DataSource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +public class SwimmingPoolApiService { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + public void setFeedbackDataSource(@Qualifier("mysqlSwimmingPoolDataSource") DataSource dataSource) { + this.jdbcTemplate = new JdbcTemplate(dataSource); + } + + + + public List> getAbstractReport(String fromDate, String toDate) { + + String sql = + "SELECT " + + "DATE_FORMAT(t.c_date, '%d-%m-%Y') AS c_date, " + + "t.total_revenue, " + + "t.slot1_count, " + + "t.slot2_count, " + + "t.slot3_count, " + + "t.slot4_count, " + + "t.slot5_count, " + + "t.slot6_count, " + + "t.slot7_count, " + + "t.slot8_count, " + + "t.slot9_count, " + + "t.slot10_count, " + + "t.slot11_count, " + + "t.slot12_count, " + + "t.slot13_count, " + + "t.slot14_count " + + "FROM ( " + + "SELECT " + + "DATE(bd.cdate) AS c_date, " + + "SUM(bd.total_amount) AS total_revenue, " + + "SUM(CASE WHEN bd.slot_order = 1 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot1_count, " + + "SUM(CASE WHEN bd.slot_order = 2 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot2_count, " + + "SUM(CASE WHEN bd.slot_order = 3 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot3_count, " + + "SUM(CASE WHEN bd.slot_order = 4 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot4_count, " + + "SUM(CASE WHEN bd.slot_order = 5 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot5_count, " + + "SUM(CASE WHEN bd.slot_order = 6 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot6_count, " + + "SUM(CASE WHEN bd.slot_order = 7 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot7_count, " + + "SUM(CASE WHEN bd.slot_order = 8 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot8_count, " + + "SUM(CASE WHEN bd.slot_order = 9 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot9_count, " + + "SUM(CASE WHEN bd.slot_order = 10 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot10_count, " + + "SUM(CASE WHEN bd.slot_order = 11 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot11_count, " + + "SUM(CASE WHEN bd.slot_order = 12 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot12_count, " + + "SUM(CASE WHEN bd.slot_order = 13 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot13_count, " + + "SUM(CASE WHEN bd.slot_order = 14 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot14_count " + + "FROM booking_details bd " + + "LEFT JOIN payment py ON py.order_id = bd.orderid " + + "WHERE py.payment_status = 'paid' " + + "AND bd.is_active = 1 " + + "AND bd.is_delete = 0 " + + "AND bd.booking_mode = 'ONLINE' "; + + List params = new ArrayList<>(); + + if (fromDate != null && !fromDate.isBlank() + && toDate != null && !toDate.isBlank()) { + + sql += " AND DATE(bd.cdate) BETWEEN ? AND ? "; + params.add(fromDate); + params.add(toDate); + } + + sql += " GROUP BY DATE(bd.cdate) ) t "; + sql += " ORDER BY t.c_date DESC"; + + return jdbcTemplate.queryForList(sql, params.toArray()); + } + + /*public List> getAbstractReport(String fromDate, String toDate) { + + + + String sql = " SELECT DATE_FORMAT(DATE(bd.cdate), '%d-%m-%Y') AS c_date, SUM(bd.total_amount) AS total_revenue, " + + + " SUM(CASE WHEN bd.slot_order = 1 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot1_count, " + + " SUM(CASE WHEN bd.slot_order = 2 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot2_count, " + + " SUM(CASE WHEN bd.slot_order = 3 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot3_count, " + + " SUM(CASE WHEN bd.slot_order = 4 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot4_count, " + + " SUM(CASE WHEN bd.slot_order = 5 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot5_count, " + + " SUM(CASE WHEN bd.slot_order = 6 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot6_count, " + + " SUM(CASE WHEN bd.slot_order = 7 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot7_count, " + + " SUM(CASE WHEN bd.slot_order = 8 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot8_count, " + + " SUM(CASE WHEN bd.slot_order = 9 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot9_count, " + + " SUM(CASE WHEN bd.slot_order = 10 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot10_count, " + + " SUM(CASE WHEN bd.slot_order = 11 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot11_count, " + + " SUM(CASE WHEN bd.slot_order = 12 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot12_count, " + + " SUM(CASE WHEN bd.slot_order = 13 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot13_count, " + + " SUM(CASE WHEN bd.slot_order = 14 THEN (bd.no_of_adults + bd.no_of_kids) ELSE 0 END) AS slot14_count " + + + " FROM booking_details bd " + + " LEFT JOIN payment py ON py.order_id = bd.orderid " + + " WHERE py.payment_status = 'paid' AND bd.is_active = 1 AND bd.is_delete = 0 AND bd.booking_mode = 'ONLINE' " ; + + + List params = new ArrayList<>(); + + if (fromDate != null && !fromDate.isBlank() + && toDate != null && !toDate.isBlank()) { + + sql += " AND DATE(bd.cdate) BETWEEN ? AND ? "; + params.add(fromDate); + params.add(toDate); + } + + sql += " group by date(bd.cdate) " ; + + sql += " order by date(bd.cdate) desc "; + + System.out.println(sql); + + return jdbcTemplate.queryForList(sql, params.toArray()); + }*/ + + + + public List> getDetailsReport(String registerDate, + Integer slotOrder) { + + String sql = " SELECT " + + " bd.mobile_no,bd.name,DATE_FORMAT(bd.slot_from_date, '%d-%m-%Y') AS slot_from_date,DATE_FORMAT(bd.slot_to_date, '%d-%m-%Y') AS slot_to_date,bd.total_amount,(bd.no_of_adults + bd.no_of_kids) AS total_members, " + + " st.slot_timing " + + " FROM booking_details bd " + + " LEFT JOIN payment py ON py.order_id = bd.orderid " + + " LEFT JOIN slot_timing st ON st.id = bd.slot_order " + + " WHERE py.payment_status = 'paid' AND bd.is_active = 1 AND bd.is_delete = 0 " + + " AND bd.booking_mode = 'ONLINE' AND DATE(bd.cdate) = STR_TO_DATE(?, '%d-%m-%Y') AND bd.slot_order = ? " ; + + return jdbcTemplate.queryForList(sql, registerDate, slotOrder); + } + + + public List> getBookDetails() { + + String sql = " select count(bd.id) AS total_bookings,sum(bd.total_amount) AS total_revenue from booking_details bd " + + " left join payment py on py.order_id = bd.orderid " + + " where bd.booking_mode = 'ONLINE' AND bd.is_active = 1 AND bd.is_delete = 0 AND py.payment_status = 'paid' " ; + + return jdbcTemplate.queryForList(sql); + } + +} diff --git a/src/main/resources/templates/modules/community.html b/src/main/resources/templates/modules/community.html index 82e09d1..bdc3f9d 100644 --- a/src/main/resources/templates/modules/community.html +++ b/src/main/resources/templates/modules/community.html @@ -2,7 +2,7 @@ - Community Hall Booking Report + Community Hall Popularity Report @@ -129,11 +129,91 @@ word-break: break-word; } + .hall-name-wrap { + width: 220px !important; + min-width: 220px !important; + max-width: 220px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + + + .hall-status-wrap { + width: 150px !important; + min-width: 150px !important; + max-width: 150px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .zone-wrap { + width: 40px !important; + min-width: 40px !important; + max-width: 40px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + + } + + .sno-wrap { + width: 40px !important; + min-width: 40px !important; + max-width: 40px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + + } + + .ward-wrap { + width: 40px !important; + min-width: 40px !important; + max-width: 40px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + + } + + .hall-number-wrap { + width: 150px !important; + min-width: 150px !important; + max-width: 150px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .bookingavailable-wrap { + width: 80px !important; + min-width: 80px !important; + max-width: 80px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + + } + + .totalbookings-wrap { + width: 90px !important; + min-width: 90px !important; + max-width: 90px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + + } + #hallBookingTable th:not(:nth-child(4)), #hallBookingTable td:not(:nth-child(4)) { white-space: nowrap; } + /* Scrollbar */ .dataTables_scrollBody::-webkit-scrollbar { height: 8px; @@ -144,6 +224,9 @@ border-radius: 4px; } + + + .dataTables_scrollBody::-webkit-scrollbar-track { background: #f1f1f1; } @@ -233,15 +316,17 @@ S.No Zone Division - Hall Id - Hall Name + Hall Id / Hall Name + Hall Created On / Hall Status + Caretaker Name / Mobile No + - Booking Available Days - Total Bookings + Booking
Available
Days + Total
Bookings Half Day Full Day 1.5 Days @@ -411,12 +496,12 @@ 30, // S.No 30, // Zone 50, // Division - 30, // Hall Id - 130, // Hall Name - 60, // Created Date - 70, // Status - 70, // Caretaker Name - 70, // Caretaker No + // Hall Id + 160, // Hall Name + // Created Date + 130, // Status + 140, // Caretaker Name + // Caretaker No 80, // Booking Available Days 80, // Total Bookings @@ -444,10 +529,12 @@ scrollCollapse: true, autoWidth: false, - paging: false, + paging: true, + pageLength: 10, + lengthMenu: [[10, 25, 50, 100], [10, 25, 50, 100]], fixedColumns: { - leftColumns: 9 + leftColumns: 6 }, @@ -472,12 +559,36 @@ { data: 'sno', width: '50px' }, { data: 'zone', width: '60px' }, { data: 'division', width: '70px' }, - { data: 'hall_id', width: '60px' }, - { data: 'hall_name', width: '220px' }, - { data: 'hall_created_date', width: '100px' }, - { data: 'hall_status', width: '120px' }, - { data: 'caretaker_name', width: '150px' }, - { data: 'caretaker_no', width: '120px' }, + { + data: null, + render: function (data, type, row) { + return row.hall_id + " - " + row.hall_name; + } + }, + { + data: null, + render: function (data, type, row) { + return ` + ${row.hall_created_date}
+ ${row.hall_status} + `; + } + }, + { + data: null, + render: function (data, type, row) { + return ` + ${row.caretaker_name}
+ ${row.caretaker_no} + `; + } + }, + // { data: 'hall_id', width: '60px' }, + // { data: 'hall_name', width: '220px' }, + // { data: 'hall_created_date', width: '100px' }, + // { data: 'hall_status', width: '120px' }, + // { data: 'caretaker_name', width: '150px' }, + // { data: 'caretaker_no', width: '120px' }, { data: 'booking_available_days', width: '120px' }, { data: 'total_no_of_bookings', width: '100px' }, @@ -485,6 +596,41 @@ { data: 'full_day_booking_count', width: '80px' }, { data: 'one_point_five_days_booking_count', width: '90px' }, { data: 'two_days_booking_count', width: '80px' } + ], + columnDefs: [ + { + targets: 0, // Hall Id / Hall Name + className: "sno-wrap" + }, + + { + targets: 1, // Hall Id / Hall Name + className: "zone-wrap" + }, + /* { + targets: 2, // Hall Id / Hall Name + className: "ward-wrap" + },*/ + { + targets: 3, // Hall Id / Hall Name + className: "hall-name-wrap" + }, + { + targets: 4, // Hall Created On / Hall Status + className: "hall-status-wrap" + }, + { + targets: 5, // Hall Created On / Hall Status + className: "hall-number-wrap" + }, + { + targets: 7, // Hall Created On / Hall Status + className: "totalbookings-wrap" + }, + { + targets: 0, // Hall Id / Hall Name + className: "bookingavailable-wrap" + }, ] }); } @@ -616,6 +762,7 @@ status: $('#status').val() }, success: function (response) { + // console.log(response); table.clear(); diff --git a/src/main/resources/templates/modules/communitycaretaker.html b/src/main/resources/templates/modules/communitycaretaker.html index 392f9f1..8f57f59 100644 --- a/src/main/resources/templates/modules/communitycaretaker.html +++ b/src/main/resources/templates/modules/communitycaretaker.html @@ -144,10 +144,87 @@ word-break: break-word !important; }*/ .hall-name-wrap { + width: 220px !important; min-width: 220px !important; max-width: 220px !important; white-space: normal !important; - word-break: break-word; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + + .hall-status-wrap { + width: 150px !important; + min-width: 150px !important; + max-width: 150px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .eventcompleted-wrap { + width: 80px !important; + min-width: 80px !important; + max-width: 80px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .no-wrap { + white-space: nowrap !important; + word-break: normal !important; + overflow-wrap: normal !important; + min-width: 180px !important; + width: 180px !important; + max-width: 180px !important; + } + + /* .cancelledrefund-wrap { + width: 90px !important; + min-width: 90px !important; + max-width: 90px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .rejectrefundrefund-wrap { + width: 80px !important; + min-width: 80px !important; + max-width: 80px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .totalrefundrefund-wrap { + width: 80px !important; + min-width: 80px !important; + max-width: 80px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .totalrefundpending-wrap { + width: 150px !important; + min-width: 150px !important; + max-width: 150px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } +*/ + + + .hall-number-wrap { + width: 150px !important; + min-width: 150px !important; + max-width: 150px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; } @@ -265,18 +342,18 @@ S.No Zone Division - Hall Id - Hall Name - Hall Created On - Hall Status - Caretaker Name - Mobile No + Hall Id / Hall Name + + Hall Created On / Hall Status + + Caretaker Name / Mobile No + Total Booking Cancelled
Bookings Rejected
Booking - Event Completed
Bookings - Cancelled Refund
Completed + Event
Completed
Bookings + Cancelled Refund
Completed Rejected Refund
Completed Refund Completed @@ -293,7 +370,7 @@ 6-15 Days 16-30 Days More than
30 Days - Total Refund
Completed + Total
Refund
Completed 0-5 Days @@ -302,7 +379,7 @@ More than
30 Days Cancelled
Booking Rejected
Booking - Total Refund
Pending + Total
Refund
Pending @@ -539,12 +616,12 @@ 10, // S.No 25, // Zone 35, // Division - 25, // Hall Id - 80, // Hall Name - 50, // Hall Created On - 50, // Hall Status - 60, // Caretaker Name - 50, // Mobile No + 105, // Hall Id + // Hall Name + 100, // Hall Created On + // Hall Status + 110, // Caretaker Name + // Mobile No 35, // Total Booking 45, // Cancelled Booking @@ -588,10 +665,12 @@ scrollCollapse: true, autoWidth: false, - paging: false, + paging: true, + pageLength: 10, + lengthMenu: [[10, 25, 50, 100], [10, 25, 50, 100]], fixedColumns: { - leftColumns: 9 + leftColumns: 6 }, @@ -624,12 +703,36 @@ { data: 'zone' }, { data: 'division' }, - { data: 'hall_id' }, - { data: 'hall_name' }, - { data: 'hall_Created_date' }, - { data: 'Hall_Status' }, - { data: 'caretaker_name' }, - { data: 'caretake_no' }, + { + data: null, + render: function (data, type, row) { + return row.hall_id + " - " + row.hall_name; + } + }, + // { data: 'hall_id' }, + // { data: 'hall_name' }, + /* { data: 'hall_Created_date' }, + { data: 'Hall_Status' },*/ + { + data: null, + render: function (data, type, row) { + return ` + ${row.hall_Created_date}
+ ${row.Hall_Status} + `; + } + }, + { + data: null, + render: function (data, type, row) { + return ` + ${row.caretaker_name}
+ ${row.caretake_no} + `; + } + }, + // { data: 'caretaker_name' }, + // { data: 'caretake_no' }, { data: 'total_no_of_bookings' }, { data: 'cancelled_bookings' }, @@ -661,12 +764,33 @@ ], columnDefs: [ + + { + targets: 3, // Hall Id / Hall Name + className: "hall-name-wrap" + }, + { + targets: 4, // Hall Created On / Hall Status + className: "hall-status-wrap" + }, { - targets: 4, // Hall Name column (0-based index) - className: 'hall-name-wrap' + targets: 5, // Hall Created On / Hall Status + className: "hall-number-wrap" + }, + /* { + targets: 10, // Hall Created On / Hall Status + className: "eventcompleted-wrap" + },*/ + + { + targets: 11, // Cancelled Refund Completed + width: "180px", + className: "no-wrap" } ] + + }); } $('#region').change(function () { diff --git a/src/main/resources/templates/modules/communityrefund.html b/src/main/resources/templates/modules/communityrefund.html index 1f2c159..b391b21 100644 --- a/src/main/resources/templates/modules/communityrefund.html +++ b/src/main/resources/templates/modules/communityrefund.html @@ -150,6 +150,34 @@ word-break: break-word; } + .hall-name-wrap { + width: 220px !important; + min-width: 220px !important; + max-width: 220px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + + .hall-status-wrap { + width: 150px !important; + min-width: 150px !important; + max-width: 150px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + .hall-number-wrap { + width: 150px !important; + min-width: 150px !important; + max-width: 150px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + /* Scrollbar */ .dataTables_scrollBody::-webkit-scrollbar { height: 8px; @@ -251,12 +279,13 @@ S.No Zone Division - Hall Id - Hall Name - Hall Created On - Hall Status - Caretaker Name - Mobile No + + Hall Id / Hall Name + Hall Created On / Hall Status + + Caretaker Name / Mobile No + Total Booking Cancelled
Bookings @@ -484,12 +513,12 @@ 20, // S.No 20, // Zone 25, // Division - 20, // Hall Id - 100, // Hall Name - 35, // Hall Created On - 35, // Hall Status - 80, // Caretaker Name - 45, // Mobile No + 120, // Hall Id + // Hall Name + 70, // Hall Created On + // Hall Status + 125, // Caretaker Name + // Mobile No 35, // Total Booking 35, // Cancelled Booking 35, // Rejected Booking @@ -526,7 +555,9 @@ scrollCollapse: true, autoWidth: false, - paging: false, + paging: true, + pageLength: 10, + lengthMenu: [[10, 25, 50, 100], [10, 25, 50, 100]], /* fixedColumns: { leftColumns: 9 @@ -554,12 +585,37 @@ { data: 'sno' }, //1 { data: 'zone' }, //2 { data: 'division' }, //3 - { data: 'hall_id' }, //4 - { data: 'hall_name' }, //5 - { data: 'hall_Created_date' }, //6 - { data: 'Hall_Status' }, //7 - { data: 'caretaker_name' }, //8 - { data: 'caretake_no' }, //9 + // { data: 'hall_id' }, //4 + // { data: 'hall_name' }, //5 + // { data: 'hall_Created_date' }, //6 + // { data: 'Hall_Status' }, //7 + // { data: 'caretaker_name' }, //8 + // { data: 'caretake_no' }, + // { + { + data: null, + render: function (data, type, row) { + return row.hall_id + " - " + row.hall_name; + } + }, + { + data: null, + render: function (data, type, row) { + return ` + ${row.hall_Created_date}
+ ${row.Hall_Status} + `; + } + }, + { + data: null, + render: function (data, type, row) { + return ` + ${row.caretaker_name}
+ ${row.caretake_no} + `; + } + }, //9 { data: 'total_no_of_bookings' }, //10 { data: 'cancelled_bookings' }, //11 { data: 'rejected_bookings' }, //10 @@ -660,11 +716,21 @@ { data: 'total_bookings' } //21 ], columnDefs: [ + + { + targets: 3, // Hall Id / Hall Name + className: "hall-name-wrap" + }, { - targets: 4, // Hall Name column (0-based index) - className: 'hall-name-wrap' + targets: 4, // Hall Created On / Hall Status + className: "hall-status-wrap" + }, + { + targets: 5, // Hall Created On / Hall Status + className: "hall-number-wrap" } ] + }); } $('#region').change(function () { diff --git a/src/main/resources/templates/modules/communityreport.html b/src/main/resources/templates/modules/communityreport.html index edcbdf7..8b36c22 100644 --- a/src/main/resources/templates/modules/communityreport.html +++ b/src/main/resources/templates/modules/communityreport.html @@ -283,10 +283,10 @@

community Hall report

-
+
-
+
@@ -296,7 +296,7 @@
-
+
@@ -306,7 +306,7 @@
-
+
diff --git a/src/main/resources/templates/modules/coworkspace.html b/src/main/resources/templates/modules/coworkspace.html index 621f5a8..beb9213 100644 --- a/src/main/resources/templates/modules/coworkspace.html +++ b/src/main/resources/templates/modules/coworkspace.html @@ -250,6 +250,16 @@ color: #fff; } + .date-wrap { + width: 130px !important; + min-width: 130px !important; + max-width: 130px !important; + white-space: normal !important; + word-wrap: break-word !important; + overflow-wrap: break-word !important; + } + + #performanceTable td { text-align: center; } @@ -351,6 +361,14 @@
+ +
+
+

+ +

+
+
@@ -436,8 +454,11 @@ - S.No + S.No + zone + ward Muthalvarpadaippagam Name + Inauguration Date Operational Days Total Booking @@ -467,12 +488,15 @@ - S.No + S.No + zone + ward Muthalvarpadaippagam Name + Inauguration Date @@ -522,6 +546,40 @@
+