diff --git a/app/views/report/login.html.haml b/app/views/report/login.html.haml new file mode 100644 --- /dev/null +++ b/app/views/report/login.html.haml @@ -0,0 +1,130 @@ +- content_for :header do + = javascript_include_tag 'local_jquery' + +%h1 Logins detail + +.row + .col-md-4 + .alert.alert-info + %ul + %li You have to click refresh when changing the filter above + %li Detail tab shows each logins separately + %li Summary tab shows logins summary of each user + .col-md-4 + = render partial: 'shared/date_filter' + .col-md-4 + = render partial: 'shared/user_select' + +.row.form-group + .col-sm-12 + %ul.nav.nav-tabs + %li.active + %a{href: '#detail', data: {toggle: :tab}} Detail + %li + %a{href: '#summary', data: {toggle: :tab}} Summary +.row + .col-sm-12 + .tab-content + .tab-pane.active#detail + %table#detail-table.table.table-hover.table-condense.datatable{style: 'width: 100%'} + .tab-pane#summary + %table#summary-table.table.table-hover.table-condense.datatable{style: 'width: 100%'} + + + +:javascript + $(function() { + detail_table = $('#detail-table').DataTable({ + dom: "<'row'<'col-sm-3'B><'col-sm-3'l><'col-sm-6'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-5'i><'col-sm-7'p>>", + autoWidth: true, + buttons: [ + { + text: 'Refresh', + action: (e,dt,node,config) => { + detail_table.clear().draw() + detail_table.ajax.reload( () => { detail_table.columns.adjust().draw() } ) + summary_table.clear().draw() + summary_table.ajax.reload( () => { summary_table.columns.adjust().draw() } ) + } + }, + 'copy', + { + extend: 'excel', + title: 'Login detail', + } + ], + columns: [ + {title: 'User', data: 'login_text'}, + {title: 'Time', data: 'created_at'}, + {title: 'IP', data: 'ip_address'}, + ], + ajax: { + url: '#{login_detail_query_report_path}', + type: 'POST', + data: (d) => { + d.since_datetime = $('#since_datetime').val() + d.until_datetime = $('#until_datetime').val() + d.users = $("input[name='users']:checked").val() + d.groups = $("#group_id").select2('val') + }, + dataType: 'json', + beforeSend: (request) => { + request.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); + }, + }, //end ajax + pageLength: 25, + processing: true, + }); + + summary_table = $('#summary-table').DataTable({ + dom: "<'row'<'col-sm-3'B><'col-sm-3'l><'col-sm-6'f>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-5'i><'col-sm-7'p>>", + autoWidth: true, + buttons: [ + { + text: 'Refresh', + action: (e,dt,node,config) => { + summary_table.clear().draw() + summary_table.ajax.reload( () => { summary_table.columns.adjust().draw() } ) + detail_table.clear().draw() + detail_table.ajax.reload( () => { detail_table.columns.adjust().draw() } ) + } + }, + 'copy', + { + extend: 'excel', + title: 'Login summary', + } + ], + columns: [ + {title: 'User', data: 'login_text'}, + {title: 'Login Count', data: 'count'}, + {title: 'Earliest', data: 'earliest'}, + {title: 'Latest', data: 'latest'}, + {title: 'IP', data: 'ip_address'}, + ], + ajax: { + url: '#{login_summary_query_report_path}', + type: 'POST', + data: (d) => { + d.since_datetime = $('#since_datetime').val() + d.until_datetime = $('#until_datetime').val() + d.users = $("input[name='users']:checked").val() + d.groups = $("#group_id").select2('val') + }, + dataType: 'json', + beforeSend: (request) => { + request.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); + }, + }, //end ajax + pageLength: 25, + processing: true, + }); + + $('.input-group.date').datetimepicker({ + format: 'YYYY-MM-DD HH:mm', + showTodayButton: true, + locale: 'en', + widgetPositioning: {horizontal: 'auto', vertical: 'bottom'}, + defaultDate: moment() + }); + });