Browse Source

Changes at map script in register form

master
Hariprasath S 2 months ago
parent
commit
e0a0f96119
  1. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_back_19122025111222_duck-7406987.jpg
  2. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_back_19122025154033_joban-khangura-hG8B9pKiilw-unsplash.jpg
  3. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_front_19122025111222_vladislav-bychkov-88i07ldDamc-unsplash.jpg
  4. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_front_19122025154033_duck-7406987.jpg
  5. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_bank_19122025111221_newuser.jpg
  6. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_bank_19122025154033_checklist_report_20251217_174232.pdf
  7. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_photo_19122025111221_joban-khangura-hG8B9pKiilw-unsplash.jpg
  8. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_photo_19122025154033_checklist_report_20251217_173554.pdf
  9. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_ration_19122025111221_janne-aspegren-2ozvYo7shSA-unsplash.jpg
  10. BIN
      gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_ration_19122025154033_bird.jpg
  11. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_back_02012026144310_checklist_report_20251220_112845.pdf
  12. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_back_02012026144459_checklist_report_20251220_112845.pdf
  13. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_front_02012026144310_polling_personnel_details_20251129_132440.pdf
  14. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_front_02012026144459_polling_personnel_details_20251129_132440.pdf
  15. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_bank_02012026144310_Hall.jpg
  16. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_bank_02012026144459_Hall.jpg
  17. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_photo_02012026144310_newuser.jpg
  18. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_photo_02012026144459_newuser.jpg
  19. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_ration_02012026144310_1st_order_report_20251220_110917.pdf
  20. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_ration_02012026144459_1st_order_report_20251220_110917.pdf
  21. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_20022026095319_vladislav-bychkov-88i07ldDamc-unsplash.jpg
  22. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_20022026095407_vladislav-bychkov-88i07ldDamc-unsplash.jpg
  23. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_20022026152005_duck-7406987.jpg
  24. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_21022026103321_duck-7406987.jpg
  25. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_24022026174727_bird.jpg
  26. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_20022026095319_bird.jpg
  27. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_20022026095407_bird.jpg
  28. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_20022026152005_bird.jpg
  29. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_21022026103321_bird.jpg
  30. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_24022026174727_bird.jpg
  31. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_bank_20022026152005_bird.jpg
  32. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_bank_24022026174727_bird.jpg
  33. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_20022026095319_joban-khangura-hG8B9pKiilw-unsplash.jpg
  34. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_20022026095407_joban-khangura-hG8B9pKiilw-unsplash.jpg
  35. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_20022026152005_bird.jpg
  36. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_21022026103321_bird.jpg
  37. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_24022026174727_bird.jpg
  38. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_20022026095319_joban-khangura-hG8B9pKiilw-unsplash.jpg
  39. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_20022026095407_joban-khangura-hG8B9pKiilw-unsplash.jpg
  40. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_20022026152005_bird.jpg
  41. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_21022026103321_janne-aspegren-2ozvYo7shSA-unsplash.jpg
  42. BIN
      gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_24022026174727_bird.jpg
  43. 25
      pom.xml
  44. 4
      src/main/java/com/gcc/streetvendorlicense/controller/MainController.java
  45. 48
      src/main/java/com/gcc/streetvendorlicense/controller/licenseApicontroller.java
  46. 31
      src/main/java/com/gcc/streetvendorlicense/dto/VendorRequest.java
  47. 248
      src/main/java/com/gcc/streetvendorlicense/service/licenseService.java
  48. 2
      src/main/resources/application-dev.properties
  49. 2
      src/main/resources/application-prod.properties
  50. 2
      src/main/resources/application.properties
  51. BIN
      src/main/resources/fonts/NotoSansTamil-Black.ttf
  52. BIN
      src/main/resources/fonts/NotoSansTamil-Bold.ttf
  53. BIN
      src/main/resources/fonts/NotoSansTamil-Light.ttf
  54. BIN
      src/main/resources/fonts/NotoSansTamil-Medium.ttf
  55. BIN
      src/main/resources/fonts/NotoSansTamil-Regular.ttf
  56. BIN
      src/main/resources/fonts/NotoSansTamil-SemiBold.ttf
  57. 21
      src/main/resources/fonts/fonts.xml
  58. 3
      src/main/resources/jasperreports_extension.properties
  59. 103
      src/main/resources/reports/StreetVendorCertificate.jrxml
  60. 81
      src/main/resources/templates/modules/streetvendorlicense/home.html
  61. 660
      src/main/resources/templates/modules/streetvendorlicense/registerform.html

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_back_19122025111222_duck-7406987.jpg

Before

Width: 5401  |  Height: 3601  |  Size: 3.2 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_back_19122025154033_joban-khangura-hG8B9pKiilw-unsplash.jpg

Before

Width: 2400  |  Height: 3001  |  Size: 2.5 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_front_19122025111222_vladislav-bychkov-88i07ldDamc-unsplash.jpg

Before

Width: 3072  |  Height: 4608  |  Size: 1.7 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/aadhar_front_19122025154033_duck-7406987.jpg

Before

Width: 5401  |  Height: 3601  |  Size: 3.2 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_bank_19122025111221_newuser.jpg

Before

Width: 1440  |  Height: 1482  |  Size: 102 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_bank_19122025154033_checklist_report_20251217_174232.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_photo_19122025111221_joban-khangura-hG8B9pKiilw-unsplash.jpg

Before

Width: 2400  |  Height: 3001  |  Size: 2.5 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_photo_19122025154033_checklist_report_20251217_173554.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_ration_19122025111221_janne-aspegren-2ozvYo7shSA-unsplash.jpg

Before

Width: 2400  |  Height: 3600  |  Size: 915 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2025/12/street_vendor_ration_19122025154033_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_back_02012026144310_checklist_report_20251220_112845.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_back_02012026144459_checklist_report_20251220_112845.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_front_02012026144310_polling_personnel_details_20251129_132440.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/aadhar_front_02012026144459_polling_personnel_details_20251129_132440.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_bank_02012026144310_Hall.jpg

Before

Width: 1771  |  Height: 997  |  Size: 1.6 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_bank_02012026144459_Hall.jpg

Before

Width: 1771  |  Height: 997  |  Size: 1.6 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_photo_02012026144310_newuser.jpg

Before

Width: 1440  |  Height: 1482  |  Size: 102 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_photo_02012026144459_newuser.jpg

Before

Width: 1440  |  Height: 1482  |  Size: 102 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_ration_02012026144310_1st_order_report_20251220_110917.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/01/street_vendor_ration_02012026144459_1st_order_report_20251220_110917.pdf

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_20022026095319_vladislav-bychkov-88i07ldDamc-unsplash.jpg

Before

Width: 3072  |  Height: 4608  |  Size: 1.7 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_20022026095407_vladislav-bychkov-88i07ldDamc-unsplash.jpg

Before

Width: 3072  |  Height: 4608  |  Size: 1.7 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_20022026152005_duck-7406987.jpg

Before

Width: 5401  |  Height: 3601  |  Size: 3.2 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_21022026103321_duck-7406987.jpg

Before

Width: 5401  |  Height: 3601  |  Size: 3.2 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_back_24022026174727_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_20022026095319_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_20022026095407_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_20022026152005_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_21022026103321_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/aadhar_front_24022026174727_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_bank_20022026152005_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_bank_24022026174727_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_20022026095319_joban-khangura-hG8B9pKiilw-unsplash.jpg

Before

Width: 2400  |  Height: 3001  |  Size: 2.5 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_20022026095407_joban-khangura-hG8B9pKiilw-unsplash.jpg

Before

Width: 2400  |  Height: 3001  |  Size: 2.5 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_20022026152005_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_21022026103321_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_photo_24022026174727_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_20022026095319_joban-khangura-hG8B9pKiilw-unsplash.jpg

Before

