hold type updated , delete done by prajkta

This commit is contained in:
2026-03-24 15:19:38 +05:30
parent 94b5563d15
commit dbeec9962d
7 changed files with 269 additions and 243 deletions

View File

@@ -10,21 +10,21 @@ hold_bp = Blueprint("hold_types", __name__)
@hold_bp.route('/add_hold_type', methods=['GET','POST']) @hold_bp.route('/add_hold_type', methods=['GET','POST'])
@login_required @login_required
def add_hold_type(): def add_hold_type():
hold = HoldTypes() hold = HoldTypes()
if request.method == 'POST': if request.method == 'POST':
hold.AddHoldType(request) # ✅ hold.AddHoldType(request)
return hold.resultMessage # ✅ Always redirect to same page (NO JSON)
return redirect(url_for("hold_types.add_hold_type"))
hold_types = hold.GetAllHoldTypes() # ✅ # GET request → show data
hold_types = hold.GetAllHoldTypes()
return render_template( return render_template(
"add_hold_type.html", "add_hold_type.html",
Hold_Types_data=hold_types Hold_Types_data=hold_types
) )
# ---------------- CHECK HOLD TYPE (OPTIONAL LIKE BLOCK) ---------------- # ---------------- CHECK HOLD TYPE (OPTIONAL LIKE BLOCK) ----------------
@hold_bp.route('/check_hold_type', methods=['POST']) @hold_bp.route('/check_hold_type', methods=['POST'])
@login_required @login_required

View File

@@ -135,7 +135,7 @@ class ItemCRUD:
# ====================================================== # ======================================================
# NORMAL (Village / Block / State) # NORMAL (Village / Block / State)
# ====================================================== # ======================================================
if not re.match(RegEx.patternAlphabetOnly, childname): if not re.match(RegEx.allPattern, childname):
self.isSuccess = False self.isSuccess = False
self.resultMessage = HtmlHelper.json_response( self.resultMessage = HtmlHelper.json_response(
ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400 ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400
@@ -226,7 +226,7 @@ class ItemCRUD:
# ====================================================== # ======================================================
# NORMAL # NORMAL
# ====================================================== # ======================================================
if not re.match(RegEx.patternAlphabetOnly, childname): if not re.match(RegEx.allPattern, childname):
self.isSuccess = False self.isSuccess = False
self.resultMessage = ResponseHandler.update_failure(self.itemCRUDMapping.name)['message'] self.resultMessage = ResponseHandler.update_failure(self.itemCRUDMapping.name)['message']
return return
@@ -324,7 +324,7 @@ class ItemCRUD:
f"User {current_user.id} checked '{childname}'" f"User {current_user.id} checked '{childname}'"
) )
if not re.match(RegEx.patternAlphabetOnly, childname): if not re.match(RegEx.allPattern, childname):
return HtmlHelper.json_response( return HtmlHelper.json_response(
ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400 ResponseHandler.invalid_name(self.itemCRUDMapping.name), 400
) )

View File

@@ -12,6 +12,7 @@ class ItemCRUDType(Enum):
class RegEx: class RegEx:
patternAlphabetOnly = "^[A-Za-z ]+$" patternAlphabetOnly = "^[A-Za-z ]+$"
allPattern = "^(?!\s*$).+"
class ResponseHandler: class ResponseHandler:

View File

