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.
1668 lines
82 KiB
1668 lines
82 KiB
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;
|
|
|
|
@Service
|
|
public 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;
|
|
}
|
|
}
|
|
}
|