Width: 2400  |  Height: 3001  |  Size: 2.5 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_20022026095407_joban-khangura-hG8B9pKiilw-unsplash.jpg

Before

Width: 2400  |  Height: 3001  |  Size: 2.5 MiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_20022026152005_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_21022026103321_janne-aspegren-2ozvYo7shSA-unsplash.jpg

Before

Width: 2400  |  Height: 3600  |  Size: 915 KiB

BIN
gcc_mobile_service_uploads/street_vendor_files/2026/02/street_vendor_ration_24022026174727_bird.jpg

Before

Width: 1280  |  Height: 897  |  Size: 191 KiB

25
pom.xml

@ -67,6 +67,31 @@
<version>3.4.1</version> <version>3.4.1</version>
</dependency> </dependency>
<!-- for Downloading as pdf -->
<!--<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.30</version>
</dependency>-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.21.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.21.0</version>
</dependency>
<!--<dependency> <!--<dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

4
src/main/java/com/gcc/streetvendorlicense/controller/MainController.java

@ -92,7 +92,11 @@ public class MainController {
//System.out.println("educationList===="+educationList); //System.out.println("educationList===="+educationList);
model.addAttribute("educationList", educationList); model.addAttribute("educationList", educationList);
List<Map<String, Object>> religionList=licenseservice.fetchReligion();
model.addAttribute("religionList", religionList);
List<Map<String, Object>> DiffAbledList=licenseservice.fetchdifferently_abled();
model.addAttribute("DiffAbledList", DiffAbledList);
List<Map<String, Object>>vendingCategories=licenseservice.fetchvendingCategory(); List<Map<String, Object>>vendingCategories=licenseservice.fetchvendingCategory();
//System.out.println("vendingCategory===="+vendingCategories); //System.out.println("vendingCategory===="+vendingCategories);

48
src/main/java/com/gcc/streetvendorlicense/controller/licenseApicontroller.java

@ -2,6 +2,8 @@ package com.gcc.streetvendorlicense.controller;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -24,6 +26,7 @@ import com.gcc.streetvendorlicense.service.licenseService;
import com.google.zxing.WriterException; import com.google.zxing.WriterException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@RestController @RestController
@RequestMapping("/streetvendorlicense/api") @RequestMapping("/streetvendorlicense/api")
@ -109,6 +112,12 @@ public class licenseApicontroller {
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@GetMapping("/getrelationship")
public List<Map<String, Object>> getrelationship() {
return liservice.fetchrelationship();
}
// @PostMapping("/saveDetails") // @PostMapping("/saveDetails")
@ -199,18 +208,18 @@ public class licenseApicontroller {
String data=request.getTamil_name() +"=="+request.getTamil_f_h_name()+"=="+request.getTamil_landmark()+"=="+request.getTamil_gender()+"=="+request.getTamil_present_district(); String data=request.getTamil_name() +"=="+request.getTamil_f_h_name()+"=="+request.getTamil_landmark()+"=="+request.getTamil_gender()+"=="+request.getTamil_present_district();
System.out.println("data="+data);
//System.out.println("data="+data);
if(request.getDob()!= null) {
LocalDate dob = LocalDate.parse(request.getDob());
if (dob.isAfter(LocalDate.now().minusYears(14))) {
return ResponseEntity.ok(Map.of(
"status", false,
"message", "failed",
"description", "Applicant must be at least 14 years old"
));
}
}
// if(request.getDob()!= null) {
// LocalDate dob = LocalDate.parse(request.getDob());
// if (dob.isAfter(LocalDate.now().minusYears(14))) {
// return ResponseEntity.ok(Map.of(
// "status", false,
// "message", "failed",
// "description", "Applicant must be at least 14 years old"
// ));
// }
// }
// String doorNoVal = (door_no != null && !door_no.trim().isEmpty()) ? door_no : ""; // String doorNoVal = (door_no != null && !door_no.trim().isEmpty()) ? door_no : "";
@ -309,4 +318,21 @@ public class licenseApicontroller {
return liservice.getiddetails(id); return liservice.getiddetails(id);
} }
@GetMapping("/downloadCertificate")
public void downloadCertificate(
@RequestParam Integer vdid,
HttpServletResponse response) throws Exception {
String fileName = LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("ddMMyyyyHHmm"))
+ "_streetvendor_certificate.pdf";
response.setContentType("application/pdf");
response.setHeader(
"Content-Disposition",
"attachment; filename=\"" + fileName + "\"");
liservice.generateCertificate(vdid, response);
}
} }

31
src/main/java/com/gcc/streetvendorlicense/dto/VendorRequest.java

@ -21,7 +21,10 @@ public class VendorRequest {
private String gender; private String gender;
private Integer social_category; private Integer social_category;
private Boolean diff_abled; private Boolean diff_abled;
private Integer education_status;
private Integer diff_type;
private String other_disability;
private Integer education_status;
private Integer religion;
private Integer marital_status; private Integer marital_status;
private Integer no_of_fam_mem; private Integer no_of_fam_mem;
private Boolean are_any_fam_mem_invol_str; private Boolean are_any_fam_mem_invol_str;
@ -241,7 +244,31 @@ public class VendorRequest {
this.tamil_present_district = tamil_present_district; this.tamil_present_district = tamil_present_district;
} }
public Integer getDiff_type() {
return diff_type;
}
public void setDiff_type(Integer diff_type) {
this.diff_type = diff_type;
}
public String getOther_disability() {
return other_disability;
}
public void setOther_disability(String other_disability) {
this.other_disability = other_disability;
}
public Integer getReligion() {
return religion;
}
public void setReligion(Integer religion) {
this.religion = religion;
}
private String familyDetails;
public String getFamilyDetails() {
return familyDetails;
}
public void setFamilyDetails(String familyDetails) {
this.familyDetails = familyDetails;
}
} }

248
src/main/java/com/gcc/streetvendorlicense/service/licenseService.java

