Merge branch 'dev' of bitbucket.org:jubilian/nhance into dev

This commit is contained in:
VENKATESHWARAN 2026-04-18 11:42:21 +05:30
commit 5910f2a396

View File

@ -128,10 +128,12 @@
<div class="form-group col-md-3">
<label for="email">Email<span class="text-danger">*</span></label>
<input type="email" class="form-control" id="email" name="email" placeholder="Enter Email" required data-parsley-type="email" data-parsley-trigger="keyup">
<small id="email_error" class="text-danger d-none"></small>
</div>
<div class="form-group col-md-3">
<label for="mobile">Mobile<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="mobile" name="mobile" placeholder="Enter Mobile" required data-parsley-pattern="^[6-9]\d{9}$" data-parsley-trigger="keyup" data-parsley-length="[10,10]" data-parsley-validation-threshold="10" data-parsley-length-message="Mobile number must be 10 digits." data-parsley-pattern-message="Please enter a valid 10-digit mobile number starting with 6, 7, 8, or 9.">
<input type="text" class="form-control" id="mobile" name="mobile" placeholder="Enter Mobile" maxlength="10" inputmode="numeric" pattern="[0-9]{10}" required>
<small id="mobile_error" class="text-danger d-none"></small>
</div>
</div>
<div class="form-row">
@ -173,7 +175,7 @@
<input type="file" class="form-control" name="aadhar_file_name" id="aadhar_file_name" accept=".pdf,.jpg,.jpeg,.png" data-parsley-file-validation>
<i class="mdi mdi-upload additional-icon"></i>
</div>
<small class="text-muted d-block">Allowed: PDF, XLSX, XLS, PNG, JPG, JPEG. <= Default</small>
<small class="text-muted d-block">Allowed: PDF, PNG, JPG, JPEG.</small>
</div>
<div class="form-group col-md-4">
<label for="pan_file_name">PAN</label>
@ -181,7 +183,7 @@
<input type="file" class="form-control" name="pan_file_name" id="pan_file_name" accept=".pdf,.jpg,.jpeg,.png" data-parsley-file-validation>
<i class="mdi mdi-upload additional-icon"></i>
</div>
<small class="text-muted d-block">Allowed: PDF, XLSX, XLS, PNG, JPG, JPEG. <= Default</small>
<small class="text-muted d-block">Allowed: PDF, PNG, JPG, JPEG.</small>
</div>
<div class="form-group col-md-4">
<label for="certificate_file_name">Certificate</label>
@ -189,7 +191,7 @@
<input type="file" class="form-control" name="certificate_file_name" id="certificate_file_name" accept=".pdf,.jpg,.jpeg,.png" data-parsley-file-validation>
<i class="mdi mdi-upload additional-icon"></i>
</div>
<small class="text-muted d-block">Allowed: PDF, XLSX, XLS, PNG, JPG, JPEG. <= Default</small>
<small class="text-muted d-block">Allowed: PDF, PNG, JPG, JPEG.</small>
</div>
</div>
<div class="form-row">
@ -227,41 +229,6 @@
</div>
<script>
// Parsley custom validator for file type and size
window.Parsley.addValidator('fileValidation', {
requirementType: 'string',
validateString: function(value, requirement, parsleyInstance) {
const file = parsleyInstance.$element[0].files[0];
if (!file) {
return true; // Skip validation if no file is selected (unless 'required' is also present)
}
const maxImageSize = 500 * 1024; // 500KB
const maxPdfSize = 25 * 1024 * 1024; // 25MB
const imageTypes = ['image/jpeg', 'image/png', 'image/jpg'];
const pdfType = 'application/pdf';
if (imageTypes.includes(file.type)) {
if (file.size > maxImageSize) {
this.errorMessage = 'Image size cannot exceed 500KB.';
return false;
}
} else if (file.type === pdfType) {
if (file.size > maxPdfSize) {
this.errorMessage = 'PDF size cannot exceed 25MB.';
return false;
}
} else {
this.errorMessage = 'Allowed file types are JPG, JPEG, PNG, and PDF.';
return false;
}
return true;
},
messages: {
en: 'File is invalid.' // Default fallback message
}
});
var table;
$(document).ready(function () {
$('#manager_id').select2();
@ -493,18 +460,77 @@
$('#partnerPOSForm').on('submit', function(e) {
e.preventDefault();
var $form = $(this);
// Validate the form using Parsley
$form.parsley().validate();
const form = this;
// Check if the form is valid
if ($form.parsley().isValid()) {
// If valid, submit via AJAX
handleSaveEditAndDelete('submit');
// HTML5 built-in validation
if (!form.checkValidity()) {
form.reportValidity(); // shows required/pattern tooltips
return;
}
// Custom validation
if (!validateForm()) return;
// If valid, submit via AJAX
handleSaveEditAndDelete('submit');
});
function validateForm() {
let isValid = true;
// Clear old errors
$('.text-danger').addClass('d-none').text('');
// Regex patterns
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const mobileRegex = /^[6-9]\d{9}$/;
const aadharRegex = /^\d{12}$/;
const panRegex = /^[A-Z]{5}[0-9]{4}[A-Z]$/;
// EMAIL
const email = $('#email').val().trim();
if (email === '') {
$('#email_error').text('Email is required').removeClass('d-none');
isValid = false;
} else if (!emailRegex.test(email)) {
$('#email_error').text('Enter a valid email').removeClass('d-none');
isValid = false;
}
// MOBILE
const mobile = $('#mobile').val().trim();
if (mobile === '') {
$('#mobile_error').text('Mobile number is required').removeClass('d-none');
isValid = false;
} else if (!mobileRegex.test(mobile)) {
$('#mobile_error').text('Enter a valid 10-digit mobile number').removeClass('d-none');
isValid = false;
}
// AADHAAR
const aadhar = $('#aadhar').val().trim();
if (aadhar === '') {
$('#aadhar_error').text('Aadhaar is required').removeClass('d-none');
isValid = false;
} else if (!aadharRegex.test(aadhar)) {
$('#aadhar_error').text('Aadhaar must be 12 digits').removeClass('d-none');
isValid = false;
}
// PAN
const pan = $('#pan').val().trim();
if (pan === '') {
$('#pan_error').text('PAN is required').removeClass('d-none');
isValid = false;
} else if (!panRegex.test(pan)) {
$('#pan_error').text('Invalid PAN format (AAAPA1234A)').removeClass('d-none');
isValid = false;
}
return isValid;
}
</script>
<script>
document.addEventListener("DOMContentLoaded", function() {
@ -594,5 +620,4 @@
}
});
});
</script>
</script>