export class LogViewController extends BaseViewController { constructor( options = {} ) { _.defaults( options, { el: '#log_view_container', tables: { 'product': ['product', 'product_price'], 'user_contact': ['user_contact'], 'users': ['users', 'user_preference', 'user_wage', 'authentication'], 'user_wage': ['user_wage'], 'user_title': ['user_title'], 'user_preference': ['user_preference'], 'user_preference_notification': ['user_preference_notification'], 'ui_kit': ['ui_kit'], 'ui_kit_child': ['ui_kit_child'], 'bank_account': ['bank_account'], 'user_default': ['user_default'], 'user_group': ['user_group'], 'company': ['company'], 'pay_period_schedule': ['pay_period_schedule', 'pay_period', 'pay_period_schedule_user'], 'pay_period': ['pay_period'], 'branch': ['branch'], 'department': ['department'], 'hierarchy_control': ['hierarchy_control', 'hierarchy_object_type', 'hierarchy_user', 'hierarchy_level'], 'wage_group': ['wage_group'], 'ethnic_group': ['ethnic_group'], 'currency': ['currency'], 'currency_rate': ['currency_rate'], 'permission_control': ['permission_control', 'permission_user'], 'custom_field': ['custom_field'], 'station': ['station', 'station_user_group', 'station_branch', 'station_department', 'station_include_user', 'station_exclude_user'], 'pay_stub_amendment': ['pay_stub_amendment'], 'recurring_ps_amendment': ['recurring_ps_amendment', 'recurring_ps_amendment_user'], 'pay_stub_entry_account': ['pay_stub_entry_account'], 'company_deduction': ['company_deduction', 'user_deduction', 'company_deduction_pay_stub_entry_account'], 'user_expense': ['user_expense'], 'round_interval_policy': ['round_interval_policy'], 'meal_policy': ['meal_policy'], 'break_policy': ['break_policy'], 'over_time_policy': ['over_time_policy'], 'absence_policy': ['absence_policy'], 'recurring_holiday': ['recurring_holiday'], 'holiday_policy': ['holiday_policy', 'holiday_policy_recurring_holiday'], 'holidays': ['holidays'], 'premium_policy': ['premium_policy'], 'policy_group': ['policy_group', 'policy_group_user'], 'document': ['document', 'document_revision'], 'document_group': ['document_group'], 'document_revision': ['document_revision'], 'schedule_policy': ['schedule_policy'], 'accrual_policy': ['accrual_policy', 'accrual_policy_milestone', 'accrual_policy_user_modifier'], 'client': ['client', 'client_contact', 'client_payment'], 'report_custom_column': ['report_custom_column'], 'client_contact': ['client_contact'], 'client_payment': ['client_payment'], 'invoice_transaction': ['invoice_transaction'], 'invoice': ['invoice'], 'job': ['job', 'job_exclude_job_item', 'job_exclude_user', 'job_include_job_item', 'job_include_user', 'job_job_item_group', 'job_user_branch', 'job_user_group', 'job_user_department'], 'client_group': ['client_group'], 'product_group': ['product_group'], 'job_item': ['job_item'], 'job_group': ['job_group'], 'job_item_group': ['job_item_group'], 'report_schedule': ['report_schedule'], 'accrual_policy_account': ['accrual_policy_account'], 'accrual': ['accrual'], 'accrual_balance': ['accrual_balance'], 'schedule': ['schedule'], 'recurring_schedule_control': ['recurring_schedule_control'], //, 'recurring_schedule_user' 'recurring_schedule_template_control': ['recurring_schedule_template_control', 'recurring_schedule_template'], 'punch': ['punch', 'punch_control'], 'kpi': ['kpi'], 'kpi_group': ['kpi_group'], 'qualification': ['qualification'], 'qualification_group': ['qualification_group'], 'user_skill': ['user_skill'], 'user_education': ['user_education'], 'user_membership': ['user_membership'], 'user_license': ['user_license'], 'user_language': ['user_language'], 'job_vacancy': ['job_vacancy'], 'job_application': ['job_application'], 'job_applicant': ['job_applicant'], 'invoice_district': ['invoice_district'], 'job_applicant_employment': ['job_applicant_employment'], 'job_applicant_reference': ['job_applicant_reference'], 'job_applicant_location': ['job_applicant_location'], 'job_applicant_skill': ['job_applicant_skill'], 'job_applicant_education': ['job_applicant_education'], 'job_applicant_license': ['job_applicant_license'], 'job_applicant_membership': ['job_applicant_membership'], 'job_applicant_language': ['job_applicant_language'], 'tax_policy': ['tax_policy'], 'area_policy': ['area_policy'], 'shipping_policy': ['shipping_policy'], 'payment_gateway': ['payment_gateway'], 'request': ['request'], 'exception_policy_control': ['exception_policy_control', 'exception_policy'], 'user_review_control': ['user_review_control', 'user_review'], 'roe': ['roe'], 'expense_policy': ['expense_policy'], 'user_report_data': ['user_report_data'], 'regular_time_policy': ['regular_time_policy'], 'pay_code': ['pay_code'], 'pay_formula_policy': ['pay_formula_policy'], 'contributing_pay_code_policy': ['contributing_pay_code_policy'], 'contributing_shift_policy': ['contributing_shift_policy'], 'accrual_policy_user_modifier': ['accrual_policy_user_modifier'], 'job_item_amendment': ['job_item_amendment'], 'user_date_total': ['user_date_total'], 'pay_stub': ['pay_stub', 'pay_stub_entry'], 'legal_entity': ['legal_entity'], 'payroll_remittance_agency': ['payroll_remittance_agency'], 'payroll_remittance_agency_event': ['payroll_remittance_agency_event'], 'remittance_source_account': ['remittance_source_account'], 'remittance_destination_account': ['remittance_destination_account'], 'geo_fence': ['geo_fence'] }, log_detail_grid: null, log_detail_script_name: null } ); super( options ); } init( options ) { //this._super('initialize', options ); this.edit_view_tpl = 'LogEditView.html'; this.context_menu_name = $.i18n._( 'Audit' ); this.navigation_label = $.i18n._( 'Audit' ); this.viewId = 'Log'; this.script_name = 'LogView'; this.log_detail_script_name = 'LogDetailView'; this.api = TTAPI.APILog; this.noticeDiv = $( '.audit-info' ); this.render(); if ( this.sub_view_mode ) { this.buildContextMenu( true ); } else { this.buildContextMenu(); } } buildEditViewUI() { super.buildEditViewUI(); var tab_model = { 'tab_audit_details': { 'label': $.i18n._( 'Audit Details' ), 'html_template': this.getAuditLogTabHtml() }, }; this.setTabModel( tab_model ); this.navigation.AComboBox( { api_class: TTAPI.APILog, id: this.script_name + '_navigation', allow_multiple_selection: false, layout_name: 'global_log', navigation_mode: true, show_search_inputs: true } ); this.setNavigation(); var tab_audit_details = this.edit_view_tab.find( '#tab_audit_details' ); var tab_audit_details_column1 = tab_audit_details.find( '.first-row' ); // tab_audit_details column1 // Date var form_item_input = Global.loadWidgetByName( FormItemType.TEXT ); form_item_input.TText( { field: 'date' } ); this.addEditFieldToColumn( $.i18n._( 'Date' ), form_item_input, tab_audit_details_column1, '' ); // Action form_item_input = Global.loadWidgetByName( FormItemType.TEXT ); form_item_input.TText( { field: 'action' } ); this.addEditFieldToColumn( $.i18n._( 'Action' ), form_item_input, tab_audit_details_column1 ); // Employee form_item_input = Global.loadWidgetByName( FormItemType.TEXT ); form_item_input.TText( { field: 'user_name' } ); this.addEditFieldToColumn( $.i18n._( 'Employee' ), form_item_input, tab_audit_details_column1 ); // Description form_item_input = Global.loadWidgetByName( FormItemType.TEXT ); form_item_input.TText( { field: 'description' } ); this.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_audit_details_column1, '' ); // set the log details information. this.initLogDetailsView(); } search( set_default_menu, page_action, page_number, callBack ) { if ( !Global.isSet( set_default_menu ) ) { set_default_menu = true; } var $this = this; var filter = {}; filter.filter_data = {}; filter.filter_sort = {}; filter.filter_columns = this.getFilterColumnsFromDisplayColumns(); filter.filter_items_per_page = 0; // Default to 0 to load user preference defined if ( this.pager_data ) { if ( LocalCacheData.paging_type === 0 ) { if ( page_action === 'next' ) { filter.filter_page = this.pager_data.next_page; } else { filter.filter_page = 1; } } else { switch ( page_action ) { case 'next': filter.filter_page = this.pager_data.next_page; break; case 'last': filter.filter_page = this.pager_data.previous_page; break; case 'start': filter.filter_page = 1; break; case 'end': filter.filter_page = this.pager_data.last_page_number; break; case 'go_to': filter.filter_page = page_number; break; default: filter.filter_page = this.pager_data.current_page; break; } } } else { filter.filter_page = 1; } if ( this.select_layout && this.select_layout.data ) { if ( this.sub_view_mode && this.parent_key ) { this.select_layout.data.filter_data[this.parent_key] = this.parent_value; } //If sub view controller set custom filters, get it if ( Global.isSet( this.getSubViewFilter ) ) { this.select_layout.data.filter_data = this.getSubViewFilter( this.select_layout.data.filter_data ); } //select_layout will not be null, it's set in setSelectLayout function filter.filter_data = Global.convertLayoutFilterToAPIFilter( this.select_layout ); filter.filter_sort = this.select_layout.data.filter_sort; } if ( TTUUID.isUUID( this.refresh_id ) ) { filter.filter_data = {}; filter.filter_data.id = [this.refresh_id]; this.last_select_ids = filter.filter_data.id; } else { this.last_select_ids = this.getGridSelectIdArray(); } this.api['get' + this.api.key_name]( filter, { onResult: function( result ) { var result_data = result.getResult(); var len; if ( !Global.isArray( result_data ) ) { $this.showNoResultCover(); } else { $this.removeNoResultCover(); if ( Global.isSet( $this.__createRowId ) ) { result_data = $this.__createRowId( result_data ); } result_data = Global.formatGridData( result_data, $this.api.key_name ); len = result_data.length; } $this.setAuditInfo(); if ( TTUUID.isUUID( $this.refresh_id ) ) { $this.refresh_id = null; var grid_source_data = $this.grid.grid.getGridParam( 'data' ); len = grid_source_data.length; if ( $.type( grid_source_data ) !== 'array' ) { grid_source_data = []; } var found = false; var new_record = result_data[0]; //Error: Uncaught TypeError: Cannot read property 'id' of undefined in /interface/html5/views/BaseViewController.js?v=7.4.3-20140924-084605 line 4851 if ( new_record ) { for ( var i = 0; i < len; i++ ) { var record = grid_source_data[i]; //Fixed === issue. The id set by jQGrid is string type. // if ( !isNaN( parseInt( record.id ) ) ) { // record.id = parseInt( record.id ); // } if ( record.id == new_record.id ) { $this.grid.grid.setRowData( new_record.id, new_record ); found = true; break; } } if ( !found ) { grid_source_data.push( new_record ); $this.grid.setData( grid_source_data ); // if ( $this.sub_view_mode && Global.isSet( $this.resizeSubGrid ) ) { // len = Global.isSet( len ) ? len : 0; // $this.resizeSubGrid( len + 1 ); // } } } } else { //Set Page data to widget, next show display info when setDefault Menu $this.pager_data = result.getPagerData(); //CLick to show more mode no need this step if ( LocalCacheData.paging_type !== 0 ) { $this.paging_widget.setPagerData( $this.pager_data ); $this.paging_widget_2.setPagerData( $this.pager_data ); } if ( LocalCacheData.paging_type === 0 && page_action === 'next' ) { var current_data = $this.grid.getGridParam( 'data' ); result_data = current_data.concat( result_data ); } // Process result_data if necessary, this always needs override. result_data = $this.processResultData( result_data ); if ( $this.grid ) { if ( LocalCacheData.paging_type === 0 ) { if ( !$this.pager_data || $this.pager_data.is_last_page ) { $this.paging_widget.css( 'display', 'none' ); } else { $this.paging_widget.css( 'display', 'block' ); } } $this.grid.setData( result_data ); $this.setGridColumnsWidth(); if ( $this.sub_view_mode && Global.isSet( $this.baseViewSubTabGridResize ) ) { $this.baseViewSubTabGridResize( 'tab_audit' ); } $this.reSelectLastSelectItems(); } } $this.setGridCellBackGround(); //Set cell background for some views ProgressBar.closeOverlay(); //Add this in initData if ( set_default_menu ) { $this.setDefaultMenu( true ); } if ( LocalCacheData.paging_type === 0 ) { if ( !$this.pager_data || $this.pager_data.is_last_page ) { $this.paging_widget.css( 'display', 'none' ); } else { $this.paging_widget.css( 'display', 'block' ); } } if ( callBack ) { callBack( result ); } // when call this from save and new result, we don't call auto open, because this will call onAddClick twice if ( set_default_menu ) { $this.autoOpenEditViewIfNecessary(); } $this.searchDone(); } } ); } getGridSetup() { var $this = this; return { container_selector: this.sub_view_mode ? '.edit-view-tab-bar' : 'body', sub_grid_mode: this.sub_view_mode, onResizeGrid: true, multiselect: false, onSelectRow: function() { $this.onGridSelectRow(); }, onCellSelect: function() { $this.onGridSelectRow(); }, onSelectAll: function() { $this.onGridSelectAll(); }, ondblClickRow: function( e ) { $this.onGridDblClickRow( e ); }, onRightClickRow: function( rowId ) { var id_array = $this.getGridSelectIdArray(); if ( id_array.indexOf( rowId ) < 0 ) { $this.grid.grid.resetSelection(); $this.grid.grid.setSelection( rowId ); $this.onGridSelectRow(); } }, setGridSize: function() { $this.baseViewSubTabGridResize( 'tab_audit' ); //Works for Edit Employee -> Audit tab } }; } _setGridSizeGridHeight( header_size ) { // if ( !this.sub_view_mode ) { // this.grid.setGridHeight( ($( this.el ).height() - (this.search_panel && this.search_panel.is( ':visible' ) ? this.search_panel.height() : 0) - 68 - header_size) ); // } else if ( !Global.isSet( this.resizeSubGrid ) ) { if ( this.pager_data && this.pager_data.last_page_number > 1 ) { this.grid.setGridHeight( $( this.el ).parent().parent().parent().height() - 101 - header_size ); } else { this.grid.setGridHeight( $( this.el ).parent().parent().parent().height() - 78 - header_size ); } // } } setAuditInfo() { var updated_info = ( this.parent_edit_record['updated_date'] || $.i18n._( 'N/A' ) ) + ' ' + $.i18n._( 'by' ) + ' ' + ( this.parent_edit_record['updated_by'] || $.i18n._( 'N/A' ) ) + ' '; var created_info = ( this.parent_edit_record['created_date'] || $.i18n._( 'N/A' ) ) + ' ' + $.i18n._( 'by' ) + ' ' + ( this.parent_edit_record['created_by'] || $.i18n._( 'N/A' ) ) + ' '; this.noticeDiv.find( '.left > .info' ).text( updated_info ); this.noticeDiv.find( '.right > .info' ).text( created_info ); } autoOpenEditViewIfNecessary() { //Auto open edit view. Should set in IndexController switch ( LocalCacheData.current_doing_context_action ) { case 'view': if ( LocalCacheData.edit_id_for_next_open_view ) { this.onViewClick( LocalCacheData.edit_id_for_next_open_view ); LocalCacheData.edit_id_for_next_open_view = null; } break; } this.autoOpenEditOnlyViewIfNecessary(); } initLogDetailsView( column_start_from ) { var grid = this.edit_view.find( '#grid' ); if ( grid ) { grid.attr( 'id', this.log_detail_script_name + '_grid' ); //Grid's id is ScriptName + _grid } //grid = this.edit_view.find( '#' + this.log_detail_script_name + '_grid' ); var column_info_array = []; var display_columns = [ { label: $.i18n._( 'Field' ), value: 'display_field' }, { label: $.i18n._( 'Before' ), value: 'old_value' }, { label: $.i18n._( 'After' ), value: 'new_value' } ]; //Set Data Grid on List view var len = display_columns.length; var start_from = 0; if ( Global.isSet( column_start_from ) && column_start_from > 0 ) { start_from = column_start_from; } for ( var i = start_from; i < len; i++ ) { var view_column_data = display_columns[i]; var column_info = { name: view_column_data.value, index: view_column_data.value, label: view_column_data.label, width: 100, sortable: false, title: false }; column_info_array.push( column_info ); } var grid_setup = { container_selector: this.sub_view_mode ? '.edit-view-tab-bar' : 'body', sub_grid_mode: this.sub_view_mode, onResizeGrid: true, multiselect: false, }; this.log_detail_grid = new TTGrid( this.log_detail_script_name + '_grid', grid_setup, column_info_array ); } initEditViewData() { super.initEditViewData(); if ( Global.getProductEdition() >= 15 ) { this.edit_view_tab.find( '#tab_audit_details' ).find( '.detail-grid-row' ).css( 'display', 'block' ); this.edit_view.find( '.permission-defined-div' ).css( 'display', 'none' ); } else { this.edit_view_tab.find( '#tab_audit_details' ).find( '.detail-grid-row' ).css( 'display', 'none' ); this.edit_view.find( '.permission-defined-div' ).css( 'display', 'block' ); this.edit_view.find( '.permission-message' ).html( Global.getUpgradeMessage() ); } this.log_detail_grid.setGridColumnsWidth(); } onGridDblClickRow() { this.onViewDetailClick(); } setCurrentEditRecordData() { //Set current edit record data to all widgets for ( var key in this.current_edit_record ) { var widget = this.edit_view_ui_dic[key]; if ( Global.isSet( widget ) ) { switch ( key ) { case 'user_name': widget.setValue( this.current_edit_record['first_name'] + ' ' + this.current_edit_record['last_name'] ); break; default: widget.setValue( this.current_edit_record[key] ); break; } } else { switch ( key ) { case 'details': this.setLogDetailsViewData( this.current_edit_record[key] ); break; default: break; } } } this.collectUIDataToCurrentEditRecord(); this.setEditViewDataDone(); } setLogDetailsViewData( log_detail_data ) { var $this = this; if ( !Global.isArray( log_detail_data ) ) { $this.showDetailNoResultCover(); } else { $this.removeNoResultCover(); } log_detail_data = Global.formatGridData( log_detail_data ); $this.log_detail_grid.setData( log_detail_data ); $this.setLogDetailGridSize(); } setLogDetailGridSize() { if ( !this.log_detail_grid || !$( this.log_detail_grid.grid ).is( ':visible' ) ) { return; } var tab_audit_details = this.edit_view.find( '#tab_audit_details_content_div' ); var first_row = this.edit_view.find( '.first-row' ); this.log_detail_grid.grid.setGridWidth( tab_audit_details.width() ); this.log_detail_grid.grid.setGridHeight( tab_audit_details.height() - first_row.height() ); } showDetailNoResultCover() { this.removeNoResultCover(); this.no_result_box = Global.loadWidgetByName( WidgetNamesDic.NO_RESULT_BOX ); this.no_result_box.NoResultBox( { related_view_controller: this, is_new: false } ); var grid_div = this.edit_view.find( '.grid-div' ); grid_div.append( this.no_result_box ); } showNoResultCover() { super.showNoResultCover( false ); } onEditClick( editId, noRefreshUI ) { this.onViewDetailClick( editId, noRefreshUI ); } onViewDetailClick( editId ) { var $this = this; this.setCurrentEditViewState( 'view_detail' ); $this.openEditView(); var filter = {}; var grid_selected_id_array = this.getGridSelectIdArray(); var grid_selected_length = grid_selected_id_array.length; var selectedId; if ( Global.isSet( editId ) ) { selectedId = editId; } else { if ( this.is_viewing ) { selectedId = this.current_edit_record.id; } else if ( grid_selected_length > 0 ) { selectedId = grid_selected_id_array[0]; } else { return; } } filter.filter_data = {}; filter.filter_data.id = [selectedId]; //If sub view controller set custom filters, get it if ( Global.isSet( this.getSubViewFilter ) ) { filter.filter_data = this.getSubViewFilter( filter.filter_data ); } filter.filter_columns = this.getFilterColumnsForViewDetails(); this.api['get' + this.api.key_name]( filter, { onResult: function( result ) { var result_data = result.getResult(); if ( !result_data ) { result_data = []; } result_data = result_data[0]; if ( $this.sub_view_mode && $this.parent_key ) { result_data[$this.parent_key] = $this.parent_value; } $this.current_edit_record = result_data; $this.initEditView(); } } ); } getFilterColumnsFromDisplayColumns() { var column_filter = {}; column_filter.id = true; column_filter.table_name = true; // Error: Unable to get property 'getGridParam' of undefined or null reference var display_columns = []; if ( this.grid ) { display_columns = this.grid.getGridParam( 'colModel' ); } if ( display_columns ) { var len = display_columns.length; for ( var i = 0; i < len; i++ ) { var column_info = display_columns[i]; column_filter[column_info.name] = true; } } return column_filter; } getFilterColumnsForViewDetails() { var display_columns = this.grid.getGridParam( 'colModel' ); var column_filter = {}; column_filter.id = true; column_filter.table_name = true; column_filter.details = true; var len = display_columns.length; for ( var i = 0; i < len; i++ ) { var column_info = display_columns[i]; column_filter[column_info.name] = true; } return column_filter; } setCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) { switch ( id ) { case 'view_detail': if ( grid_selected_length === 1 ) { ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true ); } else { ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false ); } break; } } onCustomContextClick( id ) { switch ( id ) { case 'view_detail': this.onViewDetailClick(); break; } } setCustomEditMenuIcon( id, context_btn ) { switch ( id ) { case 'view_detail': ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false ); ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false ); break; } } getCustomContextMenuModel() { var context_menu_model = { exclude: ['default'], include: [ { label: $.i18n._( 'View Details' ), id: 'view_detail', group: 'editor', }, 'cancel' ] }; return context_menu_model; } getSubViewFilter( filter ) { if ( Global.isSet( this.table_name_key ) ) { filter['table_name'] = this.tables[this.table_name_key]; } return filter; } searchDone() { $( 'window' ).trigger( 'resize' ); TTPromise.resolve( 'initSubAudit', 'init' ); super.searchDone(); } getAuditLogTabHtml() { return `