@ -1,24 +1,32 @@
package com.gcc.streetvendorlicense.service; package com.gcc.streetvendorlicense.service;
import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.imageio.ImageIO;
import javax.sql.DataSource; import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder; import org.springframework.jdbc.support.KeyHolder;
@ -26,9 +34,21 @@ import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gcc.streetvendorlicense.dto.VendorRequest; import com.gcc.streetvendorlicense.dto.VendorRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
@Service @Service
public class licenseService { public class licenseService {
@ -45,9 +65,11 @@ public class licenseService {
private final Environment environment; private final Environment environment;
private String fileBaseUrl;
public licenseService (Environment environment) { public licenseService (Environment environment) {
this.environment = environment; this.environment = environment;
this.fileBaseUrl = environment.getProperty("fileBaseUrl");
} }
@Autowired @Autowired
@ -354,6 +376,34 @@ public class licenseService {
return gccstrTemplate.queryForList(query); return gccstrTemplate.queryForList(query);
} }
public List<Map<String, Object>> fetchReligion() {
String query = "SELECT id,religion " +
"FROM religion_master " +
"WHERE is_active=1 AND is_delete=0 ";
return gccstrTemplate.queryForList(query);
}
public List<Map<String, Object>> fetchdifferently_abled() {
String query = "SELECT id,name " +
"FROM differently_abled_master " +
"WHERE is_active=1 AND is_delete=0 ";
return gccstrTemplate.queryForList(query);
}
public List<Map<String, Object>> fetchrelationship() {
String query = "SELECT id,name " +
"FROM relationship_master " +
"WHERE is_active=1 AND is_delete=0 ";
return gccstrTemplate.queryForList(query);
}
public List<Map<String, Object>> fetchvendingCategory() { public List<Map<String, Object>> fetchvendingCategory() {
String query = "SELECT id,vending_category_name " + String query = "SELECT id,vending_category_name " +
"FROM vending_category_master " + "FROM vending_category_master " +
@ -414,7 +464,7 @@ public class licenseService {
String wardVal = (request.getWard() != null && !request.getWard().trim().isEmpty()) ? request.getWard() : null; String wardVal = (request.getWard() != null && !request.getWard().trim().isEmpty()) ? request.getWard() : null;
String dobVal = (request.getDob() != null && !request.getDob().trim().isEmpty()) ? request.getDob() : null; String dobVal = (request.getDob() != null && !request.getDob().trim().isEmpty()) ? request.getDob() : null;
String vendingAddressVal = (request.getLandmark() != null && !request.getLandmark().trim().isEmpty()) ? request.getLandmark() : null; String vendingAddressVal = (request.getLandmark() != null && !request.getLandmark().trim().isEmpty()) ? request.getLandmark() : null;
String otherDiff=(request.getOther_disability() != null && !request.getOther_disability().trim().isEmpty()) ? request.getOther_disability() : null;
String sql = "INSERT INTO vendor_details (" String sql = "INSERT INTO vendor_details ("
@ -422,8 +472,9 @@ public class licenseService {
+ "bank_acc_status, bank_passbook, street_vendor_photo, name, f_h_name, mob_no, " + "bank_acc_status, bank_passbook, street_vendor_photo, name, f_h_name, mob_no, "
+ "dob,gender,social_category, diff_abled, education_status, marital_status,no_of_fam_mem, " + "dob,gender,social_category, diff_abled, education_status, marital_status,no_of_fam_mem, "
+ "are_any_fam_mem_invol_str_ven,present_address, present_district, present_pincode, ration_card_photo, aadhar_front_photo, " + "are_any_fam_mem_invol_str_ven,present_address, present_district, present_pincode, ration_card_photo, aadhar_front_photo, "
+ "aadhar_back_photo,aadhar_no,is_web,tamil_name,tamil_f_h_name,tamil_landmark,tamil_gender,tamil_present_district,tamil_vending_category "
+ ") VALUES (?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?)";
+ "aadhar_back_photo,aadhar_no,is_web,tamil_name,tamil_f_h_name,tamil_landmark,tamil_gender,tamil_present_district,tamil_vending_category, "
+ "religion,diff_type,other_disability "
+ ") VALUES (?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
KeyHolder keyHolder = new GeneratedKeyHolder(); KeyHolder keyHolder = new GeneratedKeyHolder();
@ -531,7 +582,12 @@ public class licenseService {
ps.setString(36, request.getTamil_gender()); ps.setString(36, request.getTamil_gender());
ps.setString(37, request.getTamil_present_district()); ps.setString(37, request.getTamil_present_district());
if (request.getTamilvending_category() != null) ps.setInt(38, request.getTamilvending_category()); if (request.getTamilvending_category() != null) ps.setInt(38, request.getTamilvending_category());
else ps.setNull(38, java.sql.Types.INTEGER);
if (request.getReligion() != null) ps.setInt(39, request.getReligion());
else ps.setNull(39, java.sql.Types.INTEGER); else ps.setNull(39, java.sql.Types.INTEGER);
if (request.getDiff_type() != null) ps.setInt(40, request.getDiff_type());
else ps.setNull(40, java.sql.Types.INTEGER);
ps.setString(41, otherDiff);
return ps; return ps;
}, keyHolder); }, keyHolder);
//return keyHolder.getKey().intValue(); //return keyHolder.getKey().intValue();
@ -542,6 +598,55 @@ public class licenseService {
String updateSql = " UPDATE vendor_details SET vendor_req_id = ? WHERE id = ? "; String updateSql = " UPDATE vendor_details SET vendor_req_id = ? WHERE id = ? ";
gccstrTemplate.update(updateSql,refId, generatedId); gccstrTemplate.update(updateSql,refId, generatedId);
if (request.getFamilyDetails() != null && !request.getFamilyDetails().trim().isEmpty()) {
ObjectMapper mapper = new ObjectMapper();
List<Map<String, Object>> members =
mapper.readValue(request.getFamilyDetails(),
new TypeReference<List<Map<String, Object>>>() {});
String familySql =
"INSERT INTO familymembers_details " +
"(vendor_req_id,name,age,relation) " +
"VALUES (?,?,?,?)";
gccstrTemplate.batchUpdate(familySql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Map<String, Object> member = members.get(i);
ps.setString(1, refId);
ps.setString(2,
member.get("name") == null ? null :
member.get("name").toString());
if (member.get("age") != null)
ps.setInt(3,
Integer.parseInt(member.get("age").toString()));
else
ps.setNull(3, Types.INTEGER);
if (member.get("relationship") != null)
ps.setInt(4,
Integer.parseInt(member.get("relationship").toString()));
else
ps.setNull(4, Types.INTEGER);
//ps.setString(5, userId);
}
@Override
public int getBatchSize() {
return members.size();
}
});
}
return refId; return refId;
} }
//return "error"; //return "error";
@ -790,6 +895,19 @@ public class licenseService {
vcStatus vcStatus
)); ));
String certSql =
"SELECT id, street_name, status, " +
"DATE_FORMAT(cdate, '%d-%m-%Y %l:%i %p') AS cdate " +
"FROM vending_certificate " +
"WHERE vdid=? " +
"AND isactive=1 " +
"AND isdelete=0";
List<Map<String, Object>> certificateList =
vendingcommitteTemplate.queryForList(certSql, vdid);
finalObj.put("certificate_details", certificateList);
resultList.add(finalObj); resultList.add(finalObj);
} }
@ -821,10 +939,10 @@ public class licenseService {
// Step 4 → Vending Committee final status // Step 4 → Vending Committee final status
if (vc.equalsIgnoreCase("Postponed")) if (vc.equalsIgnoreCase("Postponed"))
return "Your application is Postponed";
return "Your application is Postponed For ID Card";
if (vc.equalsIgnoreCase("Approved")) if (vc.equalsIgnoreCase("Approved"))
return "Your application is Approved";
return "Your application is Approved For ID Card";
if (vc.equalsIgnoreCase("Rejected")) if (vc.equalsIgnoreCase("Rejected"))
return "Your application is Rejected"; return "Your application is Rejected";
@ -834,5 +952,125 @@ public class licenseService {
} }
public List<Map<String, Object>> vendorDetailsById(String requestId) {
String sql = "SELECT vd.id,vd.vendor_req_id, vd.name, vd.mob_no, date_format(vd.dob,'%d-%m-%Y') as dob_format, vd.gender, vd.diff_abled, vd.f_h_name, scm.category_name, " +
" rm.religion as religion_name,dam.name as diff_name,vd.other_disability,vd.no_of_fam_mem, " +
"CONCAT_WS(', ', vd.present_address, vd.present_district, vd.present_pincode) AS residental_address, " +
"vd.tamil_name,vd.tamil_f_h_name,vd.tamil_landmark,vd.tamil_gender,vd.tamil_present_district,tvcm.tamil_vending_category_name as tamil_vending_category_name,vd.aadhar_no as aadhar_no, "+
"CONCAT_WS(', ', vd.vending_address, vd.vending_district, vd.vending_pincode) AS business_address, vd.bank_acc_status, " +
"ifnull(CONCAT('" + fileBaseUrl + "/gccofficialapp/files',vd.bank_passbook),'') as bank_passbook, " +
"ifnull(CONCAT('" + fileBaseUrl + "/gccofficialapp/files',vd.ration_card_photo),'') as ration_card_photo, " +
"ifnull(CONCAT('" + fileBaseUrl + "/gccofficialapp/files',vd.street_vendor_photo),'') as street_vendor_photo, " +
"ifnull(CONCAT('" + fileBaseUrl + "/gccofficialapp/files',vd.aadhar_front_photo),'') as aadhar_front_photo, " +
"ifnull(CONCAT('" + fileBaseUrl + "/gccofficialapp/files',vd.aadhar_back_photo),'') as aadhar_back_photo, " +
"vcm.vending_category_name, vd.vending_space, vd.pm_svanidhi_loan, vd.zone, vd.ward, " +
"ifnull(vtym.vending_type_name,'N/A') as vendor_type,ifnull(vstym.vending_sub_type_name,'N/A') as vendor_sub_type, ifnull(va1.vendor_id_card,'N/A') as vendor_id_card, ifnull(va1.vending_nature,'N/A') as vending_nature, " +
"ifnull(vtm.vending_time,'N/A') as vending_time, ifnull(tmm.transaction_mode,'N/A') as transaction_mode, ifnull(va1.swanidi_loan_amount,0) as swanidi_loan_amount, " +
"ifnull(CONCAT('" + fileBaseUrl + "/gccofficialapp/files',va1.vendor_space_photo),'') as vendor_space_photo, " +
"va1.status as LI_Status, va1.remarks as LI_Remarks, DATE_FORMAT(va1.cdate, '%d-%m-%Y %l:%i %p') as LI_Cdate, " +
"va2.status as ARO_status, ifnull(va2.remarks,'') as ARO_remarks, DATE_FORMAT(va2.cdate, '%d-%m-%Y %l:%i %p') as ARO_Inspection_date, "+
"va3.status as EE_status, ifnull(va3.remarks,'') as EE_remarks, DATE_FORMAT(va3.cdate, '%d-%m-%Y %l:%i %p') as EE_Inspection_date "+
"FROM vendor_details vd " +
"LEFT JOIN vendor_approval_level_3 va3 ON va3.vdid = vd.id " +
"LEFT JOIN vendor_approval_level_1 va1 on va3.vdid = va1.vdid " +
"LEFT JOIN vendor_approval_level_2 va2 on va3.vdid = va2.vdid " +
"LEFT JOIN education_master em on em.id= vd.education_status " +
"LEFT JOIN marital_status_master msm on msm.id= vd.marital_status " +
"LEFT JOIN social_category_master scm on vd.social_category = scm.id " +
"LEFT JOIN vending_category_master vcm ON vd.vending_category=vcm.id " +
"LEFT JOIN tamil_vending_category_master tvcm ON vd.tamil_vending_category=tvcm.id " +
"LEFT JOIN vending_time_master vtm on va1.vendor_timing_id = vtm.id " +
"LEFT JOIN transaction_mode_master tmm on va1.transaction_mode_id = tmm.id " +
"LEFT JOIN vending_type_master vtym ON va1.vendor_type = vtym.typeid " +
"LEFT JOIN vending_sub_type_master vstym ON va1.vendor_sub_type = vstym.subtypeid " +
"LEFT JOIN religion_master rm on rm.id=vd.religion " +
"LEFT JOIN differently_abled_master dam on dam.id=vd.diff_type " +
"WHERE vd.id = ? ";
List<Map<String, Object>> vendorList = gccstrTemplate.queryForList(sql, requestId);
if (!vendorList.isEmpty()) {
String vendorReqId = (String) vendorList.get(0).get("vendor_req_id");
String familySql =
"SELECT fm.id, fm.name, fm.age, fm.relation, " +
"rm.name AS relation_name " +
"FROM familymembers_details fm " +
"LEFT JOIN relationship_master rm ON rm.id = fm.relation " +
"WHERE fm.vendor_req_id = ? " +
"AND fm.isactive = 1 " +
"AND fm.isdelete = 0";
List<Map<String, Object>> familyMembers =
gccstrTemplate.queryForList(familySql, vendorReqId);
vendorList.get(0).put("familymembers_details", familyMembers);
}
return vendorList;
}
public List<Map<String, Object>> getCertificateDetails(String vendorReqId) {
String sql =
"SELECT id, zone, ward, street_id, street_name, " +
"status, cby, DATE_FORMAT(cdate,'%d-%m-%Y %h:%i %p') AS cdate " +
"FROM vending_certificate " +
"WHERE vdid = ? " +
"AND isactive = 1 " +
"AND isdelete = 0";
return vendingcommitteTemplate.queryForList(sql, vendorReqId);
}
public List<Map<String, Object>> getIDDetails(String vendorReqId) {
String sql = "SELECT *," +
" DATE_FORMAT(cdate,'%d-%m-%Y %h:%i %p') AS id_date" +
" FROM vendor_request_list" +
" WHERE vdid = ? " +
" AND isactive = 1 " +
" AND isdelete = 0";
return vendingcommitteTemplate.queryForList(sql, vendorReqId);
}
public void generateCertificate(Integer vdid,
HttpServletResponse response) throws Exception {
InputStream reportStream =
getClass().getResourceAsStream(
"/reports/StreetVendorCertificate.jrxml");
JasperReport report =
JasperCompileManager.compileReport(reportStream);
Map<String,Object> params = new HashMap<>();
BufferedImage logo =
ImageIO.read(
getClass().getResourceAsStream(
"/static/images/logo.png"));
params.put("LOGO", logo);
JasperPrint print =
JasperFillManager.fillReport(
report,
params,
new JREmptyDataSource(1));
JasperExportManager.exportReportToPdfStream(
print,
response.getOutputStream());
}
} }

