From a9e5b3bb29d37e509ab239934d2935e1c7074f0a Mon Sep 17 00:00:00 2001 From: yoganandhank Date: Tue, 18 Aug 2026 11:36:34 +0530 Subject: [PATCH] new schema added and table name changes for every services to added in new schema and all serivces and some pages changes --- .../config/AppUserDetailsService.java | 2 +- .../gcc_manpower/config/DataSourceConfig.java | 117 +- .../gcc_manpower/config/SecurityConfig.java | 14 +- .../service/AdjustmentService.java | 48 +- .../service/GccServiceDocumentsService.java | 47 +- .../GccServicePaymentTrackerService.java | 68 +- .../controller/TapalController.java | 106 + .../service/TapalService.java | 34 + .../service/TonerService.java | 124 +- .../gcc_manpower/service/AppUserService.java | 141 +- .../resources/application-local.properties | 3 +- .../resources/application-prod.properties | 3 +- .../templates/fragments/tapalheader.html | 22 + .../gccadjustmentmanagement/dashboard.html | 114 +- .../gccadjustmentmanagement/details.html | 79 +- .../gcctapaldetailsmanagement/dashboard.html | 5022 +++++++++++++++++ .../gcctapaldetailsmanagement/login.html | 117 + src/main/resources/templates/home/home.html | 25 +- 18 files changed, 5791 insertions(+), 295 deletions(-) create mode 100644 src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/controller/TapalController.java create mode 100644 src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/service/TapalService.java create mode 100644 src/main/resources/templates/fragments/tapalheader.html create mode 100644 src/main/resources/templates/gcctapaldetailsmanagement/dashboard.html create mode 100644 src/main/resources/templates/gcctapaldetailsmanagement/login.html diff --git a/src/main/java/com/gcc_manpower/config/AppUserDetailsService.java b/src/main/java/com/gcc_manpower/config/AppUserDetailsService.java index ab5b5b3..3bd6b44 100644 --- a/src/main/java/com/gcc_manpower/config/AppUserDetailsService.java +++ b/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); } diff --git a/src/main/java/com/gcc_manpower/config/DataSourceConfig.java b/src/main/java/com/gcc_manpower/config/DataSourceConfig.java index fa5d0b9..fd46342 100644 --- a/src/main/java/com/gcc_manpower/config/DataSourceConfig.java +++ b/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); + // } } diff --git a/src/main/java/com/gcc_manpower/config/SecurityConfig.java b/src/main/java/com/gcc_manpower/config/SecurityConfig.java index 8bd9e7a..c415f7a 100644 --- a/src/main/java/com/gcc_manpower/config/SecurityConfig.java +++ b/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"); } diff --git a/src/main/java/com/gcc_manpower/gccadjustmentmanagement/service/AdjustmentService.java b/src/main/java/com/gcc_manpower/gccadjustmentmanagement/service/AdjustmentService.java index e0c6a00..40b6dfb 100644 --- a/src/main/java/com/gcc_manpower/gccadjustmentmanagement/service/AdjustmentService.java +++ b/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> 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> 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> 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) != '-') " + diff --git a/src/main/java/com/gcc_manpower/gccservicedocuments/service/GccServiceDocumentsService.java b/src/main/java/com/gcc_manpower/gccservicedocuments/service/GccServiceDocumentsService.java index 3e14986..ef34ed3 100644 --- a/src/main/java/com/gcc_manpower/gccservicedocuments/service/GccServiceDocumentsService.java +++ b/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 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 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 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 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 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 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 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 getDocumentById(Long id) { - String sql = "SELECT * FROM documents_uploads WHERE id = ?"; + String sql = "SELECT * FROM services_documents_uploads WHERE id = ?"; try { List> list = jdbcTemplate.queryForList(sql, id); if (!list.isEmpty()) { @@ -233,7 +233,7 @@ public class GccServiceDocumentsService { try { Map 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 params = new ArrayList<>(); params.add(title.trim()); params.add(String.valueOf(subCategoryId)); @@ -290,7 +291,7 @@ public class GccServiceDocumentsService { } public List 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> 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> 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> 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) { diff --git a/src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java b/src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java index 395fc10..0676b9b 100644 --- a/src/main/java/com/gcc_manpower/gccservicepaymenttracker/service/GccServicePaymentTrackerService.java +++ b/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 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 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> 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> 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> 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 { diff --git a/src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/controller/TapalController.java b/src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/controller/TapalController.java new file mode 100644 index 0000000..eb7104d --- /dev/null +++ b/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 validateLogin( + @RequestParam("usrName") String usrName, + @RequestParam("usrPass") String usrPass, + HttpSession session) { + + Map 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"; + } +} diff --git a/src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/service/TapalService.java b/src/main/java/com/gcc_manpower/gcctapaldetailsmanagement/service/TapalService.java new file mode 100644 index 0000000..b13ad1c --- /dev/null +++ b/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> 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(); + } + } + +} diff --git a/src/main/java/com/gcc_manpower/gcctonermanagement/service/TonerService.java b/src/main/java/com/gcc_manpower/gcctonermanagement/service/TonerService.java index 9cf7fc4..437f748 100644 --- a/src/main/java/com/gcc_manpower/gcctonermanagement/service/TonerService.java +++ b/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> 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> 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> 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> 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 getDashboardMetrics() { Map 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> 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> 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 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> 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 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> 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> 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) { diff --git a/src/main/java/com/gcc_manpower/service/AppUserService.java b/src/main/java/com/gcc_manpower/service/AppUserService.java index 93fd44b..84178cd 100644 --- a/src/main/java/com/gcc_manpower/service/AppUserService.java +++ b/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 authenticate(String username, String password) { Map 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> 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> 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> 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> 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> 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 types = jdbcManpowerTemplate.queryForList(checkStandbySql, String.class, userTypeStr, userTypeStr); if (types != null && !types.isEmpty()) { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index e47e476..a625ec0 100644 --- a/src/main/resources/application-local.properties +++ b/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 diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 0e8745a..530ca7f 100644 --- a/src/main/resources/application-prod.properties +++ b/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 diff --git a/src/main/resources/templates/fragments/tapalheader.html b/src/main/resources/templates/fragments/tapalheader.html new file mode 100644 index 0000000..0cdc38c --- /dev/null +++ b/src/main/resources/templates/fragments/tapalheader.html @@ -0,0 +1,22 @@ + + + + + + + +
+
+ Greater Chennai Corporation Logo +
+

