From 94d955b35479b63e54d7eb0cb73f50747b47abe3 Mon Sep 17 00:00:00 2001 From: sanjay-25-dev Date: Fri, 15 May 2026 13:17:38 +0530 Subject: [PATCH 1/8] added new report for poster and banner removal page --- pom.xml | 15 + .../configuration/DataSourceConfig.java | 12 +- .../BannerRemovalApiController.java | 79 ++ .../controller/MainController.java | 11 + .../PosterRemovalApiController.java | 128 +++ .../service/BannerApiService.java | 164 ++++ .../service/PosterReportService.java | 511 ++++++++++ .../modules/poster/bannerReport.html | 887 +++++++++++++++++ .../modules/poster/posterReport.html | 917 ++++++++++++++++++ .../modules/poster/street_details.jrxml | 362 +++++++ 10 files changed, 3081 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/gcc/commissionerreview/controller/BannerRemovalApiController.java create mode 100644 src/main/java/com/gcc/commissionerreview/controller/PosterRemovalApiController.java create mode 100644 src/main/java/com/gcc/commissionerreview/service/BannerApiService.java create mode 100644 src/main/java/com/gcc/commissionerreview/service/PosterReportService.java create mode 100644 src/main/resources/templates/modules/poster/bannerReport.html create mode 100644 src/main/resources/templates/modules/poster/posterReport.html create mode 100644 src/main/resources/templates/modules/poster/street_details.jrxml diff --git a/pom.xml b/pom.xml index 324f0a5..86e91db 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,21 @@ test --> + + + + + net.sf.jasperreports + jasperreports + 6.21.0 + + + + net.sf.jasperreports + jasperreports-fonts + 6.21.0 + + diff --git a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java index aec60c1..30c39fc 100644 --- a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java +++ b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java @@ -17,12 +17,11 @@ 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"; + private static String host = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306"; + private static String dbpassword = "gcc-facial-password"; public static class MyDataSourceConfig { @Primary @@ -180,4 +179,7 @@ public class DataSourceConfig { return dataSource; } + + + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/BannerRemovalApiController.java b/src/main/java/com/gcc/commissionerreview/controller/BannerRemovalApiController.java new file mode 100644 index 0000000..738e9a6 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/controller/BannerRemovalApiController.java @@ -0,0 +1,79 @@ +package com.gcc.commissionerreview.controller; + +import com.gcc.commissionerreview.service.BannerApiService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +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/bannerremoval") + +public class BannerRemovalApiController { + + @Autowired + private BannerApiService bannerApiService ; + + + @GetMapping("/zone-wise") + public ResponseEntity> getZoneData( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate) { + + Map data = + bannerApiService.fetchZoneData(assetTypeId, fromDate, toDate); + + return ResponseEntity.ok(data); + } + + + + @GetMapping("/ward-wise") + public ResponseEntity> getWardData( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone) { + + Map data = + bannerApiService.fetchWardData(assetTypeId, fromDate, toDate,zone); + + return ResponseEntity.ok(data); + } + + @GetMapping("/street-wise") + public ResponseEntity> getStreetData( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone, + @RequestParam String ward) { + + Map data = + bannerApiService.fetchStreetData(assetTypeId, fromDate, toDate,zone,ward); + + return ResponseEntity.ok(data); + } + + @GetMapping("/street-details") + public ResponseEntity>> getStreetDetails( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone, + @RequestParam String ward, + @RequestParam String streetid) { + + List> data = + bannerApiService.fetchStreetDetails(assetTypeId, fromDate, toDate, zone, ward, streetid); + + return ResponseEntity.ok(data); + } + +} diff --git a/src/main/java/com/gcc/commissionerreview/controller/MainController.java b/src/main/java/com/gcc/commissionerreview/controller/MainController.java index bdbaece..4d8a4a9 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/MainController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/MainController.java @@ -311,4 +311,15 @@ public class MainController { return "modules/fooddistribution/fooddistributiondetailedreport"; } + + @GetMapping("/posterreport") + public String posterdetailedreport(Model model) { + return "modules/poster/posterReport"; + } + + @GetMapping("/bannerreport") + public String bannerdetailedreport(Model model) { + return "modules/poster/bannerReport"; + } + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/PosterRemovalApiController.java b/src/main/java/com/gcc/commissionerreview/controller/PosterRemovalApiController.java new file mode 100644 index 0000000..a91c023 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/controller/PosterRemovalApiController.java @@ -0,0 +1,128 @@ +package com.gcc.commissionerreview.controller; + +import com.gcc.commissionerreview.service.PosterReportService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +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/posterremoval") + +public class PosterRemovalApiController { + + + @Autowired + private PosterReportService posterReportService; + + + @GetMapping("/zone-wise") + public ResponseEntity> getZoneData( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate) { + + Map data = + posterReportService.fetchZoneData(assetTypeId, fromDate, toDate); + + return ResponseEntity.ok(data); + } + + + + @GetMapping("/ward-wise") + public ResponseEntity> getWardData( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone) { + + Map data = + posterReportService.fetchWardData(assetTypeId, fromDate, toDate,zone); + + return ResponseEntity.ok(data); + } + + @GetMapping("/street-wise") + public ResponseEntity> getStreetData( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone, + @RequestParam String ward) { + + Map data = + posterReportService.fetchStreetData(assetTypeId, fromDate, toDate,zone,ward); + + return ResponseEntity.ok(data); + } + + @GetMapping("/street-details") + public ResponseEntity>> getStreetDetails( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone, + @RequestParam String ward, + @RequestParam String streetid) { + + List> data = + posterReportService.fetchStreetDetails(assetTypeId, fromDate, toDate, zone, ward, streetid); + + return ResponseEntity.ok(data); + } + + + +// add using jrxml format + + @GetMapping("/download-street-report") + public void downloadStreetReport( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone, + @RequestParam String ward, + @RequestParam String streetid, + HttpServletResponse response) throws Exception { + + posterReportService.downloadStreetReport( + assetTypeId, + fromDate, + toDate, + zone, + ward, + streetid, + response); + } + + + + @GetMapping("/download-street-pdf-report") + public void downloadStreetPdfReport( + @RequestParam Integer assetTypeId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String zone, + @RequestParam String ward, + @RequestParam String streetid, + HttpServletResponse response) throws Exception { + + posterReportService.downloadStreetPdfReport( + assetTypeId, + fromDate, + toDate, + zone, + ward, + streetid, + response); + } + + +} diff --git a/src/main/java/com/gcc/commissionerreview/service/BannerApiService.java b/src/main/java/com/gcc/commissionerreview/service/BannerApiService.java new file mode 100644 index 0000000..7aa30dd --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/service/BannerApiService.java @@ -0,0 +1,164 @@ +package com.gcc.commissionerreview.service; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class BannerApiService { + + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private ObjectMapper objectMapper; + + + public Map fetchZoneData(Integer assetTypeId, + String fromDate, + String toDate) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReports" + + "?assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate; + + String response = restTemplate.getForObject(url, String.class); + + return objectMapper.readValue(response, Map.class); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new HashMap<>(); + } + } + + + public Map fetchWardData(Integer assetTypeId, + String fromDate, + String toDate,String zone) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReports?" + + "assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate + + "&zone=" + zone; + + String response = restTemplate.getForObject(url, String.class); + + return objectMapper.readValue(response, Map.class); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new HashMap<>(); + } + } + + + public Map fetchStreetData(Integer assetTypeId, + String fromDate, + String toDate,String zone,String ward) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReports?" + + "assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate + + "&zone=" + zone + + "&ward=" + ward ; + + String response = restTemplate.getForObject(url, String.class); + + return objectMapper.readValue(response, Map.class); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new HashMap<>(); + } + } + + + public List> fetchStreetDetails(Integer assetTypeId, + String fromDate, + String toDate, + String zone, + String ward, + String streetid) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReportsByDate?" + + "assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate + + "&zone=" + zone + + "&ward=" + ward + + "&streetid=" + streetid; + + String response = restTemplate.getForObject(url, String.class); + + Object parsed = objectMapper.readValue(response, Object.class); + + + if (parsed instanceof List) { + return (List>) parsed; + } + + Map result = (Map) parsed; + + if (result.containsKey("data")) { + return (List>) result.get("data"); + } + + if (result.containsKey("zoneWise")) { + return (List>) result.get("zoneWise"); + } + + // fallback + return new ArrayList<>(); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new ArrayList<>(); + } + } +} diff --git a/src/main/java/com/gcc/commissionerreview/service/PosterReportService.java b/src/main/java/com/gcc/commissionerreview/service/PosterReportService.java new file mode 100644 index 0000000..ce980b2 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/service/PosterReportService.java @@ -0,0 +1,511 @@ +package com.gcc.commissionerreview.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletResponse; +import net.sf.jasperreports.engine.*; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; +import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter; +import net.sf.jasperreports.export.SimpleExporterInput; +import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; +import net.sf.jasperreports.export.SimpleXlsxReportConfiguration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.io.InputStream; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class PosterReportService { + + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private ObjectMapper objectMapper; + + + public Map fetchZoneData(Integer assetTypeId, + String fromDate, + String toDate) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReports" + + "?assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate; + + String response = restTemplate.getForObject(url, String.class); + + return objectMapper.readValue(response, Map.class); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new HashMap<>(); + } + } + + + public Map fetchWardData(Integer assetTypeId, + String fromDate, + String toDate,String zone) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReports?" + + "assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate + + "&zone=" + zone; + + String response = restTemplate.getForObject(url, String.class); + + return objectMapper.readValue(response, Map.class); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new HashMap<>(); + } + } + + + public Map fetchStreetData(Integer assetTypeId, + String fromDate, + String toDate,String zone,String ward) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReports?" + + "assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate + + "&zone=" + zone + + "&ward=" + ward ; + + String response = restTemplate.getForObject(url, String.class); + + return objectMapper.readValue(response, Map.class); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new HashMap<>(); + } + } + + + public List> fetchStreetDetails(Integer assetTypeId, + String fromDate, + String toDate, + String zone, + String ward, + String streetid) { + + try { + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + String url = "https://gccservices.in/gccofficialapp/api/asset/filterReportsByDate?" + + "assetTypeId=" + assetTypeId + + "&fromDate=" + formattedFromDate + + "&toDate=" + formattedToDate + + "&zone=" + zone + + "&ward=" + ward + + "&streetid=" + streetid; + + String response = restTemplate.getForObject(url, String.class); + + Object parsed = objectMapper.readValue(response, Object.class); + + + if (parsed instanceof List) { + return (List>) parsed; + } + + Map result = (Map) parsed; + + if (result.containsKey("data")) { + return (List>) result.get("data"); + } + + if (result.containsKey("zoneWise")) { + return (List>) result.get("zoneWise"); + } + + // fallback + return new ArrayList<>(); + + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + return new ArrayList<>(); + } + } + + + public void downloadStreetReport( + Integer assetTypeId, + String fromDate, + String toDate, + String zone, + String ward, + String streetid, + HttpServletResponse response) throws Exception { + + // EXISTING METHOD CALL + List> data = + fetchStreetDetails( + assetTypeId, + fromDate, + toDate, + zone, + ward, + streetid); + + + + List> finalList = new ArrayList<>(); + + for (Map row : data) { + + String beforeImage = ""; + String afterImage = ""; + + Object feedbackObj = row.get("feedback_file"); + + if (feedbackObj instanceof List) { + + List feedbackFiles = (List) feedbackObj; + + for (Object obj : feedbackFiles) { + + if (obj instanceof Map fileMap) { + + String action = ""; + + if (fileMap.get("fileaction") != null) { + action = + String.valueOf( + fileMap.get("fileaction")); + } + + String imageUrl = ""; + + if (fileMap.get("imageUrl") != null) { + imageUrl = + String.valueOf( + fileMap.get("imageUrl")); + } + + // BEFORE IMAGE + if ("before".equalsIgnoreCase(action)) { + beforeImage = imageUrl; + } + + // AFTER IMAGE + if ("after".equalsIgnoreCase(action)) { + afterImage = imageUrl; + } + } + } + } + + + + Map jasperMap = + new HashMap<>(); + + jasperMap.put("zone", + row.get("zone")); + + jasperMap.put("ward", + row.get("ward")); + + jasperMap.put("streetname", + row.get("streetname")); + + jasperMap.put("beforeImage", + beforeImage); + + jasperMap.put("afterImage", + afterImage); + + finalList.add(jasperMap); + } + + + + JRBeanCollectionDataSource dataSource = + new JRBeanCollectionDataSource(finalList); + + InputStream inputStream = + getClass().getResourceAsStream( + "/templates/modules/poster/street_details.jrxml"); + + JasperReport jasperReport = + JasperCompileManager.compileReport(inputStream); + + Map params = new HashMap<>(); + + JasperPrint jasperPrint = + JasperFillManager.fillReport( + jasperReport, + params, + dataSource); + + response.setContentType( + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + + response.setHeader( + "Content-Disposition", + "attachment; filename=Street_Details_Report.xlsx"); + + JRXlsxExporter exporter = new JRXlsxExporter(); + + exporter.setExporterInput( + new SimpleExporterInput(jasperPrint)); + + exporter.setExporterOutput( + new SimpleOutputStreamExporterOutput( + response.getOutputStream())); + + SimpleXlsxReportConfiguration configuration = + new SimpleXlsxReportConfiguration(); + + configuration.setOnePagePerSheet(false); + configuration.setDetectCellType(true); + configuration.setCollapseRowSpan(false); + configuration.setRemoveEmptySpaceBetweenRows(true); + configuration.setWhitePageBackground(false); + + exporter.setConfiguration(configuration); + + exporter.exportReport(); + + response.flushBuffer(); + } + + + public void downloadStreetPdfReport( + Integer assetTypeId, + String fromDate, + String toDate, + String zone, + String ward, + String streetid, + HttpServletResponse response) throws Exception { + + List> data = + fetchStreetDetails( + assetTypeId, + fromDate, + toDate, + zone, + ward, + streetid); + + + + List> finalList = + new ArrayList<>(); + + for (Map row : data) { + + String beforeImage = ""; + String afterImage = ""; + String removalDate = ""; + + + String enumeratedDate = ""; + + if (row.get("cdate") != null) { + + String fullDate = String.valueOf(row.get("cdate")); + + if (fullDate.contains("T")) { + String datePart = fullDate.split("T")[0]; + String[] parts = datePart.split("-"); + enumeratedDate = parts[2] + "-" + parts[1] + "-" + parts[0]; + } else { + enumeratedDate = fullDate; + } + } + + // LATITUDE + String latitude = ""; + + if (row.get("latitude") != null) { + latitude = String.valueOf(row.get("latitude")); + } + + // LONGITUDE + String longitude = ""; + + if (row.get("longitude") != null) { + longitude = String.valueOf(row.get("longitude")); + } + + Object feedbackObj = row.get("feedback_file"); + + if (feedbackObj instanceof List) { + + List feedbackFiles = (List) feedbackObj; + + for (Object obj : feedbackFiles) { + + if (obj instanceof Map fileMap) { + + String action = ""; + + if (fileMap.get("fileaction") != null) { + action = + String.valueOf( + fileMap.get("fileaction")); + } + + String imageUrl = ""; + + if (fileMap.get("imageUrl") != null) { + imageUrl = + String.valueOf( + fileMap.get("imageUrl")); + } + + // BEFORE IMAGE + if ("before".equalsIgnoreCase(action)) { + beforeImage = imageUrl; + } + + // AFTER IMAGE + REMOVAL DATE + if ("after".equalsIgnoreCase(action)) { + + afterImage = imageUrl; + + if (fileMap.get("cdate") != null) { + + String removeDate = String.valueOf( + fileMap.get("cdate")); + + if (removeDate.contains("T")) { + String datePart = removeDate.split("T")[0]; + String[] parts = datePart.split("-"); + + removalDate = parts[2] + "-" + parts[1] + "-" + parts[0]; + } else { + removalDate = removeDate; + } + } + } + } + } + } + + + + Map jasperMap = + new HashMap<>(); + + jasperMap.put("zone", + row.get("zone")); + + jasperMap.put("ward", + row.get("ward")); + + jasperMap.put("latitude", + latitude); + + jasperMap.put("longitude", + longitude); + + jasperMap.put("streetname", + row.get("streetname")); + + jasperMap.put("enumeratedDate", + enumeratedDate); + + jasperMap.put("removalDate", + removalDate); + + jasperMap.put("beforeImage", + beforeImage); + + jasperMap.put("afterImage", + afterImage); + + finalList.add(jasperMap); + } + + + + + + JRBeanCollectionDataSource dataSource = + new JRBeanCollectionDataSource(finalList); + + InputStream inputStream = + getClass().getResourceAsStream( + "/templates/modules/poster/street_details.jrxml"); + + JasperReport jasperReport = + JasperCompileManager.compileReport(inputStream); + + Map params = new HashMap<>(); + + DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + + String formattedFromDate = LocalDate.parse(fromDate, inputFormat).format(outputFormat); + String formattedToDate = LocalDate.parse(toDate, inputFormat).format(outputFormat); + + params.put("zone", zone); + params.put("ward", ward); + params.put("fromDate", formattedFromDate); + params.put("toDate", formattedToDate); + + JasperPrint jasperPrint = + JasperFillManager.fillReport( + jasperReport, + params, + dataSource); + + response.setContentType("application/pdf"); + + response.setHeader( + "Content-Disposition", + "attachment; filename=Street_Details_Report.pdf"); + + JasperExportManager.exportReportToPdfStream( + jasperPrint, + response.getOutputStream()); + + response.flushBuffer(); + } + +} diff --git a/src/main/resources/templates/modules/poster/bannerReport.html b/src/main/resources/templates/modules/poster/bannerReport.html new file mode 100644 index 0000000..926a0c8 --- /dev/null +++ b/src/main/resources/templates/modules/poster/bannerReport.html @@ -0,0 +1,887 @@ + + + + Banner Removal Report + + + + + + + + + + + + + + + + + +
+ +

Banner Removal Report

+ + +
+ + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/modules/poster/posterReport.html b/src/main/resources/templates/modules/poster/posterReport.html new file mode 100644 index 0000000..b792e91 --- /dev/null +++ b/src/main/resources/templates/modules/poster/posterReport.html @@ -0,0 +1,917 @@ + + + + Poster Removal Report + + + + + + + + + + + + + + + + + +
+ +

Poster Removal Report

+ + +
+ + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/templates/modules/poster/street_details.jrxml b/src/main/resources/templates/modules/poster/street_details.jrxml new file mode 100644 index 0000000..e71422d --- /dev/null +++ b/src/main/resources/templates/modules/poster/street_details.jrxml @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="90"> + + <!-- REPORT TITLE --> + <textField> + <reportElement x="0" y="0" width="1180" height="25"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="18" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA["Street Details Report"]]></textFieldExpression> + </textField> + + <!-- ZONE + WARD --> + <textField> + <reportElement x="0" y="30" width="1180" height="20"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="14" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[ + "Zone: " + $P{zone} + " Ward: " + $P{ward} + ]]></textFieldExpression> + </textField> + + <!-- FROM DATE + TO DATE --> + <textField> + <reportElement x="0" y="55" width="1180" height="20"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[ + "From Date: " + $P{fromDate} + " To Date: " + $P{toDate} + ]]></textFieldExpression> + </textField> + + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b948f92d8b8af2a85e869d41bb7d3cc044b961ed Mon Sep 17 00:00:00 2001 From: AJITHKUMAR12 <48044092+AJITHKUMAR12@users.noreply.github.com> Date: Tue, 26 May 2026 10:25:27 +0530 Subject: [PATCH 2/8] Implemented report module for three ie complaint and tenment complaint --- .../configuration/DataSourceConfig.java | 20 +- .../controller/IeComplaintsApiController.java | 49 + .../controller/MainController.java | 6 +- .../controller/TenementController.java | 98 + .../service/IeComplaintsService.java | 318 +++ .../service/TenementService.java | 489 ++++ .../templates/modules/vendorreport.html | 2209 +++++++++++++++++ 7 files changed, 3182 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/gcc/commissionerreview/controller/TenementController.java create mode 100644 src/main/java/com/gcc/commissionerreview/service/TenementService.java create mode 100644 src/main/resources/templates/modules/vendorreport.html diff --git a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java index 30c39fc..38cde82 100644 --- a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java +++ b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java @@ -17,11 +17,11 @@ 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"; + private static String host = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306"; + private static String dbpassword = "gcc-facial-password"; public static class MyDataSourceConfig { @Primary @@ -179,7 +179,15 @@ public class DataSourceConfig { return dataSource; } - - + ////////// Tenements////////////////////// + @Bean(name = "mysqlTenementDataSource") + public DataSource mysqlTenementDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://" + host + "/gcc_tenements"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } } diff --git a/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java b/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java index a7c53fc..08cd1ff 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java @@ -84,4 +84,53 @@ public class IeComplaintsApiController { iecomplaintservice.getComplaintDetails(zone, ward, complaintId, fromDate, toDate)); } + @GetMapping("/vendorzoneActivity") + public ResponseEntity> vendorzoneActivity( + + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate, + @RequestParam(required = false) Integer complaintId) { + + return ResponseEntity.ok( + iecomplaintservice.getvendorZoneActivity(fromDate, toDate, complaintId)); + + } + + @GetMapping("/vendorwardActivity") + public ResponseEntity> vendorwardActivity( + + @RequestParam String zone, + @RequestParam(required = false) String complaintId, + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + iecomplaintservice.getvendorWardActivity(zone, complaintId, fromDate, toDate)); + + } + + @GetMapping("/vendorcomplaintDetails") + public ResponseEntity> vendorcomplaintDetails( + + @RequestParam String zone, + @RequestParam String ward, + @RequestParam(required = false) String complaintId, + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + iecomplaintservice.getvendorComplaintDetails(zone, ward, complaintId, fromDate, toDate)); + } + + @GetMapping("/vendorcomplaintDashboard") + public ResponseEntity> vendorcomplaintDashboard( + + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + iecomplaintservice.getvendorComplaintDashboard(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 4d8a4a9..0561e6b 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/MainController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/MainController.java @@ -311,7 +311,6 @@ public class MainController { return "modules/fooddistribution/fooddistributiondetailedreport"; } - @GetMapping("/posterreport") public String posterdetailedreport(Model model) { return "modules/poster/posterReport"; @@ -322,4 +321,9 @@ public class MainController { return "modules/poster/bannerReport"; } + @GetMapping("/vendorreport") + public String vendorreport(Model model) { + return "modules/vendorreport"; + } + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/TenementController.java b/src/main/java/com/gcc/commissionerreview/controller/TenementController.java new file mode 100644 index 0000000..2221723 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/controller/TenementController.java @@ -0,0 +1,98 @@ +package com.gcc.commissionerreview.controller; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +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 com.gcc.commissionerreview.service.IeComplaintsService; +import com.gcc.commissionerreview.service.TenementService; + +@RestController +@RequestMapping("/commissionerreview/api/tenement") + +public class TenementController { + + @Autowired + private TenementService tenementService; + + @GetMapping("/tenementDashboard") + public ResponseEntity> getTenementDashboard( + + @RequestParam String fromDate, + @RequestParam String toDate) { + + return ResponseEntity.ok( + tenementService.getTenementDashboard( + fromDate, + toDate)); + } + + @GetMapping("/zoneActivity") + public ResponseEntity> zoneActivity( + + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + tenementService.getZoneActivity(fromDate, toDate)); + } + + @GetMapping("/wardActivity") + public ResponseEntity> wardActivity( + + @RequestParam String zone, + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + tenementService.getWardActivity( + zone, + fromDate, + toDate)); + } + // ================= CONTROLLER ================= + + @GetMapping("/getSchemeWiseReport") + public ResponseEntity> getSchemeWiseReport( + + @RequestParam String ward, + + @RequestParam(required = false) String fromDate, + + @RequestParam(required = false) String toDate) { + + return ResponseEntity.ok( + + tenementService.getSchemeWiseReport( + ward, + fromDate, + toDate)); + } + + @GetMapping("/getComplaintDetails") + public Map getComplaintDetails( + + @RequestParam String ward, + @RequestParam String schemeid, + + @RequestParam(required = false) String fromDate, + @RequestParam(required = false) String toDate) { + + return tenementService.getComplaintDetails( + ward, + schemeid, + + fromDate, + toDate); + } + +} diff --git a/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java index 2dd78b4..c89cd67 100644 --- a/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java +++ b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java @@ -529,6 +529,324 @@ public class IeComplaintsService { return response; } + // vendor api + public Map getvendorZoneActivity(String fromDate, String toDate, Integer complaintId) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("zm.zone_name, "); + + sql.append("COUNT(DISTINCT CASE "); + + if (fromDate != null && !fromDate.isEmpty() + && toDate != null && !toDate.isEmpty()) { + + sql.append("WHEN DATE(cd.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + + } else { + + sql.append("WHEN 1=1 "); + } + + sql.append("THEN cd.ref_id END) AS total_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NOT NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(comp.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN comp.ref_id END) AS completed_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN cd.ref_id END) AS pending_count "); + + sql.append("FROM gcc_street_vendor.zone_master zm "); + + sql.append("LEFT JOIN complaint_details cd "); + sql.append("ON zm.zone_name = cd.zone "); + sql.append("AND cd.is_delete = 0 "); + sql.append("AND cd.is_active = 1 "); + sql.append("AND cd.complaint_id IN (4,6,12)"); + + if (complaintId != null) { + sql.append("AND cd.complaint_id = ? "); + params.add(complaintId); + } + + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + + sql.append("GROUP BY zm.zone_name "); + sql.append("ORDER BY zm.zone_name "); + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + e.printStackTrace(); + response.put("status", "Error"); + } + + return response; + } + + public Map getvendorWardActivity(String zone, String complaintId, + String fromDate, String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("wm.ward_name AS ward, "); + + sql.append("COUNT(DISTINCT cd.ref_id) AS total_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NOT NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(comp.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN comp.ref_id END) AS completed_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NULL "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN cd.ref_id END) AS pending_count "); + + sql.append("FROM gcc_street_vendor.ward_master wm "); + + // Complaint details join + sql.append("LEFT JOIN complaint_details cd "); + sql.append("ON wm.ward_name = cd.ward "); + // this below condition is here because if to get all the ward if no data for + // that ward also + sql.append("AND cd.zone = ? "); + params.add(zone); + + sql.append("AND cd.is_delete = 0 "); + sql.append("AND cd.is_active = 1 "); + sql.append("AND cd.complaint_id IN (4,6,12)"); + + if (complaintId != null && !complaintId.isEmpty()) { + sql.append("AND cd.complaint_id = ? "); + params.add(complaintId); + } + + // Completion join + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + + // Zone filter + sql.append("WHERE wm.zone_id = ? "); + params.add(zone); + + sql.append("GROUP BY wm.ward_name "); + sql.append("ORDER BY wm.ward_name "); + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + response.put("status", "Error"); + response.put("message", "Something went wrong"); + } + + return response; + } + + public Map getvendorComplaintDetails(String zone, String ward, + String complaintId, String fromDate, String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + String beforeImageColumn = "cd.image_path"; + String afterImageColumn = "comp.image_path"; + + sql.append("SELECT "); + sql.append("cm.complaint_name, "); + sql.append("cd.street_name, "); + sql.append("cd.status, "); + sql.append("cd.street_name AS complaint_street_name, "); + sql.append("comp.street_name AS completion_street_name, "); + + sql.append("DATE_FORMAT(cd.cdate,'%d-%m-%Y') AS complaint_created_date, "); + sql.append("IFNULL(DATE_FORMAT(comp.cdate,'%d-%m-%Y'),'Pending') AS completion_date, "); + /* + * sql.append("DATE(cd.cdate) AS complaint_created_date, "); + * sql.append("IFNULL(DATE(comp.cdate),'Pending') AS completion_date, "); + */ + + sql.append( + "CONCAT('" + fileBaseUrl + "/gccofficialapp/files'," + beforeImageColumn + ") AS before_image, "); + sql.append("CONCAT('" + fileBaseUrl + "/gccofficialapp/files'," + afterImageColumn + ") AS after_image "); + + sql.append("FROM complaint_details cd "); + + sql.append("LEFT JOIN complaint_master cm "); + sql.append("ON cm.complaint_id = cd.complaint_id "); + + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + + sql.append("WHERE cd.zone = ? "); + params.add(zone); + + sql.append("AND cd.ward = ? "); + params.add(ward); + + sql.append("AND cd.is_delete = 0 "); + sql.append("AND cd.is_active = 1 "); + sql.append("AND cd.complaint_id IN (4,6,12)"); + + if (complaintId != null && !complaintId.isEmpty()) { + sql.append("AND cd.complaint_id = ? "); + params.add(complaintId); + } + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + + sql.append("AND ( "); + + sql.append("(comp.ref_id IS NOT NULL AND DATE(comp.cdate) BETWEEN ? AND ?) "); + + sql.append("OR "); + + sql.append("(comp.ref_id IS NULL AND DATE(cd.cdate) BETWEEN ? AND ?) "); + + sql.append(") "); + + params.add(fromDate); + params.add(toDate); + params.add(fromDate); + params.add(toDate); + } + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + response.put("status", "Error"); + } + + return response; + } + + public Map getvendorComplaintDashboard(String fromDate, String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("cm.complaint_id, cm.complaint_name, "); + + sql.append("COUNT(DISTINCT cd.ref_id) AS total_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NOT NULL "); + sql.append("AND cd.complaint_id IN (4,6,12) "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(comp.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN comp.ref_id END) AS completed_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN comp.ref_id IS NULL "); + sql.append("AND cd.complaint_id IN (4,6,12) "); + + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { + sql.append("AND DATE(cd.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("THEN cd.ref_id END) AS pending_count "); + + sql.append("FROM complaint_master cm "); + + sql.append("LEFT JOIN complaint_details cd "); + sql.append("ON cm.complaint_id = cd.complaint_id "); + + sql.append("LEFT JOIN completion comp "); + sql.append("ON comp.ref_id = cd.ref_id "); + sql.append("WHERE cm.complaint_id IN (4,6,12) "); + + sql.append("GROUP BY cm.complaint_id, cm.complaint_name "); + sql.append("ORDER BY cm.complaint_id"); + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "Error"); + response.put("message", "Something went wrong"); + } + + return response; + } + /* * public Map getComplaintDetails(String zone, String ward, * String complaintId, String fromDate, String toDate) { diff --git a/src/main/java/com/gcc/commissionerreview/service/TenementService.java b/src/main/java/com/gcc/commissionerreview/service/TenementService.java new file mode 100644 index 0000000..feddca9 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/service/TenementService.java @@ -0,0 +1,489 @@ +package com.gcc.commissionerreview.service; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service + +public class TenementService { + + @Autowired + @Value("${fileBaseUrl}") + + private String fileBaseUrl; + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private Environment environment; + + @Autowired + public void setDataSource(@Qualifier("mysqlTenementDataSource") DataSource tenementDataSource) { + this.jdbcTemplate = new JdbcTemplate(tenementDataSource); + } + + public TenementService(Environment environment) { + + this.environment = environment; + + this.fileBaseUrl = environment.getProperty("fileBaseUrl"); + } + + public Map getTenementDashboard( + + String fromDate, + String toDate) { + + Map response = new HashMap<>(); + + try { + + String sql = ""; + List> result; + + // ✅ if no date filter + if (fromDate == null || fromDate.isBlank() + || toDate == null || toDate.isBlank()) { + + sql = "SELECT " + + + "'Tenement' AS complaint_name, " + + + "COUNT(*) AS total_count, " + + + "COUNT(CASE " + + "WHEN final_status IN ('completed','verified') " + + "THEN 1 END) AS completed_count, " + + + "COUNT(CASE " + + "WHEN final_status = 'created' " + + "THEN 1 END) AS pending_count " + + + "FROM issue_list1"; + + result = jdbcTemplate.queryForList(sql); + + } else { + + // ✅ with date filter + sql = "SELECT " + + + "'Tenement' AS complaint_name, " + + + "COUNT(*) AS total_count, " + + + "COUNT(CASE " + + "WHEN final_status IN ('completed','verified') " + + "THEN 1 END) AS completed_count, " + + + "COUNT(CASE " + + "WHEN final_status = 'created' " + + "THEN 1 END) AS pending_count " + + + "FROM issue_list1 " + + + "WHERE DATE(cdate) BETWEEN ? AND ?"; + + result = jdbcTemplate.queryForList( + sql, + fromDate, + toDate); + } + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "Error"); + response.put("message", e.getMessage()); + } + + return response; + } + + public Map getZoneActivity( + + String fromDate, + String toDate) { + + Map response = new HashMap<>(); + + try { + + String sql = ""; + + List> result; + + // ✅ PAGE LOAD -> fetch all data without date filter + if (fromDate == null || fromDate.isBlank() + || toDate == null || toDate.isBlank()) { + + sql = + + "SELECT " + + + "am.zone, " + + + // ✅ total complaints + "COUNT(DISTINCT il1.id) AS total_complaint_count, " + + + // ✅ completed + "COUNT(DISTINCT CASE " + + "WHEN il1.final_status IN ('completed','verified') " + + "THEN il1.id END) " + + "AS total_complaint_closed_count, " + + + // ✅ pending + "COUNT(DISTINCT CASE " + + "WHEN il1.final_status = 'created' " + + "THEN il1.id END) " + + "AS total_complaint_pending_count " + + + "FROM asset_master am " + + + "LEFT JOIN asset_list al " + + "ON al.am_id = am.id " + + + "LEFT JOIN issue_list1 il1 " + + "ON il1.assetlist_id = al.id " + + + "GROUP BY am.zone " + + + "ORDER BY am.zone"; + + result = jdbcTemplate.queryForList(sql); + + } else { + + // ✅ SEARCH BUTTON -> apply date filter + sql = + + "SELECT " + + + "am.zone, " + + + // ✅ total complaints + "COUNT(DISTINCT il1.id) AS total_complaint_count, " + + + // ✅ completed + "COUNT(DISTINCT CASE " + + "WHEN il1.final_status IN ('completed','verified') " + + "THEN il1.id END) " + + "AS total_complaint_closed_count, " + + + // ✅ pending + "COUNT(DISTINCT CASE " + + "WHEN il1.final_status = 'created' " + + "THEN il1.id END) " + + "AS total_complaint_pending_count " + + + "FROM asset_master am " + + + "LEFT JOIN asset_list al " + + "ON al.am_id = am.id " + + + "LEFT JOIN issue_list1 il1 " + + "ON il1.assetlist_id = al.id " + + "AND DATE(il1.cdate) BETWEEN ? AND ? " + + + "GROUP BY am.zone " + + + "ORDER BY am.zone"; + + result = jdbcTemplate.queryForList( + sql, + fromDate, + toDate); + } + + response.put("status", "success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "error"); + response.put("message", e.getMessage()); + } + + return response; + } + + public Map getWardActivity( + + String zone, + String fromDate, + String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("am.ward, "); + + // total + sql.append("COUNT(DISTINCT il1.id) "); + sql.append("AS total_complaint_count, "); + + // completed + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN il1.final_status IN ('completed','verified') "); + sql.append("THEN il1.id END) "); + sql.append("AS total_complaint_closed_count, "); + + // pending + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN il1.final_status = 'created' "); + sql.append("THEN il1.id END) "); + sql.append("AS total_complaint_pending_count "); + + sql.append("FROM asset_master am "); + + sql.append("LEFT JOIN asset_list al "); + sql.append("ON al.am_id = am.id "); + + sql.append("LEFT JOIN issue_list1 il1 "); + sql.append("ON il1.assetlist_id = al.id "); + + sql.append("WHERE am.zone = ? "); + params.add(zone); + + // date filter + if (fromDate != null && !fromDate.isBlank() + && toDate != null && !toDate.isBlank()) { + + sql.append("AND DATE(il1.cdate) BETWEEN ? AND ? "); + params.add(fromDate); + params.add(toDate); + } + + sql.append("GROUP BY am.ward "); + sql.append("ORDER BY am.ward "); + + List> result = jdbcTemplate.queryForList( + sql.toString(), + params.toArray()); + + response.put("status", "success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "error"); + response.put("message", e.getMessage()); + } + + return response; + } + // ================= SERVICE ================= + + public Map getSchemeWiseReport( + + String ward, + String fromDate, + String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + + List params = new ArrayList<>(); + + sql.append("SELECT "); + + sql.append("am.scheme_name, "); + sql.append("am.id as schemeid, "); + + // TOTAL + sql.append("COUNT(DISTINCT il1.id) "); + sql.append("AS total_complaint_count, "); + + // COMPLETED + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN il1.final_status IN ('completed','verified') "); + sql.append("THEN il1.id END) "); + sql.append("AS total_complaint_closed_count, "); + + // PENDING + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN il1.final_status = 'created' "); + sql.append("THEN il1.id END) "); + sql.append("AS total_complaint_pending_count "); + + sql.append("FROM asset_master am "); + + sql.append("LEFT JOIN asset_list al "); + sql.append("ON al.am_id = am.id "); + + sql.append("LEFT JOIN issue_list1 il1 "); + sql.append("ON il1.assetlist_id = al.id "); + + sql.append("WHERE am.ward = ? "); + params.add(ward); + + // DATE FILTER + if (fromDate != null && !fromDate.isBlank() + && toDate != null && !toDate.isBlank()) { + + sql.append("AND DATE(il1.cdate) BETWEEN ? AND ? "); + + params.add(fromDate); + params.add(toDate); + } + + sql.append("GROUP BY am.scheme_name, am.id "); + + sql.append("ORDER BY am.scheme_name "); + + List> result = jdbcTemplate.queryForList( + sql.toString(), + params.toArray()); + + response.put("status", "success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "error"); + response.put("message", e.getMessage()); + } + + return response; + } + + public Map getComplaintDetails( + + String ward, + String schemeid, + String fromDate, + String toDate) { + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + + List params = new ArrayList<>(); + + sql.append("SELECT "); + + sql.append("il1.id AS issuelist1_id, "); + sql.append("il1.final_status, "); + sql.append("DATE_FORMAT(il1.cdate,'%d-%m-%Y') AS created_date,"); + + // sql.append( + // "IFNULL(DATE_FORMAT(il1.cdate,'%d-%m-%Y %h:%i %p'),'') AS created_date, "); + + sql.append("IFNULL(il1.remarks,'') AS created_remarks, "); + + sql.append( + "CASE " + + "WHEN il1.before_image IS NOT NULL " + + "THEN CONCAT('" + fileBaseUrl + "/gccofficialapp/files', il1.before_image) " + + "ELSE '' END AS before_image, "); + + /* + * sql.append( + * "IFNULL(DATE_FORMAT(il2.cdate,'%d-%m-%Y %h:%i %p'),'') AS completed_date, "); + */ + sql.append("DATE_FORMAT(il2.cdate,'%d-%m-%Y') AS completed_date,"); + + sql.append( + "IFNULL(il2.remarks,'') AS completed_remarks, "); + + sql.append( + "CASE " + + "WHEN il2.after_image IS NOT NULL " + + "THEN CONCAT('" + fileBaseUrl + "/gccofficialapp/files', il2.after_image) " + + "ELSE '' END AS after_image, "); + + sql.append( + "IFNULL(DATE_FORMAT(il3.cdate,'%d-%m-%Y %h:%i %p'),'') AS verified_date, "); + + sql.append( + "IFNULL(il3.remarks,'') AS verified_remarks, "); + + sql.append( + "CASE " + + "WHEN il3.Verify_image IS NOT NULL " + + "THEN CONCAT('" + fileBaseUrl + "/gccofficialapp/files', il3.Verify_image) " + + "ELSE '' END AS verify_image "); + + sql.append("FROM issue_list1 il1 "); + + sql.append("LEFT JOIN asset_list al "); + sql.append("ON al.id = il1.assetlist_id "); + + sql.append("LEFT JOIN issue_list2 il2 "); + sql.append("ON il2.issuelist1_id = il1.id "); + + sql.append("LEFT JOIN issue_list3 il3 "); + sql.append("ON il3.issuelist1_id = il1.id "); + + sql.append("WHERE il1.ward = ? "); + params.add(ward); + + sql.append("AND al.am_id = ? "); + params.add(schemeid); + + // ✅ only if dates available + if (fromDate != null && !fromDate.isBlank() + && toDate != null && !toDate.isBlank()) { + + sql.append("AND DATE(il1.cdate) BETWEEN ? AND ? "); + + params.add(fromDate); + params.add(toDate); + } + + sql.append("ORDER BY il1.id DESC "); + + List> result = jdbcTemplate.queryForList( + sql.toString(), + params.toArray()); + + response.put("status", "success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "error"); + response.put("message", e.getMessage()); + } + + return response; + } + +} diff --git a/src/main/resources/templates/modules/vendorreport.html b/src/main/resources/templates/modules/vendorreport.html new file mode 100644 index 0000000..3ef6ba3 --- /dev/null +++ b/src/main/resources/templates/modules/vendorreport.html @@ -0,0 +1,2209 @@ + + + + + IE Complaints Report + + + + + + + + + + + + + +
+

IE Complaints Report

+
+ +
+ + + + + +
+
+ +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ +
+
+ + + +
+ +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Zone + + Hotspot + + RC Bin Overflow + + Unauthorized garbage dumping + + Tenement +
ComplaintsCompletedPendingComplaintsCompletedPendingComplaintsCompletedPendingComplaintsCompletedPending
+ +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 576982ab99f7f0a702cf0c2333879bbbf593c7e0 Mon Sep 17 00:00:00 2001 From: AJITHKUMAR12 <48044092+AJITHKUMAR12@users.noreply.github.com> Date: Wed, 27 May 2026 10:07:39 +0530 Subject: [PATCH 3/8] Added changes on the vendorreport image --- .../templates/modules/vendorreport.html | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/main/resources/templates/modules/vendorreport.html b/src/main/resources/templates/modules/vendorreport.html index 3ef6ba3..8db8416 100644 --- a/src/main/resources/templates/modules/vendorreport.html +++ b/src/main/resources/templates/modules/vendorreport.html @@ -471,16 +471,16 @@ - +
- /* - $(document).on('click', '.preview-img', function() { - const src = $(this).attr('src'); - $('#modalImage').attr('src', src); - $('#imageModal').modal('show'); - }); */ + + /*$(document).on('click', '.preview-img', function () { + const src = $(this).attr('src'); + $('#modalImage').attr('src', src); + $('#imageModal').modal('show'); + });*/ + $(document).on('click', '.preview-img', function () { + + let src = $(this).attr("src"); + + $("#modalImage").attr("src", src); + + $("#imageModal").modal("show"); + + }); $("#fromDate").on("change", function () { let fromDate = $(this).val(); @@ -856,7 +865,7 @@ ${wardCell} "05": "Zone 05 Ramky", "06": "Zone 06 Ramky", - "07": "Zone 07 GCC", + "07": "Zone 07 GCC & ramky", "08": "Zone 08 GCC", "09": "Zone 09 urbaser", From 99463e80ae59a6bc54cbe0ff8ccf0f7cb8ff94ad Mon Sep 17 00:00:00 2001 From: Hariprasath S <113695067+Hariprasath4022@users.noreply.github.com> Date: Wed, 27 May 2026 12:43:22 +0530 Subject: [PATCH 4/8] street vendor report added --- .../configuration/DataSourceConfig.java | 29 +- .../controller/MainController.java | 10 + .../controller/StreetVendorApiController.java | 46 ++ .../service/StreetVendorService.java | 475 ++++++++++++++ .../streetvendor/inspectiondetails.html | 543 ++++++++++++++++ .../modules/streetvendor/overalldetails.html | 577 ++++++++++++++++++ 6 files changed, 1678 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gcc/commissionerreview/controller/StreetVendorApiController.java create mode 100644 src/main/java/com/gcc/commissionerreview/service/StreetVendorService.java create mode 100644 src/main/resources/templates/modules/streetvendor/inspectiondetails.html create mode 100644 src/main/resources/templates/modules/streetvendor/overalldetails.html diff --git a/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java b/src/main/java/com/gcc/commissionerreview/configuration/DataSourceConfig.java index 38cde82..0c23936 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"; @@ -189,5 +189,30 @@ public class DataSourceConfig { dataSource.setPassword(dbpassword); return dataSource; } + + + ////////// GCC Street Vendor////////////////////// + @Bean(name = "mysqlStreetVendorDataSource") + public DataSource mysqlStreetVendorDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://" + host + "/gcc_street_vendor"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } + + ////////// Vending Committee ////////////////////// + @Bean(name = "mysqlVendingCommitteeDataSource") + public DataSource mysqlVendingCommitteeDataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); + dataSource.setUrl("jdbc:mysql://" + host + "/vendingcommitte"); + dataSource.setUsername("root"); + dataSource.setPassword(dbpassword); + return dataSource; + } + + } diff --git a/src/main/java/com/gcc/commissionerreview/controller/MainController.java b/src/main/java/com/gcc/commissionerreview/controller/MainController.java index 0561e6b..caa1222 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/MainController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/MainController.java @@ -325,5 +325,15 @@ public class MainController { public String vendorreport(Model model) { return "modules/vendorreport"; } + + @GetMapping("/stvendor/overallreport") + public String stvendor_overallreport(Model model) { + return "modules/streetvendor/overalldetails"; + } + + @GetMapping("/stvendor/inspectiondetails") + public String stvendor_inspectiondetails(Model model) { + return "modules/streetvendor/inspectiondetails"; + } } diff --git a/src/main/java/com/gcc/commissionerreview/controller/StreetVendorApiController.java b/src/main/java/com/gcc/commissionerreview/controller/StreetVendorApiController.java new file mode 100644 index 0000000..0e19ad2 --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/controller/StreetVendorApiController.java @@ -0,0 +1,46 @@ +package com.gcc.commissionerreview.controller; + +import java.util.List; +import java.util.Map; + +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 com.gcc.commissionerreview.service.StreetVendorService; + +@RestController +@RequestMapping("/commissionerreview/api/streetvendor") +public class StreetVendorApiController { + + @Autowired + private StreetVendorService stvservice; + + @GetMapping("/getzoneoveralldetails") + public List> getzoneoveralldetails(@RequestParam String fromdate,@RequestParam String todate) + { + + return stvservice.getzoneoveralldetails(fromdate,todate); + } + + @GetMapping("/getwardoveralldetails") + public List> getwardoveralldetails(@RequestParam String fromdate,@RequestParam String todate,@RequestParam String zone) + { + return stvservice.getwardoveralldetails(fromdate, todate, zone); + } + + @GetMapping("/getzoneinspectiondetails") + public List> getzoneinspectiondetails(@RequestParam String fromdate,@RequestParam String todate) + { + return stvservice.getzoneinspectiondetails(fromdate,todate); + } + + @GetMapping("/getwardinspectiondetails") + public List> getwardinspectiondetails(@RequestParam String fromdate,@RequestParam String todate,@RequestParam String zone) + { + return stvservice.getwardinspectiondetails(fromdate,todate,zone); + } + +} diff --git a/src/main/java/com/gcc/commissionerreview/service/StreetVendorService.java b/src/main/java/com/gcc/commissionerreview/service/StreetVendorService.java new file mode 100644 index 0000000..beac4ca --- /dev/null +++ b/src/main/java/com/gcc/commissionerreview/service/StreetVendorService.java @@ -0,0 +1,475 @@ +package com.gcc.commissionerreview.service; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.ArrayList; +import java.util.List; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.core.env.Environment; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +@Service +public class StreetVendorService { + + private final Environment environment; + + private String fileBaseUrl; + + @Autowired + private JdbcTemplate gccstrTemplate; + + @Autowired + private JdbcTemplate vendingcommitteTemplate; + + public StreetVendorService(Environment environment) { + this.environment = environment; + this.fileBaseUrl = environment.getProperty("fileBaseUrl"); + } + + @Autowired + public void setDataSource1(@Qualifier("mysqlVendingCommitteeDataSource") DataSource dataSource) { + this.vendingcommitteTemplate = new JdbcTemplate(dataSource); + } + + @Autowired + public void setDataSource2(@Qualifier("mysqlStreetVendorDataSource") DataSource dataSource) { + this.gccstrTemplate = new JdbcTemplate(dataSource); + } + + public List> getzoneoveralldetails(String fromdate, String todate) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.zone AS zone, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. Assistant Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS assistant_processed, "); + + // 3. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + // 4. ARO Processed + sql.append(" COUNT(DISTINCT va2.vdid) AS aro_processed, "); + + // 5. EE Processed + sql.append(" COUNT(DISTINCT va3.vdid) AS ee_processed, "); + + // 6. Committee Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS committee_processed, "); + + // 7. Total Processed + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) AS total_processed, "); + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) "); + + sql.append(" ) AS pending, "); + + // 9. Processed within 30 days + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vrl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" WHEN vpl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vpl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" END) AS processed_within_30_days "); + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_2 va2 "); + sql.append(" ON va2.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_3 va3 "); + sql.append(" ON va3.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_request_list vrl "); + sql.append(" ON vrl.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_postponed_list vpl "); + sql.append(" ON vpl.vdid = vd.id "); + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + sql.append(" AND vd.zone IS NOT NULL "); + + sql.append(" GROUP BY vd.zone "); + sql.append(" ORDER BY vd.zone "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message", "Zone-wise Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + } + + + public List> getwardoveralldetails(String fromdate, String todate, String zone) { + + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.ward AS ward, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. Assistant Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS assistant_processed, "); + + // 3. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + // 4. ARO Processed + sql.append(" COUNT(DISTINCT va2.vdid) AS aro_processed, "); + + // 5. EE Processed + sql.append(" COUNT(DISTINCT va3.vdid) AS ee_processed, "); + + // 6. Committee Processed + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) AS committee_processed, "); + + // 7. Total Processed + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) AS total_processed, "); + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vd.tamil_name IS NOT NULL AND vd.tamil_name <> '' "); + sql.append(" AND vd.tamil_f_h_name IS NOT NULL AND vd.tamil_f_h_name <> '' "); + sql.append(" AND vd.tamil_landmark IS NOT NULL AND vd.tamil_landmark <> '' "); + sql.append(" AND vd.tamil_gender IS NOT NULL AND vd.tamil_gender <> '' "); + sql.append(" AND vd.tamil_present_district IS NOT NULL AND vd.tamil_present_district <> '' "); + sql.append(" AND vd.tamil_vending_category IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" + COUNT(DISTINCT va1.vdid) "); + sql.append(" + COUNT(DISTINCT va2.vdid) "); + sql.append(" + COUNT(DISTINCT va3.vdid) "); + + sql.append(" + COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.vdid IS NOT NULL OR vpl.vdid IS NOT NULL "); + sql.append(" THEN vd.id "); + sql.append(" END) "); + + sql.append(" ) "); + + sql.append(" ) AS pending, "); + + // 9. Processed within 30 days + sql.append(" COUNT(DISTINCT CASE "); + sql.append(" WHEN vrl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vrl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" WHEN vpl.cdate IS NOT NULL "); + sql.append(" AND DATEDIFF(vpl.cdate, vd.cdate) <= 30 "); + sql.append(" THEN vd.id "); + + sql.append(" END) AS processed_within_30_days "); + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_2 va2 "); + sql.append(" ON va2.vdid = vd.id "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_3 va3 "); + sql.append(" ON va3.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_request_list vrl "); + sql.append(" ON vrl.vdid = vd.id "); + + sql.append(" LEFT JOIN vendingcommitte.vendor_postponed_list vpl "); + sql.append(" ON vpl.vdid = vd.id "); + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + if(zone != null && !zone.isEmpty()) { + sql.append(" AND vd.zone = ? "); + params.add(zone); + } + + sql.append(" AND vd.zone IS NOT NULL AND vd.ward IS NOT NULL "); + + + sql.append(" GROUP BY vd.ward "); + sql.append(" ORDER BY vd.ward "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message","Zone:"+ zone+" Ward-wise Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + + } + + public List> getzoneinspectiondetails(String fromdate, String todate) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.zone AS zone, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + + + sql.append(" COUNT(DISTINCT va1.vdid) "); + + + sql.append(" ) AS li_pending "); + + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + sql.append(" AND vd.zone IS NOT NULL "); + + sql.append(" GROUP BY vd.zone "); + sql.append(" ORDER BY vd.zone "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message", "LI Inspection Zone-wise Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + } + + public List> getwardinspectiondetails(String fromdate, String todate, String zone) { + + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT "); + sql.append(" vd.ward AS ward, "); + + // 1. Application Received + sql.append(" COUNT(DISTINCT vd.id) AS application_received, "); + + // 2. LI Processed + sql.append(" COUNT(DISTINCT va1.vdid) AS li_processed, "); + + + // 8. Pending + sql.append(" ( "); + sql.append(" COUNT(DISTINCT vd.id) - "); + + sql.append(" ( "); + + sql.append(" COUNT(DISTINCT va1.vdid) "); + + sql.append(" ) "); + + sql.append(" ) AS li_pending "); + + + sql.append(" FROM gcc_street_vendor.vendor_details vd "); + + sql.append(" LEFT JOIN gcc_street_vendor.vendor_approval_level_1 va1 "); + sql.append(" ON va1.vdid = vd.id "); + + + sql.append(" WHERE vd.isactive = 1 "); + + List params = new ArrayList<>(); + + if (fromdate != null && !fromdate.isEmpty() + && todate != null && !todate.isEmpty()) { + + sql.append(" AND DATE(vd.cdate) BETWEEN ? AND ? "); + params.add(fromdate); + params.add(todate); + } + + if(zone != null && !zone.isEmpty()) { + sql.append(" AND vd.zone = ? "); + params.add(zone); + } + + sql.append(" AND vd.zone IS NOT NULL AND vd.ward IS NOT NULL "); + + sql.append(" GROUP BY vd.ward "); + sql.append(" ORDER BY vd.ward "); + + List> reportList = + gccstrTemplate.queryForList(sql.toString(), params.toArray()); + + Map response = new LinkedHashMap<>(); + response.put("status", "Success"); + response.put("message","Zone:"+ zone+" Ward-wise Inspection Report"); + response.put("data", reportList); + + return Collections.singletonList(response); + + } + + +} diff --git a/src/main/resources/templates/modules/streetvendor/inspectiondetails.html b/src/main/resources/templates/modules/streetvendor/inspectiondetails.html new file mode 100644 index 0000000..e700960 --- /dev/null +++ b/src/main/resources/templates/modules/streetvendor/inspectiondetails.html @@ -0,0 +1,543 @@ + + + + StreetVendor Inspection Details + + + + + + + + + + + + +
+

Street Vendor - Inspection Report (LI)

+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ +
+ + + + + + + + + + + + + +
ZoneApplication ReceivedLI ProcessedLI Pending
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/modules/streetvendor/overalldetails.html b/src/main/resources/templates/modules/streetvendor/overalldetails.html new file mode 100644 index 0000000..2ca5020 --- /dev/null +++ b/src/main/resources/templates/modules/streetvendor/overalldetails.html @@ -0,0 +1,577 @@ + + + + StreetVendor Overall Details + + + + + + + + + + + + +
+

Street Vendor - Zonewise Report

+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
ZoneApplication ReceivedApplication ProcessedTotal ProcessedPending Processed within 30 days
Assistant ProcessedLI ProcessedARO ProcessedEE ProcessedCommittee Processed
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From d1a0187baaf03f71de9a022cd55bfe5160598bcf Mon Sep 17 00:00:00 2001 From: AJITHKUMAR12 <48044092+AJITHKUMAR12@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:39:17 +0530 Subject: [PATCH 5/8] fetched data based on status --- .../controller/IeComplaintsApiController.java | 5 +- .../controller/TenementController.java | 2 + .../service/IeComplaintsService.java | 14 +- .../service/TenementService.java | 8 + .../templates/modules/vendorreport.html | 458 +++++++++++++++++- 5 files changed, 462 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java b/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java index 08cd1ff..fab2faa 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/IeComplaintsApiController.java @@ -116,10 +116,11 @@ public class IeComplaintsApiController { @RequestParam String ward, @RequestParam(required = false) String complaintId, @RequestParam(required = false) String fromDate, - @RequestParam(required = false) String toDate) { + @RequestParam(required = false) String toDate, + @RequestParam(required = false) String status) { return ResponseEntity.ok( - iecomplaintservice.getvendorComplaintDetails(zone, ward, complaintId, fromDate, toDate)); + iecomplaintservice.getvendorComplaintDetails(zone, ward, complaintId, fromDate, toDate, status)); } @GetMapping("/vendorcomplaintDashboard") diff --git a/src/main/java/com/gcc/commissionerreview/controller/TenementController.java b/src/main/java/com/gcc/commissionerreview/controller/TenementController.java index 2221723..f9c94b3 100644 --- a/src/main/java/com/gcc/commissionerreview/controller/TenementController.java +++ b/src/main/java/com/gcc/commissionerreview/controller/TenementController.java @@ -83,6 +83,7 @@ public class TenementController { @RequestParam String ward, @RequestParam String schemeid, + @RequestParam(required = false) String status, @RequestParam(required = false) String fromDate, @RequestParam(required = false) String toDate) { @@ -90,6 +91,7 @@ public class TenementController { return tenementService.getComplaintDetails( ward, schemeid, + status, fromDate, toDate); diff --git a/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java index c89cd67..d16d4cb 100644 --- a/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java +++ b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java @@ -695,7 +695,7 @@ public class IeComplaintsService { } public Map getvendorComplaintDetails(String zone, String ward, - String complaintId, String fromDate, String toDate) { + String complaintId, String fromDate, String toDate, String status) { Map response = new HashMap<>(); @@ -748,6 +748,18 @@ public class IeComplaintsService { params.add(complaintId); } + if (status != null && !status.equalsIgnoreCase("all")) { + + if (status.equalsIgnoreCase("completed")) { + + sql.append(" AND comp.ref_id IS NOT NULL "); + + } else if (status.equalsIgnoreCase("pending")) { + + sql.append(" AND comp.ref_id IS NULL "); + } + } + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { sql.append("AND ( "); diff --git a/src/main/java/com/gcc/commissionerreview/service/TenementService.java b/src/main/java/com/gcc/commissionerreview/service/TenementService.java index feddca9..ea7a73d 100644 --- a/src/main/java/com/gcc/commissionerreview/service/TenementService.java +++ b/src/main/java/com/gcc/commissionerreview/service/TenementService.java @@ -384,6 +384,7 @@ public class TenementService { String ward, String schemeid, + String status, String fromDate, String toDate) { @@ -466,6 +467,13 @@ public class TenementService { params.add(toDate); } + // STATUS FILTER + if (status != null && !status.isEmpty()) { + + sql.append("AND il1.final_status = ? "); + params.add(status); + } + sql.append("ORDER BY il1.id DESC "); List> result = jdbcTemplate.queryForList( diff --git a/src/main/resources/templates/modules/vendorreport.html b/src/main/resources/templates/modules/vendorreport.html index 8db8416..8f3418f 100644 --- a/src/main/resources/templates/modules/vendorreport.html +++ b/src/main/resources/templates/modules/vendorreport.html @@ -325,7 +325,7 @@ - Complaint Name + Before Image Complaint Created Date @@ -366,7 +366,7 @@
- +
@@ -415,7 +415,7 @@
-
+
@@ -612,7 +612,7 @@ html += ` - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1355,9 +1534,38 @@ ${ten.total_complaint_count} } $("#wardTableBody").html(html); + $('#wardTable').DataTable({ + + destroy: true, + + dom: 'Bfrtip', + + pageLength: 15, + + scrollX: true, + + buttons: [ + + { + extend: 'excelHtml5', + text: 'Download Excel', + title: 'Ward_Activity_Report' + }, + + { + extend: 'pdfHtml5', + text: 'Download PDF', + title: 'Ward_Activity_Report', + orientation: 'landscape', + pageSize: 'A3' + } + + ] + }); $("#wardModal").modal("show"); + }); } function openWardModalworking(zone) { @@ -1550,7 +1758,72 @@ ${ten.total_complaint_count} }); } - function openComplaintDetails(zone, ward, complaintId) { + function openComplaintDetails(zone, ward, complaintId, status) { + + let fromDate = $("#fromDate").val(); + let toDate = $("#toDate").val(); + + $.get("/commissionerreview/api/iecomplaints/vendorcomplaintDetails", { + + zone: zone, + ward: ward, + complaintId: complaintId, + status: status, + fromDate: fromDate, + toDate: toDate + + }, function (res) { + + console.log(res); + + let data = res.data || []; + + let html = ""; + + data.forEach(item => { + + html += ` + + + + + + + + + + + + + + + + + + +`; + }); + + $("#complaintDetailsBody").html(html); + + $("#complaintModal").modal("show"); + }); + } + function openComplaintDetailslastworkinglive(zone, ward, complaintId) { let fromDate = $("#fromDate").val(); let toDate = $("#toDate").val(); @@ -1580,8 +1853,8 @@ ${ten.total_complaint_count} @@ -1749,15 +2022,86 @@ height="80">` : 0} - + + + + + + + + + `; } $("#schemeTableBody").html(html); + if ($.fn.DataTable.isDataTable('#schemeTable')) { + $('#schemeTable').DataTable().destroy(); + } + + $('#schemeTable').DataTable({ + + destroy: true, + + dom: 'Bfrtip', + + pageLength: 10, + + buttons: [ + + { + extend: 'excelHtml5', + text: 'Download Excel', + title: 'Tenement_Scheme_Report' + }, + + { + extend: 'pdfHtml5', + text: 'Download PDF', + title: 'Tenement_Scheme_Report', + orientation: 'landscape', + pageSize: 'A4' + } + + ] + }); // ATTACH EVENT FIRST $('#wardModal').one('hidden.bs.modal', function () { @@ -1779,7 +2123,8 @@ height="80">` } function openTenementComplaintModal( ward, - schemeid + schemeid, + status ) { console.log("WARD", ward); console.log("SCHEMEID", schemeid); @@ -1792,13 +2137,17 @@ height="80">` { ward: ward, schemeid: schemeid, - + status: status, fromDate: fromDate, toDate: toDate }, function (res) { console.log("RES=", res); + if ($.fn.DataTable.isDataTable('#tenementComplaintTable')) { + + $('#tenementComplaintTable').DataTable().destroy(); + } let data = res.data || []; @@ -1852,6 +2201,38 @@ ${row.after_image ? `
- ${item.complaint_id == 6 + ${item.complaint_id == 6 ? 'RC Bin Overflow' - : item.complaint_name} + : item.complaint_id == 12 + ? 'Unauthorized garbage dumping' + : item.complaint_name + }
+
+ @@ -425,9 +428,10 @@ - - - + + + + @@ -638,6 +642,10 @@ ${c.after_image ? ` 0 ? ` +onclick="openComplaintDetails('${zone}','${ward}','4','verified')"> ${h.completed_count} @@ -1412,7 +1426,7 @@ ${t.total_count} ${t.completed_count > 0 ? ` +onclick="openComplaintDetails('${zone}','${ward}','6','verified')"> ${t.completed_count} @@ -1481,7 +1495,7 @@ ${g.total_count} ${g.completed_count > 0 ? ` +onclick="openComplaintDetails('${zone}','${ward}','12','verified')"> ${g.completed_count} @@ -1759,6 +1773,12 @@ ${ten.total_complaint_count} }); } function openComplaintDetails(zone, ward, complaintId, status) { + if ($.fn.DataTable.isDataTable('#complaintTable')) { + $('#complaintTable').DataTable().clear().destroy(); + } + + // Clear old rows + $("#complaintDetailsBody").empty(); let fromDate = $("#fromDate").val(); let toDate = $("#toDate").val(); @@ -1800,30 +1820,84 @@ style="width:80px;height:80px;" class="preview-img" style="cursor:pointer" >` + + - + + + + + `; }); $("#complaintDetailsBody").html(html); + /*if ($.fn.DataTable.isDataTable('#complaintTable')) { + $('#complaintTable').DataTable().destroy(); + }*/ + + $('#complaintTable').DataTable({ + + pageLength: 10, + + lengthMenu: [ + [10, 25, 50, 100], + [10, 25, 50, 100] + ], + + searching: true, + + ordering: false, + + dom: 'Bfrtip', + + buttons: [ + + { + extend: 'excelHtml5', + text: 'Download Excel', + title: 'Complaint_Details_Ward' + }, + + { + extend: 'pdfHtml5', + text: 'Download PDF', + title: 'Complaint_Details_Ward', + + orientation: 'landscape', + + pageSize: 'A4', + + exportOptions: { + columns: [1, 2, 3, 5, 6, 7, 8] + } + } + + ] + }); $("#complaintModal").modal("show"); }); } function openComplaintDetailslastworkinglive(zone, ward, complaintId) { + if ($.fn.DataTable.isDataTable('#complaintTable')) { + $('#complaintTable').DataTable().destroy(); + } + + // Clear old rows + $("#complaintDetailsBody").empty(); let fromDate = $("#fromDate").val(); let toDate = $("#toDate").val(); @@ -2035,7 +2109,7 @@ ${row.total_complaint_closed_count > 0 onclick="openTenementComplaintModal( '${ward}', '${row.schemeid}', -'completed' +'verified' )"> ${row.total_complaint_closed_count} @@ -2056,7 +2130,7 @@ ${row.total_complaint_pending_count > 0 onclick="openTenementComplaintModal( '${ward}', '${row.schemeid}', -'created' +'pending' )"> ${row.total_complaint_pending_count} @@ -2185,6 +2259,9 @@ ${row.total_complaint_pending_count} ${row.after_image ? `` : 'Pending'} + + + - + @@ -209,6 +218,7 @@ + @@ -228,6 +238,7 @@ + @@ -265,6 +276,7 @@ + @@ -597,7 +609,7 @@ $('#pageLoader').hide(); let i = 1; - let licT = 0, licC = 0, licP = 0; + let licT = 0, licC = 0, licP = 0, licR = 0; let petT = 0, petC = 0, petP = 0; let comT = 0, comC = 0, comP = 0; @@ -627,6 +639,7 @@ + @@ -874,15 +898,35 @@ + + `); }); + // Show rejected column only for License + if (type === 'LICENSE') { + $("#rejectedHeader").show(); + $(".rejected-col").show(); + } else { + $("#rejectedHeader").hide(); + $(".rejected-col").hide(); + } /* ================= EXPORT ================= */ initWardExport( title.replace(/\s+/g, '_') + (fromDate && toDate ? `_${fromDate}_to_${toDate}` : '') ); + if ($.fn.DataTable.isDataTable('#wardTable')) { + + const table = $('#wardTable').DataTable(); + + if (type === 'LICENSE') { + table.column(4).visible(true); + } else { + table.column(4).visible(false); + } + } new bootstrap.Modal(document.getElementById("wardModal")).show(); } diff --git a/src/main/resources/templates/modules/vendorreport.html b/src/main/resources/templates/modules/vendorreport.html index fb97786..bad2a89 100644 --- a/src/main/resources/templates/modules/vendorreport.html +++ b/src/main/resources/templates/modules/vendorreport.html @@ -1209,6 +1209,9 @@ ${( let fromDate = $("#fromDate").val(); let toDate = $("#toDate").val(); + console.log("ZONE", zone); + console.log("fromDate", fromDate); + console.log("toDate", toDate); $.when( @@ -2052,7 +2055,9 @@ height="80">` function openSchemeModal(ward) { console.log("WARD =", ward); - + if ($.fn.DataTable.isDataTable('#schemeTable')) { + $('#schemeTable').DataTable().destroy(); + } let fromDate = $("#fromDate").val(); let toDate = $("#toDate").val(); @@ -2146,9 +2151,6 @@ ${row.total_complaint_pending_count} } $("#schemeTableBody").html(html); - if ($.fn.DataTable.isDataTable('#schemeTable')) { - $('#schemeTable').DataTable().destroy(); - } $('#schemeTable').DataTable({ @@ -2442,7 +2444,7 @@ ${w.ward} let total = Number(z.completed_count) + Number(z.pending_count); let zoneCell = total > 0 - ? `${z.zone_name}` + ? `${z.zone_name}` : `${z.zone_name}`; html += ` From 272d7a3ba3b10fe286091f41140e700c890c7db3 Mon Sep 17 00:00:00 2001 From: AJITHKUMAR12 <48044092+AJITHKUMAR12@users.noreply.github.com> Date: Mon, 8 Jun 2026 16:04:46 +0530 Subject: [PATCH 8/8] fetched ie pending and vendor pending on vendorreport page --- .../service/IeComplaintsService.java | 105 +++++- .../service/TenementService.java | 31 +- .../templates/modules/pet/petreport.html | 9 +- .../templates/modules/vendorreport.html | 328 ++++++++++++++++-- 4 files changed, 429 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java index ba66e14..e97a57a 100644 --- a/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java +++ b/src/main/java/com/gcc/commissionerreview/service/IeComplaintsService.java @@ -597,7 +597,7 @@ public class IeComplaintsService { sql.append("ON zm.zone_name = cd.zone "); sql.append("AND cd.is_delete = 0 "); sql.append("AND cd.is_active = 1 "); - sql.append("AND cd.complaint_id IN (4,6,12) "); + sql.append("AND cd.complaint_id IN (3,4,6,12) "); if (complaintId != null) { @@ -712,15 +712,16 @@ public class IeComplaintsService { String complaintId, String fromDate, String toDate) { - System.out.println("zone:" + zone); - System.out.println("complaintId:" + complaintId); - System.out.println("fromDate:" + fromDate); - System.out.println("toDate:" + toDate); Map response = new HashMap<>(); try { + System.out.println("zone:" + zone); + System.out.println("complaintId:" + complaintId); + System.out.println("fromDate:" + fromDate); + System.out.println("toDate:" + toDate); + StringBuilder sql = new StringBuilder(); List params = new ArrayList<>(); @@ -730,10 +731,41 @@ public class IeComplaintsService { // TOTAL sql.append("COUNT(DISTINCT cd.ref_id) AS total_count, "); - // COMPLETED = VERIFIED + // VENDOR PENDING + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN cd.status IN ('pending') "); + + sql.append("THEN cd.ref_id END) AS vendor_pending_count, "); + + // IE PENDING = COMPLETED + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN cd.status IN ('completed') "); + + sql.append("THEN cd.ref_id END) AS ie_pending_count, "); + + // COMPLETED sql.append("COUNT(DISTINCT CASE "); sql.append("WHEN cd.status = 'verified' "); + sql.append("THEN cd.ref_id END) AS completed_count "); + + sql.append("FROM gcc_street_vendor.ward_master wm "); + + sql.append("LEFT JOIN complaint_details cd "); + sql.append("ON wm.ward_name = cd.ward "); + sql.append("AND cd.zone = ? "); + params.add(zone); + + sql.append("AND cd.is_delete = 0 "); + sql.append("AND cd.is_active = 1 "); + sql.append("AND cd.complaint_id IN (3,4,6,12) "); + + if (complaintId != null && !complaintId.isEmpty()) { + + sql.append("AND cd.complaint_id = ? "); + params.add(complaintId); + } + if (fromDate != null && !fromDate.isEmpty() && toDate != null && !toDate.isEmpty()) { @@ -742,6 +774,55 @@ public class IeComplaintsService { params.add(toDate); } + sql.append("WHERE wm.zone_id = ? "); + params.add(zone); + + sql.append("GROUP BY wm.ward_name "); + sql.append("ORDER BY wm.ward_name "); + + List> result = jdbcTemplate.queryForList(sql.toString(), params.toArray()); + + response.put("status", "Success"); + response.put("data", result); + + } catch (Exception e) { + + e.printStackTrace(); + + response.put("status", "Error"); + response.put("message", e.getMessage()); + } + + return response; + } + + public Map getvendorWardActivitywithoutvendorpendingandiepending( + String zone, + String complaintId, + String fromDate, + String toDate) { + System.out.println("zone:" + zone); + System.out.println("complaintId:" + complaintId); + System.out.println("fromDate:" + fromDate); + System.out.println("toDate:" + toDate); + + Map response = new HashMap<>(); + + try { + + StringBuilder sql = new StringBuilder(); + List params = new ArrayList<>(); + + sql.append("SELECT "); + sql.append("wm.ward_name AS ward, "); + + // TOTAL + sql.append("COUNT(DISTINCT cd.ref_id) AS total_count, "); + + // COMPLETED = VERIFIED + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN cd.status = 'verified' "); + sql.append("THEN cd.ref_id END) AS completed_count, "); // PENDING = PENDING + COMPLETED @@ -899,7 +980,7 @@ public class IeComplaintsService { sql.append( "CASE " + "WHEN cd.status = 'verified' THEN 'Completed' " + - "WHEN cd.status IN ('pending','completed') THEN 'Pending' " + + "WHEN cd.status IN ('completed') THEN 'Pending' " + "ELSE cd.status " + "END AS ie_status, "); @@ -984,7 +1065,7 @@ public class IeComplaintsService { sql.append("AND cd.is_delete = 0 "); sql.append("AND cd.is_active = 1 "); - sql.append("AND cd.complaint_id IN (4,6,12) "); + sql.append("AND cd.complaint_id IN (3,4,6,12) "); if (complaintId != null && !complaintId.isEmpty()) { @@ -1001,8 +1082,12 @@ public class IeComplaintsService { } else if (status.equalsIgnoreCase("pending")) { - sql.append("AND cd.status IN ('pending','completed') "); + sql.append("AND cd.status IN ('pending') "); + } else if (status.equalsIgnoreCase("completed")) { + + sql.append("AND cd.status IN ('completed') "); } + } if (fromDate != null && !fromDate.isEmpty() @@ -1180,7 +1265,7 @@ public class IeComplaintsService { sql.append("LEFT JOIN complaint_details cd "); sql.append("ON cm.complaint_id = cd.complaint_id "); - sql.append("WHERE cm.complaint_id IN (4,6,12) "); + sql.append("WHERE cm.complaint_id IN (3,4,6,12) "); sql.append("GROUP BY cm.complaint_id, cm.complaint_name "); diff --git a/src/main/java/com/gcc/commissionerreview/service/TenementService.java b/src/main/java/com/gcc/commissionerreview/service/TenementService.java index ea5b3b1..f8de61d 100644 --- a/src/main/java/com/gcc/commissionerreview/service/TenementService.java +++ b/src/main/java/com/gcc/commissionerreview/service/TenementService.java @@ -427,9 +427,14 @@ public class TenementService { sql.append("AS total_complaint_closed_count, "); sql.append("COUNT(DISTINCT CASE "); - sql.append("WHEN il1.final_status IN ('created','completed') "); + sql.append("WHEN il1.final_status = 'created' "); sql.append("THEN il1.id END) "); - sql.append("AS total_complaint_pending_count "); + sql.append("AS total_complaint_vendor_pending_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN il1.final_status = 'completed' "); + sql.append("THEN il1.id END) "); + sql.append("AS total_complaint_ie_pending_count "); sql.append("FROM gcc_street_vendor.ward_master wm "); @@ -579,13 +584,18 @@ public class TenementService { sql.append("COUNT(DISTINCT CASE "); sql.append("WHEN il1.final_status = 'verified' "); sql.append("THEN il1.id END) "); - sql.append("AS total_complaint_closed_count, "); + sql.append("AS total_complaint_verified_count, "); // PENDING = CREATED + COMPLETED sql.append("COUNT(DISTINCT CASE "); - sql.append("WHEN il1.final_status IN ('created','completed') "); + sql.append("WHEN il1.final_status IN ('created') "); sql.append("THEN il1.id END) "); - sql.append("AS total_complaint_pending_count "); + sql.append("AS total_complaint_vendor_pending_count, "); + + sql.append("COUNT(DISTINCT CASE "); + sql.append("WHEN il1.final_status IN ('completed') "); + sql.append("THEN il1.id END) "); + sql.append("AS total_complaint_ie_pending_count "); sql.append("FROM asset_master am "); @@ -829,11 +839,16 @@ public class TenementService { sql.append("AND il1.final_status = 'verified' "); - } else if ("pending".equalsIgnoreCase(status)) { + } else if ("created".equalsIgnoreCase(status)) { - sql.append( - "AND il1.final_status IN ('created','completed') "); + sql.append("AND il1.final_status = 'created' "); } + + else if ("completed".equalsIgnoreCase(status)) { + + sql.append("AND il1.final_status = 'completed' "); + } + } sql.append("ORDER BY il1.id DESC "); diff --git a/src/main/resources/templates/modules/pet/petreport.html b/src/main/resources/templates/modules/pet/petreport.html index 3d6d1d1..b294943 100644 --- a/src/main/resources/templates/modules/pet/petreport.html +++ b/src/main/resources/templates/modules/pet/petreport.html @@ -1079,10 +1079,11 @@ // 🔹 Make table use full width doc.content[1].table.widths = [ - '25%', // Ward - '25%', // Total - '25%', // Approved - '25%' // Pending + '20%', // Ward + '20%', // Total + '20%', // Approved + '20%', // Pending + '20%' // Rejected ]; // 🔹 Reduce margins to gain width diff --git a/src/main/resources/templates/modules/vendorreport.html b/src/main/resources/templates/modules/vendorreport.html index bad2a89..6a20cbe 100644 --- a/src/main/resources/templates/modules/vendorreport.html +++ b/src/main/resources/templates/modules/vendorreport.html @@ -106,6 +106,81 @@ } } + + /* Sweeping */ + #zoneTable tbody td:nth-child(2), + #zoneTable tbody td:nth-child(3), + #zoneTable tbody td:nth-child(4) { + background-color: #f8f9fa; + } + + /* Hotspot - Dark */ + #zoneTable tbody td:nth-child(5), + #zoneTable tbody td:nth-child(6), + #zoneTable tbody td:nth-child(7) { + background-color: #E1ECFC; + } + + /* RC Bin Overflow */ + #zoneTable tbody td:nth-child(8), + #zoneTable tbody td:nth-child(9), + #zoneTable tbody td:nth-child(10) { + background-color: #f8f9fa; + } + + /* Unauthorized Garbage Dumping - Dark */ + #zoneTable tbody td:nth-child(11), + #zoneTable tbody td:nth-child(12), + #zoneTable tbody td:nth-child(13) { + background-color: #E1ECFC; + } + + /* Tenement */ + #zoneTable tbody td:nth-child(14), + #zoneTable tbody td:nth-child(15), + #zoneTable tbody td:nth-child(16) { + background-color: #f8f9fa; + } + + /* Sweeping */ + #wardTable tbody td:nth-child(2), + #wardTable tbody td:nth-child(3), + #wardTable tbody td:nth-child(4), + #wardTable tbody td:nth-child(5) { + background-color: #f8f9fa; + } + + /* Hotspot */ + #wardTable tbody td:nth-child(6), + #wardTable tbody td:nth-child(7), + #wardTable tbody td:nth-child(8), + #wardTable tbody td:nth-child(9) { + background-color: #E1ECFC; + } + + /* RC Bin Overflow */ + #wardTable tbody td:nth-child(10), + #wardTable tbody td:nth-child(11), + #wardTable tbody td:nth-child(12), + #wardTable tbody td:nth-child(13) { + background-color: #f8f9fa; + } + + /* Unauthorized Garbage Dumping */ + #wardTable tbody td:nth-child(14), + #wardTable tbody td:nth-child(15), + #wardTable tbody td:nth-child(16), + #wardTable tbody td:nth-child(17) { + background-color: #E1ECFC; + } + + /* Tenement */ + #wardTable tbody td:nth-child(18), + #wardTable tbody td:nth-child(19), + #wardTable tbody td:nth-child(20), + #wardTable tbody td:nth-child(21) { + background-color: #f8f9fa; + } @@ -200,6 +275,9 @@ + + + + + + @@ -272,32 +355,49 @@ + + - + - + - + - + + + + + + + - + + + - + + + - + + + - + + + + @@ -378,7 +478,8 @@ - + + @@ -771,6 +872,14 @@ ${wardCell} let toDate = $("#toDate").val(); $.when( + // SWEeping + $.get("/commissionerreview/api/iecomplaints/vendorzoneActivity", { + + fromDate: fromDate, + toDate: toDate, + complaintId: 3 + + }), // HOTSPOT $.get("/commissionerreview/api/iecomplaints/vendorzoneActivity", { @@ -809,6 +918,7 @@ ${wardCell} ).done(function ( + sweepingRes, hotspotRes, transportRes, garbageRes, @@ -816,6 +926,7 @@ ${wardCell} ) { + let sweepingData = sweepingRes[0].data || []; let hotspotData = hotspotRes[0].data || []; let transportData = transportRes[0].data || []; let garbageData = garbageRes[0].data || []; @@ -830,11 +941,17 @@ ${wardCell} $("#zoneTable tbody").empty(); // maps + let sweepingMap = {}; let hotspotMap = {}; let transportMap = {}; let garbageMap = {}; let tenementMap = {}; + sweepingData.forEach(item => { + + sweepingMap[item.zone_name] = item; + }); + hotspotData.forEach(item => { hotspotMap[item.zone_name] = item; @@ -903,6 +1020,7 @@ ${wardCell} let h = hotspotMap[zone] || {}; let t = transportMap[zone] || {}; let g = garbageMap[zone] || {}; + let s = sweepingMap[zone] || {}; let ten = tenementMap[zone] || { @@ -918,11 +1036,13 @@ ${wardCell} + + + + + + @@ -1215,6 +1341,16 @@ ${( $.when( + // SWEEPING + $.get("/commissionerreview/api/iecomplaints/vendorwardActivity", { + + zone: zone, + complaintId: 3, + fromDate: fromDate, + toDate: toDate + + }), + // HOTSPOT $.get("/commissionerreview/api/iecomplaints/vendorwardActivity", { @@ -1255,7 +1391,7 @@ ${( }) ).done(function ( - + sweepingRes, hotspotRes, transportRes, garbageRes, @@ -1263,6 +1399,7 @@ ${( ) { + let sweepingData = sweepingRes[0].data || []; let hotspotData = hotspotRes[0].data || []; let transportData = transportRes[0].data || []; let garbageData = garbageRes[0].data || []; @@ -1271,12 +1408,13 @@ ${( let html = ""; let maxLength = Math.max( - + sweepingData.length, hotspotData.length, transportData.length, garbageData.length, tenementData.length ); + console.log("SWEEPING DATA", sweepingData); console.log("HOTSPOT DATA", hotspotData); console.log("TRANSPORT DATA", transportData); console.log("GARBAGE DATA", garbageData); @@ -1296,12 +1434,14 @@ ${( for (let i = 0; i < maxLength; i++) { + let s = sweepingData[i] || {}; let h = hotspotData[i] || {}; let t = transportData[i] || {}; let g = garbageData[i] || {}; let ten = tenementData[i] || {}; let ward = + s.ward || h.ward || t.ward || g.ward || @@ -1317,6 +1457,62 @@ ${( + + + + + + + + + @@ -1441,12 +1654,12 @@ ${t.completed_count} + + @@ -1544,7 +1787,9 @@ ${ten.total_complaint_count} - + + + `; @@ -2108,7 +2353,7 @@ height="80">` + + + `; } @@ -2444,7 +2728,7 @@ ${w.ward} let total = Number(z.completed_count) + Number(z.pending_count); let zoneCell = total > 0 - ? `${z.zone_name}` + ? `${z.zone_name}` : `${z.zone_name}`; html += `
${c.complaint_name}${c.complaint_name} @@ -639,23 +639,30 @@ ${c.after_image ? ` - + + + - +${h.total_count > 0 ? + + ` + +${h.total_count} + +` + + : 0} + + + +${h.completed_count > 0 ? + + ` + +${h.completed_count} + +` + + : 0} + + +${h.pending_count > 0 ? + + ` + +${h.pending_count} + +` + + : 0} + + +${t.total_count > 0 ? - + ` + +${t.total_count} + +` + + : 0} + + + +${t.completed_count > 0 ? + + ` + +${t.completed_count} + +` + + : 0} + + +${t.pending_count > 0 ? + + ` + +${t.pending_count} + +` + + : 0} + + + +${g.total_count > 0 ? + + ` + +${g.total_count} + +` + + : 0} + + + +${g.completed_count > 0 ? + + ` + +${g.completed_count} + +` + + : 0} + + + +${g.pending_count > 0 ? + + ` + +${g.pending_count} + +` + + : 0} + +
+${item.before_image ? + + `` + + : 'No Image'} +${item.complaint_created_date || ''}${item.complaint_street_name || ''} +${item.after_image ? + + `` + + : 'Pending'} +${item.completion_date || 'Pending'}${item.completion_street_name || 'Pending'}
${row.complaint_name || ''} - ${row.complaint_created_date || ''}${row.total_complaint_closed_count || 0} + +${row.total_complaint_closed_count > 0 + + ? ` + +${row.total_complaint_closed_count} + +` + + : 0} + + + +${row.total_complaint_pending_count > 0 + + ? ` + +${row.total_complaint_pending_count} + +` + + : 0} -${row.total_complaint_pending_count || 0}
Rectified RemarksIE Status
Created Date Created Remarks Before ImageCompleted DateCompleted RemarksAfter ImageRectified DateRectified RemarksRectified ImageIE Status ${item.complaint_created_date || ''} ${item.complaint_street_name || ''}${item.complaint_remarks || ''} -${item.after_image ? - - `` - + ${item.after_image && item.after_image !== 'Pending' + ? `` : 'Pending'} + ${item.completion_date || 'Pending'}${item.completion_street_name || 'Pending'}${item.completion_remarks || 'Pending'}${item.ie_status || 'Pending'}
${row.ie_status || 'pending'}ZoneLicenseLicense Pet Vaccination Community Vaccination
Total Completed PendingRejected Total Completed Pending0 0 00 0 0 0Total Approved PendingRejected
${lic.approved_Licenses} ${lic.pending_Licenses}${lic.rejected_Licenses} @@ -656,6 +669,7 @@ licT += lic.total_licensesApplied; licC += lic.approved_Licenses; licP += lic.pending_Licenses; + licR += lic.rejected_Licenses; petT += vacc.total; petC += vacc.completed; @@ -673,6 +687,7 @@ $(".lic-total").text(licT); $(".lic-completed").text(licC); $(".lic-pending").text(licP); + $(".lic-rejected").text(licR); $(".pet-total").text(petT); $(".pet-completed").text(petC); @@ -764,6 +779,7 @@ async function openWardModal(type, zoneNo) { $("#wardTableBody").empty(); + $("#rejectedHeader").hide(); // Destroy previous DataTable if ($.fn.DataTable.isDataTable('#wardTable')) { @@ -782,8 +798,10 @@ let title = ''; let wardList = []; + /* ================= LICENSE ================= */ if (type === 'LICENSE') { + $("#rejectedHeader").show(); title = `Zone ${zoneNo} – License`; $("#modalZone").text(title); @@ -800,7 +818,8 @@ wardName: obj.wardName, total: obj.total_licensesApplied, completed: obj.approved_Licenses, - pending: obj.pending_Licenses + pending: obj.pending_Licenses, + rejected: obj.rejected_Licenses || 0 }); } }); @@ -867,6 +886,11 @@ /* ================= RENDER MODAL TABLE ================= */ let i = 1; wardList.forEach(w => { + let rejectedColumn = ''; + + + + $("#wardTableBody").append(`
${w.total} ${w.completed} ${w.pending}${w.rejected || 0}
Zone + Sweeping + @@ -225,6 +303,11 @@
ComplaintsCompletedPending Complaints Completed
WardSweeping HotspotHotspot RC Bin OverflowRC Bin Overflow Unauthorized garbage dumpingUnauthorized garbage dumping TenementTenement
TotalCompletedVendor PendingIE Pending Total CompletedPendingVendor PendingIE Pending Total CompletedPendingVendor PendingIE Pending Total CompletedPendingVendor PendingIE Pending Total CompletedPendingVendor PendingIE Pending
Scheme Name Total CompletedPendingVendor PendingIE Pending
+ ${( g.total_count > 0 || h.total_count > 0 || t.total_count > 0 || + s.total_count > 0 || ten.total > 0 ) @@ -943,6 +1063,12 @@ ${( ${s.total_count || 0}${s.completed_count || 0}${s.pending_count || 0} ${h.total_count || 0}${displayWard} + +${s.total_count > 0 ? + + ` + + ${s.total_count} + ` + + : 0} + + +${s.completed_count > 0 ? + + ` + + ${s.completed_count} + ` + + : 0} + + + +${s.vendor_pending_count > 0 ? + + ` + + ${s.vendor_pending_count} + ` + + : 0} + + + +${s.ie_pending_count > 0 ? + + ` + + ${s.ie_pending_count} + ` + + : 0} + + -${t.pending_count > 0 ? +${t.vendor_pending_count > 0 ? ` -${t.pending_count} +${t.vendor_pending_count} ` @@ -1454,8 +1667,23 @@ ${t.pending_count} + +${t.ie_pending_count > 0 ? + + + ` + +${t.ie_pending_count} + +` + + : 0} + ${ten.total_complaint_closed_count || 0}${ten.total_complaint_pending_count || 0}${ten.total_complaint_vendor_pending_count || 0}${ten.total_complaint_ie_pending_count || 0}
-${row.total_complaint_closed_count > 0 +${row.total_complaint_verified_count > 0 ? ` -${row.total_complaint_closed_count} +${row.total_complaint_verified_count} ` @@ -2127,7 +2372,7 @@ ${row.total_complaint_closed_count} - + + + + +${row.total_complaint_vendor_pending_count > 0 + + ? ` + +${row.total_complaint_vendor_pending_count} + +` + + : 0} + + + +${row.total_complaint_ie_pending_count > 0 + + ? ` + +${row.total_complaint_ie_pending_count} + ` : 0}