TimeTrex/interface/html5/views/policy/accrual_policy/AccrualPolicyViewController.js

1222 lines
41 KiB
JavaScript

export class AccrualPolicyViewController extends BaseViewController {
constructor( options = {} ) {
_.defaults( options, {
el: '#accrual_policy_view_container',
type_array: null,
apply_frequency_array: null,
month_of_year_array: null,
day_of_month_array: null,
day_of_week_array: null,
month_of_quarter_array: null,
length_of_service_unit_array: null,
original_milestone_data: [],
date_api: null,
accrual_policy_milestone_api: null,
accrual_policy_user_modifier_api: null,
sub_accrual_policy_user_modifier_view_controller: null
} );
super( options );
}
init( options ) {
//this._super('initialize', options );
this.edit_view_tpl = 'AccrualPolicyEditView.html';
this.permission_id = 'accrual_policy';
this.viewId = 'AccrualPolicy';
this.script_name = 'AccrualPolicyView';
this.table_name_key = 'accrual_policy';
this.context_menu_name = $.i18n._( 'Accrual Policy' );
this.navigation_label = $.i18n._( 'Accrual Policy' );
this.api = TTAPI.APIAccrualPolicy;
this.date_api = TTAPI.APITTDate;
this.accrual_policy_milestone_api = TTAPI.APIAccrualPolicyMilestone;
this.accrual_policy_user_modifier_api = TTAPI.APIAccrualPolicyUserModifier;
this.month_of_quarter_array = Global.buildRecordArray( { 1: 1, 2: 2, 3: 3 } );
this.render();
this.buildContextMenu();
this.initData();
}
onCustomContextClick( id ) {
switch ( id ) {
case 're_calculate_accrual':
this.onReCalAccrualClick();
break;
}
}
onReCalAccrualClick() {
var default_data = {};
var $this = this;
if ( this.edit_view ) {
default_data.accrual_policy_id = [this.current_edit_record.id];
} else {
default_data.accrual_policy_id = this.getGridSelectIdArray();
}
IndexViewController.openWizard( 'ReCalculateAccrualWizard', default_data, function() {
$this.search();
} );
}
getCustomContextMenuModel() {
var context_menu_model = {
exclude: [],
include: [
{
label: '', //Empty label. vue_icon is displayed instead of text.
id: 'other_header',
menu_align: 'right',
action_group: 'other',
action_group_header: true,
vue_icon: 'tticon tticon-more_vert_black_24dp',
},
{
label: $.i18n._( 'ReCalculate Accrual' ),
id: 're_calculate_accrual',
permission_result: true,
permission: null,
menu_align: 'right',
action_group: 'other'
}
]
};
return context_menu_model;
}
initOptions() {
var $this = this;
var options = [
{ option_name: 'type', api: this.api },
{ option_name: 'apply_frequency', api: this.api },
{ option_name: 'length_of_service_unit', field_name: 'length_of_service_unit_id', api: this.accrual_policy_milestone_api },
];
this.initDropDownOptions( options );
this.date_api.getMonthOfYearArray( {
onResult: function( res ) {
res = res.getResult();
$this.month_of_year_array = res;
}
} );
this.date_api.getDayOfMonthArray( {
onResult: function( res ) {
res = res.getResult();
$this.day_of_month_array = res;
}
} );
this.date_api.getDayOfWeekArray( {
onResult: function( res ) {
res = res.getResult();
$this.day_of_week_array = res;
}
} );
}
setCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {
switch ( id ) {
case 're_calculate_accrual':
this.setDefaultMenuReCalAccrualWizardIcon( context_btn, grid_selected_length );
break;
}
}
setCustomEditMenuIcon( id, context_btn ) {
switch ( id ) {
case 're_calculate_accrual':
this.setEditMenuReCalAccrualWizardIcon( context_btn );
break;
}
}
setEditMenuReCalAccrualWizardIcon( context_btn ) {
if ( PermissionManager.validate( 'accrual_policy', 'enabled' ) &&
( PermissionManager.validate( 'accrual_policy', 'edit' ) || PermissionManager.validate( 'accrual_policy', 'edit_child' ) || PermissionManager.validate( 'accrual_policy', 'edit_own' ) )
) {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
} else {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
}
if ( this.current_edit_record && this.current_edit_record.id ) {
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
} else {
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
}
}
setDefaultMenuReCalAccrualWizardIcon( context_btn, grid_selected_length ) {
if ( PermissionManager.validate( 'accrual_policy', 'enabled' ) &&
( PermissionManager.validate( 'accrual_policy', 'edit' ) || PermissionManager.validate( 'accrual_policy', 'edit_child' ) || PermissionManager.validate( 'accrual_policy', 'edit_own' ) )
) {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
} else {
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 );
}
}
buildEditViewUI() {
super.buildEditViewUI();
var $this = this;
var tab_model = {
'tab_accrual_policy': { 'label': $.i18n._( 'Accrual Policy' ), 'is_multi_column': true },
'tab_length_of_service_milestones': {
'label': $.i18n._( 'Length Of Service Milestones' ),
'html_template': this.getAccrualPolicyLengthOfServiceMilestonesTabHtml()
},
'tab_employee_settings': {
'label': $.i18n._( 'Employee Settings' ),
'init_callback': 'initSubAccrualPolicyUserModifier',
'display_on_mass_edit': false,
'show_permission_div': true
},
'tab_audit': true,
};
this.setTabModel( tab_model );
this.navigation.AComboBox( {
api_class: TTAPI.APIAccrualPolicy,
id: this.script_name + '_navigation',
allow_multiple_selection: false,
layout_name: 'global_accrual',
navigation_mode: true,
show_search_inputs: true
} );
this.setNavigation();
//Tab 0 start
var tab_accrual_policy = this.edit_view_tab.find( '#tab_accrual_policy' );
var tab_length_of_service_milestones = this.edit_view_tab.find( '#tab_length_of_service_milestones' );
var tab_accrual_policy_column1 = tab_accrual_policy.find( '.first-column' );
var tab_length_of_service_milestones_column1 = tab_length_of_service_milestones.find( '.first-column' );
this.edit_view_tabs[0] = [];
this.edit_view_tabs[0].push( tab_accrual_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_accrual_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_accrual_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_accrual_policy_column1 );
// 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,
set_default: true,
field: 'contributing_shift_policy_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Contributing Shift Policy' ), form_item_input, tab_accrual_policy_column1, '', null, true );
// Accrual Account
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIAccrualPolicyAccount,
allow_multiple_selection: false,
layout_name: 'global_accrual_policy_account',
show_search_inputs: true,
set_empty: true,
set_default: true,
field: 'accrual_policy_account_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Accrual Account' ), form_item_input, tab_accrual_policy_column1 );
//Length of Service contributing pay codes.
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIContributingPayCodePolicy,
allow_multiple_selection: false,
layout_name: 'global_contributing_pay_code_policy',
show_search_inputs: true,
set_empty: true,
set_default: true,
field: 'length_of_service_contributing_pay_code_policy_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Length Of Service Hours Based On' ), form_item_input, tab_length_of_service_milestones_column1, '', null, true );
//Milestone Rollover Based On
form_item_input = Global.loadWidgetByName( FormItemType.SEPARATED_BOX );
form_item_input.SeparatedBox( { label: $.i18n._( 'Milestone Rollover Based On' ) } );
this.addEditFieldToColumn( null, form_item_input, tab_accrual_policy_column1, '', null, true, false, 'separated_2' );
//Employee's Hire Date
form_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );
form_item_input.TCheckbox( { field: 'milestone_rollover_hire_date' } );
this.addEditFieldToColumn( $.i18n._( 'Employee\'s Hire Date' ), form_item_input, tab_accrual_policy_column1, '', null, true );
//Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'milestone_rollover_month' } );
form_item_input.setSourceData( $this.month_of_year_array );
this.addEditFieldToColumn( $.i18n._( 'Month' ), form_item_input, tab_accrual_policy_column1, '', null, true );
//Day Of Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'milestone_rollover_day_of_month' } );
form_item_input.setSourceData( $this.day_of_month_array );
this.addEditFieldToColumn( $.i18n._( 'Day of Month' ), form_item_input, tab_accrual_policy_column1, '', null, true );
var tab_accrual_policy_column2 = tab_accrual_policy.find( '.second-column' );
this.edit_view_tabs[0].push( tab_accrual_policy_column2 );
// Excess Rollover Accrual Account
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIAccrualPolicyAccount,
allow_multiple_selection: false,
layout_name: 'global_accrual_policy_account',
show_search_inputs: true,
set_empty: true,
set_default: true,
field: 'excess_rollover_accrual_policy_account_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Move Excess Rollover Time To' ), form_item_input, tab_accrual_policy_column1 );
//Frequency In Which To Apply Time to Employee Records
form_item_input = Global.loadWidgetByName( FormItemType.SEPARATED_BOX );
form_item_input.SeparatedBox( { label: $.i18n._( 'Frequency In Which To Apply Time to Employee Records' ) } );
this.addEditFieldToColumn( null, form_item_input, tab_accrual_policy_column2, '', null, true, false, 'separated_1' );
//Frequency
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'apply_frequency_id', set_empty: false } );
form_item_input.setSourceData( $this.apply_frequency_array );
this.addEditFieldToColumn( $.i18n._( 'Frequency' ), form_item_input, tab_accrual_policy_column2, '', null, true );
//Employee's Hire Date
form_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );
form_item_input.TCheckbox( { field: 'apply_frequency_hire_date' } );
this.addEditFieldToColumn( $.i18n._( 'Employee\'s Hire Date' ), form_item_input, tab_accrual_policy_column2, '', null, true );
//Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'apply_frequency_month' } );
form_item_input.setSourceData( $this.month_of_year_array );
this.addEditFieldToColumn( $.i18n._( 'Month' ), form_item_input, tab_accrual_policy_column2, '', null, true );
//Day Of Month
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'apply_frequency_day_of_month' } );
form_item_input.setSourceData( $this.day_of_month_array );
this.addEditFieldToColumn( $.i18n._( 'Day of Month' ), form_item_input, tab_accrual_policy_column2, '', null, true );
//Day Of Week
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'apply_frequency_day_of_week' } );
form_item_input.setSourceData( $.extend( {}, $this.day_of_week_array ) );
this.addEditFieldToColumn( $.i18n._( 'Day Of Week' ), form_item_input, tab_accrual_policy_column2, '', null, true );
// Month of Quarter
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'apply_frequency_quarter_month', set_empty: false } );
form_item_input.setSourceData( $this.month_of_quarter_array );
this.addEditFieldToColumn( $.i18n._( 'Month of Quarter' ), form_item_input, tab_accrual_policy_column2, '', null, true );
// After Minimum Employed Days
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'minimum_employed_days', width: 30 } );
this.addEditFieldToColumn( $.i18n._( 'After Minimum Employed Days' ), form_item_input, tab_accrual_policy_column2, '', null, true );
//Enable Opening Balance
form_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );
form_item_input.TCheckbox( { field: 'enable_opening_balance' } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ' + $.i18n._( '(Applies Initial Accrual Amount on Hire Date)' ) + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Enable Opening Balance' ), form_item_input, tab_accrual_policy_column2, '', widgetContainer, true );
//Enable Pro-Rate Initial Period
form_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );
form_item_input.TCheckbox( { field: 'enable_pro_rate_initial_period' } );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
label = $( '<span class=\'widget-right-label\'> ' + $.i18n._( '(Based on Hire Date)' ) + '</span>' );
widgetContainer.append( form_item_input );
widgetContainer.append( label );
this.addEditFieldToColumn( $.i18n._( 'Prorate Initial Accrual Amount' ), form_item_input, tab_accrual_policy_column2, '', widgetContainer, true );
var tab_length_of_service_milestones = this.edit_view_tab.find( '#tab_length_of_service_milestones' );
//
//Inside editor
//
var inside_editor_div = tab_length_of_service_milestones.find( '.inside-editor-div' );
var args = {
length_of_service: $.i18n._( 'Length Of Service' ),
accrual_rate: $.i18n._( 'Accrual Rate/Year' ),
accrual_total_maximum: $.i18n._( 'Accrual Maximum Balance' ),
annual_maximum_rollover: $.i18n._( 'Annual Maximum Rollover' ),
annual_maximum_time: $.i18n._( 'Annual Accrual Maximum' )
};
this.editor = Global.loadWidgetByName( FormItemType.INSIDE_EDITOR );
this.editor.InsideEditor( {
addRow: this.insideEditorAddRow,
removeRow: this.insideEditorRemoveRow,
getValue: this.insideEditorGetValue,
setValue: this.insideEditorSetValue,
render: getRender(),
render_args: args,
render_inline_html: true,
row_render: getRowRender(),
parent_controller: this
} );
function getRender() {
return `
<table class="inside-editor-render">
<tr class="title">
<td style="width: 200px"><%= length_of_service %></td>
<td style="width: 200px"><%= accrual_rate %></td>
<td class="annual-maximum-time-td" style="width: 200px"><%= annual_maximum_time %></td>
<td style="width: 200px"><%= accrual_total_maximum %></td>
<td style="width: 200px"><%= annual_maximum_rollover %></td>
<td style="width: 25px"></td>
<td style="width: 25px"></td>
</tr>
</table>`;
}
function getRowRender() {
return `
<tr class="inside-editor-row data-row">
<td class="length_of_service cell"></td>
<td class="accrual_rate cell"></td>
<td class="annual_maximum_time annual-maximum-time-td cell"></td>
<td class="accrual_total_maximum cell"></td>
<td class="annual_maximum_rollover cell"></td>
<td class="cell control-icon">
<button class="plus-icon" onclick=""></button>
</td>
<td class="cell control-icon">
<button class="minus-icon " onclick=""></button>
</td>
</tr>`;
}
inside_editor_div.append( this.editor );
}
onMilestoneRolloverHireDate() {
if ( this.current_edit_record['milestone_rollover_hire_date'] === true ) {
this.detachElement( 'milestone_rollover_month' );
this.detachElement( 'milestone_rollover_day_of_month' );
} else if ( this.current_edit_record['milestone_rollover_hire_date'] === false ) {
this.attachElement( 'milestone_rollover_month' );
this.attachElement( 'milestone_rollover_day_of_month' );
}
this.editFieldResize();
}
onApplyFrequencyHireDate() {
if ( this.current_edit_record['apply_frequency_id'] == 20 ) {
this.attachElement( 'apply_frequency_hire_date' );
if ( this.current_edit_record['apply_frequency_hire_date'] === true ) {
this.detachElement( 'apply_frequency_month' );
this.detachElement( 'apply_frequency_day_of_month' );
} else {
this.attachElement( 'apply_frequency_month' );
this.attachElement( 'apply_frequency_day_of_month' );
}
this.editFieldResize();
}
}
onApplyFrequencyChange( arg ) {
if ( !Global.isSet( arg ) ) {
if ( !Global.isSet( this.current_edit_record['apply_frequency_id'] ) ) {
this.current_edit_record['apply_frequency_id'] = 10;
}
arg = this.current_edit_record['apply_frequency_id'];
}
this.detachElement( 'apply_frequency_hire_date' );
this.detachElement( 'apply_frequency_month' );
this.detachElement( 'apply_frequency_day_of_month' );
this.detachElement( 'apply_frequency_day_of_week' );
this.detachElement( 'apply_frequency_quarter_month' );
if ( arg == 20 ) {
this.onApplyFrequencyHireDate();
} else if ( arg == 30 ) {
this.attachElement( 'apply_frequency_day_of_month' );
} else if ( arg == 40 ) {
this.attachElement( 'apply_frequency_day_of_week' );
} else if ( arg == 25 ) {
this.attachElement( 'apply_frequency_day_of_month' );
this.attachElement( 'apply_frequency_quarter_month' );
}
this.editFieldResize();
}
onTypeChange() {
if ( !Global.isSet( this.current_edit_record['type_id'] ) ) {
this.current_edit_record['type_id'] = 20;
}
if ( this.current_edit_record['type_id'] == 20 ) {
if ( !this.is_mass_editing ) {
$( this.edit_view_tab.find( 'ul li' )[1] ).show();
$( this.edit_view_tab.find( 'ul li' )[2] ).show();
}
this.edit_view_tab.find( '#tab_accrual_policy' ).find( '.second-column' ).css( 'display', 'block' );
this.edit_view_tab.find( '#tab_accrual_policy' ).find( '.first-column' ).removeClass( 'full-width-column' );
this.attachElement( 'separated_1' );
this.attachElement( 'apply_frequency_id' );
this.attachElement( 'minimum_employed_days' );
this.detachElement( 'contributing_shift_policy_id' );
this.attachElement( 'enable_opening_balance' );
this.attachElement( 'enable_pro_rate_initial_period' );
this.onApplyFrequencyChange();
this.onApplyFrequencyHireDate();
} else if ( this.current_edit_record['type_id'] == 30 ) {
if ( !this.is_mass_editing ) {
$( this.edit_view_tab.find( 'ul li' )[1] ).show();
$( this.edit_view_tab.find( 'ul li' )[2] ).show();
}
this.edit_view_tab.find( '#tab_accrual_policy' ).find( '.second-column' ).css( 'display', 'block' );
this.edit_view_tab.find( '#tab_accrual_policy' ).find( '.first-column' ).removeClass( 'full-width-column' );
this.attachElement( 'contributing_shift_policy_id' );
this.attachElement( 'separated_1' );
this.attachElement( 'minimum_employed_days' );
this.detachElement( 'enable_opening_balance' );
this.detachElement( 'enable_pro_rate_initial_period' );
this.detachElement( 'apply_frequency_id' );
this.onApplyFrequencyChange( false );
}
this.editFieldResize();
this.setAccrualRageFormat();
}
setAccrualRageFormat( type ) {
var len = this.editor.rows_widgets_array.length;
for ( var i = 0; i < len; i++ ) {
var row = this.editor.rows_widgets_array[i];
if ( this.current_edit_record['type_id'] == 30 ) {
row.accrual_rate_hourly.show();
row.accrual_rate_yearly.hide();
} else {
row.accrual_rate_yearly.show();
row.accrual_rate_hourly.hide();
}
}
var td = $( '.inside-editor-render' ).children().eq( 0 ).children().eq( 0 ).children().eq( 1 );
if ( this.current_edit_record['type_id'] == 30 ) {
td.text( $.i18n._( 'Accrual Rate/Hour' ) );
$( '.annual-maximum-time-td' ).show();
} else {
td.text( $.i18n._( 'Accrual Rate/Year' ) );
$( '.annual-maximum-time-td' ).hide();
}
}
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();
}
if ( key === 'apply_frequency_id' ) {
this.onApplyFrequencyChange();
}
if ( key === 'apply_frequency_hire_date' ) {
this.onApplyFrequencyHireDate();
}
if ( key === 'milestone_rollover_hire_date' ) {
this.onMilestoneRolloverHireDate();
}
if ( !doNotValidate ) {
this.validate();
}
}
isDisplayLengthOfServiceHoursBasedOn() {
var len = this.editor.rows_widgets_array.length;
var count = 0;
for ( var i = 0; i < len; i++ ) {
var row = this.editor.rows_widgets_array[i];
if ( row['length_of_service_unit_id'].getValue() == 50 ) {
count++;
}
}
if ( count === 0 ) {
this.detachElement( 'length_of_service_contributing_pay_code_policy_id' );
this.edit_view_tab.find( '#tab_length_of_service_milestones' ).find( '.first-column' ).css( 'border', 'none' );
} else {
this.attachElement( 'length_of_service_contributing_pay_code_policy_id' );
this.edit_view_tab.find( '#tab_length_of_service_milestones' ).find( '.first-column' ).css( 'border', '1px solid #c7c7c7' );
}
}
insideEditorSetValue( val ) {
var len = val.length;
this.removeAllRows();
for ( var i = 0; i < val.length; i++ ) {
if ( Global.isSet( val[i] ) ) {
var row = val[i];
if ( Global.isSet( this.parent_id ) ) {
row['id'] = '';
}
this.addRow( row );
}
}
}
insideEditorAddRow( data, index ) {
if ( !data ) {
data = {};
}
var row_id = ( data.id && this.parent_controller.current_edit_record.id ) ? data.id : TTUUID.generateUUID();
var $this = this;
var row = this.getRowRender(); //Get Row render
var render = this.getRender(); //get render, should be a table
var widgets = {}; //Save each row's widgets
//Build row widgets
var form_item_input;
var widgetContainer;
// Length Of Service
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
var label_1 = $( '<span class=\'widget-right-label\'> ' + $.i18n._( 'After' ) + ': ' + ' </span>' );
var label_2 = $( '<span class=\'widget-right-label\'>&nbsp;</span>' );
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'length_of_service', width: 30 } );
form_item_input.setValue( data.length_of_service ? data.length_of_service : 0 );
form_item_input.attr( 'milestone_id', row_id );
this.setWidgetEnableBaseOnParentController( form_item_input );
var form_item_combobox = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_combobox.TComboBox( { field: 'length_of_service_unit_id' } );
form_item_combobox.setSourceData( this.parent_controller.length_of_service_unit_array );
form_item_combobox.setValue( data.length_of_service_unit_id ? data.length_of_service_unit_id : 10 );
form_item_combobox.bind( 'formItemChange', function( e, target ) {
$this.parent_controller.isDisplayLengthOfServiceHoursBasedOn();
} );
this.setWidgetEnableBaseOnParentController( form_item_input );
this.setWidgetEnableBaseOnParentController( form_item_combobox );
widgetContainer.append( label_1 );
widgetContainer.append( form_item_input );
widgetContainer.append( label_2 );
widgetContainer.append( form_item_combobox );
widgets[form_item_input.getField()] = form_item_input;
widgets[form_item_combobox.getField()] = form_item_combobox;
row.children().eq( 0 ).append( widgetContainer );
// Accrual Rate/Year
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
form_item_input.TTextInput( { field: 'accrual_rate_hourly', width: 90, need_parser_sec: false } );
form_item_input.setPlaceHolder( '' );
form_item_input.setValue( data.accrual_rate ? data.accrual_rate : '0.000' );
widgetContainer.append( form_item_input );
widgets[form_item_input.getField()] = form_item_input;
row.children().eq( 1 ).append( widgetContainer );
this.setWidgetEnableBaseOnParentController( form_item_input );
widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( {
field: 'accrual_rate_yearly',
width: 90,
mode: 'time_unit',
need_parser_sec: true
} );
form_item_input.setValue( data.accrual_rate ? data.accrual_rate : '0' );
widgetContainer.append( form_item_input );
widgets[form_item_input.getField()] = form_item_input;
row.children().eq( 1 ).append( widgetContainer );
this.setWidgetEnableBaseOnParentController( form_item_input );
if ( data.type_id == 30 ) {
widgets.accrual_rate_hourly.show();
widgets.accrual_rate_yearly.hide();
} else {
widgets.accrual_rate_yearly.show();
widgets.accrual_rate_hourly.hide();
}
//Annual Accrual Maximum
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( {
field: 'annual_maximum_time',
width: 90,
mode: 'time_unit',
need_parser_sec: true
} );
form_item_input.setValue( data.annual_maximum_time ? data.annual_maximum_time : '0' );
widgets[form_item_input.getField()] = form_item_input;
row.children().eq( 2 ).append( form_item_input );
this.setWidgetEnableBaseOnParentController( form_item_input );
// Accrual Total Maximum
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'maximum_time', width: 90, mode: 'time_unit', need_parser_sec: true } );
form_item_input.setValue( data.maximum_time ? data.maximum_time : '0' );
widgets[form_item_input.getField()] = form_item_input;
row.children().eq( 3 ).append( form_item_input );
this.setWidgetEnableBaseOnParentController( form_item_input );
// Annual Maximum Rollover
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'rollover_time', width: 90, mode: 'time_unit', need_parser_sec: true } );
form_item_input.setValue( data.rollover_time ? data.rollover_time : '0' );
widgets[form_item_input.getField()] = form_item_input;
row.children().eq( 4 ).append( form_item_input );
this.setWidgetEnableBaseOnParentController( form_item_input );
if ( typeof index != 'undefined' ) {
row.insertAfter( $( render ).find( 'tr' ).eq( index ) );
this.rows_widgets_array.splice( ( index ), 0, widgets );
} else {
$( render ).append( row );
this.rows_widgets_array.push( widgets );
}
if ( this.parent_controller.is_viewing ) {
row.find( '.control-icon' ).hide();
}
this.addIconsEvent( row ); //Bind event to add and minus icon
this.removeLastRowLine();
this.parent_controller.setAccrualRageFormat();
}
insideEditorRemoveRow( row ) {
var index = row[0].rowIndex - 1;
var remove_id = this.rows_widgets_array[index].length_of_service.attr( 'milestone_id' );
if ( remove_id && TTUUID.isUUID( remove_id ) && remove_id != TTUUID.not_exist_id && remove_id != TTUUID.zero_id ) {
this.delete_ids.push( remove_id );
}
row.remove();
this.rows_widgets_array.splice( index, 1 );
this.removeLastRowLine();
this.parent_controller.isDisplayLengthOfServiceHoursBasedOn();
}
insideEditorGetValue( current_edit_item_id ) {
var len = this.rows_widgets_array.length;
var result = [];
for ( var i = 0; i < len; i++ ) {
var row = this.rows_widgets_array[i];
var accrual_rate = 0;
if ( this.parent_controller.current_edit_record.type_id == 30 ) {
accrual_rate = row.accrual_rate_hourly.getValue();
} else {
accrual_rate = row.accrual_rate_yearly.getValue();
}
var data = {
length_of_service: row.length_of_service.getValue(),
length_of_service_unit_id: row.length_of_service_unit_id.getValue(),
accrual_rate: accrual_rate,
maximum_time: row.maximum_time.getValue(),
rollover_time: row.rollover_time.getValue()
};
if ( this.parent_controller.current_edit_record.type_id == 30 ) {
data.annual_maximum_time = row.annual_maximum_time.getValue();
}
data.id = row.length_of_service.attr( 'milestone_id' );
data.accrual_policy_id = current_edit_item_id;
result.push( data );
}
return result;
}
setEditViewDataDone() {
super.setEditViewDataDone();
this.onApplyFrequencyChange();
this.onTypeChange();
this.onMilestoneRolloverHireDate();
this.initInsideEditorData();
}
initInsideEditorData() {
var $this = this;
var args = {};
args.filter_data = {};
if ( this.mass_edit || ( ( !this.current_edit_record || !this.current_edit_record.id ) && !this.copied_record_id ) ) {
$this.editor.removeAllRows();
$this.editor.addRow();
$this.isDisplayLengthOfServiceHoursBasedOn();
$this.original_milestone_data = [];
} else {
args.filter_data.accrual_policy_id = this.current_edit_record.id ? this.current_edit_record.id : this.copied_record_id;
this.copied_record_id = '';
this.accrual_policy_milestone_api.getAccrualPolicyMilestone( args, true, {
onResult: function( res ) {
if ( !$this.edit_view ) {
return;
}
var data = res.getResult();
if ( data === true ) { // result is null
$this.original_milestone_data = [];
$this.editor.addRow();
} else if ( data.length > 0 ) {
$this.original_milestone_data = _.map(data, _.clone);
$this.editor.setValue( data );
}
$this.isDisplayLengthOfServiceHoursBasedOn();
}
} );
}
// if ( !accrual_policy_id ) {
// this.editor.removeAllRows();
// this.editor.addRow();
//
// } else {
// args.filter_data.accrual_policy_id = accrual_policy_id;
// this.accrual_policy_milestone_api.getAccrualPolicyMilestone( args, true, {onResult: function( res ) {
// var data = res.getResult();
// if ( data === true ) { // result is null
// $this.editor.addRow();
// } else if ( data.length > 0 ) {
// $this.editor.setValue( data );
// }
//
// }} );
// }
}
saveInsideEditorData( result, callBack ) {
var $this = this;
var data = this.editor.getValue( this.refresh_id );
var remove_ids = $this.editor.delete_ids;
if ( remove_ids.length > 0 ) {
$this.accrual_policy_milestone_api.deleteAccrualPolicyMilestone( remove_ids, {
onResult: function( res ) {
if ( res.isValid() ) {
$this.editor.delete_ids = [];
}
}
} );
}
let changed_data = this.getChangedRecords( data, this.original_milestone_data, [] );
if ( Array.isArray( changed_data ) && changed_data.length > 0 ) {
$this.accrual_policy_milestone_api.setAccrualPolicyMilestone( changed_data, {
onResult: function( res ) {
var res_data = res.getResult();
if ( Global.isSet( result ) ) {
result();
}
}
} );
} else {
if ( Global.isSet( result ) ) {
result();
}
}
}
onSaveResult( result ) {
if ( result.isValid() ) {
var result_data = result.getResult();
if ( result_data === true ) {
this.refresh_id = this.current_edit_record.id; // as add
} else if ( result_data && TTUUID.isUUID( result_data ) && result_data != TTUUID.not_exist_id && result_data != TTUUID.zero_id ) {
this.refresh_id = result_data;
}
if ( this.is_mass_editing == false ) {
var $this = this;
$this.saveInsideEditorData( function() {
$this.search();
$this.onSaveDone( result );
$this.removeEditView();
} );
} else {
this.search();
this.onSaveDone( result );
this.removeEditView();
}
} else {
this.setErrorMenu();
this.setErrorTips( result );
}
}
removeEditView() {
super.removeEditView();
this.sub_accrual_policy_user_modifier_view_controller = null;
}
// onSaveAndContinueResult( result ) {
//
// var $this = this;
// if ( result.isValid() ) {
// var result_data = result.getResult();
// if ( result_data === true ) {
// $this.refresh_id = $this.current_edit_record.id;
//
// } else if ( result_data && TTUUID.isUUID( result_data ) && result_data != TTUUID.not_exist_id && result_data != TTUUID.zero_id ) { // as new
// $this.refresh_id = result_data;
// }
//
// $this.saveInsideEditorData( function() {
// $this.search( false );
// $this.onEditClick( $this.refresh_id, true );
//
// $this.onSaveAndContinueDone( result );
//
// } );
//
// } else {
// $this.setErrorTips( result );
// $this.setErrorMenu();
// }
// },
// onSaveAndNewResult: function( result ) {
// var $this = this;
// if ( result.isValid() ) {
// var result_data = result.getResult();
// if ( result_data === true ) {
// $this.refresh_id = $this.current_edit_record.id;
//
// } else if ( result_data && TTUUID.isUUID( result_data ) && result_data != TTUUID.not_exist_id && result_data != TTUUID.zero_id ) { // as new
// $this.refresh_id = result_data;
// }
//
// $this.saveInsideEditorData( function() {
// $this.search( false );
// $this.onAddClick( true );
//
// } );
// } else {
// $this.setErrorTips( result );
// $this.setErrorMenu();
// }
// },
onSaveAndCopyResult( result ) {
var $this = this;
if ( result.isValid() ) {
var result_data = result.getResult();
if ( result_data === true ) {
$this.refresh_id = $this.current_edit_record.id;
} else if ( result_data && TTUUID.isUUID( result_data ) && result_data != TTUUID.not_exist_id && result_data != TTUUID.zero_id ) {
$this.refresh_id = result_data;
}
$this.saveInsideEditorData( function() {
$this.search( false );
$this.onCopyAsNewClick();
} );
} else {
$this.setErrorTips( result );
$this.setErrorMenu();
}
}
// onSaveAndNextResult( result ) {
// var $this = this;
// if ( result.isValid() ) {
// var result_data = result.getResult();
// if ( result_data === true ) {
// $this.refresh_id = $this.current_edit_record.id;
//
// } else if ( result_data && TTUUID.isUUID( result_data ) && result_data != TTUUID.not_exist_id && result_data != TTUUID.zero_id ) {
// $this.refresh_id = result_data;
// }
//
// $this.saveInsideEditorData( function() {
// $this.onRightArrowClick();
// $this.search( false );
// $this.onSaveAndNextDone( result );
//
// } );
//
// } else {
// $this.setErrorTips( result );
// $this.setErrorMenu();
// }
// },
_continueDoCopyAsNew() {
LocalCacheData.current_doing_context_action = 'copy_as_new';
this.is_add = true;
if ( Global.isSet( this.edit_view ) ) {
for ( var i = 0; i < this.editor.rows_widgets_array.length; i++ ) {
this.editor.rows_widgets_array[i].length_of_service.attr( 'milestone_id', '' );
}
}
super._continueDoCopyAsNew();
}
onCopyAsNewResult( result ) {
var $this = this;
var result_data = result.getResult();
if ( !result_data ) {
TAlertManager.showAlert( $.i18n._( 'Record does not exist' ) );
$this.onCancelClick();
return;
}
$this.openEditView(); // Put it here is to avoid if the selected one is not existed in data or have deleted by other pragram. in this case, the edit view should not be opend.
result_data = result_data[0];
this.copied_record_id = result_data.id;
result_data.id = '';
if ( $this.sub_view_mode && $this.parent_key ) {
result_data[$this.parent_key] = $this.parent_value;
}
$this.current_edit_record = result_data;
$this.initEditView();
}
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
} )
];
}
initSubAccrualPolicyUserModifier() {
var $this = this;
if ( Global.getProductEdition() <= 10 ) { //This must go before the current_edit_record.id check below, otherwise we return too early and it displays the wrong div.
this.edit_view_tab.find( '#tab_employee_settings' ).find( '.first-column-sub-view' ).css( 'display', 'none' );
this.edit_view.find( '.save-and-continue-div' ).css( 'display', 'none' );
this.edit_view.find( '.permission-defined-div' ).css( 'display', 'block' );
this.edit_view.find( '.permission-message' ).html( Global.getUpgradeMessage() );
} else {
this.edit_view_tab.find( '#tab_employee_settings' ).find( '.first-column-sub-view' ).css( 'display', 'block' );
this.edit_view.find( '.permission-defined-div' ).css( 'display', 'none' );
}
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_accrual_policy_user_modifier_view_controller ) {
this.sub_accrual_policy_user_modifier_view_controller.buildContextMenu( true );
this.sub_accrual_policy_user_modifier_view_controller.setDefaultMenu();
$this.sub_accrual_policy_user_modifier_view_controller.parent_key = 'accrual_policy_id';
$this.sub_accrual_policy_user_modifier_view_controller.parent_value = $this.current_edit_record.id;
$this.sub_accrual_policy_user_modifier_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_accrual_policy_user_modifier_view_controller.initData(); //Init data in this parent view
return;
}
if ( Global.getProductEdition() >= 15 ) {
Global.loadScript( 'views/policy/accrual_policy/AccrualPolicyUserModifierViewController.js', function() {
var tab_accrual_policy = $this.edit_view_tab.find( '#tab_employee_settings' );
var firstColumn = tab_accrual_policy.find( '.first-column-sub-view' );
Global.trackView( 'Sub' + 'AccrualPolicyUserModifier' + 'View' );
AccrualPolicyUserModifierViewController.loadSubView( firstColumn, beforeLoadView, afterLoadView );
} );
}
function beforeLoadView( tpl ) {
var args = { parent_view: 'accrual_policy' };
return { template: _.template( tpl ), args: args };
}
function afterLoadView( subViewController ) {
$this.sub_accrual_policy_user_modifier_view_controller = subViewController;
$this.sub_accrual_policy_user_modifier_view_controller.parent_key = 'accrual_policy_id';
$this.sub_accrual_policy_user_modifier_view_controller.parent_value = $this.current_edit_record.id;
$this.sub_accrual_policy_user_modifier_view_controller.parent_edit_record = $this.current_edit_record;
$this.sub_accrual_policy_user_modifier_view_controller.parent_view_controller = $this;
TTPromise.wait( 'BaseViewController', 'initialize', function() {
$this.sub_accrual_policy_user_modifier_view_controller.initData(); //Init data in this parent view
} );
}
}
getAccrualPolicyLengthOfServiceMilestonesTabHtml() {
return `<div id="tab_length_of_service_milestones" class="edit-view-tab-outside">
<div class="edit-view-tab" id="tab_length_of_service_milestones_content_div">
<div class="first-column full-width-column"></div>
<div class="inside-editor-div full-width-column">
</div>
</div>
</div>`;
}
}