add item crude #10

Merged
pjpatil12 merged 1 commits from pankaj-dev into main 2026-03-24 07:07:39 +00:00
2 changed files with 232 additions and 194 deletions
Showing only changes of commit eda238c235 - Show all commits

View File

@@ -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):

View File

@@ -1,5 +1,6 @@
{% extends 'base.html' %}
{% block content %}
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -8,6 +9,7 @@
<script src="{{ url_for('static', filename='js/search_on_table.js') }}"></script>
<script src="{{ url_for('static', filename='js/invoice.js') }}"></script>
</head>
<body>
<div class="button-container">
@@ -37,13 +39,16 @@
<input type="number" step="0.01" id="invoice_No" name="invoice_No"><br><br>
<label for="Payment_Amount">Amount:</label><br>
<input type="number" step="0.01" id="Payment_Amount" name="Payment_Amount" required oninput="calculateTDSAndTotal()"><br><br>
<input type="number" step="0.01" id="Payment_Amount" name="Payment_Amount" required
oninput="calculateTDSAndTotal()"><br><br>
<label for="TDS_Percentage">TDS Percentage (%):</label><br>
<input type="number" step="0.01" id="TDS_Percentage" name="TDS_Percentage" oninput="calculateTDSAndTotal()"><br><br>
<input type="number" step="0.01" id="TDS_Percentage" name="TDS_Percentage"
oninput="calculateTDSAndTotal()"><br><br>
<label for="TDS_Payment_Amount">TDS Amount:</label><br>
<input type="number" step="0.01" id="TDS_Payment_Amount" name="TDS_Payment_Amount" required readonly><br><br>
<input type="number" step="0.01" id="TDS_Payment_Amount" name="TDS_Payment_Amount" required
readonly><br><br>
<label for="total_amount">Total Amount:</label><br>
<input type="number" step="0.01" id="total_amount" name="total_amount" required readonly><br><br>
@@ -89,8 +94,19 @@
<td>{{ payment[4] }}</td>
<td>{{ payment[5] }}</td>
<td>{{ payment[6] }}</td>
<td><a href="/edit_payment/{{ payment[0] }}"><img src="{{ url_for('static', filename='images/icons/pen_blue_icon.png') }}" alt="Edit" class="icon"></a></td>
<td><a href="/delete_payment/{{ payment[0] }}" onclick="return confirm('Are you sure you want to delete this payment?')"><img src="{{ url_for('static', filename='images/icons/bin_red_icon.png') }}" alt="Delete" class="icon"></a></td>
<td><a href="/edit_payment/{{ payment[0] }}"><img
src="{{ url_for('static', filename='images/icons/pen_blue_icon.png') }}" alt="Edit"
class="icon"></a></td>
<td>
<form action="{{ url_for('payment_bp.delete_payment', payment_id=payment[0]) }}" method="POST"
style="display:inline;">
<button type="submit"
onclick="return confirm('Are you sure you want to delete this payment?')">
<img src="{{ url_for('static', filename='images/icons/bin_red_icon.png') }}"
alt="Delete" class="icon">
</button>
</form>
</td>
</tr>
<!-- <tr>
<td>{{ payment['Payment_Id'] }}</td>