TimeTrex Community Edition v16.2.0
This commit is contained in:
@@ -0,0 +1,499 @@
|
||||
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
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user