@@ -3,7 +3,7 @@ $(document).ready(function () {
let holdType = $(this).val().replace(/^\s+/, ""); let holdType = $(this).val().replace(/^\s+/, "");
$(this).val(holdType); $(this).val(holdType);
let reg = /^[A-Za-z]/; let reg = /^.+$/; // all pattern allow
if (!reg.test(holdType)) { if (!reg.test(holdType)) {
$("#holdTypeMessage").text("Hold Type must start with a letter.").css("color", "red"); $("#holdTypeMessage").text("Hold Type must start with a letter.").css("color", "red");

View File

@@ -1,5 +1,6 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% block content %} {% block content %}
<head> <head>
<title>Manage Hold Types</title> <title>Manage Hold Types</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
@@ -7,6 +8,7 @@
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/style.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/style.css') }}">
<script src="{{ url_for('static', filename='js/search_on_table.js') }}"></script> <script src="{{ url_for('static', filename='js/search_on_table.js') }}"></script>
</head> </head>
<body> <body>
<div class="button-container"> <div class="button-container">
@@ -46,8 +48,21 @@
<tr> <tr>
<td>{{ htd['hold_type_id'] }}</td> <td>{{ htd['hold_type_id'] }}</td>
<td>{{ htd['hold_type'] }}</td> <td>{{ htd['hold_type'] }}</td>
<td><a href="{{ url_for('hold_types.edit_hold_type', id=htd['hold_type_id']) }}">Edit</a></td> <td style="text-align:center;">
<td><button class="delete-button" data-id="{{ htd['hold_type_id'] }}">Delete</button></td> <a href="{{ url_for('hold_types.edit_hold_type', id=htd['hold_type_id']) }}">
<img src="{{ url_for('static', filename='images/icons/pen_blue_icon.png') }}" alt="Edit"
class="icon">
</a>
</td>
<td style="text-align:center;">
<a href="{{ url_for('hold_types.delete_hold_type', id=htd['hold_type_id']) }}"
onclick="return confirm('Are you sure you want to delete this hold type?');">
<img src="{{ url_for('static', filename='images/icons/bin_red_icon.png') }}" alt="Delete"
class="icon">
</a>
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
@@ -56,4 +71,3 @@
</div> </div>
</body> </body>
{% endblock %} {% endblock %}

View File

@@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% block content %} {% block content %}
<head> <head>
<title>Edit Hold Type</title> <title>Edit Hold Type</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/style.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/style.css') }}">
@@ -10,10 +10,10 @@
<body> <body>
<h2>Edit Hold Type</h2> <h2>Edit Hold Type</h2>
<form id="updateHoldTypeForm"> <form id="updateHoldTypeForm" method="POST">
<input type="hidden" id="hold_type_id" value="{{ hold_type[0] }}"> <input type="hidden" id="hold_type_id" value="{{ hold_type.hold_type_id }}">
<label for="edit_hold_type">Hold Type:</label> <label for="edit_hold_type">Hold Type:</label>
<input type="text" id="edit_hold_type" name="hold_type" value="{{ hold_type[1] }}" required> <input type="text" id="edit_hold_type" name="hold_type" value="{{ hold_type.hold_type }}" required>
<button type="submit">Update</button> <button type="submit">Update</button>
<a href="{{ url_for('hold_types.add_hold_type') }}"></a> <a href="{{ url_for('hold_types.add_hold_type') }}"></a>
</form> </form>
@@ -37,7 +37,7 @@
formData.append('hold_type', newHoldType); formData.append('hold_type', newHoldType);
$.ajax({ $.ajax({
url: '/update_hold_type/' + holdTypeId, url: '/edit_hold_type/' + holdTypeId,
method: 'POST', method: 'POST',
data: formData, data: formData,
processData: false, processData: false,
@@ -55,8 +55,3 @@
}); });
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -20,7 +20,8 @@
Invoice successfully updated! Invoice successfully updated!
</div> </div>
<form id="invoiceForm" action="{{ url_for('invoice.edit_invoice', invoice_id=invoice.Invoice_Id) }}" method="POST"> <form id="invoiceForm" action="{{ url_for('invoice.edit_invoice', invoice_id=invoice.Invoice_Id) }}"
method="POST">
<!-- Subcontractor Field --> <!-- Subcontractor Field -->
<div class="row1"> <div class="row1">
@@ -28,7 +29,8 @@
<label for="subcontractor">Subcontractor Name:</label> <label for="subcontractor">Subcontractor Name:</label>
<input class="form-control" list="subcontractor_list" id="subcontractor" name="subcontractor" <input class="form-control" list="subcontractor_list" id="subcontractor" name="subcontractor"
value="{{ invoice.Contractor_Name }}" placeholder="Type to search..." required> value="{{ invoice.Contractor_Name }}" placeholder="Type to search..." required>
<input type="hidden" id="subcontractor_id" name="subcontractor_id" value="{{ invoice.Subcontractor_Id }}"> <input type="hidden" id="subcontractor_id" name="subcontractor_id"
value="{{ invoice.Subcontractor_Id }}">
<datalist id="subcontractor_list"></datalist> <datalist id="subcontractor_list"></datalist>
</div> </div>
</div> </div>
@@ -54,7 +56,8 @@
</div> </div>
<div> <div>
<label for="invoice_details">Invoice Details:</label> <label for="invoice_details">Invoice Details:</label>
<textarea id="invoice_details" name="invoice_details" required>{{ invoice.Invoice_Details }}</textarea> <textarea id="invoice_details" name="invoice_details"
required>{{ invoice.Invoice_Details }}</textarea>
</div> </div>
</div> </div>
@@ -62,11 +65,12 @@
<div class="row2"> <div class="row2">
<div> <div>
<label for="invoice_no">Invoice No:</label> <label for="invoice_no">Invoice No:</label>
<input type="text" id="invoice_no" name="invoice_no" value="{{ invoice.Invoice_No }}" required/> <input type="text" id="invoice_no" name="invoice_no" value="{{ invoice.invoice_no }}" required />
</div> </div>
<div> <div>
<label for="invoice_date">Invoice Date:</label> <label for="invoice_date">Invoice Date:</label>
<input type="date" id="invoice_date" name="invoice_date" value="{{ invoice.Invoice_Date }}" required/> <input type="date" id="invoice_date" name="invoice_date" value="{{ invoice.Invoice_Date }}"
required />
</div> </div>
</div> </div>
@@ -74,15 +78,18 @@
<div class="row3"> <div class="row3">
<div> <div>
<label for="basic_amount">Basic Amount:</label> <label for="basic_amount">Basic Amount:</label>
<input type="number" step="0.01" id="basic_amount" name="basic_amount" value="{{ invoice.Basic_Amount }}" required/> <input type="number" step="0.01" id="basic_amount" name="basic_amount"
value="{{ invoice.Basic_Amount }}" required />
</div> </div>
<div> <div>
<label for="debit_amount">Debit Amount:</label> <label for="debit_amount">Debit Amount:</label>
<input type="number" step="0.01" id="debit_amount" name="debit_amount" value="{{ invoice.Debit_Amount }}" required/> <input type="number" step="0.01" id="debit_amount" name="debit_amount"
value="{{ invoice.Debit_Amount }}" required />
</div> </div>
<div> <div>
<label for="after_debit_amount">After Debit Amount:</label> <label for="after_debit_amount">After Debit Amount:</label>
<input type="number" step="0.01" id="after_debit_amount" name="after_debit_amount" value="{{ invoice.After_Debit_Amount }}" required/> <input type="number" step="0.01" id="after_debit_amount" name="after_debit_amount"
value="{{ invoice.After_Debit_Amount }}" required />
</div> </div>
</div> </div>
@@ -94,11 +101,13 @@
</div> </div>
<div> <div>
<label for="gst_amount">GST Amount:</label> <label for="gst_amount">GST Amount:</label>
<input type="number" step="0.01" id="gst_amount" name="gst_amount" value="{{ invoice.GST_Amount }}" required/> <input type="number" step="0.01" id="gst_amount" name="gst_amount" value="{{ invoice.GST_Amount }}"
required />
</div> </div>
<div> <div>
<label for="tds_amount">TDS Amount:</label> <label for="tds_amount">TDS Amount:</label>
<input type="number" step="0.01" id="tds_amount" name="tds_amount" value="{{ invoice.TDS_Amount }}" required/> <input type="number" step="0.01" id="tds_amount" name="tds_amount" value="{{ invoice.TDS_Amount }}"
required />
</div> </div>
</div> </div>
@@ -106,15 +115,18 @@
<div class="row3"> <div class="row3">
<div> <div>
<label for="sd_amount">SD Amount:</label> <label for="sd_amount">SD Amount:</label>
<input type="number" step="0.01" id="sd_amount" name="sd_amount" value="{{ invoice.SD_Amount }}" required/> <input type="number" step="0.01" id="sd_amount" name="sd_amount" value="{{ invoice.SD_Amount }}"
required />
</div> </div>
<div> <div>
<label for="on_commission">On Commission:</label> <label for="on_commission">On Commission:</label>
<input type="number" step="0.01" id="on_commission" name="on_commission" value="{{ invoice.On_Commission }}" required/> <input type="number" step="0.01" id="on_commission" name="on_commission"
value="{{ invoice.On_Commission }}" required />
</div> </div>
<div> <div>
<label for="hydro_testing">Hydro Testing:</label> <label for="hydro_testing">Hydro Testing:</label>
<input type="number" step="0.01" id="hydro_testing" name="hydro_testing" value="{{ invoice.Hydro_Testing }}" required/> <input type="number" step="0.01" id="hydro_testing" name="hydro_testing"
value="{{ invoice.Hydro_Testing }}" required />
</div> </div>
</div> </div>
@@ -126,9 +138,11 @@
{% set _ = seen_types.append(hold.hold_type) %} {% set _ = seen_types.append(hold.hold_type) %}
<div class="hold-amount-row"> <div class="hold-amount-row">
<label for="hold_type_{{ loop.index }}">Hold Type:</label> <label for="hold_type_{{ loop.index }}">Hold Type:</label>
<input type="text" id="hold_type_{{ loop.index }}" name="hold_type[]" value="{{ hold.hold_type }}" required/> <input type="text" id="hold_type_{{ loop.index }}" name="hold_type[]" value="{{ hold.hold_type }}"
required />
<label for="hold_amount_{{ loop.index }}">Hold Amount:</label> <label for="hold_amount_{{ loop.index }}">Hold Amount:</label>
<input type="number" step="0.01" id="hold_amount_{{ loop.index }}" name="hold_amount[]" value="{{ hold.hold_amount }}" required/> <input type="number" step="0.01" id="hold_amount_{{ loop.index }}" name="hold_amount[]"
value="{{ hold.hold_amount }}" required />
<button type="button" class="remove-hold-amount">Remove</button> <button type="button" class="remove-hold-amount">Remove</button>
</div> </div>
{% endif %} {% endif %}
@@ -144,11 +158,13 @@
<div class="row2"> <div class="row2">
<div> <div>
<label for="gst_sd_amount">GST SD Amount:</label> <label for="gst_sd_amount">GST SD Amount:</label>
<input type="number" step="0.01" id="gst_sd_amount" name="gst_sd_amount" value="{{ invoice.GST_SD_Amount }}" required/> <input type="number" step="0.01" id="gst_sd_amount" name="gst_sd_amount"
value="{{ invoice.GST_SD_Amount }}" required />
</div> </div>
<div> <div>
<label for="final_amount">Final Amount:</label> <label for="final_amount">Final Amount:</label>
<input type="number" step="0.01" id="final_amount" name="final_amount" value="{{ invoice.Final_Amount }}" required/> <input type="number" step="0.01" id="final_amount" name="final_amount"
value="{{ invoice.Final_Amount }}" required />
</div> </div>
</div> </div>