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 = $( '
' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 = $( '' ); label = $( ' ' ); 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 } ) ]; } }