export class ExceptionPolicyControlViewController extends BaseViewController { constructor( options = {} ) { _.defaults( options, { el: '#exception_policy_control_view_container', severity_array: null, email_notification_array: null, punch_notification_array: null, original_exception_data: [], editor: null, api_exception_policy: null, date_api: null } ); super( options ); } init( options ) { //this._super('initialize', options ); this.edit_view_tpl = 'ExceptionPolicyControlEditView.html'; this.permission_id = 'exception_policy'; this.viewId = 'ExceptionPolicyControl'; this.script_name = 'ExceptionPolicyControlView'; this.table_name_key = 'exception_policy_control'; this.context_menu_name = $.i18n._( 'Exception Policy' ); this.navigation_label = $.i18n._( 'Exception Policy' ); this.api = TTAPI.APIExceptionPolicyControl; this.api_exception_policy = TTAPI.APIExceptionPolicy; this.date_api = TTAPI.APITTDate; this.render(); this.buildContextMenu(); this.initData(); } getCustomContextMenuModel() { var context_menu_model = { exclude: ['mass_edit'], include: [] }; return context_menu_model; } initOptions() { var $this = this; this.initDropDownOption( 'severity', 'severity_id', this.api_exception_policy ); this.initDropDownOption( 'punch_notification', 'punch_notification_id', this.api_exception_policy ); this.initDropDownOption( 'email_notification', 'email_notification_id', this.api_exception_policy ); } buildEditViewUI() { super.buildEditViewUI(); var $this = this; var tab_model = { 'tab_exception_policy': { 'label': $.i18n._( 'Exception Policy' ), 'html_template': this.getExceptionPolicyTabHtml() }, 'tab_audit': true, }; this.setTabModel( tab_model ); this.navigation.AComboBox( { api_class: TTAPI.APIExceptionPolicyControl, id: this.script_name + '_navigation', allow_multiple_selection: false, layout_name: 'global_hierarchy', navigation_mode: true, show_search_inputs: true } ); this.setNavigation(); //Tab 0 start var tab_exception_policy = this.edit_view_tab.find( '#tab_exception_policy' ); var tab_exception_policy_column1 = tab_exception_policy.find( '.first-column' ); this.edit_view_tabs[0] = []; this.edit_view_tabs[0].push( tab_exception_policy_column1 ); //Name var form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT ); form_item_input.TTextInput( { field: 'name', width: '100%' } ); this.addEditFieldToColumn( $.i18n._( 'Name' ), form_item_input, tab_exception_policy_column1, 'first_last' ); form_item_input.parent().width( '45%' ); // Description form_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA ); form_item_input.TTextArea( { field: 'description', width: '100%' } ); this.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_exception_policy_column1, '', null, null, true ); form_item_input.parent().width( '45%' ); //Inside editor var inside_editor_div = tab_exception_policy.find( '.inside-editor-div' ); var args = { active: $.i18n._( 'Active' ), code: $.i18n._( 'Code' ), name: $.i18n._( 'Name' ), severity: $.i18n._( 'Severity' ), grace: $.i18n._( 'Grace' ), watch_window: $.i18n._( 'Watch Window' ), demerit: $.i18n._( 'Demerit Points' ), punch_notification: $.i18n._( 'Punch Notice' ), email_notification: $.i18n._( 'Notify' ) }; this.editor = Global.loadWidgetByName( FormItemType.INSIDE_EDITOR ); this.editor.InsideEditor( { title: '', addRow: this.insideEditorAddRow, getValue: this.insideEditorGetValue, setValue: this.insideEditorSetValue, updateAllRows: this.insideEditorUpdateAllRows, parent_controller: this, render: getRender(), render_args: args, render_inline_html: true, row_render: getRowRender(), } ); function getRender() { return `
<%= active %> <%= code %> <%= name %> <%= severity %> <%= grace %> <%= watch_window %> <%= demerit %> <%= punch_notification %> <%= email_notification %>
`; } function getRowRender() { return ` `; } inside_editor_div.append( this.editor ); } _continueDoCopyAsNew() { this.setCurrentEditViewState( 'new' ); LocalCacheData.current_doing_context_action = 'copy_as_new'; if ( Global.isSet( this.edit_view ) ) { for ( var i = 0; i < this.editor.rows_widgets_array.length; i++ ) { this.editor.rows_widgets_array[i].current_edit_item.id = ''; } } super._continueDoCopyAsNew(); } onCopyAsNewResult( result ) { var $this = this; var result_data = result.getResult(); if ( !result_data ) { TAlertManager.showAlert( $.i18n._( 'Record does not exist' ) ); $this.onCancelClick(); return; } $this.openEditView(); // Put it here is to avoid if the selected one is not existed in data or have deleted by other pragram. in this case, the edit view should not be opend. result_data = result_data[0]; this.copied_record_id = result_data.id; result_data.id = ''; if ( $this.sub_view_mode && $this.parent_key ) { result_data[$this.parent_key] = $this.parent_value; } $this.current_edit_record = result_data; $this.initEditView(); } setEditViewDataDone() { super.setEditViewDataDone(); this.initInsideEditorData(); } initInsideEditorData() { var $this = this; var args = {}; args.filter_data = {}; var exception_control_id = this.current_edit_record.id ? this.current_edit_record.id : this.copied_record_id; this.copied_record_id = ''; if ( !exception_control_id ) { this.api_exception_policy.getExceptionPolicyDefaultData( args, true, { onResult: function( res ) { if ( !$this.edit_view ) { return; } var data = res.getResult(); var array_data = []; for ( var key in data ) { if ( !data.hasOwnProperty( key ) ) { continue; } data[key].id = ''; array_data.push( data[key] ); } array_data = array_data.sort( function( a, b ) { return Global.compare( a, b, 'type_id' ); } ); $this.original_exception_data = _.map(array_data, _.clone); $this.editor.setValue( array_data ); } } ); } else { args.filter_data.exception_policy_control_id = exception_control_id; this.api_exception_policy.getExceptionPolicyDefaultData( args, true, { onResult: function( res ) { if ( !$this.edit_view ) { return; } var data = res.getResult(); var array_data = []; for ( var key in data ) { if ( !data.hasOwnProperty( key ) ) { continue; } data[key].id = ''; array_data.push( data[key] ); } array_data = array_data.sort( function( a, b ) { return Global.compare( a, b, 'type_id' ); } ); $this.original_exception_data = _.map(array_data, _.clone); $this.editor.setValue( array_data ); var ep_filter = {}; ep_filter.filter_data = { exception_policy_control_id: exception_control_id }; $this.api_exception_policy.getExceptionPolicy( ep_filter, true, { onResult: function( ep_res ) { if ( !$this.edit_view ) { return; } var data = ep_res.getResult(); var array_data = []; for ( var key in data ) { if ( !data.hasOwnProperty( key ) ) { continue; } array_data.push( data[key] ); } array_data = array_data.sort( function( a, b ) { return Global.compare( a, b, 'type_id' ); } ); $this.original_exception_data = _.map(array_data, _.clone); $this.editor.setValue( array_data ); } } ); } } ); } } insideEditorUpdateAllRows( val ) { var len = this.rows_widgets_array.length; for ( var i = 0; i < len; i++ ) { var c_row = this.rows_widgets_array[i]; var c_row_data = c_row.current_edit_item; var len1 = val.length; for ( var j = 0; j < len1; j++ ) { var new_row = val[j]; if ( new_row.type_id === c_row_data.type_id ) { c_row.current_edit_item = new_row; if ( !this.parent_controller.current_edit_record.id ) { c_row.current_edit_item.id = ''; } c_row.active.setValue( new_row.active ); c_row.severity_id.setValue( new_row.severity_id ); if ( new_row.is_enabled_grace ) { c_row.grace.setValue( new_row.grace ); } if ( new_row.is_enabled_watch_window ) { c_row.watch_window.setValue( new_row.watch_window ); } c_row.demerit.setValue( new_row.demerit ); if ( new_row.is_enabled_punch_notice ) { c_row.punch_notification_id.setValue( new_row.punch_notification_id ); } c_row.email_notification_id.setValue( new_row.email_notification_id ); val.splice( j, 1 ); break; } } } } insideEditorSetValue( val ) { var len = val.length; if ( len === 0 ) { return; } if ( !val[0].id ) { this.removeAllRows(); for ( var i = 0; i < val.length; i++ ) { if ( Global.isSet( val[i] ) ) { var row = val[i]; this.addRow( row ); } } } else { this.updateAllRows( val ); } } insideEditorAddRow( data, index ) { if ( !data ) { data = {}; } var row = this.getRowRender(); //Get Row render var render = this.getRender(); //get render, should be a table var widgets = {}; //Save each row's widgets //Build row widgets //Active var form_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX ); form_item_input.TCheckbox( { field: 'active' } ); form_item_input.setValue( data.active ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 0 ).append( form_item_input ); form_item_input.attr( 'exception_policy_id', ( data.id && this.parent_controller.current_edit_record.id ) ? data.id : '' ); this.setWidgetEnableBaseOnParentController( form_item_input ); //Code form_item_input = Global.loadWidgetByName( FormItemType.TEXT ); form_item_input.TText( { field: 'type_id' } ); form_item_input.setValue( data.type_id ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 1 ).append( form_item_input ); //Name form_item_input = Global.loadWidgetByName( FormItemType.TEXT ); form_item_input.TText( { field: 'name' } ); form_item_input.setValue( data.name ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 2 ).append( form_item_input ); //Severity form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX ); form_item_input.TComboBox( { field: 'severity_id', set_empty: false } ); this.setWidgetEnableBaseOnParentController( form_item_input ); form_item_input.setSourceData( this.parent_controller.severity_array ); form_item_input.setValue( data.severity_id ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 3 ).append( form_item_input ); if ( data.is_enabled_grace ) { //Grace form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT ); form_item_input.TTextInput( { field: 'grace', width: 90, need_parser_sec: true } ); form_item_input.setValue( data.grace ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 4 ).append( form_item_input ); this.setWidgetEnableBaseOnParentController( form_item_input ); } if ( data.is_enabled_watch_window ) { //Watch Window form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT ); form_item_input.TTextInput( { field: 'watch_window', width: 90, need_parser_sec: true } ); form_item_input.setValue( data.watch_window ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 5 ).append( form_item_input ); this.setWidgetEnableBaseOnParentController( form_item_input ); } //Demerits form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT ); form_item_input.TTextInput( { field: 'demerit', width: 50, need_parser_sec: false } ); form_item_input.setValue( data.demerit ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 6 ).append( form_item_input ); this.setWidgetEnableBaseOnParentController( form_item_input ); if ( data.is_enabled_punch_notice ) { //Punch Notification form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX ); form_item_input.TComboBox( { field: 'punch_notification_id', set_empty: false } ); form_item_input.setSourceData( this.parent_controller.punch_notification_array ); form_item_input.setValue( data.punch_notification_id ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 7 ).append( form_item_input ); this.setWidgetEnableBaseOnParentController( form_item_input ); } //Email Notification form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX ); form_item_input.TComboBox( { field: 'email_notification_id', set_empty: false } ); form_item_input.setSourceData( this.parent_controller.email_notification_array ); form_item_input.setValue( data.email_notification_id ); widgets[form_item_input.getField()] = form_item_input; row.children().eq( 8 ).append( form_item_input ); this.setWidgetEnableBaseOnParentController( form_item_input ); //Save current set item widgets.current_edit_item = data; if ( typeof index != 'undefined' ) { row.insertAfter( $( render ).find( 'tr' ).eq( index ) ); this.rows_widgets_array.splice( ( index ), 0, widgets ); } else { $( render ).append( row ); this.rows_widgets_array.push( widgets ); } if ( this.parent_controller.is_viewing ) { row.find( '.control-icon' ).hide(); } this.removeLastRowLine(); } insideEditorGetValue( current_edit_item_id ) { var len = this.rows_widgets_array.length; var result = []; for ( var i = 0; i < len; i++ ) { var row = this.rows_widgets_array[i]; var data = row.current_edit_item; data.exception_policy_control_id = current_edit_item_id; data.active = row.active.getValue(); data.severity_id = row.severity_id.getValue(); if ( data.is_enabled_grace ) { data.grace = row.grace.getValue(); } if ( data.is_enabled_watch_window ) { data.watch_window = row.watch_window.getValue(); } data.demerit = row.demerit.getValue(); if ( data.is_enabled_punch_notice ) { data.punch_notification_id = row.punch_notification_id.getValue(); } data.email_notification_id = row.email_notification_id.getValue(); result.push( data ); } return result; } onSaveResult( result ) { var $this = this; if ( result.isValid() ) { var result_data = result.getResult(); if ( result_data === true ) { $this.refresh_id = $this.current_edit_record.id; } else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) { $this.refresh_id = result_data; } $this.saveInsideEditorData( function() { $this.search(); $this.onSaveDone( result ); $this.removeEditView(); } ); } else { $this.setErrorMenu(); $this.setErrorTips( result ); } } onSaveAndCopyResult( result ) { var $this = this; if ( result.isValid() ) { var result_data = result.getResult(); if ( result_data === true ) { $this.refresh_id = $this.current_edit_record.id; } else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) { $this.refresh_id = result_data; } $this.saveInsideEditorData( function() { $this.search( false ); $this.onCopyAsNewClick(); } ); } else { $this.setErrorTips( result ); $this.setErrorMenu(); } } saveInsideEditorData( callBack ) { var data = this.editor.getValue( this.refresh_id ); let changed_data = this.getChangedRecords( data, this.original_exception_data, [] ); if ( Array.isArray( changed_data ) && changed_data.length > 0 ) { this.api_exception_policy.setExceptionPolicy( changed_data, { onResult: function( res ) { if ( Global.isSet( callBack ) ) { callBack(); } } } ); } else { if ( Global.isSet( callBack ) ) { callBack(); } } } buildSearchFields() { super.buildSearchFields(); this.search_fields = [ new SearchField( { label: $.i18n._( 'Name' ), in_column: 1, field: 'name', multiple: true, basic_search: true, adv_search: false, form_item_type: FormItemType.TEXT_INPUT } ), new SearchField( { label: $.i18n._( 'Created By' ), in_column: 2, field: 'created_by', layout_name: 'global_user', api_class: TTAPI.APIUser, multiple: true, basic_search: true, adv_search: false, form_item_type: FormItemType.AWESOME_BOX } ), new SearchField( { label: $.i18n._( 'Updated By' ), in_column: 2, field: 'updated_by', layout_name: 'global_user', api_class: TTAPI.APIUser, multiple: true, basic_search: true, adv_search: false, form_item_type: FormItemType.AWESOME_BOX } ) ]; } getExceptionPolicyTabHtml() { return `
`; } }