diff --git a/model/ItemCRUD.py b/model/ItemCRUD.py index ed00ae7..19f8dfb 100644 --- a/model/ItemCRUD.py +++ b/model/ItemCRUD.py @@ -1,6 +1,3 @@ - - - from flask_login import current_user from model.Utilities import RegEx, ResponseHandler, HtmlHelper, ItemCRUDType from model.Log import LogHelper @@ -38,7 +35,6 @@ class ItemCRUD: def __init__(self, itemType): self.isSuccess = False self.resultMessage = "" - self.response = {} # ✅ ADDED self.itemCRUDType = itemType self.itemCRUDMapping = itemCRUDMapping(itemType) @@ -60,14 +56,16 @@ class ItemCRUD: connection.commit() self.isSuccess = True - self.response = ResponseHandler.delete_success(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + 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.response = ResponseHandler.delete_failure(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.delete_failure(self.itemCRUDMapping.name), 500 + ) finally: cursor.close() @@ -81,8 +79,9 @@ class ItemCRUD: connection = config.get_db_connection() if not connection: self.isSuccess = False - self.response = ResponseHandler.add_failure(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.db_connection_failure(), 500 + ) return cursor = connection.cursor() @@ -93,8 +92,12 @@ class ItemCRUD: ) try: - # SUBCONTRACTOR + # ====================================================== + # SUBCONTRACTOR (MULTI-FIELD) + # ====================================================== if data: + + # Duplicate check cursor.callproc(storedprocfetch, (data['Contractor_Name'],)) existing_item = None @@ -103,10 +106,12 @@ class ItemCRUD: if existing_item: self.isSuccess = False - self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.already_exists(self.itemCRUDMapping.name), 409 + ) return + # Insert cursor.callproc(storedprocadd, ( data['Contractor_Name'], data['Address'], @@ -122,17 +127,22 @@ class ItemCRUD: connection.commit() self.isSuccess = True - self.response = ResponseHandler.add_success(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.add_success(self.itemCRUDMapping.name), 200 + ) return - # NORMAL + # ====================================================== + # NORMAL (Village / Block / State) + # ====================================================== if not re.match(RegEx.patternAlphabetOnly, childname): self.isSuccess = False - self.response = ResponseHandler.invalid_name(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400 + ) return + # Duplicate check if parentid is None: cursor.callproc(storedprocfetch, (childname,)) else: @@ -144,10 +154,12 @@ class ItemCRUD: if existing_item: self.isSuccess = False - self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.already_exists(self.itemCRUDMapping.name), 409 + ) return + # Insert if parentid is None: cursor.callproc(storedprocadd, (childname,)) else: @@ -156,14 +168,17 @@ class ItemCRUD: connection.commit() self.isSuccess = True - self.response = ResponseHandler.add_success(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + 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.response = ResponseHandler.add_failure(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.add_failure(self.itemCRUDMapping.name), 500 + ) finally: cursor.close() @@ -183,6 +198,9 @@ class ItemCRUD: ) try: + # ====================================================== + # SUBCONTRACTOR (MULTI-FIELD) + # ====================================================== if data: cursor.callproc(storedprocupdate, ( childid, @@ -200,14 +218,17 @@ class ItemCRUD: connection.commit() self.isSuccess = True - self.response = ResponseHandler.update_success(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + 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.response = ResponseHandler.update_failure(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = ResponseHandler.update_failure(self.itemCRUDMapping.name)['message'] return if parentid is None: @@ -218,14 +239,14 @@ class ItemCRUD: connection.commit() self.isSuccess = True - self.response = ResponseHandler.update_success(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + 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.response = ResponseHandler.update_failure(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.update_failure(self.itemCRUDMapping.name), 500 + ) finally: cursor.close() @@ -255,8 +276,9 @@ class ItemCRUD: except mysql.connector.Error as e: print(f"Error fetching {self.itemCRUDMapping.name}: {e}") self.isSuccess = False - self.response = ResponseHandler.fetch_failure(self.itemCRUDMapping.name) - self.resultMessage = self.response["message"] + self.resultMessage = HtmlHelper.json_response( + ResponseHandler.fetch_failure(self.itemCRUDMapping.name), 500 + ) return [] finally: @@ -290,7 +312,7 @@ class ItemCRUD: return data # ---------------------------------------------------------- - # CHECK ITEM (KEEP AS IS - API USE) + # CHECK ITEM # ---------------------------------------------------------- def CheckItem(self, request, parentid, childname, storedprocfetch): diff --git a/templates/add_payment.html b/templates/add_payment.html index 8339d8b..1d65cd8 100644 --- a/templates/add_payment.html +++ b/templates/add_payment.html @@ -1,5 +1,6 @@ {% extends 'base.html' %} {% block content %} + @@ -8,91 +9,106 @@ + -
- - -
- - - -
- Payment added successfully! -
- - - + document.getElementById("subcontractor_list").addEventListener("click", function (e) { + const selectedId = e.target.getAttribute("data-id"); + const selectedName = e.target.textContent; - + // Fetch PMC numbers + fetch(`/get_pmc_nos_by_subcontractor/${encodeURIComponent(selectedId)}`) + .then(response => response.json()) + .then(data => { + console.log("Fetched PMC Nos:", data.pmc_nos); + const pmcDropdown = document.getElementById("PMC_No"); + pmcDropdown.innerHTML = ""; + + const defaultOption = document.createElement("option"); + defaultOption.value = ""; + defaultOption.textContent = "Select PMC No"; + pmcDropdown.appendChild(defaultOption); + + data.pmc_nos.forEach(pmc => { + const option = document.createElement("option"); + option.value = pmc; + option.textContent = pmc; + pmcDropdown.appendChild(option); + }); + + if (data.pmc_nos.length === 0) { + alert("No PMC Nos found for this subcontractor."); + } + }) + .catch(error => { + console.error("Error fetching PMC Nos:", error); + alert("Failed to fetch PMC numbers."); + }); + } + }); + + + - + -{% endblock %} +{% endblock %} \ No newline at end of file