2
src/main/resources/application-dev.properties

@ -6,6 +6,8 @@ app.baseUrl=http://localhost:8056/
app.title=GCC STREET VENDOR LICENSE app.title=GCC STREET VENDOR LICENSE
fileBaseUrl=http://localhost:8056
#////////// For street vendor //////////// #////////// For street vendor ////////////
street_vendor_foldername=street_vendor_files street_vendor_foldername=street_vendor_files

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

@ -6,6 +6,8 @@ app.baseUrl=https://gccservices.in/streetvendorlicense/
app.title=GCC STREET VENDOR LICENSE app.title=GCC STREET VENDOR LICENSE
fileBaseUrl=https://gccservices.in
app.getOtpUrl=https://tmegov.onex-aura.com/api/sms? app.getOtpUrl=https://tmegov.onex-aura.com/api/sms?
#////////// For street vendor //////////// #////////// For street vendor ////////////

2
src/main/resources/application.properties

@ -1,3 +1,3 @@
spring.application.name=streetvendorlicense spring.application.name=streetvendorlicense
spring.profiles.active=dev
spring.profiles.active=prod

BIN
src/main/resources/fonts/NotoSansTamil-Black.ttf

BIN
src/main/resources/fonts/NotoSansTamil-Bold.ttf

BIN
src/main/resources/fonts/NotoSansTamil-Light.ttf

BIN
src/main/resources/fonts/NotoSansTamil-Medium.ttf

BIN
src/main/resources/fonts/NotoSansTamil-Regular.ttf

BIN
src/main/resources/fonts/NotoSansTamil-SemiBold.ttf

21
src/main/resources/fonts/fonts.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="Noto Tamil">
<normal><![CDATA[NotoSansTamil-Regular.ttf]]></normal>
<bold><![CDATA[NotoSansTamil-Bold.ttf]]></bold>
<italic><![CDATA[NotoSansTamil-Regular.ttf]]></italic>
<boldItalic><![CDATA[NotoSansTamil-Bold.ttf]]></boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
</fontFamilies>

3
src/main/resources/jasperreports_extension.properties

@ -0,0 +1,3 @@
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.noto=fonts/fonts.xml

