hold type updated , delete done by prajkta
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user