Browse Source

implemented enhacements for pendinglist and report

main
AJITHKUMAR12 3 months ago
parent
commit
8fd4682601
  1. 309
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/PendinglistApicontroller.java
  2. 11
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/ReportApicontroller.java
  3. 673
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/PendinglistService.java
  4. 27
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/ReportService.java
  5. 922
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/service/RegisterService.java
  6. 911
      gcc_officer_portal/src/main/resources/templates/modules/greencommittee/pendinglist.html
  7. 489
      gcc_officer_portal/src/main/resources/templates/modules/greencommittee/reports.html

309
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/PendinglistApicontroller.java

@ -24,160 +24,159 @@ public class PendinglistApicontroller {
@Autowired
private PendinglistService pendinglistService;
@GetMapping("/getzones")
public List<Map<String, Object>> ViewZoneDropdown() {
return pendinglistService.ViewZoneDropdown();
}
@GetMapping("/getwardbyzone")
public List<Map<String, Object>> ViewWardDropdown(@RequestParam String zone) {
return pendinglistService.ViewWardDropdown(zone);
}
@GetMapping("/dropdown-Event")
public ResponseEntity<List<Map<String, Object>>> ViewDropdownEvent() {
try {
List<Map<String, Object>> result = pendinglistService.ViewDropdownEvent();
return ResponseEntity.ok(result);
} catch (Exception e) {
Map<String, Object> error = new HashMap<>();
error.put("error", "Unable to fetch event list");
error.put("details", e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(Collections.singletonList(error));
}
}
// @GetMapping("/getgreencommitteelist")
// public List<Map<String, Object>> getgreencommitteelist(@RequestParam String date,
// @RequestParam String zones) {
//
// List<String> refnums = pendinglistService.getrefnums(date, zones);
// //System.out.println("refnums="+refnums);
// List<Map<String, Object>> savedids=pendinglistService.getvcsavedrefids();
// //System.err.println("savedids="+savedids);
// // Convert to List<String>
// List<String> savedRefIds = savedids.stream()
// .map(m -> m.get("ref_id").toString())
// .toList();
//
// //System.out.println("savedRefIds=" + savedRefIds);
//
// List<Map<String, Object>> finalList = new ArrayList<>();
//
// if (refnums.isEmpty()) {
// return Collections.emptyList();
// }
//
// // REMOVE already saved ref_ids
// List<String> filteredRefIds = refnums.stream()
// .filter(ref -> !savedRefIds.contains(ref))
// .toList();
//
// //System.out.println("filteredRefIds="+filteredRefIds);
//
// for (String ref : filteredRefIds) {
// Map<String, Object> data = pendinglistService.getlistdata(ref);
// if (data != null && !data.isEmpty()) {
// finalList.add(data);
// }
// }
//
// return finalList;
// }
@GetMapping("/getgreencommitteelist")
public List<Map<String, Object>> getgreencommitteelist(
@RequestParam String date, @RequestParam String zones) {
List<Map<String,Object>> refnums = pendinglistService.getrefnums(date, zones);
System.out.println("refnums="+refnums);
List<Map<String,Object>> savedIds = pendinglistService.getvcsavedrefids();
System.out.println("savedIds="+savedIds);
// Convert savedIds → List<String>
List<String> savedRefList = new ArrayList<>();
for (Map<String,Object> m : savedIds) {
savedRefList.add(m.get("ref_id").toString());
}
List<Map<String,Object>> finalList = new ArrayList<>();
for (Map<String,Object> row : refnums) {
String refId = row.get("ref_id").toString();
Integer inspReinsId = row.get("latest_reinspection_id") != null ?
Integer.parseInt(row.get("latest_reinspection_id").toString())
: null;
// Skip if already committee decided
if (savedRefList.contains(refId)) continue;
// Get reinspection latest id
Integer dbLatest = pendinglistService.getLatestReinspectionId(refId);
// Rule: if inspection reinspection ID is NULL but in DB exists → skip
if (inspReinsId == null && dbLatest != null) continue;
// Rule: if BOTH exist AND not equal → skip
if (inspReinsId != null && dbLatest != null && !inspReinsId.equals(dbLatest))
continue;
// 👍 Valid, add final data
Map<String,Object> data = pendinglistService.getlistdata(refId);
if (data != null && !data.isEmpty()) {
System.out.println("inside="+refId);
finalList.add(data);
}
}
return finalList;
}
@GetMapping("/getdetailsbyrefid")
public Map<String, Object> getdetailsbyrefid(@RequestParam String refid) {
return pendinglistService.getdetailsbyrefid(refid);
}
@GetMapping("/getCommitteeActions")
public List<Map<String, Object>> getCommitteeActions() {
return pendinglistService.getCommitteeActions();
}
@PostMapping("/savecommittee")
public Map<String, Object> saveCommittee(@RequestBody Map<String, Object> payload) {
String refId = (String) payload.get("ref_id");
String remarks = (String) payload.get("remarks");
int userId = Integer.parseInt(payload.get("userId").toString());
int meetingid = Integer.parseInt(payload.get("meetingid").toString());
List<Map<String, Object>> decisions = (List<Map<String, Object>>) payload.get("decisions");
return pendinglistService.saveCommittee(refId, remarks, meetingid, userId, decisions);
}
@PostMapping("/savereinspection")
public Map<String, Object> saveReInspection(@RequestBody Map<String, Object> payload) {
String refId = payload.get("ref_id").toString();
int committeeAction = Integer.parseInt(payload.get("committee_action").toString());
int meetingId = Integer.parseInt(payload.get("meeting_id").toString());
String remarks = payload.get("remarks") != null ? payload.get("remarks").toString() : null;
int userId = Integer.parseInt(payload.get("userId").toString());
return pendinglistService.saveReInspection(refId, committeeAction, meetingId, remarks, userId);
}
public List<Map<String, Object>> ViewZoneDropdown() {
return pendinglistService.ViewZoneDropdown();
}
@GetMapping("/getwardbyzone")
public List<Map<String, Object>> ViewWardDropdown(@RequestParam String zone) {
return pendinglistService.ViewWardDropdown(zone);
}
@GetMapping("/dropdown-Event")
public ResponseEntity<List<Map<String, Object>>> ViewDropdownEvent() {
try {
List<Map<String, Object>> result = pendinglistService.ViewDropdownEvent();
return ResponseEntity.ok(result);
} catch (Exception e) {
Map<String, Object> error = new HashMap<>();
error.put("error", "Unable to fetch event list");
error.put("details", e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(Collections.singletonList(error));
}
}
// @GetMapping("/getgreencommitteelist")
// public List<Map<String, Object>> getgreencommitteelist(@RequestParam String
// date,
// @RequestParam String zones) {
//
// List<String> refnums = pendinglistService.getrefnums(date, zones);
// //System.out.println("refnums="+refnums);
// List<Map<String, Object>> savedids=pendinglistService.getvcsavedrefids();
// //System.err.println("savedids="+savedids);
// // Convert to List<String>
// List<String> savedRefIds = savedids.stream()
// .map(m -> m.get("ref_id").toString())
// .toList();
//
// //System.out.println("savedRefIds=" + savedRefIds);
//
// List<Map<String, Object>> finalList = new ArrayList<>();
//
// if (refnums.isEmpty()) {
// return Collections.emptyList();
// }
//
// // REMOVE already saved ref_ids
// List<String> filteredRefIds = refnums.stream()
// .filter(ref -> !savedRefIds.contains(ref))
// .toList();
//
// //System.out.println("filteredRefIds="+filteredRefIds);
//
// for (String ref : filteredRefIds) {
// Map<String, Object> data = pendinglistService.getlistdata(ref);
// if (data != null && !data.isEmpty()) {
// finalList.add(data);
// }
// }
//
// return finalList;
// }
@GetMapping("/getgreencommitteelist")
public List<Map<String, Object>> getgreencommitteelist(
@RequestParam String date, @RequestParam String zones) {
List<Map<String, Object>> refnums = pendinglistService.getrefnums(date, zones);
System.out.println("refnums=" + refnums);
List<Map<String, Object>> savedIds = pendinglistService.getvcsavedrefids();
System.out.println("savedIds=" + savedIds);
// Convert savedIds → List<String>
List<String> savedRefList = new ArrayList<>();
for (Map<String, Object> m : savedIds) {
savedRefList.add(m.get("ref_id").toString());
}
List<Map<String, Object>> finalList = new ArrayList<>();
for (Map<String, Object> row : refnums) {
String refId = row.get("ref_id").toString();
Integer inspReinsId = row.get("latest_reinspection_id") != null
? Integer.parseInt(row.get("latest_reinspection_id").toString())
: null;
// Skip if already committee decided
if (savedRefList.contains(refId))
continue;
// Get reinspection latest id
Integer dbLatest = pendinglistService.getLatestReinspectionId(refId);
// Rule: if inspection reinspection ID is NULL but in DB exists → skip
if (inspReinsId == null && dbLatest != null)
continue;
// Rule: if BOTH exist AND not equal → skip
if (inspReinsId != null && dbLatest != null && !inspReinsId.equals(dbLatest))
continue;
// 👍 Valid, add final data
Map<String, Object> data = pendinglistService.getlistdata(refId);
if (data != null && !data.isEmpty()) {
System.out.println("inside=" + refId);
finalList.add(data);
}
}
return finalList;
}
@GetMapping("/getdetailsbyrefid")
public Map<String, Object> getdetailsbyrefid(@RequestParam String refid) {
return pendinglistService.getdetailsbyrefid(refid);
}
@GetMapping("/getCommitteeActions")
public List<Map<String, Object>> getCommitteeActions() {
return pendinglistService.getCommitteeActions();
}
@PostMapping("/savecommittee")
public Map<String, Object> saveCommittee(@RequestBody Map<String, Object> payload) {
String refId = (String) payload.get("ref_id");
String remarks = (String) payload.get("remarks");
int userId = Integer.parseInt(payload.get("userId").toString());
int meetingid = Integer.parseInt(payload.get("meetingid").toString());
List<Map<String, Object>> decisions = (List<Map<String, Object>>) payload.get("decisions");
return pendinglistService.saveCommittee(refId, remarks, meetingid, userId, decisions);
}
@PostMapping("/savereinspection")
public Map<String, Object> saveReInspection(@RequestBody Map<String, Object> payload) {
String refId = payload.get("ref_id").toString();
int committeeAction = Integer.parseInt(payload.get("committee_action").toString());
int meetingId = Integer.parseInt(payload.get("meeting_id").toString());
String remarks = payload.get("remarks") != null ? payload.get("remarks").toString() : null;
int userId = Integer.parseInt(payload.get("userId").toString());
return pendinglistService.saveReInspection(refId, committeeAction, meetingId, remarks, userId);
}
}

11
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/controller/ReportApicontroller.java

@ -10,6 +10,7 @@ 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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import in.gov.chennaicorporation.gccoffice.greencommittee.service.ReportService;
@ -23,9 +24,9 @@ public class ReportApicontroller {
@GetMapping("/getgreencommitteelist")
public List<Map<String, Object>> getgreencommitteelist(@RequestParam String meetingid,
@RequestParam String zones) {
@RequestParam String zones, @RequestParam String deptid, @RequestParam String appType) {
List<String> refnums = reportService.getrefnums(meetingid, zones);
List<String> refnums = reportService.getrefnums(meetingid, zones, deptid, appType);
System.out.println("refnums=" + refnums);
List<Map<String, Object>> finalList = new ArrayList<>();
@ -130,4 +131,10 @@ public class ReportApicontroller {
return response;
}
@GetMapping("/getDepartments")
@ResponseBody
public List<Map<String, Object>> getDepartments() {
return reportService.getDepartments();
}
}

673
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/PendinglistService.java

@ -4,10 +4,13 @@ import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.sql.DataSource;
@ -26,401 +29,421 @@ public class PendinglistService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Value("${fileBaseUrl}")
private String fileBaseUrl;
@Autowired
public void setDataSource(@Qualifier("mysqlGreenCommitteeDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<Map<String, Object>> ViewWardDropdown(String zone) {
String sql = "SELECT ward_name "
+ "FROM ward_master "
+ "WHERE is_active=1 AND is_delete=0 AND zone_id=?";
try {
return jdbcTemplate.queryForList(sql,zone);
+ "FROM ward_master "
+ "WHERE is_active=1 AND is_delete=0 AND zone_id=?";
try {
return jdbcTemplate.queryForList(sql, zone);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return Collections.emptyList();
e.printStackTrace();
return Collections.emptyList();
}
}
public List<Map<String, Object>> ViewZoneDropdown() {
String sql = "SELECT zone_name "
+ "FROM zone_master "
+ "WHERE is_active=1 AND is_delete=0";
try {
return jdbcTemplate.queryForList(sql);
+ "FROM zone_master "
+ "WHERE is_active=1 AND is_delete=0";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return Collections.emptyList();
e.printStackTrace();
return Collections.emptyList();
}
}
public List<Map<String, Object>> ViewDropdownEvent() {
String sql = "SELECT * FROM create_meeting WHERE isactive=1 AND isdelete=0";
return jdbcTemplate.queryForList(sql);
String sql = "SELECT * FROM create_meeting WHERE isactive=1 AND isdelete=0";
return jdbcTemplate.queryForList(sql);
}
// public List<String> getrefnums(String date, String zones) {
//
// try {
//
// StringBuilder sql = new StringBuilder(
// "SELECT t.ref_id " +
// "FROM ( " +
// " SELECT ref_id, inspection_by, MAX(cdate) AS latest_date " +
// " FROM inspection_data " +
// " WHERE DATE(cdate) <= STR_TO_DATE(?, '%d-%m-%Y') " +
// " AND isactive = 1 "
// );
//
// List<Object> params = new ArrayList<>();
// params.add(date);
//
// if (zones != null && !zones.isEmpty()) {
// sql.append(" AND zone = ? ");
// params.add(zones);
// }
//
// sql.append(
// " GROUP BY ref_id, inspection_by " +
// ") AS t " +
// "GROUP BY t.ref_id " +
// "HAVING COUNT(DISTINCT t.inspection_by) = 3 " +
// "ORDER BY MAX(t.latest_date) DESC"
// );
//
// return jdbcTemplate.queryForList(sql.toString(), params.toArray(), String.class);
//
// } catch (Exception e) {
//
// System.err.println("Error in getrefums(): " + e.getMessage());
// e.printStackTrace();
// return Collections.emptyList();
// }
// }
// public List<String> getrefnums(String date, String zones) {
//
// try {
//
// StringBuilder sql = new StringBuilder(
// "SELECT t.ref_id " +
// "FROM ( " +
// " SELECT ref_id, inspection_by, MAX(cdate) AS latest_date " +
// " FROM inspection_data " +
// " WHERE DATE(cdate) <= STR_TO_DATE(?, '%d-%m-%Y') " +
// " AND isactive = 1 "
// );
//
// List<Object> params = new ArrayList<>();
// params.add(date);
//
// if (zones != null && !zones.isEmpty()) {
// sql.append(" AND zone = ? ");
// params.add(zones);
// }
//
// sql.append(
// " GROUP BY ref_id, inspection_by " +
// ") AS t " +
// "GROUP BY t.ref_id " +
// "HAVING COUNT(DISTINCT t.inspection_by) = 3 " +
// "ORDER BY MAX(t.latest_date) DESC"
// );
//
// return jdbcTemplate.queryForList(sql.toString(), params.toArray(),
// String.class);
//
// } catch (Exception e) {
//
// System.err.println("Error in getrefums(): " + e.getMessage());
// e.printStackTrace();
// return Collections.emptyList();
// }
// }
public List<Map<String, Object>> getrefnums(String date, String zones) {
System.out.println(date + " " + zones);
try {
StringBuilder sql = new StringBuilder(
"SELECT ref_id, " +
" MAX(latest_reinspection_id) AS latest_reinspection_id " +
"FROM ( " +
" SELECT ref_id, inspection_by, " +
" MAX(cdate) AS latest_date, " +
" MAX(reinspection_id) AS latest_reinspection_id " +
" FROM inspection_data " +
" WHERE DATE(cdate) <= STR_TO_DATE(?, '%d-%m-%Y') " +
" AND isactive = 1 "
);
List<Object> params = new ArrayList<>();
params.add(date);
if (zones != null && !zones.isEmpty()) {
sql.append(" AND zone = ? ");
params.add(zones);
}
sql.append(
" GROUP BY ref_id, inspection_by " +
") AS x " +
"GROUP BY ref_id " +
"HAVING COUNT(DISTINCT inspection_by) = 3 " +
"ORDER BY MAX(latest_date) DESC"
);
return jdbcTemplate.queryForList(sql.toString(), params.toArray());
} catch (Exception e) {
e.printStackTrace();
return Collections.emptyList();
}
}
try {
StringBuilder sql = new StringBuilder(
"SELECT ref_id, " +
" MAX(latest_reinspection_id) AS latest_reinspection_id " +
"FROM ( " +
" SELECT ref_id, inspection_by, " +
" MAX(cdate) AS latest_date, " +
" MAX(reinspection_id) AS latest_reinspection_id " +
" FROM inspection_data " +
" WHERE DATE(cdate) <= STR_TO_DATE(?, '%d-%m-%Y') " +
" AND isactive = 1 ");
List<Object> params = new ArrayList<>();
params.add(date);
if (zones != null && !zones.isEmpty()) {
sql.append(" AND zone = ? ");
params.add(zones);
}
public Integer getLatestReinspectionId(String refId) {
try {
String sql = "SELECT id FROM reinspection WHERE ref_id=? ORDER BY id DESC LIMIT 1";
return jdbcTemplate.queryForObject(sql, Integer.class, refId);
} catch (Exception e) {
return null;
}
}
sql.append(
" GROUP BY ref_id, inspection_by " +
") AS x " +
"GROUP BY ref_id " +
"HAVING COUNT(DISTINCT inspection_by) >= 2 " +
"ORDER BY MAX(latest_date) DESC");
return jdbcTemplate.queryForList(sql.toString(), params.toArray());
} catch (Exception e) {
e.printStackTrace();
return Collections.emptyList();
}
}
public Integer getLatestReinspectionId(String refId) {
try {
String sql = "SELECT id FROM reinspection WHERE ref_id=? ORDER BY id DESC LIMIT 1";
return jdbcTemplate.queryForObject(sql, Integer.class, refId);
} catch (Exception e) {
return null;
}
}
public Map<String, Object> getlistdata(String ref) {
Map<String, Object> regDetails = getRegDetails(ref);
Map<String, Object> regDetails = getRegDetails(ref);
List<Map<String, Object>> compDetails = getComplaintDetails(ref);
List<Map<String, Object>> compDetails = getComplaintDetails(ref);
regDetails.put("comp_details", compDetails);
regDetails.put("comp_details", compDetails);
return regDetails;
return regDetails;
}
public Map<String, Object> getRegDetails(String ref) {
String sql = "SELECT * FROM reg_details WHERE is_active = 1 AND ref_id = ?";
return jdbcTemplate.queryForMap(sql, ref);
String sql = "SELECT * FROM reg_details WHERE is_active = 1 AND ref_id = ?";
return jdbcTemplate.queryForMap(sql, ref);
}
public List<Map<String, Object>> getComplaintDetails(String ref) {
String sql = "SELECT cn.name AS nature, SUM(cd.no_of_trees) AS total_trees " +
"FROM complaint_details cd " +
"JOIN comp_nature cn ON cn.id = cd.comp_nature_id " +
"WHERE cd.is_active = 1 AND cd.ref_id = ? " +
"GROUP BY cn.name";
String sql = "SELECT cn.name AS nature, SUM(cd.no_of_trees) AS total_trees " +
"FROM complaint_details cd " +
"JOIN comp_nature cn ON cn.id = cd.comp_nature_id " +
"WHERE cd.is_active = 1 AND cd.ref_id = ? " +
"GROUP BY cn.name";
return jdbcTemplate.queryForList(sql, ref);
return jdbcTemplate.queryForList(sql, ref);
}
public Map<String, Object> getdetailsbyrefid(String refId) {
Map<String, Object> response = new HashMap<>();
// 1 — Application details
Map<String, Object> app = jdbcTemplate.queryForMap(
"SELECT *,DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') as r_Cdate FROM reg_details WHERE ref_id=? AND is_active=1",
refId
);
// 2 — Complaint details (grouped)
List<Map<String, Object>> complaints = jdbcTemplate.queryForList(
"SELECT cn.name AS nature, SUM(cd.no_of_trees) AS count " +
"FROM complaint_details cd JOIN comp_nature cn ON cn.id=cd.comp_nature_id " +
"WHERE cd.ref_id=? GROUP BY cn.name", refId
);
// 3 — Complaint images
List<String> compImages = jdbcTemplate.queryForList(
"SELECT img_path FROM img_uploads WHERE ref_id=? AND is_active=1",
new Object[]{refId}, String.class
).stream()
.map(path -> fileBaseUrl + "/gccofficialapp/files" + path)
.collect(Collectors.toList());
app.put("complaints", complaints);
app.put("images", compImages);
response.put("application", app);
// 4 — Inspection details
List<Map<String, Object>> inspectionList = new ArrayList<>();
String sql =
"SELECT id.*, um.name AS inspector_name, " +
" DATE_FORMAT(id.cdate, '%d-%m-%Y %l:%i %p') AS f_Cdate " +
"FROM inspection_data id " +
"LEFT JOIN user_maping um ON um.userid = id.cby " +
"INNER JOIN ( " +
" SELECT inspection_by, MAX(cdate) AS latest_date " +
" FROM inspection_data " +
" WHERE ref_id = ? AND isactive = 1 " +
" GROUP BY inspection_by " +
") latest ON id.inspection_by = latest.inspection_by " +
" AND id.cdate = latest.latest_date " +
"WHERE id.ref_id = ? AND id.isactive = 1 " +
"ORDER BY FIELD(id.inspection_by, 'GCC', 'NGO', 'TNFD')";
List<Map<String, Object>> rows = jdbcTemplate.queryForList(
sql, refId, refId
);
for (Map<String, Object> row : rows) {
Integer inspId = (Integer) row.get("inspection_data_id");
// 4a — Recommendation details
List<Map<String, Object>> recommend = jdbcTemplate.queryForList(
"SELECT rm.name, itd.nooftrees AS count,itd.treename as treename " +
"FROM inspection_tree_data itd " +
"JOIN inspection_recommend_master rm ON rm.rid = itd.action " +
"WHERE itd.inspection_data_id=? AND itd.isactive=1",
inspId
);
row.put("recommendations", recommend);
// 4b — Images (thumbnail list)
List<String> imgs = new ArrayList<>();
if (row.get("file_1") != null) {
imgs.add(fileBaseUrl + "/gccofficialapp/files" + row.get("file_1").toString());
}
if (row.get("file_2") != null) {
imgs.add(fileBaseUrl + "/gccofficialapp/files" + row.get("file_2").toString());
}
if (row.get("file_3") != null) {
imgs.add(fileBaseUrl + "/gccofficialapp/files" + row.get("file_3").toString());
}
row.put("images", imgs);
inspectionList.add(row);
}
response.put("inspections", inspectionList);
// 5 — Re-Inspection Details
String reSql =
"SELECT r.id AS reins_id, r.committee_action, r.remarks AS reins_remarks, " +
" DATE_FORMAT(r.cdate, '%d-%m-%Y %l:%i %p') AS reins_date, " +
" cm.event_name, DATE_FORMAT(cm.event_date, '%d-%m-%Y') AS event_date " +
"FROM reinspection r " +
"LEFT JOIN create_meeting cm ON cm.id = r.meeting_id " +
"WHERE r.ref_id = ? AND r.isactive = 1 " +
"ORDER BY r.id DESC";
List<Map<String, Object>> reinspectionList = jdbcTemplate.queryForList(reSql, refId);
response.put("reinspections", reinspectionList);
return response;
Map<String, Object> response = new HashMap<>();
// 1 — Application details
Map<String, Object> app = jdbcTemplate.queryForMap(
"SELECT *,DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') as r_Cdate FROM reg_details WHERE ref_id=? AND is_active=1",
refId);
// 2 — Complaint details (grouped)
List<Map<String, Object>> complaints = jdbcTemplate.queryForList(
"SELECT cn.name AS nature, SUM(cd.no_of_trees) AS count " +
"FROM complaint_details cd JOIN comp_nature cn ON cn.id=cd.comp_nature_id " +
"WHERE cd.ref_id=? GROUP BY cn.name",
refId);
// 3 — Complaint images
List<String> compImages = jdbcTemplate.queryForList(
"SELECT img_path FROM img_uploads WHERE ref_id=? AND is_active=1",
new Object[] { refId }, String.class).stream()
.map(path -> fileBaseUrl + "/gccofficialapp/files" + path)
.collect(Collectors.toList());
app.put("complaints", complaints);
app.put("images", compImages);
response.put("application", app);
// 4 — Inspection details
List<Map<String, Object>> inspectionList = new ArrayList<>();
String sql = "SELECT id.*, um.name AS inspector_name, " +
" DATE_FORMAT(id.cdate, '%d-%m-%Y %l:%i %p') AS f_Cdate " +
"FROM inspection_data id " +
"LEFT JOIN user_maping um ON um.userid = id.cby " +
"INNER JOIN ( " +
" SELECT inspection_by, MAX(cdate) AS latest_date " +
" FROM inspection_data " +
" WHERE ref_id = ? AND isactive = 1 " +
" GROUP BY inspection_by " +
") latest ON id.inspection_by = latest.inspection_by " +
" AND id.cdate = latest.latest_date " +
"WHERE id.ref_id = ? AND id.isactive = 1 " +
"ORDER BY FIELD(id.inspection_by, 'GCC', 'NGO', 'TNFD')";
List<Map<String, Object>> rows = jdbcTemplate.queryForList(
sql, refId, refId);
for (Map<String, Object> row : rows) {
Integer inspId = (Integer) row.get("inspection_data_id");
// 4a — Recommendation details
List<Map<String, Object>> recommend = jdbcTemplate.queryForList(
"SELECT rm.name, itd.nooftrees AS count,itd.treename as treename " +
"FROM inspection_tree_data itd " +
"JOIN inspection_recommend_master rm ON rm.rid = itd.action " +
"WHERE itd.inspection_data_id=? AND itd.isactive=1",
inspId);
row.put("recommendations", recommend);
// 4b — Images (thumbnail list)
List<String> imgs = new ArrayList<>();
if (row.get("file_1") != null) {
imgs.add(fileBaseUrl + "/gccofficialapp/files" + row.get("file_1").toString());
}
if (row.get("file_2") != null) {
imgs.add(fileBaseUrl + "/gccofficialapp/files" + row.get("file_2").toString());
}
if (row.get("file_3") != null) {
imgs.add(fileBaseUrl + "/gccofficialapp/files" + row.get("file_3").toString());
}
row.put("images", imgs);
inspectionList.add(row);
}
// ak
// Expected inspection stages
List<String> expected = Arrays.asList("GCC", "NGO", "TNFD");
// Completed stages
Set<String> completed = inspectionList.stream()
.map(m -> String.valueOf(m.get("inspection_by")))
.collect(Collectors.toSet());
// Add pending cards
for (String type : expected) {
if (!completed.contains(type)) {
Map<String, Object> pending = new HashMap<>();
pending.put("inspection_by", type);
pending.put("status", "PENDING");
pending.put("inspector_name", "");
pending.put("f_Cdate", "");
pending.put("remarks", "");
pending.put("recommendations", new ArrayList<>());
pending.put("images", new ArrayList<>());
inspectionList.add(pending);
}
}
// Sort in order GCC -> NGO -> TNFD
Map<String, Integer> order = new HashMap<>();
order.put("GCC", 1);
order.put("NGO", 2);
order.put("TNFD", 3);
inspectionList.sort(
Comparator.comparingInt(
m -> order.getOrDefault(String.valueOf(m.get("inspection_by")), 99)));
response.put("inspections", inspectionList);
// 5 — Re-Inspection Details
String reSql = "SELECT r.id AS reins_id, r.committee_action, r.remarks AS reins_remarks, " +
" DATE_FORMAT(r.cdate, '%d-%m-%Y %l:%i %p') AS reins_date, " +
" cm.event_name, DATE_FORMAT(cm.event_date, '%d-%m-%Y') AS event_date " +
"FROM reinspection r " +
"LEFT JOIN create_meeting cm ON cm.id = r.meeting_id " +
"WHERE r.ref_id = ? AND r.isactive = 1 " +
"ORDER BY r.id DESC";
List<Map<String, Object>> reinspectionList = jdbcTemplate.queryForList(reSql, refId);
response.put("reinspections", reinspectionList);
return response;
}
public List<Map<String, Object>> getCommitteeActions() {
String sql = "SELECT id,name "
+ "FROM committee_recommend_master "
+ "WHERE isactive=1 AND isdelete=0 "
+ "ORDER BY orderby";
try {
return jdbcTemplate.queryForList(sql);
+ "FROM committee_recommend_master "
+ "WHERE isactive=1 AND isdelete=0 "
+ "ORDER BY orderby";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return Collections.emptyList();
e.printStackTrace();
return Collections.emptyList();
}
}
public Map<String, Object> saveCommittee(
String refId,
String remarks,
int meetingid,
int userId,
List<Map<String, Object>> decisions
) {
String refId,
String remarks,
int meetingid,
int userId,
List<Map<String, Object>> decisions) {
Map<String, Object> response = new HashMap<>();
Map<String, Object> response = new HashMap<>();
try {
// 1️⃣ Save committee_data and get generated ID
int committeeDataId = saveCommitteeData(refId, remarks, meetingid, userId);
try {
// 1️⃣ Save committee_data and get generated ID
int committeeDataId = saveCommitteeData(refId, remarks, meetingid, userId);
List<Integer> insertedTreeIds = saveCommitteeTreeData(decisions, committeeDataId, refId, userId);
List<Integer> insertedTreeIds = saveCommitteeTreeData(decisions, committeeDataId, refId, userId);
response.put("committee_data_id", committeeDataId);
response.put("tree_ids", insertedTreeIds);
response.put("status", "success");
response.put("message", "Committee decision saved!");
response.put("committee_data_id", committeeDataId);
response.put("tree_ids", insertedTreeIds);
response.put("status", "success");
response.put("message", "Committee decision saved!");
} catch (Exception e) {
response.put("status", "error");
response.put("message", e.getMessage());
}
} catch (Exception e) {
response.put("status", "error");
response.put("message", e.getMessage());
}
return response;
return response;
}
public int saveCommitteeData(String refId, String remarks, int meetingid, int userId) {
String remarksValue = (remarks == null || remarks.trim().isEmpty()) ? null : remarks.trim();
String sql = "INSERT INTO committee_data (ref_id, meeting_id, remarks, cby) VALUES (?, ?, ?, ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, refId);
ps.setInt(2, meetingid);
if (remarksValue == null) {
ps.setNull(3, Types.VARCHAR);
} else {
ps.setString(3, remarksValue);
}
ps.setInt(4, userId);
return ps;
}, keyHolder);
return keyHolder.getKey().intValue(); // generated committee_data.id
}
String remarksValue = (remarks == null || remarks.trim().isEmpty()) ? null : remarks.trim();
String sql = "INSERT INTO committee_data (ref_id, meeting_id, remarks, cby) VALUES (?, ?, ?, ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, refId);
ps.setInt(2, meetingid);
if (remarksValue == null) {
ps.setNull(3, Types.VARCHAR);
} else {
ps.setString(3, remarksValue);
}
ps.setInt(4, userId);
return ps;
}, keyHolder);
return keyHolder.getKey().intValue(); // generated committee_data.id
}
public List<Integer> saveCommitteeTreeData(
List<Map<String, Object>> decisions,
int committeeDataId,
String refId,
int userId
) {
List<Map<String, Object>> decisions,
int committeeDataId,
String refId,
int userId) {
String sql = "INSERT INTO committee_tree_data (nooftrees, committee_action, committee_data_id, ref_id, cby) " +
"VALUES (?, ?, ?, ?, ?)";
String sql = "INSERT INTO committee_tree_data (nooftrees, committee_action, committee_data_id, ref_id, cby) " +
"VALUES (?, ?, ?, ?, ?)";
List<Integer> insertedIds = new ArrayList<>();
List<Integer> insertedIds = new ArrayList<>();
for (Map<String, Object> row : decisions) {
for (Map<String, Object> row : decisions) {
int actionId = Integer.parseInt(row.get("id").toString());
int count = Integer.parseInt(row.get("count").toString());
int actionId = Integer.parseInt(row.get("id").toString());
int count = Integer.parseInt(row.get("count").toString());
KeyHolder keyHolder = new GeneratedKeyHolder();
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setInt(1, count);
ps.setInt(2, actionId);
ps.setInt(3, committeeDataId);
ps.setString(4, refId);
ps.setInt(5, userId);
return ps;
}, keyHolder);
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setInt(1, count);
ps.setInt(2, actionId);
ps.setInt(3, committeeDataId);
ps.setString(4, refId);
ps.setInt(5, userId);
return ps;
}, keyHolder);
insertedIds.add(keyHolder.getKey().intValue());
}
insertedIds.add(keyHolder.getKey().intValue());
}
return insertedIds;
return insertedIds;
}
public List<Map<String, Object>> getvcsavedrefids() {
String sql="SELECT ref_id FROM committee_data WHERE isactive=1";
String sql = "SELECT ref_id FROM committee_data WHERE isactive=1";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return Collections.emptyList();
}
}
@Transactional
public Map<String, Object> saveReInspection(String refId, int action, int meetingId,
String remarks, int userId) {
String remarks, int userId) {
Map<String, Object> response = new HashMap<>();
Map<String, Object> response = new HashMap<>();
try {
// Insert into reinspection table
String sql = "INSERT INTO reinspection (ref_id, committee_action, meeting_id, remarks, cby) " +
"VALUES (?, ?, ?, ?, ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
// Insert into reinspection table
String sql = "INSERT INTO reinspection (ref_id, committee_action, meeting_id, remarks, cby) " +
"VALUES (?, ?, ?, ?, ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, refId);
ps.setInt(2, action);
@ -428,30 +451,26 @@ public class PendinglistService {
ps.setString(4, remarks);
ps.setInt(5, userId);
return ps;
}, keyHolder);
int generatedId = keyHolder.getKey().intValue();
// Update reg_details.reinspection_id
jdbcTemplate.update("UPDATE reg_details SET reinspection_id=? WHERE ref_id=?",generatedId, refId);
jdbcTemplate.update("UPDATE inspection_data SET isactive=0,isdelete=1 WHERE ref_id=?", refId);
response.put("status", "success");
response.put("message", "Committee decision saved!");
response.put("reinspection_id", generatedId);
}
catch (Exception e)
{
response.put("status", "error");
response.put("message", e.getMessage());
}
return response;
}, keyHolder);
int generatedId = keyHolder.getKey().intValue();
// Update reg_details.reinspection_id
jdbcTemplate.update("UPDATE reg_details SET reinspection_id=? WHERE ref_id=?", generatedId, refId);
jdbcTemplate.update("UPDATE inspection_data SET isactive=0,isdelete=1 WHERE ref_id=?", refId);
response.put("status", "success");
response.put("message", "Committee decision saved!");
response.put("reinspection_id", generatedId);
} catch (Exception e) {
response.put("status", "error");
response.put("message", e.getMessage());
}
return response;
}
}

