diff options
| -rw-r--r-- | interface/controllers/citizens.controller.js | 26 | ||||
| -rw-r--r-- | interface/controllers/district.controller.js | 19 | ||||
| -rw-r--r-- | interface/controllers/mandal.controller.js | 16 | ||||
| -rw-r--r-- | interface/controllers/state.controller.js | 13 | ||||
| -rw-r--r-- | interface/controllers/village.controller.js | 18 | ||||
| -rw-r--r-- | interface/models/state_master.model.js | 2 | ||||
| -rw-r--r-- | interface/public/citizens.js | 15 | ||||
| -rw-r--r-- | interface/routes/api/citizens.js | 34 | ||||
| -rw-r--r-- | interface/routes/api/geography.js | 42 | ||||
| -rw-r--r-- | interface/routes/index.js | 11 | ||||
| -rw-r--r-- | interface/views/adduser.ejs | 165 | ||||
| -rw-r--r-- | interface/views/citizens.ejs | 1 | ||||
| -rw-r--r-- | interface/views/partials/navbar.ejs | 5 |
13 files changed, 365 insertions, 2 deletions
diff --git a/interface/controllers/citizens.controller.js b/interface/controllers/citizens.controller.js index ee9355b..0ee1d42 100644 --- a/interface/controllers/citizens.controller.js +++ b/interface/controllers/citizens.controller.js @@ -15,6 +15,15 @@ exports.findXCitizens = () => { return sequelize.query(query, { type: QueryTypes.SELECT }) }; + +exports.deleteCitizenbyId = (citizen_id) =>{ + + return citizens.destroy({ + where: { citizen_id } + }) + +}; + exports.editCitizen = (citizen_id, address, mobile_num, dob, marital_status) => { return citizens.update({ address, mobile_num, dob, marital_status @@ -25,6 +34,23 @@ exports.editCitizen = (citizen_id, address, mobile_num, dob, marital_status) => }); }; +//Check Citizen exists or not +exports.checkCitizenId = (citizen_id) => { + return citizens.findOne({ + where: { + citizen_id + } + }).then( + citizen_id => { + if (citizen_id) { + return true; + } + return false; + } + ) +} + + // Get total number of male and female citizens exports.findGenderDistribution = () => { // group by the 'gender' column diff --git a/interface/controllers/district.controller.js b/interface/controllers/district.controller.js new file mode 100644 index 0000000..5b21530 --- /dev/null +++ b/interface/controllers/district.controller.js @@ -0,0 +1,19 @@ +const db = require("../models"); +const district = db.district_master; + +exports.allDistricts = () => { + return district.findAll({ + attributes: ['district_id', 'district_name'] + }) +}; + + +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 }); +}; + + + + + diff --git a/interface/controllers/mandal.controller.js b/interface/controllers/mandal.controller.js new file mode 100644 index 0000000..43842fe --- /dev/null +++ b/interface/controllers/mandal.controller.js @@ -0,0 +1,16 @@ +const db = require("../models"); +const mandal = db.mandal_master; + + +exports.allMandals = () => { + return mandal.findAll({ + attributes: ['mandal_id', 'mandal_name'] + }) +}; + + +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 }); + +}; diff --git a/interface/controllers/state.controller.js b/interface/controllers/state.controller.js new file mode 100644 index 0000000..1a3a4ed --- /dev/null +++ b/interface/controllers/state.controller.js @@ -0,0 +1,13 @@ +const db = require("../models"); +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 }); + +}; + + + + diff --git a/interface/controllers/village.controller.js b/interface/controllers/village.controller.js new file mode 100644 index 0000000..0a488d4 --- /dev/null +++ b/interface/controllers/village.controller.js @@ -0,0 +1,18 @@ +const db = require("../models"); +const village = db.village_master; + + +exports.allVillages = () => { + return village.findAll({ + attributes: ['village_id', 'village_name'] + }) +}; + + +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 }); + +}; + + diff --git a/interface/models/state_master.model.js b/interface/models/state_master.model.js index e3129dd..450b90e 100644 --- a/interface/models/state_master.model.js +++ b/interface/models/state_master.model.js @@ -7,7 +7,7 @@ module.exports = (Sequelize, sequelize) => { autoIncrement: true, }, state_name: { - type: Sequelize.STRING(155), + type: Sequelize.STRING(255), allowNull: false, }, }); diff --git a/interface/public/citizens.js b/interface/public/citizens.js index ef112d1..27130ec 100644 --- a/interface/public/citizens.js +++ b/interface/public/citizens.js @@ -41,3 +41,18 @@ function editCitizen(event) { }, }); } + +function deleteCitizenRecord(citizen) { + citizen_id = JSON.parse(citizen).citizen_id; + $.ajax({ + url: "/api/citizens/delete", + type: "POST", + data: { citizen_id }, + success: function (response) { + console.log(response); + location.reload(); + } + }); + + +}
\ No newline at end of file diff --git a/interface/routes/api/citizens.js b/interface/routes/api/citizens.js index bab5222..6dad084 100644 --- a/interface/routes/api/citizens.js +++ b/interface/routes/api/citizens.js @@ -18,4 +18,38 @@ router.post('/edit', (req, res) => { } }); + +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 }); + }); + } +}); + + module.exports = router;
\ No newline at end of file diff --git a/interface/routes/api/geography.js b/interface/routes/api/geography.js new file mode 100644 index 0000000..4667db8 --- /dev/null +++ b/interface/routes/api/geography.js @@ -0,0 +1,42 @@ +const express = require("express"); +const router = express.Router(); +const stateController = require("../../controllers/state.controller"); +const mandalController = require("../../controllers/mandal.controller"); +const villageController = require("../../controllers/village.controller"); +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); + }); +}); +router.get("/mandals/:district_id", (req, res) => { + const district_id = req.params.district_id; + mandalController.allMandalsByDistrictId(district_id).then(mandals => { + res.send(mandals); + }); +}); + +router.get("/villages/:mandal_id", (req, res) => { + const mandal_id = req.params.mandal_id; + villageController.allVillagesByMandalId(mandal_id).then(villages => { + res.send(villages); + }); +}); + + + + +module.exports = router; + + + diff --git a/interface/routes/index.js b/interface/routes/index.js index cdab54d..b99abbf 100644 --- a/interface/routes/index.js +++ b/interface/routes/index.js @@ -3,10 +3,12 @@ const router = express.Router(); const citizensController = require("../controllers/citizens.controller"); const api = require('./api'); const citizensAPI = require('./api/citizens'); +const geographyAPI = require('./api/geography'); // Setup api routes router.use('/api', api); router.use('/api/citizens', citizensAPI); +router.use('/api/geography', geographyAPI); router.get('/', (req, res) => { @@ -29,5 +31,14 @@ router.get("/citizens", (req, res) => { }); }); + +router.get("/addUser", (req, res) => { + res.render("addUser", { + title: "Add User" + }); + } +); + + // export the router module.exports = router; diff --git a/interface/views/adduser.ejs b/interface/views/adduser.ejs new file mode 100644 index 0000000..1a96601 --- /dev/null +++ b/interface/views/adduser.ejs @@ -0,0 +1,165 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <%- include('partials/head') %> + </head> + + <body> + + <%- include('partials/navbar') %> + + <div class="ui container segment" > + <form class="ui form" method="post" onsubmit="editCitizen(event)" > + <div class="field"> + <label>Citizen ID</label> + <input + placeholder="Citizen ID" + name="citizen_id" + type="text" + autocomplete="off" + id="citizen_id" + /> + </div> + <div class="field"> + <label>First Name</label> + <input + placeholder="First Name" + name="first_name" + type="text" + autocomplete="off" + id="first_name"> + </div> + <div class="field"> + <label>Last Name</label> + <input + placeholder="Last Name" + name="last_name" + type="text" + autocomplete="off" + id="last_name"> + <div> + <div class="field"> + <label>Address</label> + <input + placeholder="Address" + name="address" + type="text" + autocomplete="off" + id="address" + /> + </div> + <div class="field"> + <label>Mobile Number</label> + <input + type="text" + name="mobile_number" + placeholder="Mobile Number" + id="mobile_number" + /> + </div> + <div class="field"> + <label>Date of Birth</label> + <input type="date" name="dob" placeholder="DOB" id="dob" /> + </div> + <div class="field"> + <label>Marital Status</label> + <select class="ui dropdown" id="marital_status"> + <option value="M">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="No">No</option> + </select> + </div> + <div class="field"> + <label>Disabled Percentage</label> + <input + type="text" + name="disabled_percentage" + placeholder="Disabled Percentage" + id="disabled_percentage" + /> + </div> + <div class="field"> + <label>Caste</label> + <input + type="text" + name="caste" + placeholder="Caste" + id="caste" + /> + </div> + + <div class="field"> + <label>State</label> + <select class="ui dropdown" id="state"> + </select> + </div> + <div class="field"> + <label>District</label> + <select class="ui dropdown" id="district"> + </select> + </div> + <div class="field"> + <lable>Mandal</lable> + <select class="ui dropdown" id="mandal"> + </select> + </div> + <div class="field"> + <label>Village Name</label> + <select class="ui dropdown" id="village"> + </select> + </div> + + + + + + + + <div class="ui primary button" id="editCitizen">Submit</div> + <div class="ui error message"></div> + </form> + + </div> + + </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(); + + +</script> + +</html> diff --git a/interface/views/citizens.ejs b/interface/views/citizens.ejs index a1c6f5e..0e703b2 100644 --- a/interface/views/citizens.ejs +++ b/interface/views/citizens.ejs @@ -13,6 +13,7 @@ style="border: none; box-shadow: none" > <form class="ui form" method="post" onsubmit="editCitizen(event)"> + <div class="field"> <label>Address</label> <input diff --git a/interface/views/partials/navbar.ejs b/interface/views/partials/navbar.ejs index 34116ea..440497a 100644 --- a/interface/views/partials/navbar.ejs +++ b/interface/views/partials/navbar.ejs @@ -4,7 +4,7 @@ <span class="text">View Data</span> <i class="dropdown icon"></i> <div class="menu"> - <div class="item">Citizens</div> + <div class="item" onclick="route('citizens')">Citizens</div> <div class="item"> <i class="dropdown icon"></i> <span class="text">Amenities</span> @@ -42,6 +42,9 @@ </div> </div> </div> + + <a class="item" onclick="route('addUser')"> Add User </a> + <div class="right menu"> <div class="item"> <div class="ui icon input"> |
