TimeTrex/interface/html5/views/attendance/accrual_balance/AccrualBalanceViewController.js

499 lines
13 KiB
JavaScript
Raw Permalink Normal View History

2022-12-13 07:10:06 +01:00
export class AccrualBalanceViewController extends BaseViewController {
constructor( options = {} ) {
_.defaults( options, {
el: '#accrual_balance_view_container',
user_group_api: null,
user_group_array: null,
sub_accrual_view_controller: null,
log_object_ids: null
} );
super( options );
}
init( options ) {
//this._super('initialize', options );
this.edit_view_tpl = 'AccrualBalanceEditView.html';
this.permission_id = 'accrual';
this.viewId = 'AccrualBalance';
this.script_name = 'AccrualBalanceView';
this.table_name_key = 'accrual';
this.context_menu_name = $.i18n._( 'Accrual Balances' );
this.navigation_label = $.i18n._( 'Accrual Balance' );
this.api = TTAPI.APIAccrualBalance;
this.accrual_api = TTAPI.APIAccrual;
this.user_api = TTAPI.APIUser;
this.user_group_api = TTAPI.APIUserGroup;
this.initPermission();
this.render();
this.buildContextMenu();
this.initData();
}
initPermission() {
super.initPermission();
if ( PermissionManager.validate( this.permission_id, 'view' ) || PermissionManager.validate( this.permission_id, 'view_child' ) ) {
this.show_search_tab = true;
} else {
this.show_search_tab = false;
}
}
initOptions() {
var $this = this;
this.initDropDownOption( 'status', 'user_status_id', this.user_api, null, 'user_status_array' );
this.user_group_api.getUserGroup( '', false, false, {
onResult: function( res ) {
res = res.getResult();
res = Global.buildTreeRecord( res );
if ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['group_id'] ) {
$this.basic_search_field_ui_dic['group_id'].setSourceData( res );
}
$this.user_group_array = res;
}
} );
}
buildEditViewUI() {
super.buildEditViewUI();
var $this = this;
var tab_model = {
'tab_accrual': {
'label': $.i18n._( 'Accrual' ),
'init_callback': 'initSubAccrualView',
'display_on_mass_edit': false
},
'tab_audit': true,
};
this.setTabModel( tab_model );
this.navigation.AComboBox( {
api_class: TTAPI.APIAccrualBalance,
id: this.script_name + '_navigation',
allow_multiple_selection: false,
layout_name: 'global_accrual_balance',
navigation_mode: true,
addition_source_function: function( target, data ) {
return $this.__createRowId( data );
},
show_search_inputs: true
} );
this.setNavigation();
}
getCustomContextMenuModel() {
var context_menu_model = {
exclude: ['default'],
include: [
'add',
'view',
'export_excel'
]
};
return context_menu_model;
}
buildSearchFields() {
super.buildSearchFields();
var default_args = {};
default_args.permission_section = 'accrual';
this.search_fields = [
new SearchField( {
label: $.i18n._( 'Employee' ),
in_column: 1,
default_args: default_args,
field: 'user_id',
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._( 'Employee Status' ),
in_column: 1,
field: 'user_status_id',
multiple: true,
basic_search: true,
adv_search: false,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Accrual Account' ),
in_column: 1,
field: 'accrual_policy_account_id',
layout_name: 'global_accrual_policy_account',
api_class: TTAPI.APIAccrualPolicyAccount,
multiple: true,
basic_search: true,
adv_search: false,
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Default Branch' ),
in_column: 2,
field: 'default_branch_id',
layout_name: 'global_branch',
api_class: TTAPI.APIBranch,
multiple: true,
basic_search: true,
adv_search: false,
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Default Department' ),
in_column: 2,
field: 'default_department_id',
layout_name: 'global_department',
api_class: TTAPI.APIDepartment,
multiple: true,
basic_search: true,
adv_search: false,
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Group' ),
in_column: 2,
multiple: true,
field: 'group_id',
layout_name: 'global_tree_column',
tree_mode: true,
basic_search: true,
adv_search: false,
form_item_type: FormItemType.AWESOME_BOX
} )
];
}
getFilterColumnsFromDisplayColumns() {
var column_filter = {};
column_filter.user_id = true;
column_filter.accrual_policy_account_id = true;
return this._getFilterColumnsFromDisplayColumns( column_filter, true );
}
__createRowId( data ) {
if ( Array.isArray( data ) ) {
for ( var i = 0; i < data.length; i++ ) {
data[i].id = data[i]['user_id'] + '_' + data[i]['accrual_policy_account_id'];
}
} else if ( data && data['user_id'] && data['accrual_policy_account_id'] ) {
data.id = data['user_id'] + '_' + data['accrual_policy_account_id'];
} else {
Debug.Text( 'ERROR: Data format is invalid.', 'AccrualBalanceViewController.js', 'AccrualBalanceViewController', '__createRowId', 1 );
}
return data;
}
// saveLogIds( data ) {
// this.parent_view_controller.log_object_ids = [];
// for ( var i = 0; i < data.length; i++ ) {
// this.parent_view_controller.log_object_ids.push( data[i]['id'] );
// }
//
// return data;
// },
setDefaultMenuAddIcon( context_btn, grid_selected_length, pId ) {
this.setDefaultMenuEditIcon( context_btn, grid_selected_length, pId );
}
setEditMenuAddIcon( context_btn, pId ) {
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
}
onAddClick() {
var $this = this;
this.setCurrentEditViewState( 'view' );
this.add_accrual = true;
$this.openEditView();
var selected_item = null;
var grid_selected_id_array = this.getGridSelectIdArray();
var grid_selected_length = grid_selected_id_array.length;
if ( grid_selected_length > 0 ) {
selected_item = this.getRecordFromGridById( grid_selected_id_array[0] );
} else {
var grid_source_data = $this.grid.getGridParam( 'data' );
selected_item = grid_source_data[0];
}
var filter = {};
filter.filter_data = {};
if ( selected_item ) {
filter.filter_data.user_id = selected_item.user_id;
filter.filter_data.accrual_policy_account_id = selected_item.accrual_policy_account_id;
}
this.api['get' + this.api.key_name]( filter, {
onResult: function( result ) {
var result_data = result.getResult();
if ( !result_data ) {
result_data = [];
}
result_data = $this.__createRowId( result_data );
result_data = result_data[0];
if ( !result_data ) {
result_data = {};
}
$this.current_edit_record = result_data;
if ( $this.current_edit_record && $this.current_edit_record.user_id && $this.current_edit_record.accrual_policy_account_id ) {
filter.filter_data.user_id = $this.current_edit_record.user_id;
filter.filter_data.accrual_policy_account_id = $this.current_edit_record.accrual_policy_account_id;
}
// get the accrual data with the same filter data in order to be used for the audit tab.
$this.accrual_api['get' + $this.accrual_api.key_name]( filter, {
onResult: function( res ) {
var result = res.getResult();
$this.log_object_ids = [];
for ( var i = 0; i < result.length; i++ ) {
$this.log_object_ids.push( result[i]['id'] );
}
$this.initEditView();
}
} );
}
} );
}
parseToUserId( id ) {
if ( !id ) {
return false;
}
id = id.toString();
if ( id.indexOf( '_' ) > 0 ) {
return id.split( '_' )[0];
}
return id;
}
parseToAccrualPolicyAccountId( id ) {
if ( !id ) {
return false;
}
id = id.toString();
if ( id.indexOf( '_' ) > 0 ) {
return id.split( '_' )[1];
}
return id;
}
getAPIFilters() {
var composite_id = this.getCurrentSelectedRecord();
var filter = {};
filter.filter_data = {};
filter.filter_data.user_id = this.parseToUserId( composite_id );
filter.filter_data.accrual_policy_account_id = this.parseToAccrualPolicyAccountId( composite_id );
return filter;
}
doViewClickResult( result_data ) {
var $this = this;
var filter = {};
filter.filter_data = {};
result_data = $this.__createRowId( result_data );
$this.current_edit_record = result_data;
if ( $this.current_edit_record && $this.current_edit_record.user_id && $this.current_edit_record.accrual_policy_account_id ) {
filter.filter_data.user_id = $this.current_edit_record.user_id;
filter.filter_data.accrual_policy_account_id = $this.current_edit_record.accrual_policy_account_id;
}
// get the accrual data with the same filter data in order to be used for the audit tab.
return $this.accrual_api['get' + $this.accrual_api.key_name]( filter, {
onResult: function( res ) {
var result = res.getResult();
$this.log_object_ids = [];
for ( var i = 0; i < result.length; i++ ) {
$this.log_object_ids.push( result[i]['id'] );
}
return $this.initEditView();
}
} );
}
setEditViewData() {
this.is_changed = false;
this.initEditViewData();
this.switchToProperTab();
this.initTabData();
}
initEditViewData() {
var $this = this;
if ( !this.edit_only_mode && this.navigation ) {
var grid_current_page_items = this.grid.getGridParam( 'data' );
var navigation_div = this.edit_view.find( '.navigation-div' );
navigation_div.css( 'display', 'block' );
//Set Navigation Awesomebox
//init navigation only when open edit view
if ( !this.navigation.getSourceData() ) {
this.navigation.setSourceData( grid_current_page_items );
this.navigation.setRowPerPage( LocalCacheData.getLoginUserPreference().items_per_page );
this.navigation.setPagerData( this.pager_data );
// this.navigation.setDisPlayColumns( this.buildDisplayColumnsByColumnModel( this.grid.getGridParam( 'colModel' ) ) );
var default_args = {};
default_args.filter_data = Global.convertLayoutFilterToAPIFilter( this.select_layout );
default_args.filter_sort = this.select_layout.data.filter_sort;
this.navigation.setDefaultArgs( default_args );
}
this.navigation.setValue( this.current_edit_record );
}
this.setNavigationArrowsEnabled();
// Create this function alone because of the column value of view is different from each other, some columns need to be handle specially. and easily to rewrite this function in sub-class.
this.setCurrentEditRecordData();
//Init *Please save this record before modifying any related data* box
this.edit_view.find( '.save-and-continue-div' ).SaveAndContinueBox( { related_view_controller: this } );
this.edit_view.find( '.save-and-continue-div' ).css( 'display', 'none' );
}
initSubAccrualView() {
var $this = this;
if ( !this.current_edit_record.id && !this.add_accrual ) {
TTPromise.resolve( 'BaseViewController', 'onTabShow' ); //Since search() isn't called in this case, and we just display the "Please Save This Record ..." message, resolve the promise.
return;
}
if ( this.sub_accrual_view_controller ) {
this.sub_accrual_view_controller.buildContextMenu( true );
this.sub_accrual_view_controller.setDefaultMenu();
$this.sub_accrual_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_accrual_view_controller.initData();
return;
}
Global.loadScript( 'views/attendance/accrual/AccrualViewController.js', function() {
var tab_accrual = $this.edit_view_tab.find( '#tab_accrual' );
var firstColumn = tab_accrual.find( '.first-column-sub-view' );
TTPromise.add( 'initSubAccrualView', 'init' );
TTPromise.wait( 'initSubAccrualView', 'init', function() {
firstColumn.css( 'opacity', '1' );
} );
firstColumn.css( 'opacity', '0' ); //Hide the grid while its loading/sizing.
Global.trackView( 'Sub' + 'Accrual' + 'View' );
AccrualViewController.loadSubView( firstColumn, beforeLoadView, afterLoadView );
} );
function beforeLoadView() {
}
function afterLoadView( subViewController ) {
$this.sub_accrual_view_controller = subViewController;
$this.sub_accrual_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_accrual_view_controller.parent_view_controller = $this;
$this.sub_accrual_view_controller.is_trigger_add = $this.add_accrual ? true : false;
$this.sub_accrual_view_controller.initData();
$this.add_accrual = false;
}
}
setSubLogViewFilter() {
if ( !this.sub_log_view_controller ) {
return false;
}
this.sub_log_view_controller.parent_key = 'object_id';
this.sub_log_view_controller.parent_value = this.log_object_ids;
this.sub_log_view_controller.table_name_key = this.table_name_key;
return true;
}
removeEditView() {
super.removeEditView();
this.sub_accrual_view_controller = null;
}
setNavigation() {
var $this = this;
this.navigation.setPossibleDisplayColumns( this.buildDisplayColumnsByColumnModel( this.grid.getGridParam( 'colModel' ) ),
this.buildDisplayColumns( this.default_display_columns ) );
this.navigation.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
var key = target.getField();
var next_select_item_id = target.getValue();
if ( !next_select_item_id ) {
return;
}
if ( next_select_item_id !== $this.current_edit_record.id ) {
ProgressBar.showOverlay();
$this.onViewClick( next_select_item_id ); //Dont refresh UI
}
} );
}
}