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 : '∞';
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;