@ -13,6 +13,10 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.jdbc.support.GeneratedKeyHolder ;
import org.springframework.jdbc.support.KeyHolder ;
import java.sql.PreparedStatement ;
import java.sql.Statement ;
@Service
public class TonerService {
@ -74,22 +78,40 @@ public class TonerService {
}
}
public boolean saveInwardRegister ( String refNo , String companyName , int pid , int tid , String qty , String dcUpload ,
String username , Integer requestId ) {
@Transactional
public boolean saveInwardRegister ( String refNo , String companyName , List < Map < String , Object > > items ,
String dcUpload , String username ) {
String sql = "INSERT INTO stock_register_details " +
"(ref_no, company_name, pid, tid, qty_registered, dc_upload, cdate, updated_date, updated_by, is_active, is_delete, request_id) "
+
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, 0, ?)" ;
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
try {
int rows = jdbcTemplate . update ( sql , refNo , companyName , String . valueOf ( pid ) , String . valueOf ( tid ) , qty ,
dcUpload ,
now , now , username , requestId ) ;
return rows > 0 ;
for ( Map < String , Object > item : items ) {
int pid = Integer . parseInt ( String . valueOf ( item . get ( "pid" ) ) ) ;
int tid = Integer . parseInt ( String . valueOf ( item . get ( "tid" ) ) ) ;
String qty = String . valueOf ( item . get ( "qty" ) ) ;
Integer requestId = item . get ( "requestId" ) ! = null
? Integer . parseInt ( String . valueOf ( item . get ( "requestId" ) ) )
: null ;
int qtyInt = 0 ;
try {
qtyInt = Integer . parseInt ( qty . trim ( ) ) ;
} catch ( Exception ignored ) {
}
if ( qtyInt < = 0 )
continue ;
jdbcTemplate . update ( sql , refNo , companyName , String . valueOf ( pid ) , String . valueOf ( tid ) ,
String . valueOf ( qtyInt ) ,
dcUpload , now , now , username , requestId ) ;
}
return true ;
} catch ( Exception e ) {
System . err . println ( "Error saving inward register: " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
return false ;
throw new RuntimeException ( "Rollback saveInwardRegister due to: " + e . getMessage ( ) ) ;
}
}
@ -103,8 +125,20 @@ public class TonerService {
}
}
public String saveUserRequest ( String itCellRefNo , String deptId , int pid , int tid , String qtyRequested ,
@Transactional
public boolean saveUserRequest ( String itCellRefNo , String deptId , List < Map < String , Object > > items ,
String userRequestUpload , String username ) {
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
String sql = "INSERT INTO department_requested_details " +
"(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)" ;
try {
for ( Map < String , Object > item : items ) {
int pid = Integer . parseInt ( String . valueOf ( item . get ( "pid" ) ) ) ;
int tid = Integer . parseInt ( String . valueOf ( item . get ( "tid" ) ) ) ;
String qtyRequested = String . valueOf ( item . get ( "qty" ) ) ;
String tonerModel = getTonerModelName ( tid ) ;
String cleanModel = tonerModel . trim ( ) . replaceAll ( "\\s+" , "-" ) . replaceAll ( "[^a-zA-Z0-9-]" , "" ) ;
int maxId = getMaxRequestId ( ) ;
@ -112,19 +146,14 @@ public class TonerService {
int year = java . util . Calendar . getInstance ( ) . get ( java . util . Calendar . YEAR ) ;
String reqNo = String . format ( "%s-%d-%04d" , cleanModel , year , seqNum ) ;
String sql = "INSERT INTO department_requested_details " +
"(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 ) ,
jdbcTemplate . update ( sql , reqNo , itCellRefNo , deptId , String . valueOf ( pid ) , String . valueOf ( tid ) ,
qtyRequested , userRequestUpload , now , now , username ) ;
return rows > 0 ? reqNo : null ;
}
return true ;
} catch ( Exception e ) {
System . err . println ( "Error saving user request: " + e . getMessage ( ) ) ;
System . err . println ( "Error saving user requests: " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
return null ;
throw new RuntimeException ( "Rollback saveUserRequest due to: " + e . getMessage ( ) ) ;
}
}
@ -241,7 +270,7 @@ public class TonerService {
+ "MAX(s.cdate) AS cdate, COALESCE(MAX(u.usr_name), MAX(s.updated_by)) AS order_by, "
+ "p.printer_name, t.model_name, "
+ "COALESCE((SELECT w.qty_registered FROM workorder_printermodel_qty w WHERE w.ref_no = s.ref_no AND w.pid = s.pid AND w.tid = s.tid AND w.is_active = 1 AND w.is_delete = 0 LIMIT 1), 0) AS qty_workorder_registered, "
+ "COALESCE((SELECT SUM(CAST(mr.qty_requested AS SIGNED)) FROM workorder_model_request_details mr WHERE m r.ref_no = s.ref_no AND mr.pid = s.pid AND mr.tid = s.tid AND mr.is_active = 1 AND mr.is_delete = 0), 0) AS qty_workorder_requested "
+ "COALESCE((SELECT SUM(CAST(mr.qty_registered AS SIGNED)) FROM workorder_model_multiple_request_qty mr INNER JOIN workorder_model_request_details r ON mr.ref_no = r.ref_no WHERE r.ref_no = s.ref_no AND mr.pid = s.pid AND mr.tid = s.tid AND mr.is_active = 1 AND mr.is_delete = 0 AND r.is_active = 1 AND r.is_delete = 0), 0) AS qty_workorder_requested "
+ "FROM stock_register_details s "
+ "LEFT JOIN printer_model_list p ON CAST(s.pid AS SIGNED) = p.id "
+ "LEFT JOIN toner_model_list t ON CAST(s.tid AS SIGNED) = t.id "
@ -343,31 +372,6 @@ public class TonerService {
}
}
@PostConstruct
public void initDatabase ( ) {
try {
jdbcTemplate . execute ( "ALTER TABLE stock_register_details ADD COLUMN request_id INT DEFAULT NULL" ) ;
} catch ( Exception e ) {
/ / Ignore
}
try {
jdbcTemplate . execute ( "ALTER TABLE workorder_register_details DROP COLUMN order_by" ) ;
} catch ( Exception e ) {
/ / Ignore
}
try {
jdbcTemplate
. execute ( "ALTER TABLE workorder_printermodel_qty ADD COLUMN updated_by VARCHAR(255) DEFAULT NULL" ) ;
} catch ( Exception e ) {
/ / Ignore
}
try {
jdbcTemplate . execute ( "ALTER TABLE workorder_printermodel_qty DROP COLUMN order_by" ) ;
} catch ( Exception e ) {
/ / Ignore
}
}
public List < String > getActiveWorkorderRefNos ( ) {
String sql = "SELECT ref_no FROM workorder_register_details WHERE is_active = 1 AND is_delete = 0 ORDER BY id DESC" ;
try {
@ -378,36 +382,88 @@ public class TonerService {
}
}
public boolean saveWorkorderModelRequest ( String refNo , String companyName , String pid , String tid ,
String qtyRequested , String emailCopyUpload , String username ) {
String sql = "INSERT INTO workorder_model_request_details " +
@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 ;
}
/ / Calculate sum of qty_requested
int totalQtyRequested = 0 ;
for ( Map < String , Object > item : items ) {
totalQtyRequested + = Integer . parseInt ( String . valueOf ( item . get ( "qty" ) ) ) ;
}
final int finalTotalQty = totalQtyRequested ;
/ / Use first item ' s pid and tid for the summary row to maintain compatibility
String firstPid = ( pid ! = null & & ! pid . trim ( ) . isEmpty ( ) ) ? pid : String . valueOf ( items . get ( 0 ) . get ( "pid" ) ) ;
String firstTid = String . valueOf ( items . get ( 0 ) . get ( "tid" ) ) ;
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
/ / Insert into workorder_model_request_details using KeyHolder to get the
/ / generated id
String sqlMain = "INSERT INTO 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)" ;
java . sql . Timestamp now = new java . sql . Timestamp ( System . currentTimeMillis ( ) ) ;
try {
int rows = jdbcTemplate . update ( sql , refNo , companyName , pid , tid , qtyRequested , emailCopyUpload , now , now ,
username ) ;
return rows > 0 ;
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 ;
}
Number key = keyHolder . getKey ( ) ;
int requestId = key ! = null ? key . intValue ( ) : 0 ;
/ / Insert into workorder_model_multiple_request_qty in loop
String sqlSub = "INSERT INTO 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 ) {
System . err . println ( "Error saving workorder model request: " + e . getMessage ( ) ) ;
System . err . println ( "Error saving workorder model multiple request: " + e . getMessage ( ) ) ;
e . printStackTrace ( ) ;
return false ;
throw new RuntimeException ( "Rollback saveWorkorderModelRequest due to: " + e . getMessage ( ) ) ;
}
}
public List < Map < String , Object > > getWorkorderRegisteredItems ( String refNo ) {
String sql = "SELECT w.pid, w.tid, w.qty_registered, p.printer_name, t.model_name, t.part_code, COALESCE(vl.vendor_name, r.vendor_name) AS vendor_name, "
+
"COALESCE((SELECT SUM(CAST(mr.qty_requested AS SIGNED)) FROM workorder_model_request_details mr " +
"WHERE mr.ref_no = w.ref_no AND mr.pid = w.pid AND mr.tid = w.tid AND mr.is_active = 1 AND mr.is_delete = 0), 0) AS qty_already_requested "
+
"FROM workorder_printermodel_qty w " +
"LEFT JOIN workorder_register_details r ON w.ref_no = r.ref_no " +
"LEFT JOIN gccpayment_processing_tracker.vendors_list vl ON CAST(r.vendor_name AS SIGNED) = vl.id " +
"LEFT JOIN printer_model_list p ON CAST(w.pid AS SIGNED) = p.id " +
"LEFT JOIN toner_model_list t ON CAST(w.tid AS SIGNED) = t.id " +
"WHERE w.ref_no = ? AND w.is_active = 1 AND w.is_delete = 0" ;
+ "COALESCE((SELECT SUM(CAST(mr.qty_registered AS SIGNED)) FROM workorder_model_multiple_request_qty mr "
+ "WHERE mr.ref_no = w.ref_no AND mr.pid = w.pid AND mr.tid = w.tid AND mr.is_active = 1 AND mr.is_delete = 0), 0) AS qty_already_requested "
+ "FROM workorder_printermodel_qty w "
+ "LEFT JOIN workorder_register_details r ON w.ref_no = r.ref_no "
+ "LEFT JOIN gccpayment_processing_tracker.vendors_list vl ON CAST(r.vendor_name AS SIGNED) = vl.id "
+ "LEFT JOIN printer_model_list p ON CAST(w.pid AS SIGNED) = p.id "
+ "LEFT JOIN toner_model_list t ON CAST(w.tid AS SIGNED) = t.id "
+ "WHERE w.ref_no = ? AND w.is_active = 1 AND w.is_delete = 0" ;
try {
return jdbcTemplate . queryForList ( sql , refNo ) ;
} catch ( Exception e ) {
@ -427,16 +483,16 @@ public class TonerService {
}
public List < Map < String , Object > > getWorkorderRequests ( String refNo ) {
String sql = "SELECT r.id, r.pid, r.tid, r.qty_requested, r.company_name AS vendor_id, r.cdate, "
String sql = "SELECT m r.id, m r.pid, m r.tid, m r.qty_registered AS qty_requested, r.company_name AS vendor_id, r.cdate, "
+ "COALESCE(u.usr_name, r.updated_by) AS updated_by, r.email_copy_upload, p.printer_name, t.model_name, t.part_code, "
+ "COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM stock_register_details sr " +
"WHERE ((sr.request_id = r.id) OR (sr.request_id IS NULL AND sr.ref_no = r.ref_no AND sr.pid = r.pid AND sr.tid = r.tid)) "
+ "AND sr.is_active = 1 AND sr.is_delete = 0), 0) AS qty_inward_received "
+ "FROM workorder_model_request_details r "
+ "LEFT JOIN printer_model_list p ON CAST(r.pid AS SIGNED) = p.id "
+ "LEFT JOIN toner_model_list t ON CAST(r.tid AS SIGNED) = t.id "
+ "COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM stock_register_details sr "
+ "WHERE sr.ref_no = r.ref_no AND sr.pid = mr.pid AND sr.tid = mr.tid AND sr.is_active = 1 AND sr.is_delete = 0), 0) AS qty_inward_received "
+ "FROM workorder_model_multiple_request_qty mr "
+ "LEFT JOIN workorder_model_request_details r ON mr.ref_no = r.ref_no "
+ "LEFT JOIN printer_model_list p ON CAST(m r.pid AS SIGNED) = p.id "
+ "LEFT JOIN toner_model_list t ON CAST(m r.tid AS SIGNED) = t.id "
+ "LEFT JOIN gcc_manpower.app_user u ON CAST(r.updated_by AS SIGNED) = u.usr_id "
+ "WHERE r.ref_no = ? AND r.is_active = 1 AND r.is_delete = 0" ;
+ "WHERE r.ref_no = ? AND mr.is_active = 1 AND mr.is_delete = 0 AND r.is_active = 1 AND r.is_delete = 0" ;
try {
return jdbcTemplate . queryForList ( sql , refNo ) ;
} catch ( Exception e ) {
@ -468,17 +524,17 @@ public class TonerService {
}
public List < Map < String , Object > > getWorkorderModelRequestHistory ( ) {
String sql = "SELECT MAX(mr.id) AS id, mr.ref_no, mr.pid, mr.tid, mr.company_name AS vendor_id, "
+ "SUM(CAST(mr.qty_requested AS SIGNED)) AS qty_requested, MAX(mr.email_copy_upload) AS email_copy_upload, "
+ "MAX(mr.cdate) AS cdate, COALESCE(MAX(u.usr_name), MAX(mr.updated_by)) AS order_by, p.printer_name, t.model_name, "
+ "COALESCE((SELECT w.qty_registered FROM workorder_printermodel_qty w WHERE w.ref_no = mr.ref_no AND w.pid = mr.pid AND w.tid = mr.tid AND w.is_active = 1 AND w.is_delete = 0 LIMIT 1), 0) AS qty_registered "
+ "FROM workorder_model_request_details mr "
String sql = "SELECT mr.id, r.ref_no, mr.pid, mr.tid, r.company_name AS vendor_id, "
+ "CAST(mr.qty_registered AS SIGNED) AS qty_requested, r.email_copy_upload, "
+ "r.cdate, COALESCE(u.usr_name, r.updated_by) AS order_by, p.printer_name, t.model_name, "
+ "COALESCE((SELECT w.qty_registered FROM workorder_printermodel_qty w WHERE w.ref_no = r.ref_no AND w.pid = mr.pid AND w.tid = mr.tid AND w.is_active = 1 AND w.is_delete = 0 LIMIT 1), 0) AS qty_registered "
+ "FROM workorder_model_multiple_request_qty mr "
+ "LEFT JOIN workorder_model_request_details r ON mr.ref_no = r.ref_no "
+ "LEFT JOIN printer_model_list p ON CAST(mr.pid AS SIGNED) = p.id "
+ "LEFT JOIN toner_model_list t ON CAST(mr.tid AS SIGNED) = t.id "
+ "LEFT JOIN gcc_manpower.app_user u ON CAST(mr.updated_by AS SIGNED) = u.usr_id "
+ "WHERE mr.is_active = 1 AND mr.is_delete = 0 "
+ "GROUP BY mr.ref_no, mr.pid, mr.tid, mr.company_name, p.printer_name, t.model_name "
+ "ORDER BY MAX(mr.id) DESC" ;
+ "LEFT JOIN gcc_manpower.app_user u ON CAST(r.updated_by AS SIGNED) = u.usr_id "
+ "WHERE mr.is_active = 1 AND mr.is_delete = 0 AND r.is_active = 1 AND r.is_delete = 0 "
+ "ORDER BY mr.id DESC" ;
try {
return jdbcTemplate . queryForList ( sql ) ;
} catch ( Exception e ) {