diff options
| -rw-r--r-- | interface/controllers/district.controller.js | 12 | ||||
| -rw-r--r-- | interface/controllers/mandal.controller.js | 8 | ||||
| -rw-r--r-- | interface/controllers/state.controller.js | 7 | ||||
| -rw-r--r-- | interface/controllers/village.controller.js | 10 | ||||
| -rw-r--r-- | interface/public/adduser.js | 291 | ||||
| -rw-r--r-- | interface/routes/api/citizens.js | 171 | ||||
| -rw-r--r-- | interface/routes/api/geography.js | 21 | ||||
| -rw-r--r-- | interface/routes/api/index.js | 2 | ||||
| -rw-r--r-- | interface/views/adduser.ejs | 250 |
9 files changed, 452 insertions, 320 deletions
diff --git a/interface/controllers/district.controller.js b/interface/controllers/district.controller.js index 5b21530..468d5fb 100644 --- a/interface/controllers/district.controller.js +++ b/interface/controllers/district.controller.js @@ -10,10 +10,10 @@ exports.allDistricts = () => { exports.allDistrictsByStateId = (state_id) => { const query =`SELECT * FROM district_master WHERE state_id = ${state_id}`; - return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }); + return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }).then(districts => { + if (districts) { + return districts; + } + return null; + }); }; - - - - - diff --git a/interface/controllers/mandal.controller.js b/interface/controllers/mandal.controller.js index 43842fe..5e4d287 100644 --- a/interface/controllers/mandal.controller.js +++ b/interface/controllers/mandal.controller.js @@ -11,6 +11,10 @@ exports.allMandals = () => { exports.allMandalsByDistrictId = (district_id) => { const query =`SELECT * FROM mandal_master WHERE district_id = ${district_id}`; - return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }); - + return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }).then(mandals => { + if (mandals) { + return mandals; + } + return null; + }); }; diff --git a/interface/controllers/state.controller.js b/interface/controllers/state.controller.js index 1a3a4ed..95bff0d 100644 --- a/interface/controllers/state.controller.js +++ b/interface/controllers/state.controller.js @@ -4,10 +4,5 @@ const state = db.state_master; // function to get all states exports.allStates = () => { const query = "SELECT * FROM state_master"; - return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }); - + return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }); }; - - - - diff --git a/interface/controllers/village.controller.js b/interface/controllers/village.controller.js index 0a488d4..95372fa 100644 --- a/interface/controllers/village.controller.js +++ b/interface/controllers/village.controller.js @@ -11,8 +11,10 @@ exports.allVillages = () => { exports.allVillagesByMandalId = (mandal_id) => { const query =`SELECT * FROM village_master WHERE mandal_id = ${mandal_id}`; - return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }); - + return db.sequelize.query(query, { type: db.sequelize.QueryTypes.SELECT }).then(villages => { + if (villages) { + return villages; + } + return null; + }); }; - - diff --git a/interface/public/adduser.js b/interface/public/adduser.js new file mode 100644 index 0000000..bee96f6 --- /dev/null +++ b/interface/public/adduser.js @@ -0,0 +1,291 @@ +$("#citizenForm").form({ + on: "blur", + inline: true, + fields: { + citizen_id: { + identifier: "citizen_id", + rules: [ + { + type: "empty", + prompt: "Please enter a citizen id", + }, + ], + }, + first_name: { + identifier: "first_name", + rules: [ + { + type: "empty", + prompt: "Please enter a first name", + }, + ], + }, + last_name: { + identifier: "last_name", + rules: [ + { + type: "empty", + prompt: "Please enter a last name", + }, + ], + }, + address: { + identifier: "address", + rules: [ + { + type: "empty", + prompt: "Please enter a address", + }, + ], + }, + mobile_number: { + identifier: "mobile_number", + rules: [ + { + type: "empty", + prompt: "Please enter a mobile number", + }, + { + type: "number", + prompt: "Please enter a valid mobile number", + }, + { + type: "minLength[10]", + prompt: "Please enter a valid mobile number", + }, + ], + }, + dob: { + identifier: "dob", + rules: [ + { + type: "empty", + prompt: "Please enter a date of birth", + }, + ], + }, + state: { + identifier: "state", + rules: [ + { + type: "empty", + prompt: "Please select a state", + }, + ], + }, + district: { + identifier: "district", + rules: [ + { + type: "empty", + prompt: "Please select a district", + }, + ], + }, + mandal: { + identifier: "mandal", + rules: [ + { + type: "empty", + prompt: "Please select a mandal", + }, + ], + }, + village: { + identifier: "village", + rules: [ + { + type: "empty", + prompt: "Please select a village", + }, + ], + }, + }, +}); + +//gereate random data with Upper case letter with seven digit number +function generateCitizenId() { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + var possible2 = "0123456789"; + text += possible.charAt(Math.floor(Math.random() * possible.length)); + for (var i = 0; i < 7; i++) + text += possible2.charAt(Math.floor(Math.random() * possible2.length)); + + //validate user name with database + fetch("/api/citizens/validate", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ citizen_id: text }), + }).then((res) => { + if (res.status == 200) { + document.getElementById("citizen_id").value = text; + } else { + generateCitizenId(); + } + }); +} + +generateCitizenId(); + +//get all states +fetch("/api/geography/states", { + method: "GET", + headers: { "Content-Type": "application/json" }, +}) + .then((res) => res.json()) + .then((data) => { + var state = document.getElementById("state"); + // set the first option to be the default disabled option + var disabledOption = document.createElement("option"); + disabledOption.text = "Select State"; + disabledOption.value = "undefined"; + disabledOption.disabled = true; + disabledOption.selected = true; + $(state).dropdown("set selected", disabledOption.value); + + state.add(disabledOption); + + for (var i = 0; i < data.length; i++) { + var option = document.createElement("option"); + option.value = data[i].state_id; + option.text = data[i].state_name; + state.add(option); + } + }); + +//get all districts +document.getElementById("state").addEventListener("change", function () { + var state_id = document.getElementById("state").value; + fetch("/api/geography/districts/" + state_id, { + method: "GET", + headers: { "Content-Type": "application/json" }, + }) + .then((res) => res.json()) + .then((data) => { + var district = document.getElementById("district"); + district.innerHTML = ""; + var disabledOption = document.createElement("option"); + disabledOption.text = "Select District"; + disabledOption.value = "undefined"; + disabledOption.disabled = true; + disabledOption.selected = true; + $(district).dropdown("set selected", disabledOption.value); + + district.add(disabledOption); + + for (var i = 0; i < data.length; i++) { + var option = document.createElement("option"); + option.value = data[i].district_id; + option.text = data[i].district_name; + district.add(option); + } + }).catch((err) => { + alert(err); + }); +}); + +//get all mandals +document.getElementById("district").addEventListener("change", function () { + var district_id = document.getElementById("district").value; + fetch("/api/geography/mandals/" + district_id, { + method: "GET", + headers: { "Content-Type": "application/json" }, + }) + .then((res) => res.json()) + .then((data) => { + var mandal = document.getElementById("mandal"); + mandal.innerHTML = ""; + var disabledOption = document.createElement("option"); + disabledOption.text = "Select Mandal"; + disabledOption.value = "undefined"; + disabledOption.disabled = true; + disabledOption.selected = true; + $(mandal).dropdown("set selected", disabledOption.value); + mandal.add(disabledOption); + + for (var i = 0; i < data.length; i++) { + var option = document.createElement("option"); + option.value = data[i].mandal_id; + option.text = data[i].mandal_name; + mandal.add(option); + } + }).catch((err) => { + alert(err); + }); +}); + +//get all villages +document.getElementById("mandal").addEventListener("change", function () { + var mandal_id = document.getElementById("mandal").value; + fetch("/api/geography/villages/" + mandal_id, { + method: "GET", + headers: { "Content-Type": "application/json" }, + }) + .then((res) => res.json()) + .then((data) => { + var village = document.getElementById("village"); + village.innerHTML = ""; + var disabledOption = document.createElement("option"); + disabledOption.text = "Select Village"; + disabledOption.value = "undefined"; + disabledOption.disabled = true; + disabledOption.selected = true; + $(village).dropdown("set selected", disabledOption.value); + village.add(disabledOption); + + for (var i = 0; i < data.length; i++) { + var option = document.createElement("option"); + option.value = data[i].village_id; + option.text = data[i].village_name; + village.add(option); + } + }).catch((err) => { + alert(err); + }); +}); + +function addCitizen(event) { + event.preventDefault(); + if ($("#citizenForm form").form("is valid")) { + var formData = { + citizen_id: document.getElementById("citizen_id").value, + first_name: document.getElementById("first_name").value, + middle_name: document.getElementById("middle_name").value, + last_name: document.getElementById("last_name").value, + address: document.getElementById("address").value, + mobile_num: '+91-' + document.getElementById("mobile_number").value, + dob: document.getElementById("dob").value, + gender: document.getElementById("gender").value, + marital_status: document.getElementById("marital_status").value, + disabled: document.getElementById("disabled").value, + disbaled_percentage: document.getElementById("disbaled_percentage").value ?? 0, + caste: document.getElementById("caste").value, + village_id: document.getElementById("village").value, + }; + + fetch("/api/citizens/addnewcitizen", { + method: "POST", + body: JSON.stringify(formData), + headers: { "Content-Type": "application/json" }, + }) + .then((res) => res.json()) + .then((data) => { + if (data.message == "Citizen added successfully") { + window.location.href = "/citizens"; + } else { + console.log(data.message); + alert(data.message); + } + }); + } +} + +document.getElementById("add_citizen").addEventListener("click", addCitizen); +document.getElementById("disabled").addEventListener("change", function () { + if (document.getElementById("disabled").value == "yes") { + document.getElementById("disbaled_percentage").disabled = false; + } else { + document.getElementById("disbaled_percentage").disabled = true; + } +}); diff --git a/interface/routes/api/citizens.js b/interface/routes/api/citizens.js index 40e0c16..fc98928 100644 --- a/interface/routes/api/citizens.js +++ b/interface/routes/api/citizens.js @@ -3,78 +3,113 @@ const router = express.Router(); const citizensController = require("../../controllers/citizens.controller"); -router.post('/edit', (req, res) => { - const { citizen_id, address, mobile_num, dob, marital_status } = req.body; - if (!citizen_id || !address || !mobile_num || !dob || !marital_status) { - res.status(400).json({ message: "Please fill in all fields" }); - } else { - citizensController.editCitizen(citizen_id, address, mobile_num, dob, marital_status) - .then(() => { - res.status(200).json({ message: "Citizen updated successfully" }); - }) - .catch((err) => { - res.status(400).json({ message: err }); - }); - } +router.post("/edit", (req, res) => { + const { citizen_id, address, mobile_num, dob, marital_status } = req.body; + if (!citizen_id || !address || !mobile_num || !dob || !marital_status) { + res.status(400).json({ message: "Please fill in all fields" }); + } else { + citizensController + .editCitizen(citizen_id, address, mobile_num, dob, marital_status) + .then(() => { + res.status(200).json({ message: "Citizen updated successfully" }); + }) + .catch((err) => { + res.status(400).json({ message: err }); + }); + } }); - -router.post('/delete', (req, res) => { - const { citizen_id } = req.body; - if (!citizen_id) { - res.status(400).json({ message: "Please fill in all fields" }); - } else { - citizensController.deleteCitizenbyId(citizen_id) - .then(() => { - res.status(200).json({ message: "Citizen deleted successfully" }); - }) - .catch((err) => { - res.status(400).json({ message: err }); - }); - } -} ); - - -router.post('/validate', (req, res) => { - const { citizen_id } = req.body; - if (!citizen_id) { - res.status(400).json({ message: "Please fill in all fields" }); - } else { - citizensController.checkCitizenId(citizen_id) - .then(( isValid ) => { - res.status(200).json({ isValid: !isValid }); - } - ) - .catch((err) => { - res.status(400).json({ message: err }); - }); - } +router.post("/delete", (req, res) => { + const { citizen_id } = req.body; + if (!citizen_id) { + res.status(400).json({ message: "Please fill in all fields" }); + } else { + citizensController + .deleteCitizenbyId(citizen_id) + .then(() => { + res.status(200).json({ message: "Citizen deleted successfully" }); + }) + .catch((err) => { + res.status(400).json({ message: err }); + }); + } }); - -router.post('/addnewcitizen', (req, res) => { - const { citizen_id, first_name, last_name, address, mobile_num, dob, gender, marital_status, disabled, disbaled_percentage, caste, village_id} = req.body; - - if(!citizen_id && !first_name && !last_name && !address && !mobile_num && !dob && !gender && !marital_status && !disabled && !caste && !village_id){ - - res.status(400).json({ message: "Please fill in all fields" }); - - }else{ - citizensController.addNewCitizen(citizen_id, first_name, last_name, address, mobile_num, dob, gender, marital_status, disabled, disbaled_percentage, caste, village_id).then(() => { - res.status(200).json({ message: "Citizen added successfully" }); - }).catch((err) => { - res.status(400).json({ message: err }); - }); - } - +router.post("/validate", (req, res) => { + const { citizen_id } = req.body; + if (!citizen_id) { + res.status(400).json({ message: "Please fill in all fields" }); + } else { + citizensController + .checkCitizenId(citizen_id) + .then((isValid) => { + res.status(200).json({ isValid: !isValid }); + }) + .catch((err) => { + res.status(400).json({ message: err }); + }); + } }); +router.post("/addnewcitizen", (req, res) => { + let { + citizen_id, + first_name, + middle_name, + last_name, + address, + mobile_num, + dob, + gender, + marital_status, + disabled, + disbaled_percentage, + caste, + village_id, + } = req.body; + + if (!disbaled_percentage) { + disbaled_percentage = 0.0; + } + + if ( + !citizen_id || + !first_name || + !last_name || + !address || + !mobile_num || + !dob || + !gender || + !marital_status || + !disabled || + !caste || + !village_id + ) { + res.status(400).json({ message: "Please fill in all fields" }); + } else { + citizensController + .addNewCitizen( + citizen_id, + first_name, + last_name, + address, + mobile_num, + dob, + gender, + marital_status, + disabled, + disbaled_percentage, + caste, + village_id + ) + .then(() => { + res.status(200).json({ message: "Citizen added successfully" }); + }) + .catch((err) => { + console.log(err); + res.status(400).json({ message: err }); + }); + } +}); - - - - - - - -module.exports = router;
\ No newline at end of file +module.exports = router; diff --git a/interface/routes/api/geography.js b/interface/routes/api/geography.js index 4667db8..58e3b84 100644 --- a/interface/routes/api/geography.js +++ b/interface/routes/api/geography.js @@ -9,27 +9,38 @@ const districtController = require("../../controllers/district.controller"); router.get("/states", (req, res) => { stateController.allStates().then(states => { res.send(states); - }); - + }); }); router.get("/districts/:state_id", (req, res) => { const state_id = req.params.state_id; districtController.allDistrictsByStateId(state_id).then(districts => { - res.send(districts); + if (districts) { + res.send(districts); + } else { + res.status(400).json({ message: "No districts found" }); + } }); }); router.get("/mandals/:district_id", (req, res) => { const district_id = req.params.district_id; mandalController.allMandalsByDistrictId(district_id).then(mandals => { - res.send(mandals); + if (mandals) { + res.send(mandals); + } else { + res.status(400).json({ message: "No mandals found" }); + } }); }); router.get("/villages/:mandal_id", (req, res) => { const mandal_id = req.params.mandal_id; villageController.allVillagesByMandalId(mandal_id).then(villages => { - res.send(villages); + if (villages) { + res.send(villages); + } else { + res.status(400).json({ message: "No villages found" }); + } }); }); diff --git a/interface/routes/api/index.js b/interface/routes/api/index.js index f21720b..b8ae7ca 100644 --- a/interface/routes/api/index.js +++ b/interface/routes/api/index.js @@ -64,7 +64,7 @@ router.post("/login", (req, res) => { payload, process.env.JWT_SECRET, { - expiresIn: 3600, + expiresIn: 60 * 60 * 24 * 7, }, (err, token) => { if (err) throw err; diff --git a/interface/views/adduser.ejs b/interface/views/adduser.ejs index 5b21d72..8d1b4d0 100644 --- a/interface/views/adduser.ejs +++ b/interface/views/adduser.ejs @@ -3,17 +3,11 @@ <head> <%- include('partials/head') %> </head> - <body> - <%- include('partials/navbar') %> - - - <div class="ui container segment" > - <h1 style="text-align: center;">Add New Citizen</h1> - - <form class="ui form" method="post" onsubmit="addCitizen(event)" > + <h1 style="text-align: center;">Add New Citizen</h1> + <form class="ui form" method="post" onsubmit="addCitizen(event)" id="citizenForm"> <div class="field"> <label>Citizen ID</label> <input @@ -34,6 +28,15 @@ id="first_name"> </div> <div class="field"> + <label>Middle Name</label> + <input + placeholder="Middle Name" + name="middle_name" + type="text" + autocomplete="off" + id="middle_name"> + </div> + <div class="field"> <label>Last Name</label> <input placeholder="Last Name" @@ -66,16 +69,23 @@ <input type="date" name="dob" placeholder="DOB" id="dob" /> </div> <div class="field"> + <label>Gender</label> + <select class="ui dropdown" id="gender"> + <option value="M" selected>Male</option> + <option value="F">Female</option> + </select> + </div> + <div class="field"> <label>Marital Status</label> <select class="ui dropdown" id="marital_status"> - <option value="M">Married</option> + <option value="M" selected>Married</option> <option value="UM">Unmarried</option> </select> </div> <div class = "field"> <label>Disabled</label> <select class="ui dropdown" id="disabled"> - <option value="Yes">Yes</option> + <option value="Yes" selected>Yes</option> <option value="No">No</option> </select> </div> @@ -91,7 +101,7 @@ <div class="field"> <label>Caste</label> <select class="ui dropdown" id="caste"> - <option value="OC" >OC</option> + <option value="OC" selected>OC</option> <option value="SC">SC</option> <option value="ST">ST</option> <option value="BC">BC</option> @@ -128,222 +138,6 @@ </body> <%- include('partials/scripts') %> - <script> - //gereate random data with Upper case letter with seven digit number - function generateCitizenId() { - var text = ""; - var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - var possible2 = "0123456789"; - text += possible.charAt(Math.floor(Math.random() * possible.length)); - for (var i = 0; i < 7; i++) - - text += possible2.charAt(Math.floor(Math.random() * possible2.length)); - - //validate user name with database - fetch("/api/citizens/validate", { - method: "POST", - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({citizen_id: text}) - }).then(res => { - if(res.status == 200){ - document.getElementById("citizen_id").value = text; - } - else{ - generateCitizenId(); - } - }); - - } - - generateCitizenId(); - - //get all states - fetch("/api/geography/states", { - method: "GET", - headers: {'Content-Type': 'application/json'} - }).then(res => res.json()).then(data => { - var state = document.getElementById("state"); - // set the first option to be the default disabled option - var disabledOption = document.createElement("option"); - disabledOption.text = "Select State"; - disabledOption.value = "undefined"; - disabledOption.disabled = true; - disabledOption.selected = true; - $(state).dropdown('set selected', disabledOption.value); - - state.add(disabledOption); - - for(var i = 0; i < data.length; i++){ - var option = document.createElement("option"); - option.value = data[i].state_id; - option.text = data[i].state_name; - state.add(option); - } - }); - - //get all districts - document.getElementById("state").addEventListener("change", function(){ - var state_id = document.getElementById("state").value; - fetch("/api/geography/districts/" + state_id, { - method: "GET", - headers: {'Content-Type': 'application/json'} - }).then(res => res.json()).then(data => { - var district = document.getElementById("district"); - district.innerHTML = ""; - var disabledOption = document.createElement("option"); - disabledOption.text = "Select District"; - disabledOption.value = "undefined"; - disabledOption.disabled = true; - disabledOption.selected = true; - $(district).dropdown('set selected', disabledOption.value); - - district.add(disabledOption); - - for(var i = 0; i < data.length; i++){ - var option = document.createElement("option"); - option.value = data[i].district_id; - option.text = data[i].district_name; - district.add(option); - } - }); - }); - - //get all mandals - document.getElementById("district").addEventListener("change", function(){ - var district_id = document.getElementById("district").value; - fetch("/api/geography/mandals/" + district_id, { - method: "GET", - headers: {'Content-Type': 'application/json'} - }).then(res => res.json()).then(data => { - var mandal = document.getElementById("mandal"); - mandal.innerHTML = ""; - var disabledOption = document.createElement("option"); - disabledOption.text = "Select Mandal"; - disabledOption.value = "undefined"; - disabledOption.disabled = true; - disabledOption.selected = true; - $(mandal).dropdown('set selected', disabledOption.value); - mandal.add(disabledOption); - - - for(var i = 0; i < data.length; i++){ - var option = document.createElement("option"); - option.value = data[i].mandal_id; - option.text = data[i].mandal_name; - mandal.add(option); - } - }); - }); - - //get all villages - document.getElementById("mandal").addEventListener("change", function(){ - var mandal_id = document.getElementById("mandal").value; - fetch("/api/geography/villages/" + mandal_id, { - method: "GET", - headers: {'Content-Type': 'application/json'} - }).then(res => res.json()).then(data => { - var village = document.getElementById("village"); - village.innerHTML = ""; - var disabledOption = document.createElement("option"); - disabledOption.text = "Select Village"; - disabledOption.value = "undefined"; - disabledOption.disabled = true; - disabledOption.selected = true; - $(village).dropdown('set selected', disabledOption.value); - village.add(disabledOption); - - for(var i = 0; i < data.length; i++){ - var option = document.createElement("option"); - option.value = data[i].village_id; - option.text = data[i].village_name; - village.add(option); - } - }); - }); - - - $(".ui.form").form({ - fields: { - first_name: "empty", - last_name: "empty", - address: "empty", - mobile_number: { - identifier: "mobile_number", - rules: [ - { - type: "length[10]", - prompt: "Please enter a valid mobile number" - } - ] - }, - dob: "empty", - marital_status: "empty", - disabled: "empty", - caste: "empty", - state: "empty", - district: "empty", - mandal: "empty", - village: "empty" - }, - }); - - function checkMobileNumber(mobile_number){ - var mobile_number = document.getElementById("mobile_number").value; - if(mobile_number.length != 10){ - return false; - } - return true; - } - - function addCitizen(event){ - event.preventDefault(); - - if($(".ui.form").form("is valid")){ - var formData = { - first_name: document.getElementById("first_name").value, - last_name: document.getElementById("last_name").value, - address: document.getElementById("address").value, - mobile_number: document.getElementById("mobile_number").value, - - dob: document.getElementById("dob").value, - marital_status: document.getElementById("marital_status").value, - disabled: document.getElementById("disabled").value, - disbaled_percentage: document.getElementById("disbaled_percentage").value, - caste: document.getElementById("caste").value, - village_id: document.getElementById("village").value, - citizen_id: document.getElementById("citizen_id").value - }; - - fetch("/api/citizens/addnewcitizen", { - method: "POST", - body: formData - }).then(res => res.json()).then(data => { - if(data.status == "success"){ - window.location.href = "/citizens"; - } - else{ - $(".ui.error.message").html(data.message); - } - }); - } - - } - - - - - document.getElementById("add_citizen").addEventListener("click", addCitizen); - - document.getElementById("disabled").addEventListener("change", function(){ - if(document.getElementById("disabled").value == "yes"){ - document.getElementById("disbaled_percentage").disabled = false; - } - else{ - document.getElementById("disbaled_percentage").disabled = true; - } - }); - - -</script> + <script src="/adduser.js"></script> </html> |
