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.

243 lines
12 KiB

​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
  1. package com.gcc_manpower.gcctonermanagement.service;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import javax.sql.DataSource;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.beans.factory.annotation.Qualifier;
  9. import org.springframework.jdbc.core.JdbcTemplate;
  10. import org.springframework.stereotype.Service;
  11. @Service
  12. public class TonerService {
  13. private JdbcTemplate jdbcTemplate;
  14. @Autowired
  15. public void setDataSource(@Qualifier("mysqlTonerManagementDataSource") DataSource dataSource) {
  16. this.jdbcTemplate = new JdbcTemplate(dataSource);
  17. }
  18. @jakarta.annotation.PostConstruct
  19. public void initTables() {
  20. try {
  21. jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS stock_register_details (" +
  22. "id INT AUTO_INCREMENT PRIMARY KEY, " +
  23. "company_name VARCHAR(30), " +
  24. "pid VARCHAR(20), " +
  25. "tid VARCHAR(30), " +
  26. "qty_registered VARCHAR(30), " +
  27. "dc_upload VARCHAR(250), " +
  28. "cdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " +
  29. "updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
  30. "order_by VARCHAR(45), " +
  31. "is_active TINYINT DEFAULT 1, " +
  32. "is_delete TINYINT DEFAULT 0" +
  33. ")");
  34. jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS department_requested_details (" +
  35. "id INT AUTO_INCREMENT PRIMARY KEY, " +
  36. "req_no VARCHAR(70), " +
  37. "company_name VARCHAR(30), " +
  38. "itcell_ref_no VARCHAR(45), " +
  39. "dept_id VARCHAR(30), " +
  40. "pid VARCHAR(20), " +
  41. "tid VARCHAR(30), " +
  42. "qty_registered VARCHAR(30), " +
  43. "qty_requested VARCHAR(30), " +
  44. "qty_delivered VARCHAR(30), " +
  45. "dc_upload VARCHAR(250), " +
  46. "user_request_upload VARCHAR(250), " +
  47. "final_delivered_upload VARCHAR(250), " +
  48. "cdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " +
  49. "updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
  50. "updated_by VARCHAR(45), " +
  51. "order_by VARCHAR(45), " +
  52. "is_active TINYINT DEFAULT 1, " +
  53. "is_delete TINYINT DEFAULT 0" +
  54. ")");
  55. } catch (Exception e) {
  56. System.err.println("Error initializing tables: " + e.getMessage());
  57. e.printStackTrace();
  58. }
  59. }
  60. public List<Map<String, Object>> getActivePrinters() {
  61. String sql = "SELECT id, printer_name FROM printer_model_list where is_active = 1 AND is_delete = 0 ";
  62. try {
  63. return jdbcTemplate.queryForList(sql);
  64. } catch (Exception e) {
  65. System.err.println("Error fetching printers list: " + e.getMessage());
  66. return new ArrayList<>();
  67. }
  68. }
  69. public List<Map<String, Object>> getActiveTonersByPrinter(int pid) {
  70. String sql = "SELECT id, model_name FROM toner_model_list WHERE pid = ? AND is_active = 1 AND is_delete = 0 ";
  71. try {
  72. return jdbcTemplate.queryForList(sql, pid);
  73. } catch (Exception e) {
  74. System.err.println("Error fetching toners list: " + e.getMessage());
  75. return new ArrayList<>();
  76. }
  77. }
  78. public String getTonerModelName(int tid) {
  79. String sql = "SELECT model_name FROM toner_model_list WHERE id = ?";
  80. try {
  81. return jdbcTemplate.queryForObject(sql, String.class, tid);
  82. } catch (Exception e) {
  83. System.err.println("Error fetching toner model name for id " + tid + ": " + e.getMessage());
  84. return "UNKNOWN";
  85. }
  86. }
  87. public boolean saveInwardRegister(String companyName, int pid, int tid, String qty, String dcUpload, String username) {
  88. String sql = "INSERT INTO stock_register_details " +
  89. "(company_name, pid, tid, qty_registered, dc_upload, cdate, updated_date, order_by, is_active, is_delete) " +
  90. "VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 0)";
  91. java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis());
  92. try {
  93. int rows = jdbcTemplate.update(sql, companyName, String.valueOf(pid), String.valueOf(tid), qty, dcUpload, now, now, username);
  94. return rows > 0;
  95. } catch (Exception e) {
  96. System.err.println("Error saving inward register: " + e.getMessage());
  97. e.printStackTrace();
  98. return false;
  99. }
  100. }
  101. public int getMaxRequestId() {
  102. String sql = "SELECT COALESCE(MAX(id), 0) FROM department_requested_details";
  103. try {
  104. return jdbcTemplate.queryForObject(sql, Integer.class);
  105. } catch (Exception e) {
  106. System.err.println("Error fetching max id from department_requested_details: " + e.getMessage());
  107. return 0;
  108. }
  109. }
  110. public String saveUserRequest(String itCellRefNo, String deptId, int pid, int tid, String qtyRequested, String userRequestUpload, String username) {
  111. String tonerModel = getTonerModelName(tid);
  112. String cleanModel = tonerModel.trim().replaceAll("\\s+", "-").replaceAll("[^a-zA-Z0-9-]", "");
  113. int maxId = getMaxRequestId();
  114. int seqNum = 1000 + maxId + 1;
  115. int year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
  116. String reqNo = String.format("%s-%d-%04d", cleanModel, year, seqNum);
  117. String sql = "INSERT INTO department_requested_details " +
  118. "(req_no, itcell_ref_no, dept_id, pid, tid, qty_requested, qty_delivered, user_request_upload, cdate, updated_date, updated_by, is_active, is_delete) " +
  119. "VALUES (?, ?, ?, ?, ?, ?, '0', ?, ?, ?, ?, 1, 0)";
  120. java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis());
  121. try {
  122. int rows = jdbcTemplate.update(sql, reqNo, itCellRefNo, deptId, String.valueOf(pid), String.valueOf(tid), qtyRequested, userRequestUpload, now, now, username);
  123. return rows > 0 ? reqNo : null;
  124. } catch (Exception e) {
  125. System.err.println("Error saving user request: " + e.getMessage());
  126. e.printStackTrace();
  127. return null;
  128. }
  129. }
  130. public List<Map<String, Object>> getPendingRequests() {
  131. String sql = "SELECT r.id, r.req_no, r.dept_id, r.pid, r.tid, r.qty_requested, r.qty_delivered, " +
  132. "p.printer_name, t.model_name " +
  133. "FROM department_requested_details r " +
  134. "LEFT JOIN printer_model_list p ON r.pid = p.id " +
  135. "LEFT JOIN toner_model_list t ON r.tid = t.id " +
  136. "WHERE r.is_active = 1 AND r.is_delete = 0 " +
  137. "AND (r.qty_delivered IS NULL OR CAST(r.qty_delivered AS SIGNED) < CAST(r.qty_requested AS SIGNED)) " +
  138. "ORDER BY r.id DESC";
  139. try {
  140. return jdbcTemplate.queryForList(sql);
  141. } catch (Exception e) {
  142. System.err.println("Error fetching pending requests: " + e.getMessage());
  143. return new ArrayList<>();
  144. }
  145. }
  146. public boolean saveOutwardRegister(int id, String qtyIssued, String finalDeliveredUpload, String username) {
  147. String sql = "UPDATE department_requested_details " +
  148. "SET qty_delivered = ?, final_delivered_upload = ?, updated_date = ?, updated_by = ? " +
  149. "WHERE id = ?";
  150. java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis());
  151. try {
  152. int rows = jdbcTemplate.update(sql, qtyIssued, finalDeliveredUpload, now, username, id);
  153. return rows > 0;
  154. } catch (Exception e) {
  155. System.err.println("Error updating outward register: " + e.getMessage());
  156. e.printStackTrace();
  157. return false;
  158. }
  159. }
  160. public Map<String, Object> getDashboardMetrics() {
  161. Map<String, Object> metrics = new HashMap<>();
  162. String sqlRaised = "SELECT COALESCE(SUM(CAST(qty_requested AS SIGNED)), 0) FROM department_requested_details WHERE is_active = 1 AND is_delete = 0";
  163. String sqlDistributed = "SELECT COALESCE(SUM(CAST(qty_delivered AS SIGNED)), 0) FROM department_requested_details WHERE is_active = 1 AND is_delete = 0";
  164. String sqlInward = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM stock_register_details WHERE is_active = 1 AND is_delete = 0";
  165. try {
  166. int totalRaised = jdbcTemplate.queryForObject(sqlRaised, Integer.class);
  167. int totalDistributed = jdbcTemplate.queryForObject(sqlDistributed, Integer.class);
  168. int inwardStock = jdbcTemplate.queryForObject(sqlInward, Integer.class);
  169. int availableStock = inwardStock - totalDistributed;
  170. metrics.put("totalRaised", totalRaised);
  171. metrics.put("totalDistributed", totalDistributed);
  172. metrics.put("availableStock", availableStock);
  173. } catch (Exception e) {
  174. System.err.println("Error computing dashboard metrics: " + e.getMessage());
  175. metrics.put("totalRaised", 0);
  176. metrics.put("totalDistributed", 0);
  177. metrics.put("availableStock", 0);
  178. }
  179. return metrics;
  180. }
  181. public List<Map<String, Object>> getInventorySummary() {
  182. String safeSql = "SELECT p.printer_name, t.model_name, " +
  183. "COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM stock_register_details sr WHERE CAST(sr.pid AS SIGNED) = t.pid AND CAST(sr.tid AS SIGNED) = t.id AND sr.is_active = 1 AND sr.is_delete = 0), 0) AS inward_qty, " +
  184. "COALESCE((SELECT SUM(CAST(dr.qty_delivered AS SIGNED)) FROM department_requested_details dr WHERE CAST(dr.pid AS SIGNED) = t.pid AND CAST(dr.tid AS SIGNED) = t.id AND dr.is_active = 1 AND dr.is_delete = 0), 0) AS outward_qty " +
  185. "FROM toner_model_list t " +
  186. "JOIN printer_model_list p ON t.pid = p.id " +
  187. "WHERE t.is_active = 1 AND t.is_delete = 0 " +
  188. "ORDER BY p.printer_name, t.model_name";
  189. try {
  190. List<Map<String, Object>> list = jdbcTemplate.queryForList(safeSql);
  191. for (Map<String, Object> map : list) {
  192. Number inward = (Number) map.get("inward_qty");
  193. Number outward = (Number) map.get("outward_qty");
  194. long avail = (inward != null ? inward.longValue() : 0) - (outward != null ? outward.longValue() : 0);
  195. map.put("available_qty", avail);
  196. }
  197. return list;
  198. } catch (Exception e) {
  199. System.err.println("Error fetching inventory summary: " + e.getMessage());
  200. e.printStackTrace();
  201. return new ArrayList<>();
  202. }
  203. }
  204. public List<Map<String, Object>> getOutwardHistory() {
  205. String sql = "SELECT r.id, r.req_no, r.itcell_ref_no, r.dept_id, r.qty_requested, r.qty_delivered, r.final_delivered_upload, r.updated_date, " +
  206. "p.printer_name, t.model_name " +
  207. "FROM department_requested_details r " +
  208. "LEFT JOIN printer_model_list p ON r.pid = p.id " +
  209. "LEFT JOIN toner_model_list t ON r.tid = t.id " +
  210. "WHERE r.is_active = 1 AND r.is_delete = 0 " +
  211. "AND r.qty_delivered IS NOT NULL AND CAST(r.qty_delivered AS SIGNED) > 0 " +
  212. "ORDER BY r.updated_date DESC";
  213. try {
  214. return jdbcTemplate.queryForList(sql);
  215. } catch (Exception e) {
  216. System.err.println("Error fetching outward history: " + e.getMessage());
  217. return new ArrayList<>();
  218. }
  219. }
  220. }