HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall_new/buyercall/buyercall/assets/scripts/tables.js
/*
*  Document   : tables.js
*  Author     : pixelcave
*  Description: Custom javascript code used in Tables page
*/

var _ = require('underscore');
var utils = require('../components/utils');
let { showConfirm, createFlashMsg } = utils;
var App = require('./app');
var LeadCallView = require('../components/lead-call');
var LeadSmsView = require('../components/lead-sms');
window.appConfig = {
    server_url: document.location.host,
};
const swal = require('./vendor/sweetalert2');
const moment = require('moment');
const PHONENUMBER_CSV_URL = `//${appConfig.server_url}/inbound/csv`;
const ISSUES_URL = `//${appConfig.server_url}/admin/issues-data`;
const COUPONS_URL = `//${appConfig.server_url}/admin/coupons-data`;
const COUPONS_REMOVE_URL = `//${appConfig.server_url}/admin/coupons/delete/`;
const ADD_PHONENUMBER_URL = `//${appConfig.server_url}/inbound/new`;
const BLOCKED_CSV_URL = `//${appConfig.server_url}/block_numbers/csv`;
const BlOCK_URL = `//${appConfig.server_url}/blocked-data`;
const USER_URL = `//${appConfig.server_url}/admin/user-data`;
const ACTIVITY_LOG_URL = `//${appConfig.server_url}/activity-logs`;
const REQUEST_LOG_URL = `//${appConfig.server_url}/log-requests`;
const FILTER_ACTIVITY_LOG_URL = `//${appConfig.server_url}/filter/activity-logs`;

