$(document).ready(function() { const senderModal = new bootstrap.Modal(document.getElementById('senderModal')); const $form = $('#senderForm'); $('#edit_mno_name').select2({ placeholder: "Select Network Operator", allowClear: true, width: '100%', dropdownParent: $('#senderModal') // Crucial for Bootstrap Modals }); $('#edit_supplier_name').select2({ placeholder: "Select Supplier", allowClear: true, width: '100%', dropdownParent: $('#senderModal') // Crucial for Bootstrap Modals }); $('#edit_senderid').on('input', function() { // $(this).val($(this).val().toUpperCase().replace(/\s/g, '')); //$(this).val($(this).val().replace(/\s/g, '')); const max = 11; const val = $(this).val(); if (val.length > max) { $(this).val(val.slice(0, max)); } }); // Function to handle the form layout based on Direct MNO selection function toggleSenderIdRoutingFields(selection, isEdit = false) { let prefix = isEdit ? 'edit_' : ''; let $mnoWrapper = $('#wrapper_mno_name' + (isEdit ? '_edit' : '')); let $supplierWrapper = $('#wrapper_supplier_name' + (isEdit ? '_edit' : '')); let $mnoInput = $('#input_mno_name' + (isEdit ? '_edit' : '')); let $supplierInput = $('#input_supplier_name' + (isEdit ? '_edit' : '')); if (selection === 'YES') { // Show MNO, Hide Supplier $mnoWrapper.slideDown(); $mnoInput.prop('required', true); $supplierWrapper.slideUp(); $supplierInput.prop('required', false).val(''); // Clear hidden field } else { // Show Supplier, Hide MNO $supplierWrapper.slideDown(); $supplierInput.prop('required', true); $mnoWrapper.slideUp(); $mnoInput.prop('required', false).val(''); // Clear hidden field } } // Trigger on change for Create Form $('#create_direct_mno').on('change', function() { toggleSenderIdRoutingFields($(this).val(), false); }); // If you have an Edit form, trigger it there as well // $('#edit_direct_mno').on('change', function() { // toggleSenderIdRoutingFields($(this).val(), true); // }); // Run on initial load to ensure correct state toggleSenderIdRoutingFields($('#create_direct_mno').val(), false); // Bind change event to the select dropdown $('#edit_direct_mno').on('change', function() { toggleSenderIdRoutingFields($(this).val()); }); // --- OPEN MODAL FOR CREATE --- $('#btnOpenSenderModal').on('click', function() { $form[0].reset(); $('#senderRecordId').val(''); $('#senderModalTitle').text('Add Sender ID'); $('#btnSubmitSender').html('Save Sender ID'); // Reset toggle state to YES $('#edit_direct_mno').val('YES').trigger('change'); senderModal.show(); }); // --- OPEN MODAL FOR EDIT --- $('.btn-edit-sender').on('click', function() { const data = $(this).data(); $form[0].reset(); $('#senderRecordId').val(data.id); $('#edit_senderid').val(data.senderid); $('#edit_direct_mno').val(data.direct_mno); // Set dependent fields before toggling $('#edit_mno_name').val(data.mno_name); $('#edit_supplier_name').val(data.supplier_name); $('#edit_type').val(data.type); $('#edit_bind_name').val(data.bind_name); $('#edit_status').val(data.status); $('#edit_remarks').val(data.remarks); $('#senderModalTitle').text('Edit Sender ID: ' + data.senderid); $('#btnSubmitSender').html('Update Sender ID'); // Trigger the toggle layout based on the loaded data toggleSenderIdRoutingFields(data.direct_mno); senderModal.show(); }); // --- HANDLE FORM SUBMISSION (Actual AJAX) --- $form.on('submit', function(e) { e.preventDefault(); const $btn = $('#btnSubmitSender'); const originalText = $btn.html(); const $alertBox = $('#senderIdModalAlert'); // Show loading state and clear old errors $btn.html(' Processing...'); $btn.prop('disabled', true); $alertBox.html(''); $form.find('.is-invalid').removeClass('is-invalid'); $form.find('.invalid-feedback').remove(); // Determine if we are creating or updating based on the hidden ID field const recordId = $('#senderRecordId').val(); const submitUrl = base_url + "/" + recordId ? "senderids/" + recordId : "senderids"; // Add a hidden _method field for PUT requests if editing let formData = $form.serialize(); if (recordId) { formData += '&_method=PUT'; } $.ajax({ url: submitUrl, type: 'POST', // We use POST but pass _method=PUT in the data payload for Laravel data: formData, success: function(response) { if (response.success) { senderModal.hide(); Swal.fire({ icon: 'success', title: 'Success!', text: response.message || 'Sender ID record saved.', confirmButtonColor: '#5c4df0' }).then(() => { // Reload the page to refresh the table and KPI counts location.reload(); }); } }, error: function(xhr) { // Handle Laravel Validation Errors if (xhr.status === 422) { let errors = xhr.responseJSON.errors; $alertBox.html(`