103
src/main/resources/reports/StreetVendorCertificate.jrxml

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport
xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="StreetVendorCertificate"
pageWidth="595"
pageHeight="842"
columnWidth="535"
leftMargin="30"
rightMargin="30"
topMargin="20"
bottomMargin="20"
uuid="8f5c0a12-1234-4567-8901-123456789001">
<!-- ====================================================== -->
<!-- PARAMETERS -->
<!-- ====================================================== -->
<parameter name="LOGO" class="java.awt.Image"/>
<!-- ====================================================== -->
<!-- EMPTY QUERY -->
<!-- ====================================================== -->
<queryString>
<![CDATA[]]>
</queryString>
<!-- ====================================================== -->
<!-- TITLE -->
<!-- ====================================================== -->
<title>
<band height="250">
<!-- LOGO -->
<image scaleImage="RetainShape" hAlign="Center" vAlign="Middle">
<reportElement
x="217"
y="0"
width="60"
height="60"/>
<imageExpression><![CDATA[$P{LOGO}]]></imageExpression>
</image>
<!-- GCC -->
<staticText>
<reportElement
x="0"
y="75"
width="535"
height="30"/>
<textElement textAlignment="Center">
<font
fontName="Noto Tamil"
size="20"
isBold="true"
pdfEncoding="Identity-H"
isPdfEmbedded="true"/>
</textElement>
<text><![CDATA[பெருநகர சென்னை மாநகராட்சி]]></text>
</staticText>
<!-- SUB TITLE -->
<staticText>
<reportElement
x="0"
y="115"
width="535"
height="25"/>
<textElement textAlignment="Center">
<font
fontName="Noto Tamil"
size="16"
isBold="true"/>
</textElement>
<text><![CDATA[விற்பனை சான்றிதழ்]]></text>
</staticText>
</band>
</title>
<!-- ====================================================== -->
<!-- DETAIL -->
<!-- ====================================================== -->
<detail>
<band height="10"/>
</detail>
</jasperReport>

81
src/main/resources/templates/modules/streetvendorlicense/home.html

