9 changed files with 7105 additions and 0 deletions
-
8.classpath
-
12src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java
-
33src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/MainController.java
-
207src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Controller/ShelterInspectionController.java
-
139src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/MasterShelterService.java
-
1783src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterInspectionService.java
-
2817src/main/resources/templates/modules/shelterinspection/dashboard.html
-
433src/main/resources/templates/modules/shelterinspection/shelterlist.html
-
1673src/main/resources/templates/modules/shelterinspection/visitlist.html
@ -0,0 +1,33 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.shelterinspection.Controller; |
||||
|
|
||||
|
import org.springframework.stereotype.Controller; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
|
||||
|
@Controller("ShelterInspectionController") |
||||
|
@RequestMapping("/gcc/shelterinspection") |
||||
|
public class MainController { |
||||
|
|
||||
|
@GetMapping("/dashboard") |
||||
|
public String Dashboard() { |
||||
|
return "modules/shelterinspection/dashboard"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/shelterlist") |
||||
|
public String ShelterList() { |
||||
|
return "modules/shelterinspection/shelterlist"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/visitlist") |
||||
|
public String VisitList() { |
||||
|
return "modules/shelterinspection/visitlist"; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/complaintlist") |
||||
|
public String ComplaintList() { |
||||
|
return "modules/shelterinspection/complaintlist"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,207 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.shelterinspection.Controller; |
||||
|
|
||||
|
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 org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import in.gov.chennaicorporation.gccoffice.shelterinspection.Service.MasterShelterService; |
||||
|
import in.gov.chennaicorporation.gccoffice.shelterinspection.Service.ShelterInspectionService; |
||||
|
|
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/gcc/api/shelterinspection") |
||||
|
public class ShelterInspectionController { |
||||
|
|
||||
|
@Autowired |
||||
|
private ShelterInspectionService shelterApiService; |
||||
|
|
||||
|
@Autowired |
||||
|
private MasterShelterService masterShelterService; |
||||
|
|
||||
|
private final RestTemplate restTemplate = new RestTemplate(); |
||||
|
|
||||
|
@GetMapping("/Sheltercount") |
||||
|
public ResponseEntity<Map<String, Object>> getTotalCount() { |
||||
|
|
||||
|
int count = shelterApiService.getTotalShelterCount(); |
||||
|
|
||||
|
Map<String, Object> response = new HashMap<>(); |
||||
|
response.put("totalShelterCount", count); |
||||
|
|
||||
|
return ResponseEntity.ok(response); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/dashboard") |
||||
|
public Map<String,Object> dashboard( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value){ |
||||
|
|
||||
|
return shelterApiService.getDashboardData(type,value); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/top5Shelters") |
||||
|
public List<Map<String,Object>> top5Shelters( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value){ |
||||
|
|
||||
|
return shelterApiService.getTop5Shelters(type,value); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/regionSummary") |
||||
|
public List<Map<String,Object>> regionSummary( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value){ |
||||
|
|
||||
|
return shelterApiService.getRegionSummary(type,value); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/fundReceivedSummary") |
||||
|
public List<Map<String,Object>> fundSummary( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value){ |
||||
|
|
||||
|
return shelterApiService.getFundReceivedSummary(type,value); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/fundReceivedShelterDetails") |
||||
|
public List<Map<String, Object>> fundReceivedShelterDetails( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value) { |
||||
|
|
||||
|
return shelterApiService.getFundReceivedShelterDetails( type, value); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/monthlyTrends") |
||||
|
public List<Map<String,Object>> monthlyTrends( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value){ |
||||
|
|
||||
|
return shelterApiService.getMonthlyTrends(type,value); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/weeklyVisits") |
||||
|
public List<Map<String,Object>> weeklyVisits( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value){ |
||||
|
|
||||
|
List<Map<String,Object>> results = shelterApiService.getWeeklyVisits(type,value); |
||||
|
System.out.println("Weekly Visits Results:" +results); |
||||
|
|
||||
|
return results; |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/latestVisitShelters") |
||||
|
public List<Map<String,Object>> latestVisitShelters( |
||||
|
@RequestParam String type, |
||||
|
@RequestParam String value){ |
||||
|
|
||||
|
return shelterApiService.getLatestVisitShelters(type,value); |
||||
|
} |
||||
|
|
||||
|
// @GetMapping("/dashboard") |
||||
|
// public Map<String, Object> dashboard() { |
||||
|
// return shelterApiService.getDashboardData(); |
||||
|
// } |
||||
|
|
||||
|
|
||||
|
// @GetMapping("/top5Shelters") |
||||
|
// public List<Map<String, Object>> getTop5Shelters() { |
||||
|
// return shelterApiService.getTop5Shelters(); |
||||
|
// } |
||||
|
|
||||
|
// @GetMapping("/regionSummary") |
||||
|
// public List<Map<String, Object>> regionWiseSummary() { |
||||
|
// return shelterApiService.getRegionSummary(); |
||||
|
// } |
||||
|
|
||||
|
// @GetMapping("/fundReceivedSummary") |
||||
|
// public List<Map<String, Object>> fundReceivedSummary() { |
||||
|
// return shelterApiService.getFundReceivedSummary(); |
||||
|
// } |
||||
|
// |
||||
|
// @GetMapping("/monthlyTrends") |
||||
|
// public List<Map<String,Object>> monthlyTrends(){ |
||||
|
// return shelterApiService.getMonthlyTrends(); |
||||
|
// } |
||||
|
// |
||||
|
// @GetMapping("/weeklyVisits") |
||||
|
// public List<Map<String,Object>> weeklyVisits(){ |
||||
|
// return shelterApiService.getWeeklyVisits(); |
||||
|
// } |
||||
|
// |
||||
|
// @GetMapping("/latestVisitShelters") |
||||
|
// public List<Map<String,Object>> latestVisitShelters(){ |
||||
|
// return shelterApiService.getLatestVisitShelters(); |
||||
|
// } |
||||
|
|
||||
|
@GetMapping("/shelterList") |
||||
|
public List<Map<String,Object>> shelterList( |
||||
|
@RequestParam(required = false) String zone, |
||||
|
@RequestParam(required = false) String category) { |
||||
|
return shelterApiService.getShelterList(zone, category); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@GetMapping("/visitList") |
||||
|
public List<Map<String,Object>> visitList( |
||||
|
@RequestParam(required=false) String fromDate, |
||||
|
@RequestParam(required=false) String toDate, |
||||
|
@RequestParam(required=false) String zone, |
||||
|
@RequestParam(required=false) String cdo){ |
||||
|
|
||||
|
return shelterApiService.getVisitList( fromDate, toDate, zone, cdo); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/visitDetails") |
||||
|
public Map<String,Object> visitDetails( |
||||
|
@RequestParam String surveyId){ |
||||
|
|
||||
|
return shelterApiService.getVisitDetails(surveyId); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@GetMapping("/questions") |
||||
|
public ResponseEntity<?> getQuestions() { |
||||
|
|
||||
|
return restTemplate.getForEntity( |
||||
|
"https://gccservices.in/gccofficialapp/api/shelterinspection/questions?cid=1", |
||||
|
Object.class |
||||
|
); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// @GetMapping("/shelterList") |
||||
|
// public List<Map<String,Object>> shelterList(){ |
||||
|
// return shelterApiService.getShelterList(); |
||||
|
// } |
||||
|
|
||||
|
@GetMapping("/categories") |
||||
|
public List<String> getCategories() { |
||||
|
return masterShelterService.getCategoryList(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/zones") |
||||
|
public List<String> getZones() { |
||||
|
return masterShelterService.getZoneList(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/cdos") |
||||
|
public List<Map<String, Object>> getCdos() { |
||||
|
return masterShelterService.getCdos(); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/years") |
||||
|
public List<Integer> getYears() { |
||||
|
return masterShelterService.getAvailableYears(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,139 @@ |
|||||
|
package in.gov.chennaicorporation.gccoffice.shelterinspection.Service; |
||||
|
|
||||
|
|
||||
|
import java.util.Collections; |
||||
|
import java.util.Comparator; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.Objects; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
import javax.sql.DataSource; |
||||
|
|
||||
|
|
||||
|
|
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Qualifier; |
||||
|
import org.springframework.core.ParameterizedTypeReference; |
||||
|
import org.springframework.http.HttpMethod; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.jdbc.core.JdbcTemplate; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
@Service |
||||
|
public class MasterShelterService { |
||||
|
|
||||
|
@Autowired |
||||
|
private JdbcTemplate jdbcTemplate; |
||||
|
|
||||
|
@Autowired |
||||
|
public void setDataSource(@Qualifier("mysqlShelterinspectionDataSource") DataSource dataSource) { |
||||
|
this.jdbcTemplate = new JdbcTemplate(dataSource); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private final RestTemplate restTemplate = new RestTemplate(); |
||||
|
|
||||
|
private static final String API_URL = "https://nightshelter.gccservices.in/api/shelters/"; |
||||
|
|
||||
|
// Category Dropdown |
||||
|
|
||||
|
public List<String> getCategoryList() { |
||||
|
|
||||
|
ResponseEntity<List<Map<String, Object>>> response = |
||||
|
restTemplate.exchange( |
||||
|
API_URL, |
||||
|
HttpMethod.GET, |
||||
|
null, |
||||
|
new ParameterizedTypeReference<List<Map<String, Object>>>() {}); |
||||
|
|
||||
|
List<Map<String, Object>> apiList = response.getBody(); |
||||
|
|
||||
|
if (apiList == null) { |
||||
|
return Collections.emptyList(); |
||||
|
} |
||||
|
|
||||
|
return apiList.stream() |
||||
|
.map(x -> String.valueOf(x.get("category"))) |
||||
|
.filter(Objects::nonNull) |
||||
|
.distinct() |
||||
|
.sorted() |
||||
|
.collect(Collectors.toList()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//Zone Dropdown |
||||
|
|
||||
|
public List<String> getZoneList() { |
||||
|
|
||||
|
ResponseEntity<List<Map<String, Object>>> response = |
||||
|
restTemplate.exchange( |
||||
|
API_URL, |
||||
|
HttpMethod.GET, |
||||
|
null, |
||||
|
new ParameterizedTypeReference<List<Map<String, Object>>>() {}); |
||||
|
|
||||
|
List<Map<String, Object>> apiList = response.getBody(); |
||||
|
|
||||
|
if (apiList == null) { |
||||
|
return Collections.emptyList(); |
||||
|
} |
||||
|
|
||||
|
return apiList.stream() |
||||
|
.map(x -> String.valueOf(x.get("zone"))) |
||||
|
.filter(Objects::nonNull) |
||||
|
.distinct() |
||||
|
.sorted(Comparator.comparingInt(z -> |
||||
|
Integer.parseInt(z.replaceAll("[^0-9]", "")))) |
||||
|
.collect(Collectors.toList()); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//CDO Dropdown |
||||
|
|
||||
|
public List<Map<String,Object>> getCdos(){ |
||||
|
|
||||
|
String sql=""" |
||||
|
SELECT DISTINCT |
||||
|
uid, |
||||
|
user_name |
||||
|
FROM login_details |
||||
|
ORDER BY user_name |
||||
|
"""; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// Year Dropdown |
||||
|
|
||||
|
public List<Integer> getAvailableYears() { |
||||
|
|
||||
|
String sql = """ |
||||
|
SELECT DISTINCT YEAR(cdate) AS year |
||||
|
FROM night_shelter_inspection_response |
||||
|
WHERE isactive = 1 |
||||
|
AND isdelete = 0 |
||||
|
ORDER BY YEAR(cdate) DESC |
||||
|
"""; |
||||
|
|
||||
|
return jdbcTemplate.queryForList(sql, Integer.class); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// SHelter List |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
1783
src/main/java/in/gov/chennaicorporation/gccoffice/shelterinspection/Service/ShelterInspectionService.java
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2817
src/main/resources/templates/modules/shelterinspection/dashboard.html
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,433 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en" dir=""> |
||||
|
<html xmlns:th="http://www.thymeleaf.org"> |
||||
|
|
||||
|
<head th:replace="~{fragments/modules/base/head :: head}"></head> |
||||
|
|
||||
|
<!-- DataTables --> |
||||
|
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.8/css/dataTables.bootstrap5.min.css"> |
||||
|
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.4.2/css/buttons.bootstrap5.min.css"> |
||||
|
<style> |
||||
|
|
||||
|
.table-responsive { |
||||
|
width: 100%; |
||||
|
} |
||||
|
|
||||
|
</style> |
||||
|
|
||||
|
<body> |
||||
|
<div class="wrapper"> |
||||
|
<header th:replace="~{fragments/modules/base/header :: header}"></header> |
||||
|
|
||||
|
<div class="page-wrap"> |
||||
|
<div th:replace="~{fragments/modules/base/menu :: menu}"></div> |
||||
|
<div class="main-content"> |
||||
|
<div class="container-fluid"> |
||||
|
|
||||
|
<div class="page-header"> |
||||
|
<div class="row align-items-center"> |
||||
|
|
||||
|
<!-- LEFT SIDE --> |
||||
|
<div class="col-lg-6"> |
||||
|
<div class="page-header-title d-flex align-items-center"> |
||||
|
<i class="ik ik-thumbs-up bg-blue me-2"></i> |
||||
|
<h5 class="mb-0">Shelters List</h5> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<!-- BREADCRUMB (SEPARATE ROW) --> |
||||
|
<div class="row mt-2"> |
||||
|
<div class="col-lg-12"> |
||||
|
<nav class="breadcrumb-container"> |
||||
|
<ol class="breadcrumb"> |
||||
|
<li class="breadcrumb-item"> |
||||
|
<a href="/index"><i class="ik ik-home"></i></a> |
||||
|
</li> |
||||
|
<li class="breadcrumb-item active"> Shelters List</li> |
||||
|
</ol> |
||||
|
</nav> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<hr> |
||||
|
|
||||
|
<!-- Filters Section --> |
||||
|
<div class="row mb-3"> |
||||
|
|
||||
|
<div class="col-md-2"> |
||||
|
<select id="zone" class="form-control"> |
||||
|
<option value="">All Zones</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-2"> |
||||
|
<select id="category" class="form-control"> |
||||
|
<option value="">All Categories</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
<!-- <div class="col-md-6"> |
||||
|
<label class="form-label fw-semibold me-2">From Date:</label> |
||||
|
<input type="date" id="fromDate" class="form-control d-inline-block" style="width:150px;"> |
||||
|
|
||||
|
<label class="form-label fw-semibold me-2">To Date:</label> |
||||
|
<input type="date" id="toDate" class="form-control d-inline-block" style="width:150px;"> |
||||
|
</div> --> |
||||
|
|
||||
|
|
||||
|
|
||||
|
<div class="col-md-2"> |
||||
|
<button class="btn btn-primary w-100" onclick="loadShelterList()">Search</button> |
||||
|
</div> |
||||
|
<div class="col-md-2"> |
||||
|
<button class="btn btn-secondary w-100" onclick="resetFilters()">Reset</button> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
<div class="table-responsive"> |
||||
|
|
||||
|
<table id="shelterListTable" class="table table-bordered table-striped dt-responsive nowrap w-100"> |
||||
|
|
||||
|
<thead class="thead-dark"> |
||||
|
<tr> |
||||
|
<th>S.No</th> |
||||
|
<th>SHELTER</th> |
||||
|
<th>ZONE</th> |
||||
|
<th>CATEGORY</th> |
||||
|
<th>RESIDENTS</th> |
||||
|
<th>STATUS</th> |
||||
|
<th>Latest Visit</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
|
||||
|
<tbody></tbody> |
||||
|
|
||||
|
</table> |
||||
|
|
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
<footer th:replace="~{fragments/modules/base/footer :: footer}"></footer> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div th:replace="~{fragments/modules/base/script :: script}"></div> |
||||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> |
||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script> |
||||
|
|
||||
|
|
||||
|
<script src="https://cdn.datatables.net/1.13.8/js/jquery.dataTables.min.js"></script> |
||||
|
<script src="https://cdn.datatables.net/1.13.8/js/dataTables.bootstrap5.min.js"></script> |
||||
|
<script src="https://cdn.datatables.net/responsive/2.5.0/js/dataTables.responsive.min.js"></script> |
||||
|
|
||||
|
<!-- DataTable Buttons --> |
||||
|
<script src="https://cdn.datatables.net/buttons/2.4.2/js/dataTables.buttons.min.js"></script> |
||||
|
<script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.bootstrap5.min.js"></script> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script> |
||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script> |
||||
|
<script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.html5.min.js"></script> |
||||
|
|
||||
|
|
||||
|
<script th:inline="javascript"> |
||||
|
|
||||
|
$(document).ready(function () { |
||||
|
|
||||
|
loadDropdowns(); |
||||
|
loadShelterList(); |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
function resetFilters() { |
||||
|
|
||||
|
$("#zone").val(""); |
||||
|
$("#category").val(""); |
||||
|
|
||||
|
loadShelterList(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
function loadShelterList() { |
||||
|
|
||||
|
if ($.fn.DataTable.isDataTable('#shelterListTable')) { |
||||
|
$('#shelterListTable').DataTable().destroy(); |
||||
|
} |
||||
|
|
||||
|
$("#shelterListTable tbody").empty(); |
||||
|
|
||||
|
$.ajax({ |
||||
|
|
||||
|
url: "/gcc/api/shelterinspection/shelterList", |
||||
|
type: "GET", |
||||
|
|
||||
|
data: { |
||||
|
zone: $("#zone").val(), |
||||
|
category: $("#category").val() |
||||
|
}, |
||||
|
|
||||
|
success: function(response) { |
||||
|
|
||||
|
let rows = ""; |
||||
|
|
||||
|
$.each(response, function(i, item) { |
||||
|
|
||||
|
rows += ` |
||||
|
<tr> |
||||
|
<td>${i + 1}</td> |
||||
|
|
||||
|
<td> |
||||
|
<strong>${item.shelterName || "-"}</strong> |
||||
|
</td> |
||||
|
|
||||
|
<td>${item.zone || "-"}</td> |
||||
|
|
||||
|
<td>${formatCategory(item.category)}</td> |
||||
|
|
||||
|
<td class="text-center"> |
||||
|
${item.totalResidents || 0} |
||||
|
</td> |
||||
|
|
||||
|
<td>${getStatusBadge(item.totalResidents)}</td> |
||||
|
|
||||
|
<td>${item.latestVisit || "-"}</td> |
||||
|
</tr> |
||||
|
`; |
||||
|
}); |
||||
|
|
||||
|
$("#shelterListTable tbody").html(rows); |
||||
|
|
||||
|
$('#shelterListTable').DataTable({ |
||||
|
|
||||
|
responsive: true, |
||||
|
pageLength: 10, |
||||
|
ordering: true, |
||||
|
|
||||
|
dom: 'Bfrtip', |
||||
|
|
||||
|
buttons: [ |
||||
|
{ |
||||
|
extend: 'pageLength', |
||||
|
className: 'btn btn-warning' |
||||
|
}, |
||||
|
{ |
||||
|
extend: 'excelHtml5', |
||||
|
text: 'Excel', |
||||
|
className: 'btn btn-success' |
||||
|
}, |
||||
|
{ |
||||
|
extend: 'pdfHtml5', |
||||
|
text: 'PDF', |
||||
|
className: 'btn btn-secondary', |
||||
|
orientation: 'landscape', |
||||
|
pageSize: 'A4' |
||||
|
} |
||||
|
] |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
error: function() { |
||||
|
|
||||
|
Swal.fire({ |
||||
|
icon: 'error', |
||||
|
title: 'Error', |
||||
|
text: 'Unable to load shelter list.' |
||||
|
}); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/* function loadShelterList() { |
||||
|
|
||||
|
if ($.fn.DataTable.isDataTable('#shelterListTable')) { |
||||
|
$('#shelterListTable').DataTable().destroy(); |
||||
|
} |
||||
|
|
||||
|
$("#shelterListTable tbody").empty(); |
||||
|
|
||||
|
$.ajax({ |
||||
|
|
||||
|
url: "/gcc/api/shelterinspection/shelterList", |
||||
|
type: "GET", |
||||
|
|
||||
|
success: function (response) { |
||||
|
|
||||
|
let rows = ""; |
||||
|
|
||||
|
$.each(response, function (i, item) { |
||||
|
|
||||
|
rows += ` |
||||
|
<tr> |
||||
|
|
||||
|
<td>${i + 1}</td> |
||||
|
|
||||
|
<td> |
||||
|
<strong>${item.shelterName || "-"}</strong> |
||||
|
</td> |
||||
|
|
||||
|
<td>${item.zone || "-"}</td> |
||||
|
|
||||
|
<td>${formatCategory(item.category)}</td> |
||||
|
|
||||
|
<td class="text-center"> |
||||
|
${item.totalResidents || 0} |
||||
|
</td> |
||||
|
|
||||
|
<td> |
||||
|
${getStatusBadge(item.totalResidents)} |
||||
|
</td> |
||||
|
|
||||
|
<td>${item.latestVisit || "-"}</td> |
||||
|
|
||||
|
</tr> |
||||
|
`; |
||||
|
}); |
||||
|
|
||||
|
$("#shelterListTable tbody").html(rows); |
||||
|
|
||||
|
$('#shelterListTable').DataTable({ |
||||
|
|
||||
|
responsive: true, |
||||
|
|
||||
|
pageLength: 10, |
||||
|
|
||||
|
ordering: true, |
||||
|
|
||||
|
dom: 'Bfrtip', |
||||
|
|
||||
|
buttons: [ |
||||
|
{ |
||||
|
extend: 'pageLength', |
||||
|
className: 'btn btn-warning' |
||||
|
}, |
||||
|
{ |
||||
|
extend: 'excelHtml5', |
||||
|
text: 'Excel', |
||||
|
className: 'btn btn-success' |
||||
|
}, |
||||
|
{ |
||||
|
extend: 'pdfHtml5', |
||||
|
text: 'PDF', |
||||
|
className: 'btn btn-secondary', |
||||
|
orientation: 'landscape', |
||||
|
pageSize: 'A4' |
||||
|
} |
||||
|
] |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
error: function () { |
||||
|
|
||||
|
alert("Unable to load Shelter List."); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
} */ |
||||
|
|
||||
|
function formatCategory(category) { |
||||
|
|
||||
|
if (!category) return "-"; |
||||
|
|
||||
|
return category |
||||
|
.replace(/-/g, " ") |
||||
|
.replace(/\b\w/g, function(letter) { |
||||
|
return letter.toUpperCase(); |
||||
|
}); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
function getStatusBadge(residents){ |
||||
|
|
||||
|
if(residents >= 100){ |
||||
|
|
||||
|
return '<span class="badge badge-success">Good</span>'; |
||||
|
|
||||
|
}else if(residents >= 25){ |
||||
|
|
||||
|
return '<span class="badge badge-warning">Average</span>'; |
||||
|
|
||||
|
}else{ |
||||
|
|
||||
|
return '<span class="badge badge-danger">Poor</span>'; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
function loadDropdowns() { |
||||
|
|
||||
|
// Zone |
||||
|
$.ajax({ |
||||
|
url: "/gcc/api/shelterinspection/zones", |
||||
|
type: "GET", |
||||
|
success: function(data) { |
||||
|
|
||||
|
let options = '<option value="">All Zones</option>'; |
||||
|
|
||||
|
data.forEach(function(zone) { |
||||
|
options += `<option value="${zone}">${zone}</option>`; |
||||
|
}); |
||||
|
|
||||
|
$("#zone").html(options); |
||||
|
|
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// Category |
||||
|
$.ajax({ |
||||
|
url: "/gcc/api/shelterinspection/categories", |
||||
|
type: "GET", |
||||
|
success: function(data) { |
||||
|
|
||||
|
let options = '<option value="">All Categories</option>'; |
||||
|
|
||||
|
data.forEach(function(category) { |
||||
|
|
||||
|
let text = category |
||||
|
.replace(/-/g, " ") |
||||
|
.replace(/\b\w/g, function(c) { |
||||
|
return c.toUpperCase(); |
||||
|
}); |
||||
|
|
||||
|
options += `<option value="${category}">${text}</option>`; |
||||
|
}); |
||||
|
|
||||
|
$("#category").html(options); |
||||
|
|
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
</script> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
||||
1673
src/main/resources/templates/modules/shelterinspection/visitlist.html
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue