Browse Source

Changes in 1913 closing complaints via whatsapp message api

main
Hariprasath S 4 months ago
parent
commit
07b9d52e89
  1. 267
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/WhatsappController.java
  2. 67
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/WhatsappqaqcMsgService.java
  3. 19
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java
  4. 2
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/PendinglistService.java
  5. 30
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/controller/Maincontroller.java
  6. 64
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/controller/RegisterApiController.java
  7. 58
      gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/service/RegisterService.java
  8. 4
      gcc_officer_portal/src/main/resources/application.properties
  9. 21
      gcc_officer_portal/src/main/resources/templates/modules/callcenterqaqc/agentqaqccalls.html
  10. 2
      gcc_officer_portal/src/main/resources/templates/modules/greencommittee/monitoring.html
  11. 4
      gcc_officer_portal/src/main/resources/templates/modules/greencommittee/pendinglist.html
  12. 121
      gcc_officer_portal/src/main/resources/templates/modules/roadwar/regform.html

267
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/controller/WhatsappController.java

@ -56,11 +56,11 @@ public class WhatsappController {
String result = sendWhatsappMsg(pname, complaintTypeName, mobnumber, complaintNumber,returnedAction);
if(result.equals("200")) {
System.out.println("Whatsapp Message Triggered for "+complaintNumber);
System.out.println(returnedAction+" Whatsapp Message Triggered for "+complaintNumber);
return true;
}
else {
System.out.println("Whatsapp Message Failed for "+complaintNumber);
System.out.println(returnedAction+ " Whatsapp Message Failed for "+complaintNumber);
return false;
}
}
@ -72,33 +72,37 @@ public class WhatsappController {
String urlString = "";
try {
String placeholders =
URLEncoder.encode(
pname + "|~|" + cat + "|~|" + complaintNumber,
StandardCharsets.UTF_8.toString());
String buttonPlaceholder =
URLEncoder.encode(
complaintNumber+ "|~|" +complaintNumber,
StandardCharsets.UTF_8.toString());
String mobile =
URLEncoder.encode(
mob_no,
StandardCharsets.UTF_8.toString());
if("COMPLETED".equalsIgnoreCase(returnedAction)) {
urlString="https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=5c995535-6244-11f0-98fc-02c8a5e042bd&from=919445061913&to="+mobile+"&templateid=3304034&type=template&placeholders="+placeholders;
}
if("UNATTENDED".equalsIgnoreCase(returnedAction)) {
urlString="https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=5c995535-6244-11f0-98fc-02c8a5e042bd&from=919445061913&to="+mobile+"&templateid=3304038&type=template&placeholders="+placeholders+"&button_placeholder="+buttonPlaceholder;
}
String placeholders =
URLEncoder.encode(
pname + "|~|" + cat + "|~|" + complaintNumber,
StandardCharsets.UTF_8.toString());
String buttonPlaceholder =
URLEncoder.encode(
complaintNumber,
StandardCharsets.UTF_8.toString());
String mobile =
URLEncoder.encode(
mob_no,
StandardCharsets.UTF_8.toString());
urlString="";
String res = hitURL(urlString);
return res;
@ -120,7 +124,7 @@ public class WhatsappController {
int responseCode = connection.getResponseCode();
response = String.valueOf(responseCode);
//System.out.println("Response Code for URL: " + urlString + " is " + responseCode);
System.out.println("Response Code for Whatsapp msg URL: " + urlString + " is " + responseCode);
} catch (Exception e) {
e.printStackTrace();
@ -129,17 +133,224 @@ public class WhatsappController {
return response;
}
@GetMapping("/getclosefromuser")
// @GetMapping("/getclosefromuser")
// public String getclosefromuser(@RequestParam String complaintNumber) {
//
// return whatsappqaqcMsgService.getclosefromuser(complaintNumber);
//
// }
@GetMapping(value = "/getclosefromuser", produces = "text/html")
public String getclosefromuser(@RequestParam String complaintNumber) {
return whatsappqaqcMsgService.getclosefromuser(complaintNumber);
String result = whatsappqaqcMsgService.getclosefromuser(complaintNumber);
boolean success = result.contains("Successfully");
String color = success ? "#28a745" : "#dc3545";
String logoUrl = "https://gccservices.in/gcc/assets/images/logo.png";
//background: #f5f5f5;
return """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GCC PGR Complaint Status</title>
<style>
body{
font-family: Arial, sans-serif;
background: #1d495a;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.card{
width: 600px;
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0,0,0,0.15);
overflow: hidden;
}
.card-header{
display: flex;
align-items: center;
padding: 15px 20px;
border-bottom: 1px solid #ddd;
background: #f8f9fa;
}
.card-header img{
width: 60px;
height: 60px;
object-fit: contain;
}
.card-header h2{
flex: 1;
text-align: center;
margin: 0;
color: #003366;
}
.card-body{
padding: 30px;
text-align: center;
min-height: 120px;
display: flex;
align-items: center;
justify-content: center;
}
.card-body h3{
white-space: pre-line;
margin: 0;
color: %s;
line-height: 1.8;
}
.card-footer{
padding: 12px 20px;
border-top: 1px solid #ddd;
text-align: right;
font-weight: bold;
color: #666;
background: #f8f9fa;
}
</style>
</head>
<body>
<div class="card">
<div class="card-header">
<img src="%s" alt="GCC Logo">
<h2>Thanks For Your Response !!!</h2>
</div>
<div class="card-body">
<h3>%s</h3>
</div>
<div class="card-footer">
- GCC
</div>
</div>
</body>
</html>
""".formatted(color, logoUrl, result);
}
@GetMapping("/getreopenfromuser")
@GetMapping(value="/getreopenfromuser", produces = "text/html")
public String getreopenfromuser(@RequestParam String complaintNumber) {
return whatsappqaqcMsgService.getreopenfromuser(complaintNumber);
String result= whatsappqaqcMsgService.getreopenfromuser(complaintNumber);
boolean success = result.contains("Successfully");
String color = success ? "#28a745" : "#dc3545";
String logoUrl = "https://gccservices.in/gcc/assets/images/logo.png";
//background: #f5f5f5;
return """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GCC PGR Complaint Status</title>
<style>
body{
font-family: Arial, sans-serif;
background: #1d495a;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.card{
width: 600px;
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0,0,0,0.15);
overflow: hidden;
}
.card-header{
display: flex;
align-items: center;
padding: 15px 20px;
border-bottom: 1px solid #ddd;
background: #f8f9fa;
}
.card-header img{
width: 60px;
height: 60px;
object-fit: contain;
}
.card-header h2{
flex: 1;
text-align: center;
margin: 0;
color: #003366;
}
.card-body{
padding: 30px;
text-align: center;
min-height: 120px;
display: flex;
align-items: center;
justify-content: center;
}
.card-body h3{
white-space: pre-line;
margin: 0;
color: %s;
line-height: 1.8;
}
.card-footer{
padding: 12px 20px;
border-top: 1px solid #ddd;
text-align: right;
font-weight: bold;
color: #666;
background: #f8f9fa;
}
</style>
</head>
<body>
<div class="card">
<div class="card-header">
<img src="%s" alt="GCC Logo">
<h2>Thanks For Your Response !!!</h2>
</div>
<div class="card-body">
<h3>%s</h3>
</div>
<div class="card-footer">
- GCC
</div>
</div>
</body>
</html>
""".formatted(color, logoUrl, result);
}

67
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/callcenterqaqc/service/WhatsappqaqcMsgService.java

@ -88,7 +88,7 @@ public class WhatsappqaqcMsgService {
String sql =
"SELECT call_status " +
"FROM qaqc_upload_data_history " +
"WHERE complaint_number=? " +
"WHERE complaint_number=? AND call_category='CLOSED' " +
"ORDER BY id DESC " +
"LIMIT 20";
@ -121,7 +121,7 @@ public class WhatsappqaqcMsgService {
String sql =
"SELECT call_status " +
"FROM qaqc_upload_data_history " +
"WHERE complaint_number=? " +
"WHERE complaint_number=? AND call_category='CLOSED' " +
"ORDER BY id DESC " +
"LIMIT 5";
@ -150,6 +150,15 @@ public class WhatsappqaqcMsgService {
return response;
}
public String getErpusername() {
String query="SELECT erp_username FROM agents_list "
+ "where calling_type='WHATSAPP_MSG'";
return jdbcTemplate.queryForObject(query,String.class);
}
public String getclosefromuser(String complaintNumber) {
@ -164,27 +173,42 @@ public class WhatsappqaqcMsgService {
)
);
String Erpname="QAops72";
String Erpname=getErpusername();
System.out.println("Erpname="+Erpname);
if ("Action Taken - Level 2".equalsIgnoreCase(currentStatus)) {
boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "", "COMPLETED",Erpname);
boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "COMPLAINT CLOSED BY WHATSAPP MESSAGE", "COMPLETED",Erpname);
if (statusUpdated)
{
return complaintNumber+ " PGR Complaint closed Successfully";
return "Your "+complaintNumber+ " PGR Complaint has been closed Successfully.\n If you need further assistance,\n Please contact GCC 1913 Helpline.";
}
else {
return "Unable to close "+complaintNumber+" PGR Complaint";
return "We are unable to process your request at the moment.\n Please try again later.";
}
}
}
else {
return "Unable to close PGR "+complaintNumber+" Complaint,Because the complaint status is "+currentStatus;
if("FINAL_CLOSURE".equalsIgnoreCase(currentStatus)){
return "Your " + complaintNumber + " complaint has already been closed.\n\n"
+ "If you need further assistance, please contact GCC 1913 Helpline.";
}
else if("REOPENED".equalsIgnoreCase(currentStatus)) {
return "Your "+complaintNumber+" complaint has already been reopened. Once it is resolved, we will reach you by GCC’s 1913 helpline. If you need further assistance, please contact GCC 1913 Helpline.";
}
else {
return "Your "+complaintNumber+" complaint is Under Progress.\n Once it is resolved, \n we will reach you by GCC’s 1913 helpline.";
}
}
} catch (Exception e) {
e.printStackTrace();
return "Error in closing PGR complaint from user "+complaintNumber;
return "We are unable to process your request at the moment.\n Please try again later.";
}
@ -204,27 +228,40 @@ public class WhatsappqaqcMsgService {
)
);
String Erpname="QAops72";
String Erpname=getErpusername();
System.out.println("Erpname="+Erpname);
if ("Action Taken - Level 2".equalsIgnoreCase(currentStatus)) {
boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "", "REOPEN",Erpname);
boolean statusUpdated=qaqcCallsService.ChangeStatusInErp(complaintNumber, "COMPLAINT REOPENED BY WHATSAPP MESSAGE", "REOPEN",Erpname);
if (statusUpdated)
{
return complaintNumber+ " Complaint Reopened Successfully";
return "Your "+complaintNumber+ " PGR complaint has been reopened Successfully.\n Once it is resolved , we will reach you by GCC’s 1913 helpline.If you need further assistance , please contact GCC 1913 Helpline.";
}
else {
return "Unable to Reopen "+complaintNumber+" Complaint";
return "We are unable to process your request at the moment.\n Please try again later.";
}
}
else {
return "Unable to Reopen "+complaintNumber+" Complaint,Because the complaint status is "+currentStatus;
if("FINAL_CLOSURE".equalsIgnoreCase(currentStatus)){
return "Your " + complaintNumber + " complaint has already been closed.\n\n"
+ "If you need further assistance, please contact GCC 1913 Helpline.";
}
else if("REOPENED".equalsIgnoreCase(currentStatus)) {
return "Your "+complaintNumber+" complaint has already been reopened. Once it is resolved, we will reach you by GCC’s 1913 helpline. If you have any further assistance, please contact GCC 1913 Helpline.";
}
else {
return "Your "+complaintNumber+" complaint is Under Progress.\n Once it is resolved, \n we will reach you by GCC’s 1913 helpline.";
}
}
} catch (Exception e) {
e.printStackTrace();
return "Error in Reopen complaint from user "+complaintNumber;
return "We are unable to process your request at the moment.\n Please try again later.";
}

