Browse Source

new schema added and table name changes for every services to added in new schema and all serivces and some pages changes

master
yoganandhank 2 months ago
parent
commit
a9e5b3bb29
  1. 2
      src/main/java/com/gcc_manpower/config/AppUserDetailsService.java
  2. 117
      src/main/java/com/gcc_manpower/config/DataSourceConfig.java
  3. 14
      src/main/java/com/gcc_manpower/config/SecurityConfig.java
  4. 48
      src/main/java/com/gcc_manpower/gccadjustmentmanagement/service/AdjustmentService.java
  5. 47
      src/main/java/com/gcc_manpower/gccservicedocuments/service/GccServiceDocumentsService.java
  6. 68
      src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java
  7. 106
      src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/controller/TapalController.java
  8. 34
      src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/service/TapalService.java
  9. 124
      src/main/java/com/gcc_manpower/gcctonermanagement/service/TonerService.java
  10. 141
      src/main/java/com/gcc_manpower/service/AppUserService.java
  11. 3
      src/main/resources/application-local.properties
  12. 3
      src/main/resources/application-prod.properties
  13. 22
      src/main/resources/templates/fragments/tapalheader.html
  14. 114
      src/main/resources/templates/gccadjustmentmanagement/dashboard.html
  15. 79
      src/main/resources/templates/gccadjustmentmanagement/details.html
  16. 5022
      src/main/resources/templates/gcctapaldetailsmanagement/dashboard.html
  17. 117
      src/main/resources/templates/gcctapaldetailsmanagement/login.html
  18. 25
      src/main/resources/templates/home/home.html

2
src/main/java/com/gcc_manpower/config/AppUserDetailsService.java

@ -19,7 +19,7 @@ public class AppUserDetailsService implements UserDetailsService {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(@Qualifier("mysqlManpowerDataSource") DataSource dataSource) {
public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}

117
src/main/java/com/gcc_manpower/config/DataSourceConfig.java

@ -13,67 +13,86 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@EnableTransactionManagement
public class DataSourceConfig {
private static String host = "localhost:3306";
private static String dbpassword = "root";
// private static String host = "localhost:3306";
// private static String dbpassword = "root";
// AWS
// private static String host =
// "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306";
// private static String dbpassword = "gcc-facial-password";
private static String host = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306";
private static String dbpassword = "gcc-facial-password";
@Bean(name = "mysqlManpowerDataSource")
public DataSource mysqlManpowerDataSource() {
@Bean(name = "mysqlItcellManagementDataSource")
public DataSource mysqlItcellManagementDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://" + host + "/gcc_manpower");
dataSource.setUrl("jdbc:mysql://" + host + "/gcc_itcell_management_services");
dataSource.setUsername("root");
dataSource.setPassword(dbpassword);
return dataSource;
}
@Bean(name = "mysqlServiceDocumentsDataSource")
public DataSource mysqlServiceDocumentsDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://" + host + "/gccservices_documents");
dataSource.setUsername("root");
dataSource.setPassword(dbpassword);
return dataSource;
}
// @Bean(name = "mysqlManpowerDataSource")
// public DataSource mysqlManpowerDataSource() {
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://" + host + "/gcc_manpower");
// dataSource.setUsername("root");
// dataSource.setPassword(dbpassword);
// return dataSource;
// }
@Bean(name = "mysqlPaymentTrackingServiceDataSource")
public DataSource mysqlPaymentTrackingServiceDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://" + host + "/gccpayment_processing_tracker");
dataSource.setUsername("root");
dataSource.setPassword(dbpassword);
return dataSource;
}
// @Bean(name = "mysqlServiceDocumentsDataSource")
// public DataSource mysqlServiceDocumentsDataSource() {
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://" + host + "/gccservices_documents");
// dataSource.setUsername("root");
// dataSource.setPassword(dbpassword);
// return dataSource;
// }
@Bean(name = "mysqlTonerManagementDataSource")
public DataSource mysqlTonerManagementDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://" + host + "/gcc_toner_management");
dataSource.setUsername("root");
dataSource.setPassword(dbpassword);
return dataSource;
}
// @Bean(name = "mysqlPaymentTrackingServiceDataSource")
// public DataSource mysqlPaymentTrackingServiceDataSource() {
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://" + host + "/gccpayment_processing_tracker");
// dataSource.setUsername("root");
// dataSource.setPassword(dbpassword);
// return dataSource;
// }
@Bean(name = "mysqladjustmentDataSource")
public DataSource mysqladjustmentDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://" + host + "/gcc_adjustment_management");
dataSource.setUsername("root");
dataSource.setPassword(dbpassword);
return dataSource;
}
// @Bean(name = "mysqlTonerManagementDataSource")
// public DataSource mysqlTonerManagementDataSource() {
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://" + host + "/gcc_toner_management");
// dataSource.setUsername("root");
// dataSource.setPassword(dbpassword);
// return dataSource;
// }
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("mysqlTonerManagementDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// @Bean(name = "mysqladjustmentDataSource")
// public DataSource mysqladjustmentDataSource() {
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://" + host + "/gcc_adjustment_management");
// dataSource.setUsername("root");
// dataSource.setPassword(dbpassword);
// return dataSource;
// }
// @Bean(name = "mysqlTapalManagementDataSource")
// public DataSource mysqlTapalManagementDataSource() {
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://" + host + "/gcc_tapal_management");
// dataSource.setUsername("root");
// dataSource.setPassword(dbpassword);
// return dataSource;
// }
// @Bean(name = "transactionManager")
// public PlatformTransactionManager transactionManager(
// @Qualifier("mysqlTonerManagementDataSource") DataSource dataSource) {
// return new DataSourceTransactionManager(dataSource);
// }
}

14
src/main/java/com/gcc_manpower/config/SecurityConfig.java

