525 lines
14 KiB
JavaScript
525 lines
14 KiB
JavaScript
|
export class ExceptionViewController extends BaseViewController {
|
||
|
constructor( options = {} ) {
|
||
|
_.defaults( options, {
|
||
|
el: '#exception_view_container',
|
||
|
status_array: null,
|
||
|
|
||
|
|
||
|
} );
|
||
|
|
||
|
super( options );
|
||
|
}
|
||
|
|
||
|
init( options ) {
|
||
|
//this._super('initialize', options );
|
||
|
this.edit_view_tpl = 'ExceptionEditView.html';
|
||
|
this.permission_id = 'punch';
|
||
|
this.viewId = 'Exception';
|
||
|
this.script_name = 'ExceptionView';
|
||
|
this.context_menu_name = $.i18n._( 'Exceptions' );
|
||
|
this.navigation_label = $.i18n._( 'Exception' );
|
||
|
this.api = TTAPI.APIException;
|
||
|
|
||
|
this.initPermission();
|
||
|
this.render();
|
||
|
this.buildContextMenu();
|
||
|
|
||
|
this.initData();
|
||
|
}
|
||
|
|
||
|
onCustomContextClick( id ) {
|
||
|
switch ( id ) {
|
||
|
case 'edit_employee':
|
||
|
case 'edit_pay_period':
|
||
|
case 'edit_pay_period_schedule':
|
||
|
case 'schedule':
|
||
|
case 'timesheet':
|
||
|
case 'send_message':
|
||
|
this.onNavigationClick( id );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
setCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {
|
||
|
switch ( id ) {
|
||
|
case 'timesheet':
|
||
|
this.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'punch' );
|
||
|
break;
|
||
|
case 'schedule':
|
||
|
this.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'schedule' );
|
||
|
break;
|
||
|
case 'edit_employee':
|
||
|
this.setDefaultMenuEditEmployeeIcon( context_btn, grid_selected_length );
|
||
|
break;
|
||
|
case 'edit_pay_period_schedule':
|
||
|
this.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'pay_period_schedule' );
|
||
|
break;
|
||
|
case 'edit_pay_period':
|
||
|
this.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'pay_period_schedule' );
|
||
|
break;
|
||
|
case 'send_message':
|
||
|
this.setDefaultMenuSendMessageIcon( context_btn, grid_selected_length );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
autoOpenEditViewIfNecessary() {
|
||
|
//Auto open edit view. Should set in IndexController
|
||
|
//Don't have any edit view
|
||
|
//Error: Uncaught TypeError: undefined is not a function in /interface/html5/views/BaseViewController.js?v=7.4.3-20140924-084605 line 2751
|
||
|
this.autoOpenEditOnlyViewIfNecessary();
|
||
|
}
|
||
|
|
||
|
setDefaultMenuEditEmployeeIcon( context_btn, grid_selected_length ) {
|
||
|
if ( !this.editChildPermissionValidate( 'user' ) ) {
|
||
|
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
|
||
|
}
|
||
|
|
||
|
if ( grid_selected_length === 1 ) {
|
||
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
|
||
|
} else {
|
||
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
setDefaultMenuSendMessageIcon( context_btn, grid_selected_length, pId ) {
|
||
|
if ( grid_selected_length > 0 ) {
|
||
|
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
|
||
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
|
||
|
} else {
|
||
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
onNavigationClick( iconName ) {
|
||
|
var select_item = this.getSelectedItem();
|
||
|
//There are cases where select_item might be null. The export button for example.
|
||
|
if ( select_item != null ) {
|
||
|
var user_id = select_item.user_id;
|
||
|
}
|
||
|
switch ( iconName ) {
|
||
|
case 'edit_employee':
|
||
|
IndexViewController.openEditView( this, 'Employee', user_id );
|
||
|
break;
|
||
|
case 'edit_pay_period':
|
||
|
var pay_period_id = select_item.pay_period_id;
|
||
|
if ( pay_period_id ) {
|
||
|
IndexViewController.openEditView( this, 'PayPeriods', pay_period_id );
|
||
|
}
|
||
|
break;
|
||
|
case 'edit_pay_period_schedule':
|
||
|
var pay_period_schedule_id = select_item.pay_period_schedule_id;
|
||
|
if ( pay_period_schedule_id ) {
|
||
|
IndexViewController.openEditView( this, 'PayPeriodSchedule', pay_period_id );
|
||
|
}
|
||
|
break;
|
||
|
case 'schedule':
|
||
|
var filter = { filter_data: {} };
|
||
|
var include_users = { value: [user_id] };
|
||
|
filter.filter_data.include_user_ids = include_users;
|
||
|
filter.select_date = select_item.date_stamp;
|
||
|
Global.addViewTab( this.viewId, $.i18n._( 'Exception' ), window.location.href );
|
||
|
IndexViewController.goToView( 'Schedule', filter );
|
||
|
break;
|
||
|
case 'timesheet':
|
||
|
filter = { filter_data: {} };
|
||
|
filter.user_id = user_id;
|
||
|
filter.base_date = select_item.date_stamp;
|
||
|
Global.addViewTab( this.viewId, $.i18n._( 'Exception' ), window.location.href );
|
||
|
IndexViewController.goToView( 'TimeSheet', filter );
|
||
|
break;
|
||
|
case 'send_message':
|
||
|
LocalCacheData.default_filter_for_next_open_view = { to_user_id: _.uniq( this.getSelectedItems().map( exception => exception.user_id ) ) };
|
||
|
IndexViewController.openEditView( this, 'MessageControl', null, 'onAddClick' );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initOptions() {
|
||
|
var $this = this;
|
||
|
|
||
|
var options = [
|
||
|
{ option_name: 'status', field_name: 'user_status_id', api: TTAPI.APIUser },
|
||
|
{ option_name: 'severity', api: TTAPI.APIExceptionPolicy },
|
||
|
{ option_name: 'type', field_name: 'exception_policy_type_id', api: TTAPI.APIExceptionPolicy },
|
||
|
];
|
||
|
|
||
|
this.initDropDownOptions( options );
|
||
|
|
||
|
var user_group_api = TTAPI.APIUserGroup;
|
||
|
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.adv_search_field_ui_dic['group_id'].setSourceData( res );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
getCustomContextMenuModel() {
|
||
|
var context_menu_model = {
|
||
|
exclude: ['default'],
|
||
|
include: [
|
||
|
{
|
||
|
label: $.i18n._( 'Send Message' ),
|
||
|
id: 'send_message',
|
||
|
menu_align: 'right',
|
||
|
vue_icon: 'tticon tticon-send_black_24dp',
|
||
|
},
|
||
|
{
|
||
|
label: $.i18n._( 'Jump To' ),
|
||
|
id: 'jump_to_header',
|
||
|
menu_align: 'right',
|
||
|
action_group: 'jump_to',
|
||
|
action_group_header: true,
|
||
|
permission_result: false // to hide it in legacy context menu and avoid errors in legacy parsers.
|
||
|
},
|
||
|
{
|
||
|
label: $.i18n._( 'TimeSheet' ),
|
||
|
id: 'timesheet',
|
||
|
menu_align: 'right',
|
||
|
action_group: 'jump_to',
|
||
|
group: 'navigation',
|
||
|
},
|
||
|
{
|
||
|
label: $.i18n._( 'Schedules' ),
|
||
|
id: 'schedule',
|
||
|
menu_align: 'right',
|
||
|
action_group: 'jump_to',
|
||
|
group: 'navigation',
|
||
|
},
|
||
|
{
|
||
|
label: $.i18n._( 'Edit Employee' ),
|
||
|
id: 'edit_employee',
|
||
|
menu_align: 'right',
|
||
|
action_group: 'jump_to',
|
||
|
group: 'navigation',
|
||
|
},
|
||
|
{
|
||
|
label: $.i18n._( 'Edit Pay Period' ),
|
||
|
id: 'edit_pay_period',
|
||
|
menu_align: 'right',
|
||
|
action_group: 'jump_to',
|
||
|
group: 'navigation',
|
||
|
},
|
||
|
{
|
||
|
label: $.i18n._( 'Edit PP Schedule' ),
|
||
|
id: 'edit_pay_period_schedule',
|
||
|
menu_align: 'right',
|
||
|
action_group: 'jump_to',
|
||
|
group: 'navigation',
|
||
|
},
|
||
|
{
|
||
|
label: $.i18n._( 'Export' ),
|
||
|
id: 'export_excel',
|
||
|
group: 'other',
|
||
|
vue_icon: 'tticon tticon-file_upload_black_24dp',
|
||
|
sort_order: 9000
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
|
||
|
return context_menu_model;
|
||
|
}
|
||
|
|
||
|
getSearchPanelFilter( getFromTabIndex, save_temp_filter ) {
|
||
|
|
||
|
if ( Global.isSet( getFromTabIndex ) ) {
|
||
|
var search_tab_select_index = getFromTabIndex;
|
||
|
} else {
|
||
|
search_tab_select_index = this.search_panel.getSelectTabIndex();
|
||
|
}
|
||
|
|
||
|
// var basic_fields_len = this.search_fields.length;
|
||
|
var target_ui_dic = null;
|
||
|
|
||
|
if ( search_tab_select_index === 0 ) {
|
||
|
this.filter_data = [];
|
||
|
target_ui_dic = this.basic_search_field_ui_dic;
|
||
|
} else if ( search_tab_select_index === 1 ) {
|
||
|
this.filter_data = [];
|
||
|
target_ui_dic = this.adv_search_field_ui_dic;
|
||
|
} else {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var $this = this;
|
||
|
$.each( target_ui_dic, function( key, content ) {
|
||
|
|
||
|
$this.filter_data[key] = { field: key, id: '', value: target_ui_dic[key].getValue( true ) };
|
||
|
|
||
|
if ( key === 'show_pre_mature' && $this.filter_data[key].value !== true ) {
|
||
|
|
||
|
delete $this.filter_data[key];
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if ( $this.temp_basic_filter_data ) {
|
||
|
$this.temp_basic_filter_data[key] = $this.filter_data[key];
|
||
|
}
|
||
|
|
||
|
if ( $this.temp_adv_filter_data ) {
|
||
|
$this.temp_adv_filter_data[key] = $this.filter_data[key];
|
||
|
}
|
||
|
} );
|
||
|
|
||
|
if ( save_temp_filter ) {
|
||
|
if ( search_tab_select_index === 0 ) {
|
||
|
$this.temp_basic_filter_data = Global.clone( $this.filter_data );
|
||
|
} else if ( search_tab_select_index === 1 ) {
|
||
|
$this.temp_adv_filter_data = Global.clone( $this.filter_data );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
onGridDblClickRow() {
|
||
|
var context_menu_array = ContextMenuManager.getMenuModelByMenuId( this.determineContextMenuMountAttributes().id );
|
||
|
var len = context_menu_array.length;
|
||
|
|
||
|
var need_break = false;
|
||
|
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
|
||
|
if ( need_break ) {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
let context_btn = context_menu_array[i];
|
||
|
let id = context_menu_array[i].id;
|
||
|
|
||
|
switch ( id ) {
|
||
|
case 'timesheet':
|
||
|
if ( context_btn.visible && !context_btn.disabled ) {
|
||
|
this.onNavigationClick( 'timesheet' );
|
||
|
return;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
|
||
|
if ( need_break ) {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
let context_btn = context_menu_array[i];
|
||
|
let id = context_menu_array[i].id;
|
||
|
|
||
|
switch ( id ) {
|
||
|
case 'schedule':
|
||
|
need_break = true;
|
||
|
if ( context_btn.visible && !context_btn.disabled ) {
|
||
|
this.onNavigationClick( 'schedule' );
|
||
|
return;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
buildSearchFields() {
|
||
|
|
||
|
super.buildSearchFields();
|
||
|
this.search_fields = [
|
||
|
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Employee Status' ),
|
||
|
in_column: 1,
|
||
|
field: 'user_status_id',
|
||
|
multiple: true,
|
||
|
basic_search: true,
|
||
|
adv_search: true,
|
||
|
layout_name: 'global_option_column',
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Pay Period' ),
|
||
|
in_column: 1,
|
||
|
field: 'pay_period_id',
|
||
|
layout_name: 'global_Pay_period',
|
||
|
api_class: TTAPI.APIPayPeriod,
|
||
|
multiple: true,
|
||
|
basic_search: true,
|
||
|
adv_search: true,
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Employee' ),
|
||
|
in_column: 1,
|
||
|
field: 'user_id',
|
||
|
layout_name: 'global_user',
|
||
|
api_class: TTAPI.APIUser,
|
||
|
multiple: true,
|
||
|
basic_search: true,
|
||
|
adv_search: true,
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Severity' ),
|
||
|
in_column: 1,
|
||
|
field: 'severity_id',
|
||
|
multiple: true,
|
||
|
adv_search: true,
|
||
|
basic_search: false,
|
||
|
layout_name: 'global_option_column',
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Exception' ),
|
||
|
in_column: 1,
|
||
|
field: 'exception_policy_type_id',
|
||
|
multiple: true,
|
||
|
adv_search: true,
|
||
|
basic_search: false,
|
||
|
layout_name: 'global_option_column',
|
||
|
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: true,
|
||
|
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: true,
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Default Department' ),
|
||
|
field: 'default_department_id',
|
||
|
in_column: 2,
|
||
|
layout_name: 'global_department',
|
||
|
api_class: TTAPI.APIDepartment,
|
||
|
multiple: true,
|
||
|
basic_search: true,
|
||
|
adv_search: true,
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Branch' ),
|
||
|
in_column: 2,
|
||
|
field: 'branch_id',
|
||
|
layout_name: 'global_branch',
|
||
|
api_class: TTAPI.APIBranch,
|
||
|
multiple: true,
|
||
|
basic_search: false,
|
||
|
adv_search: true,
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Department' ),
|
||
|
field: 'department_id',
|
||
|
in_column: 2,
|
||
|
layout_name: 'global_department',
|
||
|
api_class: TTAPI.APIDepartment,
|
||
|
multiple: true,
|
||
|
basic_search: false,
|
||
|
adv_search: true,
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Title' ),
|
||
|
in_column: 3,
|
||
|
field: 'title_id',
|
||
|
layout_name: 'global_job_title',
|
||
|
api_class: TTAPI.APIUserTitle,
|
||
|
multiple: true,
|
||
|
basic_search: false,
|
||
|
adv_search: true,
|
||
|
form_item_type: FormItemType.AWESOME_BOX
|
||
|
} ),
|
||
|
new SearchField( {
|
||
|
label: $.i18n._( 'Show Pre-Mature' ),
|
||
|
in_column: 3,
|
||
|
field: 'show_pre_mature',
|
||
|
basic_search: false,
|
||
|
adv_search: true,
|
||
|
form_item_type: FormItemType.CHECKBOX
|
||
|
} )
|
||
|
|
||
|
];
|
||
|
}
|
||
|
|
||
|
getFilterColumnsFromDisplayColumns() {
|
||
|
var column_filter = {};
|
||
|
column_filter.exception_color = true;
|
||
|
column_filter.exception_background_color = true;
|
||
|
column_filter.user_id = true;
|
||
|
column_filter.pay_period_id = true;
|
||
|
column_filter.pay_period_schedule_id = true;
|
||
|
|
||
|
return this._getFilterColumnsFromDisplayColumns( column_filter, true );
|
||
|
}
|
||
|
|
||
|
setGridCellBackGround() {
|
||
|
|
||
|
var data = this.grid.getGridParam( 'data' );
|
||
|
//Error: TypeError: data is undefined in /interface/html5/framework/jquery.min.js?v=7.4.6-20141027-074127 line 2 > eval line 70
|
||
|
if ( !data ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var len = data.length;
|
||
|
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
var item = data[i];
|
||
|
|
||
|
if ( item.exception_background_color ) {
|
||
|
var severity = $( 'tr[id=\'' + item.id + '\']' ).find( 'td[aria-describedby="' + this.ui_id + '_grid_severity"]' );
|
||
|
severity.css( 'background-color', item.exception_background_color );
|
||
|
severity.css( 'font-weight', 'bold' );
|
||
|
}
|
||
|
|
||
|
if ( item.exception_color ) {
|
||
|
var code = $( 'tr[id=\'' + item.id + '\']' ).find( 'td[aria-describedby="' + this.ui_id + '_grid_exception_policy_type_id"]' );
|
||
|
code.css( 'color', item.exception_color );
|
||
|
code.css( 'font-weight', 'bold' );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ExceptionViewController.loadView = function() {
|
||
|
|
||
|
Global.loadViewSource( 'Exception', 'ExceptionView.html', function( result ) {
|
||
|
|
||
|
var args = {};
|
||
|
var template = _.template( result );
|
||
|
|
||
|
Global.contentContainer().html( template( args ) );
|
||
|
} );
|
||
|
|
||
|
};
|