var Tables = {
    init: function (phoneUrl) {
        /* Initialize Bootstrap Datatables Integration */
        App.datatables();
        /* Initialize Issues Datatables */
        var IssuesTableApi = $('#issues-datatable').DataTable({
            dom: "<'row'<'col-sm-5 col-lg-4'l><'col-xs-12 col-sm-7 col-md-7 col-lg-8 datatables-padding text-right'f>>" +
                "<'row'<'col-sm-12't>>" +
                "<'row'<'col-sm-5'i><'col-sm-7'rp>>",
            columns: [
                {
                    data: null,
                    render: function (data, type, row, meta) {
                        return IssuesTableApi.page.info().start + meta.row + 1;
                    },
                    searchable: false,
                    orderable: false
                },
                null,
                null,
                null,
                null,
                {
                    data: '5', // Created on
                    searchable: false,
                    render: function (date) {
                        return `<time datetime='${date}'>${moment(date).fromNow()}</time>`;
                    }
                },
                null,
                {
                    data: null,
                    searchable: false,
                    orderable: false,
                    className: "text-center",
                    render: function (data) {
                        let id = data[0];
                        return `
                        <div class='btn-group'>
                        <a href='/admin/issues/edit/${id}' class='btn btn-xs btn-success btn-table-action' data-original-title='Edit' title='Edit' data-toggle='tooltip'>
                        <i class="material-icons">mode_edit</i>
                        </a>
                        </div>`;
                    }
                }
            ],
            "order": [[5, "desc"]],
            "language": {
                "lengthMenu": 'Display <select class="form-control dataTables-records-length-select">' +
                    '<option value="10"> 10</option>' +
                    '<option value="20"> 20</option>' +
                    '<option value="30"> 30</option>' +
                    '<option value="40"> 40</option>' +
                    '<option value="50"> 50</option>' +
                    '</select> records'
            },
            "pageLength": 50,
            "processing": false,
            "serverSide": true,
            "ajax": ISSUES_URL
        });

        var RequestLogTableApi = $('#requestLog-datatable').DataTable({
            dom: "<'row'<'col-sm-5 col-lg-4'l><'col-xs-12 col-sm-7 col-md-7 col-lg-8 datatables-padding text-right'f>>" +
                "<'row'<'col-sm-12't>>" +
                "<'row'<'col-sm-5'i><'col-sm-7'rp>>",
            initComplete: function () {
                $(document).ready(function () {
                    // Select the input-group div within the DataTable filter
                    var inputGroupDiv = $('#requestLog-datatable_filter .input-group');

                    // Add your custom classes to the input-group div
                    inputGroupDiv.addClass('form-group');
                    $('#requestLog-datatable_filter .input-group').css('margin', '0');
                });
                var rlThat = this
                // Initialize Bootstrap date picker
                $('#reDateFrom').datetimepicker({
                    format: 'MM/DD/YYYY',
                    icons: {
                        time: "fa fa-clock-o",
                        date: "fa fa-calendar",
                        up: "fa fa-chevron-up",
                        down: "fa fa-chevron-down",
                        previous: 'fa fa-chevron-left',
                        next: 'fa fa-chevron-right',
                        today: 'fa fa-screenshot',
                        clear: 'fa fa-trash',
                        close: 'fa fa-remove',
                        inline: true
                    },
                    defaultDate: null,
                }).on("dp.change", function (ev) {
                    if (ev.date !== null && ev.date !== undefined) {
                        rlThat.toDate = ev.date;
                        let endDateFilter = $('#reDateTo').val();
                        if (!!endDateFilter)
                            RequestLogTableApi.draw()
                    }
                });
                $('#reDateTo').datetimepicker({
                    format: 'MM/DD/YYYY',
                    icons: {
                        time: "fa fa-clock-o",
                        date: "fa fa-calendar",
                        up: "fa fa-chevron-up",
                        down: "fa fa-chevron-down",
                        previous: 'fa fa-chevron-left',
                        next: 'fa fa-chevron-right',
                        today: 'fa fa-screenshot',
                        clear: 'fa fa-trash',
                        close: 'fa fa-remove',
                        inline: true
                    }
                }).on("dp.change", function (ev) {
                    if (ev.date !== null && ev.date !== undefined) {
                        rlThat.toDate = ev.date;
                        let startDateFilter = $('#reDateFrom').val();
                        if (!!startDateFilter)
                            RequestLogTableApi.draw()
                    }
                });

                // Modal control for additional filters
                $(".btn-additional-filters").on("click", function (ev) {
                    $("#requestLogFilterModal").modal("show");
                });

                // request log filter button handler 
                $('#btnApplyRe').on('click', function () {
                    RequestLogTableApi.draw();
                    $("#requestLogFilterModal").modal("hide");
                });
                var originalOptions = $('#reCompany').html();
                $('#rePartner').on('change', function (e) {
                    if (e.target.value === 'all_partner_ships') {
                        // If "All" is selected, restore the original options
                        $('#reCompany').html(originalOptions);
                    } else {
                        $.ajax({
                            url: `${FILTER_ACTIVITY_LOG_URL}/${e.target.value}`,
                            type: 'GET',
                            dataType: 'json',
                            success: function (response) {
                                if (response != undefined) {
                                    // Clear existing options
                                    $('#reCompany').empty();

                                    // Add a default "All" option if needed
                                    if (response.result.length > 0) {
                                        $('#reCompany').append('<option class="typie text-left" id="all_accounts" value="all_partner_ship_accounts">All</option>');
                                    }

                                    // Append new options based on the response data
                                    response.result.forEach(function (account) {
                                        $('#reCompany').append(`<option class="typie text-left" id="${account.id}" value="${account.id}">${account.partnership_account_name}</option>`);
                                    });
                                }
                            }
                        });
                    }
                });
                $('#btnResetRe').on('click', function () {
                    $('#rePartner').val($('#all_partners').val());
                    $('#reCompany').val($('#all_accounts').val());
                    $('#reDateFrom').val('');
                    $('#reDateTo').val('');
                    $('#reStatus').val($('#all_status').val());
                    RequestLogTableApi.draw()
                });
            },
            columns: [
                {
                    data: null,
                    render: function (data, type, row, meta) {
                        return RequestLogTableApi.page.info().start + meta.row + 1;
                    },
                    searchable: false,
                    orderable: false
                },
                {
                    data: 'partnership_name',
                    searchable: false,
                    orderable: true,
                },
                {
                    data: 'partnership_account_name',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: null,
                    searchable: false,
                    orderable: false,
                    render: function (data, type, row) {
                        var username = data.firstname || ''; // Default to 'N/A' if firstname is empty
                        if (data.lastname) {
                            username += ' ' + data.lastname; // Concatenate lastname if it exists
                        }
                        return username;
                    }
                },
                {
                    data: 'email',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'request_type',
                    searchable: false,
                    orderable: true,
                },
                {
                    data: 'response_code',
                    searchable: false,
                    orderable: true,
                    render: function (data) {
                        var className = ''
                        if (data === null) data = 500;
                        if (data >= 200 && data < 400) {
                            className = "label label-success";
                        } else {
                            className = "label label-danger";
                        }
                        return data ? `<span class="${className}"> ${data} </span>` : '';
                    }
                },
                {
                    data: 'resource',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'error',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'method',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'path_info',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'remote_ip_address',
                    searchable: false,
                    orderable: false,
                }, {
                    data: 'server_name',
                    searchable: false,
                    orderable: false,
                }, {
                    data: 'created_on',
                    searchable: true,
                    orderable: true,
                    render: function (date = new Date()) {
                        var momentDate = moment(date).utcOffset('-04:00');
                        var formattedDate = momentDate.format("MM/DD/YYYY HH:mm:ss");

                        return `<span datetime='${formattedDate}'>${formattedDate}</span>`;
                    }
                }, {
                    data: 'user_agent',
                    searchable: false,
                    orderable: false,
                },
                // extra fields added
                {
                    data: 'country',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'state',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'city',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'zip_code',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'reverse',
                    searchable: false,
                    orderable: false,
                },
            ],
            "order": [],
            "language": {
                "lengthMenu": 'Display <select class="form-control dataTables-records-length-select">' +
                    '<option value="10"> 10</option>' +
                    '<option value="20"> 20</option>' +
                    '<option value="30"> 30</option>' +
                    '<option value="40"> 40</option>' +
                    '<option value="50"> 50</option>' +
                    '</select> records'
            },
            "pageLength": 50,
            "processing": false,
            "serverSide": true,
            "ajax": {
                "url": REQUEST_LOG_URL,
                // setting filter options
                "data": function (data) {

                    // handler for converting date to local iso format
                    function toLocalIso(date) {
                        if (typeof date !== 'object') {
                            const dateObject = new Date(date)
                            return new Date(dateObject.getTime() - (dateObject.getTimezoneOffset() * 60000)).toISOString();
                        }
                        else
                            return new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();
                    }

                    // finding the sort fields
                    var sortField = data.order.length && data.order[0];
                    var sortData = sortField != 0 && data.columns[sortField.column].data

                    // deleting unwanted data form payload
                    data.columns.forEach(function (column) {
                        if (!column.searchable) {
                            delete column.search;
                        }
                    });


                    // Get the selected values from the dropdown filters
                    var partnerIdFilter = $('#rePartner').val();
                    var accountIdFilter = $('#reCompany').val();
                    var startDateFilter = $('#reDateFrom').val();
                    var endDateFilter = $('#reDateTo').val();
                    var statusCodeFilter = $('#reStatus').val();

                    // Add the selected filters to the API request
                    data.partnerIdFilter = partnerIdFilter || '';
                    data.accountIdFilter = accountIdFilter || '';
                    data.statusCodeFilter = statusCodeFilter || '';
                    data.start_date = startDateFilter ? toLocalIso(startDateFilter) : '';
                    if (endDateFilter) {
                        var endDate = new Date(endDateFilter);
                        endDate.setHours(23, 59, 59); // Set the time to the highest (23:59:59) of the selected day
                        data.end_date = toLocalIso(endDate);
                    } else {
                        data.end_date = '';
                    }
                    data.sort_field = sortData || '';
                    data.sort = sortField ? sortField.dir.toUpperCase() : ''
                }
            },
        });

        var ActivityLogTableApi = $('#activityLog-datatable').DataTable({
            dom: "<'row'<'col-sm-5 col-lg-4'l><'col-xs-12 col-sm-7 col-md-7 col-lg-8 datatables-padding text-right'f>>" +
                "<'row'<'col-sm-12't>>" +
                "<'row'<'col-sm-5'i><'col-sm-7'rp>>",
            initComplete: function () {
                var inputGroupDiv = $('#activityLog-datatable_filter .input-group');

                // Add your custom classes to the input-group div
                inputGroupDiv.addClass('form-group');
                $('#activityLog-datatable_filter .input-group').css('margin', '0');
                var rlThat = this
                // Initialize Bootstrap date picker
                $('#alDateFrom').datetimepicker({
                    format: 'MM/DD/YYYY',
                    icons: {
                        time: "fa fa-clock-o",
                        date: "fa fa-calendar",
                        up: "fa fa-chevron-up",
                        down: "fa fa-chevron-down",
                        previous: 'fa fa-chevron-left',
                        next: 'fa fa-chevron-right',
                        today: 'fa fa-screenshot',
                        clear: 'fa fa-trash',
                        close: 'fa fa-remove',
                        inline: true
                    },
                    defaultDate: null,
                }).on("dp.change", function (ev) {
                    if (ev.date !== null && ev.date !== undefined) {
                        rlThat.toDate = ev.date;
                        let endDateFilter = $('#alDateTo').val();
                        if (!!endDateFilter)
                            ActivityLogTableApi.draw()
                    }
                });
                $('#alDateTo').datetimepicker({
                    format: 'MM/DD/YYYY',
                    icons: {
                        time: "fa fa-clock-o",
                        date: "fa fa-calendar",
                        up: "fa fa-chevron-up",
                        down: "fa fa-chevron-down",
                        previous: 'fa fa-chevron-left',
                        next: 'fa fa-chevron-right',
                        today: 'fa fa-screenshot',
                        clear: 'fa fa-trash',
                        close: 'fa fa-remove',
                        inline: true
                    }
                }).on("dp.change", function (ev) {
                    if (ev.date !== null && ev.date !== undefined) {
                        rlThat.endDate = ev.date;
                        let startDateFilter = $('#alDateFrom').val();
                        if (!!startDateFilter)
                            ActivityLogTableApi.draw()
                    }
                });
                // Modal control for additional filters
                $(".btn-additional-filters").on("click", function (ev) {
                    $("#activityLogFilterModal").modal("show");
                });
                // Activity log filter button handler 
                $('#btnApplyAl').on('click', function () {
                    ActivityLogTableApi.draw();
                    $("#activityLogFilterModal").modal("hide");
                });
                var originalOptions = $('#alCompany').html();
                $('#alPartner').on('change', function (e) {
                    if (e.target.value === 'all_partner_ships') {
                        // If "All" is selected, restore the original options
                        $('#alCompany').html(originalOptions);
                    } else {
                        $.ajax({
                            url: `${FILTER_ACTIVITY_LOG_URL}/${e.target.value}`,
                            type: 'GET',
                            dataType: 'json',
                            success: function (response) {
                                if (response != undefined) {
                                    // Clear existing options
                                    $('#alCompany').empty();

                                    // Add a default "All" option if needed
                                    if (response.result.length > 0) {
                                        $('#alCompany').append('<option class="typie text-left" id="all_accounts" value="all_partner_ship_accounts">All</option>');
                                    }

                                    // Append new options based on the response data
                                    response.result.forEach(function (account) {
                                        $('#alCompany').append(`<option class="typie text-left" id="${account.id}" value="${account.id}">${account.partnership_account_name}</option>`);
                                    });
                                }
                            }
                        });
                    }
                });
                $('#btnResetAl').on('click', function () {
                    $('#alPartner').val($('#all_partners').val());
                    $('#alCompany').val($('#all_accounts').val());
                    $('#alDateFrom').val('');
                    $('#alDateTo').val('');
                    $('#alStatus').val($('#all_status').val());
                    ActivityLogTableApi.draw()
                });
            },
            columns: [
                {
                    data: null,
                    render: function (data, type, row, meta) {
                        return ActivityLogTableApi.page.info().start + meta.row + 1;
                    },
                    searchable: false,
                    orderable: false
                },
                {
                    data: 'type',
                    searchable: false,
                    orderable: true,
                },
                {
                    data: 'partnership_account_name',
                    searchable: false,
                    orderable: false,

                },
                {
                    data: 'partnership_name',
                    searchable: false,
                    orderable: true,

                },
                {
                    data: null,
                    searchable: false,
                    orderable: false,
                    render: function (data, type, row) {
                        var username = data.firstname || ''; // Default to 'N/A' if firstname is empty
                        if (data.lastname) {
                            username += ' ' + data.lastname; // Concatenate lastname if it exists
                        }
                        return username;
                    }
                },
                {
                    data: 'email',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'role',
                    searchable: false,
                    orderable: false,

                },
                {
                    data: 'created_on',
                    searchable: true,
                    orderable: true,
                    render: function (date = new Date()) {
                        var momentDate = moment(date).utcOffset('-04:00');
                        var formattedDate = momentDate.format("MM/DD/YYYY HH:mm:ss");

                        return `<span datetime='${formattedDate}'>${formattedDate}</span>`;
                    }
                },
                {
                    data: 'ip_address',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'name',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'device_os',
                    searchable: false,
                    orderable: false,
                },
                {
                    data: 'device_browser',
                    searchable: false,
                    orderable: false,
                }, {
                    data: 'description',
                    searchable: false,
                    orderable: false,

                }, {
                    data: 'resource_address',
                    searchable: false,
                    orderable: false,
                },
            ],
            "order": [],
            "language": {
                "lengthMenu": 'Display <select class="form-control dataTables-records-length-select">' +
                    '<option value="10"> 10</option>' +
                    '<option value="20"> 20</option>' +
                    '<option value="30"> 30</option>' +
                    '<option value="40"> 40</option>' +
                    '<option value="50"> 50</option>' +
                    '</select> records'
            },
            "pageLength": 50,
            "processing": false,
            "serverSide": true,
            "ajax": {
                "url": ACTIVITY_LOG_URL,
                // setting filter options
                "data": function (data) {

                    // handler for converting date to local iso format
                    function toLocalIso(date) {
                        if (typeof date !== 'object') {
                            const dateObject = new Date(date)
                            return new Date(dateObject.getTime() - (dateObject.getTimezoneOffset() * 60000)).toISOString();
                        }
                        else
                            return new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();
                    }
                    var sortField = data.order.length && data.order[0];
                    var sortData = sortField != 0 && data.columns[sortField.column].data

                    // Get the selected values from the dropdown filters
                    var partnerIdFilter = $('#alPartner').val();
                    var accountIdFilter = $('#alCompany').val();
                    var partnerIdFilter = $('#alPartner').val();
                    var accountIdFilter = $('#alCompany').val();
                    var startDateFilter = $('#alDateFrom').val();
                    var endDateFilter = $('#alDateTo').val();
                    var statusCodeFilter = $('#alStatus').val();
                    // Add the selected filters to the API request
                    data.partnerIdFilter = partnerIdFilter;
                    data.accountIdFilter = accountIdFilter;
                    data.partnerIdFilter = partnerIdFilter || '';
                    data.accountIdFilter = accountIdFilter || '';
                    data.statusCodeFilter = statusCodeFilter || '';
                    data.start_date = startDateFilter ? toLocalIso(startDateFilter) : '';
                    if (endDateFilter) {
                        var endDate = new Date(endDateFilter);
                        endDate.setHours(23, 59, 59); // Set the time to the highest (23:59:59) of the selected day
                        data.end_date = toLocalIso(endDate);
                    } else {
                        data.end_date = '';
                    }
                    data.sort_field = sortData || '';
                    data.sort = sortField ? sortField.dir.toUpperCase() : ''
                }
            },
        });

        /* Initialize Coupons Datatables */
        var CouponsTableApi = $('#coupons-datatable').DataTable({
            dom: "<'row'<'col-sm-1'l><'col-sm-5'><'col-sm-6'f>>" +
                "<'row'<'col-sm-12'tr>>" +
                "<'row'<'col-sm-5'i><'col-sm-7'p>>",
            columns: [
                {
                    data: null,
                    render: function (data, type, row, meta) {
                        return CouponsTableApi.page.info().start + meta.row + 1;
                    },
                    searchable: false,
                    orderable: false
                },
                {
                    data: '1', // Created on
                    searchable: false,
                    render: function (date) {
                        return `<time datetime='${date}'>${moment(date).fromNow()}</time>`;
                    }
                },
                {
                    data: '2', // code
                    searchable: true,
                    render: function (code, type, row, meta) {
                        let discount,
                            amount_off = row[6],
                            percent_off = row[7];
                        if (amount_off && amount_off == 'None') amount_off = '';
                        if (percent_off && percent_off == 'None') percent_off = '';
                        if (!amount_off) {
                            discount = percent_off + '%'
                        } else {
                            discount = '$' + amount_off
                        }
                        return `<div>${code}<p class="small text-muted">${discount} discount</p></div>`;
                    }
                },
                {
                    data: '3', // duration
                    searchable: true,
                    render: function (duration, type, row, meta) {
                        let duration_in_months = row[8];
                        if (duration == 'forever')
                            return `<span class="label label-success">Forever</span>`;
                        else if (duration == 'once')
                            return `<span class="label label-warning">Once</span>`;
                        else return `<span class="label label-info">${duration_in_months} months</span>`;
                    }
                },
                {
                    data: '4', // Expires
                    searchable: false,
                    render: function (date) {
                        return `<time datetime='${date}'>${moment(date).fromNow()}</time>`;
                    }
                },
                {
                    data: '5', // Redeemed
                    searchable: false,
                    render: function (times_redeemed, type, row, meta) {
                        let max_redemptions = row[9],
                            total;
                        if (max_redemptions && max_redemptions == 'None') max_redemptions = '';
                        total = max_redemptions ? max_redemptions : '&infin;';
                        return `${times_redeemed} / ${total}`;
                    }
                },
                {
                    data: '6', // amount_off
                    searchable: false,
                    visible: false
                },
                {
                    data: '7', // percent_off
                    searchable: false,
                    visible: false
                },
                {
                    data: '8', // duration_in_months
                    searchable: false,
                    visible: false
                },
                {
                    data: '9', // max_redemptions
                    searchable: false,
                    visible: false
                },
                {
                    data: null,
                    searchable: false,
                    orderable: false,
                    className: "text-center",
                    render: function (data) {
                        let id = data[0];
                        return `<div class='btn-group'>
                                    <button coupon-id=${id} type="button" class="btn delete-coupon btn-xs btn-alt btn-default" title="Delete coupon"><span class="fa fa-trash" aria-hidden="true"></span></button>
                                </div>`;
                    }
                }
            ],
            "order": [[1, "desc"]],
            "language": {
                "lengthMenu": 'Display <select class="form-control dataTables-records-length-select">' +
                    '<option value="10"> 10</option>' +
                    '<option value="20"> 20</option>' +
                    '<option value="30"> 30</option>' +
                    '<option value="40"> 40</option>' +
                    '<option value="50"> 50</option>' +
                    '</select> records'
            },
            "pageLength": 50,
            "processing": false,
            "serverSide": true,
            "ajax": COUPONS_URL
        });

        $("#coupons-datatable_filter input").unbind();
        $("#coupons-datatable_filter input").on('input', ({ target: { value } }) => {
            // fixes calling numbers in search
            if (parseInt(value, 10) != value) CouponsTableApi.search(value).draw();
        });
        $("#coupons-datatable").on('click', '.delete-coupon', e => {
            let id = $(e.currentTarget).attr('coupon-id');
            let yesCallback = () => {
                $.ajax({
                    method: "DELETE",
                    url: COUPONS_REMOVE_URL + id
                })
                    .done(function (result, textStatus, jqXHR) {
                        if (jqXHR.status === 200) {
                            $('#flash-messages .coupon').remove();
                            createFlashMsg($('#coupons-datatable_wrapper'), 'The coupon was successfully removed.', 'success', 'coupon');
                            CouponsTableApi.ajax.reload();
                        }
                    })
                    .error(function (jqXHR, textStatus, result) {
                        try {
                            var xhrMessage = JSON.parse(jqXHR.responseText).message
                        }
                        catch (error) {
                            xhrMessage = jqXHR.message
                        }
                        createFlashMsg($('#coupons-datatable_wrapper'), `Error. ${xhrMessage || ''}`, 'danger', 'coupon');
                    })
            };
            showConfirm({
                title: 'CONFIRM',
                body: '<p>Are you sure you want to remove this coupon?</p>',
                yesCb: yesCallback,
            });
        });

        /* Initialize Blocked Numbers Datatables */
        var BlockedTableApi = $('#blockNumber-datatable').DataTable({
            buttons: [
                {
                    text: 'Download csv',
                    className: 'btn-info btn btn-csv-dl',
                    action: function (e, dt, node, config) {
                        var searchOptions = {
                            search: dt.ajax.params().search
                        },
                            queryString = $.param(searchOptions),
                            url = `${BLOCKED_CSV_URL}?${queryString}`;

                        window.open(url);
                    }
                }
            ],
            dom: "<'row'<'col-sm-3 col-md-3 col-lg-2'B><'col-sm-2 col-lg-2'l><'col-xs-12 col-sm-7 col-md-7 col-lg-8 datatables-padding text-right'f>>" +
                "<'row'<'col-sm-12't>>" +
                "<'row'<'col-sm-5'i><'col-sm-7'rp>>",
            columns: [
                {
                    data: null,
                    render: function (data, type, row, meta) {
                        return BlockedTableApi.page.info().start + meta.row + 1;
                    },
                    searchable: false,
                    orderable: false
                },// Id
                {
                    data: 1,
                    render: utils.formatNumber
                }, // Phone Number,
                {
                    data: 2, // Status
                    className: 'text-center text-capitalize',
                    render: function (status) {
                        var classes = {
                            'blocked': 'label-danger',
                            'unblocked': 'label-warning',
                            'other': 'label-default'
                        };
                        if (!(status in classes)) {
                            status = 'other';
                        }

                        return `<span class="label ${classes[status]}" title="">${status}</span>`;
                    }
                },
                {
                    data: null,
                    searchable: false,
                    orderable: false,
                    className: "text-center",
                    render: function (data) {
                        let id = data[0];
                        return `
                        <div class='btn-group'>
                        <a href='/block_numbers/edit/${id}' class='btn btn-xs btn-success btn-table-action' data-original-title='Edit' title='Edit' data-toggle='tooltip'>
                        <i class="material-icons">mode_edit</i>
                        </a>
                        <a class='btn btn-xs btn-danger remove-block-no btn-table-action'
                        data-original-title='Delete' title='Delete'
                        data-toggle='tooltip'>
                        <i class="material-icons">delete_forever</i>
                        </a>
                        </div>`;
                    }
                }
            ],
            "order": [[1, "desc"]],
            "language": {
                "lengthMenu": 'Display <select class="form-control dataTables-records-length-select">' +
                    '<option value="10"> 10</option>' +
                    '<option value="20"> 20</option>' +
                    '<option value="30"> 30</option>' +
                    '<option value="40"> 40</option>' +
                    '<option value="50"> 50</option>' +
                    '</select> records'
            },
            "pageLength": 50,
            "processing": false,
            "serverSide": true,
            "ajax": BlOCK_URL,

            createdRow: function (row, data, dataIndex) {
                var id = data[0];
                var $row = $(row);

                $row.find('.remove-block-no').click(function (event) {
                    event.preventDefault();
                    {
                        swal({
                            title: 'Are you sure about this deletion?',
                            text: "You won't be able to revert this change.",
                            type: 'warning',
                            showCancelButton: true,
                            confirmButtonColor: '#03a9f4',
                            cancelButtonColor: '#f44336',
                            confirmButtonText: 'Yes, delete it!'
                        }).then(function (isConfirm) {
                            if (isConfirm) {
                                var csrf_token = $('meta[name=csrf-token]').attr('content');
                                $.ajax({
                                    url: `//${appConfig.server_url}/block_numbers/delete/${id}`,
                                    headers: {
                                        "X-CSRFToken": csrf_token,
                                    },
                                    method: 'DELETE'
                                }).done(function () {
                                    BlockedTableApi.ajax.reload();
                                    swal({
                                        title: 'Deleted!',
                                        text: 'The blocked number has been deleted.',
                                        type: 'success',
                                        confirmButtonColor: '#03a9f4'
                                    }
                                    );
                                }).fail(function () {
                                    utils.flash(__('There was an error deleting the blocked phone number.', 'danger'));
                                });
                            }
                        })
                    }
                });
            }
        });

        /* Initialize Account User table Datatables */
        var UserTableApi = $('#user-datatable').DataTable({
            dom: "<'row'<'col-sm-5 col-lg-4'l><'col-xs-12 col-sm-7 col-md-7 col-lg-8 datatables-padding text-right'f>>" +
                "<'row'<'col-sm-12't>>" +
                "<'row'<'col-sm-5'i><'col-sm-7'rp>>",
            columns: [
                {
                    data: null,
                    render: function (data, type, row, meta) {
                        return UserTableApi.page.info().start + meta.row + 1;
                    },
                    searchable: false,
                    orderable: false
                },// Id
                null,
                null,
                null,
                {
                    data: 4,
                    render: utils.formatNumber
                }, // Phone Number,
                {
                    data: '5', // Signed in last
                    searchable: false,
                    render: function (date) {
                        return `<time datetime='${date}'>${moment(date).fromNow()}</time>`;
                    }
                },
                null,
                {
                    data: null,
                    searchable: false,
                    orderable: false,
                    className: "text-center",
                    render: function (data) {
                        let id = data[0];
                        return `
                        <div class='btn-group'>
                        <a href='/admin/users/edit/${id}' class='btn btn-xs btn-success btn-table-action' data-original-title='Edit' title='Edit' data-toggle='tooltip'>
                        <i class="material-icons">mode_edit</i>
                        </a>
                        <a class='btn btn-xs btn-danger remove-user btn-table-action'
                        data-original-title='Delete' title='Delete'
                        data-toggle='tooltip'>
                        <i class="material-icons">delete_forever</i>
                        </a>
                        </div>`;
                    }
                }
            ],
            "order": [[1, "desc"]],
            "language": {
                "lengthMenu": 'Display <select class="form-control dataTables-records-length-select">' +
                    '<option value="10"> 10</option>' +
                    '<option value="20"> 20</option>' +
                    '<option value="30"> 30</option>' +
                    '<option value="40"> 40</option>' +
                    '<option value="50"> 50</option>' +
                    '</select> records'
            },
            "pageLength": 50,
            "processing": false,
            "serverSide": true,
            "ajax": USER_URL,

            createdRow: function (row, data, dataIndex) {
                var id = data[0];
                var $row = $(row);

                $row.find('.remove-user').click(function (event) {
                    event.preventDefault();
                    {
                        swal({
                            title: 'Are you sure about this deletion?',
                            text: "You won't be able to revert this change.",
                            type: 'warning',
                            showCancelButton: true,
                            confirmButtonColor: '#03a9f4',
                            cancelButtonColor: '#f44336',
                            confirmButtonText: 'Yes, delete it!'
                        }).then(function (isConfirm) {
                            if (isConfirm) {
                                var csrf_token = $('meta[name=csrf-token]').attr('content');
                                $.ajax({
                                    url: `//${appConfig.server_url}/admin/users/delete/${id}`,
                                    headers: {
                                        "X-CSRFToken": csrf_token,
                                    },
                                    method: 'DELETE'
                                }).done(function () {
                                    UserTableApi.ajax.reload();
                                    swal({
                                        title: 'Deleted!',
                                        text: 'The user been deleted.',
                                        type: 'success',
                                        confirmButtonColor: '#03a9f4'
                                    }
                                    );
                                }).fail(function () {
                                    utils.flash(__('There was an error deleting the user.', 'danger'));
                                });
                            }
                        })
                    }
                });
            }
        });

        /* Initialize PhoneNumber Datatables */
        var PhoneTableApi = $('#phone-datatable').DataTable({
            buttons: [
                {
                    text: 'Download csv',
                    className: 'btn-primary btn btn-csv-dl',
                    action: function (e, dt, node, config) {
                        var searchOptions = _.extend({}, dt.ajax.params(), { length: 9999999 });
                        var queryString = $.param(searchOptions);
                        var url = `${PHONENUMBER_CSV_URL}?${queryString}`;

                        window.open(url);
                    }
                }
            ],
            dom: "<'row'<'col-sm-3 col-md-3 col-lg-2'B><'col-sm-2 col-lg-2'l><'col-xs-12 col-sm-7 col-md-7 col-lg-8 datatables-padding text-right'f>>" +
                "<'row'<'col-sm-12't>>" +
                "<'row'<'col-sm-5'i><'col-sm-7'rp>>",
            columns: [
                {
                    data: null,
                    render: function (data, type, row, meta) {
                        return PhoneTableApi.page.info().start + meta.row + 1;
                    },
                    searchable: false,
                    orderable: false
                },
                null, // Friendly Name
                {
                    data: 2,
                    render: utils.formatNumber
                }, // Phone Number
                {
                    className: 'text-center text-capitalize',
                    searchable: true,
                    orderable: true
                }, // Type
                {
                    searchable: false,
                    orderable: true
                }, // Number of leads
                {
                    data: '5', // Created on
                    searchable: false,
                    render: function (date) {
                        return `<time datetime='${date}'>${moment(date).fromNow()}</time>`;
                    }
                },
                {
                    data: '6', // Updated on
                    searchable: false,
                    render: function (date) {
                        return `<time datetime='${date}'>${moment(date).fromNow()}</time>`;
                    }
                },
                {
                    data: '0',
                    searchable: false,
                    orderable: false,
                    className: "text-center datatables-action-buttons",
                    render: function (id) {
                        return `
                        <div class='btn-group'>
                        <a href='/inbound/${id}' class='btn btn-xs btn-success btn-table-action'
                        data-original-title='Edit' title='Edit' data-toggle='tooltip'>
                        <i class="material-icons">mode_edit</i>
                        </a>
                        <a class='btn btn-xs btn-danger remove-routing btn-table-action'
                        data-original-title='Delete' title='Delete' data-toggle='tooltip'>
                        <i class="material-icons">delete_forever</i>
                        </a>
                        <a href='/inbound/install-instructions/${id}' class='btn btn-xs btn-primary btn-table-action'
                        data-original-title='Install Instructions' title='Install Instructions' data-toggle='tooltip'>
                        <i class="material-icons">stars</i>
                        </a>
                        </div>`;
                    }
                }
            ],
            "order": [[5, "desc"]],
            "language": {
                "lengthMenu": 'Display <select class="form-control dataTables-records-length-select">' +
                    '<option value="10"> 10</option>' +
                    '<option value="20"> 20</option>' +
                    '<option value="30"> 30</option>' +
                    '<option value="40"> 40</option>' +
                    '<option value="50"> 50</option>' +
                    '</select> records'
            },
            "pageLength": 50,
            "processing": false,
            "serverSide": true,
            "ajax": phoneUrl,

            createdRow: function (row, data, dataIndex) {
                var id = data[0];
                var $row = $(row);

                $row.find('.remove-routing').click(function (event) {
                    event.preventDefault();
                    {
                        swal({
                            title: 'Are you sure about this deletion?',
                            text: "You won't be able to revert this change.",
                            type: 'warning',
                            showCancelButton: true,
                            confirmButtonColor: '#03a9f4',
                            cancelButtonColor: '#f44336',
                            confirmButtonText: 'Yes, delete it!'
                        }).then(function (isConfirm) {
                            if (isConfirm) {
                                var csrf_token = $('meta[name=csrf-token]').attr('content');
                                $.ajax({
                                    url: `//${appConfig.server_url}/api/inbound/routings/${id}`,
                                    headers: {
                                        "X-CSRFToken": csrf_token,
                                    },
                                    method: 'DELETE'
                                }).done(function () {
                                    PhoneTableApi.ajax.reload();
                                    swal({
                                        title: 'Deleted!',
                                        text: 'The phone number has been deleted.',
                                        type: 'success',
                                        confirmButtonColor: '#03a9f4'
                                    }
                                    );
                                }).fail(function () {
                                    utils.flash(__('There was an error deleting the phone number.', 'danger'));
                                });
                            }
                        })
                    }
                });
            }
        });

        // Add material-design datatables classes to divs
        $('#phone-datatable_filter label').addClass('form-group');
        $('#phone-datatable_length label').addClass('form-group');
        $('#agent-datatable_filter label').addClass('form-group');
        $('#agent-datatable_length label').addClass('form-group');
        $('#issues-datatable_filter label').addClass('form-group');
        $('#issues-datatable_length label').addClass('form-group');
        $('#blockNumber-datatable_filter label').addClass('form-group');
        $('#blockNumber-datatable_length label').addClass('form-group');
        $('#user-datatable_filter label').addClass('form-group');
        $('#user-datatable_length label').addClass('form-group');
        /* Add placeholder attribute to the search input */
        $('.dataTables_filter input').attr('placeholder', 'Search Records');

        /* Select/Deselect all checkboxes in tables */
        $('thead input:checkbox').click(function () {
            var checkedStatus = $(this).prop('checked');
            var table = $(this).closest('table');

            $('tbody input:checkbox', table).each(function () {
                $(this).prop('checked', checkedStatus);
            });
        });

        /* Table Styles Switcher */
        var genTable = $('#general-table');

        $('#style-default').click(function () { genTable.removeClass('table-bordered').removeClass('table-borderless'); });
        $('#style-bordered').click(function () { genTable.removeClass('table-borderless').addClass('table-bordered'); });
        $('#style-borderless').click(function () { genTable.removeClass('table-bordered').addClass('table-borderless'); });

        $('#style-striped').on('click', function () {
            $(this).toggleClass('active');

            if ($(this).hasClass('active')) {
                genTable.addClass('table-striped');
            } else {
                genTable.removeClass('table-striped');
            }
        });

        $('#style-condensed').on('click', function () {
            $(this).toggleClass('active');

            if ($(this).hasClass('active')) {
                genTable.addClass('table-condensed');
            } else {
                genTable.removeClass('table-condensed');
            }
        });

        $('#style-hover').on('click', function () {
            $(this).toggleClass('active');

            if ($(this).hasClass('active')) {
                genTable.addClass('table-hover');
            } else {
                genTable.removeClass('table-hover');
            }
        });
    }
};

// Expose 'Tables' to the scripts on the page
var global = Function('return this;')();
global.Tables = Tables;