@ -555,7 +555,39 @@ function getdata(mobileNum) {
actionBtn = ` actionBtn = `
<div class="text-center mt-3"> <div class="text-center mt-3">
<button class="btn btn-primary btn-sm" onclick="handleApproved(${item.vdid})"> <button class="btn btn-primary btn-sm" onclick="handleApproved(${item.vdid})">
Download ID
Download ID Card
</button>
</div>
`;
}
let certificatePendingMsg = "";
if (
item.VC_Status &&
item.VC_Status.toLowerCase() === "approved" &&
(!item.certificate_details || item.certificate_details.length === 0)
) {
certificatePendingMsg = `
<div class="alert alert-warning text-center mt-2 mb-0">
<strong>Certificate Process is Pending</strong>
</div>
`;
}
let certificateBtn = "";
if (item.certificate_details &&
item.certificate_details.length > 0) {
certificateBtn = `
<div class="text-center mt-3">
<div class="alert alert-success text-center mt-2 mb-0">
<strong>Certificate process completed</strong>
</div>
<button class="btn btn-success btn-sm mt-3"
onclick="downloadCertificate(${item.vdid})">
Download Certificate
</button> </button>
</div> </div>
`; `;
@ -602,7 +634,7 @@ function getdata(mobileNum) {
<div class="section-title">Vending Committee</div> <div class="section-title">Vending Committee</div>
<div class="info-grid"> <div class="info-grid">
<div><strong>Final Status:</strong> ${badge(item.VC_Status)}</div>
<div><strong>IC card Status:</strong> ${badge(item.VC_Status)}</div>
</div> </div>
<h6 class="mt-3">History</h6> <h6 class="mt-3">History</h6>
@ -614,6 +646,9 @@ function getdata(mobileNum) {
${actionBtn} ${actionBtn}
${certificateBtn}
${certificatePendingMsg}
</div> </div>
</div> </div>
@ -652,6 +687,48 @@ function handleApproved(vdid) {
} }
function downloadCertificate(vdid) {
$.ajax({
url: "/streetvendorlicense/api/downloadCertificate",
type: "GET",
data: {
vdid: vdid
},
xhrFields: {
responseType: "blob"
},
success: function(blob){
const url = window.URL.createObjectURL(blob);
const a=document.createElement("a");
a.href=url;
a.download="StreetVendorCertificate.pdf";
document.body.appendChild(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
},
error:function(){
Swal.fire(
"Error",
"Unable to generate certificate.",
"error"
);
}
});
}
$(document).ready(function () { $(document).ready(function () {
$('#resetBtn').click(function () { $('#resetBtn').click(function () {

660
src/main/resources/templates/modules/streetvendorlicense/registerform.html

@ -108,7 +108,7 @@ label{
max-width: 100%; max-width: 100%;
} }
#pac-input {
/* #pac-input {
position: absolute; position: absolute;
top: 10px; top: 10px;
left: 50%; left: 50%;
@ -119,9 +119,9 @@ label{
border: 1px solid #ccc; border: 1px solid #ccc;
background-color: white; background-color: white;
border-radius: 4px; border-radius: 4px;
}
} */
#search-container {
/* #search-container {
position: absolute; position: absolute;
top: 10px; top: 10px;
left: 50%; left: 50%;
@ -132,8 +132,8 @@ label{
background-color: white; background-color: white;
border-radius: 4px; border-radius: 4px;
padding: 0; padding: 0;
/* Removed extra padding to match the input width */
}
} */
#search-box { #search-box {
width: 100%; width: 100%;
@ -147,7 +147,7 @@ label{
/* Makes sure padding is considered in width */ /* Makes sure padding is considered in width */
} }
#suggestions {
/* #suggestions {
border: 1px solid #ccc; border: 1px solid #ccc;
border-radius: 4px; border-radius: 4px;
max-height: 200px; max-height: 200px;
@ -156,9 +156,7 @@ label{
background-color: white; background-color: white;
display: none; display: none;
width: 100%; width: 100%;
/* Matches the width of the container and input */
box-sizing: border-box; box-sizing: border-box;
/* Ensures the width includes borders and padding */
} }
#suggestions ul { #suggestions ul {
@ -174,7 +172,73 @@ label{
#suggestions ul li:hover { #suggestions ul li:hover {
background-color: #f0f0f0; background-color: #f0f0f0;
}
} */
#pac-input {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 15px;
box-sizing: border-box;
}
#suggestions {
width: 100%;
display: none;
background: #fff;
border: 1px solid #ccc;
border-top: none;
max-height: 220px;
overflow-y: auto;
box-shadow: 0 2px 8px rgba(0, 0, 0, .25);
}
#suggestions ul {
margin: 0;
padding: 0;
list-style: none;
}
#suggestions li {
padding: 10px 12px;
cursor: pointer;
border-bottom: 1px solid #eee;
}
#suggestions li:hover {
background: #f5f5f5;
}
#search-container {
position: absolute;
top: 10px;
left: 50%;
transform: translateX(-50%);
width: 420px;
z-index: 1000;
}
.section-notes { .section-notes {
padding: 20px; padding: 20px;
@ -252,13 +316,15 @@ label{
<h5>Business Details | வியாபார விவரங்கள்</h5></div> <h5>Business Details | வியாபார விவரங்கள்</h5></div>
<div id="mapContainer" style="position: relative; height: 500px;"> <div id="mapContainer" style="position: relative; height: 500px;">
<input id="pac-input" class="controls" type="text" placeholder="Search location">
<div id="googleMap" style="height: 90%; width: 100%;"></div>
<div id="search-container">
<input id="pac-input" class="controls" type="text" placeholder="Search location - please enter minimum of 5 characters ">
<!-- <input type="text" id="search-box" placeholder="Search for a location..."> -->
<div id="suggestions"></div>
</div> </div>
<div id="search-container">
<!-- <input type="text" id="search-box" placeholder="Search for a location..."> -->
<div id="suggestions"></div>
<div id="googleMap" style="height: 90%; width: 100%;"></div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
@ -290,30 +356,30 @@ label{
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Landmark (maximum 255 characters)</label>
<textarea class="form-control" id="landmark" name="landmark" maxlength="255"></textarea>
<label class="form-label">Landmark (maximum 255 characters)<span class="text-danger">*</span></label>
<textarea class="form-control" id="landmark" name="landmark" maxlength="255" required="required"></textarea>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">விற்பனை பகுதி</label>
<textarea class="form-control" id="landmark_tamil" name="landmark_tamil" placeholder="தமிழில் பதிவு செய்யவும்" maxlength="255"></textarea>
<label class="form-label">விற்பனை பகுதி<span class="text-danger">*</span></label>
<textarea class="form-control" id="landmark_tamil" name="landmark_tamil" placeholder="தமிழில் பதிவு செய்யவும்" maxlength="255" required="required"></textarea>
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">District</label>
<input type="text" class="form-control" id="vendor_district" name="vendor_district" oninput="this.value = this.value.replace(/[^a-zA-Z\s]/g, '')" >
<label class="form-label">District<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="vendor_district" name="vendor_district" oninput="this.value = this.value.replace(/[^a-zA-Z\s]/g, '')" required="required">
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label"> மாவட்டம்</label>
<input type="text" class="form-control" id="vendor_district_tamil" name="vendor_district_tamil" placeholder="தமிழில் பதிவு செய்யவும்">
<label class="form-label"> மாவட்டம்<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="vendor_district_tamil" name="vendor_district_tamil" placeholder="தமிழில் பதிவு செய்யவும்" required="required">
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Pincode</label>
<input type="text" class="form-control" id="vendor_pincode" name="vendor_pincode" oninput="validatePincode(this)" >
<label class="form-label">Pincode<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="vendor_pincode" name="vendor_pincode" oninput="validatePincode(this)" required="required">
</div> </div>
</div> </div>
@ -347,8 +413,8 @@ label{
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Business Space (Sq ft)| வியாபார இடம் </label>
<input type="text" class="form-control" id="business_space" name="business_space">
<label class="form-label">Business Space (Sq ft)| வியாபார இடம் <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="business_space" name="business_space" required="required">
</div> </div>
</div> </div>
@ -366,7 +432,7 @@ label{
<div class="col-md-6" id="bank_passbook_container" style="display:none;"> <div class="col-md-6" id="bank_passbook_container" style="display:none;">
<label for="bank_passbook" class="form-label">Upload Bank Passbook (jpg/jpeg/pdf)
<label for="bank_passbook" class="form-label">Upload Bank Passbook (jpg/jpeg/pdf)<span class="text-danger">*</span>
</label> </label>
<input type="file" class="form-control" id="bank_passbook" name="bank_passbook" accept=".jpg,.jpeg,.pdf,application/pdf" > <input type="file" class="form-control" id="bank_passbook" name="bank_passbook" accept=".jpg,.jpeg,.pdf,application/pdf" >
</div> </div>
@ -382,9 +448,9 @@ label{
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Profile Image (eg:Passport size photo)(jpg/jpeg/pdf)</label>
<label class="form-label">Profile Image (eg:Passport size photo)(jpg/jpeg/pdf)<span class="text-danger">*</span></label>
<input type="file" class="form-control" id="profileimage" <input type="file" class="form-control" id="profileimage"
accept=".jpg,.jpeg,.pdf,application/pdf" name="profileimage" >
accept=".jpg,.jpeg,.pdf,application/pdf" name="profileimage" required="required">
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
@ -399,26 +465,26 @@ label{
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Father's / Husband's Name </label>
<input type="text" class="form-control" id="father_name" name="father_name" oninput="this.value = this.value.replace(/[^a-zA-Z\s]/g, '')" >
<label class="form-label">Father's / Husband's Name<span class="text-danger">*</span> </label>
<input type="text" class="form-control" id="father_name" name="father_name" oninput="this.value = this.value.replace(/[^a-zA-Z\s]/g, '')" required="required">
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label"> தந்தை/கணவர் பெயர் </label>
<input type="text" class="form-control" id="father_name_tamil" name="father_name_tamil" placeholder="தமிழில் பதிவு செய்யவும்" >
<label class="form-label"> தந்தை/கணவர் பெயர் <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="father_name_tamil" name="father_name_tamil" placeholder="தமிழில் பதிவு செய்யவும்" required="required">
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Gender | பாலினம் </label><br>
<label class="form-label">Gender | பாலினம்<span class="text-danger">*</span> </label><br>
<input type="radio" name="gender" value="Male" > Male <input type="radio" name="gender" value="Male" > Male
<input type="radio" name="gender" value="Female" class="ms-3"> Female <input type="radio" name="gender" value="Female" class="ms-3"> Female
<input type="radio" name="gender" value="Transgender" class="ms-3">Transgender <input type="radio" name="gender" value="Transgender" class="ms-3">Transgender
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label"> பாலினம் </label><br>
<label class="form-label"> பாலினம்<span class="text-danger">*</span> </label><br>
<input type="radio" name="gender_tamil" value="ஆண்" > ஆண் <input type="radio" name="gender_tamil" value="ஆண்" > ஆண்
<input type="radio" name="gender_tamil" value="பெண்" class="ms-3"> பெண் <input type="radio" name="gender_tamil" value="பெண்" class="ms-3"> பெண்
<input type="radio" name="gender_tamil" value="பிற்பாலினர்" class="ms-3">பிற்பாலினர் <input type="radio" name="gender_tamil" value="பிற்பாலினர்" class="ms-3">பிற்பாலினர்
@ -435,12 +501,12 @@ label{
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Date of Birth | பிறந்த தேதி </label>
<input type="date" id="dob" class="form-control" name="dob" >
<label class="form-label">Date of Birth | பிறந்த தேதி<span class="text-danger">*</span> </label>
<input type="date" id="dob" class="form-control" name="dob" required="required">
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Community Category | சமூக வகை </label>
<select class="form-control" id="community" name="community" >
<label class="form-label">Community Category | சமூக வகை <span class="text-danger">*</span></label>
<select class="form-control" id="community" name="community" required="required">
<option value="">-- Select Community --</option> <option value="">-- Select Community --</option>
<th:block th:each="com : ${communities}"> <th:block th:each="com : ${communities}">
<option th:value="${com.id}" th:text="${com.category_name}"></option> <option th:value="${com.id}" th:text="${com.category_name}"></option>
@ -451,11 +517,31 @@ label{
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Differently Abled | இயலாமை உள்ளவரா? </label><br>
<label class="form-label">Differently Abled | இயலாமை உள்ளவரா?<span class="required">*</span> </label><br>
<input type="radio" name="differently_abled" value="Yes" > Yes <input type="radio" name="differently_abled" value="Yes" > Yes
<input type="radio" name="differently_abled" value="No" class="ms-3"> No <input type="radio" name="differently_abled" value="No" class="ms-3"> No
</div> </div>
<div class="col-md-6" id="diffSection" style="display: none;">
<label class="form-label">Type of Disability | இயலாமையின் வகை <span class="required">*</span> </label>
<select class="form-control" id="diff_type" name="diff_type">
<option value="">-- Select Disability --</option>
<th:block th:each="diff : ${DiffAbledList}">
<option th:value="${diff.id}" th:text="${diff.name}"></option>
</th:block>
</select>
<div id="otherDisabilityDiv" class="mt-2" style="display:none;">
<label class="form-label">
Specify Disability | இயலாமையை குறிப்பிடவும்
<span class="required">*</span>
</label>
<input type="text"
class="form-control"
id="other_disability"
name="other_disability"
placeholder="Enter Disability">
</div>
</div>
<div class="col-md-6"> <div class="col-md-6">
@ -481,10 +567,22 @@ label{
</select> </select>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label for="familymembers" class="form-label">Number of Family Members | குடும்ப உறுப்பினர்கள் எண்ணிக்கை </label>
<input type="number" class="form-control" name="familymembers" id="familymembers">
<label for="religion" class="form-label"> Religion | மதம்<span class="text-danger">*</span></label>
<select class="form-control" id="religion" name="religion" required="required">
<option value="">-- Select Religion --</option>
<th:block th:each="religion : ${religionList}">
<option th:value="${religion.id}" th:text="${religion.religion}">
</option>
</th:block>
</select>
</div>
<div class="col-md-6 mt-2">
<label for="familymembers" class="form-label">Number of Family Members | குடும்ப உறுப்பினர்கள் எண்ணிக்கை<span class="text-danger">*</span> </label>
<input type="number" class="form-control" name="familymembers" id="familymembers" max="15" required="required">
</div> </div>
</div> </div>
<div id="familyMemberContainer"></div>
<div class="mb-3"> <div class="mb-3">
<label class="form-label">Are any of your family member involved in street vending | உங்கள் குடும்ப உறுப்பினர் வியாபாரத்தில் உள்ளவரா? </label><br> <label class="form-label">Are any of your family member involved in street vending | உங்கள் குடும்ப உறுப்பினர் வியாபாரத்தில் உள்ளவரா? </label><br>
@ -504,31 +602,31 @@ label{
<input type="text" class="form-control" name="doorno" id="doorno" > <input type="text" class="form-control" name="doorno" id="doorno" >
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Street Name | தெரு பெயர் </label>
<input type="text" class="form-control" name="streetname" id="streetname" >
<label class="form-label">Street Name | தெரு பெயர்<span class="text-danger">*</span> </label>
<input type="text" class="form-control" name="streetname" id="streetname" required="required">
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Area Name | பகுதி பெயர் </label>
<input type="text" class="form-control" name="areaname" id="areaname" >
<label class="form-label">Area Name | பகுதி பெயர்<span class="text-danger">*</span> </label>
<input type="text" class="form-control" name="areaname" id="areaname" required="required">
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">District | மாவட்டம் </label>
<input type="text" class="form-control" name="district" id="district" oninput="this.value = this.value.replace(/[^a-zA-Z\s]/g, '')" >
<label class="form-label">District | மாவட்டம்<span class="text-danger">*</span> </label>
<input type="text" class="form-control" name="district" id="district" oninput="this.value = this.value.replace(/[^a-zA-Z\s]/g, '')" required="required">
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Pincode | அஞ்சல் குறியீடு </label>
<input type="text" class="form-control" name="pincode" id="pincode" oninput="validatePincode(this)" >
<label class="form-label">Pincode | அஞ்சல் குறியீடு<span class="text-danger">*</span> </label>
<input type="text" class="form-control" name="pincode" id="pincode" oninput="validatePincode(this)" required="required">
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label class="form-label">Aadhaar Number | ஆதார் எண் </label>
<input type="text" class="form-control" id="aadhar_number" name="aadhar_number" maxlength="12" oninput="validateAadhar(this)" >
<label class="form-label">Aadhaar Number | ஆதார் எண்<span class="text-danger">*</span> </label>
<input type="text" class="form-control" id="aadhar_number" name="aadhar_number" maxlength="12" oninput="validateAadhar(this)" required="required">
</div> </div>
</div> </div>
@ -629,6 +727,7 @@ label{
</script> </script>
<script> <script>
var relationshipOptions = "";
function allowTamilAndSymbols(id) { function allowTamilAndSymbols(id) {
const el = document.getElementById(id); const el = document.getElementById(id);
@ -671,6 +770,8 @@ document.addEventListener("DOMContentLoaded", function () {
}); });
</script> </script>
<script> <script>
document.getElementById("backBtn").addEventListener("click", function () { document.getElementById("backBtn").addEventListener("click", function () {
window.location.href = "/streetvendorlicense/home"; window.location.href = "/streetvendorlicense/home";
}); });
@ -689,7 +790,7 @@ function myMap() {
let streetsList = []; // Define globally inside myMap let streetsList = []; // Define globally inside myMap
const infowindow = new google.maps.InfoWindow(); const infowindow = new google.maps.InfoWindow();
// Initialize the SearchBox
/* // Initialize the SearchBox
const input = document.getElementById('pac-input'); const input = document.getElementById('pac-input');
const searchBox = new google.maps.places.SearchBox(input); const searchBox = new google.maps.places.SearchBox(input);
//map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); //map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
@ -723,6 +824,145 @@ function myMap() {
infowindow.open(map, marker); infowindow.open(map, marker);
fetchStreets(lat, lng); fetchStreets(lat, lng);
}); */
const input = document.getElementById("pac-input");
const suggestions = document.getElementById("suggestions");
const autocompleteService = new google.maps.places.AutocompleteService();
const placesService = new google.maps.places.PlacesService(map);
let debounceTimer = null;
input.addEventListener("input", function () {
clearTimeout(debounceTimer);
const query = this.value.trim();
// Hide suggestions
if (query.length < 5) {
suggestions.style.display = "none";
suggestions.innerHTML = "";
return;
}
debounceTimer = setTimeout(function () {
autocompleteService.getPlacePredictions({
input: query,
bounds: map.getBounds()
}, showPredictions);
}, 500);
});
function showPredictions(predictions, status) {
suggestions.innerHTML = "";
if (
status !== google.maps.places.PlacesServiceStatus.OK ||
!predictions ||
predictions.length === 0
) {
suggestions.style.display = "none";
return;
}
const ul = document.createElement("ul");
predictions.forEach(function (prediction) {
const li = document.createElement("li");
li.innerHTML = prediction.description;
li.onclick = function () {
input.value = prediction.description;
suggestions.style.display = "none";
loadPlace(prediction.place_id);
};
ul.appendChild(li);
});
suggestions.appendChild(ul);
suggestions.style.display = "block";
}
function loadPlace(placeId) {
placesService.getDetails({
placeId: placeId,
fields: [
"geometry",
"formatted_address",
"name"
]
}, function (place, status) {
if (status !== google.maps.places.PlacesServiceStatus.OK)
return;
if (marker)
marker.setMap(null);
marker = new google.maps.Marker({
map: map,
position: place.geometry.location
});
const lat = place.geometry.location.lat().toFixed(6);
const lng = place.geometry.location.lng().toFixed(6);
document.getElementById("latitude_field").value = lat;
document.getElementById("longitude_field").value = lng;
map.setCenter(place.geometry.location);
map.setZoom(15);
infowindow.setContent(
"Latitude : " + lat +
"<br>Longitude : " + lng
);
infowindow.open(map, marker);
fetchStreets(lat, lng);
});
}
document.addEventListener("click", function (e) {
if (
!suggestions.contains(e.target) &&
e.target !== input
) {
suggestions.style.display = "none";
}
}); });
map.addListener("click", function (event) { map.addListener("click", function (event) {
@ -793,9 +1033,110 @@ function myMap() {
}); });
} }
} }
//Load Relationship Dropdown
function loadRelationshipDropdown(selectElement) {
$.ajax({
url: "/gcc/api/streetvendor/getrelationship",
type: "GET",
success: function(response) {
$(selectElement).empty();
$(selectElement).append('<option value="">-- Select Relationship --</option>');
$.each(response, function(index, item) {
$(selectElement).append(
'<option value="' + item.id + '">' + item.name + '</option>'
);
});
}
});
}
$("#familymembers").on("input", function () {
var count = parseInt($(this).val()) || 0;
if (count > 15) {
count = 15;
$(this).val(15);
Swal.fire("Warning", "Maximum 15 family members allowed.", "info");
}
$("#familyMemberContainer").empty();
for (var i = 1; i <= count; i++) {
var row = `
<div class="row familyRow mb-3">
<div class="col-md-4">
<label>Person Name ${i}<span class="text-danger">*</span></label>
<input type="text"
class="form-control family_name"
placeholder="Enter Name">
</div>
<div class="col-md-3">
<label>Age<span class="text-danger">*</span></label>
<input type="number"
class="form-control family_age"
placeholder="Enter Age">
</div>
<div class="col-md-5">
<label>Relationship<span class="text-danger">*</span></label>
<select class="form-control relationship">
${relationshipOptions}
</select>
</div>
</div>
`;
$("#familyMemberContainer").append(row);
}
});
$(document).on("input", ".family_name", function () {
this.value = this.value.replace(/[^A-Za-z. ]/g, '');
});
$(document).on("input", ".family_age", function () {
this.value = this.value.replace(/\D/g, '').slice(0, 3);
});
$(document).on("input", "#familymembers", function () {
this.value = this.value.replace(/\D/g, '').slice(0, 2);
});
$(document).ready(function () { $(document).ready(function () {
$.ajax({
url: "/streetvendorlicense/api/getrelationship",
type: "GET",
success: function (response) {
relationshipOptions = '<option value="">-- Select Relationship --</option>';
$.each(response, function (i, item) {
relationshipOptions +=
'<option value="' + item.id + '">' +
item.name +
'</option>';
});
},
error: function () {
alert("Failed to load relationships.");
}
});
$("input[name='bank_account']").change(function () { $("input[name='bank_account']").change(function () {
if ($(this).val() === "Yes") { if ($(this).val() === "Yes") {
$("#bank_passbook_container").show(); $("#bank_passbook_container").show();
@ -815,6 +1156,29 @@ $(document).ready(function () {
} }
}); });
$("#diff_type").change(function () {
var selectedText = $("#diff_type option:selected").text().trim();
if (selectedText.toLowerCase() === "others" || selectedText.includes("மற்றவை")) {
$("#otherDisabilityDiv").show();
} else {
$("#otherDisabilityDiv").hide();
$("#other_disability").val("");
}
});
$("input[name='differently_abled']").change(function () {
if ($(this).val() === "Yes") {
$("#diffSection").show();
} else {
$("#diffSection").hide();
$("#diff_type").val("");
$("#otherDisabilityDiv").hide();
$("#other_disability").val("");
}
});
// Maximum file size (20 MB) // Maximum file size (20 MB)
const MAX_FILE_SIZE = 20 * 1024 * 1024; // 20MB in bytes const MAX_FILE_SIZE = 20 * 1024 * 1024; // 20MB in bytes
@ -866,6 +1230,20 @@ $(document).ready(function () {
return; return;
} }
const gen=$('input[name="gender"]:checked').val();
if(!gen){
Swal.fire("Missing Gender", "Please Select Gender", "info");
$('#submitBtn').prop('disabled', false).text('Submit');
return;
}
const tamgen=$('input[name="gender_tamil"]:checked').val();
if(!tamgen){
Swal.fire("Missing Gender", "Please Select Gender in Tamil", "info");
$('#submitBtn').prop('disabled', false).text('Submit');
return;
}
$('#pageLoader').show(); $('#pageLoader').show();
$.ajax({ $.ajax({
url: '/streetvendorlicense/api/check-mobile', url: '/streetvendorlicense/api/check-mobile',
@ -934,6 +1312,47 @@ function proceedSubmission(mobileNumber,formData){
let diffVal = $("input[name='differently_abled']:checked").val(); let diffVal = $("input[name='differently_abled']:checked").val();
setIfPresent(formData, "diff_abled", diffVal === undefined ? "" : diffVal === "Yes"); setIfPresent(formData, "diff_abled", diffVal === undefined ? "" : diffVal === "Yes");
// Differently Abled Validation
var differentlyAbled = $("input[name='differently_abled']:checked").val();
if (!differentlyAbled) {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Warning", "Please select Differently Abled (Yes/No).", "warning");
return false;
}
if (differentlyAbled === "Yes") {
if ($("#diff_type").val() == "") {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Warning", "Please select the Type of Disability.", "warning");
return false;
}
var selectedText = $("#diff_type option:selected").text().trim().toLowerCase();
if (selectedText.toLowerCase() === "others" || selectedText.includes("மற்றவை")) {
if ($("#other_disability").val().trim() == "") {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Warning", "Please specify the disability.", "warning");
return false;
}
}
}
const diff_type =$("#diff_type").val();
const other_disability =$("#other_disability").val().trim();
setIfPresent(formData, "diff_type", diff_type);
setIfPresent(formData, "other_disability", other_disability);
// are_any_fam_mem_invol_str // are_any_fam_mem_invol_str
let famVal = $("input[name='fam_vendor']:checked").val(); let famVal = $("input[name='fam_vendor']:checked").val();
setIfPresent(formData, "are_any_fam_mem_invol_str", famVal === undefined ? "" : famVal === "Yes"); setIfPresent(formData, "are_any_fam_mem_invol_str", famVal === undefined ? "" : famVal === "Yes");
@ -951,6 +1370,110 @@ function proceedSubmission(mobileNumber,formData){
if (isBankYes){ if (isBankYes){
setFileIfPresent(formData, "bank_passbook", $('#bank_passbook')[0]); setFileIfPresent(formData, "bank_passbook", $('#bank_passbook')[0]);
} }
const religion =$("#religion").val();
if(!religion){
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Warning", "Please select Religion.", "warning");
return false;
}
setIfPresent(formData, "religion", religion);
var familyCount = parseInt($("#familymembers").val()) || 0;
var familyDetails = [];
if (familyCount > 0) {
var isValid = true;
$("#familyMemberContainer .familyRow").each(function (index) {
var name = $(this).find(".family_name").val().trim();
var age = $(this).find(".family_age").val().trim();
var relationship = $(this).find(".relationship").val();
if (name === "") {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Warning",
"Please enter Person Name for Family Member " + (index + 1),
"warning");
isValid = false;
return false;
}
if (age === "") {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Warning",
"Please enter Age for Family Member " + (index + 1),
"warning");
isValid = false;
return false;
}
if (relationship === "") {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Warning",
"Please select Relationship for Family Member " + (index + 1),
"warning");
isValid = false;
return false;
}
// Push only after successful validation
familyDetails.push({
name: name,
age: age,
relationship: relationship
});
});
if (!isValid) {
return false;
}
}
console.log(familyDetails);
setIfPresent(formData, "familyDetails", JSON.stringify(familyDetails));
var familyCount = parseInt($("#familymembers").val()) || 0;
var rowCount = $("#familyMemberContainer .familyRow").length;
// If family members is 0, there should be no rows
if (familyCount === 0) {
if (rowCount !== 0) {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire(
"Warning",
"Family member details should be empty when Number of Family Members is 0.",
"warning"
);
return false;
}
} else {
// Count should match
if (familyCount !== rowCount) {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire(
"Warning",
"Number of Family Members (" + familyCount +
") does not match the entered Family Member Details (" + rowCount + ").",
"warning"
);
return false;
}
}
// Lat/Lng // Lat/Lng
@ -1019,19 +1542,28 @@ function proceedSubmission(mobileNumber,formData){
setIfPresent(formData, "f_h_name", $('#father_name').val()); setIfPresent(formData, "f_h_name", $('#father_name').val());
const dobValue = new Date($('#dob').val()); const dobValue = new Date($('#dob').val());
const today = new Date();
const age14Date = new Date(
today.getFullYear() - 14,
today.getMonth(),
today.getDate()
);
const today = new Date();
const age14Date = new Date(
today.getFullYear() - 14,
today.getMonth(),
today.getDate()
);
if (dobValue > age14Date) {
$('#pageLoader').hide();
$('#submitBtn').prop('disabled', false).text('Submit');
Swal.fire("Invalid Age", "Applicant must be at least 14 years old.", "error");
return;
}
if (dobValue > age14Date) {
Swal.fire("Invalid Age", "Applicant must be at least 14 years old.", "error");
return;
}
const dob = $('#dob').val();
if (dob) {
const [year, month, day] = dob.split("-");
const formattedDob = `${day}-${month}-${year}`;
setIfPresent(formData, "dob", $('#dob').val());
setIfPresent(formData, "dob", formattedDob);
}
let genderVal = $("input[name='gender']:checked").val(); let genderVal = $("input[name='gender']:checked").val();

Loading…
Cancel
Save