Backup Before Changes village Task
This commit is contained in:
2
.env
2
.env
@@ -2,7 +2,7 @@ Secret_Key = 9f2a1b8c4d6e7f0123456789abcdef01
|
|||||||
|
|
||||||
MYSQL_HOST=127.0.0.1
|
MYSQL_HOST=127.0.0.1
|
||||||
MYSQL_USER=root
|
MYSQL_USER=root
|
||||||
MYSQL_PASSWORD=root
|
MYSQL_PASSWORD=tiger
|
||||||
MYSQL_DB=test
|
MYSQL_DB=test
|
||||||
|
|
||||||
DEFAULT_USERNAME=admin
|
DEFAULT_USERNAME=admin
|
||||||
|
|||||||
13
activity.log
13
activity.log
@@ -0,0 +1,13 @@
|
|||||||
|
Timestamp: 2026-03-24 10:27:31 | User: Unknown | Action: Edit Village | Details: User admin edited '39'
|
||||||
|
Timestamp: 2026-03-24 10:27:36 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '39'
|
||||||
|
Timestamp: 2026-03-24 10:33:47 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '35'
|
||||||
|
Timestamp: 2026-03-24 10:40:41 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '35'
|
||||||
|
Timestamp: 2026-03-24 11:05:41 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '55'
|
||||||
|
Timestamp: 2026-03-24 11:08:04 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '40'
|
||||||
|
Timestamp: 2026-03-24 11:13:07 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '13'
|
||||||
|
Timestamp: 2026-03-24 11:13:15 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '23'
|
||||||
|
Timestamp: 2026-03-24 11:15:20 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '28'
|
||||||
|
Timestamp: 2026-03-24 11:16:35 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '30'
|
||||||
|
Timestamp: 2026-03-24 11:17:12 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '33'
|
||||||
|
Timestamp: 2026-03-24 11:19:08 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '41'
|
||||||
|
Timestamp: 2026-03-24 11:23:57 | User: Unknown | Action: Delete Village | Details: User admin deleted Village '14'
|
||||||
|
|||||||
@@ -1,3 +1,364 @@
|
|||||||
|
# from flask_login import current_user
|
||||||
|
# from model.Utilities import RegEx, ResponseHandler, HtmlHelper, ItemCRUDType
|
||||||
|
# from model.Log import LogHelper
|
||||||
|
|
||||||
|
# import config
|
||||||
|
# import re
|
||||||
|
# import mysql.connector
|
||||||
|
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # Mapping Class
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# class itemCRUDMapping:
|
||||||
|
|
||||||
|
# def __init__(self, itemType):
|
||||||
|
# if itemType is ItemCRUDType.Village:
|
||||||
|
# self.name = "Village"
|
||||||
|
# elif itemType is ItemCRUDType.Block:
|
||||||
|
# self.name = "Block"
|
||||||
|
# elif itemType is ItemCRUDType.State:
|
||||||
|
# self.name = "State"
|
||||||
|
# elif itemType is ItemCRUDType.HoldType:
|
||||||
|
# self.name = "Hold Type"
|
||||||
|
# elif itemType is ItemCRUDType.Subcontractor:
|
||||||
|
# self.name = "Subcontractor"
|
||||||
|
# else:
|
||||||
|
# self.name = "Item"
|
||||||
|
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # Generic CRUD Class
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# class ItemCRUD:
|
||||||
|
|
||||||
|
# def __init__(self, itemType):
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = ""
|
||||||
|
# self.itemCRUDType = itemType
|
||||||
|
# self.itemCRUDMapping = itemCRUDMapping(itemType)
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # DELETE
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# def DeleteItem(self, request, itemID, storedprocDelete):
|
||||||
|
|
||||||
|
# connection = config.get_db_connection()
|
||||||
|
# cursor = connection.cursor()
|
||||||
|
|
||||||
|
# LogHelper.log_action(
|
||||||
|
# f"Delete {self.itemCRUDMapping.name}",
|
||||||
|
# f"User {current_user.id} deleted {self.itemCRUDMapping.name} '{itemID}'"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# cursor.callproc(storedprocDelete, (itemID,))
|
||||||
|
# connection.commit()
|
||||||
|
|
||||||
|
# self.isSuccess = True
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.delete_success(self.itemCRUDMapping.name), 200
|
||||||
|
# )
|
||||||
|
|
||||||
|
# except mysql.connector.Error as e:
|
||||||
|
# print(f"Error deleting {self.itemCRUDMapping.name}: {e}")
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.delete_failure(self.itemCRUDMapping.name), 500
|
||||||
|
# )
|
||||||
|
|
||||||
|
# finally:
|
||||||
|
# cursor.close()
|
||||||
|
# connection.close()
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # ADD
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# def AddItem(self, request, parentid=None, childname=None, storedprocfetch=None, storedprocadd=None, data=None):
|
||||||
|
|
||||||
|
# connection = config.get_db_connection()
|
||||||
|
# if not connection:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.db_connection_failure(), 500
|
||||||
|
# )
|
||||||
|
# return
|
||||||
|
|
||||||
|
# cursor = connection.cursor()
|
||||||
|
|
||||||
|
# LogHelper.log_action(
|
||||||
|
# f"Add {self.itemCRUDMapping.name}",
|
||||||
|
# f"User {current_user.id} adding '{childname if childname else (data.get('Contractor_Name') if data else '')}'"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# # ======================================================
|
||||||
|
# # SUBCONTRACTOR (MULTI-FIELD)
|
||||||
|
# # ======================================================
|
||||||
|
# if data:
|
||||||
|
|
||||||
|
# # Duplicate check
|
||||||
|
# cursor.callproc(storedprocfetch, (data['Contractor_Name'],))
|
||||||
|
|
||||||
|
# existing_item = None
|
||||||
|
# for rs in cursor.stored_results():
|
||||||
|
# existing_item = rs.fetchone()
|
||||||
|
|
||||||
|
# if existing_item:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
||||||
|
# )
|
||||||
|
# return
|
||||||
|
|
||||||
|
# # Insert
|
||||||
|
# cursor.callproc(storedprocadd, (
|
||||||
|
# data['Contractor_Name'],
|
||||||
|
# data['Address'],
|
||||||
|
# data['Mobile_No'],
|
||||||
|
# data['PAN_No'],
|
||||||
|
# data['Email'],
|
||||||
|
# data['Gender'],
|
||||||
|
# data['GST_Registration_Type'],
|
||||||
|
# data['GST_No'],
|
||||||
|
# data['Contractor_password']
|
||||||
|
# ))
|
||||||
|
|
||||||
|
# connection.commit()
|
||||||
|
|
||||||
|
# self.isSuccess = True
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.add_success(self.itemCRUDMapping.name), 200
|
||||||
|
# )
|
||||||
|
# return
|
||||||
|
|
||||||
|
# # ======================================================
|
||||||
|
# # NORMAL (Village / Block / State)
|
||||||
|
# # ======================================================
|
||||||
|
# if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400
|
||||||
|
# )
|
||||||
|
# return
|
||||||
|
|
||||||
|
# # Duplicate check
|
||||||
|
# if parentid is None:
|
||||||
|
# cursor.callproc(storedprocfetch, (childname,))
|
||||||
|
# else:
|
||||||
|
# cursor.callproc(storedprocfetch, (childname, parentid))
|
||||||
|
|
||||||
|
# existing_item = None
|
||||||
|
# for rs in cursor.stored_results():
|
||||||
|
# existing_item = rs.fetchone()
|
||||||
|
|
||||||
|
# if existing_item:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
||||||
|
# )
|
||||||
|
# return
|
||||||
|
|
||||||
|
# # Insert
|
||||||
|
# if parentid is None:
|
||||||
|
# cursor.callproc(storedprocadd, (childname,))
|
||||||
|
# else:
|
||||||
|
# cursor.callproc(storedprocadd, (childname, parentid))
|
||||||
|
|
||||||
|
# connection.commit()
|
||||||
|
|
||||||
|
# self.isSuccess = True
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
|
||||||
|
# ResponseHandler.add_success(self.itemCRUDMapping.name), 200
|
||||||
|
# )
|
||||||
|
|
||||||
|
# except mysql.connector.Error as e:
|
||||||
|
# print(f"Database Error: {e}")
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.add_failure(self.itemCRUDMapping.name), 500
|
||||||
|
# )
|
||||||
|
|
||||||
|
# finally:
|
||||||
|
# cursor.close()
|
||||||
|
# connection.close()
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # EDIT
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# def EditItem(self, request, childid, parentid=None, childname=None, storedprocupdate=None, data=None):
|
||||||
|
|
||||||
|
# connection = config.get_db_connection()
|
||||||
|
# cursor = connection.cursor()
|
||||||
|
|
||||||
|
# LogHelper.log_action(
|
||||||
|
# f"Edit {self.itemCRUDMapping.name}",
|
||||||
|
# f"User {current_user.id} edited '{childid}'"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# # ======================================================
|
||||||
|
# # SUBCONTRACTOR (MULTI-FIELD)
|
||||||
|
# # ======================================================
|
||||||
|
# if data:
|
||||||
|
# cursor.callproc(storedprocupdate, (
|
||||||
|
# childid,
|
||||||
|
# data['Contractor_Name'],
|
||||||
|
# data['Address'],
|
||||||
|
# data['Mobile_No'],
|
||||||
|
# data['PAN_No'],
|
||||||
|
# data['Email'],
|
||||||
|
# data['Gender'],
|
||||||
|
# data['GST_Registration_Type'],
|
||||||
|
# data['GST_No'],
|
||||||
|
# data['Contractor_password']
|
||||||
|
# ))
|
||||||
|
|
||||||
|
# connection.commit()
|
||||||
|
|
||||||
|
# self.isSuccess = True
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.update_success(self.itemCRUDMapping.name), 200
|
||||||
|
# )
|
||||||
|
# return
|
||||||
|
|
||||||
|
# # ======================================================
|
||||||
|
# # NORMAL
|
||||||
|
# # ======================================================
|
||||||
|
# if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = ResponseHandler.update_failure(self.itemCRUDMapping.name)['message']
|
||||||
|
# return
|
||||||
|
|
||||||
|
# if parentid is None:
|
||||||
|
# cursor.callproc(storedprocupdate, (childid, childname))
|
||||||
|
# else:
|
||||||
|
# cursor.callproc(storedprocupdate, (childid, parentid, childname))
|
||||||
|
|
||||||
|
# connection.commit()
|
||||||
|
|
||||||
|
# self.isSuccess = True
|
||||||
|
# self.resultMessage = ResponseHandler.update_success(self.itemCRUDMapping.name)['message']
|
||||||
|
|
||||||
|
# except mysql.connector.Error as e:
|
||||||
|
# print(f"Error updating {self.itemCRUDMapping.name}: {e}")
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.update_failure(self.itemCRUDMapping.name), 500
|
||||||
|
# )
|
||||||
|
|
||||||
|
# finally:
|
||||||
|
# cursor.close()
|
||||||
|
# connection.close()
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # GET ALL
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# def GetAllData(self, request, storedproc):
|
||||||
|
|
||||||
|
# data = []
|
||||||
|
# connection = config.get_db_connection()
|
||||||
|
|
||||||
|
# if not connection:
|
||||||
|
# return []
|
||||||
|
|
||||||
|
# cursor = connection.cursor()
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# cursor.callproc(storedproc)
|
||||||
|
|
||||||
|
# for result in cursor.stored_results():
|
||||||
|
# data = result.fetchall()
|
||||||
|
|
||||||
|
# self.isSuccess = True
|
||||||
|
|
||||||
|
# except mysql.connector.Error as e:
|
||||||
|
# print(f"Error fetching {self.itemCRUDMapping.name}: {e}")
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.fetch_failure(self.itemCRUDMapping.name), 500
|
||||||
|
# )
|
||||||
|
# return []
|
||||||
|
|
||||||
|
# finally:
|
||||||
|
# cursor.close()
|
||||||
|
# connection.close()
|
||||||
|
|
||||||
|
# return data
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # GET BY ID
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# def GetDataByID(self, id, storedproc):
|
||||||
|
|
||||||
|
# data = None
|
||||||
|
# connection = config.get_db_connection()
|
||||||
|
# cursor = connection.cursor()
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# cursor.callproc(storedproc, (id,))
|
||||||
|
|
||||||
|
# for rs in cursor.stored_results():
|
||||||
|
# data = rs.fetchone()
|
||||||
|
|
||||||
|
# except mysql.connector.Error as e:
|
||||||
|
# print(f"Error fetching {self.itemCRUDMapping.name}: {e}")
|
||||||
|
|
||||||
|
# finally:
|
||||||
|
# cursor.close()
|
||||||
|
# connection.close()
|
||||||
|
|
||||||
|
# return data
|
||||||
|
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# # CHECK ITEM
|
||||||
|
# # ----------------------------------------------------------
|
||||||
|
# def CheckItem(self, request, parentid, childname, storedprocfetch):
|
||||||
|
|
||||||
|
# connection = config.get_db_connection()
|
||||||
|
# cursor = connection.cursor()
|
||||||
|
|
||||||
|
# LogHelper.log_action(
|
||||||
|
# f"Check {self.itemCRUDMapping.name}",
|
||||||
|
# f"User {current_user.id} checked '{childname}'"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||||
|
# return HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400
|
||||||
|
# )
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# if parentid is None:
|
||||||
|
# cursor.callproc(storedprocfetch, (childname,))
|
||||||
|
# else:
|
||||||
|
# cursor.callproc(storedprocfetch, (childname, parentid))
|
||||||
|
|
||||||
|
# existing_item = None
|
||||||
|
# for rs in cursor.stored_results():
|
||||||
|
# existing_item = rs.fetchone()
|
||||||
|
|
||||||
|
# if existing_item:
|
||||||
|
# return HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
||||||
|
# )
|
||||||
|
|
||||||
|
# return HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.is_available(self.itemCRUDMapping.name), 200
|
||||||
|
# )
|
||||||
|
|
||||||
|
# except mysql.connector.Error as e:
|
||||||
|
# print(f"Error checking {self.itemCRUDMapping.name}: {e}")
|
||||||
|
# return HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.fetch_failure(self.itemCRUDMapping.name), 500
|
||||||
|
# )
|
||||||
|
|
||||||
|
# finally:
|
||||||
|
# cursor.close()
|
||||||
|
# connection.close()
|
||||||
|
|
||||||
|
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from model.Utilities import RegEx, ResponseHandler, HtmlHelper, ItemCRUDType
|
from model.Utilities import RegEx, ResponseHandler, HtmlHelper, ItemCRUDType
|
||||||
from model.Log import LogHelper
|
from model.Log import LogHelper
|
||||||
@@ -35,6 +396,7 @@ class ItemCRUD:
|
|||||||
def __init__(self, itemType):
|
def __init__(self, itemType):
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = ""
|
self.resultMessage = ""
|
||||||
|
self.response = {} # ✅ ADDED
|
||||||
self.itemCRUDType = itemType
|
self.itemCRUDType = itemType
|
||||||
self.itemCRUDMapping = itemCRUDMapping(itemType)
|
self.itemCRUDMapping = itemCRUDMapping(itemType)
|
||||||
|
|
||||||
@@ -56,16 +418,14 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.delete_success(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.delete_success(self.itemCRUDMapping.name), 200
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
|
|
||||||
except mysql.connector.Error as e:
|
except mysql.connector.Error as e:
|
||||||
print(f"Error deleting {self.itemCRUDMapping.name}: {e}")
|
print(f"Error deleting {self.itemCRUDMapping.name}: {e}")
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.delete_failure(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.delete_failure(self.itemCRUDMapping.name), 500
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
cursor.close()
|
cursor.close()
|
||||||
@@ -79,9 +439,8 @@ class ItemCRUD:
|
|||||||
connection = config.get_db_connection()
|
connection = config.get_db_connection()
|
||||||
if not connection:
|
if not connection:
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.add_failure(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.db_connection_failure(), 500
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
@@ -92,12 +451,8 @@ class ItemCRUD:
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# ======================================================
|
# SUBCONTRACTOR
|
||||||
# SUBCONTRACTOR (MULTI-FIELD)
|
|
||||||
# ======================================================
|
|
||||||
if data:
|
if data:
|
||||||
|
|
||||||
# Duplicate check
|
|
||||||
cursor.callproc(storedprocfetch, (data['Contractor_Name'],))
|
cursor.callproc(storedprocfetch, (data['Contractor_Name'],))
|
||||||
|
|
||||||
existing_item = None
|
existing_item = None
|
||||||
@@ -106,12 +461,10 @@ class ItemCRUD:
|
|||||||
|
|
||||||
if existing_item:
|
if existing_item:
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Insert
|
|
||||||
cursor.callproc(storedprocadd, (
|
cursor.callproc(storedprocadd, (
|
||||||
data['Contractor_Name'],
|
data['Contractor_Name'],
|
||||||
data['Address'],
|
data['Address'],
|
||||||
@@ -127,22 +480,17 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.add_success(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.add_success(self.itemCRUDMapping.name), 200
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# ======================================================
|
# NORMAL
|
||||||
# NORMAL (Village / Block / State)
|
|
||||||
# ======================================================
|
|
||||||
if not re.match(RegEx.patternAlphabetOnly, childname):
|
if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.invalid_name(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Duplicate check
|
|
||||||
if parentid is None:
|
if parentid is None:
|
||||||
cursor.callproc(storedprocfetch, (childname,))
|
cursor.callproc(storedprocfetch, (childname,))
|
||||||
else:
|
else:
|
||||||
@@ -154,12 +502,10 @@ class ItemCRUD:
|
|||||||
|
|
||||||
if existing_item:
|
if existing_item:
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Insert
|
|
||||||
if parentid is None:
|
if parentid is None:
|
||||||
cursor.callproc(storedprocadd, (childname,))
|
cursor.callproc(storedprocadd, (childname,))
|
||||||
else:
|
else:
|
||||||
@@ -168,17 +514,14 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.add_success(self.itemCRUDMapping.name)
|
||||||
|
self.resultMessage = self.response["message"]
|
||||||
ResponseHandler.add_success(self.itemCRUDMapping.name), 200
|
|
||||||
)
|
|
||||||
|
|
||||||
except mysql.connector.Error as e:
|
except mysql.connector.Error as e:
|
||||||
print(f"Database Error: {e}")
|
print(f"Database Error: {e}")
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.add_failure(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.add_failure(self.itemCRUDMapping.name), 500
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
cursor.close()
|
cursor.close()
|
||||||
@@ -198,9 +541,6 @@ class ItemCRUD:
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# ======================================================
|
|
||||||
# SUBCONTRACTOR (MULTI-FIELD)
|
|
||||||
# ======================================================
|
|
||||||
if data:
|
if data:
|
||||||
cursor.callproc(storedprocupdate, (
|
cursor.callproc(storedprocupdate, (
|
||||||
childid,
|
childid,
|
||||||
@@ -218,17 +558,14 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.update_success(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.update_success(self.itemCRUDMapping.name), 200
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# ======================================================
|
|
||||||
# NORMAL
|
|
||||||
# ======================================================
|
|
||||||
if not re.match(RegEx.patternAlphabetOnly, childname):
|
if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = ResponseHandler.update_failure(self.itemCRUDMapping.name)['message']
|
self.response = ResponseHandler.update_failure(self.itemCRUDMapping.name)
|
||||||
|
self.resultMessage = self.response["message"]
|
||||||
return
|
return
|
||||||
|
|
||||||
if parentid is None:
|
if parentid is None:
|
||||||
@@ -239,14 +576,14 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.resultMessage = ResponseHandler.update_success(self.itemCRUDMapping.name)['message']
|
self.response = ResponseHandler.update_success(self.itemCRUDMapping.name)
|
||||||
|
self.resultMessage = self.response["message"]
|
||||||
|
|
||||||
except mysql.connector.Error as e:
|
except mysql.connector.Error as e:
|
||||||
print(f"Error updating {self.itemCRUDMapping.name}: {e}")
|
print(f"Error updating {self.itemCRUDMapping.name}: {e}")
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.update_failure(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.update_failure(self.itemCRUDMapping.name), 500
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
cursor.close()
|
cursor.close()
|
||||||
@@ -276,9 +613,8 @@ class ItemCRUD:
|
|||||||
except mysql.connector.Error as e:
|
except mysql.connector.Error as e:
|
||||||
print(f"Error fetching {self.itemCRUDMapping.name}: {e}")
|
print(f"Error fetching {self.itemCRUDMapping.name}: {e}")
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
self.response = ResponseHandler.fetch_failure(self.itemCRUDMapping.name)
|
||||||
ResponseHandler.fetch_failure(self.itemCRUDMapping.name), 500
|
self.resultMessage = self.response["message"]
|
||||||
)
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
@@ -312,7 +648,7 @@ class ItemCRUD:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
# CHECK ITEM
|
# CHECK ITEM (KEEP AS IS - API USE)
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
def CheckItem(self, request, parentid, childname, storedprocfetch):
|
def CheckItem(self, request, parentid, childname, storedprocfetch):
|
||||||
|
|
||||||
|
|||||||
197
model/Village.py
197
model/Village.py
@@ -1,3 +1,176 @@
|
|||||||
|
# from model.Utilities import ResponseHandler, HtmlHelper, ItemCRUDType
|
||||||
|
# import config
|
||||||
|
# import mysql.connector
|
||||||
|
# from model.ItemCRUD import ItemCRUD
|
||||||
|
|
||||||
|
|
||||||
|
# class Village:
|
||||||
|
# isSuccess = False
|
||||||
|
# resultMessage = ""
|
||||||
|
|
||||||
|
# def __init__(self):
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = ""
|
||||||
|
# self.village = ItemCRUD(itemType=ItemCRUDType.Village)
|
||||||
|
|
||||||
|
# # 🔹 Helper: sync status
|
||||||
|
# def _set_status(self, village):
|
||||||
|
# self.isSuccess = village.isSuccess
|
||||||
|
# self.resultMessage = village.resultMessage
|
||||||
|
|
||||||
|
# # 🔹 Helper: get request data
|
||||||
|
# def _get_form_data(self, request):
|
||||||
|
# block_id = request.form.get('block_Id')
|
||||||
|
# village_name = request.form.get('Village_Name', '').strip()
|
||||||
|
# return block_id, village_name
|
||||||
|
|
||||||
|
# def AddVillage(self, request):
|
||||||
|
# block_id, village_name = self._get_form_data(request)
|
||||||
|
|
||||||
|
# if not village_name:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = "Village name cannot be empty"
|
||||||
|
# return
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# self.village.AddItem(
|
||||||
|
# request=request,
|
||||||
|
# parentid=block_id,
|
||||||
|
# childname=village_name,
|
||||||
|
# storedprocfetch="GetVillageByNameAndBlock",
|
||||||
|
# storedprocadd="SaveVillage"
|
||||||
|
# )
|
||||||
|
# self._set_status(self.village)
|
||||||
|
|
||||||
|
# except Exception as e:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = str(e)
|
||||||
|
|
||||||
|
# def GetAllVillages(self, request):
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# villagesdata = self.village.GetAllData(
|
||||||
|
# request=request,
|
||||||
|
# storedproc="GetAllVillages"
|
||||||
|
# )
|
||||||
|
# self._set_status(self.village)
|
||||||
|
# return villagesdata
|
||||||
|
|
||||||
|
# except Exception as e:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = str(e)
|
||||||
|
# return []
|
||||||
|
|
||||||
|
# def CheckVillage(self, request):
|
||||||
|
# block_id, village_name = self._get_form_data(request)
|
||||||
|
|
||||||
|
# if not village_name:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = "Village name cannot be empty"
|
||||||
|
# return None
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# result = self.village.CheckItem(
|
||||||
|
# request=request,
|
||||||
|
# parentid=block_id,
|
||||||
|
# childname=village_name,
|
||||||
|
# storedprocfetch="GetVillageByNameAndBlocks"
|
||||||
|
# )
|
||||||
|
# self._set_status(self.village)
|
||||||
|
# return result
|
||||||
|
|
||||||
|
# except Exception as e:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = str(e)
|
||||||
|
# return None
|
||||||
|
|
||||||
|
# def DeleteVillage(self, request, village_id):
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# self.village.DeleteItem(
|
||||||
|
# request=request,
|
||||||
|
# itemID=village_id,
|
||||||
|
# storedprocDelete="DeleteVillage"
|
||||||
|
# )
|
||||||
|
# self._set_status(self.village)
|
||||||
|
|
||||||
|
# except Exception as e:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = str(e)
|
||||||
|
|
||||||
|
# def EditVillage(self, request, village_id):
|
||||||
|
# block_id, village_name = self._get_form_data(request)
|
||||||
|
|
||||||
|
# if not village_name:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = "Village name cannot be empty"
|
||||||
|
# return
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# self.village.EditItem(
|
||||||
|
# request=request,
|
||||||
|
# childid=village_id,
|
||||||
|
# parentid=block_id,
|
||||||
|
# childname=village_name,
|
||||||
|
# storedprocupdate="UpdateVillage"
|
||||||
|
# )
|
||||||
|
# self._set_status(self.village)
|
||||||
|
|
||||||
|
# except Exception as e:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = str(e)
|
||||||
|
|
||||||
|
# def GetVillageByID(self, id):
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# villagedetailsdata = self.village.GetDataByID(
|
||||||
|
# id=id,
|
||||||
|
# storedproc="GetVillageDetailsById"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# if villagedetailsdata:
|
||||||
|
# self.isSuccess = True
|
||||||
|
# else:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = "Village not found"
|
||||||
|
|
||||||
|
# return villagedetailsdata
|
||||||
|
|
||||||
|
# except Exception as e:
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = str(e)
|
||||||
|
# return None
|
||||||
|
|
||||||
|
# def GetAllBlocks(self):
|
||||||
|
# blocks = []
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = ""
|
||||||
|
|
||||||
|
# connection = config.get_db_connection()
|
||||||
|
# if not connection:
|
||||||
|
# return []
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# with connection.cursor() as cursor:
|
||||||
|
# cursor.callproc('GetAllBlocks')
|
||||||
|
|
||||||
|
# for result in cursor.stored_results():
|
||||||
|
# blocks.extend(result.fetchall())
|
||||||
|
|
||||||
|
# self.isSuccess = True
|
||||||
|
# return blocks
|
||||||
|
|
||||||
|
# except mysql.connector.Error as e:
|
||||||
|
# print(f"Error fetching blocks: {e}")
|
||||||
|
# self.isSuccess = False
|
||||||
|
# self.resultMessage = HtmlHelper.json_response(
|
||||||
|
# ResponseHandler.fetch_failure("block"), 500
|
||||||
|
# )
|
||||||
|
# return []
|
||||||
|
|
||||||
|
# finally:
|
||||||
|
# connection.close()
|
||||||
|
|
||||||
from model.Utilities import ResponseHandler, HtmlHelper, ItemCRUDType
|
from model.Utilities import ResponseHandler, HtmlHelper, ItemCRUDType
|
||||||
import config
|
import config
|
||||||
import mysql.connector
|
import mysql.connector
|
||||||
@@ -11,11 +184,18 @@ class Village:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = ""
|
self.resultMessage = ""
|
||||||
|
self.response = {} # ✅ ADDED
|
||||||
self.village = ItemCRUD(itemType=ItemCRUDType.Village)
|
self.village = ItemCRUD(itemType=ItemCRUDType.Village)
|
||||||
|
|
||||||
# 🔹 Helper: sync status
|
# 🔹 Helper: sync status
|
||||||
def _set_status(self, village):
|
def _set_status(self, village):
|
||||||
self.isSuccess = village.isSuccess
|
self.isSuccess = village.isSuccess
|
||||||
|
|
||||||
|
# ✅ UPDATED (safe handling)
|
||||||
|
if hasattr(village, "response"):
|
||||||
|
self.response = village.response
|
||||||
|
self.resultMessage = village.response.get("message", "")
|
||||||
|
else:
|
||||||
self.resultMessage = village.resultMessage
|
self.resultMessage = village.resultMessage
|
||||||
|
|
||||||
# 🔹 Helper: get request data
|
# 🔹 Helper: get request data
|
||||||
@@ -28,8 +208,9 @@ class Village:
|
|||||||
block_id, village_name = self._get_form_data(request)
|
block_id, village_name = self._get_form_data(request)
|
||||||
|
|
||||||
if not village_name:
|
if not village_name:
|
||||||
|
self.response = ResponseHandler.invalid_name("village") # ✅ UPDATED
|
||||||
|
self.resultMessage = self.response["message"]
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = "Village name cannot be empty"
|
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -65,8 +246,9 @@ class Village:
|
|||||||
block_id, village_name = self._get_form_data(request)
|
block_id, village_name = self._get_form_data(request)
|
||||||
|
|
||||||
if not village_name:
|
if not village_name:
|
||||||
|
self.response = ResponseHandler.invalid_name("village") # ✅ UPDATED
|
||||||
|
self.resultMessage = self.response["message"]
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = "Village name cannot be empty"
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -102,8 +284,9 @@ class Village:
|
|||||||
block_id, village_name = self._get_form_data(request)
|
block_id, village_name = self._get_form_data(request)
|
||||||
|
|
||||||
if not village_name:
|
if not village_name:
|
||||||
|
self.response = ResponseHandler.invalid_name("village") # ✅ UPDATED
|
||||||
|
self.resultMessage = self.response["message"]
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = "Village name cannot be empty"
|
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -163,9 +346,11 @@ class Village:
|
|||||||
except mysql.connector.Error as e:
|
except mysql.connector.Error as e:
|
||||||
print(f"Error fetching blocks: {e}")
|
print(f"Error fetching blocks: {e}")
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.resultMessage = HtmlHelper.json_response(
|
|
||||||
ResponseHandler.fetch_failure("block"), 500
|
# ✅ FIXED (removed jsonify response)
|
||||||
)
|
self.response = ResponseHandler.fetch_failure("block")
|
||||||
|
self.resultMessage = self.response["message"]
|
||||||
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
|
|||||||
@@ -1,9 +1,237 @@
|
|||||||
|
// window.onload = function () {
|
||||||
|
// document.getElementById('Village_Name').focus();
|
||||||
|
// };
|
||||||
|
|
||||||
|
// $(document).ready(function () {
|
||||||
|
|
||||||
|
// // STATE → DISTRICT
|
||||||
|
// $('#state_Id').change(function () {
|
||||||
|
|
||||||
|
// var stateId = $(this).val();
|
||||||
|
|
||||||
|
// if (stateId) {
|
||||||
|
|
||||||
|
// $.ajax({
|
||||||
|
// url: '/get_districts/' + stateId,
|
||||||
|
// type: 'GET',
|
||||||
|
|
||||||
|
// success: function (data) {
|
||||||
|
|
||||||
|
// var districtDropdown = $('#district_Id');
|
||||||
|
|
||||||
|
// districtDropdown.empty();
|
||||||
|
// districtDropdown.append('<option value="" disabled selected>Select District</option>');
|
||||||
|
|
||||||
|
// data.forEach(function (district) {
|
||||||
|
|
||||||
|
// districtDropdown.append(
|
||||||
|
// '<option value="' + district.id + '">' + district.name + '</option>'
|
||||||
|
// );
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// districtDropdown.prop('disabled', false);
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// // DISTRICT → BLOCK
|
||||||
|
// $('#district_Id').change(function () {
|
||||||
|
|
||||||
|
// var districtId = $(this).val();
|
||||||
|
|
||||||
|
// if (districtId) {
|
||||||
|
|
||||||
|
// $.ajax({
|
||||||
|
// url: '/get_blocks/' + districtId,
|
||||||
|
// type: 'GET',
|
||||||
|
|
||||||
|
// success: function (data) {
|
||||||
|
|
||||||
|
// var blockDropdown = $('#block_Id');
|
||||||
|
|
||||||
|
// blockDropdown.empty();
|
||||||
|
// blockDropdown.append('<option value="" disabled selected>Select Block</option>');
|
||||||
|
|
||||||
|
// data.forEach(function (block) {
|
||||||
|
|
||||||
|
// blockDropdown.append(
|
||||||
|
// '<option value="' + block.id + '">' + block.name + '</option>'
|
||||||
|
// );
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// blockDropdown.prop('disabled', false);
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// // VILLAGE NAME VALIDATION
|
||||||
|
// $('#Village_Name').on('input', function () {
|
||||||
|
|
||||||
|
// var villageName = $(this).val();
|
||||||
|
// var validPattern = /^[A-Za-z ]*$/;
|
||||||
|
|
||||||
|
// if (!validPattern.test(villageName)) {
|
||||||
|
|
||||||
|
// $('#villageMessage')
|
||||||
|
// .text('Only letters and spaces are allowed!')
|
||||||
|
// .css('color', 'red');
|
||||||
|
|
||||||
|
// $('#submitVillage').prop('disabled', true);
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
|
||||||
|
// $('#villageMessage').text('');
|
||||||
|
// $('#submitVillage').prop('disabled', false);
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// // CHECK DUPLICATE VILLAGE
|
||||||
|
// $('#Village_Name, #block_Id').on('change keyup', function () {
|
||||||
|
|
||||||
|
// var blockId = $('#block_Id').val();
|
||||||
|
// var villageName = $('#Village_Name').val().trim();
|
||||||
|
|
||||||
|
// if (blockId && villageName) {
|
||||||
|
|
||||||
|
// $.ajax({
|
||||||
|
|
||||||
|
// url: '/check_village',
|
||||||
|
// type: 'POST',
|
||||||
|
|
||||||
|
// data: {
|
||||||
|
// block_Id: blockId,
|
||||||
|
// Village_Name: villageName
|
||||||
|
// },
|
||||||
|
|
||||||
|
// success: function (response) {
|
||||||
|
|
||||||
|
// if (response.status === 'exists') {
|
||||||
|
|
||||||
|
// $('#villageMessage')
|
||||||
|
// .text(response.message)
|
||||||
|
// .css('color', 'red');
|
||||||
|
|
||||||
|
// $('#submitVillage').prop('disabled', true);
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
|
||||||
|
// $('#villageMessage')
|
||||||
|
// .text(response.message)
|
||||||
|
// .css('color', 'green');
|
||||||
|
|
||||||
|
// $('#submitVillage').prop('disabled', false);
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// },
|
||||||
|
|
||||||
|
// error: function () {
|
||||||
|
|
||||||
|
// $('#villageMessage')
|
||||||
|
// .text('Error checking village name')
|
||||||
|
// .css('color', 'red');
|
||||||
|
|
||||||
|
// $('#submitVillage').prop('disabled', true);
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// // ADD VILLAGE
|
||||||
|
// $('#villageForm').submit(function (event) {
|
||||||
|
|
||||||
|
// event.preventDefault();
|
||||||
|
|
||||||
|
// $.ajax({
|
||||||
|
|
||||||
|
// url: '/add_village',
|
||||||
|
// type: 'POST',
|
||||||
|
// data: $(this).serialize(),
|
||||||
|
|
||||||
|
// success: function (response) {
|
||||||
|
|
||||||
|
// if (response.status === 'success') {
|
||||||
|
|
||||||
|
// alert('Village added successfully!');
|
||||||
|
// location.reload();
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
|
||||||
|
// alert('Error adding village. Please try again.');
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// },
|
||||||
|
|
||||||
|
// error: function () {
|
||||||
|
|
||||||
|
// alert('An error occurred. Please try again.');
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
window.onload = function () {
|
window.onload = function () {
|
||||||
document.getElementById('Village_Name').focus();
|
document.getElementById('Village_Name').focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
||||||
|
// 🔥 RESTORE VIEW MODE AFTER RELOAD
|
||||||
|
var viewMode = localStorage.getItem("viewMode");
|
||||||
|
|
||||||
|
if (viewMode === "table") {
|
||||||
|
$('#addForm').hide();
|
||||||
|
$('#addTable').show();
|
||||||
|
} else {
|
||||||
|
$('#addForm').show();
|
||||||
|
$('#addTable').hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 🔥 BUTTON TOGGLE LOGIC
|
||||||
|
|
||||||
|
$('#addButton').click(function () {
|
||||||
|
$('#addForm').show();
|
||||||
|
$('#addTable').hide();
|
||||||
|
|
||||||
|
localStorage.setItem("viewMode", "form");
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#displayButton').click(function () {
|
||||||
|
$('#addForm').hide();
|
||||||
|
$('#addTable').show();
|
||||||
|
|
||||||
|
localStorage.setItem("viewMode", "table");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// STATE → DISTRICT
|
// STATE → DISTRICT
|
||||||
$('#state_Id').change(function () {
|
$('#state_Id').change(function () {
|
||||||
|
|
||||||
@@ -179,7 +407,7 @@ $(document).ready(function () {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
alert('Error adding village. Please try again.');
|
alert(response.message || 'Error adding village. Please try again.');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,3 +424,38 @@ $(document).ready(function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// 🔥 DELETE FUNCTION (UPDATED)
|
||||||
|
function deleteVillage(villageId) {
|
||||||
|
|
||||||
|
if (!confirm("Are you sure you want to delete this village?")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ save that user is on table
|
||||||
|
localStorage.setItem("viewMode", "table");
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/delete_village/' + villageId,
|
||||||
|
type: 'GET',
|
||||||
|
|
||||||
|
success: function () {
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
|
||||||
|
alert("Village deleted successfully!");
|
||||||
|
|
||||||
|
// reload but stay on table
|
||||||
|
location.reload();
|
||||||
|
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
error: function () {
|
||||||
|
alert("Error deleting village. Please try again.");
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -84,11 +84,11 @@
|
|||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ url_for('village.delete_village', village_id=village[0]) }}"
|
<a href="#"
|
||||||
onclick="return confirm('Are you sure you want to delete this village?');">
|
onclick="deleteVillage({{ village[0] }}); return false;">
|
||||||
<img src="{{ url_for('static', filename='images/icons/bin_red_icon.png') }}" alt="Delete"
|
<img src="{{ url_for('static', filename='images/icons/bin_red_icon.png') }}"
|
||||||
class="icon">
|
alt="Delete" class="icon">
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
Reference in New Issue
Block a user