$(function () { ;('use strict') // variables var form = $('.validate-form'), assetPath = '../../../app-assets/', dtInvoiceTable = $('.invoice-list-table'), invoicePreview = 'app-invoice-preview.html', invoiceEdit = 'app-invoice-edit.html', accountNumberMask = $('.account-number-mask'), accountZipCode = $('.account-zip-code'), select2 = $('.select2'), cancelSubscription = document.querySelector('.cancel-subscription') if ($('body').attr('data-framework') === 'laravel') { assetPath = $('body').attr('data-asset-path') invoicePreview = assetPath + 'app/invoice/preview' invoiceEdit = assetPath + 'app/invoice/edit' } // jQuery Validation for all forms // -------------------------------------------------------------------- if (form.length) { form.each(function () { var $this = $(this) $this.validate({ rules: { addCard: { required: true }, companyName: { required: true }, billingEmail: { required: true } } }) $this.on('submit', function (e) { e.preventDefault() }) }) } // cancel subscription button if (cancelSubscription) { cancelSubscription.onclick = function () { Swal.fire({ text: 'Are you sure you would like to cancel your subscription?', icon: 'warning', showCancelButton: true, confirmButtonText: 'Yes', customClass: { confirmButton: 'btn btn-primary', cancelButton: 'btn btn-outline-danger ms-1' }, buttonsStyling: false }).then(function (result) { if (result.value) { Swal.fire({ icon: 'success', title: 'Unsubscribed!', text: 'Your subscription cancelled successfully.', customClass: { confirmButton: 'btn btn-success' } }) } else if (result.dismiss === Swal.DismissReason.cancel) { Swal.fire({ title: 'Cancelled', text: 'Unsubscription Cancelled!!', icon: 'error', customClass: { confirmButton: 'btn btn-success' } }) } }) } } //phone if (accountNumberMask.length) { accountNumberMask.each(function () { new Cleave($(this), { phone: true, phoneRegionCode: 'US' }) }) } //zip code if (accountZipCode.length) { accountZipCode.each(function () { new Cleave($(this), { delimiter: '', numeral: true }) }) } // For all Select2 if (select2.length) { select2.each(function () { var $this = $(this) $this.wrap('
') $this.select2({ dropdownParent: $this.parent() }) }) } // datatable if (dtInvoiceTable.length) { var dtInvoice = dtInvoiceTable.DataTable({ ajax: assetPath + 'data/invoice-list.json', // JSON file to add data autoWidth: false, pageLength: 6, columns: [ // columns according to JSON { data: 'responsive_id' }, { data: 'invoice_id' }, { data: 'invoice_status' }, { data: 'issued_date' }, { data: 'due_date' }, { data: 'total' }, { data: 'balance' }, { data: 'invoice_status' }, { data: '' } ], columnDefs: [ { // For Responsive className: 'control', responsivePriority: 2, targets: 0 }, { // Invoice ID targets: 1, width: '46px', render: function (data, type, full, meta) { var $invoiceId = full['invoice_id'] // Creates full output for row var $rowOutput = ' #' + $invoiceId + '' return $rowOutput } }, { // Invoice status targets: 2, width: '42px', render: function (data, type, full, meta) { var $invoiceStatus = full['invoice_status'], $dueDate = full['due_date'], $balance = full['balance'], roleObj = { Sent: { class: 'bg-light-secondary', icon: 'send' }, Paid: { class: 'bg-light-success', icon: 'check-circle' }, Draft: { class: 'bg-light-primary', icon: 'save' }, Downloaded: { class: 'bg-light-info', icon: 'arrow-down-circle' }, 'Past Due': { class: 'bg-light-danger', icon: 'info' }, 'Partial Payment': { class: 'bg-light-warning', icon: 'pie-chart' } } return ( " Balance: ' + $balance + '
Due Date: ' + $dueDate + "
'>" + '
' + '' + feather.icons[roleObj[$invoiceStatus].icon].toSvg({ class: 'avatar-icon' }) + '' + '
' + '' ) } }, { // Total Invoice Amount targets: 3, width: '73px', render: function (data, type, full, meta) { var $total = full['total'] return '$' + $total } }, { // Issue date targets: 4, width: '130px', render: function (data, type, full, meta) { var $issuedDate = new Date(full['issued_date']) // Creates full output for row var $rowOutput = moment($issuedDate).format('DD MMM YYYY') $issuedDate return $rowOutput } }, { // Due Date targets: 5, width: '130px', render: function (data, type, full, meta) { var $dueDate = new Date(full['due_date']) // Creates full output for row var $rowOutput = moment($dueDate).format('DD MMM YYYY') $dueDate return $rowOutput } }, { // Client Balance/Status targets: 6, width: '98px', render: function (data, type, full, meta) { var $balance = full['balance'] if ($balance === 0) { var $badge_class = 'badge-light-success' return ' Paid ' } else { return '' + $balance + '' + $balance } } }, { targets: 7, visible: false }, { // Actions targets: -1, title: 'Actions', width: '80px', orderable: false, render: function (data, type, full, meta) { return ( '
' + '' + feather.icons['send'].toSvg({ class: 'font-medium-2 text-body' }) + '' + '' + feather.icons['eye'].toSvg({ class: 'font-medium-2 text-body' }) + '' + '' + '
' ) } } ], order: [[1, 'desc']], dom: '<"card-header pt-1 pb-25"<"head-label"><"dt-action-buttons text-end"B>>t', buttons: [ { extend: 'collection', className: 'btn btn-outline-secondary dropdown-toggle', text: feather.icons['external-link'].toSvg({ class: 'font-small-4 me-50' }) + 'Export', buttons: [ { extend: 'print', text: feather.icons['printer'].toSvg({ class: 'font-small-4 me-50' }) + 'Print', className: 'dropdown-item', exportOptions: { columns: [3, 4, 5, 6, 7] } }, { extend: 'csv', text: feather.icons['file-text'].toSvg({ class: 'font-small-4 me-50' }) + 'Csv', className: 'dropdown-item', exportOptions: { columns: [3, 4, 5, 6, 7] } }, { extend: 'excel', text: feather.icons['file'].toSvg({ class: 'font-small-4 me-50' }) + 'Excel', className: 'dropdown-item', exportOptions: { columns: [3, 4, 5, 6, 7] } }, { extend: 'pdf', text: feather.icons['clipboard'].toSvg({ class: 'font-small-4 me-50' }) + 'Pdf', className: 'dropdown-item', exportOptions: { columns: [3, 4, 5, 6, 7] } }, { extend: 'copy', text: feather.icons['copy'].toSvg({ class: 'font-small-4 me-50' }) + 'Copy', className: 'dropdown-item', exportOptions: { columns: [3, 4, 5, 6, 7] } } ], init: function (api, node, config) { $(node).removeClass('btn-secondary') $(node).parent().removeClass('btn-group') setTimeout(function () { $(node).closest('.dt-buttons').removeClass('btn-group').addClass('d-inline-flex') }, 50) } } ], // For responsive popup responsive: { details: { display: $.fn.dataTable.Responsive.display.modal({ header: function (row) { var data = row.data() return 'Details of ' + data['client_name'] } }), type: 'column', renderer: function (api, rowIdx, columns) { var data = $.map(columns, function (col, i) { return col.columnIndex !== 2 // ? Do not show row in modal popup if title is blank (for check box) ? '' + '' + col.title + ':' + ' ' + '' + col.data + '' + '' : '' }).join('') return data ? $('').append('' + data + '') : false } } }, initComplete: function () { $(document).find('[data-bs-toggle="tooltip"]').tooltip() }, drawCallback: function () { $(document).find('[data-bs-toggle="tooltip"]').tooltip() } }) $('div.head-label').html('

Billing History

') } })