| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- 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}% <i class="ml-1 fa fa-chevron-up"></i>`);
- } else if (data.data.stats.ratio_year < 0) {
- $('#ratio_year').addClass('text-success');
- $('#ratio_year').html(`${data.data.stats.ratio_year}% <i class="ml-1 fa fa-chevron-down"></i>`);
- }
- if (data.data.stats.ratio_month > 0) {
- $('#ratio_month').addClass('text-warning');
- $('#ratio_month').html(`+${data.data.stats.ratio_month}% <i class="ml-1 fa fa-chevron-up"></i>`);
- } else if (data.data.stats.ratio_month < 0) {
- $('#ratio_month').addClass('text-success');
- $('#ratio_month').html(`${data.data.stats.ratio_month}% <i class="ml-1 fa fa-chevron-down"></i>`);
- }
- $('#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></a>');
- 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></a>');
- 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;
- }
- }
- });
- });
|