All GCC vendors and employee details for IT department management
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

632 lines
25 KiB

4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
4 months ago
​
​
​
​
​
​
  1. package com.gcc_manpower.controller;
  2. import com.gcc_manpower.service.AppUserService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PostMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestParam;
  10. import org.springframework.web.bind.annotation.RequestBody;
  11. import org.springframework.web.bind.annotation.ResponseBody;
  12. import jakarta.servlet.http.HttpSession;
  13. import java.util.ArrayList;
  14. import java.util.HashMap;
  15. import java.util.List;
  16. import java.util.Map;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import java.io.File;
  20. @Controller
  21. @RequestMapping("/")
  22. public class HomeController {
  23. @Autowired
  24. private AppUserService appUserService;
  25. @Value("${upload.path:gcc_manpower_uploads}")
  26. private String uploadPathConfig;
  27. private void addSummaryStats(Model model, List<Map<String, Object>> vendorDetails) {
  28. int totalVendors = vendorDetails.size();
  29. int totalTenderCount = appUserService.getOverallTenderCount();
  30. int totalExistingCount = appUserService.getOverallActiveEmployeeCount();
  31. int totalVacantCount = 0;
  32. for (Map<String, Object> vendor : vendorDetails) {
  33. List<Map<String, Object>> designations = (List<Map<String, Object>>) vendor.get("designationDetails");
  34. if (designations != null) {
  35. for (Map<String, Object> des : designations) {
  36. Object vacantObj = des.get("vacant_count");
  37. if (vacantObj != null) {
  38. try {
  39. double val = Double.parseDouble(String.valueOf(vacantObj).trim());
  40. if (val > 0) {
  41. totalVacantCount += (int) val;
  42. }
  43. } catch (NumberFormatException ignored) {
  44. }
  45. }
  46. }
  47. }
  48. }
  49. model.addAttribute("totalVendors", totalVendors);
  50. model.addAttribute("totalTenderCount", totalTenderCount);
  51. model.addAttribute("totalExistingCount", totalExistingCount);
  52. model.addAttribute("totalVacantCount", totalVacantCount);
  53. }
  54. @GetMapping("/")
  55. public String home(Model model, HttpSession session) {
  56. String usrName = (String) session.getAttribute("usrName");
  57. if (usrName == null) {
  58. return "redirect:/login";
  59. }
  60. String usrRole = (String) session.getAttribute("usrRole");
  61. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  62. List<Map<String, Object>> vendorDetails = appUserService.getVendorDetailsWithCounts();
  63. addSummaryStats(model, vendorDetails);
  64. model.addAttribute("curPage", "home");
  65. model.addAttribute("isAdmin", isAdmin);
  66. model.addAttribute("urls", new ArrayList<>()); // default empty services
  67. model.addAttribute("vendorDetails", vendorDetails);
  68. model.addAttribute("locations", appUserService.getActiveLocations());
  69. model.addAttribute("designations", appUserService.getActiveDesignations());
  70. model.addAttribute("userTypes", appUserService.getActiveUserTypes());
  71. return "home/home";
  72. }
  73. @GetMapping("/login")
  74. public String login(HttpSession session) {
  75. // If already logged in, redirect to the home page
  76. if (session.getAttribute("usrName") != null) {
  77. return "redirect:/";
  78. }
  79. return "home/login";
  80. }
  81. @PostMapping("/api/val-app-usr-login")
  82. @ResponseBody
  83. public Map<String, Object> validateAppUserLogin(
  84. @RequestParam("usrName") String usrName,
  85. @RequestParam("usrPass") String usrPass,
  86. HttpSession session) {
  87. Map<String, Object> authResult = appUserService.authenticate(usrName, usrPass);
  88. Map<String, Object> response = new HashMap<>();
  89. if (Boolean.TRUE.equals(authResult.get("success"))) {
  90. session.setAttribute("usrName", authResult.get("usrName"));
  91. session.setAttribute("usrRole", authResult.get("usrRole"));
  92. session.setMaxInactiveInterval(600); // 10 minutes session timeout
  93. response.put("result", true);
  94. response.put("usrName", authResult.get("usrName"));
  95. } else {
  96. response.put("result", false);
  97. response.put("error", authResult.get("error"));
  98. }
  99. return response;
  100. }
  101. @PostMapping("/api/get-role")
  102. @ResponseBody
  103. public Map<String, Object> getRole(HttpSession session) {
  104. Map<String, Object> response = new HashMap<>();
  105. String usrName = (String) session.getAttribute("usrName");
  106. String usrRole = (String) session.getAttribute("usrRole");
  107. if (usrName == null) {
  108. response.put("authenticated", false);
  109. response.put("isAdmin", false);
  110. } else {
  111. response.put("authenticated", true);
  112. response.put("isAdmin", "ADMIN".equalsIgnoreCase(usrRole));
  113. }
  114. return response;
  115. }
  116. @GetMapping("/redirect")
  117. public String redirect() {
  118. return "redirect:/";
  119. }
  120. @GetMapping("/view-login-det")
  121. public String viewLoginDetails(Model model, HttpSession session) {
  122. String usrName = (String) session.getAttribute("usrName");
  123. String usrRole = (String) session.getAttribute("usrRole");
  124. if (usrName == null) {
  125. return "redirect:/login";
  126. }
  127. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  128. // Fetch exact spreadsheet rows dynamically from MySQL using JdbcTemplate
  129. List<Map<String, Object>> manpowerEntries = appUserService.getManpowerTenders();
  130. List<Map<String, Object>> vendorDetails = appUserService.getVendorDetailsWithCounts();
  131. model.addAttribute("curPage", "view-login-det");
  132. model.addAttribute("isAdmin", isAdmin);
  133. model.addAttribute("manpowerEntries", manpowerEntries);
  134. model.addAttribute("vendorDetails", vendorDetails);
  135. model.addAttribute("designations", appUserService.getActiveDesignations());
  136. return "home/view-login-details";
  137. }
  138. @GetMapping("/api/vendor-employees")
  139. @ResponseBody
  140. public List<Map<String, Object>> getVendorEmployees(
  141. @RequestParam("vendorName") String vendorName) {
  142. return appUserService.getEmployeesByVendor(vendorName);
  143. }
  144. @GetMapping("/api/employee/history")
  145. @ResponseBody
  146. public List<Map<String, Object>> getEmployeeHistory(
  147. @RequestParam("empCode") String empCode) {
  148. return appUserService.getEmployeeHistory(empCode);
  149. }
  150. @GetMapping("/api/all-employees")
  151. @ResponseBody
  152. public List<Map<String, Object>> getAllEmployees() {
  153. return appUserService.getAllEmployees();
  154. }
  155. @PostMapping("/api/save-manpower-stats")
  156. @ResponseBody
  157. public Map<String, Object> saveManpowerStats(
  158. @RequestBody List<Map<String, Object>> payload,
  159. HttpSession session) {
  160. Map<String, Object> response = new HashMap<>();
  161. String usrName = (String) session.getAttribute("usrName");
  162. if (usrName == null) {
  163. response.put("success", false);
  164. response.put("error", "Unauthorized access! Please log in.");
  165. return response;
  166. }
  167. try {
  168. boolean overallSuccess = true;
  169. for (Map<String, Object> row : payload) {
  170. int id = ((Number) row.get("id")).intValue();
  171. int availableCount = ((Number) row.get("availableCount")).intValue();
  172. String vacantRemarks = (String) row.get("vacantRemarks");
  173. boolean rowSuccess = appUserService.updateManpowerTender(id, availableCount, vacantRemarks);
  174. if (!rowSuccess) {
  175. overallSuccess = false;
  176. }
  177. }
  178. response.put("success", overallSuccess);
  179. } catch (Exception e) {
  180. response.put("success", false);
  181. response.put("error", "Failed to save statistics: " + e.getMessage());
  182. }
  183. return response;
  184. }
  185. @GetMapping("/api/employee")
  186. @ResponseBody
  187. public Map<String, Object> getEmployeeByCode(
  188. @RequestParam("empCode") String empCode,
  189. HttpSession session) {
  190. Map<String, Object> response = new HashMap<>();
  191. String usrName = (String) session.getAttribute("usrName");
  192. if (usrName == null) {
  193. response.put("success", false);
  194. response.put("error", "Unauthorized access! Please log in.");
  195. return response;
  196. }
  197. Map<String, Object> emp = appUserService.getEmployeeByCode(empCode);
  198. if (emp != null) {
  199. response.put("success", true);
  200. response.put("employee", emp);
  201. } else {
  202. response.put("success", false);
  203. response.put("error", "Employee not found or inactive.");
  204. }
  205. return response;
  206. }
  207. @PostMapping("/api/employee/add")
  208. @ResponseBody
  209. public Map<String, Object> addEmployee(
  210. @RequestBody Map<String, Object> payload,
  211. HttpSession session) {
  212. Map<String, Object> response = new HashMap<>();
  213. String usrName = (String) session.getAttribute("usrName");
  214. String usrRole = (String) session.getAttribute("usrRole");
  215. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  216. if (usrName == null || !isAdmin) {
  217. response.put("success", false);
  218. response.put("error", "Unauthorized! Admin access required.");
  219. return response;
  220. }
  221. try {
  222. boolean success = appUserService.addEmployee(payload, usrName);
  223. if (success) {
  224. response.put("success", true);
  225. response.put("message", "Employee registered successfully!");
  226. } else {
  227. response.put("success", false);
  228. response.put("error", "Failed to register employee. The employee code might already exist.");
  229. }
  230. } catch (Exception e) {
  231. response.put("success", false);
  232. response.put("error", "Error: " + e.getMessage());
  233. }
  234. return response;
  235. }
  236. @PostMapping("/api/employee/update")
  237. @ResponseBody
  238. public Map<String, Object> updateEmployee(
  239. @RequestBody Map<String, Object> payload,
  240. HttpSession session) {
  241. Map<String, Object> response = new HashMap<>();
  242. String usrName = (String) session.getAttribute("usrName");
  243. String usrRole = (String) session.getAttribute("usrRole");
  244. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  245. if (usrName == null || !isAdmin) {
  246. response.put("success", false);
  247. response.put("error", "Unauthorized! Admin access required.");
  248. return response;
  249. }
  250. try {
  251. boolean success = appUserService.updateEmployee(payload, usrName);
  252. if (success) {
  253. response.put("success", true);
  254. response.put("message", "Employee updated successfully!");
  255. } else {
  256. response.put("success", false);
  257. response.put("error", "Failed to update employee details. Record not found or inactive.");
  258. }
  259. } catch (Exception e) {
  260. response.put("success", false);
  261. response.put("error", "Error: " + e.getMessage());
  262. }
  263. return response;
  264. }
  265. @PostMapping("/api/vendor/add-work-order")
  266. @ResponseBody
  267. public Map<String, Object> addVendorWorkOrder(
  268. @RequestParam("vendorType") String vendorType,
  269. @RequestParam(value = "vendorId", required = false) String vendorIdStr,
  270. @RequestParam(value = "vendorName", required = false) String vendorName,
  271. @RequestParam("description") String description,
  272. @RequestParam("contractorName") String contractorName,
  273. @RequestParam("fileNo") String fileNo,
  274. @RequestParam("subject") String subject,
  275. @RequestParam("issueDate") String issueDate,
  276. @RequestParam("endDate") String endDate,
  277. @RequestParam("totalEmployees") String totalEmployees,
  278. @RequestParam(value = "orderby", required = false) Integer orderby,
  279. @RequestParam(value = "file", required = false) MultipartFile file,
  280. HttpSession session) {
  281. Map<String, Object> response = new HashMap<>();
  282. String usrName = (String) session.getAttribute("usrName");
  283. String usrRole = (String) session.getAttribute("usrRole");
  284. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  285. if (usrName == null || !isAdmin) {
  286. response.put("success", false);
  287. response.put("error", "Unauthorized! Admin access required.");
  288. return response;
  289. }
  290. try {
  291. // Convert to uppercase for Contractor Name and File No
  292. if (contractorName != null) {
  293. contractorName = contractorName.toUpperCase();
  294. }
  295. if (fileNo != null) {
  296. fileNo = fileNo.toUpperCase();
  297. }
  298. long finalVendorId = 0;
  299. if ("new".equalsIgnoreCase(vendorType)) {
  300. // Check if vendor name already exists
  301. List<Map<String, Object>> existingVendors = appUserService.getVendorDetailsWithCounts();
  302. boolean vendorExists = false;
  303. for (Map<String, Object> v : existingVendors) {
  304. String vName = (String) v.get("vendor_name");
  305. if (vName != null && vName.equalsIgnoreCase(vendorName)) {
  306. vendorExists = true;
  307. break;
  308. }
  309. }
  310. if (vendorExists) {
  311. response.put("success", false);
  312. response.put("error", "A vendor with this name already exists.");
  313. return response;
  314. }
  315. // Insert into vendor_details
  316. finalVendorId = appUserService.addVendor(vendorName, description, totalEmployees, orderby);
  317. if (finalVendorId == 0) {
  318. response.put("success", false);
  319. response.put("error", "Failed to create new vendor details.");
  320. return response;
  321. }
  322. } else {
  323. if (vendorIdStr == null || vendorIdStr.trim().isEmpty()) {
  324. response.put("success", false);
  325. response.put("error", "No existing vendor selected.");
  326. return response;
  327. }
  328. try {
  329. finalVendorId = Long.parseLong(vendorIdStr);
  330. } catch (NumberFormatException e) {
  331. response.put("success", false);
  332. response.put("error", "Invalid vendor ID formatting.");
  333. return response;
  334. }
  335. }
  336. // Save upload file (mandatory validation)
  337. if (file == null || file.isEmpty()) {
  338. response.put("success", false);
  339. response.put("error", "Work order PDF file is required.");
  340. return response;
  341. }
  342. File uploadDir = new File(uploadPathConfig).getAbsoluteFile();
  343. if (!uploadDir.exists()) {
  344. uploadDir.mkdirs();
  345. }
  346. String originalFilename = file.getOriginalFilename();
  347. String nameWithoutExt = "";
  348. String ext = ".pdf";
  349. if (originalFilename != null && originalFilename.contains(".")) {
  350. int dotIdx = originalFilename.lastIndexOf(".");
  351. nameWithoutExt = originalFilename.substring(0, dotIdx);
  352. ext = originalFilename.substring(dotIdx);
  353. } else {
  354. nameWithoutExt = originalFilename != null ? originalFilename : "file";
  355. }
  356. nameWithoutExt = nameWithoutExt.replaceAll("[^a-zA-Z0-9-_]", "_");
  357. String savedFilename = nameWithoutExt + "_" + System.currentTimeMillis() + ext;
  358. File destFile = new File(uploadDir, savedFilename).getAbsoluteFile();
  359. file.transferTo(destFile);
  360. String fileWebUrl = "/gcc_manpower_uploads/" + savedFilename;
  361. // Insert into vendor_details_work_order
  362. boolean success = appUserService.addVendorWorkOrder(
  363. String.valueOf(finalVendorId),
  364. description,
  365. contractorName,
  366. fileNo,
  367. subject,
  368. issueDate,
  369. endDate,
  370. totalEmployees,
  371. orderby,
  372. fileWebUrl,
  373. usrName);
  374. if (success) {
  375. // If it's an existing vendor, add total_employees to vendor_details
  376. if (!"new".equalsIgnoreCase(vendorType)) {
  377. int addedEmployees = 0;
  378. if (totalEmployees != null) {
  379. try {
  380. addedEmployees = Integer.parseInt(totalEmployees.trim());
  381. } catch (NumberFormatException ignored) {
  382. }
  383. }
  384. if (addedEmployees > 0) {
  385. appUserService.updateVendorTotalEmployees(String.valueOf(finalVendorId), addedEmployees);
  386. }
  387. }
  388. response.put("success", true);
  389. response.put("message", "Vendor work order saved successfully!");
  390. } else {
  391. response.put("success", false);
  392. response.put("error", "Failed to register vendor work order.");
  393. }
  394. } catch (Exception e) {
  395. response.put("success", false);
  396. response.put("error", "Error: " + e.getMessage());
  397. }
  398. return response;
  399. }
  400. @PostMapping("/api/employee/delete")
  401. @ResponseBody
  402. public Map<String, Object> deleteEmployee(
  403. @RequestBody Map<String, Object> payload,
  404. HttpSession session) {
  405. Map<String, Object> response = new HashMap<>();
  406. String usrName = (String) session.getAttribute("usrName");
  407. String usrRole = (String) session.getAttribute("usrRole");
  408. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  409. if (usrName == null || !isAdmin) {
  410. response.put("success", false);
  411. response.put("error", "Unauthorized! Admin access required.");
  412. return response;
  413. }
  414. try {
  415. String empCode = (String) payload.get("empCode");
  416. if (empCode == null || empCode.trim().isEmpty()) {
  417. response.put("success", false);
  418. response.put("error", "Employee code is required.");
  419. return response;
  420. }
  421. boolean success = appUserService.deleteEmployee(empCode, usrName);
  422. if (success) {
  423. response.put("success", true);
  424. response.put("message", "Employee deleted successfully!");
  425. } else {
  426. response.put("success", false);
  427. response.put("error", "Failed to delete employee or record not found.");
  428. }
  429. } catch (Exception e) {
  430. response.put("success", false);
  431. response.put("error", "Error: " + e.getMessage());
  432. }
  433. return response;
  434. }
  435. @PostMapping("/api/vendor/delete")
  436. @ResponseBody
  437. public Map<String, Object> deleteVendor(
  438. @RequestBody Map<String, Object> payload,
  439. HttpSession session) {
  440. Map<String, Object> response = new HashMap<>();
  441. String usrName = (String) session.getAttribute("usrName");
  442. String usrRole = (String) session.getAttribute("usrRole");
  443. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  444. if (usrName == null || !isAdmin) {
  445. response.put("success", false);
  446. response.put("error", "Unauthorized! Admin access required.");
  447. return response;
  448. }
  449. try {
  450. Object idObj = payload.get("id");
  451. if (idObj == null) {
  452. response.put("success", false);
  453. response.put("error", "Vendor ID is required.");
  454. return response;
  455. }
  456. String idStr = String.valueOf(idObj);
  457. boolean success = appUserService.deleteVendor(idStr);
  458. if (success) {
  459. response.put("success", true);
  460. response.put("message", "Vendor and associated records deleted successfully!");
  461. } else {
  462. response.put("success", false);
  463. response.put("error", "Failed to delete vendor or record not found.");
  464. }
  465. } catch (Exception e) {
  466. response.put("success", false);
  467. response.put("error", "Error: " + e.getMessage());
  468. }
  469. return response;
  470. }
  471. @PostMapping("/api/vendor/delete-work-order")
  472. @ResponseBody
  473. public Map<String, Object> deleteWorkOrder(
  474. @RequestBody Map<String, Object> payload,
  475. HttpSession session) {
  476. Map<String, Object> response = new HashMap<>();
  477. String usrName = (String) session.getAttribute("usrName");
  478. String usrRole = (String) session.getAttribute("usrRole");
  479. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  480. if (usrName == null || !isAdmin) {
  481. response.put("success", false);
  482. response.put("error", "Unauthorized! Admin access required.");
  483. return response;
  484. }
  485. try {
  486. Object idObj = payload.get("workOrderId");
  487. if (idObj == null) {
  488. response.put("success", false);
  489. response.put("error", "Work order ID is required.");
  490. return response;
  491. }
  492. String workOrderId = String.valueOf(idObj);
  493. boolean success = appUserService.deleteWorkOrder(workOrderId, usrName);
  494. if (success) {
  495. response.put("success", true);
  496. response.put("message", "Work order deleted successfully!");
  497. } else {
  498. response.put("success", false);
  499. response.put("error", "Failed to delete work order or record not found.");
  500. }
  501. } catch (Exception e) {
  502. response.put("success", false);
  503. response.put("error", "Error: " + e.getMessage());
  504. }
  505. return response;
  506. }
  507. @GetMapping("/api/vendor-employees-all")
  508. @ResponseBody
  509. public List<Map<String, Object>> getVendorEmployeesAll(
  510. @RequestParam("vendorIdOrName") String vendorIdOrName) {
  511. return appUserService.getEmployeesByVendorAll(vendorIdOrName);
  512. }
  513. @PostMapping("/api/employee/restore")
  514. @ResponseBody
  515. public Map<String, Object> restoreEmployee(
  516. @RequestBody Map<String, Object> payload,
  517. HttpSession session) {
  518. Map<String, Object> response = new HashMap<>();
  519. String usrName = (String) session.getAttribute("usrName");
  520. String usrRole = (String) session.getAttribute("usrRole");
  521. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  522. if (usrName == null || !isAdmin) {
  523. response.put("success", false);
  524. response.put("error", "Unauthorized! Admin access required.");
  525. return response;
  526. }
  527. try {
  528. String empCode = (String) payload.get("empCode");
  529. if (empCode == null || empCode.trim().isEmpty()) {
  530. response.put("success", false);
  531. response.put("error", "Employee code is required.");
  532. return response;
  533. }
  534. boolean success = appUserService.restoreEmployee(empCode, usrName);
  535. if (success) {
  536. response.put("success", true);
  537. response.put("message", "Employee restored successfully!");
  538. } else {
  539. response.put("success", false);
  540. response.put("error", "Failed to restore employee or record not found.");
  541. }
  542. } catch (Exception e) {
  543. response.put("success", false);
  544. response.put("error", "Error: " + e.getMessage());
  545. }
  546. return response;
  547. }
  548. @GetMapping("/api/all-employees-with-deleted")
  549. @ResponseBody
  550. public List<Map<String, Object>> getAllEmployeesWithDeleted() {
  551. return appUserService.getAllEmployeesWithDeleted();
  552. }
  553. @PostMapping("/usr-logout")
  554. public String logout(HttpSession session) {
  555. session.invalidate();
  556. return "redirect:/login";
  557. }
  558. }