1039 lines
30 KiB
JavaScript
1039 lines
30 KiB
JavaScript
import Decimal from 'decimal.js';
|
|
|
|
export class PayStubAmendmentViewController extends BaseViewController {
|
|
constructor( options = {} ) {
|
|
_.defaults( options, {
|
|
el: '#pay_stub_amendment_view_container',
|
|
|
|
user_status_array: null,
|
|
filtered_status_array: null,
|
|
type_array: null,
|
|
is_mass_adding: false,
|
|
|
|
user_api: null,
|
|
user_group_api: null,
|
|
user_wage_api: null,
|
|
} );
|
|
|
|
super( options );
|
|
}
|
|
|
|
init( options ) {
|
|
//this._super('initialize', options );
|
|
this.edit_view_tpl = 'PayStubAmendmentEditView.html';
|
|
this.permission_id = 'pay_stub_amendment';
|
|
this.viewId = 'PayStubAmendment';
|
|
this.script_name = 'PayStubAmendmentView';
|
|
this.table_name_key = 'pay_stub_amendment';
|
|
this.context_menu_name = $.i18n._( 'Pay Stub Amendment' );
|
|
this.navigation_label = $.i18n._( 'Pay Stub Amendment' );
|
|
this.api = TTAPI.APIPayStubAmendment;
|
|
this.user_api = TTAPI.APIUser;
|
|
this.user_group_api = TTAPI.APIUserGroup;
|
|
this.currency_api = TTAPI.APICurrency;
|
|
this.user_wage_api = TTAPI.APIUserWage;
|
|
|
|
this.render();
|
|
this.buildContextMenu();
|
|
|
|
this.initData();
|
|
}
|
|
|
|
initOptions() {
|
|
var $this = this;
|
|
|
|
var options = [
|
|
{ option_name: 'type', api: this.api },
|
|
{ option_name: 'status', field_name: 'user_status_id', api: this.user_api },
|
|
{ option_name: 'filtered_status', field_name: 'status_id', api: this.api },
|
|
];
|
|
|
|
this.initDropDownOptions( options );
|
|
|
|
this.user_group_api.getUserGroup( '', false, false, {
|
|
onResult: function( res ) {
|
|
res = res.getResult();
|
|
|
|
res = Global.buildTreeRecord( res );
|
|
$this.user_group_array = res;
|
|
|
|
if ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['group_id'] ) {
|
|
$this.basic_search_field_ui_dic['group_id'].setSourceData( res );
|
|
$this.adv_search_field_ui_dic['group_id'].setSourceData( res );
|
|
}
|
|
|
|
}
|
|
} );
|
|
|
|
this.api.getOptions( 'status', false, false, {
|
|
onResult: function( res ) {
|
|
var status_array = Global.buildRecordArray( res.getResult() );
|
|
|
|
if ( !$this.sub_view_mode && $this.basic_search_field_ui_dic['status_id'] ) {
|
|
$this.basic_search_field_ui_dic['status_id'].setSourceData( status_array );
|
|
if ( $this.adv_search_field_ui_dic['status_id'] ) {
|
|
$this.adv_search_field_ui_dic['status_id'].setSourceData( status_array );
|
|
}
|
|
}
|
|
|
|
}
|
|
} );
|
|
}
|
|
|
|
getUserHourlyRate( user_id ) {
|
|
var $this = this;
|
|
|
|
if ( !user_id ) {
|
|
user_id = this.current_edit_record['user_id'];
|
|
}
|
|
|
|
if ( TTUUID.isUUID( user_id ) == false || ( $.isArray( user_id ) && user_id.length != 1 ) ) {
|
|
user_id = TTUUID.zero_id;
|
|
}
|
|
|
|
//Last Wage record only.
|
|
this.user_wage_api.getUserWage( {
|
|
filter_data: {
|
|
user_id: user_id,
|
|
wage_group_id: TTUUID.zero_id
|
|
}
|
|
}, false, true, {
|
|
onResult: function( result ) {
|
|
var rate = '0.00';
|
|
|
|
var result_data = result.getResult();
|
|
if ( result_data && result_data.length > 0 ) {
|
|
result_data = result_data[0];
|
|
|
|
rate = result_data.hourly_rate;
|
|
}
|
|
|
|
$this.edit_view_ui_dic['rate'].setValue( rate );
|
|
$this.current_edit_record['rate'] = rate;
|
|
$this.calcAmount();
|
|
}
|
|
} );
|
|
}
|
|
|
|
getFilterColumnsFromDisplayColumns() {
|
|
|
|
var column_filter = {};
|
|
column_filter.is_owner = true;
|
|
column_filter.id = true;
|
|
column_filter.user_id = true;
|
|
column_filter.is_child = true;
|
|
column_filter.in_use = true;
|
|
column_filter.first_name = true;
|
|
column_filter.last_name = true;
|
|
column_filter.effective_date = true;
|
|
|
|
// Error: Unable to get property 'getGridParam' of undefined or null reference
|
|
var display_columns = [];
|
|
if ( this.grid ) {
|
|
display_columns = this.grid.getGridParam( 'colModel' );
|
|
}
|
|
if ( display_columns ) {
|
|
var len = display_columns.length;
|
|
|
|
for ( var i = 0; i < len; i++ ) {
|
|
var column_info = display_columns[i];
|
|
column_filter[column_info.name] = true;
|
|
}
|
|
}
|
|
|
|
return column_filter;
|
|
}
|
|
|
|
onReportPrintClick( key ) {
|
|
var $this = this;
|
|
|
|
var grid_selected_id_array;
|
|
|
|
var filter = {};
|
|
|
|
var ids = [];
|
|
|
|
var user_ids = [];
|
|
|
|
var base_date;
|
|
|
|
var pay_period_ids = [];
|
|
|
|
if ( $this.edit_view && $this.current_edit_record.id ) {
|
|
ids.push( $this.current_edit_record.id );
|
|
user_ids.push( $this.current_edit_record.user_id );
|
|
pay_period_ids.push( $this.current_edit_record.pay_period_id );
|
|
base_date = $this.current_edit_record.start_date;
|
|
} else {
|
|
grid_selected_id_array = this.getGridSelectIdArray();
|
|
$.each( grid_selected_id_array, function( index, value ) {
|
|
var grid_selected_row = $this.getRecordFromGridById( value );
|
|
ids.push( grid_selected_row.id );
|
|
user_ids.push( grid_selected_row.user_id );
|
|
pay_period_ids.push( grid_selected_row.pay_period_id );
|
|
base_date = grid_selected_row.start_date;
|
|
} );
|
|
}
|
|
|
|
var args = { filter_data: { id: ids } };
|
|
var post_data = { 0: args, 1: true, 2: key };
|
|
|
|
this.doFormIFrameCall( post_data );
|
|
}
|
|
|
|
getCustomContextMenuModel() {
|
|
var context_menu_model = {
|
|
exclude: [],
|
|
include: [
|
|
{
|
|
label: $.i18n._( 'Jump To' ),
|
|
id: 'jump_to_header',
|
|
menu_align: 'right',
|
|
action_group: 'jump_to',
|
|
action_group_header: true,
|
|
permission_result: false, // to hide it in legacy context menu and avoid errors in legacy parsers.
|
|
sort_order: 9050,
|
|
},
|
|
{
|
|
label: $.i18n._( 'TimeSheet' ),
|
|
id: 'timesheet',
|
|
menu_align: 'right',
|
|
action_group: 'jump_to',
|
|
group: 'navigation',
|
|
sort_order: 9050,
|
|
},
|
|
{
|
|
label: $.i18n._( 'Pay Stubs' ),
|
|
id: 'pay_stub',
|
|
menu_align: 'right',
|
|
action_group: 'jump_to',
|
|
group: 'navigation',
|
|
sort_order: 9050,
|
|
},
|
|
{
|
|
label: $.i18n._( 'Edit Employee' ),
|
|
id: 'edit_employee',
|
|
menu_align: 'right',
|
|
action_group: 'jump_to',
|
|
group: 'navigation',
|
|
sort_order: 9050,
|
|
},
|
|
{
|
|
label: $.i18n._( 'Import' ),
|
|
id: 'import_icon',
|
|
menu_align: 'right',
|
|
action_group: 'import_export',
|
|
group: 'other',
|
|
vue_icon: 'tticon tticon-file_download_black_24dp',
|
|
permission_result: PermissionManager.checkTopLevelPermission( 'ImportCSVPayStubAmendment' ),
|
|
sort_order: 9010
|
|
}
|
|
]
|
|
};
|
|
|
|
return context_menu_model;
|
|
}
|
|
|
|
setCustomDefaultMenuIcon( id, context_btn, grid_selected_length ) {
|
|
switch ( id ) {
|
|
case 'timesheet':
|
|
this.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'punch' );
|
|
break;
|
|
case 'pay_stub':
|
|
this.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'pay_stub' );
|
|
break;
|
|
case 'edit_employee':
|
|
this.setDefaultMenuEditIcon( context_btn, grid_selected_length, 'user' );
|
|
break;
|
|
case 'print_checks':
|
|
this.setDefaultMenuPrintChecksIcon( context_btn, grid_selected_length );
|
|
break;
|
|
case 'direct_deposit':
|
|
this.setDefaultMenuDirectDepositIcon( context_btn, grid_selected_length );
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Remove the copy button as it can never work due to API unique constraints.
|
|
setDefaultMenuCopyIcon( context_btn, grid_selected_length, pId ) {
|
|
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
|
|
}
|
|
|
|
setEditMenuCopyIcon( context_btn, grid_selected_length, pId ) {
|
|
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
|
|
}
|
|
|
|
/* jshint ignore:end */
|
|
setDefaultMenuViewIcon( context_btn, grid_selected_length, pId ) {
|
|
|
|
if ( pId === 'punch' || pId === 'schedule' || pId === 'pay_stub' ) {
|
|
super.setDefaultMenuViewIcon( context_btn, grid_selected_length, pId );
|
|
} else {
|
|
|
|
if ( !this.viewPermissionValidate( pId ) || this.edit_only_mode ) {
|
|
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
|
|
}
|
|
|
|
if ( grid_selected_length > 0 && this.viewOwnerOrChildPermissionValidate() ) {
|
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
|
|
} else {
|
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
setDefaultMenuPrintChecksIcon( context_btn, grid_selected_length, pId ) {
|
|
|
|
if ( grid_selected_length > 0 ) {
|
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
|
|
} else {
|
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
|
|
}
|
|
}
|
|
|
|
setDefaultMenuDirectDepositIcon( context_btn, grid_selected_length, pId ) {
|
|
|
|
if ( grid_selected_length > 0 ) {
|
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
|
|
} else {
|
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
|
|
}
|
|
}
|
|
|
|
setCustomEditMenuIcon( id, context_btn ) {
|
|
switch ( id ) {
|
|
case 'timesheet':
|
|
this.setEditMenuViewIcon( context_btn, 'punch' );
|
|
break;
|
|
case 'pay_stub':
|
|
this.setEditMenuViewIcon( context_btn, 'pay_stub' );
|
|
break;
|
|
case 'edit_employee':
|
|
this.setEditMenuViewIcon( context_btn, 'user' );
|
|
break;
|
|
case 'print_checks':
|
|
case 'direct_deposit':
|
|
this.setEditMenuViewIcon( context_btn );
|
|
break;
|
|
}
|
|
}
|
|
|
|
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 'user_id':
|
|
if ( $.isArray( this.current_edit_record.user_id ) && this.current_edit_record.user_id.length > 1 ) {
|
|
this.is_mass_adding = true;
|
|
} else {
|
|
this.is_mass_adding = false;
|
|
}
|
|
doNotValidate = true; //Don't validate since setCurrency() triggers calcAmount(), which changes the amount field asynchronously, only then should we validate.
|
|
this.setCurrency();
|
|
this.setEditMenu();
|
|
break;
|
|
case 'type_id':
|
|
this.onTypeChange();
|
|
break;
|
|
case 'rate':
|
|
case 'units':
|
|
case 'amount':
|
|
if ( this.is_mass_editing ) {
|
|
if ( target.isChecked() ) {
|
|
this.edit_view_ui_dic['rate'].setCheckBox( true );
|
|
this.edit_view_ui_dic['units'].setCheckBox( true );
|
|
this.edit_view_ui_dic['amount'].setCheckBox( true );
|
|
} else {
|
|
this.edit_view_ui_dic['rate'].setCheckBox( false );
|
|
this.edit_view_ui_dic['units'].setCheckBox( false );
|
|
this.edit_view_ui_dic['amount'].setCheckBox( false );
|
|
}
|
|
}
|
|
this.current_edit_record['amount'] = this.edit_view_ui_dic['amount'].getValue();
|
|
break;
|
|
}
|
|
|
|
if ( !doNotValidate ) {
|
|
this.validate();
|
|
}
|
|
}
|
|
|
|
onTypeChange() {
|
|
if ( this.current_edit_record.type_id == 10 ) {
|
|
this.detachElement( 'percent_amount' );
|
|
this.detachElement( 'percent_amount_entry_name_id' );
|
|
this.attachElement( 'rate' );
|
|
this.attachElement( 'units' );
|
|
this.attachElement( 'amount' );
|
|
|
|
} else if ( this.current_edit_record.type_id == 20 ) {
|
|
this.attachElement( 'percent_amount' );
|
|
this.attachElement( 'percent_amount_entry_name_id' );
|
|
this.detachElement( 'rate' );
|
|
this.detachElement( 'units' );
|
|
this.detachElement( 'amount' );
|
|
}
|
|
|
|
this.editFieldResize();
|
|
}
|
|
|
|
calcAmount() {
|
|
var widget_rate = this.edit_view_ui_dic['rate'];
|
|
var widget_units = this.edit_view_ui_dic['units'];
|
|
var widget_amount = this.edit_view_ui_dic['amount'];
|
|
|
|
if ( widget_rate && widget_rate.getValue().length > 0 && widget_units && widget_units.getValue().length > 0 ) {
|
|
//widget_amount.setValue( ( parseFloat( widget_rate.getValue() ) * parseFloat( widget_units.getValue() ) ).toFixed( 2 ) ); //This fails on 17.07 * 9.50 as it rounds to 162.16 rather than 162.17
|
|
//calc_amount = ( parseFloat( widget_rate.getValue() ) * parseFloat( widget_units.getValue() ) ); //This fails on 16.5 * 130.23
|
|
var calc_amount = new Decimal( parseFloat( widget_rate.getValue() ) ).mul( parseFloat( widget_units.getValue() ) ).toFixed( 4 ); //Need to use Decimal() class for proper money math operations
|
|
Debug.Text( 'Calculate Amount before rounding: ' + calc_amount, 'PayStubAmendmentViewController.js', 'PayStubAmendmentViewController', 'onFormItemKeyUp', 10 );
|
|
|
|
var round_decimal_places;
|
|
if ( this.currency_array && this.currency_array.round_decimal_places ) {
|
|
round_decimal_places = this.currency_array.round_decimal_places;
|
|
} else {
|
|
round_decimal_places = 2;
|
|
}
|
|
widget_amount.setValue( Global.MoneyRound( calc_amount, round_decimal_places ) );
|
|
} else {
|
|
if ( widget_amount && widget_amount.getValue() == '' ) {
|
|
widget_amount.setValue( '0.00' );
|
|
}
|
|
}
|
|
|
|
if ( !this.is_mass_editing && this.edit_view_ui_dic['amount'] && this.current_edit_record ) { //Make sure this is only done when editing a single record otherwise Mass Edit will default to changing the amount to 0.00.
|
|
this.current_edit_record['amount'] = this.edit_view_ui_dic['amount'].getValue(); //Update current record Amount, otherwise edit/save (without any changes) won't save the rounded value.
|
|
}
|
|
}
|
|
|
|
onRateOrUnitChange() {
|
|
var widget_rate = this.edit_view_ui_dic['rate'];
|
|
var widget_units = this.edit_view_ui_dic['units'];
|
|
var widget_amount = this.edit_view_ui_dic['amount'];
|
|
|
|
if ( widget_rate.getValue().length > 0 || widget_units.getValue().length > 0 ) {
|
|
widget_amount.setReadOnly( true );
|
|
} else {
|
|
widget_amount.setReadOnly( false );
|
|
}
|
|
}
|
|
|
|
onFormItemKeyUp( target ) {
|
|
this.onRateOrUnitChange();
|
|
this.calcAmount();
|
|
}
|
|
|
|
onFormItemKeyDown( target ) {
|
|
this.onRateOrUnitChange();
|
|
}
|
|
|
|
onCustomContextClick( id ) {
|
|
switch ( id ) {
|
|
case 'import_icon':
|
|
this.onImportClick();
|
|
break;
|
|
case 'timesheet':
|
|
case 'pay_stub':
|
|
case 'edit_employee':
|
|
this.onNavigationClick( id );
|
|
break;
|
|
}
|
|
}
|
|
|
|
onImportClick() {
|
|
|
|
var $this = this;
|
|
IndexViewController.openWizard( 'ImportCSVWizard', 'PayStubAmendment', function() {
|
|
$this.search();
|
|
} );
|
|
}
|
|
|
|
/* jshint ignore:start */
|
|
onNavigationClick( iconName ) {
|
|
|
|
var $this = this;
|
|
|
|
var grid_selected_id_array;
|
|
|
|
var filter = {};
|
|
|
|
var user_ids = [];
|
|
|
|
var ids = [];
|
|
|
|
var base_date;
|
|
|
|
if ( $this.edit_view && $this.current_edit_record.id ) {
|
|
ids.push( $this.current_edit_record.id );
|
|
user_ids.push( $this.current_edit_record.user_id );
|
|
base_date = $this.current_edit_record.effective_date;
|
|
} else {
|
|
grid_selected_id_array = this.getGridSelectIdArray();
|
|
$.each( grid_selected_id_array, function( index, value ) {
|
|
var grid_selected_row = $this.getRecordFromGridById( value );
|
|
ids.push( grid_selected_row.id );
|
|
user_ids.push( grid_selected_row.user_id );
|
|
base_date = grid_selected_row.effective_date;
|
|
} );
|
|
}
|
|
|
|
var args = { filter_data: { id: ids } };
|
|
|
|
switch ( iconName ) {
|
|
case 'timesheet':
|
|
if ( user_ids.length > 0 ) {
|
|
filter.user_id = user_ids[0];
|
|
filter.base_date = base_date;
|
|
Global.addViewTab( $this.viewId, $.i18n._( 'Pay Stub Amendments' ), window.location.href );
|
|
IndexViewController.goToView( 'TimeSheet', filter );
|
|
}
|
|
break;
|
|
case 'pay_stub':
|
|
if ( user_ids.length > 0 ) {
|
|
filter.filter_data = {};
|
|
filter.filter_data.user_id = user_ids[0];
|
|
Global.addViewTab( $this.viewId, $.i18n._( 'Pay Stub Amendments' ), window.location.href );
|
|
IndexViewController.goToView( 'PayStub', filter );
|
|
}
|
|
break;
|
|
case 'edit_employee':
|
|
if ( user_ids.length > 0 ) {
|
|
IndexViewController.openEditView( this, 'Employee', user_ids[0] );
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* jshint ignore:end */
|
|
onReportMenuClick( id ) {
|
|
this.onReportPrintClick( id );
|
|
}
|
|
|
|
//not currently called. are we reimplementing the eft code commented out above in this class?
|
|
doFormIFrameCall( postData ) {
|
|
Global.APIFileDownload( this.api.className, 'get' + this.api.key_name, postData );
|
|
}
|
|
|
|
setCurrency() {
|
|
var $this = this;
|
|
if ( Global.isSet( this.current_edit_record.user_id ) ) {
|
|
var filter = {};
|
|
filter.filter_data = { user_id: this.current_edit_record.user_id };
|
|
|
|
this.currency_api.getCurrency( filter, false, false, {
|
|
onResult: function( res ) {
|
|
res = res.getResult();
|
|
if ( Global.isArray( res ) ) {
|
|
$this.currency_array = res[0];
|
|
$this.calcAmount();
|
|
} else {
|
|
$this.currency_array = null;
|
|
}
|
|
}
|
|
} );
|
|
}
|
|
}
|
|
|
|
setCurrentEditRecordData() {
|
|
// When mass editing, these fields may not be the common data, so their value will be undefined, so this will cause their change event cannot work properly.
|
|
this.setDefaultData( {
|
|
'type_id': 10
|
|
} );
|
|
|
|
super.setCurrentEditRecordData();
|
|
}
|
|
|
|
setEditViewDataDone() {
|
|
super.setEditViewDataDone();
|
|
this.setCurrency();
|
|
this.onTypeChange();
|
|
this.onRateOrUnitChange();
|
|
}
|
|
|
|
validate() {
|
|
|
|
var $this = this;
|
|
|
|
var record = {};
|
|
|
|
var records_data = null;
|
|
|
|
if ( this.is_mass_editing ) {
|
|
for ( var key in this.edit_view_ui_dic ) {
|
|
//#2536 - Never send status_id to the API.
|
|
if ( key != 'status_id' ) {
|
|
var widget = this.edit_view_ui_dic[key];
|
|
|
|
if ( Global.isSet( widget.isChecked ) ) {
|
|
if ( widget.isChecked() && widget.getEnabled() ) {
|
|
record[key] = widget.getValue();
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
} else {
|
|
record = this.uniformVariable( this.current_edit_record );
|
|
}
|
|
|
|
var record = this.buildMassAddRecord( record );
|
|
|
|
this.api['validate' + this.api.key_name]( record, {
|
|
onResult: function( result ) {
|
|
$this.validateResult( result );
|
|
|
|
}
|
|
} );
|
|
}
|
|
|
|
removeEditView() {
|
|
this.is_mass_adding = false;
|
|
super.removeEditView();
|
|
}
|
|
|
|
buildMassAddRecord( record ) {
|
|
if ( $.isArray( record.user_id ) ) {
|
|
var records_data = [];
|
|
var length = record.user_id.length;
|
|
if ( length > 0 ) {
|
|
for ( var i = 0; i < length; i++ ) {
|
|
var record_data = Global.clone( record );
|
|
record_data.user_id = record.user_id[i];
|
|
records_data.push( record_data );
|
|
}
|
|
this.setEditMenu();
|
|
|
|
return this.uniformVariable( records_data );
|
|
|
|
} else {
|
|
record.user_id = record.user_id.toString();
|
|
}
|
|
|
|
}
|
|
|
|
return this.uniformVariable( record );
|
|
}
|
|
|
|
onSaveAndContinue( ignoreWarning ) {
|
|
var $this = this;
|
|
if ( !Global.isSet( ignoreWarning ) ) {
|
|
ignoreWarning = false;
|
|
}
|
|
this.is_changed = false;
|
|
this.is_add = false;
|
|
LocalCacheData.current_doing_context_action = 'save_and_continue';
|
|
|
|
var record = this.buildMassAddRecord( this.current_edit_record );
|
|
this.api['set' + this.api.key_name]( record, false, ignoreWarning, {
|
|
onResult: function( result ) {
|
|
$this.onSaveAndContinueResult( result );
|
|
|
|
}
|
|
} );
|
|
}
|
|
|
|
doSaveAPICall( record, ignoreWarning ) {
|
|
// #2644: We have to handle the record as though its a mass_add, as the awesomebox will always return an array of user_id's. Cannot force is_mass_adding, as this affects the save&continue button disabling.
|
|
record = this.buildMassAddRecord( record );
|
|
super.doSaveAPICall( record, ignoreWarning );
|
|
}
|
|
|
|
onSaveAndCopy( ignoreWarning ) {
|
|
var $this = this;
|
|
if ( !Global.isSet( ignoreWarning ) ) {
|
|
ignoreWarning = false;
|
|
}
|
|
this.is_add = true;
|
|
this.is_changed = false;
|
|
var record = this.current_edit_record;
|
|
LocalCacheData.current_doing_context_action = 'save_and_copy';
|
|
var records_data = null;
|
|
this.clearNavigationData();
|
|
|
|
var record = this.buildMassAddRecord( record );
|
|
|
|
this.api['set' + this.api.key_name]( record, false, ignoreWarning, {
|
|
onResult: function( result ) {
|
|
if ( result.isValid() ) {
|
|
var result_data = result.getResult();
|
|
if ( result_data === true ) {
|
|
$this.refresh_id = $this.current_edit_record.id;
|
|
|
|
} else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) {
|
|
$this.refresh_id = result_data;
|
|
}
|
|
$this.search( false );
|
|
$this.onCopyAsNewClick();
|
|
} else {
|
|
$this.setErrorTips( result );
|
|
$this.setErrorMenu();
|
|
}
|
|
|
|
}
|
|
} );
|
|
}
|
|
|
|
onSaveAndNewClick( ignoreWarning ) {
|
|
var $this = this;
|
|
if ( !Global.isSet( ignoreWarning ) ) {
|
|
ignoreWarning = false;
|
|
}
|
|
this.is_add = true;
|
|
var record = this.current_edit_record;
|
|
LocalCacheData.current_doing_context_action = 'new';
|
|
|
|
var records_data = null;
|
|
|
|
var record = this.buildMassAddRecord( record );
|
|
|
|
this.api['set' + this.api.key_name]( record, false, ignoreWarning, {
|
|
onResult: function( result ) {
|
|
if ( result.isValid() ) {
|
|
var result_data = result.getResult();
|
|
if ( result_data === true ) {
|
|
$this.refresh_id = $this.current_edit_record.id;
|
|
|
|
} else if ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) {
|
|
$this.refresh_id = result_data;
|
|
}
|
|
$this.search( false );
|
|
$this.onAddClick( true );
|
|
} else {
|
|
$this.setErrorTips( result );
|
|
$this.setErrorMenu();
|
|
}
|
|
|
|
}
|
|
} );
|
|
}
|
|
|
|
setEditMenuSaveAndContinueIcon( context_btn, pId ) {
|
|
this.saveAndContinueValidate( context_btn, pId );
|
|
|
|
if ( this.is_mass_adding || this.is_mass_editing || this.is_viewing || ( this.current_edit_record && Global.isArray( this.current_edit_record.user_id ) && this.current_edit_record.user_id.length > 1 ) ) {
|
|
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
|
|
}
|
|
}
|
|
|
|
buildEditViewUI() {
|
|
super.buildEditViewUI();
|
|
|
|
var $this = this;
|
|
var allow_multiple_selection = false;
|
|
|
|
var tab_model = {
|
|
'tab_pay_stub_amendment': { 'label': $.i18n._( 'Pay Stub Amendment' ) },
|
|
'tab_audit': true,
|
|
};
|
|
this.setTabModel( tab_model );
|
|
|
|
this.navigation.AComboBox( {
|
|
api_class: TTAPI.APIPayStubAmendment,
|
|
id: this.script_name + '_navigation',
|
|
allow_multiple_selection: false,
|
|
layout_name: 'global_pay_stub_amendment',
|
|
navigation_mode: true,
|
|
show_search_inputs: true
|
|
} );
|
|
|
|
this.setNavigation();
|
|
|
|
//Tab 0 start
|
|
|
|
var tab_pay_stub_amendment = this.edit_view_tab.find( '#tab_pay_stub_amendment' );
|
|
|
|
var tab_pay_stub_amendment_column1 = tab_pay_stub_amendment.find( '.first-column' );
|
|
|
|
this.edit_view_tabs[0] = [];
|
|
|
|
this.edit_view_tabs[0].push( tab_pay_stub_amendment_column1 );
|
|
|
|
if ( this.is_add ) {
|
|
allow_multiple_selection = true;
|
|
}
|
|
|
|
//Employee
|
|
|
|
var form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
|
|
form_item_input.AComboBox( {
|
|
api_class: TTAPI.APIUser,
|
|
allow_multiple_selection: allow_multiple_selection,
|
|
layout_name: 'global_user',
|
|
show_search_inputs: true,
|
|
set_empty: true,
|
|
field: 'user_id'
|
|
} );
|
|
|
|
var default_args = {};
|
|
default_args.permission_section = 'pay_stub_amendment';
|
|
form_item_input.setDefaultArgs( default_args );
|
|
|
|
this.addEditFieldToColumn( $.i18n._( 'Employee(s)' ), form_item_input, tab_pay_stub_amendment_column1, '' );
|
|
|
|
var args = {};
|
|
var filter_data = {};
|
|
filter_data.type_id = [10, 20, 30, 50, 60, 65, 80];
|
|
args.filter_data = filter_data;
|
|
|
|
// Pay Stub Account
|
|
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
|
|
form_item_input.AComboBox( {
|
|
api_class: TTAPI.APIPayStubEntryAccount,
|
|
allow_multiple_selection: false,
|
|
layout_name: 'global_PayStubAccount',
|
|
show_search_inputs: true,
|
|
set_empty: true,
|
|
field: 'pay_stub_entry_name_id',
|
|
validation_field: 'pay_stub_entry_name'
|
|
} );
|
|
|
|
form_item_input.setDefaultArgs( args );
|
|
this.addEditFieldToColumn( $.i18n._( 'Pay Stub Account' ), form_item_input, tab_pay_stub_amendment_column1 );
|
|
|
|
// Amount 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._( 'Amount Type' ), form_item_input, tab_pay_stub_amendment_column1 );
|
|
|
|
// Fixed
|
|
|
|
// Units
|
|
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
|
|
form_item_input.TTextInput( { field: 'units', width: 114, hasKeyEvent: true } );
|
|
this.addEditFieldToColumn( $.i18n._( 'Units' ), form_item_input, tab_pay_stub_amendment_column1, '', null, true, null, null, true );
|
|
|
|
// Rate
|
|
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
|
|
form_item_input.TTextInput( { field: 'rate', width: 114, hasKeyEvent: true } );
|
|
|
|
var widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
|
|
widgetContainer.append( form_item_input );
|
|
|
|
if ( !this.is_viewing ) {
|
|
var get_hourly_rate_btn = $( '<input class=\'t-button\' style=\'margin-left: 5px; height: 25px;\' type=\'button\' value=\'' + $.i18n._( 'Get Hourly Rate' ) + '\'></input>' );
|
|
get_hourly_rate_btn.click( function() {
|
|
$this.getUserHourlyRate();
|
|
} );
|
|
widgetContainer.append( get_hourly_rate_btn );
|
|
}
|
|
|
|
this.addEditFieldToColumn( $.i18n._( 'Rate' ), form_item_input, tab_pay_stub_amendment_column1, '', widgetContainer, true, null, null, true );
|
|
|
|
// Amount
|
|
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
|
|
|
|
form_item_input.TTextInput( { field: 'amount', width: 114 } );
|
|
this.addEditFieldToColumn( $.i18n._( 'Amount' ), form_item_input, tab_pay_stub_amendment_column1, '', null, true );
|
|
|
|
// Percent
|
|
|
|
//Percent
|
|
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
|
|
|
|
form_item_input.TTextInput( { field: 'percent_amount', width: 79 } );
|
|
this.addEditFieldToColumn( $.i18n._( 'Percent' ), form_item_input, tab_pay_stub_amendment_column1, '', null, true );
|
|
|
|
args = {};
|
|
filter_data = {};
|
|
filter_data.type_id = [10, 20, 30, 40, 50, 60, 65];
|
|
args.filter_data = filter_data;
|
|
|
|
// Percent of
|
|
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
|
|
form_item_input.AComboBox( {
|
|
api_class: TTAPI.APIPayStubEntryAccount,
|
|
allow_multiple_selection: false,
|
|
layout_name: 'global_PayStubAccount',
|
|
show_search_inputs: true,
|
|
set_empty: true,
|
|
field: 'percent_amount_entry_name_id'
|
|
} );
|
|
|
|
form_item_input.setDefaultArgs( args );
|
|
this.addEditFieldToColumn( $.i18n._( 'Percent of' ), form_item_input, tab_pay_stub_amendment_column1, '', null, true );
|
|
|
|
// Pay Stub Note (Public)
|
|
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
|
|
|
|
form_item_input.TTextInput( { field: 'description', width: '100%' } );
|
|
this.addEditFieldToColumn( $.i18n._( 'Pay Stub Note (Public)' ), form_item_input, tab_pay_stub_amendment_column1 );
|
|
|
|
form_item_input.parent().width( '45%' );
|
|
// Description (Private)
|
|
|
|
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_AREA );
|
|
|
|
form_item_input.TTextArea( { field: 'private_description' } );
|
|
this.addEditFieldToColumn( $.i18n._( 'Description (Private)' ), form_item_input, tab_pay_stub_amendment_column1, '', null, null, true );
|
|
|
|
// Effective Date
|
|
form_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );
|
|
|
|
form_item_input.TDatePicker( { field: 'effective_date' } );
|
|
this.addEditFieldToColumn( $.i18n._( 'Effective Date' ), form_item_input, tab_pay_stub_amendment_column1 );
|
|
|
|
// Year to Date (YTD) Adjustment -- DISABLED
|
|
//form_item_input = Global.loadWidgetByName( FormItemType.CHECKBOX );
|
|
//form_item_input.TCheckbox( {field: 'ytd_adjustment'} );
|
|
//this.addEditFieldToColumn( $.i18n._( 'Year to Date (YTD) Adjustment' ), form_item_input, tab_pay_stub_amendment_column1, '' );
|
|
}
|
|
|
|
buildSearchFields() {
|
|
|
|
super.buildSearchFields();
|
|
|
|
var default_args = {};
|
|
default_args.permission_section = 'pay_stub_amendment';
|
|
|
|
this.search_fields = [
|
|
|
|
new SearchField( {
|
|
label: $.i18n._( 'Status' ),
|
|
in_column: 1,
|
|
field: 'status_id',
|
|
multiple: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
layout_name: 'global_option_column',
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Pay Period' ),
|
|
in_column: 1,
|
|
field: 'pay_period_id',
|
|
layout_name: 'global_Pay_period',
|
|
api_class: TTAPI.APIPayPeriod,
|
|
multiple: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Employee' ),
|
|
in_column: 1,
|
|
field: 'user_id',
|
|
default_args: default_args,
|
|
layout_name: 'global_user',
|
|
api_class: TTAPI.APIUser,
|
|
multiple: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Pay Stub Account' ),
|
|
in_column: 1,
|
|
field: 'pay_stub_entry_name_id',
|
|
layout_name: 'global_PayStubAccount',
|
|
api_class: TTAPI.APIPayStubEntryAccount,
|
|
multiple: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Title' ),
|
|
field: 'title_id',
|
|
in_column: 1,
|
|
layout_name: 'global_job_title',
|
|
api_class: TTAPI.APIUserTitle,
|
|
multiple: true,
|
|
basic_search: false,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Employee Status' ),
|
|
in_column: 2,
|
|
field: 'user_status_id',
|
|
multiple: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
layout_name: 'global_option_column',
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Group' ),
|
|
in_column: 2,
|
|
multiple: true,
|
|
field: 'group_id',
|
|
layout_name: 'global_tree_column',
|
|
tree_mode: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Default Branch' ),
|
|
in_column: 2,
|
|
field: 'default_branch_id',
|
|
layout_name: 'global_branch',
|
|
api_class: TTAPI.APIBranch,
|
|
multiple: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
new SearchField( {
|
|
label: $.i18n._( 'Default Department' ),
|
|
field: 'default_department_id',
|
|
in_column: 2,
|
|
layout_name: 'global_department',
|
|
api_class: TTAPI.APIDepartment,
|
|
multiple: true,
|
|
basic_search: true,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} ),
|
|
|
|
new SearchField( {
|
|
label: $.i18n._( 'Created By' ),
|
|
in_column: 2,
|
|
field: 'created_by',
|
|
layout_name: 'global_user',
|
|
api_class: TTAPI.APIUser,
|
|
multiple: true,
|
|
basic_search: false,
|
|
adv_search: true,
|
|
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: false,
|
|
adv_search: true,
|
|
form_item_type: FormItemType.AWESOME_BOX
|
|
} )
|
|
];
|
|
}
|
|
|
|
uniformVariable( data ) {
|
|
if ( data.status_id ) {
|
|
delete data.status_id;
|
|
}
|
|
return super.uniformVariable( data );
|
|
}
|
|
|
|
copyAsNewResetIds( data ) {
|
|
data = this.uniformVariable( data );
|
|
data.id = null;
|
|
data.effective_date = ( new Date ).format( Global.getLoginUserDateFormat() );
|
|
return data;
|
|
}
|
|
|
|
}
|