|
|
package com.gcc_manpower.gcctonermanagement.service;
import java.sql.PreparedStatement;import java.sql.Statement;import java.sql.Timestamp;import java.util.ArrayList;import java.util.Calendar;import java.util.HashMap;import java.util.List;import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;import jakarta.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.support.GeneratedKeyHolder;import org.springframework.jdbc.support.KeyHolder;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;
@Servicepublic class TonerService {
private JdbcTemplate jdbcTemplate;
@Autowired public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); }
// ================= FAST IN-MEMORY LOOKUP MAPS (Zero N+1 DB Calls)
// =================
private Map<String, String> getPrinterMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT id, printer_name FROM toner_printer_model_list WHERE is_active = 1 AND is_delete = 0"); for (Map<String, Object> row : list) { if (row.get("id") != null && row.get("printer_name") != null) { map.put(String.valueOf(row.get("id")).trim(), String.valueOf(row.get("printer_name")).trim()); } } } catch (Exception ignored) { } return map; }
private Map<String, String> getTonerMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT id, model_name FROM toner_model_list WHERE is_active = 1 AND is_delete = 0"); for (Map<String, Object> row : list) { if (row.get("id") != null && row.get("model_name") != null) { map.put(String.valueOf(row.get("id")).trim(), String.valueOf(row.get("model_name")).trim()); } } } catch (Exception ignored) { } return map; }
private Map<String, String> getTonerPartCodeMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT id, model_name, part_code FROM toner_model_list WHERE (is_delete IS NULL OR is_delete = 0)"); for (Map<String, Object> row : list) { String code = row.get("part_code") != null ? String.valueOf(row.get("part_code")).trim() : ""; if (!code.isEmpty() && !"null".equalsIgnoreCase(code) && !"n/a".equalsIgnoreCase(code)) { if (row.get("id") != null) { map.put(String.valueOf(row.get("id")).trim(), code); } if (row.get("model_name") != null) { map.put(String.valueOf(row.get("model_name")).trim().toLowerCase(), code); } } } } catch (Exception ignored) { } return map; }
private Map<String, String> getDepartmentMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT id, dept_name FROM toner_department_list WHERE is_active = 1 AND is_delete = 0"); for (Map<String, Object> row : list) { if (row.get("id") != null && row.get("dept_name") != null) { map.put(String.valueOf(row.get("id")).trim(), String.valueOf(row.get("dept_name")).trim()); } } } catch (Exception ignored) { } return map; }
private Map<String, String> getZoneMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT id, zone_name FROM toner_zone_list WHERE is_active = 1 AND is_delete = 0"); for (Map<String, Object> row : list) { if (row.get("id") != null && row.get("zone_name") != null) { map.put(String.valueOf(row.get("id")).trim(), String.valueOf(row.get("zone_name")).trim()); } } } catch (Exception ignored) { } return map; }
private Map<String, String> getUserMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT usr_id, usr_name FROM app_user"); for (Map<String, Object> row : list) { if (row.get("usr_id") != null && row.get("usr_name") != null) { map.put(String.valueOf(row.get("usr_id")).trim(), String.valueOf(row.get("usr_name")).trim()); } } } catch (Exception ignored) { } return map; }
private Map<String, String> getVendorMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT id, vendor_name FROM payment_vendors_list WHERE is_active = 1 AND is_delete = 0"); for (Map<String, Object> row : list) { if (row.get("id") != null && row.get("vendor_name") != null) { map.put(String.valueOf(row.get("id")).trim(), String.valueOf(row.get("vendor_name")).trim()); } } } catch (Exception ignored) { } return map; }
public List<Map<String, Object>> getActiveVendors() { try { return jdbcTemplate.queryForList( "SELECT id, vendor_name FROM payment_vendors_list WHERE is_active = 1 AND is_delete = 0 ORDER BY vendor_name ASC"); } catch (Exception e) { return new ArrayList<>(); } }
private Map<String, String> getWorkorderFileNumberMap() { Map<String, String> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT ref_no, file_number FROM toner_workorder_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"); for (Map<String, Object> row : list) { if (row.get("ref_no") != null && row.get("file_number") != null) { map.put(String.valueOf(row.get("ref_no")).trim(), String.valueOf(row.get("file_number")).trim()); } } } catch (Exception ignored) { } return map; }
private Map<String, Integer> getWorkorderRegisteredQtyMap() { Map<String, Integer> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT ref_no, pid, tid, qty_registered FROM toner_workorder_printermodel_qty WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"); for (Map<String, Object> row : list) { if (row.get("ref_no") != null && row.get("pid") != null && row.get("tid") != null) { String refNo = String.valueOf(row.get("ref_no")).trim(); String pid = String.valueOf(row.get("pid")).trim(); String tid = String.valueOf(row.get("tid")).trim(); Integer qty = parseIntegerSafely(row.get("qty_registered")); map.put(refNo + "_" + pid + "_" + tid, qty != null ? qty : 0); } } } catch (Exception ignored) { } return map; }
private Map<String, Integer> getTotalWorkorderRegisteredMap() { Map<String, Integer> map = new HashMap<>(); try { List<Map<String, Object>> list = jdbcTemplate.queryForList( "SELECT pid, tid, SUM(CAST(qty_registered AS SIGNED)) AS total_qty FROM toner_workorder_printermodel_qty WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY pid, tid"); for (Map<String, Object> row : list) { if (row.get("pid") != null && row.get("tid") != null) { String pid = String.valueOf(row.get("pid")).trim(); String tid = String.valueOf(row.get("tid")).trim(); Integer qty = parseIntegerSafely(row.get("total_qty")); map.put(pid + "_" + tid, qty != null ? qty : 0); map.put(tid, map.getOrDefault(tid, 0) + (qty != null ? qty : 0)); } } } catch (Exception ignored) { } return map; }
private Map<String, Integer> getInwardStockMap() { Map<String, Integer> map = new HashMap<>(); try { String sql = "SELECT ref_no, pid, tid, SUM(CAST(qty_registered AS SIGNED)) AS total_qty FROM toner_stock_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY ref_no, pid, tid"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); for (Map<String, Object> row : list) { String ref = row.get("ref_no") != null ? String.valueOf(row.get("ref_no")).trim() : ""; String pid = row.get("pid") != null ? String.valueOf(row.get("pid")).trim() : ""; String tid = row.get("tid") != null ? String.valueOf(row.get("tid")).trim() : ""; Integer qty = parseIntegerSafely(row.get("total_qty")); map.put(ref + "_" + pid + "_" + tid, qty != null ? qty : 0); } } catch (Exception ignored) { } return map; }
private Map<String, Integer> getInwardStockByRequestMap() { Map<String, Integer> map = new HashMap<>(); try { String sql = "SELECT ref_no, pid, tid, request_id, SUM(CAST(qty_registered AS SIGNED)) AS total_qty FROM toner_stock_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY ref_no, pid, tid, request_id"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); for (Map<String, Object> row : list) { String ref = row.get("ref_no") != null ? String.valueOf(row.get("ref_no")).trim() : ""; String pid = row.get("pid") != null ? String.valueOf(row.get("pid")).trim() : ""; String tid = row.get("tid") != null ? String.valueOf(row.get("tid")).trim() : ""; String reqId = row.get("request_id") != null ? String.valueOf(row.get("request_id")).trim() : ""; Integer qty = parseIntegerSafely(row.get("total_qty")); map.put(ref + "_" + pid + "_" + tid + "_" + reqId, qty != null ? qty : 0); } } catch (Exception ignored) { } return map; }
private Map<String, Integer> getAvailableStockMap() { Map<String, Integer> map = new HashMap<>(); try { Map<String, Integer> inwardMap = new HashMap<>(); String inSql = "SELECT pid, tid, SUM(CAST(qty_registered AS SIGNED)) AS total_in FROM toner_stock_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY pid, tid"; List<Map<String, Object>> inList = jdbcTemplate.queryForList(inSql); for (Map<String, Object> row : inList) { String pid = row.get("pid") != null ? String.valueOf(row.get("pid")).trim() : ""; String tid = row.get("tid") != null ? String.valueOf(row.get("tid")).trim() : ""; Integer q = parseIntegerSafely(row.get("total_in")); inwardMap.put(pid + "_" + tid, q != null ? q : 0); }
Map<String, Integer> outwardMap = new HashMap<>(); String outSql = "SELECT pid, tid, SUM(CAST(qty_delivered AS SIGNED)) AS total_out FROM toner_department_requested_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY pid, tid"; List<Map<String, Object>> outList = jdbcTemplate.queryForList(outSql); for (Map<String, Object> row : outList) { String pid = row.get("pid") != null ? String.valueOf(row.get("pid")).trim() : ""; String tid = row.get("tid") != null ? String.valueOf(row.get("tid")).trim() : ""; Integer q = parseIntegerSafely(row.get("total_out")); outwardMap.put(pid + "_" + tid, q != null ? q : 0); }
for (Map.Entry<String, Integer> entry : inwardMap.entrySet()) { int inQ = entry.getValue(); int outQ = outwardMap.getOrDefault(entry.getKey(), 0); map.put(entry.getKey(), Math.max(0, inQ - outQ)); } } catch (Exception ignored) { } return map; }
// ================ Adding department & toners & printers ================
public boolean savenewdepartment(String department) { if (department == null || department.trim().isEmpty()) return false; String cleanDept = department.trim(); try { String sql = "INSERT INTO toner_department_list (dept_name, is_active, is_delete) VALUES (?, 1, 0)"; jdbcTemplate.update(sql, cleanDept); return true; } catch (Exception e) { try { String sql2 = "INSERT INTO toner_department_list (department_name, is_active, is_delete) VALUES (?, 1, 0)"; jdbcTemplate.update(sql2, cleanDept); return true; } catch (Exception ex) { try { String sql3 = "INSERT INTO toner_department_list (dept_name) VALUES (?)"; jdbcTemplate.update(sql3, cleanDept); return true; } catch (Exception ex2) { ex2.printStackTrace(); return false; } } } }
public boolean savetonermodel(int pid, String modelname, String partcode) { if (pid <= 0 || modelname == null || modelname.trim().isEmpty()) return false; String cleanModel = modelname.trim(); String cleanPart = (partcode != null && !partcode.trim().isEmpty()) ? partcode.trim() : null; try { String sql = "INSERT INTO toner_model_list (pid, model_name, part_code, is_active, is_delete) VALUES (?, ?, ?, 1, 0)"; jdbcTemplate.update(sql, pid, cleanModel, cleanPart); return true; } catch (Exception e) { try { String sql2 = "INSERT INTO toner_model_list (pid, model_name, part_code) VALUES (?, ?, ?)"; jdbcTemplate.update(sql2, pid, cleanModel, cleanPart); return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } }
public boolean saveprintermodel(String printermodel) { if (printermodel == null || printermodel.trim().isEmpty()) return false; String cleanPrinter = printermodel.trim(); try { String sql = "INSERT INTO toner_printer_model_list (printer_name, is_active, is_delete) VALUES (?, 1, 0)"; jdbcTemplate.update(sql, cleanPrinter); return true; } catch (Exception e) { try { String sql2 = "INSERT INTO toner_printer_model_list (printer_name) VALUES (?)"; jdbcTemplate.update(sql2, cleanPrinter); return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } }
public boolean updatePrinterModel(int id, String printermodel) { if (id <= 0 || printermodel == null || printermodel.trim().isEmpty()) return false; String cleanPrinter = printermodel.trim(); try { String sql = "UPDATE toner_printer_model_list SET printer_name = ? WHERE id = ?"; return jdbcTemplate.update(sql, cleanPrinter, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public boolean updateTonerModel(int id, int pid, String modelname, String partcode) { if (id <= 0 || pid <= 0 || modelname == null || modelname.trim().isEmpty()) return false; String cleanModel = modelname.trim(); String cleanPart = (partcode != null && !partcode.trim().isEmpty()) ? partcode.trim() : null; try { String sql = "UPDATE toner_model_list SET pid = ?, model_name = ?, part_code = ? WHERE id = ?"; return jdbcTemplate.update(sql, pid, cleanModel, cleanPart, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public boolean updateDepartment(int id, String department) { if (id <= 0 || department == null || department.trim().isEmpty()) return false; String cleanDept = department.trim(); try { String sql = "UPDATE toner_department_list SET dept_name = ? WHERE id = ?"; return jdbcTemplate.update(sql, cleanDept, id) > 0; } catch (Exception e) { try { String sql2 = "UPDATE toner_department_list SET department_name = ? WHERE id = ?"; return jdbcTemplate.update(sql2, cleanDept, id) > 0; } catch (Exception ex) { ex.printStackTrace(); return false; } } }
public boolean deletePrinterModel(int id) { if (id <= 0) return false; try { String sql = "UPDATE toner_printer_model_list SET is_active = 0, is_delete = 1 WHERE id = ?"; return jdbcTemplate.update(sql, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public boolean restorePrinterModel(int id) { if (id <= 0) return false; try { String sql = "UPDATE toner_printer_model_list SET is_active = 1, is_delete = 0 WHERE id = ?"; return jdbcTemplate.update(sql, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public boolean deleteTonerModel(int id) { if (id <= 0) return false; try { String sql = "UPDATE toner_model_list SET is_active = 0, is_delete = 1 WHERE id = ?"; return jdbcTemplate.update(sql, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public boolean restoreTonerModel(int id) { if (id <= 0) return false; try { String sql = "UPDATE toner_model_list SET is_active = 1, is_delete = 0 WHERE id = ?"; return jdbcTemplate.update(sql, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public boolean deleteDepartment(int id) { if (id <= 0) return false; try { String sql = "UPDATE toner_department_list SET is_active = 0, is_delete = 1 WHERE id = ?"; return jdbcTemplate.update(sql, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public boolean restoreDepartment(int id) { if (id <= 0) return false; try { String sql = "UPDATE toner_department_list SET is_active = 1, is_delete = 0 WHERE id = ?"; return jdbcTemplate.update(sql, id) > 0; } catch (Exception e) { e.printStackTrace(); return false; } }
public List<Map<String, Object>> getMasterPrinters(String status) { try { String sql; if ("deleted".equalsIgnoreCase(status)) { sql = "SELECT id, printer_name, is_active, is_delete FROM toner_printer_model_list WHERE (is_delete = 1 OR is_active = 0) ORDER BY id DESC"; } else if ("all".equalsIgnoreCase(status)) { sql = "SELECT id, printer_name, is_active, is_delete FROM toner_printer_model_list ORDER BY printer_name ASC"; } else { sql = "SELECT id, printer_name, is_active, is_delete FROM toner_printer_model_list WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY printer_name ASC"; } return jdbcTemplate.queryForList(sql); } catch (Exception e) { e.printStackTrace(); return new ArrayList<>(); } }
public List<Map<String, Object>> getMasterToners(String status) { try { String sql; if ("deleted".equalsIgnoreCase(status)) { sql = "SELECT t.id, t.pid, t.model_name, t.part_code, p.printer_name, t.is_active, t.is_delete FROM toner_model_list t " + "LEFT JOIN toner_printer_model_list p ON t.pid = p.id " + "WHERE (t.is_delete = 1 OR t.is_active = 0) ORDER BY t.id DESC"; } else if ("all".equalsIgnoreCase(status)) { sql = "SELECT t.id, t.pid, t.model_name, t.part_code, p.printer_name, t.is_active, t.is_delete FROM toner_model_list t " + "LEFT JOIN toner_printer_model_list p ON t.pid = p.id ORDER BY p.printer_name ASC, t.model_name ASC"; } else { sql = "SELECT t.id, t.pid, t.model_name, t.part_code, p.printer_name, t.is_active, t.is_delete FROM toner_model_list t " + "LEFT JOIN toner_printer_model_list p ON t.pid = p.id " + "WHERE (t.is_active IS NULL OR t.is_active = 1) AND (t.is_delete IS NULL OR t.is_delete = 0) " + "ORDER BY p.printer_name ASC, t.model_name ASC"; } return jdbcTemplate.queryForList(sql); } catch (Exception e) { e.printStackTrace(); return new ArrayList<>(); } }
public List<Map<String, Object>> getMasterDepartments(String status) { try { String sql; if ("deleted".equalsIgnoreCase(status)) { sql = "SELECT id, dept_name, is_active, is_delete FROM toner_department_list WHERE (is_delete = 1 OR is_active = 0) ORDER BY id DESC"; } else if ("all".equalsIgnoreCase(status)) { sql = "SELECT id, dept_name, is_active, is_delete FROM toner_department_list ORDER BY dept_name ASC"; } else { sql = "SELECT id, dept_name, is_active, is_delete FROM toner_department_list WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY dept_name ASC"; } return jdbcTemplate.queryForList(sql); } catch (Exception e) { try { String fallbackSql; if ("deleted".equalsIgnoreCase(status)) { fallbackSql = "SELECT id, department_name AS dept_name, is_active, is_delete FROM toner_department_list WHERE (is_delete = 1 OR is_active = 0) ORDER BY id DESC"; } else if ("all".equalsIgnoreCase(status)) { fallbackSql = "SELECT id, department_name AS dept_name, is_active, is_delete FROM toner_department_list ORDER BY department_name ASC"; } else { fallbackSql = "SELECT id, department_name AS dept_name, is_active, is_delete FROM toner_department_list WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY department_name ASC"; } return jdbcTemplate.queryForList(fallbackSql); } catch (Exception ex) { ex.printStackTrace(); return new ArrayList<>(); } } }
public List<Map<String, Object>> getAllActiveToners() { return getMasterToners("active"); }
// ================= PRINTERS & TONERS =================
public List<Map<String, Object>> getActivePrinters() { String sql = "SELECT id, printer_name FROM toner_printer_model_list WHERE is_active = 1 AND is_delete = 0"; try { return jdbcTemplate.queryForList(sql); } catch (Exception e) { return new ArrayList<>(); } }
public List<Map<String, Object>> getActiveTonersByPrinter(int pid) { try { String sql = "SELECT id, pid, model_name, part_code FROM toner_model_list WHERE pid = ? AND (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, pid); Map<String, Integer> availMap = getAvailableStockMap();
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> map : list) { Map<String, Object> row = new HashMap<>(map); String tidStr = String.valueOf(map.get("id")).trim(); String pidStr = String.valueOf(map.get("pid")).trim(); row.put("available_stock", availMap.getOrDefault(pidStr + "_" + tidStr, 0)); result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
public String getTonerModelName(int tid) { String sql = "SELECT model_name FROM toner_model_list WHERE id = ?"; try { return jdbcTemplate.queryForObject(sql, String.class, tid); } catch (Exception e) { return "UNKNOWN"; } }
public int getTonerAvailableStock(int tid) { try { String sql = "SELECT pid FROM toner_model_list WHERE id = ?"; Integer pid = jdbcTemplate.queryForObject(sql, Integer.class, tid); if (pid == null) return 0; return getAvailableStockForModel(String.valueOf(pid), String.valueOf(tid)); } catch (Exception e) { return 0; } }
public int getAvailableStockForModel(String pid, String tid) { String sqlInward = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM toner_stock_register_details WHERE TRIM(pid) = TRIM(?) AND TRIM(tid) = TRIM(?) AND (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; String sqlOutward = "SELECT COALESCE(SUM(CAST(qty_delivered AS SIGNED)), 0) FROM toner_department_requested_details WHERE TRIM(pid) = TRIM(?) AND TRIM(tid) = TRIM(?) AND (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; try { int inVal = jdbcTemplate.queryForObject(sqlInward, Integer.class, pid, tid); int outVal = jdbcTemplate.queryForObject(sqlOutward, Integer.class, pid, tid); return Math.max(0, inVal - outVal); } catch (Exception e) { return 0; } }
// ================= INWARD STOCK REGISTER =================
@Transactional public boolean saveInwardRegister(String refNo, String companyName, List<Map<String, Object>> items, String dcUpload, String dcNo, String dcDate, String username) { String sql = "INSERT INTO toner_stock_register_details " + "(ref_no, company_name, pid, tid, qty_registered, dc_upload, dc_no, dc_date, cdate, updated_date, updated_by, is_active, is_delete, request_id) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, 0, ?)"; Timestamp now = new Timestamp(System.currentTimeMillis()); String finalDcNo = (dcNo != null && !dcNo.trim().isEmpty()) ? dcNo.trim() : null; String finalDcDate = (dcDate != null && !dcDate.trim().isEmpty()) ? dcDate.trim() : null; try { for (Map<String, Object> item : items) { Integer pidVal = parseIntegerSafely(item.get("pid")); Integer tidVal = parseIntegerSafely(item.get("tid")); if (pidVal == null || tidVal == null) { continue; } int pid = pidVal; int tid = tidVal;
Integer qtyVal = parseIntegerSafely(item.get("qty")); if (qtyVal == null || qtyVal <= 0) continue;
Integer requestId = parseIntegerSafely(item.get("requestId"));
jdbcTemplate.update(sql, refNo, companyName, String.valueOf(pid), String.valueOf(tid), String.valueOf(qtyVal), dcUpload, finalDcNo, finalDcDate, now, now, username, requestId); } return true; } catch (Exception e) { throw new RuntimeException("Rollback saveInwardRegister due to: " + e.getMessage()); } }
@Transactional public boolean saveInwardRegister(String refNo, String companyName, List<Map<String, Object>> items, String dcUpload, String dcDate, String username) { return saveInwardRegister(refNo, companyName, items, dcUpload, null, dcDate, username); }
@Transactional public boolean saveInwardRegister(String refNo, String companyName, List<Map<String, Object>> items, String dcUpload, String username) { return saveInwardRegister(refNo, companyName, items, dcUpload, null, null, username); }
@Transactional public boolean updateInwardDc(List<Integer> ids, String dcNo, String dcDate, String newDcUpload, String updatedBy) { if (ids == null || ids.isEmpty()) { return false; } Timestamp now = new Timestamp(System.currentTimeMillis()); String inSql = ids.stream().map(i -> "?").collect(java.util.stream.Collectors.joining(",")); String finalDcNo = (dcNo != null && !dcNo.trim().isEmpty()) ? dcNo.trim() : null; String finalDcDate = (dcDate != null && !dcDate.trim().isEmpty()) ? dcDate.trim() : null;
if (newDcUpload != null && !newDcUpload.trim().isEmpty()) { String sql = "UPDATE toner_stock_register_details SET dc_no = ?, dc_date = ?, dc_upload = ?, updated_date = ?, updated_by = ? WHERE id IN (" + inSql + ")"; List<Object> params = new ArrayList<>(); params.add(finalDcNo); params.add(finalDcDate); params.add(newDcUpload.trim()); params.add(now); params.add(updatedBy); params.addAll(ids); jdbcTemplate.update(sql, params.toArray()); } else { String sql = "UPDATE toner_stock_register_details SET dc_no = ?, dc_date = ?, updated_date = ?, updated_by = ? WHERE id IN (" + inSql + ")"; List<Object> params = new ArrayList<>(); params.add(finalDcNo); params.add(finalDcDate); params.add(now); params.add(updatedBy); params.addAll(ids); jdbcTemplate.update(sql, params.toArray()); } return true; }
@Transactional public boolean deleteInwardDc(List<Integer> ids, String updatedBy) { if (ids == null || ids.isEmpty()) { return false; } Timestamp now = new Timestamp(System.currentTimeMillis()); String inSql = ids.stream().map(i -> "?").collect(java.util.stream.Collectors.joining(",")); String sql = "UPDATE toner_stock_register_details SET is_active = 0, is_delete = 1, updated_date = ?, updated_by = ? WHERE id IN (" + inSql + ")"; List<Object> params = new ArrayList<>(); params.add(now); params.add(updatedBy); params.addAll(ids); jdbcTemplate.update(sql, params.toArray()); return true; }
public List<Map<String, Object>> getInwardHistory() { try { String sql = "SELECT * FROM toner_stock_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY id DESC"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> userMap = getUserMap(); Map<String, String> vendorMap = getVendorMap(); Map<String, String> fileNumberMap = getWorkorderFileNumberMap(); Map<String, Integer> woQtyMap = getWorkorderRegisteredQtyMap();
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { String refNo = raw.get("ref_no") != null ? String.valueOf(raw.get("ref_no")).trim() : ""; String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : "";
Integer qtyIn = parseIntegerSafely(raw.get("qty_registered")); int qty = qtyIn != null ? qtyIn : 0;
String dc = raw.get("dc_upload") != null ? String.valueOf(raw.get("dc_upload")).trim() : ""; String dcNo = raw.get("dc_no") != null ? String.valueOf(raw.get("dc_no")).trim() : ""; String dcDate = raw.get("dc_date") != null ? String.valueOf(raw.get("dc_date")).trim() : ""; String updatedBy = raw.get("updated_by") != null ? String.valueOf(raw.get("updated_by")).trim() : ""; String companyName = raw.get("company_name") != null ? String.valueOf(raw.get("company_name")).trim() : "";
String tonerModelName = tonerMap.getOrDefault(tid, tid); String partCode = partCodeMap.get(tid); if (partCode == null || partCode.isEmpty()) { partCode = partCodeMap.get(tonerModelName != null ? tonerModelName.trim().toLowerCase() : ""); }
Map<String, Object> row = new HashMap<>(raw); row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerModelName); row.put("part_code", partCode != null && !partCode.isEmpty() ? partCode : "-"); row.put("order_by", userMap.getOrDefault(updatedBy, updatedBy)); row.put("file_number", fileNumberMap.getOrDefault(refNo, "")); row.put("vendor_name", vendorMap.getOrDefault(companyName, companyName)); row.put("qty_registered", qty); row.put("inward_qty", qty); row.put("qty_workorder_registered", woQtyMap.getOrDefault(refNo + "_" + pid + "_" + tid, 0)); row.put("qty_workorder_requested", 0); row.put("dc_upload", dc); row.put("dc_uploads", dc); row.put("dc_no", dcNo); row.put("dc_date", dcDate); result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
// ================= USER REQUESTS =================
public int getMaxRequestId() { String sql = "SELECT COALESCE(MAX(id), 0) FROM toner_department_requested_details"; try { return jdbcTemplate.queryForObject(sql, Integer.class); } catch (Exception e) { return 0; } }
@Transactional public boolean saveUserRequest(String itCellRefNo, String deptId, String zoneId, List<Map<String, Object>> items, String userRequestUpload, String requestDate, String username) { Timestamp now = new Timestamp(System.currentTimeMillis()); String finalRequestDate = (requestDate != null && !requestDate.trim().isEmpty()) ? requestDate.trim() : null; String sql = "INSERT INTO toner_department_requested_details " + "(req_no, itcell_ref_no, dept_id, zone_id, pid, tid, qty_requested, qty_delivered, user_request_upload, request_date, cdate, updated_date, updated_by, is_active, is_delete) " + "VALUES (?, ?, ?, ?, ?, ?, ?, '0', ?, ?, ?, ?, ?, 1, 0)"; try { int baseMaxId = getMaxRequestId(); int year = Calendar.getInstance().get(Calendar.YEAR); int seqCounter = 0;
for (Map<String, Object> item : items) { Integer pidVal = parseIntegerSafely(item.get("pid")); Integer tidVal = parseIntegerSafely(item.get("tid")); if (pidVal == null || tidVal == null) { continue; } int pid = pidVal; int tid = tidVal;
Integer qtyVal = parseIntegerSafely(item.get("qty")); int qtyRequested = (qtyVal != null && qtyVal > 0) ? qtyVal : 1;
String tonerModel = getTonerModelName(tid); String cleanModel = (tonerModel != null && !tonerModel.trim().isEmpty()) ? tonerModel.trim().replaceAll("\\s+", "-").replaceAll("[^a-zA-Z0-9-]", "") : "REQ"; if (cleanModel.isEmpty()) { cleanModel = "REQ"; }
seqCounter++; int seqNum = 1000 + baseMaxId + seqCounter; String reqNo = String.format("%s-%d-%04d", cleanModel, year, seqNum);
jdbcTemplate.update(sql, reqNo, itCellRefNo, deptId, zoneId, String.valueOf(pid), String.valueOf(tid), String.valueOf(qtyRequested), userRequestUpload, finalRequestDate, now, now, username); } return true; } catch (Exception e) { throw new RuntimeException("Rollback saveUserRequest due to: " + e.getMessage()); } }
@Transactional public boolean saveUserRequest(String itCellRefNo, String deptId, String zoneId, List<Map<String, Object>> items, String userRequestUpload, String username) { return saveUserRequest(itCellRefNo, deptId, zoneId, items, userRequestUpload, null, username); }
@Transactional public boolean updateUserRequest(int id, String itcellRefNo, String deptId, String zoneId, int pid, int tid, int qtyRequested, String newUploadPath, String requestDate, String username) { Timestamp now = new Timestamp(System.currentTimeMillis()); try { String safeZoneId = (zoneId != null && !zoneId.trim().isEmpty() && !"null".equalsIgnoreCase(zoneId)) ? zoneId.trim() : null; String finalRequestDate = (requestDate != null && !requestDate.trim().isEmpty()) ? requestDate.trim() : null; if (newUploadPath != null && !newUploadPath.trim().isEmpty()) { String sql = "UPDATE toner_department_requested_details SET " + "itcell_ref_no = ?, dept_id = ?, zone_id = ?, pid = ?, tid = ?, " + "qty_requested = ?, user_request_upload = ?, request_date = ?, updated_date = ?, updated_by = ? " + "WHERE id = ?"; int rows = jdbcTemplate.update(sql, itcellRefNo.trim(), deptId.trim(), safeZoneId, String.valueOf(pid), String.valueOf(tid), String.valueOf(qtyRequested), newUploadPath, finalRequestDate, now, username, id); return rows > 0; } else { String sql = "UPDATE toner_department_requested_details SET " + "itcell_ref_no = ?, dept_id = ?, zone_id = ?, pid = ?, tid = ?, " + "qty_requested = ?, request_date = ?, updated_date = ?, updated_by = ? " + "WHERE id = ?"; int rows = jdbcTemplate.update(sql, itcellRefNo.trim(), deptId.trim(), safeZoneId, String.valueOf(pid), String.valueOf(tid), String.valueOf(qtyRequested), finalRequestDate, now, username, id); return rows > 0; } } catch (Exception e) { e.printStackTrace(); return false; } }
@Transactional public boolean updateUserRequest(int id, String itcellRefNo, String deptId, String zoneId, int pid, int tid, int qtyRequested, String newUploadPath, String username) { return updateUserRequest(id, itcellRefNo, deptId, zoneId, pid, tid, qtyRequested, newUploadPath, null, username); }
@Transactional public boolean updateUserRequestGroup(String itcellRefNo, String newItcellRefNo, String deptId, String zoneId, String requestDate, String newUploadPath, List<Map<String, Object>> items, String username) { Timestamp now = new Timestamp(System.currentTimeMillis()); try { String safeZoneId = (zoneId != null && !zoneId.trim().isEmpty() && !"null".equalsIgnoreCase(zoneId)) ? zoneId.trim() : null; String finalRequestDate = (requestDate != null && !requestDate.trim().isEmpty()) ? requestDate.trim() : null; String finalItcell = (newItcellRefNo != null && !newItcellRefNo.trim().isEmpty()) ? newItcellRefNo.trim() : itcellRefNo.trim();
if (newUploadPath != null && !newUploadPath.trim().isEmpty()) { String sql = "UPDATE toner_department_requested_details SET " + "itcell_ref_no = ?, dept_id = ?, zone_id = ?, request_date = ?, user_request_upload = ?, updated_date = ?, updated_by = ? " + "WHERE TRIM(itcell_ref_no) = TRIM(?)"; jdbcTemplate.update(sql, finalItcell, deptId.trim(), safeZoneId, finalRequestDate, newUploadPath, now, username, itcellRefNo.trim()); } else { String sql = "UPDATE toner_department_requested_details SET " + "itcell_ref_no = ?, dept_id = ?, zone_id = ?, request_date = ?, updated_date = ?, updated_by = ? " + "WHERE TRIM(itcell_ref_no) = TRIM(?)"; jdbcTemplate.update(sql, finalItcell, deptId.trim(), safeZoneId, finalRequestDate, now, username, itcellRefNo.trim()); }
// Update individual item quantities if provided
if (items != null && !items.isEmpty()) { String updateItemSql = "UPDATE toner_department_requested_details SET qty_requested = ?, updated_date = ?, updated_by = ? WHERE id = ?"; for (Map<String, Object> item : items) { Integer id = parseIntegerSafely(item.get("id")); Integer qty = parseIntegerSafely(item.get("qty")); if (id != null && qty != null && qty > 0) { jdbcTemplate.update(updateItemSql, String.valueOf(qty), now, username, id); } } } return true; } catch (Exception e) { e.printStackTrace(); return false; } }
public List<Map<String, Object>> getAllUserRequests() { try { String sql = "SELECT * FROM toner_department_requested_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY id DESC"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> deptMap = getDepartmentMap(); Map<String, String> zoneMap = getZoneMap(); Map<String, String> userMap = getUserMap();
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { Map<String, Object> row = new HashMap<>(raw);
String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : ""; String deptId = raw.get("dept_id") != null ? String.valueOf(raw.get("dept_id")).trim() : ""; String zoneId = raw.get("zone_id") != null ? String.valueOf(raw.get("zone_id")).trim() : ""; String updatedBy = raw.get("updated_by") != null ? String.valueOf(raw.get("updated_by")).trim() : ""; String requestDate = raw.get("request_date") != null ? String.valueOf(raw.get("request_date")).trim() : "";
String tonerModelName = tonerMap.getOrDefault(tid, tid); String partCode = partCodeMap.get(tid); if (partCode == null || partCode.isEmpty()) { partCode = partCodeMap.get(tonerModelName != null ? tonerModelName.trim().toLowerCase() : ""); }
row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerModelName); row.put("part_code", partCode != null && !partCode.isEmpty() ? partCode : "-"); row.put("dept_name", deptMap.getOrDefault(deptId, deptId)); row.put("zone_name", zoneMap.getOrDefault(zoneId, zoneId)); row.put("updated_by", userMap.getOrDefault(updatedBy, updatedBy)); row.put("request_date", requestDate);
result.add(row); } // System.out.println("result:" + result);
return result; } catch (Exception e) { return new ArrayList<>(); } }
public Map<String, Object> getUserRequestById(int id) { try { String sql = "SELECT * FROM toner_department_requested_details WHERE id = ? AND (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, id); if (list == null || list.isEmpty()) { return null; } Map<String, Object> raw = list.get(0); Map<String, Object> row = new HashMap<>(raw);
String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : ""; String deptId = raw.get("dept_id") != null ? String.valueOf(raw.get("dept_id")).trim() : "";
row.put("printer_name", getPrinterMap().getOrDefault(pid, "")); row.put("model_name", getTonerMap().getOrDefault(tid, "")); row.put("dept_name", getDepartmentMap().getOrDefault(deptId, deptId)); return row; } catch (Exception e) { return null; } }
public List<Map<String, Object>> getPendingRequests() { try { String sql = "SELECT * FROM toner_department_requested_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY id DESC"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> deptMap = getDepartmentMap(); Map<String, String> zoneMap = getZoneMap(); Map<String, Integer> availStockMap = getAvailableStockMap(); Map<String, Integer> totalWoMap = getTotalWorkorderRegisteredMap();
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { Integer reqQty = parseIntegerSafely(raw.get("qty_requested")); Integer delQty = parseIntegerSafely(raw.get("qty_delivered")); int requested = reqQty != null ? reqQty : 0; int delivered = delQty != null ? delQty : 0;
if (delivered >= requested) { continue; // Already fulfilled
}
String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : ""; int availStock = availStockMap.getOrDefault(pid + "_" + tid, 0); int woQty = totalWoMap.getOrDefault(pid + "_" + tid, totalWoMap.getOrDefault(tid, 0));
Map<String, Object> row = new HashMap<>(raw); String deptId = raw.get("dept_id") != null ? String.valueOf(raw.get("dept_id")).trim() : ""; String zoneId = raw.get("zone_id") != null ? String.valueOf(raw.get("zone_id")).trim() : "";
row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerMap.getOrDefault(tid, tid)); row.put("part_code", partCodeMap.getOrDefault(tid, "N/A")); row.put("dept_name", deptMap.getOrDefault(deptId, deptId)); row.put("zone_name", zoneMap.getOrDefault(zoneId, zoneId)); row.put("available_stock", availStock); row.put("qty_workorder_registered", woQty); row.put("workorder_qty", woQty);
result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
// ================= OUTWARD REGISTER =================
@Transactional public boolean saveOutwardRegisterBulk(List<Map<String, Object>> items, String outwardDate, String username) { Timestamp now = new Timestamp(System.currentTimeMillis()); String finalOutDate = (outwardDate != null && !outwardDate.trim().isEmpty()) ? outwardDate.trim() : null; try { for (Map<String, Object> item : items) { Integer idVal = parseIntegerSafely(item.get("id")); Integer qtyVal = parseIntegerSafely(item.get("qtyIssued")); if (idVal == null) continue; int id = idVal; int qtyIssued = (qtyVal != null) ? qtyVal : 0; if (qtyIssued <= 0) continue;
String sql = "UPDATE toner_department_requested_details SET " + "qty_delivered = CAST(COALESCE(qty_delivered, 0) AS SIGNED) + ?, " + "outward_date = COALESCE(?, outward_date), " + "updated_date = ?, updated_by = ? " + "WHERE id = ?"; jdbcTemplate.update(sql, qtyIssued, finalOutDate, now, username, id); } return true; } catch (Exception e) { throw new RuntimeException("Rollback saveOutwardRegisterBulk due to: " + e.getMessage()); } }
@Transactional public boolean updateOutwardDeliveryFiles(List<Integer> ids, String finalDeliveredUpload, String userPhotoUpload, String username) { Timestamp now = new Timestamp(System.currentTimeMillis()); try { for (int id : ids) { String sql = "UPDATE toner_department_requested_details SET " + "final_delivered_upload = CASE WHEN ? IS NULL OR ? = '' THEN final_delivered_upload " + " WHEN final_delivered_upload IS NULL OR final_delivered_upload = '' THEN ? " + " ELSE CONCAT(final_delivered_upload, ',', ?) END, " + "receiver_photo = CASE WHEN ? IS NULL OR ? = '' THEN receiver_photo " + " WHEN receiver_photo IS NULL OR receiver_photo = '' THEN ? " + " ELSE CONCAT(receiver_photo, ',', ?) END, " + "updated_date = ?, updated_by = ? " + "WHERE id = ?"; jdbcTemplate.update(sql, finalDeliveredUpload, finalDeliveredUpload, finalDeliveredUpload, finalDeliveredUpload, userPhotoUpload, userPhotoUpload, userPhotoUpload, userPhotoUpload, now, username, id); } return true; } catch (Exception e) { throw new RuntimeException("Rollback updateOutwardDeliveryFiles due to: " + e.getMessage()); } }
public boolean saveOutwardRegister(int id, String qtyIssued, String finalDeliveredUpload, String userPhotoUpload, String username) { String sql; int rows; Timestamp now = new Timestamp(System.currentTimeMillis()); try { if (finalDeliveredUpload != null || userPhotoUpload != null) { sql = "UPDATE toner_department_requested_details SET " + "final_delivered_upload = CASE WHEN ? IS NULL OR ? = '' THEN final_delivered_upload " + " WHEN final_delivered_upload IS NULL OR final_delivered_upload = '' THEN ? " + " ELSE CONCAT(final_delivered_upload, ',', ?) END, " + "receiver_photo = CASE WHEN ? IS NULL OR ? = '' THEN receiver_photo " + " WHEN receiver_photo IS NULL OR receiver_photo = '' THEN ? " + " ELSE CONCAT(receiver_photo, ',', ?) END, " + "qty_delivered = CASE WHEN qty_delivered IS NULL OR CAST(qty_delivered AS SIGNED) = 0 THEN ? ELSE qty_delivered END, " + "updated_date = ?, updated_by = ? " + "WHERE id = ?"; rows = jdbcTemplate.update(sql, finalDeliveredUpload, finalDeliveredUpload, finalDeliveredUpload, finalDeliveredUpload, userPhotoUpload, userPhotoUpload, userPhotoUpload, userPhotoUpload, qtyIssued, now, username, id); } else { sql = "UPDATE toner_department_requested_details " + "SET qty_delivered = CAST(COALESCE(qty_delivered, 0) AS SIGNED) + CAST(? AS SIGNED), " + "updated_date = ?, updated_by = ? " + "WHERE id = ?"; rows = jdbcTemplate.update(sql, qtyIssued, now, username, id); } return rows > 0; } catch (Exception e) { throw new RuntimeException("Rollback saveOutwardRegister due to: " + e.getMessage()); } }
public boolean saveOutwardRegister(int id, String qtyIssued, String finalDeliveredUpload, String username) { return saveOutwardRegister(id, qtyIssued, finalDeliveredUpload, null, username); }
public List<Map<String, Object>> getOutwardHistory() { try { String sql = "SELECT * FROM toner_department_requested_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) AND qty_delivered IS NOT NULL AND CAST(qty_delivered AS SIGNED) > 0 ORDER BY updated_date DESC, id DESC"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> deptMap = getDepartmentMap(); Map<String, String> zoneMap = getZoneMap(); Map<String, String> userMap = getUserMap();
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { Map<String, Object> row = new HashMap<>(raw);
String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : ""; String deptId = raw.get("dept_id") != null ? String.valueOf(raw.get("dept_id")).trim() : ""; String zoneId = raw.get("zone_id") != null ? String.valueOf(raw.get("zone_id")).trim() : ""; String updatedBy = raw.get("updated_by") != null ? String.valueOf(raw.get("updated_by")).trim() : "";
row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerMap.getOrDefault(tid, tid)); row.put("part_code", partCodeMap.getOrDefault(tid, "N/A")); row.put("dept_name", deptMap.getOrDefault(deptId, deptId)); row.put("zone_name", zoneMap.getOrDefault(zoneId, zoneId)); row.put("updated_by", userMap.getOrDefault(updatedBy, updatedBy));
result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
// ================= DASHBOARD & INVENTORY =================
public Map<String, Object> getDashboardMetrics() { Map<String, Object> metrics = new HashMap<>(); String sqlRaised = "SELECT COALESCE(SUM(CAST(qty_requested AS SIGNED)), 0) FROM toner_department_requested_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; String sqlDistributed = "SELECT COALESCE(SUM(CAST(qty_delivered AS SIGNED)), 0) FROM toner_department_requested_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; String sqlInward = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM toner_stock_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; String sqlWorkorderRegistered = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM toner_workorder_printermodel_qty WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)";
try { int totalRaised = jdbcTemplate.queryForObject(sqlRaised, Integer.class); int totalDistributed = jdbcTemplate.queryForObject(sqlDistributed, Integer.class); int inwardStock = jdbcTemplate.queryForObject(sqlInward, Integer.class); int availableStock = Math.max(0, inwardStock - totalDistributed); int workorderRegistered = jdbcTemplate.queryForObject(sqlWorkorderRegistered, Integer.class);
metrics.put("totalRaised", totalRaised); metrics.put("totalDistributed", totalDistributed); metrics.put("inwardStock", inwardStock); metrics.put("availableStock", availableStock); metrics.put("workorderRegistered", workorderRegistered); metrics.put("workorderRequested", 0); } catch (Exception e) { metrics.put("totalRaised", 0); metrics.put("totalDistributed", 0); metrics.put("inwardStock", 0); metrics.put("availableStock", 0); metrics.put("workorderRegistered", 0); metrics.put("workorderRequested", 0); } return metrics; }
public List<Map<String, Object>> getInventorySummary() { try { String sql = "SELECT t.id AS tid, t.pid, t.model_name, p.printer_name FROM toner_model_list t " + "LEFT JOIN toner_printer_model_list p ON t.pid = p.id " + "WHERE (t.is_active IS NULL OR t.is_active = 1) AND (t.is_delete IS NULL OR t.is_delete = 0) " + "ORDER BY p.printer_name, t.model_name"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
Map<String, Integer> inwardMap = new HashMap<>(); try { String inSql = "SELECT pid, tid, SUM(CAST(qty_registered AS SIGNED)) AS total_in FROM toner_stock_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY pid, tid"; for (Map<String, Object> r : jdbcTemplate.queryForList(inSql)) { String k = String.valueOf(r.get("pid")).trim() + "_" + String.valueOf(r.get("tid")).trim(); inwardMap.put(k, parseIntegerSafely(r.get("total_in")) != null ? parseIntegerSafely(r.get("total_in")) : 0); } } catch (Exception ignored) { }
Map<String, Integer> outwardMap = new HashMap<>(); try { String outSql = "SELECT pid, tid, SUM(CAST(qty_delivered AS SIGNED)) AS total_out FROM toner_department_requested_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY pid, tid"; for (Map<String, Object> r : jdbcTemplate.queryForList(outSql)) { String k = String.valueOf(r.get("pid")).trim() + "_" + String.valueOf(r.get("tid")).trim(); outwardMap.put(k, parseIntegerSafely(r.get("total_out")) != null ? parseIntegerSafely(r.get("total_out")) : 0); } } catch (Exception ignored) { }
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> map : list) { Map<String, Object> row = new HashMap<>(map); String k = String.valueOf(map.get("pid")).trim() + "_" + String.valueOf(map.get("tid")).trim(); int inward = inwardMap.getOrDefault(k, 0); int outward = outwardMap.getOrDefault(k, 0);
row.put("inward_qty", inward); row.put("outward_qty", outward); row.put("available_qty", Math.max(0, inward - outward)); result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
// ================= WORKORDER REGISTRATION & REQUESTS =================
public boolean saveWorkorder(String refNo, String fileNumber, String vendorName, String startDate, String endDate, String dcUpload, String totalQty, List<Map<String, Object>> items, String username) { Timestamp now = new Timestamp(System.currentTimeMillis());
String sqlMain = "INSERT INTO toner_workorder_register_details " + "(ref_no, file_number, vendor_name, workorder_start_date, workorder_end_date, pid, tid, total_qty_registered, dc_upload, cdate, updated_date, updated_by, is_active, is_delete) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, 0)";
String firstPid = null; String firstTid = null; if (items != null && !items.isEmpty()) { Map<String, Object> firstItem = items.get(0); if (firstItem.get("pid") != null) firstPid = String.valueOf(firstItem.get("pid")); if (firstItem.get("tid") != null) firstTid = String.valueOf(firstItem.get("tid")); }
try { int mainRows = jdbcTemplate.update(sqlMain, refNo, fileNumber, vendorName, startDate, endDate, firstPid, firstTid, totalQty, dcUpload, now, now, username);
if (mainRows <= 0) return false;
String sqlSub = "INSERT INTO toner_workorder_printermodel_qty " + "(ref_no, pid, tid, qty_registered, cdate, updated_date, updated_by, is_active, is_delete) " + "VALUES (?, ?, ?, ?, ?, ?, ?, 1, 0)";
for (Map<String, Object> item : items) { String pid = String.valueOf(item.get("pid")); String tid = String.valueOf(item.get("tid")); String qty = String.valueOf(item.get("qty"));
jdbcTemplate.update(sqlSub, refNo, pid, tid, qty, now, now, username); }
return true; } catch (Exception e) { throw new RuntimeException("Rollback saveWorkorder due to: " + e.getMessage()); } }
public List<Map<String, Object>> getActiveWorkorders() { String sql = "SELECT id, ref_no, file_number, vendor_name FROM toner_workorder_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY id DESC"; try { List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); if (list == null || list.isEmpty()) return new ArrayList<>(); Map<String, Map<String, Object>> seen = new HashMap<>(); List<Map<String, Object>> distinct = new ArrayList<>(); for (Map<String, Object> row : list) { String refNo = row.get("ref_no") != null ? String.valueOf(row.get("ref_no")).trim() : ""; String fileNo = row.get("file_number") != null ? String.valueOf(row.get("file_number")).trim() : ""; String key = refNo + "_" + fileNo; if (!seen.containsKey(key)) { seen.put(key, row); distinct.add(row); } } return distinct; } catch (Exception e) { System.err.println("Error fetching active workorders: " + e.getMessage()); return new ArrayList<>(); } }
public List<String> getActiveWorkorderRefNos() { String sql = "SELECT ref_no FROM toner_workorder_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY id DESC"; try { return jdbcTemplate.queryForList(sql, String.class); } catch (Exception e) { return new ArrayList<>(); } }
public List<Map<String, Object>> getWorkorderRegisteredItems(String refNo) { try { String resolvedRef = refNo != null ? refNo.trim() : ""; try { String findSql = "SELECT ref_no FROM toner_workorder_register_details WHERE (TRIM(ref_no) = TRIM(?) OR TRIM(file_number) = TRIM(?)) AND (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) LIMIT 1"; List<String> refs = jdbcTemplate.queryForList(findSql, String.class, refNo, refNo); if (refs != null && !refs.isEmpty() && refs.get(0) != null) { resolvedRef = refs.get(0).trim(); } } catch (Exception ignored) { }
String sql = "SELECT * FROM toner_workorder_printermodel_qty WHERE (TRIM(ref_no) = TRIM(?) OR TRIM(ref_no) = TRIM(?)) AND (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, refNo, resolvedRef); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> vendorMap = getVendorMap(); Map<String, String> fileNumberMap = getWorkorderFileNumberMap(); Map<String, Integer> inStockMap = getInwardStockMap();
String vendorId = ""; try { String vSql = "SELECT vendor_name FROM toner_workorder_register_details WHERE (TRIM(ref_no) = TRIM(?) OR TRIM(ref_no) = TRIM(?)) LIMIT 1"; vendorId = jdbcTemplate.queryForObject(vSql, String.class, refNo, resolvedRef); } catch (Exception ignored) { }
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { Map<String, Object> row = new HashMap<>(raw);
String cleanRef = resolvedRef; String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : "";
String tonerModelName = tonerMap.getOrDefault(tid, tid); String partCode = partCodeMap.get(tid); if (partCode == null || partCode.isEmpty()) { partCode = partCodeMap.get(tonerModelName != null ? tonerModelName.trim().toLowerCase() : ""); }
row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerModelName); row.put("part_code", partCode != null && !partCode.isEmpty() ? partCode : "-"); row.put("vendor_name", vendorMap.getOrDefault(vendorId, vendorId)); row.put("vendor_id", vendorId); row.put("file_number", fileNumberMap.getOrDefault(cleanRef, "")); row.put("qty_inward_received", inStockMap.getOrDefault(cleanRef + "_" + pid + "_" + tid, 0));
result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
public List<Map<String, Object>> getWorkorderRegisterHistory() { try { String sql = "SELECT * FROM toner_workorder_printermodel_qty WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY id DESC"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> userMap = getUserMap(); Map<String, String> vendorMap = getVendorMap(); Map<String, String> fileNumberMap = getWorkorderFileNumberMap();
Map<String, Map<String, Object>> mainRegMap = new HashMap<>(); try { List<Map<String, Object>> mains = jdbcTemplate.queryForList( "SELECT * FROM toner_workorder_register_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"); for (Map<String, Object> m : mains) { if (m.get("ref_no") != null) { mainRegMap.put(String.valueOf(m.get("ref_no")).trim(), m); } } } catch (Exception ignored) { }
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { Map<String, Object> row = new HashMap<>(raw);
String refNo = raw.get("ref_no") != null ? String.valueOf(raw.get("ref_no")).trim() : ""; String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : ""; String updatedBy = raw.get("updated_by") != null ? String.valueOf(raw.get("updated_by")).trim() : "";
Map<String, Object> mainRow = mainRegMap.get(refNo); String vendorStr = ""; if (mainRow != null) { vendorStr = mainRow.get("vendor_name") != null ? String.valueOf(mainRow.get("vendor_name")).trim() : ""; row.put("file_number", mainRow.get("file_number")); row.put("workorder_start_date", mainRow.get("workorder_start_date")); row.put("workorder_end_date", mainRow.get("workorder_end_date")); row.put("dc_upload", mainRow.get("dc_upload")); row.put("wo_cdate", mainRow.get("cdate")); } else { row.put("file_number", fileNumberMap.getOrDefault(refNo, "")); }
String tonerModelName = tonerMap.getOrDefault(tid, tid); String partCode = partCodeMap.get(tid); if (partCode == null || partCode.isEmpty()) { partCode = partCodeMap.get(tonerModelName != null ? tonerModelName.trim().toLowerCase() : ""); }
row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerModelName); row.put("part_code", partCode != null && !partCode.isEmpty() ? partCode : "-"); row.put("updated_by", userMap.getOrDefault(updatedBy, updatedBy)); row.put("vendor_name", vendorMap.getOrDefault(vendorStr, vendorStr)); row.put("total_qty_registered", raw.get("qty_registered"));
result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
@Transactional public boolean saveWorkorderModelRequest(String refNo, String companyName, String pid, List<Map<String, Object>> items, String emailCopyUpload, String username) { if (items == null || items.isEmpty()) { return false; }
int totalQtyRequested = 0; for (Map<String, Object> item : items) { Integer q = parseIntegerSafely(item.get("qty")); if (q != null) { totalQtyRequested += q; } } final int finalTotalQty = totalQtyRequested;
String firstPid = (pid != null && !pid.trim().isEmpty()) ? pid : String.valueOf(items.get(0).get("pid")); String firstTid = String.valueOf(items.get(0).get("tid"));
Timestamp now = new Timestamp(System.currentTimeMillis());
String sqlMain = "INSERT INTO toner_workorder_model_request_details " + "(ref_no, company_name, pid, tid, qty_requested, email_copy_upload, cdate, updated_date, updated_by, is_active, is_delete) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, 0)";
try { KeyHolder keyHolder = new GeneratedKeyHolder(); int mainRows = jdbcTemplate.update(connection -> { PreparedStatement ps = connection.prepareStatement(sqlMain, Statement.RETURN_GENERATED_KEYS); ps.setString(1, refNo); ps.setString(2, companyName); ps.setString(3, firstPid); ps.setString(4, firstTid); ps.setString(5, String.valueOf(finalTotalQty)); ps.setString(6, emailCopyUpload); ps.setTimestamp(7, now); ps.setTimestamp(8, now); ps.setString(9, username); return ps; }, keyHolder);
if (mainRows <= 0) return false;
String sqlSub = "INSERT INTO toner_workorder_model_multiple_request_qty " + "(ref_no, pid, tid, qty_registered, cdate, updated_date, updated_by, is_active, is_delete) " + "VALUES (?, ?, ?, ?, ?, ?, ?, 1, 0)";
for (Map<String, Object> item : items) { String itemPid = item.get("pid") != null ? String.valueOf(item.get("pid")) : firstPid; String tid = String.valueOf(item.get("tid")); String qty = String.valueOf(item.get("qty"));
jdbcTemplate.update(sqlSub, refNo, itemPid, tid, qty, now, now, username); }
return true; } catch (Exception e) { throw new RuntimeException("Rollback saveWorkorderModelRequest due to: " + e.getMessage()); } }
public List<String> getActiveWorkorderRequestRefNos() { String sql = "SELECT ref_no FROM toner_workorder_model_request_details WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) GROUP BY ref_no ORDER BY MAX(id) DESC"; try { return jdbcTemplate.queryForList(sql, String.class); } catch (Exception e) { return new ArrayList<>(); } }
public List<Map<String, Object>> getWorkorderRequests(String refNo) { try { String sql = "SELECT * FROM toner_workorder_model_multiple_request_qty WHERE TRIM(ref_no) = TRIM(?) AND (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, refNo); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> userMap = getUserMap(); Map<String, Integer> inByReqMap = getInwardStockByRequestMap();
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { Map<String, Object> row = new HashMap<>(raw);
String cleanRef = refNo != null ? refNo.trim() : ""; String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : ""; String updatedBy = raw.get("updated_by") != null ? String.valueOf(raw.get("updated_by")).trim() : ""; String mrId = raw.get("id") != null ? String.valueOf(raw.get("id")).trim() : "";
String tonerModelName = tonerMap.getOrDefault(tid, tid); String partCode = partCodeMap.get(tid); if (partCode == null || partCode.isEmpty()) { partCode = partCodeMap.get(tonerModelName != null ? tonerModelName.trim().toLowerCase() : ""); }
row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerModelName); row.put("part_code", partCode != null && !partCode.isEmpty() ? partCode : "-"); row.put("updated_by", userMap.getOrDefault(updatedBy, updatedBy)); row.put("qty_requested", raw.get("qty_registered")); row.put("qty_inward_received", inByReqMap.getOrDefault(cleanRef + "_" + pid + "_" + tid + "_" + mrId, 0));
result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
public List<Map<String, Object>> getWorkorderModelRequestHistory() { try { String sql = "SELECT * FROM toner_workorder_model_multiple_request_qty WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY id DESC"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); if (list == null || list.isEmpty()) { return new ArrayList<>(); }
Map<String, String> printerMap = getPrinterMap(); Map<String, String> tonerMap = getTonerMap(); Map<String, String> partCodeMap = getTonerPartCodeMap(); Map<String, String> userMap = getUserMap(); Map<String, Integer> woRegisteredQtyMap = getWorkorderRegisteredQtyMap();
List<Map<String, Object>> result = new ArrayList<>(); for (Map<String, Object> raw : list) { Map<String, Object> row = new HashMap<>(raw);
String pid = raw.get("pid") != null ? String.valueOf(raw.get("pid")).trim() : ""; String tid = raw.get("tid") != null ? String.valueOf(raw.get("tid")).trim() : ""; String updatedBy = raw.get("updated_by") != null ? String.valueOf(raw.get("updated_by")).trim() : ""; String refNo = raw.get("ref_no") != null ? String.valueOf(raw.get("ref_no")).trim() : "";
String tonerModelName = tonerMap.getOrDefault(tid, tid); String partCode = partCodeMap.get(tid); if (partCode == null || partCode.isEmpty()) { partCode = partCodeMap.get(tonerModelName != null ? tonerModelName.trim().toLowerCase() : ""); }
row.put("printer_name", printerMap.getOrDefault(pid, pid)); row.put("model_name", tonerModelName); row.put("part_code", partCode != null && !partCode.isEmpty() ? partCode : "-"); row.put("order_by", userMap.getOrDefault(updatedBy, updatedBy)); row.put("qty_requested", raw.get("qty_registered"));
int woQty = woRegisteredQtyMap.getOrDefault(refNo + "_" + pid + "_" + tid, 0); row.put("qty_registered", woQty);
result.add(row); } return result; } catch (Exception e) { return new ArrayList<>(); } }
// ================= DEPARTMENTS & ZONES =================
public List<Map<String, Object>> getActiveDepartments() { String sql = "SELECT id, dept_name FROM toner_department_list WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0) ORDER BY dept_name ASC"; try { return jdbcTemplate.queryForList(sql); } catch (Exception e) { return new ArrayList<>(); } }
public List<Map<String, Object>> getActiveZones() { String sql = "SELECT id, zone_name FROM toner_zone_list WHERE (is_active IS NULL OR is_active = 1) AND (is_delete IS NULL OR is_delete = 0)"; try { return jdbcTemplate.queryForList(sql); } catch (Exception e) { return new ArrayList<>(); } }
public JdbcTemplate getJdbcTemplate() { return this.jdbcTemplate; }
private Integer parseIntegerSafely(Object val) { if (val == null) { return null; } String str = String.valueOf(val).trim(); if (str.isEmpty() || "null".equalsIgnoreCase(str) || "undefined".equalsIgnoreCase(str)) { return null; } try { return Integer.parseInt(str); } catch (NumberFormatException e) { return null; } }}
|