Merge pull request 'add item crude' (#10) from pankaj-dev into main
Reviewed-on: #10
This commit was merged in pull request #10.
This commit is contained in:
@@ -1,6 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
@@ -38,7 +35,6 @@ 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)
|
||||||
|
|
||||||
@@ -60,14 +56,16 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.response = ResponseHandler.delete_success(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.delete_success(self.itemCRUDMapping.name), 200
|
||||||
|
)
|
||||||
|
|
||||||
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.response = ResponseHandler.delete_failure(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.delete_failure(self.itemCRUDMapping.name), 500
|
||||||
|
)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
cursor.close()
|
cursor.close()
|
||||||
@@ -81,8 +79,9 @@ 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.response = ResponseHandler.add_failure(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.db_connection_failure(), 500
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
@@ -93,8 +92,12 @@ 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
|
||||||
@@ -103,10 +106,12 @@ class ItemCRUD:
|
|||||||
|
|
||||||
if existing_item:
|
if existing_item:
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Insert
|
||||||
cursor.callproc(storedprocadd, (
|
cursor.callproc(storedprocadd, (
|
||||||
data['Contractor_Name'],
|
data['Contractor_Name'],
|
||||||
data['Address'],
|
data['Address'],
|
||||||
@@ -122,17 +127,22 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.response = ResponseHandler.add_success(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.add_success(self.itemCRUDMapping.name), 200
|
||||||
|
)
|
||||||
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.response = ResponseHandler.invalid_name(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Duplicate check
|
||||||
if parentid is None:
|
if parentid is None:
|
||||||
cursor.callproc(storedprocfetch, (childname,))
|
cursor.callproc(storedprocfetch, (childname,))
|
||||||
else:
|
else:
|
||||||
@@ -144,10 +154,12 @@ class ItemCRUD:
|
|||||||
|
|
||||||
if existing_item:
|
if existing_item:
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.response = ResponseHandler.already_exists(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.already_exists(self.itemCRUDMapping.name), 409
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Insert
|
||||||
if parentid is None:
|
if parentid is None:
|
||||||
cursor.callproc(storedprocadd, (childname,))
|
cursor.callproc(storedprocadd, (childname,))
|
||||||
else:
|
else:
|
||||||
@@ -156,14 +168,17 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.response = ResponseHandler.add_success(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
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.response = ResponseHandler.add_failure(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.add_failure(self.itemCRUDMapping.name), 500
|
||||||
|
)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
cursor.close()
|
cursor.close()
|
||||||
@@ -183,6 +198,9 @@ class ItemCRUD:
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# ======================================================
|
||||||
|
# SUBCONTRACTOR (MULTI-FIELD)
|
||||||
|
# ======================================================
|
||||||
if data:
|
if data:
|
||||||
cursor.callproc(storedprocupdate, (
|
cursor.callproc(storedprocupdate, (
|
||||||
childid,
|
childid,
|
||||||
@@ -200,14 +218,17 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.response = ResponseHandler.update_success(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.update_success(self.itemCRUDMapping.name), 200
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# ======================================================
|
||||||
|
# NORMAL
|
||||||
|
# ======================================================
|
||||||
if not re.match(RegEx.patternAlphabetOnly, childname):
|
if not re.match(RegEx.patternAlphabetOnly, childname):
|
||||||
self.isSuccess = False
|
self.isSuccess = False
|
||||||
self.response = ResponseHandler.update_failure(self.itemCRUDMapping.name)
|
self.resultMessage = ResponseHandler.update_failure(self.itemCRUDMapping.name)['message']
|
||||||
self.resultMessage = self.response["message"]
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if parentid is None:
|
if parentid is None:
|
||||||
@@ -218,14 +239,14 @@ class ItemCRUD:
|
|||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
self.isSuccess = True
|
self.isSuccess = True
|
||||||
self.response = ResponseHandler.update_success(self.itemCRUDMapping.name)
|
self.resultMessage = ResponseHandler.update_success(self.itemCRUDMapping.name)['message']
|
||||||
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.response = ResponseHandler.update_failure(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.update_failure(self.itemCRUDMapping.name), 500
|
||||||
|
)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
cursor.close()
|
cursor.close()
|
||||||
@@ -255,8 +276,9 @@ 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.response = ResponseHandler.fetch_failure(self.itemCRUDMapping.name)
|
self.resultMessage = HtmlHelper.json_response(
|
||||||
self.resultMessage = self.response["message"]
|
ResponseHandler.fetch_failure(self.itemCRUDMapping.name), 500
|
||||||
|
)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
@@ -290,7 +312,7 @@ class ItemCRUD:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
# CHECK ITEM (KEEP AS IS - API USE)
|
# CHECK ITEM
|
||||||
# ----------------------------------------------------------
|
# ----------------------------------------------------------
|
||||||
def CheckItem(self, request, parentid, childname, storedprocfetch):
|
def CheckItem(self, request, parentid, childname, storedprocfetch):
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<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/search_on_table.js') }}"></script>
|
||||||
<script src="{{ url_for('static', filename='js/invoice.js') }}"></script>
|
<script src="{{ url_for('static', filename='js/invoice.js') }}"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="button-container">
|
<div class="button-container">
|
||||||
@@ -37,13 +39,16 @@
|
|||||||
<input type="number" step="0.01" id="invoice_No" name="invoice_No"><br><br>
|
<input type="number" step="0.01" id="invoice_No" name="invoice_No"><br><br>
|
||||||
|
|
||||||
<label for="Payment_Amount">Amount:</label><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>
|
<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>
|
<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>
|
<label for="total_amount">Total Amount:</label><br>
|
||||||
<input type="number" step="0.01" id="total_amount" name="total_amount" required readonly><br><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[4] }}</td>
|
||||||
<td>{{ payment[5] }}</td>
|
<td>{{ payment[5] }}</td>
|
||||||
<td>{{ payment[6] }}</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="/edit_payment/{{ payment[0] }}"><img
|
||||||
<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>
|
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>
|
||||||
<!-- <tr>
|
<!-- <tr>
|
||||||
<td>{{ payment['Payment_Id'] }}</td>
|
<td>{{ payment['Payment_Id'] }}</td>
|
||||||
|
|||||||
Reference in New Issue
Block a user