Browse Source

implemented enhacements for pendinglist and report

main
AJITHKUMAR12 3 months ago
parent
commit
8fd4682601
  1. 107
      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. 175
      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. 128
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/service/RegisterService.java
  6. 137
      gcc_officer_portal/src/main/resources/templates/modules/greencommittee/pendinglist.html
  7. 115
      gcc_officer_portal/src/main/resources/templates/modules/greencommittee/reports.html

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

@ -25,7 +25,6 @@ public class PendinglistApicontroller {
@Autowired @Autowired
private PendinglistService pendinglistService; private PendinglistService pendinglistService;
@GetMapping("/getzones") @GetMapping("/getzones")
public List<Map<String, Object>> ViewZoneDropdown() { public List<Map<String, Object>> ViewZoneDropdown() {
@ -54,86 +53,88 @@ public class PendinglistApicontroller {
} }
} }
// @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<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") @GetMapping("/getgreencommitteelist")
public List<Map<String, Object>> getgreencommitteelist( public List<Map<String, Object>> getgreencommitteelist(
@RequestParam String date, @RequestParam String zones) { @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);
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> // Convert savedIds → List<String>
List<String> savedRefList = new ArrayList<>(); List<String> savedRefList = new ArrayList<>();
for (Map<String,Object> m : savedIds) {
for (Map<String, Object> m : savedIds) {
savedRefList.add(m.get("ref_id").toString()); savedRefList.add(m.get("ref_id").toString());
} }
List<Map<String,Object>> finalList = new ArrayList<>();
List<Map<String, Object>> finalList = new ArrayList<>();
for (Map<String,Object> row : refnums) {
for (Map<String, Object> row : refnums) {
String refId = row.get("ref_id").toString(); String refId = row.get("ref_id").toString();
Integer inspReinsId = row.get("latest_reinspection_id") != null ?
Integer.parseInt(row.get("latest_reinspection_id").toString())
Integer inspReinsId = row.get("latest_reinspection_id") != null
? Integer.parseInt(row.get("latest_reinspection_id").toString())
: null; : null;
// Skip if already committee decided // Skip if already committee decided
if (savedRefList.contains(refId)) continue;
if (savedRefList.contains(refId))
continue;
// Get reinspection latest id // Get reinspection latest id
Integer dbLatest = pendinglistService.getLatestReinspectionId(refId); Integer dbLatest = pendinglistService.getLatestReinspectionId(refId);
// Rule: if inspection reinspection ID is NULL but in DB exists → skip // Rule: if inspection reinspection ID is NULL but in DB exists → skip
if (inspReinsId == null && dbLatest != null) continue;
if (inspReinsId == null && dbLatest != null)
continue;
// Rule: if BOTH exist AND not equal → skip // Rule: if BOTH exist AND not equal → skip
if (inspReinsId != null && dbLatest != null && !inspReinsId.equals(dbLatest)) if (inspReinsId != null && dbLatest != null && !inspReinsId.equals(dbLatest))
continue; continue;
// 👍 Valid, add final data // 👍 Valid, add final data
Map<String,Object> data = pendinglistService.getlistdata(refId);
Map<String, Object> data = pendinglistService.getlistdata(refId);
if (data != null && !data.isEmpty()) { if (data != null && !data.isEmpty()) {
System.out.println("inside="+refId);
System.out.println("inside=" + refId);
finalList.add(data); finalList.add(data);
} }
} }
@ -141,7 +142,6 @@ public class PendinglistApicontroller {
return finalList; return finalList;
} }
@GetMapping("/getdetailsbyrefid") @GetMapping("/getdetailsbyrefid")
public Map<String, Object> getdetailsbyrefid(@RequestParam String refid) { public Map<String, Object> getdetailsbyrefid(@RequestParam String refid) {
return pendinglistService.getdetailsbyrefid(refid); return pendinglistService.getdetailsbyrefid(refid);
@ -179,5 +179,4 @@ public class PendinglistApicontroller {
return pendinglistService.saveReInspection(refId, committeeAction, meetingId, remarks, userId); 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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import in.gov.chennaicorporation.gccoffice.greencommittee.service.ReportService; import in.gov.chennaicorporation.gccoffice.greencommittee.service.ReportService;
@ -23,9 +24,9 @@ public class ReportApicontroller {
@GetMapping("/getgreencommitteelist") @GetMapping("/getgreencommitteelist")
public List<Map<String, Object>> getgreencommitteelist(@RequestParam String meetingid, 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); System.out.println("refnums=" + refnums);
List<Map<String, Object>> finalList = new ArrayList<>(); List<Map<String, Object>> finalList = new ArrayList<>();
@ -130,4 +131,10 @@ public class ReportApicontroller {
return response; return response;
} }
@GetMapping("/getDepartments")
@ResponseBody
public List<Map<String, Object>> getDepartments() {
return reportService.getDepartments();
}
} }

175
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.Statement;
import java.sql.Types; import java.sql.Types;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.sql.DataSource; import javax.sql.DataSource;
@ -40,7 +43,7 @@ public class PendinglistService {
+ "FROM ward_master " + "FROM ward_master "
+ "WHERE is_active=1 AND is_delete=0 AND zone_id=?"; + "WHERE is_active=1 AND is_delete=0 AND zone_id=?";
try { try {
return jdbcTemplate.queryForList(sql,zone);
return jdbcTemplate.queryForList(sql, zone);
} catch (Exception e) { } catch (Exception e) {
// TODO: handle exception // TODO: handle exception
e.printStackTrace(); e.printStackTrace();
@ -66,46 +69,48 @@ public class PendinglistService {
return jdbcTemplate.queryForList(sql); 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) { public List<Map<String, Object>> getrefnums(String date, String zones) {
System.out.println(date + " " + zones);
try { try {
@ -118,8 +123,7 @@ public class PendinglistService {
" MAX(reinspection_id) AS latest_reinspection_id " + " MAX(reinspection_id) AS latest_reinspection_id " +
" FROM inspection_data " + " FROM inspection_data " +
" WHERE DATE(cdate) <= STR_TO_DATE(?, '%d-%m-%Y') " + " WHERE DATE(cdate) <= STR_TO_DATE(?, '%d-%m-%Y') " +
" AND isactive = 1 "
);
" AND isactive = 1 ");
List<Object> params = new ArrayList<>(); List<Object> params = new ArrayList<>();
params.add(date); params.add(date);
@ -133,9 +137,8 @@ public class PendinglistService {
" GROUP BY ref_id, inspection_by " + " GROUP BY ref_id, inspection_by " +
") AS x " + ") AS x " +
"GROUP BY ref_id " + "GROUP BY ref_id " +
"HAVING COUNT(DISTINCT inspection_by) = 3 " +
"ORDER BY MAX(latest_date) DESC"
);
"HAVING COUNT(DISTINCT inspection_by) >= 2 " +
"ORDER BY MAX(latest_date) DESC");
return jdbcTemplate.queryForList(sql.toString(), params.toArray()); return jdbcTemplate.queryForList(sql.toString(), params.toArray());
@ -145,8 +148,6 @@ public class PendinglistService {
} }
} }
public Integer getLatestReinspectionId(String refId) { public Integer getLatestReinspectionId(String refId) {
try { try {
String sql = "SELECT id FROM reinspection WHERE ref_id=? ORDER BY id DESC LIMIT 1"; String sql = "SELECT id FROM reinspection WHERE ref_id=? ORDER BY id DESC LIMIT 1";
@ -156,8 +157,6 @@ public class PendinglistService {
} }
} }
public Map<String, Object> getlistdata(String ref) { public Map<String, Object> getlistdata(String ref) {
Map<String, Object> regDetails = getRegDetails(ref); Map<String, Object> regDetails = getRegDetails(ref);
@ -185,7 +184,6 @@ public class PendinglistService {
return jdbcTemplate.queryForList(sql, ref); return jdbcTemplate.queryForList(sql, ref);
} }
public Map<String, Object> getdetailsbyrefid(String refId) { public Map<String, Object> getdetailsbyrefid(String refId) {
Map<String, Object> response = new HashMap<>(); Map<String, Object> response = new HashMap<>();
@ -193,21 +191,19 @@ public class PendinglistService {
// 1 — Application details // 1 — Application details
Map<String, Object> app = jdbcTemplate.queryForMap( 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", "SELECT *,DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') as r_Cdate FROM reg_details WHERE ref_id=? AND is_active=1",
refId
);
refId);
// 2 — Complaint details (grouped) // 2 — Complaint details (grouped)
List<Map<String, Object>> complaints = jdbcTemplate.queryForList( List<Map<String, Object>> complaints = jdbcTemplate.queryForList(
"SELECT cn.name AS nature, SUM(cd.no_of_trees) AS count " + "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 " + "FROM complaint_details cd JOIN comp_nature cn ON cn.id=cd.comp_nature_id " +
"WHERE cd.ref_id=? GROUP BY cn.name", refId
);
"WHERE cd.ref_id=? GROUP BY cn.name",
refId);
// 3 — Complaint images // 3 — Complaint images
List<String> compImages = jdbcTemplate.queryForList( List<String> compImages = jdbcTemplate.queryForList(
"SELECT img_path FROM img_uploads WHERE ref_id=? AND is_active=1", "SELECT img_path FROM img_uploads WHERE ref_id=? AND is_active=1",
new Object[]{refId}, String.class
).stream()
new Object[] { refId }, String.class).stream()
.map(path -> fileBaseUrl + "/gccofficialapp/files" + path) .map(path -> fileBaseUrl + "/gccofficialapp/files" + path)
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -218,8 +214,7 @@ public class PendinglistService {
// 4 — Inspection details // 4 — Inspection details
List<Map<String, Object>> inspectionList = new ArrayList<>(); List<Map<String, Object>> inspectionList = new ArrayList<>();
String sql =
"SELECT id.*, um.name AS inspector_name, " +
String sql = "SELECT id.*, um.name AS inspector_name, " +
" DATE_FORMAT(id.cdate, '%d-%m-%Y %l:%i %p') AS f_Cdate " + " DATE_FORMAT(id.cdate, '%d-%m-%Y %l:%i %p') AS f_Cdate " +
"FROM inspection_data id " + "FROM inspection_data id " +
"LEFT JOIN user_maping um ON um.userid = id.cby " + "LEFT JOIN user_maping um ON um.userid = id.cby " +
@ -234,9 +229,7 @@ public class PendinglistService {
"ORDER BY FIELD(id.inspection_by, 'GCC', 'NGO', 'TNFD')"; "ORDER BY FIELD(id.inspection_by, 'GCC', 'NGO', 'TNFD')";
List<Map<String, Object>> rows = jdbcTemplate.queryForList( List<Map<String, Object>> rows = jdbcTemplate.queryForList(
sql, refId, refId
);
sql, refId, refId);
for (Map<String, Object> row : rows) { for (Map<String, Object> row : rows) {
@ -248,8 +241,7 @@ public class PendinglistService {
"FROM inspection_tree_data itd " + "FROM inspection_tree_data itd " +
"JOIN inspection_recommend_master rm ON rm.rid = itd.action " + "JOIN inspection_recommend_master rm ON rm.rid = itd.action " +
"WHERE itd.inspection_data_id=? AND itd.isactive=1", "WHERE itd.inspection_data_id=? AND itd.isactive=1",
inspId
);
inspId);
row.put("recommendations", recommend); row.put("recommendations", recommend);
@ -269,12 +261,48 @@ public class PendinglistService {
inspectionList.add(row); 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); response.put("inspections", inspectionList);
// 5 — Re-Inspection Details // 5 — Re-Inspection Details
String reSql =
"SELECT r.id AS reins_id, r.committee_action, r.remarks AS reins_remarks, " +
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, " + " 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 " + " cm.event_name, DATE_FORMAT(cm.event_date, '%d-%m-%Y') AS event_date " +
"FROM reinspection r " + "FROM reinspection r " +
@ -286,7 +314,6 @@ public class PendinglistService {
response.put("reinspections", reinspectionList); response.put("reinspections", reinspectionList);
return response; return response;
} }
@ -304,14 +331,12 @@ public class PendinglistService {
} }
} }
public Map<String, Object> saveCommittee( public Map<String, Object> saveCommittee(
String refId, String refId,
String remarks, String remarks,
int meetingid, int meetingid,
int userId, int userId,
List<Map<String, Object>> decisions
) {
List<Map<String, Object>> decisions) {
Map<String, Object> response = new HashMap<>(); Map<String, Object> response = new HashMap<>();
@ -358,13 +383,11 @@ public class PendinglistService {
return keyHolder.getKey().intValue(); // generated committee_data.id return keyHolder.getKey().intValue(); // generated committee_data.id
} }
public List<Integer> saveCommitteeTreeData( public List<Integer> saveCommitteeTreeData(
List<Map<String, Object>> decisions, List<Map<String, Object>> decisions,
int committeeDataId, int committeeDataId,
String refId, String refId,
int userId
) {
int userId) {
String sql = "INSERT INTO committee_tree_data (nooftrees, committee_action, committee_data_id, ref_id, cby) " + String sql = "INSERT INTO committee_tree_data (nooftrees, committee_action, committee_data_id, ref_id, cby) " +
"VALUES (?, ?, ?, ?, ?)"; "VALUES (?, ?, ?, ?, ?)";
@ -395,7 +418,7 @@ public class PendinglistService {
} }
public List<Map<String, Object>> getvcsavedrefids() { 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 { try {
return jdbcTemplate.queryForList(sql); return jdbcTemplate.queryForList(sql);
} catch (Exception e) { } catch (Exception e) {
@ -433,7 +456,7 @@ public class PendinglistService {
int generatedId = keyHolder.getKey().intValue(); int generatedId = keyHolder.getKey().intValue();
// Update reg_details.reinspection_id // Update reg_details.reinspection_id
jdbcTemplate.update("UPDATE reg_details SET reinspection_id=? WHERE ref_id=?",generatedId, refId);
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); jdbcTemplate.update("UPDATE inspection_data SET isactive=0,isdelete=1 WHERE ref_id=?", refId);
@ -441,9 +464,7 @@ public class PendinglistService {
response.put("message", "Committee decision saved!"); response.put("message", "Committee decision saved!");
response.put("reinspection_id", generatedId); response.put("reinspection_id", generatedId);
}
catch (Exception e)
{
} catch (Exception e) {
response.put("status", "error"); response.put("status", "error");
response.put("message", e.getMessage()); response.put("message", e.getMessage());
} }
@ -452,6 +473,4 @@ public class PendinglistService {
} }
} }

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); 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 { try {
StringBuilder sql = new StringBuilder( StringBuilder sql = new StringBuilder(
@ -80,6 +80,22 @@ public class ReportService {
params.add(zones); 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( return jdbcTemplate.queryForList(
sql.toString(), sql.toString(),
params.toArray(), params.toArray(),
@ -182,7 +198,7 @@ public class ReportService {
} }
public Map<String, Object> getRegDetails(String ref) { 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); return jdbcTemplate.queryForMap(sql, ref);
} }
@ -518,4 +534,11 @@ public class ReportService {
return response; 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);
}
} }

128
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/service/RegisterService.java

@ -41,7 +41,6 @@ public class RegisterService {
this.jdbcTemplate = new JdbcTemplate(dataSource); this.jdbcTemplate = new JdbcTemplate(dataSource);
} }
public List<Map<String, Object>> ViewZoneDropdown() { public List<Map<String, Object>> ViewZoneDropdown() {
String sql = "SELECT zone_name " String sql = "SELECT zone_name "
+ "FROM zone_master " + "FROM zone_master "
@ -60,7 +59,7 @@ public class RegisterService {
+ "FROM ward_master " + "FROM ward_master "
+ "WHERE is_active=1 AND is_delete=0 AND zone_id=?"; + "WHERE is_active=1 AND is_delete=0 AND zone_id=?";
try { try {
return jdbcTemplate.queryForList(sql,zone);
return jdbcTemplate.queryForList(sql, zone);
} catch (Exception e) { } catch (Exception e) {
// TODO: handle exception // TODO: handle exception
e.printStackTrace(); e.printStackTrace();
@ -68,7 +67,6 @@ public class RegisterService {
} }
} }
public List<Map<String, Object>> getRoadNamesByWard(String ward) { public List<Map<String, Object>> getRoadNamesByWard(String ward) {
try { try {
String encodedWard = URLEncoder.encode("'" + ward + "'", StandardCharsets.UTF_8.toString()); String encodedWard = URLEncoder.encode("'" + ward + "'", StandardCharsets.UTF_8.toString());
@ -103,8 +101,6 @@ public class RegisterService {
} }
} }
public List<Map<String, Object>> getRoadType() { public List<Map<String, Object>> getRoadType() {
String sql = "Select id,road_type as roadType from road_type_master where is_active = 1 and is_delete = 0"; String sql = "Select id,road_type as roadType from road_type_master where is_active = 1 and is_delete = 0";
try { try {
@ -115,7 +111,6 @@ public class RegisterService {
} }
} }
public List<Map<String, Object>> getRoadTypeMaterial() { public List<Map<String, Object>> getRoadTypeMaterial() {
String sql = "Select id,roadtype_material from roadtype_material_master where is_active = 1 and is_delete = 0"; String sql = "Select id,roadtype_material from roadtype_material_master where is_active = 1 and is_delete = 0";
try { try {
@ -146,7 +141,6 @@ public class RegisterService {
} }
} }
public List<Map<String, Object>> getMonthList() { public List<Map<String, Object>> getMonthList() {
String sql = "SELECT id, month_name FROM month_master WHERE is_active = 1 AND is_delete = 0 ORDER BY id"; String sql = "SELECT id, month_name FROM month_master WHERE is_active = 1 AND is_delete = 0 ORDER BY id";
try { try {
@ -157,7 +151,6 @@ public class RegisterService {
} }
} }
public List<Map<String, Object>> getYearList() { public List<Map<String, Object>> getYearList() {
String sql = "SELECT id, year_name FROM year_master WHERE is_active = 1 AND is_delete = 0 ORDER BY id DESC"; String sql = "SELECT id, year_name FROM year_master WHERE is_active = 1 AND is_delete = 0 ORDER BY id DESC";
try { try {
@ -168,10 +161,28 @@ public class RegisterService {
} }
} }
public Map<String, Object> saveRoadWarDetails(Map<String, Object> payload) { public Map<String, Object> saveRoadWarDetails(Map<String, Object> payload) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
try { try {
String roadId = String.valueOf(payload.get("road_id"));
Integer count = jdbcTemplate.queryForObject(
"SELECT COUNT(*) " +
"FROM road_details_master " +
"WHERE road_id = ? " +
"AND is_active = 1 " +
"AND is_delete = 0",
Integer.class,
roadId);
if (count != null && count > 0) {
result.put("status", false);
result.put("message",
"Selected road is already mapped to another Road War record");
return result;
}
String insertRoad = "INSERT INTO road_details_master " String insertRoad = "INSERT INTO road_details_master "
+ "(zone, ward, road_name, road_type, road_length, road_avg_width, road_area, " + "(zone, ward, road_name, road_type, road_length, road_avg_width, road_area, "
@ -194,7 +205,7 @@ public class RegisterService {
ps.setObject(2, payload.get("ward")); ps.setObject(2, payload.get("ward"));
ps.setObject(3, payload.get("road_name")); ps.setObject(3, payload.get("road_name"));
ps.setObject(4, payload.get("road_type")); ps.setObject(4, payload.get("road_type"));
// ps.setObject(5, payload.get("highway_ans"));
// ps.setObject(5, payload.get("highway_ans"));
ps.setObject(5, payload.get("road_length")); ps.setObject(5, payload.get("road_length"));
ps.setObject(6, payload.get("road_avg_width")); ps.setObject(6, payload.get("road_avg_width"));
ps.setObject(7, payload.get("road_area")); ps.setObject(7, payload.get("road_area"));
@ -301,15 +312,15 @@ public class RegisterService {
return result; return result;
} }
public List<Map<String, Object>> getAllRoadWarDetails( public List<Map<String, Object>> getAllRoadWarDetails(
String userid, String userid,
String zone, String zone,
String ward, String ward,
String roadId) { String roadId) {
StringBuilder sql = new StringBuilder(" SELECT rdm.*,rtm.road_type as road_type_name,rtmm.roadtype_material as roadtype_material_name,ftm.footpath_type_name as footpath_material_name FROM road_details_master rdm " +
StringBuilder sql = new StringBuilder(
" SELECT rdm.*,rtm.road_type as road_type_name,rtmm.roadtype_material as roadtype_material_name,ftm.footpath_type_name as footpath_material_name FROM road_details_master rdm "
+
" LEFT JOIN road_type_master rtm ON rtm.id= rdm.road_type " + " LEFT JOIN road_type_master rtm ON rtm.id= rdm.road_type " +
" LEFT JOIN roadtype_material_master rtmm ON rtmm.id= rdm.road_type_material " + " LEFT JOIN roadtype_material_master rtmm ON rtmm.id= rdm.road_type_material " +
" LEFT JOIN footpath_type_master ftm ON ftm.id= rdm.footpath_material " + " LEFT JOIN footpath_type_master ftm ON ftm.id= rdm.footpath_material " +
@ -317,7 +328,6 @@ public class RegisterService {
List<Object> params = new ArrayList<>(); List<Object> params = new ArrayList<>();
if (userid != null && !userid.isEmpty()) { if (userid != null && !userid.isEmpty()) {
sql.append(" AND rdm.cby = ?"); sql.append(" AND rdm.cby = ?");
params.add(userid); params.add(userid);
@ -345,28 +355,25 @@ public class RegisterService {
return jdbcTemplate.queryForList(sql.toString(), params.toArray()); return jdbcTemplate.queryForList(sql.toString(), params.toArray());
} }
public Map<String, Object> getRoadWarDetailsById(String refid) { public Map<String, Object> getRoadWarDetailsById(String refid) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
try { try {
String sql =
"SELECT rdm.*, rtm.road_type As road_type_name,rtmm.roadtype_material as roadtype_material,ftm.footpath_type_name as footpath_material_name " +
String sql = "SELECT rdm.*, rtm.road_type As road_type_name,rtmm.roadtype_material as roadtype_material,ftm.footpath_type_name as footpath_material_name "
+
"FROM road_details_master rdm " + "FROM road_details_master rdm " +
"LEFT JOIN road_type_master rtm ON rtm.id = rdm.road_type " + "LEFT JOIN road_type_master rtm ON rtm.id = rdm.road_type " +
"LEFT JOIN roadtype_material_master rtmm ON rtmm.id = rdm.road_type_material " + "LEFT JOIN roadtype_material_master rtmm ON rtmm.id = rdm.road_type_material " +
"LEFT JOIN footpath_type_master ftm ON ftm.id= rdm.footpath_material " + "LEFT JOIN footpath_type_master ftm ON ftm.id= rdm.footpath_material " +
"WHERE rdm.ref_id = ? AND rdm.is_active=1 AND rdm.is_delete=0 "; "WHERE rdm.ref_id = ? AND rdm.is_active=1 AND rdm.is_delete=0 ";
Map<String, Object> road =
jdbcTemplate.queryForMap(sql, refid);
Map<String, Object> road = jdbcTemplate.queryForMap(sql, refid);
result.putAll(road); result.putAll(road);
List<Map<String, Object>> relayingDetails =
jdbcTemplate.queryForList(
List<Map<String, Object>> relayingDetails = jdbcTemplate.queryForList(
" SELECT rd.*,mm.month_name,ym.year_name,rtmm.roadtype_material " " SELECT rd.*,mm.month_name,ym.year_name,rtmm.roadtype_material "
+ " FROM relaying_details rd " + " FROM relaying_details rd "
+ " LEFT JOIN month_master mm on mm.id = rd.relay_month " + " LEFT JOIN month_master mm on mm.id = rd.relay_month "
@ -401,8 +408,7 @@ public class RegisterService {
Integer count = jdbcTemplate.queryForObject( Integer count = jdbcTemplate.queryForObject(
sql, sql,
Integer.class, Integer.class,
roadId
);
roadId);
response.put("status", true); response.put("status", true);
response.put("exists", count != null && count > 0); response.put("exists", count != null && count > 0);
@ -440,8 +446,7 @@ public class RegisterService {
"AND is_delete = 0", "AND is_delete = 0",
Integer.class, Integer.class,
roadId, roadId,
refId
);
refId);
if (count != null && count > 0) { if (count != null && count > 0) {
@ -452,39 +457,41 @@ public class RegisterService {
return result; return result;
} }
// COPY CURRENT RECORD TO LOG TABLE
//COPY CURRENT RECORD TO LOG TABLE
String logSql =
"INSERT INTO road_details_master_log (" +
"id, zone, ward, road_id, road_name,area_name,locality_name, road_type,road_type_material, highway_ans, " +
String logSql = "INSERT INTO road_details_master_log (" +
"id, zone, ward, road_id, road_name,area_name,locality_name, road_type,road_type_material, highway_ans, "
+
"road_length,road_row_width, road_avg_width,road_min_width,road_max_width, road_area, " + "road_length,road_row_width, road_avg_width,road_min_width,road_max_width, road_area, " +
"road_from,road_to,is_footpath,footpath_at, "+
"road_from,road_to,is_footpath,footpath_at, " +
"footpath_material, footpath_length, footpath_width, " + "footpath_material, footpath_length, footpath_width, " +
"r_footpath_material, r_footpath_length, r_footpath_width, " + "r_footpath_material, r_footpath_length, r_footpath_width, " +
"footpath_from_location, footpath_to_location, " + "footpath_from_location, footpath_to_location, " +
"swd_at,rhs_swdlength,rhs_swdsize,scp_at,rhs_scpCount,manhole_at,r_mhCount,cp_at,r_cpCount,rwh_at,r_rwCount, "+
"swd_at,rhs_swdlength,rhs_swdsize,scp_at,rhs_scpCount,manhole_at,r_mhCount,cp_at,r_cpCount,rwh_at,r_rwCount, "
+
"is_swd, swd_from, swd_to, swd_length, swd_size, " + "is_swd, swd_from, swd_to, swd_length, swd_size, " +
"is_scp, scp_count, is_manhole, manhole_count, manhole_location, " + "is_scp, scp_count, is_manhole, manhole_count, manhole_location, " +
"is_cpipe, cpipe_count, is_rwh, rwh_count, " + "is_cpipe, cpipe_count, is_rwh, rwh_count, " +
"sewer_length, sewer_size, is_electric_poles, ep_count, is_hml,hml_count, " + "sewer_length, sewer_size, is_electric_poles, ep_count, is_hml,hml_count, " +
"is_streetlight_poles,streetlight_poles_count,is_mml,mml_count, "+
"is_streetlight_poles,streetlight_poles_count,is_mml,mml_count, " +
"culvert_bridge_count, details, is_busshelter, busshelter_count, " + "culvert_bridge_count, details, is_busshelter, busshelter_count, " +
"is_centermedian, erp_asset_code, ref_id, cdate, cby, " + "is_centermedian, erp_asset_code, ref_id, cdate, cby, " +
"updated_date, updated_by, is_active, is_delete) " + "updated_date, updated_by, is_active, is_delete) " +
"SELECT " + "SELECT " +
"id, zone, ward, road_id, road_name,area_name,locality_name, road_type,road_type_material, highway_ans, " +
"id, zone, ward, road_id, road_name,area_name,locality_name, road_type,road_type_material, highway_ans, "
+
"road_length,road_row_width, road_avg_width,road_min_width,road_max_width, road_area, " + "road_length,road_row_width, road_avg_width,road_min_width,road_max_width, road_area, " +
"road_from,road_to,is_footpath,footpath_at, "+
"road_from,road_to,is_footpath,footpath_at, " +
"footpath_material, footpath_length, footpath_width, " + "footpath_material, footpath_length, footpath_width, " +
"r_footpath_material, r_footpath_length, r_footpath_width, " + "r_footpath_material, r_footpath_length, r_footpath_width, " +
"footpath_from_location, footpath_to_location, " + "footpath_from_location, footpath_to_location, " +
"swd_at,rhs_swdlength,rhs_swdsize,scp_at,rhs_scpCount,manhole_at,r_mhCount,cp_at,r_cpCount,rwh_at,r_rwCount, "+
"swd_at,rhs_swdlength,rhs_swdsize,scp_at,rhs_scpCount,manhole_at,r_mhCount,cp_at,r_cpCount,rwh_at,r_rwCount, "
+
"is_swd, swd_from, swd_to, swd_length, swd_size, " + "is_swd, swd_from, swd_to, swd_length, swd_size, " +
"is_scp, scp_count, is_manhole, manhole_count, manhole_location, " + "is_scp, scp_count, is_manhole, manhole_count, manhole_location, " +
"is_cpipe, cpipe_count, is_rwh, rwh_count, " + "is_cpipe, cpipe_count, is_rwh, rwh_count, " +
"sewer_length, sewer_size, is_electric_poles, ep_count, is_hml,hml_count, " + "sewer_length, sewer_size, is_electric_poles, ep_count, is_hml,hml_count, " +
"is_streetlight_poles,streetlight_poles_count,is_mml,mml_count, "+
"is_streetlight_poles,streetlight_poles_count,is_mml,mml_count, " +
"culvert_bridge_count, details, is_busshelter, busshelter_count, " + "culvert_bridge_count, details, is_busshelter, busshelter_count, " +
"is_centermedian, erp_asset_code, ref_id, cdate, cby, " + "is_centermedian, erp_asset_code, ref_id, cdate, cby, " +
"updated_date, updated_by, is_active, is_delete " + "updated_date, updated_by, is_active, is_delete " +
@ -493,12 +500,9 @@ public class RegisterService {
jdbcTemplate.update(logSql, refId); jdbcTemplate.update(logSql, refId);
// 3. UPDATE ROAD MASTER // 3. UPDATE ROAD MASTER
String updateSql =
"UPDATE road_details_master SET " +
String updateSql = "UPDATE road_details_master SET " +
"zone=?, " + "zone=?, " +
"ward=?, " + "ward=?, " +
"road_id=?, " + "road_id=?, " +
@ -508,15 +512,15 @@ public class RegisterService {
"road_type=?, " + "road_type=?, " +
"road_type_material=?, " + "road_type_material=?, " +
"road_length=?, " + "road_length=?, " +
"road_row_width=?, "+
"road_row_width=?, " +
"road_avg_width=?, " + "road_avg_width=?, " +
"road_min_width=?, " + "road_min_width=?, " +
"road_max_width=?, " + "road_max_width=?, " +
"road_area=?, " + "road_area=?, " +
"road_from=?, "+
"road_to=?, "+
"is_footpath=?, "+
"footpath_at=?, "+
"road_from=?, " +
"road_to=?, " +
"is_footpath=?, " +
"footpath_at=?, " +
"footpath_material=?, " + "footpath_material=?, " +
"footpath_length=?, " + "footpath_length=?, " +
"footpath_width=?, " + "footpath_width=?, " +
@ -528,7 +532,7 @@ public class RegisterService {
"is_swd=?, " + "is_swd=?, " +
"swd_from=?, " + "swd_from=?, " +
"swd_to=?, " + "swd_to=?, " +
"swd_at=?,"+
"swd_at=?," +
"swd_length=?, " + "swd_length=?, " +
"swd_size=?, " + "swd_size=?, " +
"rhs_swdlength=?, " + "rhs_swdlength=?, " +
@ -536,7 +540,7 @@ public class RegisterService {
"is_scp=?, " + "is_scp=?, " +
"scp_at=?, " + "scp_at=?, " +
"scp_count=?, " + "scp_count=?, " +
"rhs_scpCount=?,"+
"rhs_scpCount=?," +
"is_manhole=?, " + "is_manhole=?, " +
"manhole_count=?, " + "manhole_count=?, " +
"manhole_at=?, " + "manhole_at=?, " +
@ -652,8 +656,7 @@ public class RegisterService {
payload.get("is_centermedian"), payload.get("is_centermedian"),
updatedBy, updatedBy,
refId
);
refId);
// 4. SOFT DELETE OLD RELAYING RECORDS // 4. SOFT DELETE OLD RELAYING RECORDS
@ -666,17 +669,14 @@ public class RegisterService {
"WHERE road_ref_id=? " + "WHERE road_ref_id=? " +
"AND is_active=1", "AND is_active=1",
updatedBy, updatedBy,
refId
);
refId);
// 5. INSERT NEW RELAYING RECORDS // 5. INSERT NEW RELAYING RECORDS
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<Map<String, Object>> relays =
(List<Map<String, Object>>) payload.get("relaying_details");
List<Map<String, Object>> relays = (List<Map<String, Object>>) payload.get("relaying_details");
String insertRelay =
"INSERT INTO relaying_details " +
String insertRelay = "INSERT INTO relaying_details " +
"(road_ref_id, relay_month, relay_year,road_type_material, cr_value, road_type, remarks, cby) " + "(road_ref_id, relay_month, relay_year,road_type_material, cr_value, road_type, remarks, cby) " +
"VALUES (?,?,?,?,?,?,?,?)"; "VALUES (?,?,?,?,?,?,?,?)";
@ -693,8 +693,7 @@ public class RegisterService {
relay.get("cr_value"), relay.get("cr_value"),
relay.get("road_type"), relay.get("road_type"),
relay.get("remarks"), relay.get("remarks"),
updatedBy
);
updatedBy);
} }
} }
@ -712,7 +711,6 @@ public class RegisterService {
return result; return result;
} }
public Map<String, Object> deleteRoadWarDetails(String refId, String updatedby) { public Map<String, Object> deleteRoadWarDetails(String refId, String updatedby) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
@ -722,23 +720,21 @@ public class RegisterService {
"UPDATE road_details_master " + "UPDATE road_details_master " +
"SET is_active=0, " + "SET is_active=0, " +
"is_delete=1, " + "is_delete=1, " +
"updated_by=?, "+
"updated_by=?, " +
"updated_date=NOW() " + "updated_date=NOW() " +
"WHERE ref_id=? " + "WHERE ref_id=? " +
"AND is_active=1", "AND is_active=1",
updatedby,refId
);
updatedby, refId);
jdbcTemplate.update( jdbcTemplate.update(
"UPDATE relaying_details " + "UPDATE relaying_details " +
"SET is_active=0, " + "SET is_active=0, " +
"is_delete=1, " + "is_delete=1, " +
"updated_by=?, "+
"updated_by=?, " +
"updated_date=NOW() " + "updated_date=NOW() " +
"WHERE road_ref_id=? " + "WHERE road_ref_id=? " +
"AND is_active=1", "AND is_active=1",
updatedby,refId
);
updatedby, refId);
if (roadUpdated > 0) { if (roadUpdated > 0) {
@ -749,7 +745,7 @@ public class RegisterService {
} else { } else {
result.put("status", false); result.put("status", false);
result.put("message","Record not found");
result.put("message", "Record not found");
} }
} catch (Exception e) { } catch (Exception e) {

137
gcc_officer_portal/src/main/resources/templates/modules/greencommittee/pendinglist.html

@ -1,38 +1,47 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"> <html xmlns:th="http://www.thymeleaf.org">
<head th:replace="~{fragments/modules/base/head :: head}"></head> <head th:replace="~{fragments/modules/base/head :: head}"></head>
<style> <style>
.thumb-img {
.thumb-img {
width: 90px; width: 90px;
height: 70px; height: 70px;
object-fit: cover; object-fit: cover;
cursor: pointer; cursor: pointer;
border: 2px solid #ddd; border: 2px solid #ddd;
margin-right: 5px; margin-right: 5px;
}
.thumb-img:hover {
}
.thumb-img:hover {
border-color: #007bff; border-color: #007bff;
}
#viewModal .modal-body {
max-height: 70vh; /* Limit the height to 70% of the viewport */
overflow-y: auto; /* Enable vertical scrolling */
} }
/* #imageViewModal .modal-body {
#viewModal .modal-body {
max-height: 70vh;
/* Limit the height to 70% of the viewport */
overflow-y: auto;
/* Enable vertical scrolling */
}
/* #imageViewModal .modal-body {
max-height: 60vh; max-height: 60vh;
overflow-y: auto; overflow-y: auto;
} */ } */
.full-image-modal { .full-image-modal {
width: 50%; width: 50%;
height: 70vh; /* fixed height */
object-fit: cover; /* fills modal without distortion */
height: 70vh;
/* fixed height */
object-fit: cover;
/* fills modal without distortion */
object-position: center; object-position: center;
background-color: #000; /* if image is smaller */
}
background-color: #000;
/* if image is smaller */
}
</style> </style>
<body>
<body>
@ -61,8 +70,8 @@
<div class="col-lg-4"> <div class="col-lg-4">
<nav class="breadcrumb-container" aria-label="breadcrumb"> <nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb"> <ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/gcc/index"><i
class="ik ik-home"></i></a></li>
<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" aria-current="page">Green Committee</li>
<li class="breadcrumb-item active" aria-current="page">Pending List</li> <li class="breadcrumb-item active" aria-current="page">Pending List</li>
</ol> </ol>
@ -74,7 +83,7 @@
<div class="row"> <div class="row">
<div class="col-md-12" >
<div class="col-md-12">
<div class="card"> <div class="card">
<div class="card-block"> <div class="card-block">
<div class="row"> <div class="row">
@ -93,12 +102,16 @@
</select> </select>
</div> </div>
</div> </div>
<div class="page-header-title" >
<h5 style="margin: 0;font-weight: bold;">Green Committee Pending List</h5><span th:text="${LoginUserId}" id="userIdSpan" style="display: none;"></span><hr>
<div class="page-header-title">
<h5 style="margin: 0;font-weight: bold;">Green Committee Pending List</h5><span
th:text="${LoginUserId}" id="userIdSpan" style="display: none;"></span>
<hr>
</div> </div>
<div> <div>
<table id="RequestListDatatable" class="table table-striped table-bordered table-hover dataTable" role="grid">
<table id="RequestListDatatable"
class="table table-striped table-bordered table-hover dataTable"
role="grid">
<thead class="thead-dark"> <thead class="thead-dark">
<tr role="row"> <tr role="row">
<th class="text-center">S.No</th> <th class="text-center">S.No</th>
@ -170,7 +183,8 @@
<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 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 style="position: relative; top: 50%; transform: translateY(-50%);">
<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;"> <div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;">
<span class="sr-only">Loading...</span> <span class="sr-only">Loading...</span>
@ -201,12 +215,12 @@
$("#imageViewModal").modal("show"); $("#imageViewModal").modal("show");
} }
$(document).ready(function() {
$(document).ready(function () {
var table = $('#RequestListDatatable').DataTable({ var table = $('#RequestListDatatable').DataTable({
dom: 'Bftip', dom: 'Bftip',
columnDefs: [ columnDefs: [
{ width: "150px", targets: 7 }, { width: "150px", targets: 7 },
{width: "350px", targets: 8}
{ width: "350px", targets: 8 }
], ],
lengthMenu: [ lengthMenu: [
[200, 400, -1], [200, 400, -1],
@ -267,9 +281,9 @@
}); });
$('#zonedropdown').on('change', function () { $('#zonedropdown').on('change', function () {
let miss_meet=$('#dropdownevent').val();
let miss_meet = $('#dropdownevent').val();
if(!miss_meet){
if (!miss_meet) {
Swal.fire("Warning", "Please select an meeting!", "warning"); Swal.fire("Warning", "Please select an meeting!", "warning");
return; return;
} }
@ -367,8 +381,8 @@
console.log("Final Submit:", console.log("Final Submit:",
"Ref ID:", refId, "Ref ID:", refId,
"meetingid:",meetingid,
"userId:",userId,
"meetingid:", meetingid,
"userId:", userId,
"Selected decisions:", selected, "Selected decisions:", selected,
"Remarks:", remarks "Remarks:", remarks
); );
@ -445,7 +459,7 @@
remarks: remarks, remarks: remarks,
userId: userId userId: userId
}), }),
success: function(res) {
success: function (res) {
$submitBtn.prop("disabled", false).text("Save"); $submitBtn.prop("disabled", false).text("Save");
if (res.status === "success") { if (res.status === "success") {
@ -466,7 +480,7 @@
}); });
} }
}, },
error: function(xhr) {
error: function (xhr) {
$submitBtn.prop("disabled", false).text("Save"); $submitBtn.prop("disabled", false).text("Save");
Swal.fire({ Swal.fire({
@ -565,6 +579,60 @@
// Inspection Cards // Inspection Cards
let inspCards = inspections.map(ins => { let inspCards = inspections.map(ins => {
// Pending card
if (ins.status === "PENDING") {
return `
<div class="col-md-4">
<div class="card mb-3 shadow-sm">
<div class="card-header text-white text-center" style="background:#404e67">
<strong>${ins.inspection_by}</strong>
</div>
<div class="card-body text-center">
<h5 class="text-warning">
<i class="fa fa-clock-o"></i> Pending
</h5>
<p class="text-muted mb-0">
Inspection is yet to be completed.
</p>
</div>
</div>
</div>
`;
}
// Completed card
let recChips = (ins.recommendations || []).map(r =>
`<span class="badge badge-warning mr-1 mb-2">
${r.name}: ${r.count} (${r.treename})
</span>`
).join("");
let inspThumbs = (ins.images || []).map(i =>
`<img src="${i}" class="img-thumbnail thumb-img mb-1"
onclick="openFullImage('${i}')">`
).join("");
return `
<div class="col-md-4">
<div class="card mb-3 shadow-sm">
<div class="card-header text-white text-center" style="background:#404e67">
<strong>${ins.inspection_by}</strong>
</div>
<div class="card-body">
<p><strong>Inspector:</strong> ${ins.inspector_name}</p>
<p><strong>Date:</strong> ${ins.f_Cdate}</p>
<p><strong>Remarks:</strong> ${ins.remarks}</p>
<p><strong>Recommendation:</strong><br>${recChips}</p>
<p><strong>Images (${ins.images.length}):</strong><br>${inspThumbs}</p>
</div>
</div>
</div>
`;
}).join("");
/*let inspCards = inspections.map(ins => {
let recChips = ins.recommendations.map(r => let recChips = ins.recommendations.map(r =>
`<span class="badge badge-warning mr-1 mb-2">${r.name}: ${r.count} (${r.treename})</span>` `<span class="badge badge-warning mr-1 mb-2">${r.name}: ${r.count} (${r.treename})</span>`
).join(""); ).join("");
@ -591,7 +659,7 @@
</div> </div>
</div> </div>
`; `;
}).join("");
}).join("");*/
let content = ` let content = `
<h5>Application Information</h5> <h5>Application Information</h5>
@ -668,7 +736,7 @@
function fetchgreenCommitteeList(){
function fetchgreenCommitteeList() {
const selectedOption = $('#dropdownevent option:selected').text(); const selectedOption = $('#dropdownevent option:selected').text();
@ -697,7 +765,7 @@
$.ajax({ $.ajax({
url: '/gcc/api/greencommittee/pendinglist/getgreencommitteelist', url: '/gcc/api/greencommittee/pendinglist/getgreencommitteelist',
data: { date: formattedDate,zones:selectedZone },
data: { date: formattedDate, zones: selectedZone },
method: 'GET', method: 'GET',
contentType: 'application/json', contentType: 'application/json',
success: function (data) { success: function (data) {
@ -784,7 +852,7 @@
], ],
columnDefs: [ columnDefs: [
{ width: "150px", targets: 7 }, { width: "150px", targets: 7 },
{width: "350px", targets: 8}
{ width: "350px", targets: 8 }
], ],
lengthMenu: [ lengthMenu: [
@ -839,7 +907,7 @@
$.ajax({ $.ajax({
url: "/gcc/api/greencommittee/pendinglist/getCommitteeActions", // your API endpoint url: "/gcc/api/greencommittee/pendinglist/getCommitteeActions", // your API endpoint
method: "GET", method: "GET",
success: function(list) {
success: function (list) {
let html = ""; let html = "";
@ -1004,5 +1072,6 @@
</script> </script>
</body>
</body>
</html> </html>

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

@ -1,11 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"> <html xmlns:th="http://www.thymeleaf.org">
<head th:replace="~{fragments/modules/base/head :: head}"></head> <head th:replace="~{fragments/modules/base/head :: head}"></head>
<style> <style>
</style> </style>
<body>
<body>
@ -34,8 +36,8 @@
<div class="col-lg-4"> <div class="col-lg-4">
<nav class="breadcrumb-container" aria-label="breadcrumb"> <nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb"> <ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/gcc/index"><i
class="ik ik-home"></i></a></li>
<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" aria-current="page">Green Committee</li>
<li class="breadcrumb-item active" aria-current="page">Reports</li> <li class="breadcrumb-item active" aria-current="page">Reports</li>
</ol> </ol>
@ -47,7 +49,8 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <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" style="margin-top: 0px;"><span th:text="${LoginUserId}" id="userIdSpan"
style="display: none;"></span>
<div class="card-block"> <div class="card-block">
<div class="row"> <div class="row">
@ -65,17 +68,37 @@
<option value="">Select Zone </option> <option value="">Select Zone </option>
</select> </select>
</div> </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>
<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 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>
<div> <div>
<table id="RequestListDatatable" class="table table-striped table-bordered table-hover dataTable" role="grid">
<table id="RequestListDatatable"
class="table table-striped table-bordered table-hover dataTable"
role="grid">
<thead class="thead-dark"> <thead class="thead-dark">
<tr role="row"> <tr role="row">
<th class="text-center" rowspan="2">S.No</th> <th class="text-center" rowspan="2">S.No</th>
<th class="text-center" rowspan="2">Application 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">Name</th>
<th class="text-center" rowspan="2">Address</th> <th class="text-center" rowspan="2">Address</th>
<th class="text-center" rowspan="2">Reason</th> <th class="text-center" rowspan="2">Reason</th>
@ -105,7 +128,8 @@
</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 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 style="position: relative; top: 50%; transform: translateY(-50%);">
<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;"> <div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;">
<span class="sr-only">Loading...</span> <span class="sr-only">Loading...</span>
@ -129,12 +153,12 @@
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() {
$(document).ready(function () {
var table = $('#RequestListDatatable').DataTable({ var table = $('#RequestListDatatable').DataTable({
dom: 'Bftip', dom: 'Bftip',
columnDefs: [ columnDefs: [
{ width: "150px", targets: 3 }, { width: "150px", targets: 3 },
{width: "350px", targets: 4}
{ width: "350px", targets: 4 }
], ],
lengthMenu: [ lengthMenu: [
[200, 400, -1], [200, 400, -1],
@ -184,6 +208,7 @@
fetchEventDropdown(); fetchEventDropdown();
fetchZones(); fetchZones();
loadDepartments();
fetchgreenCommitteeList(); fetchgreenCommitteeList();
@ -194,11 +219,35 @@
fetchgreenCommitteeList(); 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 () { $('#zonedropdown').on('change', function () {
let miss_meet=$('#dropdownevent').val();
let miss_meet = $('#dropdownevent').val();
if(!miss_meet){
if (!miss_meet) {
Swal.fire("Warning", "Please select an meeting!", "warning"); Swal.fire("Warning", "Please select an meeting!", "warning");
return; return;
} }
@ -207,6 +256,16 @@
}); });
}); });
$('#applicationType').on('change', function () {
if ($('#applicationType').val() == "Public") {
$('#departmentdropdown').val("");
$('#departmentdropdownDiv').hide();
} else {
$('#departmentdropdownDiv').show();
}
fetchgreenCommitteeList();
});
function fetchZones() { function fetchZones() {
@ -263,23 +322,28 @@
}); });
} }
function fetchgreenCommitteeList(){
function fetchgreenCommitteeList() {
let selectedevent = $('#dropdownevent').val(); let selectedevent = $('#dropdownevent').val();
let selectedappType = $('#applicationType').val();
let selecteddepartment = $('#departmentdropdown').val();
console.log("selecteddepartment=" + selecteddepartment);
// Read zone dropdown value // Read zone dropdown value
let selectedZone = $('#zonedropdown').val(); let selectedZone = $('#zonedropdown').val();
console.log("selectedevent="+selectedevent+"AND selectedZone"+selectedZone);
console.log("selectedevent=" + selectedevent + "AND selectedZone" + selectedZone);
$('#pageLoader').show(); $('#pageLoader').show();
$.ajax({ $.ajax({
url: '/gcc/api/greencommittee/report/getgreencommitteelist', url: '/gcc/api/greencommittee/report/getgreencommitteelist',
data: { meetingid: selectedevent,zones:selectedZone },
data: { meetingid: selectedevent, zones: selectedZone, deptid: selecteddepartment, appType: selectedappType },
method: 'GET', method: 'GET',
contentType: 'application/json', contentType: 'application/json',
success: function (data) { success: function (data) {
console.log(data);
$('#pageLoader').hide(); $('#pageLoader').hide();
@ -306,13 +370,21 @@
}, },
{ data: 'ref_id', className: 'text-center' }, { 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 || '-' 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 // Reason
{ data: 'remarks',className: 'text-center' },
{ data: 'remarks', className: 'text-center' },
// No of trees // No of trees
{ data: 'total_trees', className: 'text-center' }, { data: 'total_trees', className: 'text-center' },
@ -381,7 +453,9 @@
columnDefs: [ columnDefs: [
{ width: "150px", targets: 3 }, { width: "150px", targets: 3 },
{width: "350px", targets: 4},
{ width: "150px", targets: 4 },
{ width: "350px", targets: 5 },
{ width: "120px", targets: 6 }, { width: "120px", targets: 6 },
{ width: "120px", targets: 7 }, { width: "120px", targets: 7 },
{ width: "120px", targets: 8 }, { width: "120px", targets: 8 },
@ -481,5 +555,6 @@
</script> </script>
</body>
</body>
</html> </html>
Loading…
Cancel
Save