@ -70,7 +70,9 @@ public class SecurityConfig {
"/gccservicedocuments/login",
"/gccservicedocuments/api/login",
"/gccadjustmentmanagement/login",
"/gccadjustmentmanagement/api/login")
"/gccadjustmentmanagement/api/login",
"/gcctapaldetailsmanagement/login",
"/gcctapaldetailsmanagement/api/login")
.permitAll()
// Allow logout endpoints
.requestMatchers(
@ -78,7 +80,8 @@ public class SecurityConfig {
"/gcctonermanagement/logout",
"/gccservicepaymenttracker/logout",
"/gccservicedocuments/logout",
"/gccadjustmentmanagement/logout")
"/gccadjustmentmanagement/logout",
"/gcctapaldetailsmanagement/logout")
.permitAll()
// Require authentication for all other requests
.anyRequest().authenticated())
@ -89,7 +92,8 @@ public class SecurityConfig {
"/gcctonermanagement/api/login",
"/gccservicepaymenttracker/api/login",
"/gccservicedocuments/api/login",
"/gccadjustmentmanagement/api/login"))
"/gccadjustmentmanagement/api/login",
"/gcctapaldetailsmanagement/api/login"))
// Session management configuration with module-aware invalid session
// redirection
.sessionManagement(session -> session
@ -105,6 +109,8 @@ public class SecurityConfig {
response.sendRedirect(request.getContextPath() + "/gccservicedocuments/login");
} else if (requestURI.contains("/gccadjustmentmanagement")) {
response.sendRedirect(request.getContextPath() + "/gccadjustmentmanagement/login");
} else if (requestURI.contains("/gcctapaldetailsmanagement")) {
response.sendRedirect(request.getContextPath() + "/gcctapaldetailsmanagement/login");
} else {
response.sendRedirect(request.getContextPath() + "/login");
}
@ -121,6 +127,8 @@ public class SecurityConfig {
response.sendRedirect(request.getContextPath() + "/gccservicedocuments/login");
} else if (requestURI.contains("/gccadjustmentmanagement")) {
response.sendRedirect(request.getContextPath() + "/gccadjustmentmanagement/login");
} else if (requestURI.contains("/gcctapaldetailsmanagement")) {
response.sendRedirect(request.getContextPath() + "/gcctapaldetailsmanagement/login");
} else {
response.sendRedirect(request.getContextPath() + "/login");
}

48
src/main/java/com/gcc_manpower/gccadjustmentmanagement/service/AdjustmentService.java

@ -18,12 +18,12 @@ public class AdjustmentService {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(@Qualifier("mysqladjustmentDataSource") DataSource dataSource) {
public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<Map<String, Object>> getAdvanceTypes() {
String sql = "SELECT id, adv_type FROM advance_type_list WHERE is_active = 1 AND is_delete = 0 ORDER BY CAST(order_by AS UNSIGNED) ASC, id ASC";
String sql = "SELECT id, adv_type FROM adjustment_advance_type_list WHERE is_active = 1 AND is_delete = 0 ORDER BY CAST(order_by AS UNSIGNED) ASC, id ASC";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
@ -33,7 +33,7 @@ public class AdjustmentService {
}
public List<Map<String, Object>> getFundTypes() {
String sql = "SELECT id, fund_type FROM fund_type_list WHERE is_active = 1 AND is_delete = 0 ORDER BY CAST(order_by AS UNSIGNED) ASC, id ASC";
String sql = "SELECT id, fund_type FROM adjustment_fund_type_list WHERE is_active = 1 AND is_delete = 0 ORDER BY CAST(order_by AS UNSIGNED) ASC, id ASC";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
@ -43,7 +43,7 @@ public class AdjustmentService {
}
public List<Map<String, Object>> getFileStatusList() {
String sql = "SELECT id, status_name FROM file_status_list WHERE is_active = 1 AND is_delete = 0 ORDER BY CAST(order_by AS UNSIGNED) ASC, id ASC";
String sql = "SELECT id, status_name FROM adjustment_file_status_list WHERE is_active = 1 AND is_delete = 0 ORDER BY CAST(order_by AS UNSIGNED) ASC, id ASC";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
@ -59,13 +59,13 @@ public class AdjustmentService {
"u.usr_name AS updated_by_name, " +
"fs.status_name AS resolved_file_status " +
"FROM adjustment_file_details a " +
"LEFT JOIN advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
+
"LEFT JOIN fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
+
"LEFT JOIN file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
"LEFT JOIN adjustment_file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
+
"LEFT JOIN gcc_manpower.app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
"LEFT JOIN app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
+
"WHERE a.is_active = 1 AND a.is_delete = 0 " +
"ORDER BY a.updated_date DESC, a.id DESC";
@ -84,13 +84,13 @@ public class AdjustmentService {
"u.usr_name AS updated_by_name, " +
"fs.status_name AS resolved_file_status " +
"FROM adjustment_file_details a " +
"LEFT JOIN advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
+
"LEFT JOIN fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
+
"LEFT JOIN file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
"LEFT JOIN adjustment_file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
+
"LEFT JOIN gcc_manpower.app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
"LEFT JOIN app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
+
"ORDER BY a.updated_date DESC, a.id DESC";
try {
@ -108,13 +108,13 @@ public class AdjustmentService {
"u.usr_name AS updated_by_name, " +
"fs.status_name AS resolved_file_status " +
"FROM adjustment_file_details a " +
"LEFT JOIN advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
+
"LEFT JOIN fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
+
"LEFT JOIN file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
"LEFT JOIN adjustment_file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
+
"LEFT JOIN gcc_manpower.app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
"LEFT JOIN app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
+
"WHERE a.is_active = 1 AND a.is_delete = 0 " +
"AND NOT ((a.ejv_num IS NOT NULL AND TRIM(a.ejv_num) != '' AND TRIM(a.ejv_num) != '-') " +
@ -139,13 +139,13 @@ public class AdjustmentService {
"u.usr_name AS updated_by_name, " +
"fs.status_name AS resolved_file_status " +
"FROM adjustment_file_details a " +
"LEFT JOIN advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
+
"LEFT JOIN fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
+
"LEFT JOIN file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
"LEFT JOIN adjustment_file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
+
"LEFT JOIN gcc_manpower.app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
"LEFT JOIN app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
+
"WHERE a.is_active = 1 AND a.is_delete = 0 " +
"AND NOT ((a.ejv_num IS NOT NULL AND TRIM(a.ejv_num) != '' AND TRIM(a.ejv_num) != '-') " +
@ -172,13 +172,13 @@ public class AdjustmentService {
"u.usr_name AS updated_by_name, " +
"fs.status_name AS resolved_file_status " +
"FROM adjustment_file_details a " +
"LEFT JOIN advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_advance_type_list adv ON TRIM(a.adv_type_id) REGEXP '^[0-9]+$' AND adv.id = CAST(TRIM(a.adv_type_id) AS UNSIGNED) "
+
"LEFT JOIN fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
"LEFT JOIN adjustment_fund_type_list f ON TRIM(a.fund_type_id) REGEXP '^[0-9]+$' AND f.id = CAST(TRIM(a.fund_type_id) AS UNSIGNED) "
+
"LEFT JOIN file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
"LEFT JOIN adjustment_file_status_list fs ON TRIM(a.file_status_id) REGEXP '^[0-9]+$' AND fs.id = CAST(TRIM(a.file_status_id) AS UNSIGNED) "
+
"LEFT JOIN gcc_manpower.app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
"LEFT JOIN app_user u ON (a.updated_by = CAST(u.usr_id AS CHAR) OR a.updated_by = u.usr_name) "
+
"WHERE a.is_active = 1 AND a.is_delete = 0 " +
"AND NOT ((a.ejv_num IS NOT NULL AND TRIM(a.ejv_num) != '' AND TRIM(a.ejv_num) != '-') " +

47
src/main/java/com/gcc_manpower/gccservicedocuments/service/GccServiceDocumentsService.java

@ -16,7 +16,7 @@ public class GccServiceDocumentsService {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(@Qualifier("mysqlServiceDocumentsDataSource") DataSource dataSource) {
public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@ -24,7 +24,7 @@ public class GccServiceDocumentsService {
// Try parsing as ID first
try {
int id = Integer.parseInt(mainCategoryName.trim());
String checkIdSql = "SELECT id FROM main_category_list WHERE id = ? AND is_delete = 0";
String checkIdSql = "SELECT id FROM services_main_category_list WHERE id = ? AND is_delete = 0";
List<Integer> ids = jdbcTemplate.queryForList(checkIdSql, Integer.class, id);
if (!ids.isEmpty()) {
return ids.get(0);
@ -33,7 +33,7 @@ public class GccServiceDocumentsService {
// Not a number, fallback to name matching
}
String selectSql = "SELECT id FROM main_category_list WHERE main_category_name = ? AND is_delete = 0";
String selectSql = "SELECT id FROM services_main_category_list WHERE main_category_name = ? AND is_delete = 0";
try {
List<Integer> ids = jdbcTemplate.queryForList(selectSql, Integer.class, mainCategoryName.trim());
if (!ids.isEmpty()) {
@ -44,7 +44,7 @@ public class GccServiceDocumentsService {
}
// Insert new main category
String insertSql = "INSERT INTO main_category_list (main_category_name, is_active, is_delete) VALUES (?, 1, 0)";
String insertSql = "INSERT INTO services_main_category_list (main_category_name, is_active, is_delete) VALUES (?, 1, 0)";
try {
jdbcTemplate.update(insertSql, mainCategoryName.trim());
// Fetch the generated ID
@ -62,7 +62,7 @@ public class GccServiceDocumentsService {
// Try parsing as ID first
try {
int id = Integer.parseInt(subCategoryName.trim());
String checkIdSql = "SELECT id FROM sub_category_list WHERE id = ? AND mid = ? AND is_delete = 0";
String checkIdSql = "SELECT id FROM services_sub_category_list WHERE id = ? AND mid = ? AND is_delete = 0";
List<Integer> ids = jdbcTemplate.queryForList(checkIdSql, Integer.class, id,
String.valueOf(mainCategoryId));
if (!ids.isEmpty()) {
@ -72,7 +72,7 @@ public class GccServiceDocumentsService {
// Not a number, fallback to name matching
}
String selectSql = "SELECT id FROM sub_category_list WHERE category_name = ? AND mid = ? AND is_delete = 0";
String selectSql = "SELECT id FROM services_sub_category_list WHERE category_name = ? AND mid = ? AND is_delete = 0";
try {
List<Integer> ids = jdbcTemplate.queryForList(selectSql, Integer.class, subCategoryName.trim(),
String.valueOf(mainCategoryId));
@ -84,7 +84,7 @@ public class GccServiceDocumentsService {
}
// Insert new sub category
String insertSql = "INSERT INTO sub_category_list (category_name, mid, is_active, is_delete) VALUES (?, ?, 1, 0)";
String insertSql = "INSERT INTO services_sub_category_list (category_name, mid, is_active, is_delete) VALUES (?, ?, 1, 0)";
try {
jdbcTemplate.update(insertSql, subCategoryName.trim(), String.valueOf(mainCategoryId));
// Fetch the generated ID
@ -103,7 +103,7 @@ public class GccServiceDocumentsService {
// Try parsing as ID first
try {
int id = Integer.parseInt(fileTypeName.trim());
String checkIdSql = "SELECT id FROM upload_file_types WHERE id = ? AND is_delete = 0";
String checkIdSql = "SELECT id FROM services_upload_file_types WHERE id = ? AND is_delete = 0";
List<Integer> ids = jdbcTemplate.queryForList(checkIdSql, Integer.class, id);
if (!ids.isEmpty()) {
return ids.get(0);
@ -112,7 +112,7 @@ public class GccServiceDocumentsService {
// Not a number, fallback to name matching
}
String selectSql = "SELECT id FROM upload_file_types WHERE file_type_name = ? AND is_delete = 0";
String selectSql = "SELECT id FROM services_upload_file_types WHERE file_type_name = ? AND is_delete = 0";
try {
List<Integer> ids = jdbcTemplate.queryForList(selectSql, Integer.class, fileTypeName.trim());
if (!ids.isEmpty()) {
@ -123,7 +123,7 @@ public class GccServiceDocumentsService {
}
// Insert new file type
String insertSql = "INSERT INTO upload_file_types (file_type_name, is_active, is_delete) VALUES (?, 1, 0)";
String insertSql = "INSERT INTO services_upload_file_types (file_type_name, is_active, is_delete) VALUES (?, 1, 0)";
try {
jdbcTemplate.update(insertSql, fileTypeName.trim());
// Fetch the generated ID
@ -149,7 +149,7 @@ public class GccServiceDocumentsService {
}
int fileTypeId = getOrCreateFileType(fileType);
String sql = "INSERT INTO documents_uploads (title, category, file_type, file_path, original_filename, is_active, is_delete) "
String sql = "INSERT INTO services_documents_uploads (title, category, file_type, file_path, original_filename, is_active, is_delete) "
+
"VALUES (?, ?, ?, ?, ?, 1, 0)";
try {
@ -168,10 +168,10 @@ public class GccServiceDocumentsService {
StringBuilder sql = new StringBuilder(
"SELECT d.id, d.title, s.category_name AS category, m.main_category_name AS main_category, f.file_type_name AS file_type, d.file_path, d.original_filename, d.upload_date "
+
"FROM documents_uploads d " +
"LEFT JOIN sub_category_list s ON d.category = s.id " +
"LEFT JOIN main_category_list m ON s.mid = m.id " +
"LEFT JOIN upload_file_types f ON d.file_type = f.id " +
"FROM services_documents_uploads d " +
"LEFT JOIN services_sub_category_list s ON d.category = s.id " +
"LEFT JOIN services_main_category_list m ON s.mid = m.id " +
"LEFT JOIN services_upload_file_types f ON d.file_type = f.id " +
"WHERE d.is_active = 1 AND d.is_delete = 0");
List<Object> params = new ArrayList<>();
@ -203,7 +203,7 @@ public class GccServiceDocumentsService {
}
public boolean deleteDocument(Long id) {
String sql = "UPDATE documents_uploads SET is_active = 0, is_delete = 1 WHERE id = ?";
String sql = "UPDATE services_documents_uploads SET is_active = 0, is_delete = 1 WHERE id = ?";
try {
int rows = jdbcTemplate.update(sql, id);
return rows > 0;
@ -214,7 +214,7 @@ public class GccServiceDocumentsService {
}
public Map<String, Object> getDocumentById(Long id) {
String sql = "SELECT * FROM documents_uploads WHERE id = ?";
String sql = "SELECT * FROM services_documents_uploads WHERE id = ?";
try {
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, id);
if (!list.isEmpty()) {
@ -233,7 +233,7 @@ public class GccServiceDocumentsService {
try {
Map<String, Object> old = getDocumentById(id);
if (old != null) {
String insertHistorySql = "INSERT INTO documents_upload_history ("
String insertHistorySql = "INSERT INTO services_documents_upload_history ("
+ "document_id, title, category, file_type, file_path, original_filename, upload_date, is_active, is_delete"
+ ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
jdbcTemplate.update(insertHistorySql,
@ -265,7 +265,8 @@ public class GccServiceDocumentsService {
int fileTypeId = getOrCreateFileType(fileType);
// Build the update query
StringBuilder sql = new StringBuilder("UPDATE documents_uploads SET title = ?, category = ?, file_type = ?");
StringBuilder sql = new StringBuilder(
"UPDATE services_documents_uploads SET title = ?, category = ?, file_type = ?");
List<Object> params = new ArrayList<>();
params.add(title.trim());
params.add(String.valueOf(subCategoryId));
@ -290,7 +291,7 @@ public class GccServiceDocumentsService {
}
public List<String> getAllCategories() {
String sql = "SELECT category_name FROM sub_category_list WHERE is_active = 1 AND is_delete = 0 ORDER BY category_name";
String sql = "SELECT category_name FROM services_sub_category_list WHERE is_active = 1 AND is_delete = 0 ORDER BY category_name";
try {
return jdbcTemplate.queryForList(sql, String.class);
} catch (Exception e) {
@ -300,7 +301,7 @@ public class GccServiceDocumentsService {
}
public List<Map<String, Object>> getAllMainCategories() {
String sql = "SELECT id, main_category_name FROM main_category_list WHERE is_active = 1 AND is_delete = 0 ORDER BY main_category_name";
String sql = "SELECT id, main_category_name FROM services_main_category_list WHERE is_active = 1 AND is_delete = 0 ORDER BY main_category_name";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
@ -310,7 +311,7 @@ public class GccServiceDocumentsService {
}
public List<Map<String, Object>> getAllSubCategories() {
String sql = "SELECT id, category_name, mid FROM sub_category_list WHERE is_active = 1 AND is_delete = 0 ORDER BY category_name";
String sql = "SELECT id, category_name, mid FROM services_sub_category_list WHERE is_active = 1 AND is_delete = 0 ORDER BY category_name";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
@ -320,7 +321,7 @@ public class GccServiceDocumentsService {
}
public List<Map<String, Object>> getAllFileTypes() {
String sql = "SELECT id, file_type_name FROM upload_file_types WHERE is_active = 1 AND is_delete = 0 ORDER BY file_type_name";
String sql = "SELECT id, file_type_name FROM services_upload_file_types WHERE is_active = 1 AND is_delete = 0 ORDER BY file_type_name";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {

68
src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java

@ -21,7 +21,7 @@ public class GccServicePaymentTrackerService {
private AppUserService appUserService;
@Autowired
public void setDataSource(@Qualifier("mysqlPaymentTrackingServiceDataSource") DataSource dataSource) {
public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@ -41,7 +41,7 @@ public class GccServicePaymentTrackerService {
+ "CASE WHEN p.type REGEXP '^[0-9]+$' THEN t.type_name ELSE p.type END as type_resolved, "
+ "COUNT(*) as cnt "
+ "FROM payment_tracking_details p "
+ "LEFT JOIN type_list t ON p.type REGEXP '^[0-9]+$' AND t.id = p.type "
+ "LEFT JOIN payment_type_list t ON p.type REGEXP '^[0-9]+$' AND t.id = p.type "
+ "WHERE p.is_active = 1 AND p.is_delete = 0 "
+ "GROUP BY type_resolved";
@ -97,10 +97,10 @@ public class GccServicePaymentTrackerService {
+ "s.status_name as resolved_status, "
+ "u.usr_name as updated_by_name "
+ "FROM payment_tracking_details p "
+ "LEFT JOIN type_list t ON TRIM(p.type) REGEXP '^[0-9]+$' AND t.id = CAST(TRIM(p.type) AS UNSIGNED) "
+ "LEFT JOIN vendors_list v ON TRIM(p.vendor_name) REGEXP '^[0-9]+$' AND v.id = CAST(TRIM(p.vendor_name) AS UNSIGNED) "
+ "LEFT JOIN status_list s ON TRIM(p.status) REGEXP '^[0-9]+$' AND s.id = CAST(TRIM(p.status) AS UNSIGNED) "
+ "LEFT JOIN gcc_manpower.app_user u ON (p.updated_by = CAST(u.usr_id AS CHAR) OR p.updated_by = u.usr_name) "
+ "LEFT JOIN payment_type_list t ON TRIM(p.type) REGEXP '^[0-9]+$' AND t.id = CAST(TRIM(p.type) AS UNSIGNED) "
+ "LEFT JOIN payment_vendors_list v ON TRIM(p.vendor_name) REGEXP '^[0-9]+$' AND v.id = CAST(TRIM(p.vendor_name) AS UNSIGNED) "
+ "LEFT JOIN payment_status_list s ON TRIM(p.status) REGEXP '^[0-9]+$' AND s.id = CAST(TRIM(p.status) AS UNSIGNED) "
+ "LEFT JOIN app_user u ON (p.updated_by = CAST(u.usr_id AS CHAR) OR p.updated_by = u.usr_name) "
+ "WHERE p.is_active = 1 AND p.is_delete = 0");
List<Object> params = new ArrayList<>();
@ -151,7 +151,7 @@ public class GccServicePaymentTrackerService {
if (status != null && !status.trim().isEmpty()) {
if (status.trim().matches("^[0-9]+$")) {
sql.append(
" AND (p.status = ? OR (NOT p.status REGEXP '^[0-9]+$' AND p.status = (SELECT status_name FROM status_list WHERE id = ? LIMIT 1)))");
" AND (p.status = ? OR (NOT p.status REGEXP '^[0-9]+$' AND p.status = (SELECT status_name FROM payment_status_list WHERE id = ? LIMIT 1)))");
params.add(status.trim());
params.add(status.trim());
} else {
@ -195,7 +195,7 @@ public class GccServicePaymentTrackerService {
String vendorName = (String) payload.get("vendor_name");
if (vendorName != null && !vendorName.trim().isEmpty() && !vendorName.trim().matches("^[0-9]+$")) {
String trimmedVendorName = vendorName.trim();
String checkSql = "SELECT id FROM vendors_list WHERE TRIM(LOWER(vendor_name)) = ? AND is_active = 1 AND is_delete = 0 LIMIT 1";
String checkSql = "SELECT id FROM payment_vendors_list WHERE TRIM(LOWER(vendor_name)) = ? AND is_active = 1 AND is_delete = 0 LIMIT 1";
List<Integer> existingIds = jdbcTemplate.query(checkSql, (rs, rowNum) -> rs.getInt("id"),
trimmedVendorName.toLowerCase());
if (existingIds != null && !existingIds.isEmpty()) {
@ -206,7 +206,7 @@ public class GccServicePaymentTrackerService {
final String finalVendorName = trimmedVendorName;
jdbcTemplate.update(connection -> {
java.sql.PreparedStatement ps = connection.prepareStatement(
"INSERT INTO vendors_list (vendor_name, is_active, is_delete, order_by, cdate) VALUES (?, 1, 0, '0', NOW())",
"INSERT INTO payment_vendors_list (vendor_name, is_active, is_delete, order_by, cdate) VALUES (?, 1, 0, '0', NOW())",
java.sql.Statement.RETURN_GENERATED_KEYS);
ps.setString(1, finalVendorName);
return ps;
@ -393,36 +393,8 @@ public class GccServicePaymentTrackerService {
}
}
private java.sql.Timestamp parseTimestamp(Object obj) {
if (obj == null || String.valueOf(obj).trim().isEmpty()) {
return null;
}
String str = String.valueOf(obj).trim();
try {
if (str.contains("/")) {
// Parse format dd/MM/yyyy HH:mm:ss or similar if provided
// For simplicity, fallback to current time or standard parsing if it fails
}
if (str.contains("T")) {
str = str.replace("T", " ");
}
if (str.length() == 16) {
str = str + ":00";
}
return java.sql.Timestamp.valueOf(str);
} catch (Exception e) {
// Try parsing as DATE first, then convert to TIMESTAMP
java.sql.Date d = parseDate(obj);
if (d != null) {
return new java.sql.Timestamp(d.getTime());
}
System.err.println("Error parsing timestamp '" + obj + "': " + e.getMessage());
return null;
}
}
public List<Map<String, Object>> getActiveTypes() {
String sql = "SELECT id, type_name FROM type_list "
String sql = "SELECT id, type_name FROM payment_type_list "
+ "WHERE is_active = 1 AND is_delete = 0 "
+ "ORDER BY order_by ASC, type_name ASC";
try {
@ -434,7 +406,7 @@ public class GccServicePaymentTrackerService {
}
public List<Map<String, Object>> getActiveVendors() {
String sql = "SELECT id, vendor_name FROM vendors_list "
String sql = "SELECT id, vendor_name FROM payment_vendors_list "
+ "WHERE is_active = 1 AND is_delete = 0 "
+ "ORDER BY order_by ASC, vendor_name ASC";
try {
@ -446,7 +418,7 @@ public class GccServicePaymentTrackerService {
}
public List<Map<String, Object>> getStatusList() {
String sql = "SELECT id, status_name FROM status_list "
String sql = "SELECT id, status_name FROM payment_status_list "
+ "WHERE is_active = 1 AND is_delete = 0 "
+ "ORDER BY id ASC, status_name ASC";
try {
@ -464,10 +436,10 @@ public class GccServicePaymentTrackerService {
+ "s.status_name as resolved_status, "
+ "u.usr_name as updated_by_name "
+ "FROM payment_tracking_details_history h "
+ "LEFT JOIN type_list t ON TRIM(h.type) REGEXP '^[0-9]+$' AND t.id = CAST(TRIM(h.type) AS UNSIGNED) "
+ "LEFT JOIN vendors_list v ON TRIM(h.vendor_name) REGEXP '^[0-9]+$' AND v.id = CAST(TRIM(h.vendor_name) AS UNSIGNED) "
+ "LEFT JOIN status_list s ON TRIM(h.status) REGEXP '^[0-9]+$' AND s.id = CAST(TRIM(h.status) AS UNSIGNED) "
+ "LEFT JOIN gcc_manpower.app_user u ON (h.updated_by = CAST(u.usr_id AS CHAR) OR h.updated_by = u.usr_name) "
+ "LEFT JOIN payment_type_list t ON TRIM(h.type) REGEXP '^[0-9]+$' AND t.id = CAST(TRIM(h.type) AS UNSIGNED) "
+ "LEFT JOIN payment_vendors_list v ON TRIM(h.vendor_name) REGEXP '^[0-9]+$' AND v.id = CAST(TRIM(h.vendor_name) AS UNSIGNED) "
+ "LEFT JOIN payment_status_list s ON TRIM(h.status) REGEXP '^[0-9]+$' AND s.id = CAST(TRIM(h.status) AS UNSIGNED) "
+ "LEFT JOIN app_user u ON (h.updated_by = CAST(u.usr_id AS CHAR) OR h.updated_by = u.usr_name) "
+ "WHERE h.detail_id = ? "
+ "ORDER BY h.updated_at DESC";
try {
@ -486,10 +458,10 @@ public class GccServicePaymentTrackerService {
+ "s.status_name as resolved_status, "
+ "u.usr_name as updated_by_name "
+ "FROM payment_tracking_details p "
+ "LEFT JOIN type_list t ON TRIM(p.type) REGEXP '^[0-9]+$' AND t.id = CAST(TRIM(p.type) AS UNSIGNED) "
+ "LEFT JOIN vendors_list v ON TRIM(p.vendor_name) REGEXP '^[0-9]+$' AND v.id = CAST(TRIM(p.vendor_name) AS UNSIGNED) "
+ "LEFT JOIN status_list s ON TRIM(p.status) REGEXP '^[0-9]+$' AND s.id = CAST(TRIM(p.status) AS UNSIGNED) "
+ "LEFT JOIN gcc_manpower.app_user u ON (p.updated_by = CAST(u.usr_id AS CHAR) OR p.updated_by = u.usr_name) "
+ "LEFT JOIN payment_type_list t ON TRIM(p.type) REGEXP '^[0-9]+$' AND t.id = CAST(TRIM(p.type) AS UNSIGNED) "
+ "LEFT JOIN payment_vendors_list v ON TRIM(p.vendor_name) REGEXP '^[0-9]+$' AND v.id = CAST(TRIM(p.vendor_name) AS UNSIGNED) "
+ "LEFT JOIN payment_status_list s ON TRIM(p.status) REGEXP '^[0-9]+$' AND s.id = CAST(TRIM(p.status) AS UNSIGNED) "
+ "LEFT JOIN app_user u ON (p.updated_by = CAST(u.usr_id AS CHAR) OR p.updated_by = u.usr_name) "
+ "WHERE p.is_active = 0 AND p.is_delete = 1 "
+ "ORDER BY p.updated_date DESC";
try {

106
src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/controller/TapalController.java

@ -0,0 +1,106 @@
package com.gcc_manpower.gcctapaldetailsmanagement.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.gcc_manpower.gcctapaldetailsmanagement.service.TapalService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
@Controller
@RequestMapping("/gcctapaldetailsmanagement")
public class TapalController {
@Autowired
private TapalService tapalService;
@Autowired
private AuthenticationManager authenticationManager;
@GetMapping({ "", "/", "/dashboard" })
public String viewDashboard(Model model, HttpSession session) {
String username = (String) session.getAttribute("tap_usrName");
if (username == null) {
return "redirect:/gcctapaldetailsmanagement/login";
}
String usrRole = (String) session.getAttribute("tap_usrRole");
boolean isAdmin = "ADMIN".equalsIgnoreCase(usrRole);
model.addAttribute("isLoggedIn", true);
model.addAttribute("isAdmin", isAdmin);
model.addAttribute("usrName", username);
model.addAttribute("curPage", "gcctapaldetailsmanagement");
return "gcctapaldetailsmanagement/dashboard";
}
@GetMapping("/login")
public String login(HttpSession session) {
return "gcctapaldetailsmanagement/login";
}
@PostMapping("/api/login")
@ResponseBody
public Map<String, Object> validateLogin(
@RequestParam("usrName") String usrName,
@RequestParam("usrPass") String usrPass,
HttpSession session) {
Map<String, Object> response = new HashMap<>();
try {
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(usrName,
usrPass);
Authentication authentication = authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
session.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
SecurityContextHolder.getContext());
String role = authentication.getAuthorities().stream()
.map(auth -> auth.getAuthority().replace("ROLE_", ""))
.findFirst()
.orElse("USER");
session.setAttribute("tap_usrName", usrName);
session.setAttribute("tap_usrRole", role);
session.setMaxInactiveInterval(1800); // 30 minutes session timeout
response.put("result", true);
response.put("usrName", usrName);
} catch (AuthenticationException e) {
response.put("result", false);
response.put("error", e.getMessage() != null ? e.getMessage() : "Invalid username or password!");
}
return response;
}
@GetMapping("/logout")
public String logout(HttpSession session, HttpServletRequest request) {
SecurityContextHolder.clearContext();
if (session != null) {
session.removeAttribute("tap_usrName");
session.removeAttribute("tap_usrRole");
session.invalidate();
}
request.getSession(true);
return "redirect:/gcctapaldetailsmanagement/login";
}
}

34
src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/service/TapalService.java

@ -0,0 +1,34 @@
package com.gcc_manpower.gcctapaldetailsmanagement.service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class TapalService {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<Map<String, Object>> getAllTapalsStatus() {
String sql = "select * from tapal_status_list where is_active = 1 and is_delete=0";
try {
return this.jdbcTemplate.queryForList(sql);
} catch (Exception e) {
System.out.println(e.getMessage());
return Collections.emptyList();
}
}
}

124
src/main/java/com/gcc_manpower/gcctonermanagement/service/TonerService.java

@ -24,12 +24,12 @@ public class TonerService {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(@Qualifier("mysqlTonerManagementDataSource") DataSource dataSource) {
public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
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 toner_printer_model_list where is_active = 1 AND is_delete = 0 ";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
@ -40,9 +40,9 @@ public class TonerService {
public List<Map<String, Object>> getActiveTonersByPrinter(int pid) {
String sql = "SELECT t.id, t.model_name, t.part_code, " +
"(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) - "
"(COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM toner_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) - "
+
"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 available_stock "
"COALESCE((SELECT SUM(CAST(dr.qty_delivered AS SIGNED)) FROM toner_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 available_stock "
+
"FROM toner_model_list t WHERE t.pid = ? AND t.is_active = 1 AND t.is_delete = 0";
try {
@ -65,9 +65,9 @@ public class TonerService {
public int getTonerAvailableStock(int tid) {
String sql = "SELECT " +
"(COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM stock_register_details sr WHERE CAST(sr.tid AS SIGNED) = t.id AND sr.is_active = 1 AND sr.is_delete = 0), 0) - "
"(COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM toner_stock_register_details sr WHERE CAST(sr.tid AS SIGNED) = t.id AND sr.is_active = 1 AND sr.is_delete = 0), 0) - "
+
"COALESCE((SELECT SUM(CAST(dr.qty_delivered AS SIGNED)) FROM department_requested_details dr WHERE CAST(dr.tid AS SIGNED) = t.id AND dr.is_active = 1 AND dr.is_delete = 0), 0)) AS available_stock "
"COALESCE((SELECT SUM(CAST(dr.qty_delivered AS SIGNED)) FROM toner_department_requested_details dr WHERE CAST(dr.tid AS SIGNED) = t.id AND dr.is_active = 1 AND dr.is_delete = 0), 0)) AS available_stock "
+
"FROM toner_model_list t WHERE t.id = ?";
try {
@ -81,7 +81,7 @@ public class TonerService {
@Transactional
public boolean saveInwardRegister(String refNo, String companyName, List<Map<String, Object>> items,
String dcUpload, String username) {
String sql = "INSERT INTO stock_register_details " +
String sql = "INSERT INTO toner_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, ?)";
@ -116,11 +116,11 @@ public class TonerService {
}
public int getMaxRequestId() {
String sql = "SELECT COALESCE(MAX(id), 0) FROM department_requested_details";
String sql = "SELECT COALESCE(MAX(id), 0) FROM toner_department_requested_details";
try {
return jdbcTemplate.queryForObject(sql, Integer.class);
} catch (Exception e) {
System.err.println("Error fetching max id from department_requested_details: " + e.getMessage());
System.err.println("Error fetching max id from toner_department_requested_details: " + e.getMessage());
return 0;
}
}
@ -129,7 +129,7 @@ public class TonerService {
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 " +
String sql = "INSERT INTO toner_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)";
@ -161,10 +161,10 @@ public class TonerService {
String sql = "SELECT r.id, r.req_no, COALESCE(d.dept_name, r.dept_id) AS 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 " +
"FROM toner_department_requested_details r " +
"LEFT JOIN toner_printer_model_list p ON r.pid = p.id " +
"LEFT JOIN toner_model_list t ON r.tid = t.id " +
"LEFT JOIN department_list d ON CAST(r.dept_id AS SIGNED) = d.id " +
"LEFT JOIN toner_department_list d ON CAST(r.dept_id AS SIGNED) = d.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";
@ -182,14 +182,14 @@ public class TonerService {
java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis());
try {
if (finalDeliveredUpload != null) {
sql = "UPDATE department_requested_details " +
sql = "UPDATE toner_department_requested_details " +
"SET final_delivered_upload = CASE WHEN final_delivered_upload IS NULL OR final_delivered_upload = '' THEN ? ELSE CONCAT(final_delivered_upload, ',', ?) END, "
+
"updated_date = ?, updated_by = ? " +
"WHERE id = ?";
rows = jdbcTemplate.update(sql, finalDeliveredUpload, finalDeliveredUpload, now, username, id);
} else {
sql = "UPDATE department_requested_details " +
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 = ?";
@ -206,11 +206,11 @@ public class TonerService {
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";
String sqlWorkorderRegistered = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM workorder_printermodel_qty WHERE is_active = 1 AND is_delete = 0";
String sqlWorkorderRequested = "SELECT COALESCE(SUM(CAST(qty_requested AS SIGNED)), 0) FROM workorder_model_request_details WHERE is_active = 1 AND is_delete = 0";
String sqlRaised = "SELECT COALESCE(SUM(CAST(qty_requested AS SIGNED)), 0) FROM toner_department_requested_details WHERE is_active = 1 AND is_delete = 0";
String sqlDistributed = "SELECT COALESCE(SUM(CAST(qty_delivered AS SIGNED)), 0) FROM toner_department_requested_details WHERE is_active = 1 AND is_delete = 0";
String sqlInward = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM toner_stock_register_details WHERE is_active = 1 AND is_delete = 0";
String sqlWorkorderRegistered = "SELECT COALESCE(SUM(CAST(qty_registered AS SIGNED)), 0) FROM toner_workorder_printermodel_qty WHERE is_active = 1 AND is_delete = 0";
String sqlWorkorderRequested = "SELECT COALESCE(SUM(CAST(qty_requested AS SIGNED)), 0) FROM toner_workorder_model_request_details WHERE is_active = 1 AND is_delete = 0";
try {
int totalRaised = jdbcTemplate.queryForObject(sqlRaised, Integer.class);
@ -240,12 +240,12 @@ public class TonerService {
public List<Map<String, Object>> getInventorySummary() {
String safeSql = "SELECT p.id AS pid, p.printer_name, t.id AS tid, 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(sr.qty_registered AS SIGNED)) FROM toner_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 "
"COALESCE((SELECT SUM(CAST(dr.qty_delivered AS SIGNED)) FROM toner_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 " +
"JOIN toner_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 {
@ -269,12 +269,12 @@ public class TonerService {
+ "SUM(CAST(s.qty_registered AS SIGNED)) AS qty_registered, MAX(s.dc_upload) AS dc_upload, "
+ "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_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 "
+ "COALESCE((SELECT w.qty_registered FROM toner_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_registered AS SIGNED)) FROM toner_workorder_model_multiple_request_qty mr INNER JOIN toner_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 toner_stock_register_details s "
+ "LEFT JOIN toner_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 "
+ "LEFT JOIN gcc_manpower.app_user u ON CAST(s.updated_by AS SIGNED) = u.usr_id "
+ "LEFT JOIN app_user u ON CAST(s.updated_by AS SIGNED) = u.usr_id "
+ "WHERE s.is_active = 1 AND s.is_delete = 0 "
+ "GROUP BY s.ref_no, s.pid, s.tid, s.company_name, p.printer_name, t.model_name "
+ "ORDER BY MAX(s.id) DESC";
@ -290,11 +290,11 @@ public class TonerService {
String sql = "SELECT r.id, r.pid, r.tid, r.req_no, r.itcell_ref_no, COALESCE(d.dept_name, r.dept_id) AS dept_id, r.qty_requested, r.qty_delivered, "
+ "r.user_request_upload, r.cdate, r.updated_date, COALESCE(u.usr_name, r.updated_by) AS updated_by, "
+ "p.printer_name, t.model_name "
+ "FROM department_requested_details r "
+ "LEFT JOIN printer_model_list p ON CAST(r.pid AS SIGNED) = p.id "
+ "FROM toner_department_requested_details r "
+ "LEFT JOIN toner_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 "
+ "LEFT JOIN gcc_manpower.app_user u ON CAST(r.updated_by AS SIGNED) = u.usr_id "
+ "LEFT JOIN department_list d ON CAST(r.dept_id AS SIGNED) = d.id "
+ "LEFT JOIN app_user u ON CAST(r.updated_by AS SIGNED) = u.usr_id "
+ "LEFT JOIN toner_department_list d ON CAST(r.dept_id AS SIGNED) = d.id "
+ "WHERE r.is_active = 1 AND r.is_delete = 0 "
+ "ORDER BY r.id DESC";
try {
@ -309,10 +309,10 @@ public class TonerService {
String sql = "SELECT r.id, r.pid, r.tid, r.req_no, r.itcell_ref_no, COALESCE(d.dept_name, r.dept_id) AS dept_id, r.qty_requested, r.qty_delivered, r.final_delivered_upload, r.user_request_upload, r.cdate, r.updated_date, "
+
"p.printer_name, t.model_name " +
"FROM department_requested_details r " +
"LEFT JOIN printer_model_list p ON CAST(r.pid AS SIGNED) = p.id " +
"FROM toner_department_requested_details r " +
"LEFT JOIN toner_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 " +
"LEFT JOIN department_list d ON CAST(r.dept_id AS SIGNED) = d.id " +
"LEFT JOIN toner_department_list d ON CAST(r.dept_id AS SIGNED) = d.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";
@ -328,7 +328,7 @@ public class TonerService {
String totalQty, List<Map<String, Object>> items, String username) {
java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis());
String sqlMain = "INSERT INTO workorder_register_details " +
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)";
@ -352,7 +352,7 @@ public class TonerService {
return false;
}
String sqlSub = "INSERT INTO workorder_printermodel_qty " +
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)";
@ -373,7 +373,7 @@ public class TonerService {
}
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";
String sql = "SELECT ref_no FROM toner_workorder_register_details WHERE is_active = 1 AND is_delete = 0 ORDER BY id DESC";
try {
return jdbcTemplate.queryForList(sql, String.class);
} catch (Exception e) {
@ -402,9 +402,9 @@ public class TonerService {
java.sql.Timestamp now = new java.sql.Timestamp(System.currentTimeMillis());
// Insert into workorder_model_request_details using KeyHolder to get the
// Insert into toner_workorder_model_request_details using KeyHolder to get the
// generated id
String sqlMain = "INSERT INTO workorder_model_request_details " +
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)";
@ -432,8 +432,8 @@ public class TonerService {
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 " +
// Insert into toner_workorder_model_multiple_request_qty in loop
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)";
@ -456,12 +456,12 @@ public class TonerService {
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_registered AS SIGNED)) FROM workorder_model_multiple_request_qty mr "
+ "COALESCE((SELECT SUM(CAST(mr.qty_registered AS SIGNED)) FROM toner_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 "
+ "FROM toner_workorder_printermodel_qty w "
+ "LEFT JOIN toner_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_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 {
@ -473,7 +473,7 @@ public class TonerService {
}
public List<String> getActiveWorkorderRequestRefNos() {
String sql = "SELECT ref_no FROM workorder_model_request_details WHERE is_active = 1 AND is_delete = 0 GROUP BY ref_no ORDER BY MAX(id) DESC";
String sql = "SELECT ref_no FROM toner_workorder_model_request_details WHERE is_active = 1 AND is_delete = 0 GROUP BY ref_no ORDER BY MAX(id) DESC";
try {
return jdbcTemplate.queryForList(sql, String.class);
} catch (Exception e) {
@ -485,13 +485,13 @@ public class TonerService {
public List<Map<String, Object>> getWorkorderRequests(String refNo) {
String sql = "SELECT mr.id, mr.pid, mr.tid, mr.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 "
+ "COALESCE((SELECT SUM(CAST(sr.qty_registered AS SIGNED)) FROM toner_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(mr.pid AS SIGNED) = p.id "
+ "FROM toner_workorder_model_multiple_request_qty mr "
+ "LEFT JOIN toner_workorder_model_request_details r ON mr.ref_no = r.ref_no "
+ "LEFT JOIN toner_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(r.updated_by AS SIGNED) = u.usr_id "
+ "LEFT JOIN app_user u ON CAST(r.updated_by AS SIGNED) = u.usr_id "
+ "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);
@ -507,12 +507,12 @@ public class TonerService {
+
"r.dc_upload, r.cdate, COALESCE(u.usr_name, r.updated_by) AS updated_by, " +
"p.printer_name, t.model_name " +
"FROM workorder_printermodel_qty w " +
"LEFT JOIN workorder_register_details r ON w.ref_no = r.ref_no " +
"FROM toner_workorder_printermodel_qty w " +
"LEFT JOIN toner_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_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 " +
"LEFT JOIN gcc_manpower.app_user u ON CAST(r.updated_by AS SIGNED) = u.usr_id " +
"LEFT JOIN app_user u ON CAST(r.updated_by AS SIGNED) = u.usr_id " +
"WHERE w.is_active = 1 AND w.is_delete = 0 AND r.is_active = 1 AND r.is_delete = 0 " +
"ORDER BY w.id DESC";
try {
@ -527,12 +527,12 @@ public class TonerService {
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 "
+ "COALESCE((SELECT w.qty_registered FROM toner_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 toner_workorder_model_multiple_request_qty mr "
+ "LEFT JOIN toner_workorder_model_request_details r ON mr.ref_no = r.ref_no "
+ "LEFT JOIN toner_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(r.updated_by AS SIGNED) = u.usr_id "
+ "LEFT JOIN 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 {
@ -544,7 +544,7 @@ public class TonerService {
}
public List<Map<String, Object>> getActiveDepartments() {
String sql = "SELECT id, dept_name FROM department_list WHERE is_active = 1 AND is_delete = 0 ORDER BY dept_name ASC";
String sql = "SELECT id, dept_name FROM toner_department_list WHERE is_active = 1 AND is_delete = 0 ORDER BY dept_name ASC";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {

141
src/main/java/com/gcc_manpower/service/AppUserService.java

@ -21,22 +21,10 @@ public class AppUserService {
private JdbcTemplate jdbcManpowerTemplate;
@Autowired
public void setDataSource(@Qualifier("mysqlManpowerDataSource") DataSource manpowerDataSource) {
public void setDataSource(@Qualifier("mysqlItcellManagementDataSource") DataSource manpowerDataSource) {
this.jdbcManpowerTemplate = new JdbcTemplate(manpowerDataSource);
}
@PostConstruct
public void init() {
try {
jdbcManpowerTemplate
.execute("ALTER TABLE app_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci");
System.out.println(
"Collation mismatch auto-resolved: app_user converted to utf8mb4_0900_ai_ci successfully.");
} catch (Exception e) {
System.err.println("Note: Could not alter app_user collation automatically: " + e.getMessage());
}
}
public Map<String, Object> authenticate(String username, String password) {
Map<String, Object> result = new HashMap<>();
@ -138,11 +126,11 @@ public class AppUserService {
"(SELECT COALESCE(SUM(CAST(tender_manpower_designation_wise AS SIGNED)), 0) FROM employee_workorder_details WHERE vid = CAST(v.id AS CHAR) AND isactive = 1 AND isdelete = 0) AS total_employees, "
+
"orderby, cdate, isactive, isdelete, " +
"(SELECT COUNT(*) FROM employee_details e LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) AND (e.user_type != '3' AND (ut.usertype IS NULL OR ut.usertype != 'Standby Employees')) AND e.isactive = 1 AND e.isdelete = 0) AS actual_employee_count, "
"(SELECT COUNT(*) FROM employee_details e LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) AND (e.user_type != '3' AND (ut.usertype IS NULL OR ut.usertype != 'Standby Employees')) AND e.isactive = 1 AND e.isdelete = 0) AS actual_employee_count, "
+
"(SELECT COUNT(*) FROM employee_details e LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) AND (e.user_type = '3' OR ut.usertype = 'Standby Employees') AND e.isactive = 1 AND e.isdelete = 0) AS standby_employee_count "
"(SELECT COUNT(*) FROM employee_details e LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) AND (e.user_type = '3' OR ut.usertype = 'Standby Employees') AND e.isactive = 1 AND e.isdelete = 0) AS standby_employee_count "
+
"FROM vendor_details v " +
"FROM employee_vendor_details v " +
"WHERE v.isactive = 1 AND v.isdelete = 0 " +
"ORDER BY v.orderby, v.vendor_name";
try {
@ -173,7 +161,7 @@ public class AppUserService {
}
public int getOverallActiveEmployeeCount() {
String sql = "SELECT COUNT(*) FROM employee_details e LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.user_type != '3' AND (ut.usertype IS NULL OR ut.usertype != 'Standby Employees')) AND e.isactive = 1 AND e.isdelete = 0";
String sql = "SELECT COUNT(*) FROM employee_details e LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.user_type != '3' AND (ut.usertype IS NULL OR ut.usertype != 'Standby Employees')) AND e.isactive = 1 AND e.isdelete = 0";
try {
Integer count = jdbcManpowerTemplate.queryForObject(sql, Integer.class);
return count != null ? count : 0;
@ -184,7 +172,7 @@ public class AppUserService {
}
public int getOverallStandbyEmployeeCount() {
String sql = "SELECT COUNT(*) FROM employee_details e LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.user_type = '3' OR ut.usertype = 'Standby Employees') AND e.isactive = 1 AND e.isdelete = 0";
String sql = "SELECT COUNT(*) FROM employee_details e LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) WHERE (e.user_type = '3' OR ut.usertype = 'Standby Employees') AND e.isactive = 1 AND e.isdelete = 0";
try {
Integer count = jdbcManpowerTemplate.queryForObject(sql, Integer.class);
return count != null ? count : 0;
@ -221,7 +209,7 @@ public class AppUserService {
}
public List<Map<String, Object>> getActiveUserTypes() {
String sql = "SELECT id, usertype FROM user_type_details WHERE isactive = 1 AND isdelete = 0 ORDER BY orderby, usertype";
String sql = "SELECT id, usertype FROM employee_user_type_details WHERE isactive = 1 AND isdelete = 0 ORDER BY orderby, usertype";
try {
return jdbcManpowerTemplate.queryForList(sql);
} catch (Exception e) {
@ -234,7 +222,7 @@ public class AppUserService {
String vendorId = null;
try {
List<Map<String, Object>> vendorList = jdbcManpowerTemplate.queryForList(
"SELECT id FROM vendor_details WHERE vendor_name = ? AND isactive = 1 AND isdelete = 0",
"SELECT id FROM employee_vendor_details WHERE vendor_name = ? AND isactive = 1 AND isdelete = 0",
vendorName);
if (vendorList != null && !vendorList.isEmpty()) {
vendorId = String.valueOf(vendorList.get(0).get("id"));
@ -265,8 +253,10 @@ public class AppUserService {
" COALESCE(des.work_order_issue_date, '-') AS issue_date, " +
" COALESCE(des.work_order_end_date, '-') AS end_date " +
"FROM employee_details e " +
"LEFT JOIN vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) " +
"LEFT JOIN employee_vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) "
+
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"LEFT JOIN employee_workorder_details des ON (e.designation = CAST(des.id AS CHAR) OR e.designation = des.designation) "
+
"LEFT JOIN employee_location_details loc ON (e.location = CAST(loc.id AS CHAR) OR e.location = loc.location_name) "
@ -307,8 +297,10 @@ public class AppUserService {
" COALESCE(des.work_order_issue_date, '-') AS work_order_issue_date, " +
" COALESCE(des.work_order_end_date, '-') AS work_order_end_date " +
"FROM employee_details e " +
"LEFT JOIN vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) " +
"LEFT JOIN employee_vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) "
+
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"LEFT JOIN employee_workorder_details des ON (e.designation = CAST(des.id AS CHAR) OR e.designation = des.designation) "
+
"LEFT JOIN employee_location_details loc ON (e.location = CAST(loc.id AS CHAR) OR e.location = loc.location_name) "
@ -377,9 +369,9 @@ public class AppUserService {
// Fetch the count of active, regular (non-standby) employees for this
// designation/vendor
String countSql = "SELECT COUNT(*) FROM employee_details e " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM vendor_details WHERE id = ?)) "
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM employee_vendor_details WHERE id = ?)) "
+
" AND (e.designation = ? OR e.designation = ?) " +
" AND (e.user_type != '3' AND (ut.usertype IS NULL OR ut.usertype != 'Standby Employees')) "
@ -439,12 +431,36 @@ public class AppUserService {
emp.put("emp_code", String.valueOf(emp.get("emp_code")).trim());
}
String empCode = (String) emp.get("emp_code");
// Extract original employee code
String oldEmpCode = (String) emp.get("old_emp_code");
if (oldEmpCode != null) {
oldEmpCode = oldEmpCode.trim();
} else {
oldEmpCode = empCode;
}
// Check duplicate active employee code if it is changed
if (!oldEmpCode.equalsIgnoreCase(empCode)) {
String checkSql = "SELECT COUNT(*) FROM employee_details WHERE emp_code = ? AND isdelete = 0";
try {
Integer count = jdbcManpowerTemplate.queryForObject(checkSql, Integer.class, empCode);
if (count != null && count > 0) {
throw new RuntimeException("Employee code '" + empCode + "' is already in use.");
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
System.err.println("Error checking duplicate employee code: " + e.getMessage());
}
}
String selectSql = "SELECT emp_code, name, email, mobile, user_type, designation, location, vendor_id, isactive, isdelete, updated_by, cdate "
+
"FROM employee_details WHERE emp_code = ? AND isdelete = 0";
List<Map<String, Object>> oldList;
try {
oldList = jdbcManpowerTemplate.queryForList(selectSql, empCode);
oldList = jdbcManpowerTemplate.queryForList(selectSql, oldEmpCode);
} catch (Exception e) {
System.err.println("Error retrieving old employee details: " + e.getMessage());
return false;
@ -475,9 +491,9 @@ public class AppUserService {
// Fetch regular active count only
String countSql = "SELECT COUNT(*) FROM employee_details e " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM vendor_details WHERE id = ?)) "
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM employee_vendor_details WHERE id = ?)) "
+
" AND (e.designation = ? OR e.designation = ?) " +
" AND (e.user_type != '3' AND (ut.usertype IS NULL OR ut.usertype != 'Standby Employees')) "
@ -526,11 +542,12 @@ public class AppUserService {
return false;
}
String updateSql = "UPDATE employee_details SET name = ?, email = ?, mobile = ?, user_type = ?, designation = ?, location = ?, vendor_id = ?, joined_date = ?, updated_at = NOW(), updated_by = ? "
String updateSql = "UPDATE employee_details SET emp_code = ?, name = ?, email = ?, mobile = ?, user_type = ?, designation = ?, location = ?, vendor_id = ?, joined_date = ?, updated_at = NOW(), updated_by = ? "
+
"WHERE emp_code = ? AND isdelete = 0";
try {
int rows = jdbcManpowerTemplate.update(updateSql,
empCode,
emp.get("name"),
emp.get("email"),
emp.get("mobile"),
@ -540,8 +557,13 @@ public class AppUserService {
emp.get("vendor_id"),
emp.get("joined_date"),
getUserIdByName(updatedByUsername),
empCode);
oldEmpCode);
if (rows > 0) {
// Update history to new code
if (!oldEmpCode.equalsIgnoreCase(empCode)) {
String updateHistorySql = "UPDATE employee_details_update_history SET emp_code = ? WHERE emp_code = ?";
jdbcManpowerTemplate.update(updateHistorySql, empCode, oldEmpCode);
}
recalculateDesignationManpower(String.valueOf(old.get("designation")),
String.valueOf(old.get("vendor_id")));
recalculateDesignationManpower(String.valueOf(emp.get("designation")),
@ -568,8 +590,10 @@ public class AppUserService {
" COALESCE(des.designation, h.designation) AS designation, " +
" COALESCE(loc.location_name, h.location) AS location " +
"FROM employee_details_update_history h " +
"LEFT JOIN vendor_details v ON (h.vendor_id = CAST(v.id AS CHAR) OR h.vendor_id = v.vendor_name) " +
"LEFT JOIN user_type_details ut ON (h.user_type = CAST(ut.id AS CHAR) OR h.user_type = ut.usertype) " +
"LEFT JOIN employee_vendor_details v ON (h.vendor_id = CAST(v.id AS CHAR) OR h.vendor_id = v.vendor_name) "
+
"LEFT JOIN employee_user_type_details ut ON (h.user_type = CAST(ut.id AS CHAR) OR h.user_type = ut.usertype) "
+
"LEFT JOIN employee_workorder_details des ON (h.designation = CAST(des.id AS CHAR) OR h.designation = des.designation) "
+
"LEFT JOIN employee_location_details loc ON (h.location = CAST(loc.id AS CHAR) OR h.location = loc.location_name) "
@ -608,7 +632,8 @@ public class AppUserService {
public long addVendor(String vendorName, String description, String totalEmployees, Integer orderby) {
if (orderby == null) {
try {
Integer maxOrder = jdbcManpowerTemplate.queryForObject("SELECT MAX(orderby) FROM vendor_details",
Integer maxOrder = jdbcManpowerTemplate.queryForObject(
"SELECT MAX(orderby) FROM employee_vendor_details",
Integer.class);
orderby = (maxOrder != null) ? maxOrder + 1 : 1;
} catch (Exception e) {
@ -620,7 +645,7 @@ public class AppUserService {
try {
jdbcManpowerTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(
"INSERT INTO vendor_details (vendor_name, description, total_employees, orderby, cdate, isactive, isdelete) "
"INSERT INTO employee_vendor_details (vendor_name, description, total_employees, orderby, cdate, isactive, isdelete) "
+
"VALUES (?, ?, ?, ?, NOW(), 1, 0)",
Statement.RETURN_GENERATED_KEYS);
@ -633,7 +658,7 @@ public class AppUserService {
Number key = keyHolder.getKey();
return key != null ? key.longValue() : 0;
} catch (Exception e) {
System.err.println("Error adding vendor to vendor_details: " + e.getMessage());
System.err.println("Error adding vendor to employee_vendor_details: " + e.getMessage());
return 0;
}
}
@ -754,7 +779,7 @@ public class AppUserService {
Integer sum = jdbcManpowerTemplate.queryForObject(sumSql, Integer.class, vendorId);
int total = (sum != null) ? sum : 0;
String updateSql = "UPDATE vendor_details SET total_employees = ? WHERE id = ?";
String updateSql = "UPDATE employee_vendor_details SET total_employees = ? WHERE id = ?";
jdbcManpowerTemplate.update(updateSql, String.valueOf(total), vendorId);
} catch (Exception e) {
System.err.println("Error syncing total employees for vendor ID " + vendorId + ": " + e.getMessage());
@ -790,9 +815,9 @@ public class AppUserService {
// Count active regular (tender) employees (excludes standby employees)
String countRegularSql = "SELECT COUNT(*) FROM employee_details e " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM vendor_details WHERE id = ?)) "
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM employee_vendor_details WHERE id = ?)) "
+
" AND (e.designation = ? OR e.designation = ?) " +
" AND (e.user_type != '3' AND (ut.usertype IS NULL OR ut.usertype != 'Standby Employees')) " +
@ -805,9 +830,9 @@ public class AppUserService {
// Count active standby employees
String countStandbySql = "SELECT COUNT(*) FROM employee_details e " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM vendor_details WHERE id = ?)) "
"WHERE (e.vendor_id = ? OR e.vendor_id = (SELECT vendor_name FROM employee_vendor_details WHERE id = ?)) "
+
" AND (e.designation = ? OR e.designation = ?) " +
" AND (e.user_type = '3' OR ut.usertype = 'Standby Employees') " +
@ -867,7 +892,7 @@ public class AppUserService {
public boolean deleteVendor(String vendorId) {
try {
String selectVendorSql = "SELECT id, vendor_name FROM vendor_details WHERE id = ?";
String selectVendorSql = "SELECT id, vendor_name FROM employee_vendor_details WHERE id = ?";
List<Map<String, Object>> vendorList = jdbcManpowerTemplate.queryForList(selectVendorSql, vendorId);
if (vendorList == null || vendorList.isEmpty()) {
return false;
@ -882,8 +907,8 @@ public class AppUserService {
String updateEmployeesSql = "UPDATE employee_details SET isactive = 0, isdelete = 1 WHERE vendor_id = ? OR vendor_id = ?";
jdbcManpowerTemplate.update(updateEmployeesSql, vendorId, vendorName);
// 3. Soft-delete the vendor in vendor_details
String updateVendorSql = "UPDATE vendor_details SET isactive = 0, isdelete = 1 WHERE id = ?";
// 3. Soft-delete the vendor in employee_vendor_details
String updateVendorSql = "UPDATE employee_vendor_details SET isactive = 0, isdelete = 1 WHERE id = ?";
int rows = jdbcManpowerTemplate.update(updateVendorSql, vendorId);
return rows > 0;
@ -897,7 +922,7 @@ public class AppUserService {
String vendorName = null;
try {
List<Map<String, Object>> vendorList = jdbcManpowerTemplate.queryForList(
"SELECT vendor_name FROM vendor_details WHERE id = ?",
"SELECT vendor_name FROM employee_vendor_details WHERE id = ?",
vendorId);
if (vendorList != null && !vendorList.isEmpty()) {
vendorName = (String) vendorList.get(0).get("vendor_name");
@ -926,8 +951,10 @@ public class AppUserService {
" COALESCE(loc.location_name, e.location) AS location, " +
" COALESCE(des.File_no, '-') AS work_order " +
"FROM employee_details e " +
"LEFT JOIN vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) " +
"LEFT JOIN employee_vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) "
+
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"LEFT JOIN employee_workorder_details des ON (e.designation = CAST(des.id AS CHAR) OR e.designation = des.designation) "
+
"LEFT JOIN employee_location_details loc ON (e.location = CAST(loc.id AS CHAR) OR e.location = loc.location_name) "
@ -992,8 +1019,10 @@ public class AppUserService {
" COALESCE(loc.location_name, e.location) AS location, " +
" COALESCE(des.File_no, '-') AS work_order " +
"FROM employee_details e " +
"LEFT JOIN vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) " +
"LEFT JOIN user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) " +
"LEFT JOIN employee_vendor_details v ON (e.vendor_id = CAST(v.id AS CHAR) OR e.vendor_id = v.vendor_name) "
+
"LEFT JOIN employee_user_type_details ut ON (e.user_type = CAST(ut.id AS CHAR) OR e.user_type = ut.usertype) "
+
"LEFT JOIN employee_workorder_details des ON (e.designation = CAST(des.id AS CHAR) OR e.designation = des.designation) "
+
"LEFT JOIN employee_location_details loc ON (e.location = CAST(loc.id AS CHAR) OR e.location = loc.location_name) "
@ -1043,7 +1072,8 @@ public class AppUserService {
int rows = jdbcManpowerTemplate.update(deleteSql, userId, workOrderId);
if (rows > 0) {
// 3. Subtract its tender count from vendor's total_employees in vendor_details
// 3. Subtract its tender count from vendor's total_employees in
// employee_vendor_details
int tenderCount = 0;
if (tenderStr != null) {
try {
@ -1059,7 +1089,8 @@ public class AppUserService {
// and record updater
String updateEmployeesSql = "UPDATE employee_details SET isactive = 0, isdelete = 1, updated_at = NOW(), updated_by = ? "
+
"WHERE (vendor_id = ? OR vendor_id = (SELECT vendor_name FROM vendor_details WHERE id = ?)) " +
"WHERE (vendor_id = ? OR vendor_id = (SELECT vendor_name FROM employee_vendor_details WHERE id = ?)) "
+
" AND (designation = ? OR designation = ?)";
jdbcManpowerTemplate.update(updateEmployeesSql, userId, vendorId, vendorId, workOrderId,
designationName);
@ -1089,7 +1120,7 @@ public class AppUserService {
" COALESCE(u.usr_name, w.updated_by) AS updated_by_name, " +
" w.file_path " +
"FROM employee_workorder_details w " +
"LEFT JOIN vendor_details v ON w.vid = CAST(v.id AS CHAR) " +
"LEFT JOIN employee_vendor_details v ON w.vid = CAST(v.id AS CHAR) " +
"LEFT JOIN app_user u ON w.updated_by = CAST(u.usr_id AS CHAR) " +
"WHERE w.isdelete = 1 " +
"ORDER BY w.updated_at DESC";
@ -1107,9 +1138,9 @@ public class AppUserService {
"COALESCE(ew.designation, e.designation) AS designation_name, " +
"COALESCE(v.vendor_name, e.vendor_id) AS vendor_name " +
"FROM employee_details e " +
"LEFT JOIN gcc_manpower.app_user u ON CAST(e.updated_by AS SIGNED) = u.usr_id " +
"LEFT JOIN app_user u ON CAST(e.updated_by AS SIGNED) = u.usr_id " +
"LEFT JOIN employee_workorder_details ew ON CAST(e.designation AS SIGNED) = ew.id " +
"LEFT JOIN vendor_details v ON CAST(e.vendor_id AS SIGNED) = v.id " +
"LEFT JOIN employee_vendor_details v ON CAST(e.vendor_id AS SIGNED) = v.id " +
"ORDER BY e.updated_at DESC LIMIT 20";
try {
return jdbcManpowerTemplate.queryForList(sql);
@ -1125,7 +1156,7 @@ public class AppUserService {
return true;
}
try {
String checkStandbySql = "SELECT usertype FROM user_type_details WHERE id = ? OR usertype = ?";
String checkStandbySql = "SELECT usertype FROM employee_user_type_details WHERE id = ? OR usertype = ?";
List<String> types = jdbcManpowerTemplate.queryForList(checkStandbySql, String.class, userTypeStr,
userTypeStr);
if (types != null && !types.isEmpty()) {

3
src/main/resources/application-local.properties

@ -8,7 +8,8 @@ server.port=8084
# MySQL Database Configuration
# ===============================
# Local DB server
spring.datasource.url=jdbc:mysql://localhost:3306/gcc_manpower
#spring.datasource.url=jdbc:mysql://localhost:3306/gcc_manpower
spring.datasource.url=jdbc:mysql://localhost:3306/gcc_itcell_management_services
spring.datasource.username=root
spring.datasource.password=root

3
src/main/resources/application-prod.properties

@ -16,7 +16,7 @@ fileBaseUrl=https://gccservices.in/gcc_manpower
# spring.datasource.username=root
# spring.datasource.password=root
spring.datasource.url=jdbc:mysql://gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306/gcc_manpower
spring.datasource.url=jdbc:mysql://gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306/gcc_itcell_management_services
spring.datasource.username=root
spring.datasource.password=gcc-facial-password
@ -44,6 +44,7 @@ logging.level.org.hibernate.orm.jdbc.bind=TRACE
logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
# Log values bound as placeholders in JdbcTemplate queries
logging.level.org.springframework.jdbc.core.StatementCreatorUtils=TRACE
logging.level.org.springframework.jdbc.core=ERROR
# Production context path
server.servlet.context-path=/gcc_manpower

22
src/main/resources/templates/fragments/tapalheader.html

@ -0,0 +1,22 @@
<th:block th:fragment="tapalheader">
<!-- Awesome Font -->
<link rel="stylesheet" th:href="@{/assets/font-awesome-6.5.2/css/all.min.css}" type="text/css">
<!-- Bootstrap CSS -->
<link rel="stylesheet" th:href="@{/assets/bootstrap-5.3.2/css/bootstrap.min.css}" type="text/css">
<!-- CSS for Header -->
<link rel="stylesheet" th:href="@{/assets/css/header-styles.css}" type="text/css">
<div class="header">
<div class="logo-left">
<img th:src="@{/assets/header-images/gcc1.png}" alt="Greater Chennai Corporation Logo">
<div class="logo-text">
<h2>GREATER</h2>
<h2>CHENNAI</h2>
<h2>CORPORATION</h2>
<p>பெருநகர சென்னை மாநகராட்சி</p>
</div>
</div>
<div class="title">
<h2>GCC Tapal Details Management</h2>
</div>
</div>
</th:block>

114
src/main/resources/templates/gccadjustmentmanagement/dashboard.html

@ -460,6 +460,7 @@
.table-responsive-custom {
border-radius: 12px;
overflow-x: auto;
overflow-y: auto;
border: 1px solid var(--slate-200);
}
@ -1192,8 +1193,8 @@
</div>
</div>
<!-- Split-up Table Mode -->
<div id="panel-split-content" style="display: none;"></div>
<!-- Split-up Table Mode style="display: none;"-->
<div id="panel-split-content"></div>
</div>
</div>
@ -1869,6 +1870,7 @@
// On document load
document.addEventListener("DOMContentLoaded", () => {
populateFinancialYears();
restoreDashboardFiltersFromSession();
loadInitialDropdowns().then(() => {
loadRecordsData();
});
@ -2250,6 +2252,37 @@
}
}
// Save dashboard filters to sessionStorage
function saveDashboardFiltersToSession() {
const fyVal = document.getElementById('filter-fin-year') ? document.getElementById('filter-fin-year').value : 'All';
const fromDateVal = document.getElementById('filter-from-date') ? document.getElementById('filter-from-date').value : '';
const toDateVal = document.getElementById('filter-to-date') ? document.getElementById('filter-to-date').value : '';
sessionStorage.setItem('dashboard_filter_fin_year', fyVal);
sessionStorage.setItem('dashboard_filter_from_date', fromDateVal);
sessionStorage.setItem('dashboard_filter_to_date', toDateVal);
}
// Restore dashboard filters from sessionStorage
function restoreDashboardFiltersFromSession() {
const savedFy = sessionStorage.getItem('dashboard_filter_fin_year');
const savedFromDate = sessionStorage.getItem('dashboard_filter_from_date');
const savedToDate = sessionStorage.getItem('dashboard_filter_to_date');
if (savedFy !== null) {
const fySelect = document.getElementById('filter-fin-year');
if (fySelect) fySelect.value = savedFy;
}
if (savedFromDate !== null) {
const fromDateInput = document.getElementById('filter-from-date');
if (fromDateInput) fromDateInput.value = savedFromDate;
}
if (savedToDate !== null) {
const toDateInput = document.getElementById('filter-to-date');
if (toDateInput) toDateInput.value = savedToDate;
}
}
// Load all database files
function loadRecordsData() {
// Reset active filters to All when loading/applying main year filter
@ -2258,6 +2291,8 @@
currentSplitFilter = 'All';
currentPendingSubFilter = 'All';
saveDashboardFiltersToSession();
showLoader(true);
Promise.all([
fetch(contextPath + 'gccadjustmentmanagement/api/list').then(res => res.json()),
@ -2294,6 +2329,36 @@
const toDateVal = document.getElementById('filter-to-date') ? document.getElementById('filter-to-date').value : '';
const cleanFy = str => String(str || '').replace(/\s+/g, '');
const formatDateString = str => {
if (!str) return '';
const parts = str.split('-');
if (parts.length === 3) {
return `${parts[2]}/${parts[1]}/${parts[0]}`;
}
return str;
};
let filterBadges = '';
if (fyFilter !== 'All') {
filterBadges += `<span class="badge bg-primary-light text-primary border border-primary-subtle px-2.5 py-1 rounded-pill me-2" style="font-size: 0.78rem; font-family: 'Outfit', sans-serif;"><i class="fa-solid fa-calendar me-1"></i>FY: ${fyFilter}</span>`;
}
if (fromDateVal) {
filterBadges += `<span class="badge bg-primary-light text-primary border border-primary-subtle px-2.5 py-1 rounded-pill me-2" style="font-size: 0.78rem; font-family: 'Outfit', sans-serif;"><i class="fa-solid fa-calendar-day me-1"></i>From: ${formatDateString(fromDateVal)}</span>`;
}
if (toDateVal) {
filterBadges += `<span class="badge bg-primary-light text-primary border border-primary-subtle px-2.5 py-1 rounded-pill me-2" style="font-size: 0.78rem; font-family: 'Outfit', sans-serif;"><i class="fa-solid fa-calendar-day me-1"></i>To: ${formatDateString(toDateVal)}</span>`;
}
if (!filterBadges) {
filterBadges = `<span class="badge bg-secondary-subtle text-secondary px-2.5 py-1 rounded-pill" style="font-size: 0.78rem; font-family: 'Outfit', sans-serif;"><i class="fa-solid fa-filter-list me-1"></i>All Records</span>`;
}
const activeFiltersDisplay = `
<div class="col-12 text-center mb-2 animate-fade-in">
<span style="font-size: 0.8rem; font-weight: 600; color: var(--slate-600); margin-right: 5px;">Selected Filter:</span>
${filterBadges}
</div>
`;
let records = allRecords;
if (fyFilter !== 'All') {
records = records.filter(r => cleanFy(r.fin_year) === cleanFy(fyFilter));
@ -2430,6 +2495,7 @@
<i class="fa-solid fa-chart-line me-2 text-primary"></i> General Status Counts
</h5>
</div>
${activeFiltersDisplay}
`;
// 1. Total Files Button (col-lg-4 for 3-in-a-row layout)
@ -2481,6 +2547,7 @@
<i class="fa-solid fa-tags me-2 text-primary"></i> Advance Type Wise Counts
</h5>
</div>
${activeFiltersDisplay}
`;
// Render all advance types dynamically
@ -2679,7 +2746,11 @@
function filterDashboardByReason(catId, reason) {
const fy = document.getElementById('filter-fin-year').value;
const url = `${contextPath}gccadjustmentmanagement/details?status=${activeStatusFilter}&catId=${catId}&reason=${reason}&fy=${fy}`;
const fromDate = document.getElementById('filter-from-date') ? document.getElementById('filter-from-date').value : '';
const toDate = document.getElementById('filter-to-date') ? document.getElementById('filter-to-date').value : '';
let url = `${contextPath}gccadjustmentmanagement/details?status=${activeStatusFilter}&catId=${catId}&reason=${reason}&fy=${fy}`;
if (fromDate) url += `&fromDate=${fromDate}`;
if (toDate) url += `&toDate=${toDate}`;
//window.open(url, '_blank');
window.location.href = url;
}
@ -3050,7 +3121,7 @@
let currentSNo = startSNo;
records.forEach(r => {
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '0';
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '-';
const piAmt = r.pi_amt ? Number(r.pi_amt).toLocaleString('en-IN') : '-';
const fiAmt = r.fi_amt ? Number(r.fi_amt).toLocaleString('en-IN') : '-';
// <td class="text-center"><span class="badge bg-info text-dark">${escapeHtml(r.resolved_fund_type || '-')}</span></td>
@ -3146,7 +3217,7 @@
const r = allRecords.find(item => item.id === id);
if (!r) return;
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '0';
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '-';
const piAmt = r.pi_amt ? Number(r.pi_amt).toLocaleString('en-IN') : '-';
const fiAmt = r.fi_amt ? Number(r.fi_amt).toLocaleString('en-IN') : '-';
@ -3301,6 +3372,9 @@
setupExistingFileLink('form-as-final-file', r.as_final_file_path);
setupExistingFileLink('form-tc-file', r.tc_file_path);
// Recalculate balance based on populated values
calculateBalance();
// Show all edit-only fields
document.querySelectorAll('.edit-only-field').forEach(el => el.style.display = 'block');
@ -3354,10 +3428,16 @@
}
function calculateBalance() {
const piVal = parseFloat(document.getElementById('form-pi-amt').value) || 0;
const fiVal = parseFloat(document.getElementById('form-fi-amt').value) || 0;
const balVal = piVal - fiVal;
document.getElementById('form-bal-amt').value = balVal.toFixed(2);
const piValStr = document.getElementById('form-pi-amt').value;
const fiValStr = document.getElementById('form-fi-amt').value;
if (fiValStr === "" || fiValStr === null || fiValStr === undefined) {
document.getElementById('form-bal-amt').value = "";
} else {
const piVal = parseFloat(piValStr) || 0;
const fiVal = parseFloat(fiValStr) || 0;
const balVal = piVal - fiVal;
document.getElementById('form-bal-amt').value = balVal.toFixed(2);
}
}
function setupExistingFileLink(inputId, filePath) {
@ -3412,6 +3492,9 @@
const form = document.getElementById('adjustment-registration-form');
// Recalculate balance before form submission
calculateBalance();
// Temporarily enable disabled fields (like fin_year in edit mode) so they are submitted in FormData
const disabledInputs = form.querySelectorAll(':disabled');
disabledInputs.forEach(input => input.removeAttribute('disabled'));
@ -3570,7 +3653,7 @@
const tbody = tempTable.querySelector('tbody');
let currentSNo = 1;
filteredRecords.forEach(r => {
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '0';
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '-';
const piAmt = r.pi_amt ? Number(r.pi_amt).toLocaleString('en-IN') : '-';
const fiAmt = r.fi_amt ? Number(r.fi_amt).toLocaleString('en-IN') : '-';
@ -3839,7 +3922,7 @@
let currentSNo = startIndex + 1;
paginatedRecords.forEach(r => {
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '0';
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '-';
const piAmt = r.pi_amt ? Number(r.pi_amt).toLocaleString('en-IN') : '-';
const fiAmt = r.fi_amt ? Number(r.fi_amt).toLocaleString('en-IN') : '-';
@ -4023,7 +4106,7 @@
const tbody = tempTable.querySelector('tbody');
let currentSNo = 1;
dashFilteredRecords.forEach(r => {
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '0';
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '-';
const piAmt = r.pi_amt ? Number(r.pi_amt).toLocaleString('en-IN') : '-';
const fiAmt = r.fi_amt ? Number(r.fi_amt).toLocaleString('en-IN') : '-';
@ -4598,6 +4681,9 @@
// Reset all dashboard summary counts and filter selections
function resetDashboardFilters() {
sessionStorage.removeItem('dashboard_filter_fin_year');
sessionStorage.removeItem('dashboard_filter_from_date');
sessionStorage.removeItem('dashboard_filter_to_date');
hideDashboardDetails();
// 1. Reset Split filter to All
currentSplitFilter = 'All';
@ -4775,7 +4861,7 @@
// Set modal title
const timeEl = document.getElementById('latest-update-time');
const timeStr = timeEl ? timeEl.textContent : '';
document.getElementById('latest-updates-modal-title').innerHTML = `<i class="fa-solid fa-bell text-warning me-2"></i> Latest Updates (${timeStr})`;
document.getElementById('latest-updates-modal-title').innerHTML = `<i ></i> Latest Updates (${timeStr})`;
// Populate the modal table body
const tbody = document.getElementById('latest-updates-modal-body');
@ -4783,7 +4869,7 @@
let currentSNo = 1;
files.forEach(r => {
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '0';
const balAmt = r.bal_amt ? Number(r.bal_amt).toLocaleString('en-IN') : '-';
// Determine update status tag
let statusBadge = '';

79
src/main/resources/templates/gccadjustmentmanagement/details.html

@ -133,6 +133,24 @@
width: 100%;
}
.btn-back {
background-color: rgba(255, 255, 255, 0.15);
color: white;
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 8px;
padding: 6px 14px;
font-size: 0.88rem;
font-weight: 500;
text-decoration: none;
transition: all 0.2s;
}
.btn-back:hover {
background-color: rgba(255, 255, 255, 0.25);
color: white;
border: 1px solid rgba(255, 255, 255, 0.5);
}
.table-custom th {
position: sticky;
top: 0;
@ -784,6 +802,8 @@
let filterCatId = 'TOTAL';
let filterReason = 'Total';
let filterFy = 'All';
let filterFromDate = '';
let filterToDate = '';
let activeQuickFilter = 'All';
let activeAdvTypeFilter = 'TOTAL';
let allFileStatuses = [];
@ -865,10 +885,16 @@
}
function calculateBalance() {
const piVal = parseFloat(document.getElementById('form-pi-amt').value) || 0;
const fiVal = parseFloat(document.getElementById('form-fi-amt').value) || 0;
const balVal = piVal - fiVal;
document.getElementById('form-bal-amt').value = balVal.toFixed(2);
const piValStr = document.getElementById('form-pi-amt').value;
const fiValStr = document.getElementById('form-fi-amt').value;
if (fiValStr === "" || fiValStr === null || fiValStr === undefined) {
document.getElementById('form-bal-amt').value = "";
} else {
const piVal = parseFloat(piValStr) || 0;
const fiVal = parseFloat(fiValStr) || 0;
const balVal = piVal - fiVal;
document.getElementById('form-bal-amt').value = balVal.toFixed(2);
}
}
function toggleVendorNameVisibility() {
@ -920,6 +946,10 @@
showLoader(true);
const form = document.getElementById('adjustment-registration-form');
// Recalculate balance before form submission
calculateBalance();
const disabledInputs = form.querySelectorAll(':disabled');
disabledInputs.forEach(input => input.removeAttribute('disabled'));
@ -978,6 +1008,8 @@
filterCatId = params.get('catId') || 'TOTAL';
filterReason = params.get('reason') || 'Total';
filterFy = params.get('fy') || 'All';
filterFromDate = params.get('fromDate') || '';
filterToDate = params.get('toDate') || '';
activeAdvTypeFilter = filterCatId;
@ -1043,10 +1075,27 @@
const container = document.getElementById('active-badges-container');
if (!container) return;
const formatDateString = str => {
if (!str) return '';
const parts = str.split('-');
if (parts.length === 3) {
return `${parts[2]}/${parts[1]}/${parts[0]}`;
}
return str;
};
let html = '';
// Financial Year Badge
html += `<span class="active-filter-badge"><i class="fa-solid fa-calendar-days text-primary"></i>FY: ${filterFy}</span>`;
// Date Range Badges
if (filterFromDate) {
html += `<span class="active-filter-badge"><i class="fa-solid fa-calendar-day text-primary"></i>From: ${formatDateString(filterFromDate)}</span>`;
}
if (filterToDate) {
html += `<span class="active-filter-badge"><i class="fa-solid fa-calendar-day text-primary"></i>To: ${formatDateString(filterToDate)}</span>`;
}
// Status Badge
let statusLabel = filterStatus === 'All' ? 'All Files' : (filterStatus === 'Adjusted' ? 'Adjusted Files Only' : 'Pending Files Only');
html += `<span class="active-filter-badge"><i class="fa-solid fa-toggle-on text-primary"></i>Status: ${statusLabel}</span>`;
@ -1239,6 +1288,9 @@
setupExistingFileLink('form-as-final-file', r.as_final_file_path);
setupExistingFileLink('form-tc-file', r.tc_file_path);
// Recalculate balance based on populated values
calculateBalance();
// Set Form Title
document.getElementById('registration-title').innerHTML = `Edit File Registration (ID: ${r.id})`;
@ -1273,6 +1325,25 @@
baseFyStatusRecords = baseFyStatusRecords.filter(r => cleanFy(r.fin_year) === cleanFy(filterFy));
}
// Date Range Filters
if (filterFromDate) {
const fromDate = new Date(filterFromDate);
fromDate.setHours(0, 0, 0, 0);
baseFyStatusRecords = baseFyStatusRecords.filter(r => {
const recordDate = r.cdate ? new Date(r.cdate) : null;
return recordDate && recordDate >= fromDate;
});
}
if (filterToDate) {
const toDate = new Date(filterToDate);
toDate.setHours(23, 59, 59, 999);
baseFyStatusRecords = baseFyStatusRecords.filter(r => {
const recordDate = r.cdate ? new Date(r.cdate) : null;
return recordDate && recordDate <= toDate;
});
}
// 2. Filter Status
if (filterStatus === 'Adjusted') {
baseFyStatusRecords = baseFyStatusRecords.filter(r => isAdjusted(r));

5022
src/main/resources/templates/gcctapaldetailsmanagement/dashboard.html
File diff suppressed because it is too large
View File

117
src/main/resources/templates/gcctapaldetailsmanagement/login.html

@ -0,0 +1,117 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GCC Tapal Details Management - Login</title>
<!-- CSRF Tokens -->
<meta th:if="${_csrf != null}" name="_csrf" th:content="${_csrf.token}" />
<meta th:if="${_csrf != null}" name="_csrf_header" th:content="${_csrf.headerName}" />
<!-- Include CSS -->
<link rel="stylesheet" type="text/css" th:href="@{/assets/css/login-form-styles.css}">
<!-- Awesome Font -->
<link th:href="@{/assets/font-awesome-6.5.2/css/all.min.css}" rel="stylesheet" type="text/css">
</head>
<body>
<div class="container">
<img th:src="@{/assets/header-images/gcc1.png}" alt="Greater Chennai Corporation" class="small-logo">
<h3>GREATER CHENNAI CORPORATION</h3>
<h4>பெருநகர சென்னை மாநகராட்சி</h4>
<br>
<h3>GCC Tapal Details Management</h3>
<br>
<h2>Login</h2>
<div id="error-box"
style="color: #c0392b; font-weight: 500; font-size: 0.85rem; margin-bottom: 1.5rem; text-align: center; display: none;">
<i class="fa-solid fa-circle-exclamation"></i> <span id="error-text">Invalid username or password!</span>
</div>
<form id="loginForm" onsubmit="handleLogin(event)">
<div class="input-field">
<input type="text" name="usrName" id="usrName" placeholder="Enter Username" required
autocomplete="username">
<div class="underline"></div>
</div>
<div class="input-field">
<input type="password" name="usrPass" id="usrPass" placeholder="Enter Password" required
autocomplete="current-password">
<div class="underline"></div>
</div>
<input type="submit" value="Login" id="submit-btn">
</form>
</div>
<!-- Footer Fragment -->
<th:block th:replace="~{fragments/footer :: footer}"></th:block>
<!-- Custom JS -->
<script th:inline="javascript">
const contextPath = /*[[@{/}]]*/ '';
</script>
<script>
function handleLogin(event) {
event.preventDefault();
const errorBox = document.getElementById("error-box");
const errorText = document.getElementById("error-text");
const submitBtn = document.getElementById("submit-btn");
errorBox.style.display = "none";
submitBtn.disabled = true;
submitBtn.value = 'Authenticating...';
const username = document.getElementById("usrName").value;
const password = document.getElementById("usrPass").value;
const urlParams = new URLSearchParams();
urlParams.append('usrName', username);
urlParams.append('usrPass', password);
// Fetch CSRF tokens
const csrfToken = document.querySelector("meta[name='_csrf']")?.getAttribute("content");
const csrfHeader = document.querySelector("meta[name='_csrf_header']")?.getAttribute("content");
const headers = {
'Content-Type': 'application/x-www-form-urlencoded'
};
if (csrfToken && csrfHeader) {
headers[csrfHeader] = csrfToken;
}
fetch(contextPath + 'gcctapaldetailsmanagement/api/login', {
method: 'POST',
headers: headers,
body: urlParams
})
.then(response => response.json())
.then(data => {
if (data.result) {
alert("username: " + data.usrName + "usrPass:" + data.password);
sessionStorage.setItem("tap_usrName", data.usrName);
window.location.href = contextPath + 'gcctapaldetailsmanagement/dashboard';
} else {
submitBtn.disabled = false;
submitBtn.value = 'Login';
errorText.textContent = data.error || "Authentication failed.";
errorBox.style.display = "block";
}
})
.catch(err => {
console.error("Login Error:", err);
submitBtn.disabled = false;
submitBtn.value = 'Login';
errorText.textContent = "Network error. Please try again later.";
errorBox.style.display = "block";
});
}
</script>
</body>
</html>

25
src/main/resources/templates/home/home.html

@ -902,13 +902,15 @@
</div>
<form id="updateEmployeeForm" onsubmit="updateEmployee(event)" style="display: none;">
<input type="hidden" id="update-emp-code-original">
<div class="row g-3">
<!-- Employee Code (Read-Only) -->
<!-- Employee Code -->
<div class="col-md-6">
<label for="update-emp-code" class="form-label fw-semibold text-secondary">Employee Code
(Uneditable)</label>
<input type="text" class="form-control w-100" id="update-emp-code" readonly
style="border-radius: 8px; background-color: #eef2f6;">
<span class="text-danger">*</span>
</label>
<input type="text" class="form-control w-100" id="update-emp-code" required
style="border-radius: 8px;">
</div>
<!-- Name -->
<div class="col-md-6">
@ -1390,14 +1392,14 @@
<thead style="background-color: #f8fafc; position: sticky; top: 0; z-index: 1;">
<tr>
<th style="width: 60px;" class="text-center">S.No</th>
<th>Last Updated Date</th>
<th>EmpCode</th>
<th>Name</th>
<th>Email</th>
<th>Mobile</th>
<th>User Type</th>
<th>Designation</th>
<th>Location</th>
<th>Vendor Name</th>
<th>Last Updated Date</th>
<th>Last Updated By</th>
</tr>
</thead>
@ -3567,6 +3569,7 @@
.then(data => {
if (data.success && data.employee) {
const emp = data.employee;
document.getElementById("update-emp-code-original").value = emp.emp_code || '';
document.getElementById("update-emp-code").value = emp.emp_code || '';
document.getElementById("update-emp-name").value = emp.name || '';
document.getElementById("update-emp-email").value = emp.email || '';
@ -3664,6 +3667,7 @@
// Update Employee form action
function updateEmployee(event) {
event.preventDefault();
const originalCode = document.getElementById("update-emp-code-original").value.trim();
const code = document.getElementById("update-emp-code").value.trim();
const name = document.getElementById("update-emp-name").value.trim();
const email = document.getElementById("update-emp-email").value.trim();
@ -3686,6 +3690,7 @@
'Content-Type': 'application/json'
},
body: JSON.stringify({
old_emp_code: originalCode,
emp_code: code,
name: name,
email: email,
@ -3816,9 +3821,9 @@
if (filePath && filePath !== "-" && filePath.trim() !== "") {
let url = filePath;
if (contextPath && contextPath.endsWith('/') && url.startsWith('/')) {
url = contextPath + url.substring(1);
url = contextPath + url.substring(1) + ".pdf";
} else {
url = contextPath + url;
url = contextPath + url + ".pdf";
}
currentFileLink.href = url;
currentFileContainer.setAttribute("style", "display: flex !important;");
@ -4870,14 +4875,14 @@
tr.innerHTML = `
<td class="text-center fw-bold text-secondary">${index + 1}</td>
<td class="fw-semibold text-dark">${escapeHtml(formattedDate)}</td>
<td><span class="badge bg-secondary">${escapeHtml(item.emp_code || '-')}</span></td>
<td>${escapeHtml(item.name || '-')}</td>
<td>${escapeHtml(item.email || '-')}</td>
<td>${escapeHtml(item.mobile || '-')}</td>
<td><span class="badge bg-secondary">${escapeHtml(item.user_type || '-')}</span></td>
<td class="fw-semibold">${escapeHtml(item.designation || '-')}</td>
<td><span class="badge bg-light text-dark border">${escapeHtml(item.location || '-')}</span></td>
<td class="fw-semibold text-secondary">${escapeHtml(item.vendor_name || '-')}</td>
<td class="fw-semibold text-dark">${escapeHtml(formattedDate)}</td>
<td class="text-center fw-semibold text-secondary">${escapeHtml(item.updated_by_name || '-')}</td>
`;
tbody.appendChild(tr);

Loading…
Cancel
Save