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.

226 lines
8.5 KiB

​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
  1. package com.gcc_manpower.gcctonermanagement.controller;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.ui.Model;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.PostMapping;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestParam;
  12. import org.springframework.web.bind.annotation.ResponseBody;
  13. import org.springframework.beans.factory.annotation.Value;
  14. import org.springframework.web.multipart.MultipartFile;
  15. import java.io.File;
  16. import com.gcc_manpower.gcctonermanagement.service.TonerService;
  17. import com.gcc_manpower.service.AppUserService;
  18. import jakarta.servlet.http.HttpSession;
  19. @Controller
  20. @RequestMapping("/gcctonermanagement")
  21. public class TonerController {
  22. @Autowired
  23. private AppUserService appUserService;
  24. @Autowired
  25. private TonerService tonerService;
  26. @Value("${toner.upload.path:gcctonermanagementfiles}")
  27. private String tonerUploadPathConfig;
  28. @GetMapping({ "", "/", "/upload" })
  29. public String viewDashboard(Model model, HttpSession session) {
  30. String username = (String) session.getAttribute("toner_usrName");
  31. if (username == null) {
  32. return "redirect:/gcctonermanagement/login";
  33. }
  34. String usrRole = (String) session.getAttribute("toner_usrRole");
  35. boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
  36. // List<Map<String, Object>> vendorDetails =
  37. // appUserService.getVendorDetailsWithCounts();
  38. model.addAttribute("isLoggedIn", true);
  39. model.addAttribute("isAdmin", isAdmin);
  40. model.addAttribute("usrName", username);
  41. model.addAttribute("curPage", "gcctonermanagement");
  42. // model.addAttribute("vendorDetails", vendorDetails);
  43. return "gcctonermanagement/upload";
  44. }
  45. @GetMapping("/login")
  46. public String login(HttpSession session) {
  47. return "gcctonermanagement/login";
  48. }
  49. @PostMapping("/api/login")
  50. @ResponseBody
  51. public Map<String, Object> validateLogin(
  52. @RequestParam("usrName") String usrName,
  53. @RequestParam("usrPass") String usrPass,
  54. HttpSession session) {
  55. Map<String, Object> authResult = appUserService.authenticate(usrName, usrPass);
  56. Map<String, Object> response = new HashMap<>();
  57. if (Boolean.TRUE.equals(authResult.get("success"))) {
  58. session.setAttribute("toner_usrName", authResult.get("usrName"));
  59. session.setAttribute("toner_usrRole", authResult.get("usrRole"));
  60. session.setMaxInactiveInterval(1800); // 30 minutes session timeout
  61. response.put("result", true);
  62. response.put("usrName", authResult.get("usrName"));
  63. } else {
  64. response.put("result", false);
  65. response.put("error", authResult.get("error"));
  66. }
  67. return response;
  68. }
  69. @GetMapping("/logout")
  70. public String logoutGet(HttpSession session) {
  71. session.removeAttribute("toner_usrName");
  72. session.removeAttribute("toner_usrRole");
  73. return "redirect:/gcctonermanagement/login";
  74. }
  75. @GetMapping("/api/printers")
  76. @ResponseBody
  77. public List<Map<String, Object>> getPrinters(HttpSession session) {
  78. if (session.getAttribute("toner_usrName") == null) {
  79. return java.util.Collections.emptyList();
  80. }
  81. return tonerService.getActivePrinters();
  82. }
  83. @GetMapping("/api/toners")
  84. @ResponseBody
  85. public List<Map<String, Object>> getToners(@RequestParam("pid") int pid, HttpSession session) {
  86. if (session.getAttribute("toner_usrName") == null) {
  87. return java.util.Collections.emptyList();
  88. }
  89. return tonerService.getActiveTonersByPrinter(pid);
  90. }
  91. @PostMapping("/api/upload")
  92. @ResponseBody
  93. public Map<String, Object> uploadToner(
  94. @RequestParam("companyName") String companyName,
  95. @RequestParam("pid") int pid,
  96. @RequestParam("tid") int tid,
  97. @RequestParam("qty") String qty,
  98. @RequestParam(value = "dcFile", required = false) MultipartFile dcFile,
  99. @RequestParam(value = "userRequestFile", required = false) MultipartFile userRequestFile,
  100. @RequestParam(value = "finalDeliveredFile", required = false) MultipartFile finalDeliveredFile,
  101. HttpSession session) {
  102. Map<String, Object> response = new HashMap<>();
  103. String username = (String) session.getAttribute("toner_usrName");
  104. if (username == null) {
  105. response.put("success", false);
  106. response.put("error", "Unauthorized access. Please log in.");
  107. return response;
  108. }
  109. // Validate PDF extension on non-empty files
  110. if (dcFile != null && !dcFile.isEmpty() && !isPdfFile(dcFile)) {
  111. response.put("success", false);
  112. response.put("error", "Delivery Challan file must be a PDF.");
  113. return response;
  114. }
  115. if (userRequestFile != null && !userRequestFile.isEmpty() && !isPdfFile(userRequestFile)) {
  116. response.put("success", false);
  117. response.put("error", "User Request file must be a PDF.");
  118. return response;
  119. }
  120. if (finalDeliveredFile != null && !finalDeliveredFile.isEmpty() && !isPdfFile(finalDeliveredFile)) {
  121. response.put("success", false);
  122. response.put("error", "Final Delivered file must be a PDF.");
  123. return response;
  124. }
  125. try {
  126. File uploadDir = new File(tonerUploadPathConfig).getAbsoluteFile();
  127. if (!uploadDir.exists()) {
  128. uploadDir.mkdirs();
  129. }
  130. // Save files
  131. String dcPath = saveUploadedFile(dcFile, "dc", uploadDir);
  132. String userRequestPath = saveUploadedFile(userRequestFile, "user_request", uploadDir);
  133. String finalDeliveredPath = saveUploadedFile(finalDeliveredFile, "final_delivered", uploadDir);
  134. boolean saved = tonerService.saveInventoryDetails(
  135. companyName.trim(),
  136. pid,
  137. tid,
  138. qty.trim(),
  139. dcPath,
  140. userRequestPath,
  141. finalDeliveredPath,
  142. username);
  143. if (saved) {
  144. response.put("success", true);
  145. response.put("message", "Toner details saved successfully.");
  146. } else {
  147. // Delete newly saved files on DB insert failure
  148. deleteFileIfExists(dcPath, uploadDir);
  149. deleteFileIfExists(userRequestPath, uploadDir);
  150. deleteFileIfExists(finalDeliveredPath, uploadDir);
  151. response.put("success", false);
  152. response.put("error", "Failed to save registration details in the database.");
  153. }
  154. } catch (Exception e) {
  155. response.put("success", false);
  156. response.put("error", "An error occurred during saving: " + e.getMessage());
  157. e.printStackTrace();
  158. }
  159. return response;
  160. }
  161. private boolean isPdfFile(MultipartFile file) {
  162. String originalFilename = file.getOriginalFilename();
  163. if (originalFilename == null)
  164. return false;
  165. return originalFilename.toLowerCase().endsWith(".pdf");
  166. }
  167. private String saveUploadedFile(MultipartFile file, String prefix, File uploadDir) throws Exception {
  168. if (file == null || file.isEmpty()) {
  169. return null;
  170. }
  171. String originalFilename = file.getOriginalFilename();
  172. String ext = ".pdf"; // Since we only allow PDFs
  173. // Clean filename, make it unique
  174. String savedFilename = prefix + "_" + System.currentTimeMillis() + ext;
  175. File destFile = new File(uploadDir, savedFilename).getAbsoluteFile();
  176. file.transferTo(destFile);
  177. return "/gcctonermanagementfiles/" + savedFilename;
  178. }
  179. private void deleteFileIfExists(String webPath, File uploadDir) {
  180. if (webPath == null || webPath.isEmpty())
  181. return;
  182. try {
  183. String filename = webPath.substring(webPath.lastIndexOf('/') + 1);
  184. File file = new File(uploadDir, filename).getAbsoluteFile();
  185. if (file.exists()) {
  186. file.delete();
  187. }
  188. } catch (Exception e) {
  189. System.err.println("Error deleting file: " + e.getMessage());
  190. }
  191. }
  192. }