TimeTrex/interface/html5/views/policy/holiday_policy/HolidayPolicyViewController.js

535 lines
20 KiB
JavaScript

export class HolidayPolicyViewController extends BaseViewController {
constructor( options = {} ) {
_.defaults( options, {
el: '#holiday_policy_view_container',
type_array: null,
default_schedule_status_array: null,
shift_on_holiday_type_array: null,
worked_scheduled_days_array: null,
date_api: null,
sub_holiday_view_controller: null
} );
super( options );
}
init( options ) {
//this._super('initialize', options );
this.edit_view_tpl = 'HolidayPolicyEditView.html';
this.permission_id = 'holiday_policy';
this.viewId = 'HolidayPolicy';
this.script_name = 'HolidayPolicyView';
this.table_name_key = 'holiday_policy';
this.context_menu_name = $.i18n._( 'Holiday Policy' );
this.navigation_label = $.i18n._( 'Holiday Policy' );
this.api = TTAPI.APIHolidayPolicy;
this.date_api = TTAPI.APITTDate;
this.render();
this.buildContextMenu();
this.initData();
}
/* jshint ignore:start */
initOptions() {
var $this = this;
var options = [
{ option_name: 'type', api: this.api },
{ option_name: 'average_time_frequency_type', api: this.api },
{ option_name: 'default_schedule_status', api: this.api },
{ option_name: 'shift_on_holiday_type', api: this.api },
];
this.initDropDownOptions( options );
this.initDropDownOption( 'scheduled_day', 'worked_scheduled_days', null, function( res ) {
res = res.getResult();
$this.worked_scheduled_days_array = $.extend( {}, res ); // Convert Array to Object
} );
}
/* jshint ignore:end */
buildEditViewUI() {
super.buildEditViewUI();
var $this = this;
var tab_model = {
'tab_holiday_policy': { 'label': $.i18n._( 'Holiday Policy' ) },
'tab_eligibility': { 'label': $.i18n._( 'Eligibility' ) },
'tab_holiday_time': { 'label': $.i18n._( 'Holiday Time' ) },
'tab_holidays': {
'label': $.i18n._( 'Holidays' ),
'init_callback': 'initSubHolidayView',
'display_on_mass_edit': false
},
'tab_audit': true,
};
this.setTabModel( tab_model );
this.navigation.AComboBox( {
api_class: TTAPI.APIHolidayPolicy,
id: this.script_name + '_navigation',
allow_multiple_selection: false,
layout_name: 'global_holiday',
navigation_mode: true,
show_search_inputs: true
} );
this.setNavigation();
var tab_holiday_policy = this.edit_view_tab.find( '#tab_holiday_policy' );
//Tab 0 start
var tab_holiday_policy_column1 = tab_holiday_policy.find( '.first-column' );
this.edit_view_tabs[0] = [];
this.edit_view_tabs[0].push( tab_holiday_policy_column1 );
var form_item_input;
var widgetContainer;
var label;
//Name
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'name', width: '100%' } );
this.addEditFieldToColumn( $.i18n._( 'Name' ), form_item_input, tab_holiday_policy_column1, '' );
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_holiday_policy_column1, '', null, null, true );
form_item_input.parent().width( '45%' );
// Type
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'type_id', set_empty: false } );
form_item_input.setSourceData( $this.type_array );
this.addEditFieldToColumn( $.i18n._( 'Type' ), form_item_input, tab_holiday_policy_column1 );
// Default Schedules Status
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'default_schedule_status_id' } );
form_item_input.setSourceData( $this.default_schedule_status_array );
this.addEditFieldToColumn( $.i18n._( 'Default Schedules Status' ), form_item_input, tab_holiday_policy_column1 );
// Recurring Holidays
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIRecurringHoliday,
allow_multiple_selection: true,
layout_name: 'global_recurring_holiday',
show_search_inputs: true,
set_empty: true,
field: 'recurring_holiday_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Recurring Holidays' ), form_item_input, tab_holiday_policy_column1, '' );
// Display Days
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'holiday_display_days', width: 50 } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ' + $.i18n._( '(Days in Advance)' ) + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Display Holidays' ), form_item_input, tab_holiday_policy_column1, '', widgetContainer );
// tab 1 start
var tab_eligibility = this.edit_view_tab.find( '#tab_eligibility' );
var tab_eligibility_column1 = tab_eligibility.find( '.first-column' );
this.edit_view_tabs[1] = [];
this.edit_view_tabs[1].push( tab_eligibility_column1 );
// Minimum Employed Days
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'minimum_employed_days', width: 50 } );
this.addEditFieldToColumn( $.i18n._( 'Minimum Employed Days' ), form_item_input, tab_eligibility_column1, '' );
// Employee Must Work at Least
var form_item_minimum_worked_days_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_minimum_worked_days_input.TTextInput( { field: 'minimum_worked_days', width: 30 } );
var form_item_minimum_worked_period_days_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_minimum_worked_period_days_input.TTextInput( { field: 'minimum_worked_period_days', width: 30 } );
var form_item_worked_scheduled_days_combobox = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_worked_scheduled_days_combobox.TComboBox( { field: 'worked_scheduled_days' } );
form_item_worked_scheduled_days_combobox.setSourceData( $this.worked_scheduled_days_array );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
var label_1 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'of the' ) + ' </span>' );
var label_2 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'prior to the holiday' ) + ' </span>' );
var label_3 = $( '<span class=\'widget-right-label\'> ' + ' ' + ' </span>' );
widgetContainer.append( form_item_minimum_worked_days_input );
widgetContainer.append( label_1 );
widgetContainer.append( form_item_minimum_worked_period_days_input );
widgetContainer.append( label_3 );
widgetContainer.append( form_item_worked_scheduled_days_combobox );
widgetContainer.append( label_2 );
this.addEditFieldToColumn( $.i18n._( 'Employee Must Work at Least' ), [form_item_minimum_worked_days_input, form_item_minimum_worked_period_days_input, form_item_worked_scheduled_days_combobox], tab_eligibility_column1, '', widgetContainer, true );
// Default Schedules Status
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'shift_on_holiday_type_id' } );
form_item_input.setSourceData( $this.shift_on_holiday_type_array );
this.addEditFieldToColumn( $.i18n._( 'On the Holiday, the Employee' ), form_item_input, tab_eligibility_column1, '', null, true );
// Employee Must Work at Least
form_item_minimum_worked_days_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_minimum_worked_days_input.TTextInput( { field: 'minimum_worked_after_days', width: 30 } );
form_item_minimum_worked_period_days_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_minimum_worked_period_days_input.TTextInput( {
field: 'minimum_worked_after_period_days',
width: 30
} );
form_item_worked_scheduled_days_combobox = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_worked_scheduled_days_combobox.TComboBox( { field: 'worked_after_scheduled_days' } );
form_item_worked_scheduled_days_combobox.setSourceData( $this.worked_scheduled_days_array );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label_1 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'of the' ) + ' </span>' );
label_2 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'following the holiday' ) + ' </span>' );
label_3 = $( '<span class=\'widget-right-label\'> ' + ' ' + ' </span>' );
widgetContainer.append( form_item_minimum_worked_days_input );
widgetContainer.append( label_1 );
widgetContainer.append( form_item_minimum_worked_period_days_input );
widgetContainer.append( label_3 );
widgetContainer.append( form_item_worked_scheduled_days_combobox );
widgetContainer.append( label_2 );
this.addEditFieldToColumn( $.i18n._( 'Employee Must Work at Least' ), [form_item_minimum_worked_days_input, form_item_minimum_worked_period_days_input, form_item_worked_scheduled_days_combobox], tab_eligibility_column1, '', widgetContainer, true );
// Eligible Contributing Shift
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIContributingShiftPolicy,
allow_multiple_selection: false,
layout_name: 'global_contributing_shift_policy',
show_search_inputs: true,
set_empty: true,
field: 'eligible_contributing_shift_policy_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Contributing Shift Policy' ), form_item_input, tab_eligibility_column1, '', null, true );
// tab 2 start
var tab_holiday_time = this.edit_view_tab.find( '#tab_holiday_time' );
var tab_holiday_time_column1 = tab_holiday_time.find( '.first-column' );
this.edit_view_tabs[2] = [];
this.edit_view_tabs[2].push( tab_holiday_time_column1 );
// Total Time over
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'average_time_days', width: 30 } );
var form_item_average_time_frequency_combobox = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_average_time_frequency_combobox.TComboBox( { field: 'average_time_frequency_type_id' } );
form_item_average_time_frequency_combobox.setSourceData( $this.average_time_frequency_type_array );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
widgetContainer.append( form_item_input );
widgetContainer.append( form_item_average_time_frequency_combobox );
this.addEditFieldToColumn( $.i18n._( 'Total Time Over' ), [form_item_input, form_item_average_time_frequency_combobox], tab_holiday_time_column1, '', widgetContainer, true );
// Average Time over
var form_item_average_time_worked_days_checkbox = Global.loadWidgetByName( FormItemType.CHECKBOX );
form_item_average_time_worked_days_checkbox.TCheckbox( { field: 'average_time_worked_days' } );
var form_item_average_days_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_average_days_input.TTextInput( { field: 'average_days', width: 30 } );
widgetContainer = $( '<div class=\'widget-h-box \'></div>' );
label_1 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'Worked Days Only' ) + ' </span>' );
label_2 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'or' ) + ' </span>' );
label_3 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'days' ) + ' </span>' );
widgetContainer.append( label_1 );
widgetContainer.append( form_item_average_time_worked_days_checkbox );
widgetContainer.append( label_2 );
widgetContainer.append( form_item_average_days_input );
widgetContainer.append( label_3 );
this.average_days_widgets = [label_2, form_item_average_days_input, label_3];
this.addEditFieldToColumn( $.i18n._( 'Average Time Over' ), [form_item_average_time_worked_days_checkbox, form_item_average_days_input], tab_holiday_time_column1, '', widgetContainer, true );
// Contributing Shift
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIContributingShiftPolicy,
allow_multiple_selection: false,
layout_name: 'global_contributing_shift_policy',
show_search_inputs: true,
set_empty: true,
field: 'contributing_shift_policy_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Contributing Shift Policy' ), form_item_input, tab_holiday_time_column1, '', null, true );
// Holiday Time
// Minimum Time
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'minimum_time', mode: 'time_unit', need_parser_sec: true } );
this.addEditFieldToColumn( $.i18n._( 'Holiday Time' ), form_item_input, tab_holiday_time_column1, '', null, true );
// Maximum Time
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'maximum_time', mode: 'time_unit', need_parser_sec: true } );
this.addEditFieldToColumn( $.i18n._( 'Maximum Time' ), form_item_input, tab_holiday_time_column1, '', null, true );
// Always Apply Over Time/Premium Policies
form_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );
form_item_input.TCheckbox( { field: 'force_over_time_policy' } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label \'> (' + $.i18n._( 'Even if they are not eligible for holiday pay' ) + ')</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Always Apply Over Time/Premium Policies' ), form_item_input, tab_holiday_time_column1, '', widgetContainer, true );
// Rounding Policy
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIRoundIntervalPolicy,
allow_multiple_selection: false,
layout_name: 'global_round_interval',
show_search_inputs: true,
set_empty: true,
field: 'round_interval_policy_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Rounding Policy' ), form_item_input, tab_holiday_time_column1, '', null, true );
// Absence Policy
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIAbsencePolicy,
allow_multiple_selection: false,
layout_name: 'global_absences',
show_search_inputs: true,
set_empty: true,
field: 'absence_policy_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Absence Policy' ), form_item_input, tab_holiday_time_column1, '' );
}
onFormItemChange( target, doNotValidate ) {
this.setIsChanged( target );
this.setMassEditingFieldsWhenFormChange( target );
var key = target.getField();
var c_value = target.getValue();
this.current_edit_record[key] = c_value;
switch ( key ) {
case 'type_id':
this.onTypeChange();
break;
case 'average_time_worked_days':
this.onWorkedDaysChange();
break;
}
if ( !doNotValidate ) {
this.validate();
}
}
setEditViewDataDone() {
super.setEditViewDataDone();
this.onTypeChange();
this.onWorkedDaysChange();
}
onWorkedDaysChange() {
if ( this.current_edit_record.average_time_worked_days === true ) {
this.average_days_widgets[0].hide();
this.average_days_widgets[1].hide();
this.average_days_widgets[2].hide();
} else {
this.average_days_widgets[0].show();
this.average_days_widgets[1].show();
this.average_days_widgets[2].show();
}
}
onTypeChange() {
if ( this.current_edit_record['type_id'] == 10 ) {
this.detachElement( 'minimum_worked_days' );
this.detachElement( 'shift_on_holiday_type_id' );
this.detachElement( 'minimum_worked_after_days' );
this.detachElement( 'average_time_days' );
this.detachElement( 'average_time_worked_days' );
this.edit_view_form_item_dic['minimum_time'].find( '.edit-view-form-item-label' ).text( $.i18n._( 'Holiday Time' ) );
this.detachElement( 'maximum_time' );
this.detachElement( 'force_over_time_policy' );
this.detachElement( 'round_interval_policy_id' );
this.detachElement( 'eligible_contributing_shift_policy_id' );
this.detachElement( 'contributing_shift_policy_id' );
} else if ( this.current_edit_record['type_id'] == 20 ) {
this.attachElement( 'minimum_worked_days' );
this.attachElement( 'shift_on_holiday_type_id' );
this.attachElement( 'minimum_worked_after_days' );
this.detachElement( 'average_time_days' );
this.detachElement( 'average_time_worked_days' );
this.edit_view_form_item_dic['minimum_time'].find( '.edit-view-form-item-label' ).text( $.i18n._( 'Holiday Time' ) );
this.detachElement( 'maximum_time' );
this.detachElement( 'force_over_time_policy' );
this.detachElement( 'round_interval_policy_id' );
this.attachElement( 'eligible_contributing_shift_policy_id' );
this.detachElement( 'contributing_shift_policy_id' );
} else if ( this.current_edit_record['type_id'] == 30 ) {
this.attachElement( 'minimum_worked_days' );
this.attachElement( 'shift_on_holiday_type_id' );
this.attachElement( 'minimum_worked_after_days' );
this.attachElement( 'average_time_days' );
this.attachElement( 'average_time_worked_days' );
this.edit_view_form_item_dic['minimum_time'].find( '.edit-view-form-item-label' ).text( $.i18n._( 'Minimum Time' ) );
this.attachElement( 'maximum_time' );
this.attachElement( 'force_over_time_policy' );
this.attachElement( 'round_interval_policy_id' );
this.attachElement( 'eligible_contributing_shift_policy_id' );
this.attachElement( 'contributing_shift_policy_id' );
}
this.editFieldResize();
}
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._( 'Type' ),
in_column: 1,
field: 'type_id',
multiple: true,
basic_search: true,
adv_search: false,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
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
} )
];
}
initSubHolidayView() {
var $this = this;
if ( !this.current_edit_record.id ) {
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_holiday_view_controller ) {
this.sub_holiday_view_controller.buildContextMenu( true );
this.sub_holiday_view_controller.setDefaultMenu();
$this.sub_holiday_view_controller.parent_value = $this.current_edit_record.id;
$this.sub_holiday_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_holiday_view_controller.initData();
return;
}
Global.loadScript( 'views/policy/holiday/HolidayViewController.js', function() {
var tab_holiday_policy = $this.edit_view_tab.find( '#tab_holidays' );
var firstColumn = tab_holiday_policy.find( '.first-column-sub-view' );
Global.trackView( 'Sub' + 'Holiday' + 'View' );
HolidayViewController.loadSubView( firstColumn, beforeLoadView, afterLoadView );
} );
function beforeLoadView() {
}
function afterLoadView( subViewController ) {
$this.sub_holiday_view_controller = subViewController;
$this.sub_holiday_view_controller.parent_key = 'holiday_policy_id';
$this.sub_holiday_view_controller.parent_value = $this.current_edit_record.id;
$this.sub_holiday_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_holiday_view_controller.parent_view_controller = $this;
$this.sub_holiday_view_controller.initData();
}
}
removeEditView() {
super.removeEditView();
this.sub_holiday_view_controller = null;
}
}