GREATER

+

CHENNAI

+

CORPORATION

+

பெருநகர சென்னை மாநகராட்சி

+
+
+
+

GCC Tapal Details Management

+
+
+
\ No newline at end of file diff --git a/src/main/resources/templates/gccadjustmentmanagement/dashboard.html b/src/main/resources/templates/gccadjustmentmanagement/dashboard.html index af5ed9a..4f1d5cc 100644 --- a/src/main/resources/templates/gccadjustmentmanagement/dashboard.html +++ b/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 @@ - - + +
@@ -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 += `FY: ${fyFilter}`; + } + if (fromDateVal) { + filterBadges += `From: ${formatDateString(fromDateVal)}`; + } + if (toDateVal) { + filterBadges += `To: ${formatDateString(toDateVal)}`; + } + if (!filterBadges) { + filterBadges = `All Records`; + } + + const activeFiltersDisplay = ` +
+ Selected Filter: + ${filterBadges} +
+ `; + let records = allRecords; if (fyFilter !== 'All') { records = records.filter(r => cleanFy(r.fin_year) === cleanFy(fyFilter)); @@ -2430,6 +2495,7 @@ General Status Counts + ${activeFiltersDisplay} `; // 1. Total Files Button (col-lg-4 for 3-in-a-row layout) @@ -2481,6 +2547,7 @@ Advance Type Wise Counts + ${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') : '-'; // ${escapeHtml(r.resolved_fund_type || '-')} @@ -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 = ` Latest Updates (${timeStr})`; + document.getElementById('latest-updates-modal-title').innerHTML = ` 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 = ''; diff --git a/src/main/resources/templates/gccadjustmentmanagement/details.html b/src/main/resources/templates/gccadjustmentmanagement/details.html index 57dd84b..f63c7c0 100644 --- a/src/main/resources/templates/gccadjustmentmanagement/details.html +++ b/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 += `FY: ${filterFy}`; + // Date Range Badges + if (filterFromDate) { + html += `From: ${formatDateString(filterFromDate)}`; + } + if (filterToDate) { + html += `To: ${formatDateString(filterToDate)}`; + } + // Status Badge let statusLabel = filterStatus === 'All' ? 'All Files' : (filterStatus === 'Adjusted' ? 'Adjusted Files Only' : 'Pending Files Only'); html += `Status: ${statusLabel}`; @@ -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)); diff --git a/src/main/resources/templates/gcctapaldetailsmanagement/dashboard.html b/src/main/resources/templates/gcctapaldetailsmanagement/dashboard.html new file mode 100644 index 0000000..515250a --- /dev/null +++ b/src/main/resources/templates/gcctapaldetailsmanagement/dashboard.html @@ -0,0 +1,5022 @@ + + + + + + + + GCC Payment Tracker - Dashboard + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + Processing... +
+
+ + +
+
+ Greater Chennai Corporation Logo +
+

GREATER CHENNAI CORPORATION

+

பெருநகர சென்னை மாநகராட்சி

+
+
+
+

Tapal File Details Tracker

+
+
+ +
+ +
+ Latest Update: 0 File(s) on + - +
+
+ + + + Guest + + + Logout + +
+
+ +
+ + +
+
+ + As on Date: +
+ +
+ + Completed View Mode: + +
+
+ + +
+ + +
+
+

Total No of Files

+

0

+
+ +
+ + +
+
+

Completed Bills

+

0

+
+ +
+ + +
+
+

Pending Bills

+

0

+
+ +
+ +
+ + +
+ +
+
+
+

+ Total No of Pending Files days wise + count +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Total No of FilesCompleted FilesPending Files1 to 15 Days16 to 30 Days31 to 60 Days61 to 90 Days91 to 120 DaysOver 120 Days
00 + 0000000
+
+

+ Tip: Click on any count cell to filter the + detailed payment tracker list below. +

+
+
+
+ + +
+
+
+

+ Total Bills in Percentage +

+
+
+ +
+
+
+
+ + + + + +
+
+ + + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + + + + + +
+
+ + +
+ +
+

+ + Payment Tracking Details + Type: All Types + +

+
+ + + +
+
+ + +
+
+ Show + + entries +
+
+ Search: + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Sr. No. + Received Date + Invoice Date Physical File No.eFile No./ Receipt No.SubjectType of FileVendor NameAmountAge of Bill (Days)StatusRemarksPayment ReviewLast + Updated At Last Updated ByActions
+ +
+ + +
+
+ Showing 0 to 0 of 0 entries +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/gcctapaldetailsmanagement/login.html b/src/main/resources/templates/gcctapaldetailsmanagement/login.html new file mode 100644 index 0000000..1749b8a --- /dev/null +++ b/src/main/resources/templates/gcctapaldetailsmanagement/login.html @@ -0,0 +1,117 @@ + + + + + + + GCC Tapal Details Management - Login + + + + + + + + + + + + + +
+ +

GREATER CHENNAI CORPORATION

+

பெருநகர சென்னை மாநகராட்சி

+
+

GCC Tapal Details Management

+
+

Login

+ + + +
+
+ +
+
+
+ +
+
+ +
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/home/home.html b/src/main/resources/templates/home/home.html index a253a19..a0ba676 100644 --- a/src/main/resources/templates/home/home.html +++ b/src/main/resources/templates/home/home.html @@ -902,13 +902,15 @@