19
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java

@ -24,14 +24,14 @@ import java.util.Properties;
@EnableTransactionManagement
public class DataSourceConfig {
// private static String host = "localhost:3306";
// private static String dbpassword = "root";
private static String host = "localhost:3306";
private static String dbpassword = "root";
// private static String dbpassword = "gccroot";
// AWS
private static String host = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306";
private static String dbpassword = "gcc-facial-password";
// private static String host = "gcc-facial-db-instance-1.cf48eqcciziq.ap-south-1.rds.amazonaws.com:3306";
// private static String dbpassword = "gcc-facial-password";
////////////////////////////// (For GCC APP) ////////////////////////
@Configuration
@ -407,6 +407,17 @@ public class DataSourceConfig {
dataSource.setPassword(dbpassword);
return dataSource;
}
/////////////// Road War /////////////////////
@Bean(name = "mysqlRoadWarDataSource")
public DataSource mysqlRoadWarDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://" + host + "/gcc_roadwar_web");
dataSource.setUsername("root");
dataSource.setPassword(dbpassword);
return dataSource;
}
////////////////////////////// ORACLE ////////////////////////
@Bean(name = "oracleDataSource")

2
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/greencommittee/service/PendinglistService.java

@ -244,7 +244,7 @@ public class PendinglistService {
// 4a — Recommendation details
List<Map<String, Object>> recommend = jdbcTemplate.queryForList(
"SELECT rm.name, itd.nooftrees AS count " +
"SELECT rm.name, itd.nooftrees AS count,itd.treename as treename " +
"FROM inspection_tree_data itd " +
"JOIN inspection_recommend_master rm ON rm.rid = itd.action " +
"WHERE itd.inspection_data_id=? AND itd.isactive=1",

30
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/controller/Maincontroller.java

@ -0,0 +1,30 @@
package in.gov.chennaicorporation.gccoffice.roadwar.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo;
@RequestMapping("/gcc/roadwarweb")
@Controller("RoadWarMainController")
public class Maincontroller {
@Autowired
private LoginUserInfo loginUserInfo;
@GetMapping("/regform")
public String viewdashboard(Model model) {
String LoginUserId = LoginUserInfo.getLoginUserId();
model.addAttribute("LoginUserId", LoginUserId);
String UserRole = LoginUserInfo.getUserRole();
model.addAttribute("UserRole", UserRole);
return "modules/roadwar/regform";
}
}

64
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/controller/RegisterApiController.java

@ -0,0 +1,64 @@
package in.gov.chennaicorporation.gccoffice.roadwar.controller;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import in.gov.chennaicorporation.gccoffice.roadwar.service.RegisterService;
@RestController
@RequestMapping("/gcc/api/roadwarweb/register")
public class RegisterApiController {
@Autowired
private RegisterService registerService;
@GetMapping("/getzones")
public Map<String, Object> ViewZoneDropdown() {
Map<String, Object> response = new HashMap<>();
List<Map<String, Object>> zones = registerService.ViewZoneDropdown();
if (!zones.isEmpty()) {
response.put("status", true);
response.put("message", "Zone list fetched successfully");
response.put("data", zones);
} else {
response.put("status", false);
response.put("message", "No zones found");
response.put("data", Collections.emptyList());
}
return response;
}
@GetMapping("/getwardbyzone")
public Map<String, Object> ViewWardDropdown(@RequestParam String zone) {
Map<String, Object> response = new HashMap<>();
List<Map<String, Object>> wards = registerService.ViewWardDropdown(zone);
if (!wards.isEmpty()) {
response.put("status", true);
response.put("message", "Ward list fetched successfully");
response.put("data", wards);
} else {
response.put("status", false);
response.put("message", "No wards found");
response.put("data", Collections.emptyList());
}
return response;
}
}

58
gcc_officer_portal/src/main/java/in/gov/chennaicorporation/gccoffice/roadwar/service/RegisterService.java

@ -0,0 +1,58 @@
package in.gov.chennaicorporation.gccoffice.roadwar.service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class RegisterService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private Environment environment;
@Autowired
public void setDataSource(@Qualifier("mysqlRoadWarDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<Map<String, Object>> ViewZoneDropdown() {
String sql = "SELECT zone_name "
+ "FROM zone_master "
+ "WHERE is_active=1 AND is_delete=0";
try {
return jdbcTemplate.queryForList(sql);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return Collections.emptyList();
}
}
public List<Map<String, Object>> ViewWardDropdown(String zone) {
String sql = "SELECT ward_name "
+ "FROM ward_master "
+ "WHERE is_active=1 AND is_delete=0 AND zone_id=?";
try {
return jdbcTemplate.queryForList(sql,zone);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return Collections.emptyList();
}
}
}

4
gcc_officer_portal/src/main/resources/application.properties

@ -1,5 +1,5 @@
#spring.profiles.active=local
spring.profiles.active=production
spring.profiles.active=local
#spring.profiles.active=production
#For Server production
#assets.base-url=/gcc/assets/
#For local test

21
gcc_officer_portal/src/main/resources/templates/modules/callcenterqaqc/agentqaqccalls.html

@ -780,18 +780,10 @@
//console.log("valid phone number");
$('.submitid').prop('disabled', false).text('Submit');
// Trigger WhatsApp message functions based on action
// if (action === "UNATTENDED") {
//sendWhatsAppMessageUnattended(name, complaintNumber, cellnumber, complaintTypeName);
// } else if (action === "REOPEN") {
//sendWhatsAppMessageReopened(name, complaintNumber, cellnumber, complaintTypeName);
// }
if (action === "UNATTENDED" || action === "COMPLETED" ) {
//checkforUnattendedwhatsappmsg(complaintNumber,action,complaintTypeName,cellnumber,name);
}
/* if (action === "UNATTENDED" || action === "COMPLETED" ) {
checkforUnattendedwhatsappmsg(complaintNumber,action,complaintTypeName,cellnumber,name);
} */
}
else{
@ -1035,13 +1027,16 @@ return detailsHtml;
//checkforwhatsappmsg
function checkforUnattendedwhatsappmsg(complaintNumber,action,complaintTypeName,cellnumber,name) {
console.log(complaintNumber);
$.ajax({
url: '/gcc/api/qaqc/whatsapp/checkforwhatsappmsg',
type: 'GET',
data: { complaintNumber: complaintNumber,action:action,
complaintTypeName:complaintTypeName,mobnumber:cellnumber,
name:pname},
pname:name},
success: function(response) {
//console.log('WhatsApp message sent successfully', response);
console.log(response);

2
gcc_officer_portal/src/main/resources/templates/modules/greencommittee/monitoring.html

@ -407,7 +407,7 @@ function fetchgreenCommitteeList(){
renderDetails(details);
$('#viewModalLabel').text(`Apploication Details - ${id}`);
$('#viewModalLabel').text(`Application Details - ${id}`);
$('#viewModal').modal('show');
},
error: function (xhr) {

4
gcc_officer_portal/src/main/resources/templates/modules/greencommittee/pendinglist.html

@ -566,7 +566,7 @@
let inspCards = inspections.map(ins => {
let recChips = ins.recommendations.map(r =>
`<span class="badge badge-warning mr-1">${r.name}: ${r.count}</span>`
`<span class="badge badge-warning mr-1 mb-2">${r.name}: ${r.count} (${r.treename})</span>`
).join("");
let inspThumbs = ins.images.map(i =>
@ -815,7 +815,7 @@
loadCommitteeDecisions();
$('#viewModalLabel').text(`Apploication Details - ${id}`);
$('#viewModalLabel').text(`Application Details - ${id}`);
$('#viewModal').modal('show');
},
error: function (xhr) {

121
gcc_officer_portal/src/main/resources/templates/modules/roadwar/regform.html

@ -0,0 +1,121 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="~{fragments/modules/base/head :: head}"></head>
<style>
</style>
<body>
<div class="wrapper">
<!-- header top menu Start -->
<header th:replace="~{fragments/modules/base/header :: header}"></header>
<!-- header top menu end -->
<div class="page-wrap">
<!--=============== Left Menu side Start ================-->
<div th:replace="~{fragments/modules/base/menu :: menu}"></div>
<!--=============== Left side End ================-->
<div class="main-content">
<div class="container-fluid">
<div class="page-header mb-2">
<div class="row align-items-end">
<div class="col-lg-8">
<div class="page-header-title">
<i class="fa fa-list-alt bg-blue"></i>
<div class="d-inline">
<h5>Register Form</h5>
<span>Road War</span>
</div>
</div>
</div>
<div class="col-lg-4">
<nav class="breadcrumb-container" aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/gcc/index"><i class="ik ik-home"></i></a>
</li>
<li class="breadcrumb-item" aria-current="page">Road War</li>
<li class="breadcrumb-item active" aria-current="page">Register Form</li>
</ol>
</nav>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">Road Details</h5>
<div class="card-block">
<div class="row">
<div class="col-md-3">
<label for="zone">Zone<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="zone" name="zone" required="required">
</div>
<div class="col-md-3">
<label for="ward">Ward<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="ward" name="ward" required="required">
</div>
<div class="col-md-6">
<label for="roadname">Name of the Road<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="roadname" name="roadname" required="required">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="pageLoader"
style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); z-index: 9999; text-align: center;">
<div style="position: relative; top: 50%; transform: translateY(-50%);">
<div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;">
<span class="sr-only">Loading...</span>
</div>
<!-- Add the 'Please wait' text below the spinner -->
<p style="margin-top: 1rem; font-size: 1.2rem; color: #007bff;">Please wait...</p>
</div>
</div>
<footer th:replace="~{fragments/modules/base/footer :: footer}"></footer>
</div>
</div>
<div th:replace="~{fragments/modules/base/app_module_menu_box :: div}"></div>
<script th:replace="~{fragments/modules/base/script :: script}"></script>
<script src="node_modules/tempusdominus-bootstrap-4/build/js/tempusdominus-bootstrap-4.min.js"></script>
<script type="text/javascript">
</script>
</body>
</html>
Loading…
Cancel
Save