let users_table = null; let cases_table = null; let assets_table = null; function edit_contact(contact_id, customer_id) { url = '/manage/customers/' + customer_id + '/contacts/' + contact_id + '/modal' + case_param(); $('#modal_add_contact_content').load(url, function (response, status, xhr) { if (status !== "success") { ajax_notify_error(xhr, url); return false; } $('#form_new_contact').on("submit", preventFormDefaultBehaviourOnSubmit); $('#submit_new_contact').on("click", function () { const form = $('#form_new_contact').serializeObject(); post_request_api(`/manage/customers/${customer_id}/contacts/${contact_id}/update`, JSON.stringify(form), true) .done((data) => { if(notify_auto_api(data)) { window.location.reload(); } }); return false; }); $('#submit_delete_contact').on("click", function () { post_request_api(`/manage/customers/${customer_id}/contacts/${contact_id}/delete`) .done((data) => { if(notify_auto_api(data)) { window.location.reload(); } }); return false; }); }); $('#modal_add_contact').modal({show: true}); } function add_new_contact(customer_id) { url = '/manage/customers/' + customer_id + '/contacts/add/modal' + case_param(); $('#modal_add_contact_content').load(url, function (response, status, xhr) { if (status !== "success") { ajax_notify_error(xhr, url); return false; } $('#form_new_contact').on("submit", preventFormDefaultBehaviourOnSubmit); $('#submit_new_contact').on("click", function () { const form = $('#form_new_contact').serializeObject(); post_request_api(`/manage/customers/${customer_id}/contacts/add`, JSON.stringify(form), true) .done((data) => { if(notify_auto_api(data)) { window.location.reload(); } }); return false; }) }); $('#modal_add_contact').modal({show: true}); } function load_customer_stats(customer_id) { get_request_api(`/manage/customers/${customer_id}/cases`) .done((data) => { if (api_request_failed(data)) { return false; } $('#last_month_cases').text(data.data.stats.cases_last_month); $('#last_year_cases').text(data.data.stats.cases_last_year); $('#cases_last_month').text(data.data.stats.cases_last_month); $('#cases_current_month').text(data.data.stats.cases_current_month); $('#cases_current_year').text(data.data.stats.cases_current_year); $('#current_open_cases').text(data.data.stats.open_cases); $('#cases_total').text(data.data.stats.cases_total); $('#ratio_year').text(data.data.stats.ratio_year); $('#average_case_duration').text(data.data.stats.average_case_duration); if (data.data.stats.ratio_year > 0) { $('#ratio_year').addClass('text-warning'); $('#ratio_year').html(`+${data.data.stats.ratio_year}% `); } else if (data.data.stats.ratio_year < 0) { $('#ratio_year').addClass('text-success'); $('#ratio_year').html(`${data.data.stats.ratio_year}% `); } if (data.data.stats.ratio_month > 0) { $('#ratio_month').addClass('text-warning'); $('#ratio_month').html(`+${data.data.stats.ratio_month}% `); } else if (data.data.stats.ratio_month < 0) { $('#ratio_month').addClass('text-success'); $('#ratio_month').html(`${data.data.stats.ratio_month}% `); } $('#last_year').text(data.data.stats.last_year); }); } function refresh_client_users(customer_id) { get_raw_request_api(`/manage/users/filter?customer_id=${customer_id}`) .done((data) => { if (api_request_failed(data)) { return; } users_table.api().clear().rows.add(data.data.users).draw(); }) } $(document).ready(function() { let customer_id = $('#customer_id').val(); load_customer_stats(customer_id); $('#collapse_client_users_view').on('show.bs.collapse', function() { refresh_client_users(customer_id) }); users_table = $('#client_users_table').dataTable({ "order": [[ 1, "asc" ]], "autoWidth": false, "columns": [ { "data": "user_id", "render": function(data, type, row) { return data; } }, { "data": "user_name", "render": function(data, type, row) { return data; } }, { "data": "user_login", "render": function(data, type, row) { return data; } }, { "data": "is_service_account", "render": function(data, type, row) { return data; } } ] }); assets_table = $('#client_assets_table').dataTable({ "order": [[ 1, "asc" ]], "autoWidth": false, "columns": [ { "data": "asset_name", "render": function(data, type, row) { return data; } }, { "data": "asset_description", "render": function(data, type, row) { return data; } }, { "data": "asset_type", "render": function(data, type, row) { return data.asset_name; } }, { "data": "asset_ip", "render": function(data, type, row) { return data; } }, { "data": "case_id", "render": function(data, type, row) { if (type === 'display' && data !== null) { let a_anchor = $(''); a_anchor.attr('href', '/case?cid=' + data); a_anchor.attr('target', '_blank'); a_anchor.attr('rel', 'noopener'); a_anchor.text('#' + data); return a_anchor.prop('outerHTML'); } return data; } } ], "serverSide": true, "ajax": { "url": "/manage/assets/filter", "type": "GET", "data": function (d) { let page = Math.floor(d.start / d.length) + 1; d.page = page; d.per_page = d.length; d.customer_id = customer_id; d.order_by = d.columns[d.order[0].column].data; d.sort_dir = d.order[0].dir; }, "dataSrc": function (json) { json.recordsTotal = json.data.total; json.recordsFiltered = json.data.total; json.draw = json.data.draw json.data = json.data.assets; return json.data; } } }); /* Debugging notes It is possible to show information about the state of the table by typing in the console cases_table.page.info() see: https://datatables.net/reference/api/page.info() */ cases_table = $('#client_cases_table').DataTable({ "order": [[ 1, "asc" ]], "autoWidth": false, "columns": [ { "data": "case_name", "render": function(data, type, row) { if (type === 'display') { let a_anchor = $(''); a_anchor.attr('href', '/case?cid=' + row['case_id']); a_anchor.attr('target', '_blank'); a_anchor.attr('rel', 'noopener'); a_anchor.text(data); return a_anchor.prop('outerHTML'); } return data; } }, { "data": "open_date", "render": function(data, type, row) { return data; } }, { "data": "state", "render": function(data, type, row) { if (data !== null) { return data.state_name; } else { return 'Unknown'; } } }, { "data": "owner", "render": function(data, type, row) { return data.user_name; } } ], // https://datatables.net/manual/server-side "serverSide": true, "ajax": { "url": "/api/v2/cases", "type": "GET", "data": function(d) { d.page = Math.floor(d.start / d.length) + 1; d.per_page = d.length; d.case_customer_id = customer_id; d.order_by = d.columns[d.order[0].column].data; d.sort_dir = d.order[0].dir; d.case_name = d.search.value; }, // https://datatables.net/reference/option/ajax.dataSrc "dataSrc": function(json) { json.recordsTotal = json.total; // According to the documentation (https://datatables.net/manual/server-side#Returned-data), // recordsFiltered is the number of records after filtering has been applied // since there are no filters on this table, it should be OK json.recordsFiltered = json.total; return json.data; } } }); });