Village module delete issue resolved and also message shown in alert #8
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ __pycache__/
|
||||
|
||||
static/downloads/
|
||||
static/uploads/
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
|
||||
|
||||
|
||||
from flask_login import current_user
|
||||
from model.Utilities import RegEx, ResponseHandler, HtmlHelper, ItemCRUDType
|
||||
from model.Log import LogHelper
|
||||
@@ -35,6 +38,7 @@ class ItemCRUD:
|
||||
def __init__(self, itemType):
|
||||
self.isSuccess = False
|
||||
self.resultMessage = ""
|
||||
self.response = {} # ✅ ADDED
|
||||
self.itemCRUDType = itemType
|
||||
self.itemCRUDMapping = itemCRUDMapping(itemType)
|
||||
|
||||
@@ -56,16 +60,14 @@ class ItemCRUD:
|
||||
connection.commit()
|
||||
|
||||
self.isSuccess = True
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.delete_success(self.itemCRUDMapping.name), 200
|
||||
)
|
||||
self.response = ResponseHandler.delete_success(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
|
||||
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
|
||||
)
|
||||
self.response = ResponseHandler.delete_failure(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
@@ -79,9 +81,8 @@ class ItemCRUD:
|
||||
connection = config.get_db_connection()
|
||||
if not connection:
|
||||
self.isSuccess = False
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.db_connection_failure(), 500
|
||||
)
|
||||
self.response = ResponseHandler.add_failure(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
return
|
||||
|
||||
cursor = connection.cursor()
|
||||
@@ -92,12 +93,8 @@ class ItemCRUD:
|
||||
)
|
||||
|
||||
try:
|
||||
# ======================================================
|
||||
# SUBCONTRACTOR (MULTI-FIELD)
|
||||
# ======================================================
|
||||
# SUBCONTRACTOR
|
||||
if data:
|
||||
|
||||
# Duplicate check
|
||||
cursor.callproc(storedprocfetch, (data['Contractor_Name'],))
|
||||
|
||||
existing_item = None
|
||||
@@ -106,12 +103,10 @@ class ItemCRUD:
|
||||
|
||||
if existing_item:
|
||||
self.isSuccess = False
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
||||
)
|
||||
self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
return
|
||||
|
||||
# Insert
|
||||
cursor.callproc(storedprocadd, (
|
||||
data['Contractor_Name'],
|
||||
data['Address'],
|
||||
@@ -127,22 +122,17 @@ class ItemCRUD:
|
||||
connection.commit()
|
||||
|
||||
self.isSuccess = True
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.add_success(self.itemCRUDMapping.name), 200
|
||||
)
|
||||
self.response = ResponseHandler.add_success(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
return
|
||||
|
||||
# ======================================================
|
||||
# NORMAL (Village / Block / State)
|
||||
# ======================================================
|
||||
# NORMAL
|
||||
if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||
self.isSuccess = False
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400
|
||||
)
|
||||
self.response = ResponseHandler.invalid_name(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
return
|
||||
|
||||
# Duplicate check
|
||||
if parentid is None:
|
||||
cursor.callproc(storedprocfetch, (childname,))
|
||||
else:
|
||||
@@ -154,12 +144,10 @@ class ItemCRUD:
|
||||
|
||||
if existing_item:
|
||||
self.isSuccess = False
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
||||
)
|
||||
self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
return
|
||||
|
||||
# Insert
|
||||
if parentid is None:
|
||||
cursor.callproc(storedprocadd, (childname,))
|
||||
else:
|
||||
@@ -168,17 +156,14 @@ class ItemCRUD:
|
||||
connection.commit()
|
||||
|
||||
self.isSuccess = True
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
|
||||
ResponseHandler.add_success(self.itemCRUDMapping.name), 200
|
||||
)
|
||||
self.response = ResponseHandler.add_success(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
|
||||
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
|
||||
)
|
||||
self.response = ResponseHandler.add_failure(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
@@ -198,9 +183,6 @@ class ItemCRUD:
|
||||
)
|
||||
|
||||
try:
|
||||
# ======================================================
|
||||
# SUBCONTRACTOR (MULTI-FIELD)
|
||||
# ======================================================
|
||||
if data:
|
||||
cursor.callproc(storedprocupdate, (
|
||||
childid,
|
||||
@@ -218,17 +200,14 @@ class ItemCRUD:
|
||||
connection.commit()
|
||||
|
||||
self.isSuccess = True
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.update_success(self.itemCRUDMapping.name), 200
|
||||
)
|
||||
self.response = ResponseHandler.update_success(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
return
|
||||
|
||||
# ======================================================
|
||||
# NORMAL
|
||||
# ======================================================
|
||||
if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||
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
|
||||
|
||||
if parentid is None:
|
||||
@@ -239,14 +218,14 @@ class ItemCRUD:
|
||||
connection.commit()
|
||||
|
||||
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:
|
||||
print(f"Error updating {self.itemCRUDMapping.name}: {e}")
|
||||
self.isSuccess = False
|
||||
self.resultMessage = HtmlHelper.json_response(
|
||||
ResponseHandler.update_failure(self.itemCRUDMapping.name), 500
|
||||
)
|
||||
self.response = ResponseHandler.update_failure(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
@@ -276,9 +255,8 @@ class ItemCRUD:
|
||||
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
|
||||
)
|
||||
self.response = ResponseHandler.fetch_failure(self.itemCRUDMapping.name)
|
||||
self.resultMessage = self.response["message"]
|
||||
return []
|
||||
|
||||
finally:
|
||||
@@ -312,7 +290,7 @@ class ItemCRUD:
|
||||
return data
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# CHECK ITEM
|
||||
# CHECK ITEM (KEEP AS IS - API USE)
|
||||
# ----------------------------------------------------------
|
||||
def CheckItem(self, request, parentid, childname, storedprocfetch):
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
|
||||
|
||||
from model.Utilities import ResponseHandler, HtmlHelper, ItemCRUDType
|
||||
import config
|
||||
import mysql.connector
|
||||
@@ -11,11 +13,18 @@ class Village:
|
||||
def __init__(self):
|
||||
self.isSuccess = False
|
||||
self.resultMessage = ""
|
||||
self.response = {} # ✅ ADDED
|
||||
self.village = ItemCRUD(itemType=ItemCRUDType.Village)
|
||||
|
||||
# 🔹 Helper: sync status
|
||||
def _set_status(self, village):
|
||||
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
|
||||
|
||||
# 🔹 Helper: get request data
|
||||
@@ -28,8 +37,9 @@ class Village:
|
||||
block_id, village_name = self._get_form_data(request)
|
||||
|
||||
if not village_name:
|
||||
self.response = ResponseHandler.invalid_name("village") # ✅ UPDATED
|
||||
self.resultMessage = self.response["message"]
|
||||
self.isSuccess = False
|
||||
self.resultMessage = "Village name cannot be empty"
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -65,8 +75,9 @@ class Village:
|
||||
block_id, village_name = self._get_form_data(request)
|
||||
|
||||
if not village_name:
|
||||
self.response = ResponseHandler.invalid_name("village") # ✅ UPDATED
|
||||
self.resultMessage = self.response["message"]
|
||||
self.isSuccess = False
|
||||
self.resultMessage = "Village name cannot be empty"
|
||||
return None
|
||||
|
||||
try:
|
||||
@@ -102,8 +113,9 @@ class Village:
|
||||
block_id, village_name = self._get_form_data(request)
|
||||
|
||||
if not village_name:
|
||||
self.response = ResponseHandler.invalid_name("village") # ✅ UPDATED
|
||||
self.resultMessage = self.response["message"]
|
||||
self.isSuccess = False
|
||||
self.resultMessage = "Village name cannot be empty"
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -163,9 +175,11 @@ class Village:
|
||||
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
|
||||
)
|
||||
|
||||
# ✅ FIXED (removed jsonify response)
|
||||
self.response = ResponseHandler.fetch_failure("block")
|
||||
self.resultMessage = self.response["message"]
|
||||
|
||||
return []
|
||||
|
||||
finally:
|
||||
|
||||
@@ -1,9 +1,40 @@
|
||||
|
||||
|
||||
window.onload = function () {
|
||||
document.getElementById('Village_Name').focus();
|
||||
};
|
||||
|
||||
$(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_Id').change(function () {
|
||||
|
||||
@@ -179,7 +210,7 @@ $(document).ready(function () {
|
||||
|
||||
} else {
|
||||
|
||||
alert('Error adding village. Please try again.');
|
||||
alert(response.message || 'Error adding village. Please try again.');
|
||||
|
||||
}
|
||||
|
||||
@@ -196,3 +227,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>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ url_for('village.delete_village', village_id=village[0]) }}"
|
||||
onclick="return confirm('Are you sure you want to delete this village?');">
|
||||
<img src="{{ url_for('static', filename='images/icons/bin_red_icon.png') }}" alt="Delete"
|
||||
class="icon">
|
||||
</a>
|
||||
<a href="#"
|
||||
onclick="deleteVillage({{ village[0] }}); return false;">
|
||||
<img src="{{ url_for('static', filename='images/icons/bin_red_icon.png') }}"
|
||||
alt="Delete" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
Reference in New Issue
Block a user