TimeTrex/interface/html5/views/payperiod/PayPeriodScheduleViewController.js

639 lines
23 KiB
JavaScript

export class PayPeriodScheduleViewController extends BaseViewController {
constructor( options = {} ) {
_.defaults( options, {
el: '#pay_period_schedule_view_container', //Must set el here and can only set string, so events can work
user_preference_api: null,
type_array: null,
pay_period_starts_on_array: null,
start_week_day_array: null,
transaction_date_array: null,
transaction_date_business_day_array: null,
time_zone_array: null,
shift_assigned_day_array: null,
timesheet_verify_type_array: null,
sub_pay_periods_view_controller: null
} );
super( options );
}
init( options ) {
//this._super('initialize', options );
this.edit_view_tpl = 'PayPeriodScheduleEditView.html';
this.permission_id = 'pay_period_schedule';
this.viewId = 'PayPeriodSchedule';
this.script_name = 'PayPeriodScheduleView';
this.table_name_key = 'pay_period_schedule';
this.context_menu_name = $.i18n._( 'Pay Period Schedule' );
this.navigation_label = $.i18n._( 'Pay Period Schedule' );
this.api = TTAPI.APIPayPeriodSchedule;
this.user_preference_api = TTAPI.APIUserPreference;
this.render();
this.buildContextMenu();
this.initData();
}
getCustomContextMenuModel() {
var context_menu_model = {
exclude: ['copy', 'mass_edit'],
include: []
};
return context_menu_model;
}
openEditView( id ) {
Global.setUINotready();
TTPromise.add( 'init', 'init' );
TTPromise.wait();
var $this = this;
if ( $this.edit_only_mode ) {
$this.initOptions( function( result ) {
if ( !$this.edit_view ) {
$this.initEditViewUI( $this.viewId, $this.edit_view_tpl );
}
$this.getPayPeriodScheduleData( id, function( result ) {
// Waiting for the TTAPI.API returns data to set the current edit record.
$this.current_edit_record = result;
$this.initEditView();
} );
} );
} else {
if ( !this.edit_view ) {
this.initEditViewUI( $this.viewId, $this.edit_view_tpl );
}
}
}
getPayPeriodScheduleData( id, callBack ) {
var filter = {};
filter.filter_data = {};
filter.filter_data.id = [id];
this.api['get' + this.api.key_name]( filter, {
onResult: function( result ) {
var result_data = result.getResult();
if ( !result_data ) {
result_data = [];
}
result_data = result_data[0];
callBack( result_data );
}
} );
}
initOptions( callBack ) {
var $this = this;
var options = [
{ option_name: 'type' },
{ option_name: 'transaction_date' },
{ option_name: 'transaction_date_business_day' },
{ option_name: 'shift_assigned_day' },
{ option_name: 'time_zone', field_name: '', api: this.user_preference_api },
{ option_name: 'timesheet_verify_type' },
{ option_name: 'start_week_day' }
];
this.initDropDownOptions( options, function( result ) {
$this.transaction_date_array = Global.addLastItemToArray( $this.transaction_date_array, -1, $.i18n._( '- Last Day Of Month -' ) );
$this.user_preference_api.getOptions( 'start_week_day', {
onResult: function( res ) {
var result = res.getResult();
$this.pay_period_starts_on_array = Global.buildRecordArray( result );
if ( callBack ) {
callBack( result ); // First to initialize drop down options, and then to initialize edit view UI.
}
}
} );
} );
}
initSubPayPeriodsView() {
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_pay_periods_view_controller ) {
this.sub_pay_periods_view_controller.buildContextMenu( true );
this.sub_pay_periods_view_controller.setDefaultMenu();
$this.sub_pay_periods_view_controller.parent_value = $this.current_edit_record.id;
$this.sub_pay_periods_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_pay_periods_view_controller.initData(); //Init data in this parent view
return;
}
Global.loadScript( 'views/payroll/pay_periods/PayPeriodsViewController.js', function() {
var tab_pay_period_schedule = $this.edit_view_tab.find( '#tab_pay_period' );
var firstColumn = tab_pay_period_schedule.find( '.first-column-sub-view' );
Global.trackView( 'Sub' + 'PayPeriods' + 'View' );
PayPeriodsViewController.loadSubView( firstColumn, beforeLoadView, afterLoadView );
} );
function beforeLoadView() {
}
function afterLoadView( subViewController ) {
$this.sub_pay_periods_view_controller = subViewController;
$this.sub_pay_periods_view_controller.parent_key = 'pay_period_schedule_id';
$this.sub_pay_periods_view_controller.parent_value = $this.current_edit_record.id;
$this.sub_pay_periods_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_pay_periods_view_controller.parent_view_controller = $this;
$this.sub_pay_periods_view_controller.initData(); //Init data in this parent view
}
}
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;
if ( key == 'type_id' ) {
this.onTypeChange();
} else if ( key == 'start_day_of_week' && ( !this.current_edit_record || !this.current_edit_record.id ) ) {
this.edit_view_ui_dic.start_week_day_id.setValue( this.edit_view_ui_dic.start_day_of_week.getValue() );
this.current_edit_record.start_week_day_id = this.edit_view_ui_dic.start_day_of_week.getValue();
} else if ( key == 'timesheet_verify_type_id' ) {
this.onVerifyTypeChange();
}
if ( !doNotValidate ) {
this.validate();
}
}
removeEditView() {
super.removeEditView();
this.sub_pay_periods_view_controller = null;
}
onVerifyTypeChange() {
if ( this.current_edit_record.timesheet_verify_type_id == 10 ) {
this.detachElement( 'timesheet_verify_before_end_date' );
this.detachElement( 'timesheet_verify_before_transaction_date' );
} else {
this.attachElement( 'timesheet_verify_before_end_date' );
this.attachElement( 'timesheet_verify_before_transaction_date' );
}
this.editFieldResize();
}
onTypeChange() {
if ( this.current_edit_record.type_id == 5 ) {
this.detachElement( 'anchor_date' );
} else {
if ( this.current_edit_record.id ) {
this.detachElement( 'anchor_date' );
} else {
this.attachElement( 'anchor_date' );
}
}
if ( this.current_edit_record.type_id == 5 ) {
this.detachElement( 'primary' );
this.detachElement( 'primary_day_of_month' );
this.detachElement( 'primary_transaction_day_of_month' );
this.detachElement( 'secondary' );
this.detachElement( 'secondary_day_of_month' );
this.detachElement( 'secondary_transaction_day_of_month' );
this.attachElement( 'annual_pay_periods' );
this.detachElement( 'start_day_of_week' );
this.detachElement( 'transaction_date' );
this.detachElement( 'transaction_date_bd' );
} else if ( this.current_edit_record.type_id == 10 || this.current_edit_record.type_id == 20 || this.current_edit_record.type_id == 100 || this.current_edit_record.type_id == 200 ) {
this.detachElement( 'primary' );
this.detachElement( 'primary_day_of_month' );
this.detachElement( 'primary_transaction_day_of_month' );
this.detachElement( 'secondary' );
this.detachElement( 'secondary_day_of_month' );
this.detachElement( 'secondary_transaction_day_of_month' );
this.detachElement( 'annual_pay_periods' );
this.attachElement( 'start_day_of_week' );
this.attachElement( 'transaction_date' );
this.attachElement( 'transaction_date_bd' );
} else if ( this.current_edit_record.type_id == 30 ) {
this.attachElement( 'primary' );
this.attachElement( 'primary_day_of_month' );
this.attachElement( 'primary_transaction_day_of_month' );
this.attachElement( 'secondary' );
this.attachElement( 'secondary_day_of_month' );
this.attachElement( 'secondary_transaction_day_of_month' );
this.detachElement( 'annual_pay_periods' );
this.detachElement( 'start_day_of_week' );
this.detachElement( 'transaction_date' );
this.attachElement( 'transaction_date_bd' );
} else if ( this.current_edit_record.type_id == 50 ) {
this.attachElement( 'primary' );
this.attachElement( 'primary_day_of_month' );
this.attachElement( 'primary_transaction_day_of_month' );
this.detachElement( 'secondary' );
this.detachElement( 'secondary_day_of_month' );
this.detachElement( 'secondary_transaction_day_of_month' );
this.detachElement( 'annual_pay_periods' );
this.detachElement( 'start_day_of_week' );
this.detachElement( 'transaction_date' );
this.attachElement( 'transaction_date_bd' );
}
this.editFieldResize();
}
setCurrentEditRecordData() {
//Set current edit record data to all widgets
for ( var key in this.current_edit_record ) {
var widget = this.edit_view_ui_dic[key];
if ( Global.isSet( widget ) ) {
switch ( key ) {
default:
widget.setValue( this.current_edit_record[key] );
break;
}
}
}
this.onTypeChange();
this.onVerifyTypeChange();
this.collectUIDataToCurrentEditRecord();
this.setEditViewDataDone();
}
buildEditViewUI() {
super.buildEditViewUI();
var $this = this;
var tab_model = {
'tab_pay_period_schedule': {
'label': $.i18n._( 'Pay Period Schedule' )
},
'tab_advanced': {
'label': $.i18n._( 'Advanced' )
},
'tab_pay_period': {
'label': $.i18n._( 'Pay Periods' ),
'init_callback': 'initSubPayPeriodsView',
'display_on_mass_edit': false
},
'tab_audit': true,
};
this.setTabModel( tab_model );
if ( !this.edit_only_mode ) {
this.navigation.AComboBox( {
id: this.script_name + '_navigation',
api_class: TTAPI.APIPayPeriodSchedule,
allow_multiple_selection: false,
layout_name: 'global_pay_period_schedule',
navigation_mode: true,
show_search_inputs: true
} );
this.setNavigation();
}
//Tab 0 start
var tab_pay_period_schedule = this.edit_view_tab.find( '#tab_pay_period_schedule' );
var tab_pay_period_schedule_column1 = tab_pay_period_schedule.find( '.first-column' );
this.edit_view_tabs[0] = [];
this.edit_view_tabs[0].push( tab_pay_period_schedule_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_pay_period_schedule_column1, '' );
form_item_input.parent().width( '45%' );
// Description
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'description', width: '100%' } );
this.addEditFieldToColumn( $.i18n._( 'Description' ), form_item_input, tab_pay_period_schedule_column1 );
form_item_input.parent().width( '45%' );
// Pay Period Dates
form_item_input = Global.loadWidgetByName( FormItemType.SEPARATED_BOX );
form_item_input.SeparatedBox( { label: $.i18n._( 'Pay Period Dates' ) } );
this.addEditFieldToColumn( null, form_item_input, tab_pay_period_schedule_column1 );
// Type
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'type_id' } );
form_item_input.setSourceData( $this.type_array );
this.addEditFieldToColumn( $.i18n._( 'Type' ), form_item_input, tab_pay_period_schedule_column1 );
// Primary
form_item_input = Global.loadWidgetByName( FormItemType.SEPARATED_BOX );
form_item_input.SeparatedBox( { label: $.i18n._( 'Primary' ) } );
this.addEditFieldToColumn( null, form_item_input, tab_pay_period_schedule_column1, '', null, true, false, 'primary' );
// Pay Period Start Day of Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'primary_day_of_month' } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'at 00:00' ) + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
form_item_input.setSourceData( $this.transaction_date_array );
this.addEditFieldToColumn( $.i18n._( 'Pay Period Start Day of Month' ), form_item_input, tab_pay_period_schedule_column1, '', widgetContainer, true );
// Transaction Day Of Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'primary_transaction_day_of_month' } );
form_item_input.setSourceData( $this.transaction_date_array );
this.addEditFieldToColumn( $.i18n._( 'Transaction Day Of Month' ), form_item_input, tab_pay_period_schedule_column1, '', null, true );
// Secondary
form_item_input = Global.loadWidgetByName( FormItemType.SEPARATED_BOX );
form_item_input.SeparatedBox( { label: $.i18n._( 'Secondary' ) } );
this.addEditFieldToColumn( null, form_item_input, tab_pay_period_schedule_column1, '', null, true, false, 'secondary' );
// Pay Period Start Day Of Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'secondary_day_of_month' } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'at 00:00' ) + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
form_item_input.setSourceData( $this.transaction_date_array );
this.addEditFieldToColumn( $.i18n._( 'Pay Period Start Day of Month' ), form_item_input, tab_pay_period_schedule_column1, '', widgetContainer, true );
// Transaction Day Of Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'secondary_transaction_day_of_month' } );
form_item_input.setSourceData( $this.transaction_date_array );
this.addEditFieldToColumn( $.i18n._( 'Transaction Day Of Month' ), form_item_input, tab_pay_period_schedule_column1, '', null, true );
// Annual Pay Periods
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'annual_pay_periods' } );
this.addEditFieldToColumn( $.i18n._( 'Annual Pay Periods' ), form_item_input, tab_pay_period_schedule_column1, '', null, true );
// Pay Period Starts On
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'start_day_of_week' } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'at 00:00' ) + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
form_item_input.setSourceData( $this.pay_period_starts_on_array );
this.addEditFieldToColumn( $.i18n._( 'Pay Period Starts On' ), form_item_input, tab_pay_period_schedule_column1, '', widgetContainer, true );
// Transaction Date
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'transaction_date' } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ( ' + $.i18n._( 'days after end of pay period' ) + ' )</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
form_item_input.setSourceData( $this.transaction_date_array );
this.addEditFieldToColumn( $.i18n._( 'Transaction Date' ), form_item_input, tab_pay_period_schedule_column1, '', widgetContainer, true );
// Transaction Always on Business Day
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'transaction_date_bd' } );
form_item_input.setSourceData( $this.transaction_date_business_day_array );
this.addEditFieldToColumn( $.i18n._( 'Transaction Always on Business Day' ), form_item_input, tab_pay_period_schedule_column1, '', null, true );
//Create Initial Pay Periods From
form_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );
form_item_input.TDatePicker( { field: 'anchor_date' } );
this.addEditFieldToColumn( $.i18n._( 'Create Initial Pay Periods From' ), form_item_input, tab_pay_period_schedule_column1, '', null, true );
// employees
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIUser,
allow_multiple_selection: true,
layout_name: 'global_user',
show_search_inputs: true,
set_empty: true,
field: 'user'
} );
this.addEditFieldToColumn( $.i18n._( 'Employees' ), form_item_input, tab_pay_period_schedule_column1 );
//Tab 0 start
var tab_advanced = this.edit_view_tab.find( '#tab_advanced' );
var tab_advanced_column1 = tab_advanced.find( '.first-column' );
this.edit_view_tabs[1] = [];
this.edit_view_tabs[1].push( tab_advanced_column1 );
// Overtime Week
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'start_week_day_id' } );
form_item_input.setSourceData( $this.start_week_day_array );
this.addEditFieldToColumn( $.i18n._( 'Overtime Week' ), form_item_input, tab_advanced_column1, '' );
// Time Zone
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'time_zone', set_empty: true } );
form_item_input.setSourceData( $this.time_zone_array );
this.addEditFieldToColumn( $.i18n._( 'Time Zone' ), form_item_input, tab_advanced_column1 );
// Minimum Time-Off Between Shifts
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'new_day_trigger_time', mode: 'time_unit', need_parser_sec: true } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'>( ' + $.i18n._( 'only for shifts that span midnight' ) + ' )</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Minimum Time-Off Between Shifts' ), form_item_input, tab_advanced_column1, '', widgetContainer );
// Maximum Shift Time
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'maximum_shift_time', mode: 'time_unit', need_parser_sec: true } );
this.addEditFieldToColumn( $.i18n._( 'Maximum Shift Time' ), form_item_input, tab_advanced_column1, '', null );
// Assign Shifts To
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'shift_assigned_day_id' } );
form_item_input.setSourceData( $this.shift_assigned_day_array );
this.addEditFieldToColumn( $.i18n._( 'Assign Shifts To' ), form_item_input, tab_advanced_column1 );
// Populate Days in Advance
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'create_days_in_advance', 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._( 'Create Pay Periods' ), form_item_input, tab_advanced_column1, '', widgetContainer );
// Auto close pay period
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'auto_close_after_days', width: 50 } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ' + $.i18n._( '( days after transaction date )' ) + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Auto Close' ), form_item_input, tab_advanced_column1, '', widgetContainer );
// TimeSheet Verification
form_item_input = Global.loadWidgetByName( FormItemType.SEPARATED_BOX );
form_item_input.SeparatedBox( { label: $.i18n._( 'TimeSheet Verification' ) } );
this.addEditFieldToColumn( null, form_item_input, tab_advanced_column1 );
// Timesheet Verification
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'timesheet_verify_type_id' } );
form_item_input.setSourceData( $this.timesheet_verify_type_array );
this.addEditFieldToColumn( $.i18n._( 'TimeSheet Verification' ), form_item_input, tab_advanced_column1 );
// Verification Window Starts
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'timesheet_verify_before_end_date', width: 30 } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'>' + $.i18n._( 'Day(s)' ) + ' (' + $.i18n._( 'Before Pay Period End Date' ) + ' )' + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Verification Window Starts' ), form_item_input, tab_advanced_column1, '', widgetContainer, true );
// Verification Windows Ends
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'timesheet_verify_before_transaction_date', width: 30 } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'>' + $.i18n._( 'Day(s)' ) + ' (' + $.i18n._( 'Before Pay Period Transaction Date' ) + ' )' + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Verification Window Ends' ), form_item_input, tab_advanced_column1, '', widgetContainer, true );
}
buildSearchFields() {
super.buildSearchFields();
this.search_fields = [
new SearchField( {
label: $.i18n._( 'Name' ),
in_column: 1,
field: 'name',
basic_search: true,
form_item_type: FormItemType.TEXT_INPUT
} ),
new SearchField( {
label: $.i18n._( 'Type' ),
in_column: 1,
field: 'type_id',
multiple: true,
basic_search: true,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Description' ),
in_column: 1,
field: 'description',
basic_search: true,
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,
script_name: 'EmployeeView',
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,
script_name: 'EmployeeView',
form_item_type: FormItemType.AWESOME_BOX
} )
];
}
}