27
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/ReportService.java

@ -29,7 +29,7 @@ public class ReportService {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<String> getrefnums(String meetingid, String zones) {
public List<String> getrefnums(String meetingid, String zones, String deptid, String appType) {
try {
StringBuilder sql = new StringBuilder(
@ -80,6 +80,22 @@ public class ReportService {
params.add(zones);
}
if (deptid != null && !deptid.isEmpty()) {
sql.append(
" AND ref_id IN ( " +
" SELECT ref_id FROM reg_details WHERE dept_id = ? " +
" ) ");
params.add(deptid);
}
if (appType != null && !appType.isEmpty()) {
sql.append(
" AND ref_id IN ( " +
" SELECT ref_id FROM reg_details WHERE cby = ? " +
" ) ");
params.add(appType);
}
return jdbcTemplate.queryForList(
sql.toString(),
params.toArray(),
@ -182,7 +198,7 @@ public class ReportService {
}
public Map<String, Object> getRegDetails(String ref) {
String sql = "SELECT * FROM reg_details WHERE is_active = 1 AND ref_id = ?";
String sql = "SELECT rd.*,dm.name as department_name FROM reg_details rd left join dept_master dm on dm.id=rd.dept_id WHERE rd.is_active = 1 AND rd.ref_id = ?";
return jdbcTemplate.queryForMap(sql, ref);
}
@ -518,4 +534,11 @@ public class ReportService {
return response;
}
public List<Map<String, Object>> getDepartments() {
String sql = "SELECT id, name FROM dept_master WHERE is_active = 1 ORDER BY id";
return jdbcTemplate.queryForList(sql);
}
}

922
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/service/RegisterService.java
File diff suppressed because it is too large
View File

911
gcc_officer_portal/src/main/resources/templates/modules/greencommittee/pendinglist.html
File diff suppressed because it is too large
View File

489
gcc_officer_portal/src/main/resources/templates/modules/greencommittee/reports.html

@ -1,146 +1,170 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="~{fragments/modules/base/head :: head}"></head>
<style>
</style>
<body>
<div class="wrapper">
<!-- header top menu Start -->
<header th:replace="~{fragments/modules/base/header :: header}"></header>
<!-- header top menu end -->
<div class="page-wrap">
<!--=============== Left Menu side Start ================-->
<div th:replace="~{fragments/modules/base/menu :: menu}"></div>
<!--=============== Left side End ================-->
<div class="main-content">
<div class="container-fluid">
<div class="page-header mb-2">
<div class="row align-items-end">
<div class="col-lg-8">
<div class="page-header-title">
<i class="far fa-calendar-plus bg-blue"></i>
<div class="d-inline">
<h5>Reports</h5>
<span>Green Committee</span>
</div>
</div>
</div>
<div class="col-lg-4">
<nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/gcc/index"><i
class="ik ik-home"></i></a></li>
<li class="breadcrumb-item" aria-current="page">Green Committee</li>
<li class="breadcrumb-item active" aria-current="page">Reports</li>
</ol>
</nav>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<div class="card" style="margin-top: 0px;"><span th:text="${LoginUserId}" id="userIdSpan" style="display: none;"></span>
<div class="card-block">
<div class="row">
<div class="form-group col-sm-8">
<label for="dropdownevent">Select Meeting
</label>
<select id="dropdownevent" class="form-control">
</select>
</div>
<div class="form-group col-sm-4">
<label for="zonedropdown">Select Zone
</label>
<select id="zonedropdown" class="form-control">
<option value="">Select Zone </option>
</select>
</div>
</div>
<div class="page-header-title" >
<h5 style="margin: 0;font-weight: bold;">Green Committee Reports</h5><span th:text="${LoginUserId}" id="userIdSpan" style="display: none;"></span><hr>
</div>
<div>
<table id="RequestListDatatable" class="table table-striped table-bordered table-hover dataTable" role="grid">
<thead class="thead-dark">
<tr role="row">
<th class="text-center" rowspan="2">S.No</th>
<th class="text-center" rowspan="2">Application No</th>
<th class="text-center" rowspan="2">Name</th>
<th class="text-center" rowspan="2">Address</th>
<th class="text-center" rowspan="2">Reason</th>
<th class="text-center" rowspan="2">No of trees</th>
<th class="text-center" colspan="3">Inspected</th>
<th class="text-center" rowspan="2">Committee Decision</th>
</tr>
<tr>
<th class="text-center">TNFD</th>
<th class="text-center">GCC</th>
<th class="text-center">NGO</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<body>
<div class="wrapper">
<!-- header top menu Start -->
<header th:replace="~{fragments/modules/base/header :: header}"></header>
<!-- header top menu end -->
<div class="page-wrap">
<!--=============== Left Menu side Start ================-->
<div th:replace="~{fragments/modules/base/menu :: menu}"></div>
<!--=============== Left side End ================-->
<div class="main-content">
<div class="container-fluid">
<div class="page-header mb-2">
<div class="row align-items-end">
<div class="col-lg-8">
<div class="page-header-title">
<i class="far fa-calendar-plus bg-blue"></i>
<div class="d-inline">
<h5>Reports</h5>
<span>Green Committee</span>
</div>
</div>
</div>
<div class="col-lg-4">
<nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/gcc/index"><i class="ik ik-home"></i></a>
</li>
<li class="breadcrumb-item" aria-current="page">Green Committee</li>
<li class="breadcrumb-item active" aria-current="page">Reports</li>
</ol>
</nav>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<div class="card" style="margin-top: 0px;"><span th:text="${LoginUserId}" id="userIdSpan"
style="display: none;"></span>
<div class="card-block">
<div class="row">
<div class="form-group col-sm-8">
<label for="dropdownevent">Select Meeting
</label>
<select id="dropdownevent" class="form-control">
</select>
</div>
<div class="form-group col-sm-4">
<label for="zonedropdown">Select Zone
</label>
<select id="zonedropdown" class="form-control">
<option value="">Select Zone </option>
</select>
</div>
<div class="form-group col-sm-4">
<label for="applicationType">Application Type</label>
<select id="applicationType" class="form-control">
<option value="">Select Application Type</option>
<option value="Department">Department</option>
<option value="Public">Public</option>
</select>
</div>
<div class="form-group col-sm-4" id="departmentdropdownDiv">
<label for="departmentdropdown">Select Department</label>
<select id="departmentdropdown" class="form-control">
<option value="">Select All</option>
</select>
</div>
</div>
<div class="page-header-title">
<h5 style="margin: 0;font-weight: bold;">Green Committee Reports</h5><span
th:text="${LoginUserId}" id="userIdSpan" style="display: none;"></span>
<hr>
</div>
<div>
<table id="RequestListDatatable"
class="table table-striped table-bordered table-hover dataTable"
role="grid">
<thead class="thead-dark">
<tr role="row">
<th class="text-center" rowspan="2">S.No</th>
<th class="text-center" rowspan="2">Application No</th>
<th class="text-center" rowspan="2">Department Name</th>
<th class="text-center" rowspan="2">Name</th>
<th class="text-center" rowspan="2">Address</th>
<th class="text-center" rowspan="2">Reason</th>
<th class="text-center" rowspan="2">No of trees</th>
<th class="text-center" colspan="3">Inspected</th>
<th class="text-center" rowspan="2">Committee Decision</th>
</tr>
<tr>
<th class="text-center">TNFD</th>
<th class="text-center">GCC</th>
<th class="text-center">NGO</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="pageLoader"
style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); z-index: 9999; text-align: center;">
<div style="position: relative; top: 50%; transform: translateY(-50%);">
<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;">
<span class="sr-only">Loading...</span>
</div>
<!-- Add the 'Please wait' text below the spinner -->
<p style="margin-top: 1rem; font-size: 1.2rem; color: #007bff;">Please wait...</p>
</div>
<div id="pageLoader" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); z-index: 9999; text-align: center;">
<div style="position: relative; top: 50%; transform: translateY(-50%);">
<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;">
<span class="sr-only">Loading...</span>
</div>
<!-- Add the 'Please wait' text below the spinner -->
<p style="margin-top: 1rem; font-size: 1.2rem; color: #007bff;">Please wait...</p>
</div>
</div>
<footer th:replace="~{fragments/modules/base/footer :: footer}"></footer>
</div>
</div>
<div th:replace="~{fragments/modules/base/app_module_menu_box :: div}"></div>
<script th:replace="~{fragments/modules/base/script :: script}"></script>
<script src="node_modules/tempusdominus-bootstrap-4/build/js/tempusdominus-bootstrap-4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var table = $('#RequestListDatatable').DataTable({
</div>
<footer th:replace="~{fragments/modules/base/footer :: footer}"></footer>
</div>
</div>
<div th:replace="~{fragments/modules/base/app_module_menu_box :: div}"></div>
<script th:replace="~{fragments/modules/base/script :: script}"></script>
<script src="node_modules/tempusdominus-bootstrap-4/build/js/tempusdominus-bootstrap-4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var table = $('#RequestListDatatable').DataTable({
dom: 'Bftip',
columnDefs: [
{ width: "150px", targets: 3 },
{width: "350px", targets: 4}
],
{ width: "150px", targets: 3 },
{ width: "350px", targets: 4 }
],
lengthMenu: [
[200, 400, -1],
[200, 400, -1],
['200 rows', '400 rows', 'Show all']
],
scrollY: '50vh',
scrollY: '50vh',
buttons: [
{
extend: 'pageLength',
@ -178,37 +202,72 @@
searching: false,
select: false,
processing: false
});
fetchEventDropdown();
fetchZones();
fetchgreenCommitteeList();
$('#dropdownevent').on('change', function () {
$('#zonedropdown').val("");
fetchEventDropdown();
fetchZones();
loadDepartments();
fetchgreenCommitteeList();
$('#dropdownevent').on('change', function () {
$('#zonedropdown').val("");
fetchgreenCommitteeList();
});
$('#zonedropdown').on('change', function () {
let miss_meet=$('#dropdownevent').val();
if(!miss_meet){
Swal.fire("Warning", "Please select an meeting!", "warning");
return;
}
fetchgreenCommitteeList();
function loadDepartments() {
$.ajax({
url: "/gcc/api/greencommittee/report/getDepartments",
type: "GET",
success: function (data) {
$("#departmentdropdown").empty();
$("#departmentdropdown").append('<option value="">Select All</option>');
$.each(data, function (i, dept) {
$("#departmentdropdown").append(
'<option value="' + dept.id + '">' +
dept.name +
'</option>'
);
});
}
});
}
$('#departmentdropdown').on('change', function () {
fetchgreenCommitteeList();
});
$('#zonedropdown').on('change', function () {
let miss_meet = $('#dropdownevent').val();
if (!miss_meet) {
Swal.fire("Warning", "Please select an meeting!", "warning");
return;
}
fetchgreenCommitteeList();
});
});
$('#applicationType').on('change', function () {
if ($('#applicationType').val() == "Public") {
$('#departmentdropdown').val("");
$('#departmentdropdownDiv').hide();
} else {
$('#departmentdropdownDiv').show();
}
fetchgreenCommitteeList();
});
function fetchZones() {
$.ajax({
url: '/gcc/api/greencommittee/pendinglist/getzones',
@ -220,13 +279,13 @@
zoneDropdown.append('<option value="" >Select Zone</option>');
data.forEach(function (res) {
zoneDropdown.append(
$('<option></option>')
.val(res.zone_name)
.text(`${res.zone_name}`)
);
zoneDropdown.append(
$('<option></option>')
.val(res.zone_name)
.text(`${res.zone_name}`)
);
});
},
error: function (xhr, status, error) {
@ -247,7 +306,7 @@
eventDropdown.append('<option value="" >Select an Meeting</option>');
data.forEach(function (event) {
if (event.isactive && !event.isdelete) {
if (event.isactive && !event.isdelete) {
eventDropdown.append(
$('<option></option>')
.val(event.id)
@ -262,35 +321,40 @@
}
});
}
function fetchgreenCommitteeList(){
let selectedevent = $('#dropdownevent').val();
// Read zone dropdown value
function fetchgreenCommitteeList() {
let selectedevent = $('#dropdownevent').val();
let selectedappType = $('#applicationType').val();
let selecteddepartment = $('#departmentdropdown').val();
console.log("selecteddepartment=" + selecteddepartment);
// Read zone dropdown value
let selectedZone = $('#zonedropdown').val();
console.log("selectedevent="+selectedevent+"AND selectedZone"+selectedZone);
console.log("selectedevent=" + selectedevent + "AND selectedZone" + selectedZone);
$('#pageLoader').show();
$.ajax({
$.ajax({
url: '/gcc/api/greencommittee/report/getgreencommitteelist',
data: { meetingid: selectedevent,zones:selectedZone },
data: { meetingid: selectedevent, zones: selectedZone, deptid: selecteddepartment, appType: selectedappType },
method: 'GET',
contentType: 'application/json',
success: function (data) {
$('#pageLoader').hide();
let tableContainer = $('#RequestListDatatable');
console.log(data);
$('#pageLoader').hide();
let tableContainer = $('#RequestListDatatable');
// Destroy any existing DataTable instance
if ($.fn.DataTable.isDataTable(tableContainer)) {
tableContainer.DataTable().destroy();
}
// Initialize DataTable
// Initialize DataTable
tableContainer.DataTable({
destroy: true,
searching: true,
@ -306,13 +370,21 @@
},
{ data: 'ref_id', className: 'text-center' },
{
data: null,className: 'text-center',
data: 'department_name',
className: 'text-center',
render: function (data) {
return (data === null || data === undefined || data.trim() === '') ? '-' : data;
}
},
// { data: 'department_name', className: 'text-center' },
{
data: null, className: 'text-center',
render: d => d.p_name && d.p_name.trim() !== '' ? d.p_name : d.dept_name || '-'
},
{ data: 'address',className: 'text-center' },
{ data: 'address', className: 'text-center' },
// Reason
{ data: 'remarks',className: 'text-center' },
{ data: 'remarks', className: 'text-center' },
// No of trees
{ data: 'total_trees', className: 'text-center' },
@ -343,7 +415,7 @@
render: d => getCommitteeDecision(d),
className: 'text-center'
}
],
dom: 'Bfrtip',
buttons: [
@ -380,34 +452,36 @@
],
columnDefs: [
{ width: "150px", targets: 3 },
{width: "350px", targets: 4},
{ width: "120px", targets: 6 },
{ width: "120px", targets: 7 },
{ width: "120px", targets: 8 },
{ width: "120px", targets: 9 }
],
lengthMenu: [
[200, 400, -1],
['200 rows', '400 rows', 'Show all']
],
{ width: "150px", targets: 3 },
{ width: "150px", targets: 4 },
{ width: "350px", targets: 5 },
{ width: "120px", targets: 6 },
{ width: "120px", targets: 7 },
{ width: "120px", targets: 8 },
{ width: "120px", targets: 9 }
],
lengthMenu: [
[200, 400, -1],
['200 rows', '400 rows', 'Show all']
],
scrollY: '80vh',
scrollX: true,
responsive: false
});
},
error: function (xhr, status, error) {
$('#pageLoader').hide();
$('#pageLoader').hide();
console.error("Error fetching data:", error);
alert("Failed to load green committe list.");
}
});
});
}
function getInspectionRecommendation(inspections, type) {
if (!Array.isArray(inspections)) return '-';
@ -434,7 +508,7 @@
// Case 2: committee empty → reinspections details
if ((!row.committee || Object.keys(row.committee).length === 0) && Array.isArray(row.reinspections)
&& row.reinspections.length > 0) {
&& row.reinspections.length > 0) {
let r = row.reinspections[0];
return `
${r.event_name}<br>
@ -462,7 +536,7 @@
}
return selectedText;
}
function getExportFileName() {
let title = getExportTitle().replace(/\s+/g, '_').replace(/[^a-zA-Z0-9_]/g, '');
@ -479,7 +553,8 @@
}
</script>
</body>
</script>
</body>
</html>
Loading…
Cancel
Save