@ -1,6 +1,7 @@
package com.gcc_manpower.gcctonermanagement.service ;
package com.gcc_manpower.gcctonermanagement.service ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Map ;
@ -21,6 +22,50 @@ public class TonerService {
this . jdbcTemplate = new JdbcTemplate ( dataSource ) ;
this . jdbcTemplate = new JdbcTemplate ( dataSource ) ;
}
}
@jakarta.annotation.PostConstruct
public void initTables ( ) {
try {
jdbcTemplate . execute ( "CREATE TABLE IF NOT EXISTS stock_register_details (" +
"id INT AUTO_INCREMENT PRIMARY KEY, " +
"company_name VARCHAR(30), " +
"pid VARCHAR(20), " +
"tid VARCHAR(30), " +
"qty_registered VARCHAR(30), " +
"dc_upload VARCHAR(250), " +
"cdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " +
"updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
"order_by VARCHAR(45), " +
"is_active TINYINT DEFAULT 1, " +
"is_delete TINYINT DEFAULT 0" +
")" ) ;
jdbcTemplate . execute ( "CREATE TABLE IF NOT EXISTS department_requested_details (" +
"id INT AUTO_INCREMENT PRIMARY KEY, " +
"req_no VARCHAR(70), " +
"company_name VARCHAR(30), " +
"itcell_ref_no VARCHAR(45), " +
"dept_id VARCHAR(30), " +
"pid VARCHAR(20), " +
"tid VARCHAR(30), " +
"qty_registered VARCHAR(30), " +
"qty_requested VARCHAR(30), " +
"qty_delivered VARCHAR(30), " +
"dc_upload VARCHAR(250), " +
"user_request_upload VARCHAR(250), " +
"final_delivered_upload VARCHAR(250), " +
"cdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " +
"updated_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
"updated_by VARCHAR(45), " +
"order_by VARCHAR(45), " +
"is_active TINYINT DEFAULT 1, " +
"is_delete TINYINT DEFAULT 0" +
")" ) ;
} catch ( Exception e ) {
System . err . println ( "Error initializing tables: " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
}
}
public List < Map < String , Object > > getActivePrinters ( ) {
public List < Map < String , Object > > getActivePrinters ( ) {
String sql = "SELECT id, printer_name FROM printer_model_list where is_active = 1 AND is_delete = 0 " ;
String sql = "SELECT id, printer_name FROM printer_model_list where is_active = 1 AND is_delete = 0 " ;
try {
try {
@ -51,47 +96,148 @@ public class TonerService {
}
}
}
}
public int getMaxInventoryId ( ) {
String sql = "SELECT COALESCE(MAX(id), 0) FROM inventory_registered_details" ;
public boolean saveInwardRegister ( String companyName , int pid , int tid , String qty , String dcUpload , String username ) {
String sql = "INSERT INTO stock_register_details " +
"(company_name, pid, tid, qty_registered, dc_upload, cdate, updated_date, order_by, is_active, is_delete) " +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 0)" ;
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
try {
int rows = jdbcTemplate . update ( sql , companyName , String . valueOf ( pid ) , String . valueOf ( tid ) , qty , dcUpload , now , now , username ) ;
return rows > 0 ;
} catch ( Exception e ) {
System . err . println ( "Error saving inward register: " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
return false ;
}
}
public int getMaxRequestId ( ) {
String sql = "SELECT COALESCE(MAX(id), 0) FROM department_requested_details" ;
try {
try {
return jdbcTemplate . queryForObject ( sql , Integer . class ) ;
return jdbcTemplate . queryForObject ( sql , Integer . class ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
System . err . println ( "Error fetching max id from inventory_registered_details: " + e . getMessage ( ) ) ;
System . err . println ( "Error fetching max id from department_request ed_details: " + e . getMessage ( ) ) ;
return 0 ;
return 0 ;
}
}
}
}
public boolean saveInventoryDetails ( String companyName , int pid , int tid , String qty , String dcUpload ,
String userRequestUpload , String finalDeliveredUpload , String username ) {
/ / 1 . Get toner model name
public String saveUserRequest ( String itCellRefNo , String deptId , int pid , int tid , String qtyRequested , String userRequestUpload , String username ) {
String tonerModel = getTonerModelName ( tid ) ;
String tonerModel = getTonerModelName ( tid ) ;
String cleanModel = tonerModel . trim ( ) . replaceAll ( "\\s+" , "-" ) . replaceAll ( "[^a-zA-Z0-9-]" , "" ) ;
String cleanModel = tonerModel . trim ( ) . replaceAll ( "\\s+" , "-" ) . replaceAll ( "[^a-zA-Z0-9-]" , "" ) ;
/ / 2 . Get next sequential number
int maxId = getMaxInventoryId ( ) ;
int maxId = getMaxRequestId ( ) ;
int seqNum = 1000 + maxId + 1 ;
int seqNum = 1000 + maxId + 1 ;
/ / 3 . Get current year
int year = java . util . Calendar . getInstance ( ) . get ( java . util . Calendar . YEAR ) ;
int year = java . util . Calendar . getInstance ( ) . get ( java . util . Calendar . YEAR ) ;
/ / 4 . Construct request number
String reqNo = String . format ( "%s-%d-%04d" , cleanModel , year , seqNum ) ;
String reqNo = String . format ( "%s-%d-%04d" , cleanModel , year , seqNum ) ;
/ / 5 . Insert row
String sql = "INSERT INTO department_requested_details " +
String sql = "INSERT INTO department_requested_details " +
"(req_no, company_name, pid, tid, qty_registered, dc_upload, user_request_upload, final_delivered_upload, cdate, updated_date, updated_by, is_active, is_delete) "
+
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, 0)" ;
"(req_no, itcell_ref_no, dept_id, pid, tid, qty_requested, qty_delivered, user_request_upload, cdate, updated_date, updated_by, is_active, is_delete) " +
"VALUES (?, ?, ?, ?, ?, ?, '0', ?, ?, ?, ?, 1, 0)" ;
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
try {
int rows = jdbcTemplate . update ( sql , reqNo , itCellRefNo , deptId , String . valueOf ( pid ) , String . valueOf ( tid ) , qtyRequested , userRequestUpload , now , now , username ) ;
return rows > 0 ? reqNo : null ;
} catch ( Exception e ) {
System . err . println ( "Error saving user request: " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
return null ;
}
}
public List < Map < String , Object > > getPendingRequests ( ) {
String sql = "SELECT r.id, r.req_no, r.dept_id, r.pid, r.tid, r.qty_requested, r.qty_delivered, " +
"p.printer_name, t.model_name " +
"FROM department_requested_details r " +
"LEFT JOIN printer_model_list p ON r.pid = p.id " +
"LEFT JOIN toner_model_list t ON r.tid = t.id " +
"WHERE r.is_active = 1 AND r.is_delete = 0 " +
"AND (r.qty_delivered IS NULL OR CAST(r.qty_delivered AS SIGNED) < CAST(r.qty_requested AS SIGNED)) " +
"ORDER BY r.id DESC" ;
try {
return jdbcTemplate . queryForList ( sql ) ;
} catch ( Exception e ) {
System . err . println ( "Error fetching pending requests: " + e . getMessage ( ) ) ;
return new ArrayList < > ( ) ;
}
}
public boolean saveOutwardRegister ( int id , String qtyIssued , String finalDeliveredUpload , String username ) {
String sql = "UPDATE department_requested_details " +
"SET qty_delivered = ?, final_delivered_upload = ?, updated_date = ?, updated_by = ? " +
"WHERE id = ?" ;
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
try {
try {
int rows = jdbcTemplate . update ( sql , reqNo , companyName , String . valueOf ( pid ) , String . valueOf ( tid ) , qty ,
dcUpload , userRequestUpload , finalDeliveredUpload , now , now , username ) ;
int rows = jdbcTemplate . update ( sql , qtyIssued , finalDeliveredUpload , now , username , id ) ;
return rows > 0 ;
return rows > 0 ;
} catch ( Exception e ) {
} catch ( Exception e ) {
System . err . println ( "Error saving inventory details: " + e . getMessage ( ) ) ;
System . err . println ( "Error updating outward register : " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
e . printStackTrace ( ) ;
return false ;
return false ;
}
}
}
}
public Map < String , Object > getDashboardMetrics ( ) {
Map < String , Object > metrics = new HashMap < > ( ) ;
String sqlRaised = "SELECT COALESCE(SUM(CAST(qty_requested AS SIGNED)), 0) FROM department_requested_details WHERE is_active = 1 AND is_delete = 0" ;
String sqlDistributed = "SELECT COALESCE(SUM(CAST(qty_delivered AS SIGNED)), 0) FROM department_requested_details WHERE is_active = 1 AND is_delete = 0" ;
String sqlInward = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM stock_register_details WHERE is_active = 1 AND 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 = inwardStock - totalDistributed ;
metrics . put ( "totalRaised" , totalRaised ) ;
metrics . put ( "totalDistributed" , totalDistributed ) ;
metrics . put ( "availableStock" , availableStock ) ;
} catch ( Exception e ) {
System . err . println ( "Error computing dashboard metrics: " + e . getMessage ( ) ) ;
metrics . put ( "totalRaised" , 0 ) ;
metrics . put ( "totalDistributed" , 0 ) ;
metrics . put ( "availableStock" , 0 ) ;
}
return metrics ;
}
public List < Map < String , Object > > getInventorySummary ( ) {
String safeSql = "SELECT p.printer_name, t.model_name, " +
"COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM stock_register_details sr WHERE CAST(sr.pid AS SIGNED) = t.pid AND CAST(sr.tid AS SIGNED) = t.id AND sr.is_active = 1 AND sr.is_delete = 0), 0) AS inward_qty, " +
"COALESCE((SELECT SUM(CAST(dr.qty_delivered AS SIGNED)) FROM department_requested_details dr WHERE CAST(dr.pid AS SIGNED) = t.pid AND CAST(dr.tid AS SIGNED) = t.id AND dr.is_active = 1 AND dr.is_delete = 0), 0) AS outward_qty " +
"FROM toner_model_list t " +
"JOIN printer_model_list p ON t.pid = p.id " +
"WHERE t.is_active = 1 AND t.is_delete = 0 " +
"ORDER BY p.printer_name, t.model_name" ;
try {
List < Map < String , Object > > list = jdbcTemplate . queryForList ( safeSql ) ;
for ( Map < String , Object > map : list ) {
Number inward = ( Number ) map . get ( "inward_qty" ) ;
Number outward = ( Number ) map . get ( "outward_qty" ) ;
long avail = ( inward ! = null ? inward . longValue ( ) : 0 ) - ( outward ! = null ? outward . longValue ( ) : 0 ) ;
map . put ( "available_qty" , avail ) ;
}
return list ;
} catch ( Exception e ) {
System . err . println ( "Error fetching inventory summary: " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
return new ArrayList < > ( ) ;
}
}
public List < Map < String , Object > > getOutwardHistory ( ) {
String sql = "SELECT r.id, r.req_no, r.itcell_ref_no, r.dept_id, r.qty_requested, r.qty_delivered, r.final_delivered_upload, r.updated_date, " +
"p.printer_name, t.model_name " +
"FROM department_requested_details r " +
"LEFT JOIN printer_model_list p ON r.pid = p.id " +
"LEFT JOIN toner_model_list t ON r.tid = t.id " +
"WHERE r.is_active = 1 AND r.is_delete = 0 " +
"AND r.qty_delivered IS NOT NULL AND CAST(r.qty_delivered AS SIGNED) > 0 " +
"ORDER BY r.updated_date DESC" ;
try {
return jdbcTemplate . queryForList ( sql ) ;
} catch ( Exception e ) {
System . err . println ( "Error fetching outward history: " + e . getMessage ( ) ) ;
return new ArrayList < > ( ) ;
}
}
}
}