From 493ad3912cb0406a5c0d5569e1f8538650fdffd6 Mon Sep 17 00:00:00 2001 From: yoganandhank Date: Mon, 13 Jul 2026 11:32:55 +0530 Subject: [PATCH] added deleted records to view in manpower and payment tracker files --- .../controller/HomeController.java | 13 + .../GccServicePaymentTrackerController.java | 55 ++++ .../GccServicePaymentTrackerService.java | 75 +++++ .../gcc_manpower/service/AppUserService.java | 29 ++ .../resources/application-local.properties | 7 +- .../resources/templates/fragments/navbar.html | 6 + .../gccservicepaymenttracker/dashboard.html | 280 +++++++++++++++++- src/main/resources/templates/home/home.html | 238 +++++++++++++++ 8 files changed, 696 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gcc_manpower/controller/HomeController.java b/src/main/java/com/gcc_manpower/controller/HomeController.java index 26811cc..ef917c7 100644 --- a/src/main/java/com/gcc_manpower/controller/HomeController.java +++ b/src/main/java/com/gcc_manpower/controller/HomeController.java @@ -623,6 +623,19 @@ public class HomeController { return appUserService.getAllEmployeesWithDeleted(); } + @GetMapping("/api/work-orders/deleted") + @ResponseBody + public List> getDeletedWorkOrders(HttpSession session) { + String usrName = (String) session.getAttribute("usrName"); + String usrRole = (String) session.getAttribute("usrRole"); + boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole); + + if (usrName == null || !isAdmin) { + return new java.util.ArrayList<>(); + } + return appUserService.getDeletedWorkOrders(); + } + @PostMapping("/usr-logout") public String logout(HttpSession session) { session.invalidate(); diff --git a/src/main/java/com/gcc_manpower/gccservicepaymenttracker/controller/GccServicePaymentTrackerController.java b/src/main/java/com/gcc_manpower/gccservicepaymenttracker/controller/GccServicePaymentTrackerController.java index 1eeef04..0b315bd 100644 --- a/src/main/java/com/gcc_manpower/gccservicepaymenttracker/controller/GccServicePaymentTrackerController.java +++ b/src/main/java/com/gcc_manpower/gccservicepaymenttracker/controller/GccServicePaymentTrackerController.java @@ -297,4 +297,59 @@ public class GccServicePaymentTrackerController { .cacheControl(CacheControl.noCache().mustRevalidate()) .body(paymentTrackerService.getHistory(id)); } + + @GetMapping("/api/deleted-list") + @ResponseBody + public ResponseEntity>> getDeletedList(HttpSession session) { + String username = (String) session.getAttribute("pay_usrName"); + if (username == null) { + username = (String) session.getAttribute("usrName"); + } + if (username == null) { + return ResponseEntity.status(401).body(null); + } + return ResponseEntity.ok() + .cacheControl(CacheControl.noCache().mustRevalidate()) + .body(paymentTrackerService.getDeletedDetails()); + } + + @PostMapping("/api/restore") + @ResponseBody + public Map restoreDetail( + @RequestParam("id") int id, + HttpSession session) { + Map response = new HashMap<>(); + String username = (String) session.getAttribute("pay_usrName"); + if (username == null) { + username = (String) session.getAttribute("usrName"); + } + if (username == null) { + response.put("success", false); + response.put("error", "Unauthorized access! Please log in."); + return response; + } + + String usrRole = (String) session.getAttribute("pay_usrRole"); + if (usrRole == null) { + usrRole = (String) session.getAttribute("usrRole"); + } + if (!"ADMIN".equalsIgnoreCase(usrRole)) { + response.put("success", false); + response.put("error", "Access denied! Only admins can restore records."); + return response; + } + + try { + boolean restored = paymentTrackerService.restoreDetail(id, username); + response.put("success", restored); + if (!restored) { + response.put("error", "Failed to restore record."); + } + } catch (Exception e) { + response.put("success", false); + response.put("error", "Error: " + e.getMessage()); + } + + return response; + } } diff --git a/src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java b/src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java index ee8b766..029fb71 100644 --- a/src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java +++ b/src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java @@ -448,4 +448,79 @@ public class GccServicePaymentTrackerService { return new ArrayList<>(); } } + + public List> getDeletedDetails() { + String sql = "SELECT p.*, " + + "t.type_name as resolved_type, " + + "v.vendor_name as resolved_vendor, " + + "s.status_name as resolved_status, " + + "u.usr_name as updated_by_name " + + "FROM payment_tracking_details p " + + "LEFT JOIN type_list t ON p.type REGEXP '^[0-9]+$' AND t.id = p.type " + + "LEFT JOIN vendors_list v ON p.vendor_name REGEXP '^[0-9]+$' AND v.id = p.vendor_name " + + "LEFT JOIN status_list s ON p.status REGEXP '^[0-9]+$' AND s.id = p.status " + + "LEFT JOIN gcc_manpower.app_user u ON (p.updated_by = CAST(u.usr_id AS CHAR) OR p.updated_by = u.usr_name) " + + "WHERE p.is_active = 0 AND p.is_delete = 1 " + + "ORDER BY p.updated_date DESC"; + try { + return jdbcTemplate.queryForList(sql); + } catch (Exception e) { + System.err.println("Error fetching deleted payment tracking details: " + e.getMessage()); + return new ArrayList<>(); + } + } + + public boolean restoreDetail(int id, String updatedBy) { + String sql = "UPDATE payment_tracking_details SET is_active = 1, is_delete = 0, remarks = 'Record restored', updated_by = ?, updated_date = ? WHERE id = ?"; + try { + // Retrieve old record first to populate history + Map old = null; + try { + old = jdbcTemplate.queryForMap("SELECT * FROM payment_tracking_details WHERE id = ?", id); + } catch (Exception e) { + System.err.println("Could not find old record for history before restore: " + e.getMessage()); + } + + int rows = jdbcTemplate.update(sql, updatedBy, new java.sql.Timestamp(System.currentTimeMillis()), id); + + if (rows > 0 && old != null) { + try { + String histSql = "INSERT INTO payment_tracking_details_history (" + + "detail_id, received_date, vendor_name, subject, amount, invoice_no, receiptno, " + + "invoice_date, type, physical_file_no, remarks, tat, status, followup, myfollowup, " + + "is_active, is_delete, order_by, file_path, cdate, updated_at, updated_by" + + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + jdbcTemplate.update(histSql, + id, + old.get("received_date"), + old.get("vendor_name"), + old.get("subject"), + old.get("amount"), + old.get("invoice_no"), + old.get("receiptno"), + old.get("invoice_date"), + old.get("type"), + old.get("physical_file_no"), + "Record restored", // remarks + old.get("tat"), + old.get("status"), + old.get("followup"), + old.get("myfollowup"), + 1, // is_active = 1 + 0, // is_delete = 0 + old.get("order_by"), + old.get("file_path"), + old.get("cdate"), + new java.sql.Timestamp(System.currentTimeMillis()), + updatedBy); + } catch (Exception he) { + System.err.println("Error saving history during restore: " + he.getMessage()); + } + } + return rows > 0; + } catch (Exception e) { + System.err.println("Error restoring payment tracking detail ID " + id + ": " + e.getMessage()); + return false; + } + } } diff --git a/src/main/java/com/gcc_manpower/service/AppUserService.java b/src/main/java/com/gcc_manpower/service/AppUserService.java index 78ee16b..d71a3bb 100644 --- a/src/main/java/com/gcc_manpower/service/AppUserService.java +++ b/src/main/java/com/gcc_manpower/service/AppUserService.java @@ -937,4 +937,33 @@ public class AppUserService { } return false; } + + public List> getDeletedWorkOrders() { + String sql = "SELECT " + + " w.id, " + + " w.designation, " + + " w.vid, " + + " COALESCE(v.vendor_name, w.contract_name) AS vendor_name, " + + " w.tender_manpower_designation_wise, " + + " w.available_manpower, " + + " w.vacant_count, " + + " w.File_no, " + + " w.subject, " + + " w.work_order_issue_date, " + + " w.work_order_end_date, " + + " w.updated_at, " + + " COALESCE(u.usr_name, w.updated_by) AS updated_by_name, " + + " w.file_path " + + "FROM employee_workorder_details w " + + "LEFT JOIN vendor_details v ON w.vid = CAST(v.id AS CHAR) " + + "LEFT JOIN app_user u ON w.updated_by = CAST(u.usr_id AS CHAR) " + + "WHERE w.isdelete = 1 " + + "ORDER BY w.updated_at DESC"; + try { + return jdbcManpowerTemplate.queryForList(sql); + } catch (Exception e) { + System.err.println("Error fetching deleted work orders: " + e.getMessage()); + return new ArrayList<>(); + } + } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 0709075..4b4cb62 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -11,13 +11,10 @@ server.port=8084 spring.datasource.url=jdbc:mysql://localhost:3306/gcc_manpower spring.datasource.username=root spring.datasource.password=root -#spring.datasource.password=1916008_Saec + spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -# spring.datasource.url=jdbc:oracle:thin:@10.1.0.14:1521:chncorp -# spring.datasource.username=fileadjust -# spring.datasource.password=fileadjust -# spring.datasource.driver-class-name=oracle.jdbc.OracleDriver + # =============================== # JPA / Hibernate Config diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index 4f7ff00..da8cde7 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -46,6 +46,12 @@ Deleted Employees +