From d61a07540fd6d67568e9399e9913699cfe088209 Mon Sep 17 00:00:00 2001 From: kanimozhi Date: Mon, 23 Feb 2026 17:24:18 +0530 Subject: [PATCH] Clean and safe message template added --- .../controller/CreateEventAPIController.java | 361 ++- .../vendor/service/createventService.java | 1159 ++++---- .../vtrack/service/VehicleService.java | 25 +- .../templates/modules/vendors/EventList.html | 664 +++-- .../modules/vendors/RequestList.html | 782 ++--- .../vendors/streetVendorRequestForm.html | 2609 +++++++++-------- 6 files changed, 2887 insertions(+), 2713 deletions(-) diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/controller/CreateEventAPIController.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/controller/CreateEventAPIController.java index 38f4f5f8..6c004c63 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/controller/CreateEventAPIController.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/controller/CreateEventAPIController.java @@ -31,187 +31,182 @@ import in.gov.chennaicorporation.gccoffice.vendor.service.StreetVendorService; @RequestMapping("/gcc/api/vending") @RestController public class CreateEventAPIController { - - @Autowired - private createventService createventservices; - - @Autowired - private StreetVendorService StreetVendorService; - -// @Autowired -// private Environment environment; - - @PostMapping("/save") - public ResponseEntity> saveEventWithFile( - @RequestParam("eventName") String eventName, - @RequestParam("eventDate") String eventDateStr, - @RequestParam("file") MultipartFile file, - @RequestParam("cby") String cby) { - - Map response = new HashMap<>(); - - try { - - if (file == null || file.isEmpty()) { - response.put("status", false); - response.put("message", "failed"); - response.put("description", "File is required"); - return ResponseEntity.badRequest().body(response); - } - - if (eventName == null || eventName.trim().isEmpty()) { - response.put("status", false); - response.put("message", "failed"); - response.put("description", "Event name cannot be empty"); - return ResponseEntity.badRequest().body(response); - } - - LocalDate eventDate; - try { - eventDate = LocalDate.parse(eventDateStr); - } catch (Exception ex) { - response.put("status", false); - response.put("message", "failed"); - response.put("description", "Invalid date format (use yyyy-MM-dd)"); - return ResponseEntity.badRequest().body(response); - } - - - String eventFilePath = StreetVendorService.fileUpload(file, "event_file"); - - if (eventFilePath == null) { - response.put("status", false); - response.put("message", "failed"); - response.put("description", "File upload failed"); - return ResponseEntity.internalServerError().body(response); - } - - - String saveStatus = createventservices.insertEvent(eventName, eventDate, eventFilePath, cby); - - if (saveStatus == null || saveStatus.equalsIgnoreCase("error")) { - response.put("status", false); - response.put("message", "failed"); - response.put("description", "Failed to save event details"); - return ResponseEntity.internalServerError().body(response); - } - - - response.put("status", true); - response.put("message", "success"); - response.put("description", "Details saved successfully"); - return ResponseEntity.ok(response); - - } catch (Exception e) { - e.printStackTrace(); - - response.put("status", false); - response.put("message", "failed"); - response.put("description", "Internal server error: " + e.getMessage()); - return ResponseEntity.internalServerError().body(response); - } - } - - - - //save file and get path -// private String saveFile(MultipartFile file) throws IOException { -// -// String uploadDirectory = environment.getProperty("file.upload.directory"); -// -// String folderName = environment.getProperty("vending.foldername"); -// -// String fileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + "_" + file.getOriginalFilename(); -// -// String folderPath = uploadDirectory + "/" + folderName + "/"; -// -// -// Path dirPath = Paths.get(folderPath); -// if (!Files.exists(dirPath)) { -// Files.createDirectories(dirPath); -// } -// -// Path filePath = dirPath.resolve(fileName); -// -// Files.write(filePath, file.getBytes()); -// -// return filePath.toAbsolutePath().toString(); -// } - - - @GetMapping("/dropdown-Event") - public ResponseEntity>> ViewDropdownEvent() { - try { - List> result = createventservices.ViewDropdownEvent(); - return ResponseEntity.ok(result); - } catch (Exception e) { - Map error = new HashMap<>(); - error.put("error", "Unable to fetch event list"); - error.put("details", e.getMessage()); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(Collections.singletonList(error)); - } - } - - - @GetMapping("/committedropdown") - public List> ViewCommitteeDropdownEvent() { - - return createventservices.ViewCommitteeDropdownEvent(); - - } - - @GetMapping("/getreports") - public List> getreports( - @RequestParam(required = false) String meeting, - @RequestParam(required = false) String status, - @RequestParam(required = false) String zone, - @RequestParam(required = false) String ward, - @RequestParam String userId) { - - List> streetdb = StreetVendorService.getdataforreport(zone,ward); // BASE LIST - List> vendingdb = createventservices.getdataforreport(meeting, status,userId); // FILTERED REQUEST LIST - - // Convert vendingdb to map: vdid → vendor record - Map> vendingMap = vendingdb.stream() - .filter(m -> m.get("vdid") != null) - .collect(Collectors.toMap( - m -> Integer.parseInt(m.get("vdid").toString()), - m -> m - )); - - List> finalList = new ArrayList<>(); - - // Merge logic - for (Map row : streetdb) { - - int id = Integer.parseInt(row.get("id").toString()); - - if (!vendingMap.containsKey(id)) { - continue; - } - - // Merge map - Map merged = new HashMap<>(row); - Map vdata = vendingMap.get(id); - - merged.put("status", vdata.get("status")); - merged.put("remarks", vdata.get("remarks")); - merged.put("uid_no", vdata.get("uid_no")); - merged.put("event_req_id", vdata.get("event_req_id")); - merged.put("cdate", vdata.get("cdate")); - - finalList.add(merged); - } - - return finalList; - } - - @GetMapping("/finalvendorDetailsById") - public List> finalvendorDetailsById(String requestId){ - - return createventservices.finalvendorDetailsById(requestId); - } - - + + @Autowired + private createventService createventservices; + + @Autowired + private StreetVendorService StreetVendorService; + + // @Autowired + // private Environment environment; + + @PostMapping("/save") + public ResponseEntity> saveEventWithFile( + @RequestParam("eventName") String eventName, + @RequestParam("eventDate") String eventDateStr, + @RequestParam("file") MultipartFile file, + @RequestParam("cby") String cby) { + + Map response = new HashMap<>(); + + try { + + if (file == null || file.isEmpty()) { + response.put("status", false); + response.put("message", "failed"); + response.put("description", "File is required"); + return ResponseEntity.badRequest().body(response); + } + + if (eventName == null || eventName.trim().isEmpty()) { + response.put("status", false); + response.put("message", "failed"); + response.put("description", "Event name cannot be empty"); + return ResponseEntity.badRequest().body(response); + } + + LocalDate eventDate; + try { + eventDate = LocalDate.parse(eventDateStr); + } catch (Exception ex) { + response.put("status", false); + response.put("message", "failed"); + response.put("description", "Invalid date format (use yyyy-MM-dd)"); + return ResponseEntity.badRequest().body(response); + } + + String eventFilePath = StreetVendorService.fileUpload(file, "event_file"); + + if (eventFilePath == null) { + response.put("status", false); + response.put("message", "failed"); + response.put("description", "File upload failed"); + return ResponseEntity.internalServerError().body(response); + } + + String saveStatus = createventservices.insertEvent(eventName, eventDate, eventFilePath, cby); + + if (saveStatus == null || saveStatus.equalsIgnoreCase("error")) { + response.put("status", false); + response.put("message", "failed"); + response.put("description", "Failed to save event details"); + return ResponseEntity.internalServerError().body(response); + } + + response.put("status", true); + response.put("message", "success"); + response.put("description", "Details saved successfully"); + return ResponseEntity.ok(response); + + } catch (Exception e) { + e.printStackTrace(); + + response.put("status", false); + response.put("message", "failed"); + response.put("description", "Internal server error: " + e.getMessage()); + return ResponseEntity.internalServerError().body(response); + } + } + + // save file and get path + // private String saveFile(MultipartFile file) throws IOException { + // + // String uploadDirectory = environment.getProperty("file.upload.directory"); + // + // String folderName = environment.getProperty("vending.foldername"); + // + // String fileName = + // LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")) + + // "_" + file.getOriginalFilename(); + // + // String folderPath = uploadDirectory + "/" + folderName + "/"; + // + // + // Path dirPath = Paths.get(folderPath); + // if (!Files.exists(dirPath)) { + // Files.createDirectories(dirPath); + // } + // + // Path filePath = dirPath.resolve(fileName); + // + // Files.write(filePath, file.getBytes()); + // + // return filePath.toAbsolutePath().toString(); + // } + + @GetMapping("/dropdown-Event") + public ResponseEntity>> ViewDropdownEvent(@RequestParam String userId) { + try { + List> result = createventservices.ViewDropdownEvent(userId); + return ResponseEntity.ok(result); + } catch (Exception e) { + Map error = new HashMap<>(); + error.put("error", "Unable to fetch event list"); + error.put("details", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Collections.singletonList(error)); + } + } + + @GetMapping("/committedropdown") + public List> ViewCommitteeDropdownEvent(@RequestParam String userId) { + + return createventservices.ViewCommitteeDropdownEvent(userId); + + } + + @GetMapping("/getreports") + public List> getreports( + @RequestParam(required = false) String meeting, + @RequestParam(required = false) String status, + @RequestParam(required = false) String zone, + @RequestParam(required = false) String ward, + @RequestParam String userId) { + + List> streetdb = StreetVendorService.getdataforreport(zone, ward); // BASE LIST + List> vendingdb = createventservices.getdataforreport(meeting, status, userId); // FILTERED + // REQUEST + // LIST + + // Convert vendingdb to map: vdid → vendor record + Map> vendingMap = vendingdb.stream() + .filter(m -> m.get("vdid") != null) + .collect(Collectors.toMap( + m -> Integer.parseInt(m.get("vdid").toString()), + m -> m)); + + List> finalList = new ArrayList<>(); + + // Merge logic + for (Map row : streetdb) { + + int id = Integer.parseInt(row.get("id").toString()); + + if (!vendingMap.containsKey(id)) { + continue; + } + + // Merge map + Map merged = new HashMap<>(row); + Map vdata = vendingMap.get(id); + + merged.put("status", vdata.get("status")); + merged.put("remarks", vdata.get("remarks")); + merged.put("uid_no", vdata.get("uid_no")); + merged.put("event_req_id", vdata.get("event_req_id")); + merged.put("cdate", vdata.get("cdate")); + + finalList.add(merged); + } + + return finalList; + } + + @GetMapping("/finalvendorDetailsById") + public List> finalvendorDetailsById(String requestId) { + + return createventservices.finalvendorDetailsById(requestId); + } + } diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/service/createventService.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/service/createventService.java index 5b4ed7b5..2b8056fc 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/service/createventService.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vendor/service/createventService.java @@ -28,677 +28,702 @@ import org.springframework.transaction.annotation.Transactional; @Service public class createventService { - -private JdbcTemplate jdbcTemplate; - + + private JdbcTemplate jdbcTemplate; + @Autowired public void setDataSource(@Qualifier("mysqlVendingCommitteDataSource") DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } - + @Autowired public StreetVendorService streetVendorService; -// public boolean isFileExists(String originalFilename) { -// String sql = "SELECT COUNT(*) FROM create_event " + -// "WHERE file_url LIKE ?"; -// String filenamePattern = "%" + originalFilename; // Match filename at the end of the path -// Integer count = jdbcTemplate.queryForObject(sql, Integer.class, filenamePattern); -// return count != null && count > 0; -// } - - public String insertEvent(String eventName, LocalDate eventDate, String fileUrl,String cby) { - String sql = "INSERT INTO create_event (event_name, event_date, file_url,cby) VALUES (?, ?, ?,?)"; - try { - jdbcTemplate.update(sql, eventName, eventDate, fileUrl,cby); - return "success"; + // public boolean isFileExists(String originalFilename) { + // String sql = "SELECT COUNT(*) FROM create_event " + + // "WHERE file_url LIKE ?"; + // String filenamePattern = "%" + originalFilename; // Match filename at the end + // of the path + // Integer count = jdbcTemplate.queryForObject(sql, Integer.class, + // filenamePattern); + // return count != null && count > 0; + // } + + public String insertEvent(String eventName, LocalDate eventDate, String fileUrl, String cby) { + String sql = "INSERT INTO create_event (event_name, event_date, file_url,cby) VALUES (?, ?, ?,?)"; + try { + jdbcTemplate.update(sql, eventName, eventDate, fileUrl, cby); + return "success"; } catch (Exception e) { // TODO: handle exception - e.printStackTrace(); + e.printStackTrace(); } - return "error"; + return "error"; } - - //SELECT * FROM vendingcommitte.create_event - public List> ViewDropdownEvent() { - String sql = "SELECT * FROM create_event WHERE isactive=1 AND isdelete=0"; - return jdbcTemplate.queryForList(sql); + + // SELECT * FROM vendingcommitte.create_event + public List> ViewDropdownEvent(String userId) { + String sql = "SELECT * FROM create_event WHERE cby=? AND isactive=1 AND isdelete=0 "; + return jdbcTemplate.queryForList(sql, userId); } - - public List> ViewCommitteeDropdownEvent() { - String sql = "SELECT req_id,event_name,event_date,DATE_FORMAT(event_date, '%d-%m-%Y') as formated_date " - + "FROM create_event " - + "WHERE isactive=1 AND isdelete=0"; - try { - return jdbcTemplate.queryForList(sql); + + public List> ViewCommitteeDropdownEvent(String userId) { + String sql = "SELECT req_id,event_name,event_date,DATE_FORMAT(event_date, '%d-%m-%Y') as formated_date " + + "FROM create_event " + + "WHERE isactive=1 AND isdelete=0 AND cby=?"; + try { + return jdbcTemplate.queryForList(sql, userId); } catch (Exception e) { // TODO: handle exception - e.printStackTrace(); - return Collections.emptyList(); + e.printStackTrace(); + return Collections.emptyList(); } - + } @Transactional public ResponseEntity> saveVendorDetails(Map payload) { - Map response = new HashMap<>(); + Map response = new HashMap<>(); - int vendor_req_id = Integer.parseInt(payload.get("vendor_req_id").toString()); - String status = payload.get("status").toString(); - String remarks = payload.get("remarks") == null ? "-" : payload.get("remarks").toString(); - int event_req_id = Integer.parseInt(payload.get("event_req_id").toString()); - String vendor_req_number = payload.get("vendor_req_number").toString(); - String zone = payload.get("zone").toString(); - String ward = payload.get("ward").toString(); - String cby = payload.get("cby").toString(); - String mob_no = payload.get("mob_no").toString(); + int vendor_req_id = Integer.parseInt(payload.get("vendor_req_id").toString()); + String status = payload.get("status").toString(); + String remarks = payload.get("remarks") == null ? "-" : payload.get("remarks").toString(); + int event_req_id = Integer.parseInt(payload.get("event_req_id").toString()); + String vendor_req_number = payload.get("vendor_req_number").toString(); + String zone = payload.get("zone").toString(); + String ward = payload.get("ward").toString(); + String cby = payload.get("cby").toString(); + String mob_no = payload.get("mob_no").toString(); - try { - - /* ============================================================ - * CHECK IF vendor is already inside vendor_postponed_list - * ============================================================ */ - String checkPostponedSQL = "SELECT * FROM vendor_postponed_list WHERE vdid=? AND isactive=1"; - List> existingPostponed = - jdbcTemplate.queryForList(checkPostponedSQL, vendor_req_id); + try { - /* ============================================================ - * BACKUP METHOD: insert into postponed_history_log - * ============================================================ */ - if (!existingPostponed.isEmpty()) { - - String backupSQL = "INSERT INTO postponed_history_log " - + "(vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete) " - + "SELECT vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete " - + "FROM vendor_postponed_list WHERE vdid=?"; - - jdbcTemplate.update(backupSQL, vendor_req_id); - } - - /* ============================================================ - * CASE 1: POSTPONED - * ============================================================ */ - if ("Postponed".equalsIgnoreCase(status)) { - - if (existingPostponed.isEmpty()) { - - // INSERT new postponed entry - String insertSQL = "INSERT INTO vendor_postponed_list " - + "(vdid, status, remarks, event_req_id, cby) VALUES (?,?,?,?,?)"; - - jdbcTemplate.update(insertSQL, vendor_req_id, status, remarks, event_req_id, cby); - - } else { - - // UPDATE postponed entry - String updateSQL = "UPDATE vendor_postponed_list " - + "SET status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW() " - + "WHERE vdid=?"; - - jdbcTemplate.update(updateSQL, status, remarks, event_req_id, cby, vendor_req_id); - } - - response.put("status", "success"); - response.put("message", "Details saved successfully!"); - - return ResponseEntity.ok(response); - } - - /* ============================================================ - * CASE 2: APPROVED / REJECTED → Insert into vendor_request_list - * ============================================================ */ - - String insertRequestSQL = "INSERT INTO vendor_request_list " - + "(vdid, status, remarks, event_req_id, cby) VALUES (?, ?, ?, ?, ?)"; - - KeyHolder keyHolder = new GeneratedKeyHolder(); - - jdbcTemplate.update(connection -> { - PreparedStatement ps = connection.prepareStatement(insertRequestSQL, Statement.RETURN_GENERATED_KEYS); - ps.setInt(1, vendor_req_id); - ps.setString(2, status); - ps.setString(3, remarks); - ps.setInt(4, event_req_id); - ps.setString(5, cby); - return ps; - }, keyHolder); - - int generatedId = keyHolder.getKey().intValue(); - - /* ============================================================ - * Assign UID only for APPROVED - * ============================================================ */ - if ("Approved".equalsIgnoreCase(status)) { - String currentYear = java.time.Year.now().toString(); - String uid_no = zone + "_" + ward + "_" + currentYear + "_" + generatedId; - - jdbcTemplate.update("UPDATE vendor_request_list SET uid_no=? WHERE id=?", uid_no, generatedId); - } - - /* ============================================================ - * If POSTPONED ENTRY already exists → update it (after backup) - * ============================================================ */ - if (!existingPostponed.isEmpty()) { - - String updSQL = "UPDATE vendor_postponed_list SET " - + "status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW(),isactive=0,isdelete=1 " - + "WHERE vdid=?"; - - jdbcTemplate.update(updSQL, status, remarks, event_req_id, cby, vendor_req_id); - } - - /* ============================================================ - * Send WhatsApp notification - * ============================================================ */ - String result = sendWhatsappMsg(mob_no, status, vendor_req_number); + /* + * ============================================================ + * CHECK IF vendor is already inside vendor_postponed_list + * ============================================================ + */ + String checkPostponedSQL = "SELECT * FROM vendor_postponed_list WHERE vdid=? AND isactive=1"; + List> existingPostponed = jdbcTemplate.queryForList(checkPostponedSQL, vendor_req_id); + + /* + * ============================================================ + * BACKUP METHOD: insert into postponed_history_log + * ============================================================ + */ + if (!existingPostponed.isEmpty()) { + + String backupSQL = "INSERT INTO postponed_history_log " + + "(vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete) " + + "SELECT vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete " + + "FROM vendor_postponed_list WHERE vdid=?"; + + jdbcTemplate.update(backupSQL, vendor_req_id); + } + + /* + * ============================================================ + * CASE 1: POSTPONED + * ============================================================ + */ + if ("Postponed".equalsIgnoreCase(status)) { + + if (existingPostponed.isEmpty()) { + + // INSERT new postponed entry + String insertSQL = "INSERT INTO vendor_postponed_list " + + "(vdid, status, remarks, event_req_id, cby) VALUES (?,?,?,?,?)"; + + jdbcTemplate.update(insertSQL, vendor_req_id, status, remarks, event_req_id, cby); + + } else { + + // UPDATE postponed entry + String updateSQL = "UPDATE vendor_postponed_list " + + "SET status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW() " + + "WHERE vdid=?"; + + jdbcTemplate.update(updateSQL, status, remarks, event_req_id, cby, vendor_req_id); + } + + response.put("status", "success"); + response.put("message", "Details saved successfully!"); + + return ResponseEntity.ok(response); + } + + /* + * ============================================================ + * CASE 2: APPROVED / REJECTED → Insert into vendor_request_list + * ============================================================ + */ + + String insertRequestSQL = "INSERT INTO vendor_request_list " + + "(vdid, status, remarks, event_req_id, cby) VALUES (?, ?, ?, ?, ?)"; + + KeyHolder keyHolder = new GeneratedKeyHolder(); + + jdbcTemplate.update(connection -> { + PreparedStatement ps = connection.prepareStatement(insertRequestSQL, Statement.RETURN_GENERATED_KEYS); + ps.setInt(1, vendor_req_id); + ps.setString(2, status); + ps.setString(3, remarks); + ps.setInt(4, event_req_id); + ps.setString(5, cby); + return ps; + }, keyHolder); + + int generatedId = keyHolder.getKey().intValue(); + + /* + * ============================================================ + * Assign UID only for APPROVED + * ============================================================ + */ + if ("Approved".equalsIgnoreCase(status)) { + String currentYear = java.time.Year.now().toString(); + String uid_no = zone + "_" + ward + "_" + currentYear + "_" + generatedId; + + jdbcTemplate.update("UPDATE vendor_request_list SET uid_no=? WHERE id=?", uid_no, generatedId); + } + + /* + * ============================================================ + * If POSTPONED ENTRY already exists → update it (after backup) + * ============================================================ + */ + if (!existingPostponed.isEmpty()) { + + String updSQL = "UPDATE vendor_postponed_list SET " + + "status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW(),isactive=0,isdelete=1 " + + "WHERE vdid=?"; + + jdbcTemplate.update(updSQL, status, remarks, event_req_id, cby, vendor_req_id); + } + + /* + * ============================================================ + * Send WhatsApp notification + * ============================================================ + */ + String result = sendWhatsappMsg(mob_no, status, vendor_req_number); + + response.put("status", "success"); + response.put("message", result.equals("200") + ? "Details submitted successfully!" + : "Details submitted, but WhatsApp msg failed."); - response.put("status", "success"); - response.put("message", result.equals("200") - ? "Details submitted successfully!" - : "Details submitted, but WhatsApp msg failed."); - - return ResponseEntity.ok(response); + return ResponseEntity.ok(response); - } catch (Exception e) { - e.printStackTrace(); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(Map.of("status", "Error", "message", "Error saving vendor details: " + e.getMessage())); - } + } catch (Exception e) { + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Map.of("status", "Error", "message", "Error saving vendor details: " + e.getMessage())); + } } - - - private String sendWhatsappMsg(String mob_no, String status,String vendor_req_number) { - String urlString=""; - - if("Approved".equals(status)) { - urlString="https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="+mob_no+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=You+are+recognized+as+a+roadside+vendor.+Registration+number%3A+"+vendor_req_number+".&isTemplate=true&footer=GCC+-+IT+Cell"; + private String sendWhatsappMsg(String mob_no, String status, String vendor_req_number) { + String urlString = ""; + + if ("Approved".equals(status)) { + urlString = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" + + mob_no + + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=You+are+recognized+as+a+roadside+vendor.+Registration+number%3A+" + + vendor_req_number + ".&isTemplate=true&footer=GCC+-+IT+Cell"; + } else { + urlString = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" + + mob_no + + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+application+is+rejected+because+your+roadside+vendor+details+are+incorrect.+%0A%0ARegistration+Number%3A+" + + vendor_req_number + "."; } - else { - urlString="https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="+mob_no+"&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+application+is+rejected+because+your+roadside+vendor+details+are+incorrect.+%0A%0ARegistration+Number%3A+"+vendor_req_number+"."; - } - - String res=hitURL(urlString); + + String res = hitURL(urlString); return res; } private String hitURL(String urlString) { String response = ""; try { - URL url = new URL(urlString); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod("GET"); - - int responseCode = connection.getResponseCode(); - response = String.valueOf(responseCode); - System.out.println("Response Code for URL: " + urlString + " is " + responseCode); - - } catch (Exception e) { - e.printStackTrace(); - } - System.out.println("response="+response); + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + int responseCode = connection.getResponseCode(); + response = String.valueOf(responseCode); + System.out.println("Response Code for URL: " + urlString + " is " + responseCode); + + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("response=" + response); return response; } public List> getCommiteeDetails(String event_req_id) { - String sql = "SELECT * " - + "FROM vendor_request_list " - + "WHERE event_req_id=? "; - return jdbcTemplate.queryForList(sql,event_req_id); + String sql = "SELECT * " + + "FROM vendor_request_list " + + "WHERE event_req_id=? "; + return jdbcTemplate.queryForList(sql, event_req_id); } public List removeSavedVendorDetails() { - - String sql="SELECT request_no FROM vendor_request_list"; - - return jdbcTemplate.queryForList(sql,String.class); + + String sql = "SELECT request_no FROM vendor_request_list"; + + return jdbcTemplate.queryForList(sql, String.class); } -// @Transactional -// public ResponseEntity> saveBulkVendorDetails(Map payload) { -// -// Map response = new HashMap<>(); -// -// try { -// -// String status = payload.get("status").toString(); -// String remarks = payload.get("remarks").toString(); -// int eventReqId = Integer.parseInt(payload.get("event_req_id").toString()); -// String cby = payload.get("cby").toString(); -// -// List> vendorList = -// (List>) payload.get("vendorList"); -// -// if (vendorList == null || vendorList.isEmpty()) { -// return ResponseEntity.badRequest() -// .body(Map.of("status", "Error", "message", "No vendor records provided")); -// } -// -// String insertSQL = "INSERT INTO vendor_request_list " + -// "(vdid, status, remarks, event_req_id, uid_no, cby) VALUES (?, ?, ?, ?, '', ?)"; -// -// try { -// jdbcTemplate.batchUpdate(insertSQL, vendorList, vendorList.size(), -// (ps, vendor) -> { -// ps.setInt(1, Integer.parseInt(vendor.get("vendor_req_id").toString())); -// ps.setString(2, status); -// ps.setString(3, remarks); -// ps.setInt(4, eventReqId); -// ps.setString(5, cby); -// } -// ); -// } catch (Exception e) { -// e.printStackTrace(); -// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) -// .body(Map.of("status", "Error", "message", "Batch insert failed: " + e.getMessage())); -// } -// -// -// -// List> insertedIds; -// try { -// insertedIds = jdbcTemplate.queryForList( -// "SELECT id, vdid FROM vendor_request_list ORDER BY id DESC LIMIT ?", -// vendorList.size()); -// } catch (Exception e) { -// e.printStackTrace(); -// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) -// .body(Map.of("status", "Error", "message", "Failed to fetch inserted IDs: " + e.getMessage())); -// } -// -// -// List updateParams = new ArrayList<>(); -// int currentYear = java.time.Year.now().getValue(); -// -// for (int i = 0; i < vendorList.size(); i++) { -// -// Map vendor = vendorList.get(i); -// Map inserted = insertedIds.get(i); -// -// int insertedId = (int) inserted.get("id"); -// String zone = vendor.get("zone").toString(); -// String ward = vendor.get("ward").toString(); -// -// // Assign UID only if Approved -// if ("Approved".equalsIgnoreCase(status)) { -// String uidNo = zone + "_" + ward + "_" + currentYear + "_" + insertedId; -// updateParams.add(new Object[]{uidNo, insertedId}); -// } -// -// // Send WhatsApp for Approved/Rejected -// try { -// if ("Approved".equalsIgnoreCase(status) || "Rejected".equalsIgnoreCase(status)) { -// sendWhatsappMsg( -// vendor.get("mob_no").toString(), -// status, -// vendor.get("vendor_req_number").toString() -// ); -// } -// } catch (Exception e) { -// // WhatsApp failure should NOT stop DB operation -// e.printStackTrace(); -// } -// } -// -// if (!updateParams.isEmpty()) { -// try { -// jdbcTemplate.batchUpdate("UPDATE vendor_request_list SET uid_no=? WHERE id=?", updateParams); -// } catch (Exception e) { -// e.printStackTrace(); -// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) -// .body(Map.of("status", "Error", "message", "Failed to update UID numbers: " + e.getMessage())); -// } -// } -// -// response.put("status", "success"); -// response.put("message", "Details submitted successfully!"); -// -// return ResponseEntity.ok(response); -// -// } catch (Exception e) { -// e.printStackTrace(); -// return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) -// .body(Map.of("status", "Error", "message", "Unexpected error: " + e.getMessage())); -// } -// } - + // @Transactional + // public ResponseEntity> saveBulkVendorDetails(Map payload) { + // + // Map response = new HashMap<>(); + // + // try { + // + // String status = payload.get("status").toString(); + // String remarks = payload.get("remarks").toString(); + // int eventReqId = Integer.parseInt(payload.get("event_req_id").toString()); + // String cby = payload.get("cby").toString(); + // + // List> vendorList = + // (List>) payload.get("vendorList"); + // + // if (vendorList == null || vendorList.isEmpty()) { + // return ResponseEntity.badRequest() + // .body(Map.of("status", "Error", "message", "No vendor records provided")); + // } + // + // String insertSQL = "INSERT INTO vendor_request_list " + + // "(vdid, status, remarks, event_req_id, uid_no, cby) VALUES (?, ?, ?, ?, '', + // ?)"; + // + // try { + // jdbcTemplate.batchUpdate(insertSQL, vendorList, vendorList.size(), + // (ps, vendor) -> { + // ps.setInt(1, Integer.parseInt(vendor.get("vendor_req_id").toString())); + // ps.setString(2, status); + // ps.setString(3, remarks); + // ps.setInt(4, eventReqId); + // ps.setString(5, cby); + // } + // ); + // } catch (Exception e) { + // e.printStackTrace(); + // return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + // .body(Map.of("status", "Error", "message", "Batch insert failed: " + + // e.getMessage())); + // } + // + // + // + // List> insertedIds; + // try { + // insertedIds = jdbcTemplate.queryForList( + // "SELECT id, vdid FROM vendor_request_list ORDER BY id DESC LIMIT ?", + // vendorList.size()); + // } catch (Exception e) { + // e.printStackTrace(); + // return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + // .body(Map.of("status", "Error", "message", "Failed to fetch inserted IDs: " + + // e.getMessage())); + // } + // + // + // List updateParams = new ArrayList<>(); + // int currentYear = java.time.Year.now().getValue(); + // + // for (int i = 0; i < vendorList.size(); i++) { + // + // Map vendor = vendorList.get(i); + // Map inserted = insertedIds.get(i); + // + // int insertedId = (int) inserted.get("id"); + // String zone = vendor.get("zone").toString(); + // String ward = vendor.get("ward").toString(); + // + // // Assign UID only if Approved + // if ("Approved".equalsIgnoreCase(status)) { + // String uidNo = zone + "_" + ward + "_" + currentYear + "_" + insertedId; + // updateParams.add(new Object[]{uidNo, insertedId}); + // } + // + // // Send WhatsApp for Approved/Rejected + // try { + // if ("Approved".equalsIgnoreCase(status) || + // "Rejected".equalsIgnoreCase(status)) { + // sendWhatsappMsg( + // vendor.get("mob_no").toString(), + // status, + // vendor.get("vendor_req_number").toString() + // ); + // } + // } catch (Exception e) { + // // WhatsApp failure should NOT stop DB operation + // e.printStackTrace(); + // } + // } + // + // if (!updateParams.isEmpty()) { + // try { + // jdbcTemplate.batchUpdate("UPDATE vendor_request_list SET uid_no=? WHERE + // id=?", updateParams); + // } catch (Exception e) { + // e.printStackTrace(); + // return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + // .body(Map.of("status", "Error", "message", "Failed to update UID numbers: " + + // e.getMessage())); + // } + // } + // + // response.put("status", "success"); + // response.put("message", "Details submitted successfully!"); + // + // return ResponseEntity.ok(response); + // + // } catch (Exception e) { + // e.printStackTrace(); + // return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + // .body(Map.of("status", "Error", "message", "Unexpected error: " + + // e.getMessage())); + // } + // } + @Transactional public ResponseEntity> saveBulkVendorDetails(Map payload) { - Map response = new HashMap<>(); - - try { - String status = payload.get("status").toString(); - String remarks = payload.get("remarks").toString(); - int eventReqId = Integer.parseInt(payload.get("event_req_id").toString()); - String cby = payload.get("cby").toString(); - - List> vendorList = - (List>) payload.get("vendorList"); - - if (vendorList == null || vendorList.isEmpty()) { - return ResponseEntity.badRequest() - .body(Map.of("status", "Error", "message", "No vendor records provided")); - } - - int currentYear = java.time.Year.now().getValue(); - - /* ============================================================ - * PROCESS EACH VENDOR ONE BY ONE - * ============================================================ */ - for (Map vendor : vendorList) { - - int vendorReqId = Integer.parseInt(vendor.get("vendor_req_id").toString()); - String zone = vendor.get("zone").toString(); - String ward = vendor.get("ward").toString(); - String mob_no = vendor.get("mob_no").toString(); - String vendor_req_number = vendor.get("vendor_req_number").toString(); - - /* ============================================================ - * STEP 1: Check if vendor already exists in postponed list - * ============================================================ */ - String checkSQL = "SELECT * FROM vendor_postponed_list WHERE vdid=? AND isactive=1"; - List> existingPostponed = - jdbcTemplate.queryForList(checkSQL, vendorReqId); - - boolean postponedExists = !existingPostponed.isEmpty(); - - /* ============================================================ - * STEP 2: BACKUP OLD POSTPONED ROW → postponed_history_log - * ============================================================ */ - if (postponedExists) { - String backupSQL = "INSERT INTO postponed_history_log " - + "(vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete) " - + "SELECT vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete " - + "FROM vendor_postponed_list WHERE vdid=?"; - - jdbcTemplate.update(backupSQL, vendorReqId); - } - - /* ============================================================ - * CASE 1: STATUS = POSTPONED - * ============================================================ */ - if ("Postponed".equalsIgnoreCase(status)) { - - if (!postponedExists) { - // INSERT NEW POSTPONED ROW - String insertPostSQL = - "INSERT INTO vendor_postponed_list (vdid, status, remarks, event_req_id, cby) " + - "VALUES (?, ?, ?, ?, ?)"; - - jdbcTemplate.update(insertPostSQL, vendorReqId, status, remarks, eventReqId, cby); - - } else { - // UPDATE EXISTING POSTPONED ROW - String updatePostSQL = - "UPDATE vendor_postponed_list SET status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW() " + - "WHERE vdid=?"; - - jdbcTemplate.update(updatePostSQL, status, remarks, eventReqId, cby, vendorReqId); - } - - continue; // SKIP REQUEST LIST INSERTION - } - - /* ============================================================ - * CASE 2: APPROVED / REJECTED → INSERT INTO vendor_request_list - * ============================================================ */ - - KeyHolder keyHolder = new GeneratedKeyHolder(); - - String insertReqSQL = - "INSERT INTO vendor_request_list (vdid, status, remarks, event_req_id, cby) " + - "VALUES (?, ?, ?, ?, ?)"; - - jdbcTemplate.update(connection -> { - PreparedStatement ps = connection.prepareStatement(insertReqSQL, Statement.RETURN_GENERATED_KEYS); - ps.setInt(1, vendorReqId); - ps.setString(2, status); - ps.setString(3, remarks); - ps.setInt(4, eventReqId); - ps.setString(5, cby); - return ps; - }, keyHolder); - - int generatedId = keyHolder.getKey().intValue(); - - /* ============================================================ - * UID GENERATION FOR APPROVED - * ============================================================ */ - if ("Approved".equalsIgnoreCase(status)) { - - String uidNo = zone + "_" + ward + "_" + currentYear + "_" + generatedId; - - jdbcTemplate.update( - "UPDATE vendor_request_list SET uid_no=? WHERE id=?", - uidNo, generatedId - ); - } - - /* ============================================================ - * UPDATE POSTPONED LIST ALSO IF VENDOR EXISTS (AFTER BACKUP) - * ============================================================ */ - if (postponedExists) { - String updatePostSQL = - "UPDATE vendor_postponed_list SET status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW(),isactive=0,isdelete=1 " + - "WHERE vdid=?"; - - jdbcTemplate.update(updatePostSQL, status, remarks, eventReqId, cby, vendorReqId); - } - - /* ============================================================ - * SEND WHATSAPP (NON-BLOCKING) - * ============================================================ */ - try { - if ("Approved".equalsIgnoreCase(status) || "Rejected".equalsIgnoreCase(status)) { - sendWhatsappMsg(mob_no, status, vendor_req_number); - } - } catch (Exception e) { - e.printStackTrace(); // Should not stop DB save - } - } - - /* ============================================================ - * SUCCESS RESPONSE - * ============================================================ */ - response.put("status", "success"); - response.put("message", "Vendor details submitted successfully!"); - - return ResponseEntity.ok(response); - - } catch (Exception e) { - e.printStackTrace(); - - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(Map.of("status", "Error", "message", "Unexpected error: " + e.getMessage())); - } - } + Map response = new HashMap<>(); + try { + String status = payload.get("status").toString(); + String remarks = payload.get("remarks").toString(); + int eventReqId = Integer.parseInt(payload.get("event_req_id").toString()); + String cby = payload.get("cby").toString(); + + List> vendorList = (List>) payload.get("vendorList"); + + if (vendorList == null || vendorList.isEmpty()) { + return ResponseEntity.badRequest() + .body(Map.of("status", "Error", "message", "No vendor records provided")); + } + + int currentYear = java.time.Year.now().getValue(); + + /* + * ============================================================ + * PROCESS EACH VENDOR ONE BY ONE + * ============================================================ + */ + for (Map vendor : vendorList) { + + int vendorReqId = Integer.parseInt(vendor.get("vendor_req_id").toString()); + String zone = vendor.get("zone").toString(); + String ward = vendor.get("ward").toString(); + String mob_no = vendor.get("mob_no").toString(); + String vendor_req_number = vendor.get("vendor_req_number").toString(); + + /* + * ============================================================ + * STEP 1: Check if vendor already exists in postponed list + * ============================================================ + */ + String checkSQL = "SELECT * FROM vendor_postponed_list WHERE vdid=? AND isactive=1"; + List> existingPostponed = jdbcTemplate.queryForList(checkSQL, vendorReqId); + + boolean postponedExists = !existingPostponed.isEmpty(); + + /* + * ============================================================ + * STEP 2: BACKUP OLD POSTPONED ROW → postponed_history_log + * ============================================================ + */ + if (postponedExists) { + String backupSQL = "INSERT INTO postponed_history_log " + + "(vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete) " + + "SELECT vdid, event_req_id, status, remarks, cby, cdate, updated_by, updated_date, isactive, isdelete " + + "FROM vendor_postponed_list WHERE vdid=?"; + + jdbcTemplate.update(backupSQL, vendorReqId); + } + + /* + * ============================================================ + * CASE 1: STATUS = POSTPONED + * ============================================================ + */ + if ("Postponed".equalsIgnoreCase(status)) { + + if (!postponedExists) { + // INSERT NEW POSTPONED ROW + String insertPostSQL = "INSERT INTO vendor_postponed_list (vdid, status, remarks, event_req_id, cby) " + + + "VALUES (?, ?, ?, ?, ?)"; + + jdbcTemplate.update(insertPostSQL, vendorReqId, status, remarks, eventReqId, cby); + + } else { + // UPDATE EXISTING POSTPONED ROW + String updatePostSQL = "UPDATE vendor_postponed_list SET status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW() " + + + "WHERE vdid=?"; + + jdbcTemplate.update(updatePostSQL, status, remarks, eventReqId, cby, vendorReqId); + } + + continue; // SKIP REQUEST LIST INSERTION + } + + /* + * ============================================================ + * CASE 2: APPROVED / REJECTED → INSERT INTO vendor_request_list + * ============================================================ + */ + + KeyHolder keyHolder = new GeneratedKeyHolder(); + + String insertReqSQL = "INSERT INTO vendor_request_list (vdid, status, remarks, event_req_id, cby) " + + "VALUES (?, ?, ?, ?, ?)"; + + jdbcTemplate.update(connection -> { + PreparedStatement ps = connection.prepareStatement(insertReqSQL, Statement.RETURN_GENERATED_KEYS); + ps.setInt(1, vendorReqId); + ps.setString(2, status); + ps.setString(3, remarks); + ps.setInt(4, eventReqId); + ps.setString(5, cby); + return ps; + }, keyHolder); + + int generatedId = keyHolder.getKey().intValue(); + + /* + * ============================================================ + * UID GENERATION FOR APPROVED + * ============================================================ + */ + if ("Approved".equalsIgnoreCase(status)) { + + String uidNo = zone + "_" + ward + "_" + currentYear + "_" + generatedId; + + jdbcTemplate.update( + "UPDATE vendor_request_list SET uid_no=? WHERE id=?", + uidNo, generatedId); + } + + /* + * ============================================================ + * UPDATE POSTPONED LIST ALSO IF VENDOR EXISTS (AFTER BACKUP) + * ============================================================ + */ + if (postponedExists) { + String updatePostSQL = "UPDATE vendor_postponed_list SET status=?, remarks=?, event_req_id=?, updated_by=?, updated_date=NOW(),isactive=0,isdelete=1 " + + + "WHERE vdid=?"; + + jdbcTemplate.update(updatePostSQL, status, remarks, eventReqId, cby, vendorReqId); + } + + /* + * ============================================================ + * SEND WHATSAPP (NON-BLOCKING) + * ============================================================ + */ + try { + if ("Approved".equalsIgnoreCase(status) || "Rejected".equalsIgnoreCase(status)) { + sendWhatsappMsg(mob_no, status, vendor_req_number); + } + } catch (Exception e) { + e.printStackTrace(); // Should not stop DB save + } + } + + /* + * ============================================================ + * SUCCESS RESPONSE + * ============================================================ + */ + response.put("status", "success"); + response.put("message", "Vendor details submitted successfully!"); + + return ResponseEntity.ok(response); + } catch (Exception e) { + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Map.of("status", "Error", "message", "Unexpected error: " + e.getMessage())); + } + } public List> getsavedids() { - String sql="SELECT vdid FROM vendor_request_list WHERE isactive=1"; + String sql = "SELECT vdid FROM vendor_request_list WHERE isactive=1"; try { return jdbcTemplate.queryForList(sql); } catch (Exception e) { - + return Collections.emptyList(); } - + } - + public List> getPostponedList() { - String sql = "SELECT * FROM vendor_postponed_list WHERE isactive=1 AND isdelete=0"; - try { - return jdbcTemplate.queryForList(sql); - } catch (Exception e) { - return Collections.emptyList(); - } + String sql = "SELECT * FROM vendor_postponed_list WHERE isactive=1 AND isdelete=0"; + try { + return jdbcTemplate.queryForList(sql); + } catch (Exception e) { + return Collections.emptyList(); + } } - public List> getdataforreport(String meeting, String status,String cby) { + public List> getdataforreport(String meeting, String status, String cby) { StringBuilder sql = new StringBuilder( - "SELECT * FROM (" + - " SELECT vdid, status, remarks, uid_no, event_req_id, cdate,cby " + - " FROM vendor_request_list " + - " UNION ALL " + - " SELECT vdid, status, remarks, NULL AS uid_no, event_req_id, cdate,cby " + - " FROM vendor_postponed_list " + - ") AS all_requests WHERE 1=1" - ); - - - List params = new ArrayList<>(); - - try { - - // Filter by Meeting ID - if (meeting != null && !meeting.trim().isEmpty()) { - sql.append(" AND event_req_id = ?"); - params.add(Integer.parseInt(meeting)); - } - - // Filter by status (Approved / Rejected / Postponed) - if (status != null && !status.trim().isEmpty()) { - sql.append(" AND status = ?"); - params.add(status); - } - - sql.append(" AND cby = ?"); - params.add(Integer.parseInt(cby)); - - return jdbcTemplate.queryForList(sql.toString(), params.toArray()); - - } catch (Exception e) { - e.printStackTrace(); - return Collections.emptyList(); - } - } + "SELECT * FROM (" + + " SELECT vdid, status, remarks, uid_no, event_req_id, cdate,cby " + + " FROM vendor_request_list " + + " UNION ALL " + + " SELECT vdid, status, remarks, NULL AS uid_no, event_req_id, cdate,cby " + + " FROM vendor_postponed_list " + + ") AS all_requests WHERE 1=1"); + List params = new ArrayList<>(); - public List> finalvendorDetailsById(String requestId) { + try { - // Base vendor details (1 row) - List> org_list = streetVendorService.vendorDetailsById(requestId); + // Filter by Meeting ID + if (meeting != null && !meeting.trim().isEmpty()) { + sql.append(" AND event_req_id = ?"); + params.add(Integer.parseInt(meeting)); + } - if (org_list.isEmpty()) { - return Collections.emptyList(); - } + // Filter by status (Approved / Rejected / Postponed) + if (status != null && !status.trim().isEmpty()) { + sql.append(" AND status = ?"); + params.add(status); + } - Map base = org_list.get(0); + sql.append(" AND cby = ?"); + params.add(Integer.parseInt(cby)); - // Get full request history (multiple rows) - List> historyList = getvendingfinaldata(requestId); + return jdbcTemplate.queryForList(sql.toString(), params.toArray()); - // Merge base vendor details into every history record - List> output = new ArrayList<>(); + } catch (Exception e) { + e.printStackTrace(); + return Collections.emptyList(); + } + } - for (Map h : historyList) { - Map merged = new HashMap<>(base); - merged.putAll(h); // add status/history into same row - output.add(merged); - } + public List> finalvendorDetailsById(String requestId) { - return output; - } + // Base vendor details (1 row) + List> org_list = streetVendorService.vendorDetailsById(requestId); + if (org_list.isEmpty()) { + return Collections.emptyList(); + } + Map base = org_list.get(0); - private List> getvendingfinaldata(String requestId) { + // Get full request history (multiple rows) + List> historyList = getvendingfinaldata(requestId); - String sql = - "SELECT all_logs.vdid, " + - " all_logs.vc_status, " + - " all_logs.vc_remarks, " + - " CONCAT_WS('- ', ce.event_name, DATE_FORMAT(ce.event_date, '%d-%m-%Y')) AS event_name, " + - " DATE_FORMAT(all_logs.cdate, '%d-%m-%Y %l:%i %p') AS vc_Inspection_date " + - "FROM (" + + // Merge base vendor details into every history record + List> output = new ArrayList<>(); - " SELECT vrl.vdid, vrl.status AS vc_status, vrl.remarks AS vc_remarks, " + - " vrl.event_req_id, vrl.cdate " + - " FROM vendor_request_list vrl " + - " WHERE vrl.vdid = ? AND vrl.isactive = 1 " + + for (Map h : historyList) { + Map merged = new HashMap<>(base); + merged.putAll(h); // add status/history into same row + output.add(merged); + } - " UNION ALL " + + return output; + } - " SELECT vpl.vdid, vpl.status AS vc_status, vpl.remarks AS vc_remarks, " + - " vpl.event_req_id, vpl.cdate " + - " FROM vendor_postponed_list vpl " + - " WHERE vpl.vdid = ? AND vpl.isactive = 1 " + + private List> getvendingfinaldata(String requestId) { - " UNION ALL " + + String sql = "SELECT all_logs.vdid, " + + " all_logs.vc_status, " + + " all_logs.vc_remarks, " + + " CONCAT_WS('- ', ce.event_name, DATE_FORMAT(ce.event_date, '%d-%m-%Y')) AS event_name, " + + " DATE_FORMAT(all_logs.cdate, '%d-%m-%Y %l:%i %p') AS vc_Inspection_date " + + "FROM (" + - " SELECT phl.vdid, phl.status AS vc_status, phl.remarks AS vc_remarks, " + - " phl.event_req_id, phl.cdate " + - " FROM postponed_history_log phl " + - " WHERE phl.vdid = ? " + + " SELECT vrl.vdid, vrl.status AS vc_status, vrl.remarks AS vc_remarks, " + + " vrl.event_req_id, vrl.cdate " + + " FROM vendor_request_list vrl " + + " WHERE vrl.vdid = ? AND vrl.isactive = 1 " + - ") AS all_logs " + + " UNION ALL " + - "LEFT JOIN create_event ce ON ce.req_id = all_logs.event_req_id " + + " SELECT vpl.vdid, vpl.status AS vc_status, vpl.remarks AS vc_remarks, " + + " vpl.event_req_id, vpl.cdate " + + " FROM vendor_postponed_list vpl " + + " WHERE vpl.vdid = ? AND vpl.isactive = 1 " + - "ORDER BY all_logs.cdate ASC"; + " UNION ALL " + - try { - return jdbcTemplate.queryForList(sql, requestId, requestId, requestId); - } catch (Exception e) { - e.printStackTrace(); - return Collections.emptyList(); - } - } + " SELECT phl.vdid, phl.status AS vc_status, phl.remarks AS vc_remarks, " + + " phl.event_req_id, phl.cdate " + + " FROM postponed_history_log phl " + + " WHERE phl.vdid = ? " + + ") AS all_logs " + + "LEFT JOIN create_event ce ON ce.req_id = all_logs.event_req_id " + + + "ORDER BY all_logs.cdate ASC"; + + try { + return jdbcTemplate.queryForList(sql, requestId, requestId, requestId); + } catch (Exception e) { + e.printStackTrace(); + return Collections.emptyList(); + } + } public Map getLatestPostponed(String vdid) { - String sql = "SELECT status, remarks, DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') AS date " + - "FROM vendor_postponed_list WHERE vdid = ? ORDER BY cdate DESC LIMIT 1"; + String sql = "SELECT status, remarks, DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') AS date " + + "FROM vendor_postponed_list WHERE vdid = ? ORDER BY cdate DESC LIMIT 1"; - List> list = jdbcTemplate.queryForList(sql, vdid); + List> list = jdbcTemplate.queryForList(sql, vdid); - return list.isEmpty() ? null : list.get(0); + return list.isEmpty() ? null : list.get(0); } - + public List> getPostponedHistory(String vdid) { - String sql = "SELECT status, remarks, DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') AS date " + - "FROM postponed_history_log WHERE vdid = ? ORDER BY cdate DESC"; + String sql = "SELECT status, remarks, DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') AS date " + + "FROM postponed_history_log WHERE vdid = ? ORDER BY cdate DESC"; - return jdbcTemplate.queryForList(sql, vdid); + return jdbcTemplate.queryForList(sql, vdid); } - public Map checkVendorInVendingTables(Integer vdid) { - Map result = new HashMap<>(); + Map result = new HashMap<>(); - // 1. Check postponed table - String sqlPostponed = "SELECT COUNT(*) FROM vendor_postponed_list WHERE vdid=? AND isactive=1"; - Integer postponed = jdbcTemplate.queryForObject(sqlPostponed, Integer.class, vdid); - if (postponed != null && postponed > 0) { - result.put("status", "POSTPONED"); - return result; - } + // 1. Check postponed table + String sqlPostponed = "SELECT COUNT(*) FROM vendor_postponed_list WHERE vdid=? AND isactive=1"; + Integer postponed = jdbcTemplate.queryForObject(sqlPostponed, Integer.class, vdid); + if (postponed != null && postponed > 0) { + result.put("status", "POSTPONED"); + return result; + } - // 2. Check vendor_request_list (latest status) - String sqlRequest = - "SELECT status FROM vendor_request_list WHERE vdid=? AND isactive=1 ORDER BY id DESC LIMIT 1"; + // 2. Check vendor_request_list (latest status) + String sqlRequest = "SELECT status FROM vendor_request_list WHERE vdid=? AND isactive=1 ORDER BY id DESC LIMIT 1"; - List> reqList = jdbcTemplate.queryForList(sqlRequest, vdid); - if (reqList.isEmpty()) { - result.put("status", "NO_EVENT"); - return result; - } + List> reqList = jdbcTemplate.queryForList(sqlRequest, vdid); + if (reqList.isEmpty()) { + result.put("status", "NO_EVENT"); + return result; + } - String status = reqList.get(0).get("status").toString(); - result.put("status", status); + String status = reqList.get(0).get("status").toString(); + result.put("status", status); - return result; + return result; } - - } diff --git a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java index 74c58a6e..e6830b37 100644 --- a/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java +++ b/gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/vtrack/service/VehicleService.java @@ -671,7 +671,7 @@ public class VehicleService { break; case "23": - System.out.println("TempID is 22 (1590940 - Green Committee Report - IMAGE - STATIC)"); + System.out.println("TempID is 23 (1590940 - Green Committee Report - IMAGE - STATIC)"); urlString = "https://media.smsgupshup.com/GatewayAPI/rest?" + "userid=" + username + "&password=" + password @@ -693,6 +693,29 @@ public class VehicleService { break; + case "24": + System.out.println("TempID is 24 (1590940 - Clean and Safe Guidelines - IMAGE - STATIC)"); + urlString = "https://media.smsgupshup.com/GatewayAPI/rest?" + + "userid=" + username + + "&password=" + password + + "&send_to=" + sendTo + + "&v=1.1&format=json" + + "&msg_type=IMAGE" + + "&method=SENDMEDIAMESSAGE" + + "&caption=%2AGCC+Enforcement+Team+Monitoring%2A%0A%0AToday%27s+%28" + msgDate + + "%29+Zone+wise+Enforcement+Team+activity+details+shared+above+for+your+reference.%0A%0AFor+more+details%2C+please+click+the+link+below." + + "&media_url=" + fileURL + + "&isTemplate=true&footer=GCC+-+IT+Cell"; + + urlString = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?type=template" + + "&apikey=" + apikey + + "&from=" + from + + "&to={{to}}&templateid=2784943" + + "&url=" + fileURL + + "&placeholders=Clean%20and%20Safe%20Construction%20-%20Vehicle%20Violation"; + + break; + default: System.out.println("TempID (" + tempid + ") is unknown"); } diff --git a/gcc_officer_portal/src/main/resources/templates/modules/vendors/EventList.html b/gcc_officer_portal/src/main/resources/templates/modules/vendors/EventList.html index aada0f14..ab442942 100644 --- a/gcc_officer_portal/src/main/resources/templates/modules/vendors/EventList.html +++ b/gcc_officer_portal/src/main/resources/templates/modules/vendors/EventList.html @@ -1,39 +1,42 @@ + - - - -
- -
- - -
- -
- -
-
- - -
- - -
-
-
- Reports Filters -
-
-
- -
- - -
- -
- - -
- - -
- - -
- -
- - -
- - +
+ + +
+ +
+ +
+
+ + +
+ + +
+
+
+ Reports Filters +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+ + - -
- -
-
- - - -
-
- -
- -
-
-
Vendors Meeting List

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
S.NoRequest NoZoneWardPublic NameMobileStatusView Details
S.NoRequest NoZoneWardPublic NameMobileStatusView Details
- -
-
-
- - - - - - -
- - -
+ +
+ +
+
+ + + +
+
+ +
+ +
+
+
Vendors Meeting List
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
S.NoRequest NoZoneWardPublic NameMobileStatusView Details
S.NoRequest NoZoneWardPublic NameMobileStatusView Details
+ +
+
+
+ + + + + + +
+ + +
+
+ + + + + + + + - - - -
- - - - - -
- - - - - - - - + + + + + + - + + + + + + \ No newline at end of file diff --git a/gcc_officer_portal/src/main/resources/templates/modules/vendors/RequestList.html b/gcc_officer_portal/src/main/resources/templates/modules/vendors/RequestList.html index 161620d7..70199c9b 100644 --- a/gcc_officer_portal/src/main/resources/templates/modules/vendors/RequestList.html +++ b/gcc_officer_portal/src/main/resources/templates/modules/vendors/RequestList.html @@ -1,39 +1,42 @@ + - - - -
- -
- - -
- -
- -
-
- - +
+ + +
+ +
+ +
+
+ + - -
- -
-
-
-
-
- - -
- -
- - -
-
-
-
Vendors Request List

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - -
S.No - Select first 20 - Request NoZoneWardNameMobileAddressView DetailsStatusRemarksAction
-
-
-
-
- - - - - - - -
- - -
+ +
+ +
+
+
+
+
+ + +
+ +
+ + +
+
+
+
Vendors Request List
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
S.No + Select first 20 + Request NoZoneWardNameMobileAddressView DetailsStatusRemarksAction
+
+
+
+
+ + + + + + + +
+ +
- - - - - - - - - - - - -
-
- - - -
- - - - - -
- - - - - - - - + + + + + + - + + + \ No newline at end of file diff --git a/gcc_officer_portal/src/main/resources/templates/modules/vendors/streetVendorRequestForm.html b/gcc_officer_portal/src/main/resources/templates/modules/vendors/streetVendorRequestForm.html index 462d3ff4..97549822 100644 --- a/gcc_officer_portal/src/main/resources/templates/modules/vendors/streetVendorRequestForm.html +++ b/gcc_officer_portal/src/main/resources/templates/modules/vendors/streetVendorRequestForm.html @@ -1,311 +1,329 @@ - + + + - -
- -
- - -
- -
- -
-
- - -
- -
-
- -
- -
Business Details | வியாபார விவரங்கள்
-
- -
+
+ +
+ + +
+ +
+ +
+
+ - -
- *Note: Click all the checkboxes above to submit the form. +
+
+ -
-
- - -
-
-
+
+ +
+
+
- - -
- - - - - + + + + - - - - - + + + - searchBox.addListener('places_changed', function () { - const places = searchBox.getPlaces(); - if (places.length === 0) return; - if (marker) marker.setMap(null); - const place = places[0]; - if (!place.geometry) return; + + \ No newline at end of file