TimeTrex/interface/html5/views/payroll/pay_stub/PayStubViewController.js

3051 lines
100 KiB
JavaScript
Raw Normal View History

2022-12-13 07:10:06 +01:00
import { Decimal } from 'decimal.js';
export class PayStubViewController extends BaseViewController {
constructor( options = {} ) {
_.defaults( options, {
el: '#pay_stub_view_container',
filtered_status_array: null,
user_status_array: null,
user_group_array: null,
user_destination_account_array: null,
currency_array: null,
type_array: null,
country_array: null,
province_array: null,
e_province_array: null,
user_api: null,
user_group_api: null,
company_api: null,
pay_stub_entry_api: null,
include_pay_stub_accounts: true,
transaction_status_array: false,
net_pay_amount: false,
pseal_link: false,
original_status_id: 10
} );
super( options );
}
init( options ) {
//this._super('initialize', options );
this.edit_view_tpl = 'PayStubEditView.html';
this.permission_id = 'pay_stub';
this.viewId = 'PayStub';
this.script_name = 'PayStubView';
this.table_name_key = 'pay_stub';
this.context_menu_name = $.i18n._( 'Pay Stub' );
this.navigation_label = $.i18n._( 'Pay Stubs' );
this.api = TTAPI.APIPayStub;
this.user_api = TTAPI.APIUser;
this.pay_stub_entry_api = TTAPI.APIPayStubEntry;
this.pay_stub_entry_account_link_api = TTAPI.APIPayStubEntryAccountLink;
this.user_group_api = TTAPI.APIUserGroup;
this.company_api = TTAPI.APICompany;
this.pay_period_api = TTAPI.APIPayPeriod;
this.pay_stub_transaction_api = TTAPI.APIPayStubTransaction;
this.remittance_destination_account_api = TTAPI.APIRemittanceDestinationAccount;
var $this = this;
$.when(
this.preloadTransactionOptions( new $.Deferred() ),
this.preloadPayStubAccountLinks( new $.Deferred() )
).done( function() {
$this.completeInit();
} );
}
isEditMode() {
if ( this.is_add || ( this.is_edit && this.original_status_id == 25 ) ) {
return true;
}
return false;
}
preloadTransactionOptions( dfd ) {
var $this = this;
this.pay_stub_transaction_api.getOptions( 'status', false, false, {
onResult: function( result ) {
$this.transaction_status_array = result.getResult();
dfd.resolve( true );
}
} );
return dfd.promise();
}
preloadPayStubAccountLinks( dfd ) {
var $this = this;
this.pay_stub_entry_account_link_api.getPayStubEntryAccountLink( '', false, false, {
onResult: function( result ) {
var data = result.getResult()[0];
if ( data ) {
$this.pseal_link = {
total_gross_entry_account_id: false,
total_deductions_entry_account_id: false,
net_pay_entry_account_id: false,
contributions_entry_account_id: false
};
$this.pseal_link.total_gross_entry_account_id = data.total_gross;
$this.pseal_link.total_deductions_entry_account_id = data.total_employee_deduction;
$this.pseal_link.net_pay_entry_account_id = data.total_net_pay;
$this.pseal_link.contributions_entry_account_id = data.total_employer_deduction;
}
dfd.resolve( true );
}
} );
return dfd.promise();
}
completeInit() {
this.initPermission();
this.render();
this.buildContextMenu();
this.initData();
}
initPermission() {
super.initPermission();
if ( PermissionManager.validate( this.permission_id, 'view' ) || PermissionManager.validate( this.permission_id, 'view_child' ) ) {
this.show_search_tab = true;
} else {
this.show_search_tab = false;
}
return {};
}
initOptions() {
var $this = this;
var options = [
{ option_name: 'filtered_status', field_name: 'status_id', api: this.api },
{ option_name: 'type', field_name: 'type_id', api: this.api },
{ option_name: 'status', field_name: 'user_status_id', api: this.user_api },
{ option_name: 'country', field_name: 'country', api: this.company_api },
];
this.initDropDownOptions( options );
var result = {};
for ( var i = 1; i <= 128; i++ ) {
result[i] = i;
}
$this.basic_search_field_ui_dic['run_id'].setSourceData( Global.buildRecordArray( result ) );
$this.adv_search_field_ui_dic['run_id'].setSourceData( Global.buildRecordArray( result ) );
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 );
}
}
} );
}
getCustomContextMenuModel() {
var context_menu_model = {
groups: {
pay_stubs: {
label: $.i18n._( 'Pay Stubs' ),
id: this.script_name + 'Pay Stubs'
}
},
exclude: [
'copy',
'save_and_new',
'save_and_copy',
],
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.
},
{
label: $.i18n._( 'TimeSheet' ),
id: 'timesheet',
menu_align: 'right',
action_group: 'jump_to',
group: 'navigation',
},
{
label: $.i18n._( 'Schedule' ),
id: 'schedule',
menu_align: 'right',
action_group: 'jump_to',
group: 'navigation',
},
{
label: $.i18n._( 'Pay Stub Amendments' ),
id: 'pay_stub_amendment',
menu_align: 'right',
action_group: 'jump_to',
group: 'navigation',
},
{
label: $.i18n._( 'Pay Stub Transactions' ),
id: 'pay_stub_transaction',
menu_align: 'right',
action_group: 'jump_to',
group: 'navigation',
items: [], // TODO: Is this still needed? It interferes with PrimeVue as it thinks its a submenu but wrong format, but I cant see anywhere this code is used, other than for Print menu.
permission_result: true,
permission: true,
sort_order: null
},
{
label: $.i18n._( 'Edit Employee' ),
id: 'edit_employee',
menu_align: 'right',
action_group: 'jump_to',
group: 'navigation',
},
{
label: $.i18n._( 'Edit Pay Period' ),
id: 'edit_pay_period',
menu_align: 'right',
action_group: 'jump_to',
group: 'navigation',
},
{
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._( 'View: Employee Pay Stubs' ),
id: 'employee_pay_stubs',
menu_align: 'right',
action_group: 'other',
},
{
label: $.i18n._( 'View: Employer Pay Stubs' ),
id: 'employer_pay_stubs',
menu_align: 'right',
action_group: 'other',
},
{
label: $.i18n._( 'Generate Pay Stub' ),
id: 'generate_pay_stub',
menu_align: 'right',
action_group: 'other',
},
{
label: $.i18n._( 'Process Transactions' ),
id: 'direct_deposit',
menu_align: 'right',
action_group: 'other',
icon: 'direct_deposit-35x35.png',
items: [],
permission_result: true,
permission: true
},
]
};
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 'schedule':
this.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'schedule' );
break;
case 'pay_stub_amendment':
this.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'pay_stub_amendment' );
break;
case 'pay_stub_transaction':
this.setDefaultMenuViewIcon( context_btn, grid_selected_length, 'pay_stub_transaction' );
break;
case 'edit_employee':
this.setDefaultMenuEditEmployeeIcon( context_btn, grid_selected_length, 'user' );
break;
case 'edit_pay_period':
this.setDefaultMenuEditPayPeriodIcon( context_btn, grid_selected_length );
break;
case 'employee_pay_stubs':
case 'employer_pay_stubs':
case 'print_checks':
case 'direct_deposit':
this.setDefaultMenuReportRelatedIcons( context_btn, grid_selected_length );
break;
case 'generate_pay_stub':
this.setDefaultMenuGeneratePayStubIcon( context_btn, grid_selected_length );
break;
}
}
setDefaultMenuEditPayPeriodIcon( context_btn, grid_selected_length, pId ) {
if ( !this.editPermissionValidate( 'pay_period_schedule' ) ) {
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 );
}
}
setDefaultMenuEditEmployeeIcon( context_btn, grid_selected_length ) {
if ( !this.editChildPermissionValidate( 'user' ) ) {
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 );
}
}
setDefaultMenuViewIcon( context_btn, grid_selected_length, pId ) {
if ( pId === 'punch' || pId === 'schedule' || pId === 'pay_stub_amendment' ) {
super.setDefaultMenuViewIcon( context_btn, grid_selected_length, pId );
} else if ( pId === 'pay_stub_transaction' ) {
if ( PermissionManager.validate( 'pay_stub', 'enabled' )
&& ( PermissionManager.validate( 'pay_stub', 'view' ) || PermissionManager.validate( 'pay_stub', 'view_child' ) ) ) {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
} else {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
}
} 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 );
}
}
}
setCustomEditMenuIcon( id, context_btn ) {
switch ( id ) {
case 'timesheet':
this.setEditMenuViewIcon( context_btn, 'punch' );
break;
case 'schedule':
this.setEditMenuViewIcon( context_btn, 'schedule' );
break;
case 'pay_stub_amendment':
this.setEditMenuViewIcon( context_btn, 'pay_stub_amendment' );
break;
case 'pay_stub_transaction':
this.setEditMenuViewIcon( context_btn, 'pay_stub_transaction' );
break;
case 'edit_employee':
this.setEditMenuViewIcon( context_btn, 'user' );
break;
case 'edit_pay_period':
this.setEditMenuViewIcon( context_btn, 'pay_period_schedule' );
break;
case 'view':
case 'employer_pay_stubs':
case 'employee_pay_stubs':
case 'print_checks':
case 'direct_deposit':
//this.setEditMenuReportRelatedIcons( context_btn );
this.setEditMenuEditIcon( context_btn );
break;
case 'generate_pay_stub':
this.setEditMenuGeneratePayStubIcon( context_btn );
break;
}
}
payStubReportIconsValidate() {
if ( !PermissionManager.validate( 'pay_stub', 'enabled' ) ) {
return false;
}
var selected_item = this.getSelectedItem();
if ( PermissionManager.validate( 'pay_stub', 'view' ) || this.ownerOrChildPermissionValidate( 'pay_stub', 'view_child', selected_item ) ) {
return true;
}
return false;
}
setDefaultMenuReportRelatedIcons( context_btn, grid_selected_length, pId ) {
if ( !this.payStubReportIconsValidate() ) {
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 );
}
}
setEditMenuReportRelatedIcons( context_btn, grid_selected_length, pId ) {
if ( !this.payStubReportIconsValidate() ) {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
}
if ( this.current_edit_record.id && this.viewOwnerOrChildPermissionValidate() ) {
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, true );
} else {
ContextMenuManager.disableMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false );
}
}
setEditMenuGeneratePayStubIcon( context_btn, grid_selected_length, pId ) {
if ( !PermissionManager.checkTopLevelPermission( 'GeneratePayStubs' ) ) {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
}
}
setDefaultMenuGeneratePayStubIcon( context_btn, grid_selected_length, pId ) {
if ( !PermissionManager.checkTopLevelPermission( 'GeneratePayStubs' ) ) {
ContextMenuManager.hideMenuItem( this.determineContextMenuMountAttributes().id, context_btn.id, false )
}
}
removeEntryInsideEditorCover() {
if ( this.cover && this.cover.length > 0 ) {
this.cover.remove();
}
this.cover = null;
}
setCurrentEditRecordData() {
this.include_pay_stub_accounts = true;
//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 ) {
case 'country':
this.setCountryValue( widget, key );
break;
case 'status_id':
if ( this.current_edit_record[key] == 40 || this.current_edit_record[key] == 100 ) {
this.include_pay_stub_accounts = false;
}
widget.setValue( this.current_edit_record[key] );
break;
default:
widget.setValue( this.current_edit_record[key] );
break;
}
}
}
this.collectUIDataToCurrentEditRecord();
this.setEditViewDataDone();
}
setEditViewDataDone() {
super.setEditViewDataDone();
if ( this.is_add ) {
this.edit_view_ui_dic.user_id.setEnabled( true );
} else {
this.edit_view_ui_dic.user_id.setEnabled( false );
}
if ( !this.is_mass_editing ) {
this.initInsideEntryEditorData();
}
}
getPayStubTransactionDefaultData( callback, index ) {
this.pay_stub_transaction_api['get' + this.pay_stub_transaction_api.key_name + 'DefaultData']( {
onResult: function( result ) {
var data = [];
var result_data = result.getResult();
result_data.id = false;
data.push( result_data );
callback( data, index );
}
} );
}
getPayStubTransaction( callback ) {
var $this = this;
var args = {};
args.filter_data = {};
args.filter_data.pay_stub_id = TTUUID.isUUID( this.current_edit_record.id ) ? this.current_edit_record.id : ( TTUUID.isUUID( this.copied_record_id ) ? this.copied_record_id : '' );
this.pay_stub_transaction_api['getPayStubTransaction']( args, true, {
onResult: function( res ) {
if ( !$this.edit_view ) {
return;
}
var result_data = res.getResult();
if ( _.size( result_data ) == 0 ) {
result_data = [];
}
callback( result_data );
}
} );
}
initInsideTransactionEditorData() {
var $this = this;
if ( ( !this.current_edit_record || TTUUID.isUUID( this.current_edit_record.id ) == false ) && !this.copied_record_id ) {
this.getPayStubTransactionDefaultData( function( data ) {
if ( $this.isEditMode() == true || data.length > 0 ) {
$this.editor.transaction_data = data;
} else {
$this.editor.transaction_data = false;
}
//Issue #2890 - Having a promise resolve after the API call for getting transaction data and storing that data
//to be used later while building the HTML. This stops this API call from being delayed and causing unintended issues
//with duplicating transactions, overlays and data sync issues.
TTPromise.resolve( 'PayStubViewController', 'insideEditorDataLoaded' );
} );
} else {
this.getPayStubTransaction( function( data ) {
if ( $this.isEditMode() == true || data.length > 0 ) {
$this.editor.transaction_data = data;
} else {
$this.editor.transaction_data = false;
}
//Issue #2890 - Having a promise resolve after the API call for getting transaction data and storing that data
//to be used later while building the HTML. This stops this API call from being delayed and causing unintended issues
//with duplicating transactions, overlays and data sync issues.
TTPromise.resolve( 'PayStubViewController', 'insideEditorDataLoaded' );
} );
}
}
initInsideEntryEditorData() {
TTPromise.add( 'PayStubViewController', 'insideEditorDataLoaded' );
var $this = this;
var args = {};
args.filter_data = {};
if ( this.copied_record_id || ( this.current_edit_record && this.current_edit_record.id ) ) {
args.filter_data.pay_stub_id = TTUUID.isUUID( this.current_edit_record.id ) ? this.current_edit_record.id : this.copied_record_id;
this.pay_stub_entry_api['get' + this.pay_stub_entry_api.key_name]( args, {
onResult: function( res ) {
if ( !$this.edit_view ) {
return;
}
var data = $this.handlePayStubEntryData( res.getResult() );
TTPromise.wait( 'PayStubViewController', 'insideEditorDataLoaded', function() {
$this.editor.setValue( data );
} );
}
} );
} else {
var data = $this.handlePayStubEntryData();
TTPromise.wait( 'PayStubViewController', 'insideEditorDataLoaded', function() {
$this.editor.setValue( data );
} );
}
this.initInsideTransactionEditorData();
}
handlePayStubEntryData( data ) {
var total_rows = {};
var retval = {};
if ( data ) {
for ( var n in data ) {
var type_id = data[n].type_id;
if ( type_id == 40 ) {
if ( data[n].pay_stub_entry_account_id ) {
var newrow = data[n];
newrow.total_row = true;
total_rows[data[n].pay_stub_entry_account_id] = newrow[n];
}
} else {
if ( typeof retval[type_id] == 'undefined' ) {
retval[type_id] = [];
}
retval[type_id].push( data[n] );
}
}
}
//set blanks where there are no records in any given sections
var type_ids = [10, 20, 30, 50, 80]; //no net pay default row
for ( var t = 0; t < type_ids.length; t++ ) {
if ( typeof retval[type_ids[t]] == 'undefined' || retval[type_ids[t]].length == 0 ) {
retval[type_ids[t]] = [];
retval[type_ids[t]].push( { type_id: type_ids[t] } );
}
}
//Fill up the missing total rows.
var gross_total = {};
if ( total_rows[this.pseal_link.total_gross_entry_account_id] ) {
gross_total = total_rows[this.pseal_link.total_gross_entry_account_id];
} else {
gross_total = {
total_row: true,
type_id: 40,
name: $.i18n._( 'Total Gross' ),
pay_stub_entry_account_id: this.pseal_link.total_gross_entry_account_id
};
}
retval[10].push( gross_total );
var employee_deduction_total = {};
if ( total_rows[this.pseal_link.total_deductions_entry_account_id] ) {
employee_deduction_total = total_rows[this.pseal_link.total_deductions_entry_account_id];
} else {
employee_deduction_total = {
total_row: true,
type_id: 40,
name: $.i18n._( 'Total Deductions' ),
pay_stub_entry_account_id: this.pseal_link.total_deductions_entry_account_id
};
}
retval[20].push( employee_deduction_total );
var net_pay_total = {};
if ( total_rows[this.pseal_link.net_pay_entry_account_id] ) {
net_pay_total = total_rows[this.pseal_link.net_pay_entry_account_id];
} else {
net_pay_total = {
//total_row: true,
type_id: 40,
name: $.i18n._( 'Net Pay' ),
pay_stub_entry_account_id: this.pseal_link.net_pay_entry_account_id
};
}
//Because we don't add empty rows to retval[40], and there should only ever be one row in net pay, we will need to initialize retval[40] here.
retval[40] = net_pay_total;
var employer_deduction_total = {};
if ( total_rows[this.pseal_link.contributions_entry_account_id] ) {
employer_deduction_total = total_rows[this.pseal_link.contributions_entry_account_id];
} else {
employer_deduction_total = {
total_row: true,
type_id: 40,
name: $.i18n._( 'Employer Total Contributions' ),
pay_stub_entry_account_id: this.pseal_link.contributions_entry_account_id
};
}
retval[30].push( employer_deduction_total );
return retval;
}
insideEntryEditorSetValue( val ) {
var $this = this;
this.removeAllRows( true );
this.removeCover();
function setEarnings( data ) {
var render = $this.getRender(); //get render, should be a table
var headerRow = `
<tr class="tblHeader">
<td align="left" colspan="2"><%= col1 %></td>
<td> <%= col2 %></td>
<td> <%= col3 %></td>
<td> <%= col4 %></td>
<td> <%= col5 %></td>
<td> <%= col6 %></td>
<td colspan="" style="width:60px"></td>
</tr>`;
var args = {
col1: $.i18n._( 'Earnings' ),
col2: $.i18n._( 'Note' ),
col3: $.i18n._( 'Rate' ),
col4: $.i18n._( 'Hrs/Units' ),
col5: $.i18n._( 'Amount' ),
col6: $.i18n._( 'YTD Amount' )
};
var template = _.template( headerRow );
$( render ).append( template( args ) );
$this.rows_widgets_array.push( true );
for ( var i = 0; i < _.size( data ); i++ ) {
if ( Global.isSet( data[i] ) ) {
var row = data[i];
row.type_id = 10;
$this.addRow( row );
}
}
$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
$this.rows_widgets_array.push( true );
}
function getHeaderThreeColumn() {
return `
<tr class="tblHeader">
<td align="left" colspan="2"><%= col1 %></td>
<td colspan="3"> <%= col2 %></td>
<td> <%= col3 %></td>
<td> <%= col4 %></td>
<td colspan="" style="width: 30px"></td>
</tr>`;
}
function setDeductions( data ) {
var render = $this.getRender(); //get render, should be a table
var headerRow = getHeaderThreeColumn();
var args = {
col1: $.i18n._( 'Deductions' ),
col2: $.i18n._( 'Note' ),
col3: $.i18n._( 'Amount' ),
col4: $.i18n._( 'YTD Amount' )
};
var template = _.template( headerRow );
$( render ).append( template( args ) );
$this.rows_widgets_array.push( true );
for ( var i = 0; i < _.size( data ); i++ ) {
if ( Global.isSet( data[i] ) ) {
var row = data[i];
row.type_id = 20;
$this.addRow( row );
}
}
$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
$this.rows_widgets_array.push( true );
}
function setNetPay( data ) {
var render = $this.getRender(); //get render, should be a table
if ( data ) {
// data.type_id = 40;
$this.addRow( data );
}
$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
$this.rows_widgets_array.push( true );
}
function setMiscellaneous( data ) {
var render = $this.getRender(); //get render, should be a table
var headerRow = getHeaderThreeColumn();
var args = {
col1: $.i18n._( 'Miscellaneous' ),
col2: $.i18n._( 'Note' ),
col3: $.i18n._( 'Amount' ),
col4: $.i18n._( 'YTD Amount' )
};
var template = _.template( headerRow );
$( render ).append( template( args ) );
$this.rows_widgets_array.push( true );
for ( var i in data ) {
$this.addRow( data[i] );
}
$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
$this.rows_widgets_array.push( true );
}
function setEmployerContributions( data ) {
var render = $this.getRender(); //get render, should be a table
var headerRow = getHeaderThreeColumn();
var args = {
col1: $.i18n._( 'Employer Contributions' ),
col2: $.i18n._( 'Note' ),
col3: $.i18n._( 'Amount' ),
col4: $.i18n._( 'YTD Amount' )
};
var template = _.template( headerRow );
$( render ).append( template( args ) );
$this.rows_widgets_array.push( true );
for ( var i = 0; i < _.size( data ); i++ ) {
if ( Global.isSet( data[i] ) ) {
var row = data[i];
row.type_id = 30;
$this.addRow( row );
}
}
$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
$this.rows_widgets_array.push( true );
}
function setAccrual( data ) {
var render = $this.getRender(); //get render, should be a table
var headerRow = getHeaderThreeColumn();
var args = {
col1: $.i18n._( 'Accrual' ),
col2: $.i18n._( 'Note' ),
col3: $.i18n._( 'Amount' ),
col4: $.i18n._( 'Balance' )
};
var template = _.template( headerRow );
$( render ).append( template( args ) );
$this.rows_widgets_array.push( true );
for ( var i = 0; i < _.size( data ); i++ ) {
if ( Global.isSet( data[i] ) ) {
var row = data[i];
row.type_id = 50;
$this.addRow( row );
}
}
$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
$this.rows_widgets_array.push( true );
}
if ( this.parent_controller.isEditMode() == true || this.parent_controller.checkForNonHeaderData( val[10] ) ) {
setEarnings( val[10] );
}
if ( this.parent_controller.isEditMode() == true || this.parent_controller.checkForNonHeaderData( val[20] ) ) {
setDeductions( val[20] );
}
setNetPay( val[40] );
if ( this.parent_controller.isEditMode() == true || this.parent_controller.checkForNonHeaderData( val[80] ) ) {
setMiscellaneous( val[80] );
}
if ( this.parent_controller.isEditMode() == true || this.parent_controller.checkForNonHeaderData( val[30] ) ) {
setEmployerContributions( val[30] );
}
if ( this.parent_controller.isEditMode() == true || this.parent_controller.checkForNonHeaderData( val[50] ) ) {
setAccrual( val[50] );
}
if ( this.parent_controller.editor.transaction_data ) {
this.parent_controller.editor.insideTransactionEditorSetValue( this.parent_controller.editor.transaction_data );
}
if ( this.parent_controller.copied_record_id && TTUUID.isUUID( this.parent_controller.copied_record_id ) ) {
this.parent_controller.copied_record_id = '';
}
this.calcTotal();
}
checkForNonHeaderData( data ) {
for ( var n in data ) {
if ( TTUUID.isUUID( data[n].id ) == true ) {
return true;
}
}
return false;
}
insideEntryEditorAddRow( data, index ) {
var $this = this;
if ( !data ) {
$this.addRow( {}, index );
} else {
if ( typeof index != 'undefined' && typeof this.rows_widgets_array[index].ytd_amount != 'undefined' && !data['type_id'] ) {
data['type_id'] = this.rows_widgets_array[index].ytd_amount.attr( 'type_id' );
}
function renderColumns( data, type, index ) {
var render = $this.getRender(); //get render, should be a table
var widgets = {}; //Save each row's widgets
var row; //Get Row render
var widgetContainer = $( '<div class=\'widget-h-box\'></div>' );
var right_label;
var args = { filter_data: {} };
var pay_stub_amendment_id = '', user_expense_id = '';
var pay_stub_status_id = $this.parent_controller['current_edit_record']['status_id'];
var is_add = false;
if ( ( !$this.parent_controller['current_edit_record']['id'] && !$this.parent_controller.copied_record_id ) || ( !data.id ) ) {
is_add = true;
}
if ( pay_stub_status_id == 40 || pay_stub_status_id == 100 ) {
is_add = false;
}
if ( TTUUID.isUUID( data['pay_stub_amendment_id'] ) && data['pay_stub_amendment_id'] != TTUUID.zero_id ) {
pay_stub_amendment_id = data['pay_stub_amendment_id'];
}
if ( TTUUID.isUUID( data['user_expense_id'] ) && data['user_expense_id'] != TTUUID.zero_id ) {
user_expense_id = data['user_expense_id'];
}
if ( $this.parent_controller.copied_record_id ) {
pay_stub_amendment_id = '';
user_expense_id = '';
}
var row_enabled = true;
// if the pay_stub_amendment_id and user_expense_id all >0 how to display the right label?
if ( TTUUID.isUUID( pay_stub_amendment_id ) && pay_stub_amendment_id != TTUUID.zero_id ) {
right_label = $( '<span class=\'widget-right-label\'> (' + $.i18n._( 'Amendment' ) + ')</span>' );
row_enabled = false;
} else if ( TTUUID.isUUID( user_expense_id ) && user_expense_id != TTUUID.zero_id ) {
right_label = $( '<span class=\'widget-right-label\'> (' + $.i18n._( 'Expense' ) + ')</span>' );
row_enabled = false;
}
if ( type == 10 ) {
row = $( `<tr class="tblDataWhite" align="right">
<td align="left" colspan="2"></td>
<td class=""></td>
<td class=""></td>
<td class=""></td>
<td class=""></td>
<td class=""></td>
<td colspan="2" class="cell control-icon">
<div>
<button class="plus-icon" onclick=""></button>
<button class="minus-icon " onclick=""></button>
</div>
</td>
</tr>` );
} else {
row = $( `<tr class="tblDataWhite" align="right">
<td align="left" colspan="2"></td>
<td class="" colspan="3"></td>
<td class=""></td>
<td class=""></td>
<td colspan="2" class="cell control-icon" style="width: 30px">
<button class="plus-icon" onclick=""></button>
<button class="minus-icon " onclick=""></button>
</td>
</tr>` );
}
// Pay Stub Account
var form_item_name_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_name_input.AComboBox( {
api_class: TTAPI.APIPayStubEntryAccount,
width: 132,
is_static_width: 132,
allow_multiple_selection: false,
layout_name: 'global_PayStubAccount',
show_search_inputs: true,
set_empty: true,
field: 'pay_stub_entry_name_id'
} );
form_item_name_input.setValue( data.pay_stub_entry_name_id );
form_item_name_input.setEnabled( row_enabled );
form_item_name_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.onFormItemChange( target );
} );
var form_item_name_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_name_text.TText( { field: 'name' } );
form_item_name_text.setValue( data.name ? ( ( data['type_id'] != 40 ) ? ' ' + data.name : data.name ) : '' );
// Note(description)
var form_item_note_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_note_input.TTextInput( { field: 'description', width: 300, display_na: false } );
form_item_note_input.setValue( data.description );
form_item_note_input.attr( 'editable', true );
var form_item_note_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_note_text.TText( { field: 'description', display_na: false } );
form_item_note_text.setValue( data.description ? data.description : ' ' );
// Rate
var form_item_rate_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_rate_input.TTextInput( { field: 'rate', width: 60, hasKeyEvent: true } );
form_item_rate_input.setValue( Global.removeTrailingZeros( data.rate ) );
form_item_rate_input.attr( 'editable', true );
form_item_rate_input.unbind( 'formItemKeyUp' ).bind( 'formItemKeyUp', function( e, target ) {
$this.onFormItemKeyUp( target );
} );
form_item_rate_input.unbind( 'formItemKeyDown' ).bind( 'formItemKeyDown', function( e, target ) {
$this.onFormItemKeyDown( target );
} );
form_item_rate_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.onFormItemChange( target );
} );
var form_item_rate_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_rate_text.TText( { field: 'rate' } );
form_item_rate_text.setValue( Global.removeTrailingZeros( data.rate ) );
// Hrs/Units
var form_item_units_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_units_input.TTextInput( { field: 'units', width: 60, hasKeyEvent: true } );
form_item_units_input.setValue( Global.removeTrailingZeros( data.units ) );
form_item_units_input.attr( 'editable', true );
form_item_units_input.unbind( 'formItemKeyUp' ).bind( 'formItemKeyUp', function( e, target ) {
$this.onFormItemKeyUp( target );
} );
form_item_units_input.unbind( 'formItemKeyDown' ).bind( 'formItemKeyDown', function( e, target ) {
$this.onFormItemKeyDown( target );
} );
form_item_units_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.onFormItemChange( target );
} );
var form_item_units_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_units_text.TText( { field: 'units' } );
form_item_units_text.setValue( Global.removeTrailingZeros( data.units ) );
// Amount
var form_item_amount_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_amount_input.TTextInput( { field: 'amount', width: 60 } );
form_item_amount_input.setValue( Global.removeTrailingZeros( data.amount ) );
form_item_amount_input.unbind( 'formItemKeyUp' ).bind( 'formItemKeyUp', function( e, target ) {
$this.onFormItemKeyUp( target );
} );
form_item_amount_input.unbind( 'formItemKeyDown' ).bind( 'formItemKeyDown', function( e, target ) {
$this.onFormItemKeyDown( target );
} );
form_item_amount_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.onFormItemChange( target );
} );
var form_item_amount_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_amount_text.TText( { field: 'amount' } );
form_item_amount_text.setValue( Global.removeTrailingZeros( data.amount ) );
// YTD Amount
var form_item_ytd_amount_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_ytd_amount_text.TText( { field: 'ytd_amount' } );
form_item_ytd_amount_text.setValue( Global.removeTrailingZeros( data.ytd_amount ) );
form_item_ytd_amount_text.attr( {
'pay_stub_entry_id': ( data.id && $this.parent_controller.current_edit_record.id ) ? data.id : '',
'type_id': data['type_id'],
'original_amount': data['amount'] ? data['amount'] : '0.00',
'original_ytd_amount': data['ytd_amount'] ? data['ytd_amount'] : '0.00',
'pay_stub_entry_name_id': data['pay_stub_entry_name_id'] ? data['pay_stub_entry_name_id'] : null
} );
// if ( !$this.parent_controller.copied_record_id ) {
form_item_ytd_amount_text.attr( 'pay_stub_amendment_id', pay_stub_amendment_id );
form_item_ytd_amount_text.attr( 'user_expense_id', user_expense_id );
// }
if ( parseFloat( data['ytd_amount'] ) != 0 ) {
} else if ( pay_stub_status_id == 40 || pay_stub_status_id == 100 || data.total_row === true ) {
form_item_ytd_amount_text.text( '-' );
}
if ( data.rate && parseFloat( data.rate ) != 0 && !$this.parent_controller.copied_record_id ) {
form_item_amount_input.setReadOnly( true );
} else if ( pay_stub_status_id == 40 || pay_stub_status_id == 100 || data.total_row === true ) {
form_item_rate_text.text( '-' );
}
if ( data.units && parseFloat( data.units ) != 0 && !$this.parent_controller.copied_record_id ) {
form_item_amount_input.setReadOnly( true );
} else if ( pay_stub_status_id == 40 || pay_stub_status_id == 100 || data.total_row === true ) {
form_item_units_text.text( '-' );
}
// name
if ( type == 40 || data.total_row === true ) {
if ( data['type_id'] == 40 || data.total_row === true ) {
form_item_name_text.css( 'font-weight', 'bold' );
}
widgets[form_item_name_text.getField()] = form_item_name_text;
widgetContainer.append( form_item_name_text );
widgetContainer.append( right_label );
row.children().eq( 0 ).append( widgetContainer );
} else {
if ( $this.parent_controller.isEditMode() == true || index ) {
if ( data['type_id'] == 40 || data.total_row === true ) {
form_item_name_text.css( 'font-weight', 'bold' );
widgets[form_item_name_text.getField()] = form_item_name_text;
widgetContainer.append( form_item_name_text );
widgetContainer.append( right_label );
row.children().eq( 0 ).append( widgetContainer );
} else {
args['filter_data']['type_id'] = [type];
form_item_name_input.setDefaultArgs( args );
widgets[form_item_name_input.getField()] = form_item_name_input;
widgetContainer.append( form_item_name_input );
widgetContainer.append( right_label );
row.children().eq( 0 ).append( widgetContainer );
}
} else {
if ( data['type_id'] == 40 || data.total_row === true ) {
form_item_name_text.css( 'font-weight', 'bold' );
}
widgets[form_item_name_text.getField()] = form_item_name_text;
widgetContainer.append( form_item_name_text );
widgetContainer.append( right_label );
row.children().eq( 0 ).append( widgetContainer );
}
}
// Note
if ( ( data['type_id'] == type.toString() || data['type_id'] === type ) && type != 40 && !data.total_row ) {
if ( $this.parent_controller.isEditMode() == true ) {
if ( ( ( TTUUID.isUUID( pay_stub_amendment_id ) && pay_stub_amendment_id != TTUUID.zero_id ) || ( TTUUID.isUUID( user_expense_id ) && user_expense_id != TTUUID.zero_id ) ) ) {
form_item_note_input.setReadOnly( true );
}
widgets[form_item_note_input.getField()] = form_item_note_input;
row.children().eq( 1 ).append( form_item_note_input );
} else {
widgets[form_item_note_text.getField()] = form_item_note_text;
row.children().eq( 1 ).append( form_item_note_text );
}
} else {
if ( Global.isSet( index ) || is_add || ( _.size( data ) === 1 && ( $this.parent_controller.isEditMode() == true ) ) ) {
if ( ( data['type_id'] == 40 || data.total_row === true ) ) {
} else {
widgets[form_item_note_input.getField()] = form_item_note_input;
row.children().eq( 1 ).append( form_item_note_input );
}
} else if ( type == 20 || type == 30 || type == 50 || type == 80 ) {
widgets[form_item_note_text.getField()] = form_item_note_text;
row.children().eq( 1 ).append( form_item_note_text );
}
}
// amount
if ( ( data['type_id'] === type.toString() || data['type_id'] === type ) && type != 40 && !data.total_row ) {
if ( $this.parent_controller.isEditMode() == true ) {
if ( ( TTUUID.isUUID( pay_stub_amendment_id ) && pay_stub_amendment_id != TTUUID.zero_id ) || ( TTUUID.isUUID( user_expense_id ) && user_expense_id != TTUUID.zero_id ) ) {
form_item_amount_input.setReadOnly( true );
}
widgets[form_item_amount_input.getField()] = form_item_amount_input;
if ( type == 10 ) {
row.children().eq( 4 ).append( form_item_amount_input );
} else {
row.children().eq( 2 ).append( form_item_amount_input );
}
} else {
widgets[form_item_amount_text.getField()] = form_item_amount_text;
if ( type == 10 ) {
row.children().eq( 4 ).append( form_item_amount_text );
} else {
row.children().eq( 2 ).append( form_item_amount_text );
}
}
} else {
if ( ( Global.isSet( index ) || is_add || ( _.size( data ) === 1 && ( $this.parent_controller.isEditMode() == true ) ) ) && type != 40 && !data.total_row ) {
if ( data['type_id'] == 40 ) {
form_item_amount_text.css( 'font-weight', 'bold' );
widgets[form_item_amount_text.getField()] = form_item_amount_text;
if ( type == 10 ) {
row.children().eq( 4 ).append( form_item_amount_text );
} else {
row.children().eq( 2 ).append( form_item_amount_text );
}
} else {
widgets[form_item_amount_input.getField()] = form_item_amount_input;
if ( type == 10 ) {
row.children().eq( 4 ).append( form_item_amount_input );
} else {
row.children().eq( 2 ).append( form_item_amount_input );
}
}
} else {
if ( ( data['type_id'] == 40 || data.total_row ) && type == 30 ) {
form_item_amount_text.css( 'font-weight', 'bold' );
} else {
form_item_amount_text.css( 'font-weight', 'bold' );
}
widgets[form_item_amount_text.getField()] = form_item_amount_text;
if ( type == 10 ) {
row.children().eq( 4 ).append( form_item_amount_text );
} else {
row.children().eq( 2 ).append( form_item_amount_text );
}
}
}
// Ytd amount
if ( data['type_id'] == 40 || data.total_row ) {
form_item_ytd_amount_text.css( 'font-weight', 'bold' );
}
if ( ( Global.isSet( index ) || is_add || _.size( data ) === 1 ) && type != 40 ) {
form_item_ytd_amount_text.text( '-' );
}
widgets[form_item_ytd_amount_text.getField()] = form_item_ytd_amount_text;
if ( type == 10 ) {
row.children().eq( 5 ).append( form_item_ytd_amount_text );
} else {
row.children().eq( 3 ).append( form_item_ytd_amount_text );
}
if ( type == 10 ) { // && !data.total_row ) {
// rate
if ( data['type_id'] == 10 && !data.total_row ) {
if ( $this.parent_controller.isEditMode() == true ) {
if ( ( TTUUID.isUUID( pay_stub_amendment_id ) && pay_stub_amendment_id != TTUUID.zero_id ) || ( TTUUID.isUUID( user_expense_id ) && user_expense_id != TTUUID.zero_id ) ) {
form_item_rate_input.setReadOnly( true );
}
widgets[form_item_rate_input.getField()] = form_item_rate_input;
row.children().eq( 2 ).append( form_item_rate_input );
} else {
widgets[form_item_rate_text.getField()] = form_item_rate_text;
row.children().eq( 2 ).append( form_item_rate_text );
}
} else {
if ( Global.isSet( index ) || is_add ) {
if ( data['type_id'] == 40 || data.total_row ) {
} else {
widgets[form_item_rate_input.getField()] = form_item_rate_input;
row.children().eq( 2 ).append( form_item_rate_input );
}
}
}
// units
if ( data['type_id'] == 10 && !data.total_row ) {
if ( $this.parent_controller.isEditMode() == true ) {
if ( ( TTUUID.isUUID( pay_stub_amendment_id ) && pay_stub_amendment_id != TTUUID.zero_id ) || ( TTUUID.isUUID( user_expense_id ) && user_expense_id != TTUUID.zero_id ) ) {
form_item_units_input.setReadOnly( true );
}
widgets[form_item_units_input.getField()] = form_item_units_input;
row.children().eq( 3 ).append( form_item_units_input );
} else {
widgets[form_item_units_text.getField()] = form_item_units_text;
row.children().eq( 3 ).append( form_item_units_text );
}
} else {
if ( Global.isSet( index ) || is_add ) {
if ( data['type_id'] == 40 || data.total_row ) {
form_item_units_text.css( 'font-weight', 'bold' );
widgets[form_item_units_text.getField()] = form_item_units_text;
row.children().eq( 3 ).append( form_item_units_text );
} else {
widgets[form_item_units_input.getField()] = form_item_units_input;
row.children().eq( 3 ).append( form_item_units_input );
}
} else {
form_item_units_text.css( 'font-weight', 'bold' );
widgets[form_item_units_text.getField()] = form_item_units_text;
row.children().eq( 3 ).append( form_item_units_text );
}
}
}
//Build row widgets
if ( ( TTUUID.isUUID( pay_stub_amendment_id ) && pay_stub_amendment_id != TTUUID.zero_id ) || ( TTUUID.isUUID( user_expense_id ) && user_expense_id != TTUUID.zero_id ) ) {
row.children().last().find( '.minus-icon ' ).hide();
}
if ( data['total_row'] == true ) {
widgets['total_row'] = true;
}
if ( typeof data['type_id'] != 'undefined' ) {
widgets['type_id'] = data['type_id'];
}
if ( data['pay_stub_entry_account_id'] == $this.parent_controller.pseal_link.net_pay_entry_account_id ) {
widgets['pay_stub_entry_account_id'] = $this.parent_controller.pseal_link.net_pay_entry_account_id;
}
if ( typeof index !== 'undefined' ) {
row.insertAfter( $( render ).find( 'tr' ).eq( index ) );
$this.rows_widgets_array.splice( ( index + 1 ), 0, widgets );
} else {
$( render ).append( row );
$this.rows_widgets_array.push( widgets );
}
if ( $this.parent_controller.isEditMode() == true ) {
$this.addIconsEvent( row ); //Bind event to add and minus icon
} else {
row.children().last().empty();
}
if ( data.total_row || data.type_id == 40 ) {
row.find( '.plus-icon' ).remove();
row.find( '.minus-icon' ).remove();
}
}
if ( data['type_id'] == 10 ) {
renderColumns( data, 10, index );
} else if ( data['type_id'] == 20 ) {
renderColumns( data, 20, index );
} else if ( data['type_id'] == 30 ) {
renderColumns( data, 30, index );
} else if ( data['type_id'] == 40 ) {
renderColumns( data, 40, index );
} else if ( data['type_id'] == 50 ) {
renderColumns( data, 50, index );
} else if ( data['type_id'] == 80 ) {
renderColumns( data, 80, index );
}
}
}
insideEntryEditorRemoveRow( row ) {
var index = row[0].rowIndex;
if ( this.rows_widgets_array[index].ytd_amount ) {
var remove_id = this.rows_widgets_array[index].ytd_amount.attr( 'pay_stub_entry_id' );
var type_id = this.rows_widgets_array[index].ytd_amount.attr( 'type_id' );
if ( TTUUID.isUUID( remove_id ) ) {
this.delete_ids.push( remove_id );
}
row.remove();
if ( this.rows_widgets_array[index - 1] === true && ( this.rows_widgets_array[index + 1]['total_row'] === true || this.rows_widgets_array[index + 1] === true ) ) {
this.addRow( { id: '', type_id: type_id }, index - 1 );
this.rows_widgets_array.splice( index + 1, 1 ); //Remove from the array used in calcTotal()
} else {
this.rows_widgets_array.splice( index, 1 ); //Remove from the array used in calcTotal()
}
}
this.calcTotal();
}
savePayStub( record, callbackFunction ) {
// when the user create a new pay stub record have them can send entries to api.
if ( this.include_pay_stub_accounts ) {
var entries = this.saveInsideEntryEditorData();
var transactions = this.saveInsideTransactionEditorData();
if ( entries.length > 0 ) {
record['entries'] = entries;
}
if ( transactions.length > 0 ) {
record['transactions'] = transactions;
}
}
callbackFunction();
}
onSaveClick( ignoreWarning ) {
if ( this.is_mass_editing ) {
this.include_pay_stub_accounts = false;
}
super.onSaveClick( ignoreWarning );
}
doSaveAPICall( record, ignoreWarning, callback ) {
this.savePayStub( record, () => {
super.doSaveAPICall( record, true, callback );
} );
}
onSaveDone( result ) {
this.current_edit_record = null;
return true;
}
saveInsideTransactionEditorData( callBack ) {
//called by validation function
var $this = this;
var data = this.editor.insideTransactionEditorGetValue( $this.current_edit_record.id ? $this.current_edit_record.id : '' );
if ( this.editor.delete_transaction_ids.length > 0 ) {
for ( var i = 0; i < this.editor.delete_transaction_ids.length; i++ ) {
for ( var n = 0; n < data.length; n++ ) {
if ( this.editor.delete_transaction_ids[i] == data[n].id ) {
data[n].deleted = 1;
}
}
}
}
return data;
}
onCopyAsNewClick() {
var $this = this;
var reload_entries = false;
this.setCurrentEditViewState( 'new' );
LocalCacheData.current_doing_context_action = 'copy_as_new';
if ( Global.isSet( this.edit_view ) ) {
// for ( var i = 0; i < this.editor.rows_widgets_array.length; i++ ) {
// if ( this.editor.rows_widgets_array[i] === true ) {
// continue;
// }
// this.editor.rows_widgets_array[i].ytd_amount.attr( 'pay_stub_entry_id', '' );
// this.editor.rows_widgets_array[i].ytd_amount.removeAttr( 'pay_stub_amendment_id' );
// this.editor.rows_widgets_array[i].ytd_amount.removeAttr( 'user_expense_id' );
// }
this.copied_record_id = this.current_edit_record.id;
this.current_edit_record.id = '';
this.edit_view_ui_dic.user_id.setEnabled( true );
if ( this.current_edit_record.status_id != 25 ) {
this.current_edit_record.status_id = 25;
this.edit_view_ui_dic.status_id.setValue( 25 );
// this.editor.show_cover = false;
// this.include_pay_stub_accounts = true;
// reload_entries = true;
}
this.editor.show_cover = false;
// this.editor.removeCover();
var navigation_div = this.edit_view.find( '.navigation-div' );
navigation_div.css( 'display', 'none' );
this.setEditMenu();
this.setTabStatus();
this.is_changed = false;
// reset the entries data.
// if ( reload_entries ) {
this.editor.removeAllRows( true );
this.initInsideEntryEditorData();
// }
ProgressBar.closeOverlay();
} else {
var filter = {};
var grid_selected_id_array = this.getGridSelectIdArray();
var grid_selected_length = grid_selected_id_array.length;
var selectedId;
if ( grid_selected_length > 0 ) {
selectedId = grid_selected_id_array[0];
filter.filter_data = {};
filter.filter_data.id = [selectedId];
this.api['get' + this.api.key_name]( filter, {
onResult: function( result ) {
$this.onCopyAsNewResult( result );
}
} );
} else {
TAlertManager.showAlert( $.i18n._( 'No selected record' ) );
}
}
}
initEditView() {
this.original_status_id = this.current_edit_record.status_id;
super.initEditView();
}
onSubViewRemoved() {
this.search();
if ( !this.edit_view ) {
this.setDefaultMenu();
} else {
this.setEditMenu();
}
}
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;
}
if ( result_data.status_id != 25 ) {
result_data.status_id = 25; // If its status is not open then set it to open status.
}
$this.current_edit_record = result_data;
$this.editor.show_cover = false;
$this.initEditView();
}
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.current_edit_record;
this.original_status_id = record.status_id;
record = this.uniformVariable( record );
this.savePayStub( record, function() {
$this.api['set' + $this.api.key_name]( record, false, ignoreWarning, {
onResult: function( result ) {
$this.onSaveAndContinueResult( result );
}
} );
} );
}
onCancelClick() {
TTPromise.reject( 'PayStubViewController', 'insideEditorDataLoaded' );
super.onCancelClick();
}
openEditView() {
if ( this.editor ) {
this.editor.transaction_data = false;
}
TTPromise.reject( 'PayStubViewController', 'insideEditorDataLoaded' );
super.openEditView();
}
onMassEditClick() {
var $this = this;
$this.is_add = false;
$this.is_viewing = false;
$this.is_mass_editing = true;
LocalCacheData.current_doing_context_action = 'mass_edit';
$this.openEditView();
var filter = {};
var grid_selected_id_array = this.getGridSelectIdArray();
var grid_selected_length = grid_selected_id_array.length;
this.mass_edit_record_ids = [];
$.each( grid_selected_id_array, function( index, value ) {
$this.mass_edit_record_ids.push( value );
} );
filter.filter_data = {};
filter.filter_data.id = this.mass_edit_record_ids;
this.api['getCommon' + this.api.key_name + 'Data']( filter, {
onResult: function( result ) {
var result_data = result.getResult();
if ( !result_data ) {
result_data = [];
}
$this.api['getOptions']( 'unique_columns', {
onResult: function( result ) {
$this.unique_columns = result.getResult();
$this.api['getOptions']( 'linked_columns', {
onResult: function( result1 ) {
$this.linked_columns = result1.getResult();
if ( $this.sub_view_mode && $this.parent_key ) {
result_data[$this.parent_key] = $this.parent_value;
}
$this.current_edit_record = result_data;
$this.initEditView();
}
} );
}
} );
}
} );
}
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 ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) {
$this.refresh_id = result_data;
}
$this.search( false );
$this.editor.show_cover = false;
$this.onEditClick( $this.refresh_id, true );
$this.onSaveAndContinueDone( result );
} 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 ( TTUUID.isUUID( result_data ) && result_data != TTUUID.zero_id && result_data != TTUUID.not_exist_id ) {
// $this.refresh_id = result_data;
// }
// $this.editor.show_cover = true;
// $this.onRightArrowClick();
// $this.search( false );
// $this.onSaveAndNextDone( result );
//
// } else {
// $this.setErrorTips( result );
// $this.setErrorMenu();
// }
// },
saveInsideEntryEditorData( callBack ) {
//called by validation function
var $this = this;
var data = this.editor.getValue( $this.current_edit_record.id ? $this.current_edit_record.id : '' );
if ( this.editor.delete_ids.length > 0 ) {
for ( var i = 0; i < this.editor.delete_ids.length; i++ ) {
for ( var n = 0; n < data.length; n++ ) {
if ( this.editor.delete_ids[i] == data[n].id ) {
data[n].deleted = 1;
}
}
}
}
if ( callBack && typeof callBack == 'function' ) {
callBack();
}
return data;
}
insideEntryEditorGetValue( current_edit_item_id ) {
var len = this.rows_widgets_array.length;
var result = [];
if ( this.cover && this.cover.length > 0 ) {
return result;
}
for ( var i = 0; i < len; i++ ) {
var row = this.rows_widgets_array[i];
var data = {};
if ( row === true || _.isArray( row ) ) {
continue;
}
// var pay_stub_amendment_id = row['ytd_amount'].attr( 'pay_stub_amendment_id' );
// var user_expense_id = row['ytd_amount'].attr( 'user_expense_id' );
//
// if ( pay_stub_amendment_id > 0 || user_expense_id > 0 ) {
// continue;
// }
data['id'] = row['ytd_amount'].attr( 'pay_stub_entry_id' );
if ( row['ytd_amount'].attr( 'type_id' ) ) {
data['type'] = row['ytd_amount'].attr( 'type_id' );
}
data['rate'] = row['rate'] ? row['rate'].getValue() : '';
data['units'] = row['units'] ? row['units'].getValue() : '';
data['amount'] = row['amount'] ? row['amount'].getValue() : '';
if ( Global.isSet( row['ytd_amount'] ) ) {
data['ytd_amount'] = row['ytd_amount'].getValue();
}
data['description'] = row['description'] ? row['description'].getValue() : '';
if ( Global.isSet( row['pay_stub_entry_name_id'] ) ) {
data['pay_stub_entry_name_id'] = row['pay_stub_entry_name_id'].getValue();
} else {
data['pay_stub_entry_name_id'] = row['ytd_amount'].attr( 'pay_stub_entry_name_id' );
}
// return back to the server with the same data get from API.
data['pay_stub_amendment_id'] = row['ytd_amount'].attr( 'pay_stub_amendment_id' );
data['user_expense_id'] = row['ytd_amount'].attr( 'user_expense_id' );
data['pay_stub_id'] = current_edit_item_id;
if ( row['total_row'] != true && TTUUID.isUUID( data['pay_stub_entry_name_id'] )
&& ( data['pay_stub_entry_name_id'] != TTUUID.zero_id
|| ( data['description'] != undefined && data['description'].length > 0 )
|| ( data['rate'] != undefined && data['rate'].length > 0 && parseFloat( data['rate'] ) != 0 )
|| ( data['units'] != undefined && data['units'].length > 0 && parseFloat( data['units'] ) != 0 )
|| ( data['amount'] != undefined && data['amount'].length > 0 && parseFloat( data['amount'] ) != 0 )
) ) {
result.push( data );
}
}
return result;
}
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.start_date = true;
column_filter.end_date = true;
column_filter.pay_period_id = 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;
}
onFormItemChange( target, doNotValidate ) {
var $this = this;
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 'status_id':
// if ( c_value == 40 || c_value == 100 ) {
// this.include_pay_stub_accounts = false;
// }
// break;
case 'user_id':
if ( this.is_add ) {
var transaction_rows = $this.editor.rows_widgets_array[$this.editor.rows_widgets_array.length - 2];
var user_id = $this.edit_view_ui_dic.user_id.getValue();
for ( var t in transaction_rows ) {
if ( Global.isArray( transaction_rows ) && transaction_rows[t].remittance_destination_account_id ) {
transaction_rows[t].remittance_destination_account_id.setDefaultArgs( { filter_data: { user_id: user_id } } );
transaction_rows[t].remittance_destination_account_id.setValue( TTUUID.zero_id );
}
}
}
break;
case 'country':
var widget = this.edit_view_ui_dic['province'];
widget.setValue( null );
break;
case 'pay_period_id':
var filter = {};
filter.filter_data = {};
filter.filter_data.id = c_value;
this.pay_period_api['get' + this.pay_period_api.key_name]( filter, {
onResult: function( res ) {
//Error: Uncaught TypeError: Cannot read property 'start_date' of undefined in interface/html5/#!m=PayStub&a=new&tab=PayStub line 1836
if ( res.isValid() && res.getResult()[0] ) {
var result = res.getResult()[0];
var start_date = Global.strToDate( result.start_date ).format();
var end_date = Global.strToDate( result.end_date ).format();
var transaction_date = Global.strToDate( result.transaction_date ).format();
$this.current_edit_record['start_date'] = start_date;
$this.current_edit_record['end_date'] = end_date;
$this.current_edit_record['transaction_date'] = transaction_date;
$this.edit_view_ui_dic['start_date'].setValue( start_date );
$this.edit_view_ui_dic['end_date'].setValue( end_date );
$this.edit_view_ui_dic['transaction_date'].setValue( transaction_date );
if ( !doNotValidate ) {
$this.validate();
}
}
}
} );
break;
default:
if ( !doNotValidate ) {
$this.validate();
}
break;
}
if ( key === 'country' || key === 'pay_period_id' ) {
return;
}
if ( !doNotValidate ) {
this.validate();
}
}
onSetSearchFilterFinished() {
if ( this.search_panel.getSelectTabIndex() === 1 ) {
var combo = this.adv_search_field_ui_dic['country'];
var select_value = combo.getValue();
this.setProvince( select_value );
}
}
onBuildAdvUIFinished() {
this.adv_search_field_ui_dic['country'].change( $.proxy( function() {
var combo = this.adv_search_field_ui_dic['country'];
var selectVal = combo.getValue();
this.setProvince( selectVal );
this.adv_search_field_ui_dic['province'].setValue( null );
}, this ) );
}
setProvince( val, m ) {
var $this = this;
if ( !val || val === '-1' || val === '0' ) {
$this.province_array = [];
this.adv_search_field_ui_dic['province'].setSourceData( [] );
} else {
this.company_api.getOptions( 'province', val, {
onResult: function( res ) {
res = res.getResult();
if ( !res ) {
res = [];
}
$this.province_array = Global.buildRecordArray( res );
$this.adv_search_field_ui_dic['province'].setSourceData( $this.province_array );
}
} );
}
}
eSetProvince( val, refresh ) {
var $this = this;
var province_widget = $this.edit_view_ui_dic['province'];
if ( !val || val === '-1' || val === '0' ) {
$this.e_province_array = [];
province_widget.setSourceData( [] );
} else {
this.company_api.getOptions( 'province', val, {
onResult: function( res ) {
res = res.getResult();
if ( !res ) {
res = [];
}
$this.e_province_array = Global.buildRecordArray( res );
if ( refresh && $this.e_province_array.length > 0 ) {
$this.current_edit_record.province = $this.e_province_array[0].value;
province_widget.setValue( $this.current_edit_record.province );
}
province_widget.setSourceData( $this.e_province_array );
}
} );
}
}
validate() {
var $this = this;
var record = {};
var transaction_record = {};
if ( this.is_mass_editing ) {
for ( var key in this.edit_view_ui_dic ) {
if ( !this.edit_view_ui_dic.hasOwnProperty( key ) ) {
continue;
}
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.current_edit_record;
}
record = this.uniformVariable( record );
if ( this.include_pay_stub_accounts ) {
var entries = $this.saveInsideEntryEditorData();
var transactions = $this.saveInsideTransactionEditorData();
if ( typeof entries == 'object' ) {
record['entries'] = entries;
}
if ( typeof transactions == 'object' ) {
record['transactions'] = transactions;
}
}
this.api['validate' + this.api.key_name]( record, {
onResult: function( result ) {
$this.validateResult( result );
}
} );
}
buildEditViewUI() {
super.buildEditViewUI();
var $this = this;
var tab_model = {
'tab_pay_stub': {
'label': $.i18n._( 'Pay Stub' ), 'is_multi_column': true,
'html_template': this.getPayStubTabHtml()
},
'tab_audit': true,
};
this.setTabModel( tab_model );
this.navigation.AComboBox( {
api_class: TTAPI.APIPayStub,
id: this.script_name + '_navigation',
allow_multiple_selection: false,
layout_name: 'global_pay_stub',
navigation_mode: true,
show_search_inputs: true
} );
this.setNavigation();
//Tab 0 start
var tab_pay_stub = this.edit_view_tab.find( '#tab_pay_stub' );
var tab_pay_stub_column1 = tab_pay_stub.find( '.first-column' );
var tab_pay_stub_column2 = tab_pay_stub.find( '.second-column' );
// var tab_pay_stub_column3 = tab_pay_stub.find( '.third-column' );
var form_item_input;
this.edit_view_tabs[0] = [];
this.edit_view_tabs[0].push( tab_pay_stub_column1 );
// Employee
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIUser,
allow_multiple_selection: false,
layout_name: 'global_user',
show_search_inputs: true,
set_empty: false,
field: 'user_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Employee' ), form_item_input, tab_pay_stub_column1 );
// Status
form_item_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_input.TComboBox( { field: 'status_id', set_empty: false } );
form_item_input.setSourceData( $this.filtered_status_array );
this.addEditFieldToColumn( $.i18n._( 'Status' ), form_item_input, tab_pay_stub_column1 );
// 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_pay_stub_column1 );
// Currency
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APICurrency,
allow_multiple_selection: false,
layout_name: 'global_currency',
show_search_inputs: true,
set_empty: true,
field: 'currency_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Currency' ), form_item_input, tab_pay_stub_column1 );
// Pay Period
form_item_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_input.AComboBox( {
api_class: TTAPI.APIPayPeriod,
allow_multiple_selection: false,
layout_name: 'global_Pay_period',
show_search_inputs: true,
set_empty: true,
field: 'pay_period_id'
} );
this.addEditFieldToColumn( $.i18n._( 'Pay Period' ), form_item_input, tab_pay_stub_column2 );
// Payroll Run
form_item_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_input.TTextInput( { field: 'run_id', width: 20 } );
this.addEditFieldToColumn( $.i18n._( 'Payroll Run' ), form_item_input, tab_pay_stub_column2 );
// Pay Start Date
form_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );
form_item_input.TDatePicker( { field: 'start_date' } );
this.addEditFieldToColumn( $.i18n._( 'Pay Start Date' ), form_item_input, tab_pay_stub_column2 );
// Pay End Date
form_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );
form_item_input.TDatePicker( { field: 'end_date' } );
this.addEditFieldToColumn( $.i18n._( 'Pay End Date' ), form_item_input, tab_pay_stub_column2 );
// Payment Date
form_item_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );
form_item_input.TDatePicker( { field: 'transaction_date' } );
this.addEditFieldToColumn( $.i18n._( 'Payment Date' ), form_item_input, tab_pay_stub_column2, '' );
//Inside pay stub entries editor
var inside_pay_stub_entry_editor_div = tab_pay_stub.find( '.inside-pay-stub-entry-editor-div' );
this.editor = Global.loadWidgetByName( FormItemType.INSIDE_EDITOR );
this.editor.InsideEditor( {
addRow: this.insideEntryEditorAddRow,
removeRow: this.insideEntryEditorRemoveRow,
getValue: this.insideEntryEditorGetValue,
setValue: this.insideEntryEditorSetValue,
parent_controller: this,
api: this.pay_stub_entry_api,
render: getRender(),
render_args: {},
render_inline_html: true,
row_render: getRowRender()
} );
function getRender() {
return `
<table class="inside-editor-render tblList">
</table>`;
}
function getRowRender() {
return `<div></div>`;
}
this.editor.show_cover = true;
this.editor.delete_transaction_ids = [];
this.editor.removeCover = this.removeEntryInsideEditorCover;
this.editor.onEditClick = this.removeEntryInsideEditorCover;
this.editor.onFormItemKeyUp = function( target ) {
var index = target.parent().parent().index();
var $this = this;
var widget_rate = $this.rows_widgets_array[index]['rate'];
var widget_units = $this.rows_widgets_array[index]['units'];
var widget_amount = $this.rows_widgets_array[index]['amount'];
if ( target.getValue().length === 0 ) {
widget_amount.setReadOnly( false );
}
if ( widget_rate.getValue().length > 0 || widget_units.getValue().length > 0 ) {
widget_amount.setReadOnly( true );
}
if ( widget_rate.getValue().length > 0 && widget_units.getValue().length > 0 ) {
//widget_amount.setValue( ( parseFloat( widget_rate.getValue() ) * parseFloat( widget_units.getValue() ) ).toFixed( 2 ) );
//var amount_value = Global.MoneyRound( parseFloat( widget_rate.getValue() ) * parseFloat( widget_units.getValue() ) );
var amount_value = Global.MoneyRound( Decimal( parseFloat( widget_rate.getValue() ) ).mul( parseFloat( widget_units.getValue() ) ).toFixed( 4 ) );
if ( amount_value == 'NaN' || amount_value == 0 || amount_value == '' ) {
amount_value = '0.00';
}
widget_amount.setValue( amount_value );
this.onFormItemChange( widget_amount, true );
} else {
widget_amount.setValue( '0.00' );
this.onFormItemChange( widget_amount, true );
}
};
this.editor.onFormItemKeyDown = function( target ) {
var index = target.parent().parent().index();
var $this = this;
var widget = $this.rows_widgets_array[index]['amount'];
var widget_rate = $this.rows_widgets_array[index]['rate'];
var widget_units = $this.rows_widgets_array[index]['units'];
if ( widget_rate.getValue().length > 0 && widget_units.getValue().length > 0 ) {
} else {
widget.setValue( '0.00' );
this.onFormItemChange( widget, true );
}
widget.setReadOnly( true );
};
this.editor.onFormItemChange = function( target, doNotValidate ) {
var key = target.getField();
var c_value = parseFloat( target.getValue() ? target.getValue() : 0 ); // new value
var index = target.parent().parent().index();
if ( key === 'amount' ) {
var original_ytd_amount = parseFloat( this.rows_widgets_array[index]['ytd_amount'].attr( 'original_ytd_amount' ) );
if ( isNaN( original_ytd_amount ) ) {
original_ytd_amount = 0.00;
}
var original_amount = parseFloat( this.rows_widgets_array[index]['ytd_amount'].attr( 'original_amount' ) );
if ( isNaN( original_amount ) ) {
original_amount = 0.00;
}
var new_ytd_amount = Global.removeTrailingZeros( Decimal( original_ytd_amount ).sub( original_amount ).add( c_value ).toFixed( 4 ) );
if ( isNaN( new_ytd_amount ) ) {
new_ytd_amount = 0.00;
}
this.rows_widgets_array[index]['ytd_amount'].setValue( new_ytd_amount != 0 ? new_ytd_amount : '-' );
this.rows_widgets_array[index]['ytd_amount'].attr( 'original_ytd_amount', new_ytd_amount );
this.rows_widgets_array[index]['ytd_amount'].attr( 'original_amount', c_value );
}
if ( doNotValidate ) {
} else {
this.parent_controller.validate();
}
this.calcTotal();
};
this.editor.calcTotal = function() {
var total_units = 0;
var total_amount = 0;
var total_ytd_amount = 0;
var net_pay_amount = 0;
var net_pay_ytd_amount = 0;
var total_units_blank = true;
for ( var i = 0; i < this.rows_widgets_array.length; i++ ) {
var row = this.rows_widgets_array[i];
if ( row === true || _.isArray( row ) ) {
total_units = 0;
total_amount = 0;
total_ytd_amount = 0;
continue;
}
if ( row['total_row'] === true ) {
if ( !Global.isNumeric( total_amount ) ) {
total_amount = 0;
}
if ( Global.isSet( row['units'] ) ) {
if ( total_units_blank == false ) {
row['units'].setValue( Global.MoneyRound( total_units ) );
} else if ( total_units_blank ) {
row['units'].setValue( '-' );
}
}
row['amount'].setValue( Global.MoneyRound( parseFloat( total_amount ) ) );
row['ytd_amount'].setValue( Global.MoneyRound( parseFloat( total_ytd_amount ) ) );
if ( row.type_id == 10 ) { // Start with total gross value
net_pay_amount = total_amount;
net_pay_ytd_amount = total_ytd_amount;
} else if ( row.type_id == 20 ) { // Subtract deductions (only)
//net_pay_amount = net_pay_amount - total_amount;
net_pay_amount = Decimal( net_pay_amount ).sub( total_amount ).toFixed( 4 );
//net_pay_ytd_amount = net_pay_ytd_amount - total_ytd_amount;
net_pay_ytd_amount = Decimal( net_pay_ytd_amount ).sub( total_ytd_amount ).toFixed( 4 );
}
this.parent_controller.net_pay_amount = net_pay_amount;
continue;
}
if ( row['pay_stub_entry_account_id'] && row['pay_stub_entry_account_id'] == this.parent_controller.pseal_link.net_pay_entry_account_id ) {
row['amount'].setValue( Global.MoneyRound( net_pay_amount ) );
row['ytd_amount'].setValue( Global.MoneyRound( net_pay_ytd_amount ) );
continue;
}
var current_units = 0;
if ( Global.isSet( row['units'] ) && Global.isNumeric( row['units'].getValue() ) ) {
current_units = Global.MoneyRound( parseFloat( row['units'].getValue() ) );
total_units_blank = false;
}
var current_total_amount = 0;
if ( Global.isSet( row['amount'] ) && Global.isNumeric( row['amount'].getValue() ) ) {
current_total_amount = parseFloat( row['amount'].getValue() );
total_units_blank = false;
}
var current_ytd_total = 0;
if ( Global.isSet( row['ytd_amount'] ) && Global.isNumeric( row['ytd_amount'].getValue() ) ) {
current_ytd_total = parseFloat( row['ytd_amount'].getValue() );
}
if ( total_units_blank == false ) {
// total_units = parseFloat( total_units ) + parseFloat( current_units );
total_units = Decimal( parseFloat( total_units ) ).add( parseFloat( current_units ) ).toFixed( 4 );
} else {
total_units = '';
}
if ( Global.isNumeric( current_total_amount ) ) {
// total_amount = total_amount + current_total_amount;
total_amount = Decimal( total_amount ).add( current_total_amount ).toFixed( 4 );
}
if ( Global.isNumeric( current_ytd_total ) ) {
// total_ytd_amount = total_ytd_amount + current_ytd_total;
total_ytd_amount = Decimal( total_ytd_amount ).add( current_ytd_total ).toFixed( 4 );
}
}
this.calcTransactionTotals();
};
this.editor.insideTransactionEditorSetValue = function( data ) {
$this = this;
if ( !this.parent_controller.current_edit_record ) {
return false;
}
var pay_stub_status_id = this.parent_controller['current_edit_record']['status_id'];
var is_add = false;
if ( !this.parent_controller['current_edit_record']['id'] && !this.parent_controller.copied_record_id ) {
is_add = true;
}
if ( !is_add && ( pay_stub_status_id == 25 ) && this.show_cover ) {
this.cover = Global.loadWidgetByName( WidgetNamesDic.NO_RESULT_BOX );
this.cover.NoResultBox( {
related_view_controller: this,
message: $.i18n._( 'Click the Edit icon below to override pay stub amounts' ),
is_edit: true
} );
}
var render = this.getRender(); //get render, should be a table
var headerRow = `
<tr class="tblHeader">
<td align="left" colspan="2"><%= col1 %></td>
<td colspan="2"> <%= col2 %></td>
<td colspan="1"> <%= col3 %></td>
<td colspan="1"> <%= col4 %></td>
<td colspan="1" style="width: 30px"><%= col5 %></td>
<td colspan="2" style="width:60px"></td>
</tr>`;
var args = {
col1: $.i18n._( 'Payment Method' ),
col2: $.i18n._( 'Note' ),
col3: $.i18n._( 'Status' ),
col4: $.i18n._( 'Payment Date' ),
col5: $.i18n._( 'Amount' )
};
$( render ).append( '<tr class="tblSepHeader"><td colspan="8">' + $.i18n._( 'Transactions' ) + '</td></tr>' );
var template = _.template( headerRow );
$( render ).append( template( args ) );
this.rows_widgets_array.push( true );
if ( _.size( data ) > 0 ) {
for ( var i = 0; i < _.size( data ); i++ ) {
if ( Global.isSet( data[i] ) ) {
var row = data[i];
this.insideTransactionEditorAddRow( row );
}
}
//$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
this.rows_widgets_array.push( true );
if ( this.cover && this.cover.length > 0 ) {
this.cover.css( { width: this.width(), height: this.height() + 30 } );
this.parent().append( this.cover );
}
} else {
this.parent_controller.getPayStubTransactionDefaultData( function( data ) {
$this.insideTransactionEditorAddRow( data );
//$( render ).append( '<tr><td colspan="8"><br></td></tr>' );
$this.rows_widgets_array.push( true );
if ( $this.cover && $this.cover.length > 0 ) {
$this.cover.css( { width: $this.width(), height: $this.height() } );
$this.parent().append( $this.cover );
}
} );
}
this.calcTransactionTotals();
};
this.editor.insideTransactionEditorGetValue = function( parent_id ) {
var len = this.rows_widgets_array.length;
var result = [];
if ( this.cover && this.cover.length > 0 ) {
return result;
}
for ( var i = 0; i < len; i++ ) {
var data = {};
if ( _.isArray( this.rows_widgets_array[i] ) ) {
var row = this.rows_widgets_array[i][0];
if ( !Global.isSet( row['remittance_destination_account_id'] ) || !row['remittance_destination_account_id'].getValue() ) {
continue; //row is not editable but is among those that are.
}
data['id'] = row['form_item_record']['id'];
data['remittance_destination_account_id'] = row['remittance_destination_account_id'] ? row['remittance_destination_account_id'].getValue() : TTUUID.zero_id;
if ( Global.isSet( row['status_id'] ) ) {
data['status_id'] = row['status_id'].getValue();
}
data['transaction_date'] = row['transaction_date'] ? row['transaction_date'].getValue() : '';
if ( Global.isSet( row['currency_id'] ) ) {
data['currency_id'] = row['currency_id'].getValue();
}
data['note'] = row['note'] ? row['note'].getValue() : '';
data['amount'] = row['amount'] ? row['amount'].getValue() : '';
if ( Global.isSet( row['deleted'] ) && row['deleted'] == 1 ) {
data['deleted'] = 1;
} else {
data['deleted'] = 0;
}
data['pay_stub_id'] = parent_id;
if ( row['total_row'] != true && TTUUID.isUUID( data['remittance_destination_account_id'] )
&& ( data['remittance_destination_account_id'] != TTUUID.zero_id
|| ( data['note'] != undefined && data['note'].length > 0 )
|| ( data['amount'] != undefined && data['amount'].length > 0 && parseFloat( data['amount'] ) != 0 )
) ) {
result.push( data );
}
}
}
return result;
};
this.editor.insideTransactionEditorRemoveRow = function( row ) {
var index = row[0].rowIndex - 1;
if ( this.rows_widgets_array[index][0] ) {
this.rows_widgets_array[index][0]['form_item_record']['deleted'] = 1;
var remove_id = this.rows_widgets_array[index][0]['form_item_record']['id'];
}
if ( TTUUID.isUUID( remove_id ) ) {
this.delete_transaction_ids.push( remove_id );
} else {
// only remove the row if it was a new row, existing rows (in db) must only be hidden, not removed.
this.rows_widgets_array.splice( index, 1 );
}
// hide the row from user view, so we can still query the data during the save operation (api still needs it to know what to delete).
row.hide();
//count transaction rows.
var trows = $( '.paystub_transaction_row:visible' ).length;
if ( trows == 0 ) {
// if all rows removed, make sure we add a blank row in again.
this.insideTransactionEditorAddRow( {}, index );
}
this.parent_controller.validate();
$this.calcTransactionTotals();
};
this.editor.calcTransactionTotals = function() {
var total_amount = 0;
for ( var i = 0; i < this.rows_widgets_array.length; i++ ) {
var row = this.rows_widgets_array[i];
//use transaction_date column existence as is transaction flag.
if ( _.isObject( row ) //row is object
&& Global.isSet( row[0] ) //row's object is set.
&& Global.isSet( row[0].remittance_destination_account_id ) //row is a pay stub transaction
&& Global.isSet( row[0].form_item_record.deleted ) == false //row is not removed
&& Global.isSet( row[0].status_id ) //row is not removed
&& ( row[0].status_id.getValue() == 10 || row[0].status_id.getValue() == 20 ) //status is valid
) {
var current = parseFloat( row[0].amount.getValue() );
if ( isNaN( current ) ) {
current = 0;
}
total_amount += current;
}
}
total_amount = Global.MoneyRound( total_amount );
//total_amount = Global.removeTrailingZeros(total_amount);
var render = this.getRender();
$( '.transaction_total_rows' ).remove();
if ( total_amount > 0 ) {
// var difference = Global.removeTrailingZeros( parseFloat( total_amount ) - parseFloat( this.parent_controller.net_pay_amount ) );
var difference = Global.removeTrailingZeros( Decimal( parseFloat( total_amount ) ).sub( parseFloat( this.parent_controller.net_pay_amount ) ).toFixed( 4 ) );
if ( isNaN( difference ) ) {
difference = 0;
}
var color = 'green';
if ( difference != 0 ) {
color = 'red';
}
if ( difference != 0 ) {
difference = Global.MoneyRound( difference );
$( render ).append( '<tr class="tblDataWhite transaction_total_rows"><td colspan="2" style="text-align:left"><b>Transaction Total</b></td><td colspan="3"><br></td><td style="text-align:right;"><span>Difference: <i style="color:red;">' + difference + '</i></b></td><td><b style="color:' + color + '">' + Global.MoneyRound( total_amount ) + '</b></td><td></td></td></tr>' );
} else {
$( render ).append( '<tr class="tblDataWhite transaction_total_rows"><td colspan="2" style="text-align:left"><b>Transaction Total</b></td><td colspan="4"><br></td><td><b style="color:' + color + '">' + total_amount + '</b></td><td></td></td></tr>' );
}
this.rows_widgets_array.push( true );
}
};
this.editor.insideTransactionEditorAddRow = function( data, index ) {
var $this = this;
if ( _.size( data ) == 0 ) {
this.parent_controller.getPayStubTransactionDefaultData( function( data ) {
$this.insideTransactionEditorAddRow( data, index );
}, index );
} else {
var render = $this.getRender();
var widgets = [];
var transaction = {};
transaction.form_item_record = {};
var row = $( `<tr class="tblDataWhite paystub_transaction_row" align="right">
<td align="left" colspan="2"></td>
<td colspan="2" class=""></td>
<td colspan="1" class=""></td>
<td colspan="1" class=""></td>
<td colspan="1" class="cell control-icon" style="width: 30px"></td>
<td colspan="1" class="cell control-icon">
<div>
<button class="plus-icon" onclick=""></button>
<button class="minus-icon " onclick=""></button>
</div>
</td>
</tr>` );
data = _.isArray( data ) ? data[0] : data;
transaction.form_item_record.id = ( data.id && $this.parent_controller.current_edit_record.id ) ? data.id : '';
var pay_stub_status_id = $this.parent_controller.current_edit_record.status_id;
var is_add = false;
if ( !$this.parent_controller.current_edit_record.id && !$this.parent_controller.copied_record_id ) {
is_add = true;
data.status_id = 10; //10=Pending == When using Copy as New force transaction statuses to pending.
}
// Destination Account - writable
var allowed_statuses = [10];
if ( $this.parent_controller.is_add == false ) {
allowed_statuses.push( 20 );
}
var form_item_remittance_destination_account_input = Global.loadWidgetByName( FormItemType.AWESOME_BOX );
form_item_remittance_destination_account_input.AComboBox( {
api_class: TTAPI.APIRemittanceDestinationAccount,
allow_multiple_selection: false,
layout_name: 'global_remittance_destination_account',
show_search_inputs: true,
set_empty: true,
field: 'remittance_destination_account_id',
default_args: {
filter_data: {
user_id: $this.parent_controller.current_edit_record.user_id,
status_id: allowed_statuses
}
}
} );
form_item_remittance_destination_account_input.setValue( data.remittance_destination_account_id ? data.remittance_destination_account_id : '' );
form_item_remittance_destination_account_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.parent_controller.validate();
} );
// readable
var form_item_remittance_destination_account_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_remittance_destination_account_text.TText( { field: 'remittance_destination_account' } );
form_item_remittance_destination_account_text.setValue( data.remittance_destination_account ? data.remittance_destination_account : '' );
// Note - writable
var form_item_note_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_note_input.TTextInput( { field: 'note', width: 300, display_na: false } );
form_item_note_input.setValue( data.note );
form_item_note_input.attr( 'editable', true );
//readable
var form_item_note_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_note_text.TText( { field: 'description', display_na: false } );
form_item_note_text.setValue( data.description );
// Transaction Status - writable
var form_item_status_input = Global.loadWidgetByName( FormItemType.COMBO_BOX );
form_item_status_input.TComboBox( { field: 'status_id', set_empty: false } );
form_item_status_input.setSourceData( $this.parent_controller.transaction_status_array );
form_item_status_input.setValue( data.status_id ? data.status_id : '' );
form_item_status_input.setEnabled( ( LocalCacheData.current_doing_context_action == 'copy_as_new' ) );
form_item_status_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.parent_controller.validate();
} );
// readable
var form_item_status_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_status_text.TText( { field: 'status' } );
form_item_status_text.setValue( data.status ? data.status : '' );
// Transaction Date - writable
var form_item_transaction_date_input = Global.loadWidgetByName( FormItemType.DATE_PICKER );
form_item_transaction_date_input.TDatePicker( { field: 'transaction_date' } );
form_item_transaction_date_input.setValue( data.transaction_date ? data.transaction_date : '' );
form_item_transaction_date_input.attr( 'editable', true );
if ( !data['transaction_date'] ) {
form_item_transaction_date_input.setValue( $this.parent_controller.edit_view_ui_dic.transaction_date.getValue() );
}
form_item_transaction_date_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.parent_controller.validate();
} );
// readable
var form_item_confirmation_number_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_confirmation_number_text.TText( { field: 'transaction_date' } );
form_item_confirmation_number_text.setValue( data.transaction_date ? data.transaction_date : '' );
// Amount - writable
var form_item_amount_input = Global.loadWidgetByName( FormItemType.TEXT_INPUT );
form_item_amount_input.TTextInput( { field: 'amount', width: 60 } );
form_item_amount_input.setValue( data.amount ? Global.removeTrailingZeros( data.amount ) : '' );
form_item_amount_input.unbind( 'formItemChange' ).bind( 'formItemChange', function( e, target ) {
$this.parent_controller.validate();
$this.calcTransactionTotals();
} );
form_item_amount_input.attr( 'editable', true );
// readable
var form_item_amount_text = Global.loadWidgetByName( FormItemType.TEXT );
form_item_amount_text.TText( { field: 'amount' } );
form_item_amount_text.setValue( data.amount ? Global.removeTrailingZeros( data.amount ) : '' );
if ( !data.status_id ) {
data.status_id = 10;
}
if ( $this.parent_controller.isEditMode() ) {
form_item_remittance_destination_account_input.setEnabled( data.status_id == 10 );
form_item_transaction_date_input.setEnabled( data.status_id == 10 );
form_item_amount_input.setReadOnly( data.status_id != 10 );
form_item_note_input.setReadOnly( data.status_id != 10 );
//form_item_status_input.setValue( 10 ); //set to pending
form_item_status_input.setEnabled( false );
} else {
//status is not pending. disable editing the row.
form_item_remittance_destination_account_input.setEnabled( false );
form_item_transaction_date_input.setEnabled( false );
form_item_amount_input.setEnabled( false );
form_item_note_input.setEnabled( false );
form_item_status_input.setEnabled( false );
form_item_input = form_item_note_text; //only way to hide the N/A is to swap in a Text Field in view mode.
}
//actually append the row to the DOM
transaction[form_item_remittance_destination_account_input.getField()] = form_item_remittance_destination_account_input;
row.children().eq( 0 ).append( form_item_remittance_destination_account_input );
transaction[form_item_note_input.getField()] = form_item_note_input;
row.children().eq( 1 ).append( form_item_note_input );
transaction[form_item_status_input.getField()] = form_item_status_input;
row.children().eq( 2 ).append( form_item_status_input );
transaction[form_item_transaction_date_input.getField()] = form_item_transaction_date_input;
row.children().eq( 3 ).append( form_item_transaction_date_input );
transaction[form_item_amount_input.getField()] = form_item_amount_input;
row.children().eq( 4 ).append( form_item_amount_input );
widgets.push( transaction );
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.isEditMode() == true ) {
var minus_icon = row.find( '.minus-icon' );
if ( data.status_id != 10 ) {
minus_icon.remove();
} else {
minus_icon.click( function() {
$this.insideTransactionEditorRemoveRow( row );
} );
}
var plus_icon = row.find( '.plus-icon' );
plus_icon.click( function() {
$this.insideTransactionEditorAddRow( {}, $( this ).parents( 'tr' ).index() );
} );
} else {
//#2548 - Do not show plus button in view mode (when paystub is marked paid)
row.children().last().find( '.minus-icon' ).remove();
//if ( data.status_id != 20 ) {
row.children().last().find( '.plus-icon' ).remove();
//}
}
}
};
inside_pay_stub_entry_editor_div.append( this.editor );
}
buildSearchFields() {
super.buildSearchFields();
this.search_fields = [
new SearchField( {
label: $.i18n._( 'Pay Stub 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 Stub Type' ),
in_column: 1,
field: 'type_id',
multiple: true,
basic_search: true,
adv_search: true,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Employee Status' ),
in_column: 1,
field: 'user_status_id',
multiple: true,
basic_search: false,
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._( 'Payroll Run' ),
in_column: 1,
field: 'run_id',
multiple: true,
basic_search: true,
adv_search: true,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'Employee' ),
in_column: 1,
field: 'user_id',
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._( '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._( 'Currency' ),
field: 'currency_id',
in_column: 1,
layout_name: 'global_currency',
api_class: TTAPI.APICurrency,
multiple: true,
basic_search: false,
adv_search: true,
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._( 'Country' ),
in_column: 2,
field: 'country',
multiple: true,
basic_search: false,
adv_search: true,
layout_name: 'global_option_column',
form_item_type: FormItemType.COMBO_BOX
} ),
new SearchField( {
label: $.i18n._( 'Province/State' ),
in_column: 2,
field: 'province',
multiple: true,
basic_search: false,
adv_search: true,
layout_name: 'global_option_column',
form_item_type: FormItemType.AWESOME_BOX
} ),
new SearchField( {
label: $.i18n._( 'City' ),
field: 'city',
basic_search: false,
adv_search: true,
in_column: 2,
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: 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
} )
];
}
onCustomContextClick( id ) {
switch ( id ) {
case 'timesheet':
case 'schedule':
case 'pay_stub_amendment':
case 'edit_employee':
case 'employee_pay_stubs':
case 'employer_pay_stubs':
case 'generate_pay_stub':
case 'edit_pay_period':
case 'export_excel':
case 'pay_stub_transaction':
default:
this.onNavigationClick( id );
break;
}
}
onViewClick( edit_record, noRefreshUI ) {
this.onNavigationClick( 'view' );
}
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 );
}
onNavigationClick( iconName ) {
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;
switch ( iconName ) {
case 'edit_employee':
if ( user_ids.length > 0 ) {
IndexViewController.openEditView( this, 'Employee', user_ids[0] );
}
break;
case 'edit_pay_period':
if ( pay_period_ids.length > 0 ) {
IndexViewController.openEditView( this, 'PayPeriods', pay_period_ids[0] );
}
break;
case 'timesheet':
if ( user_ids.length > 0 ) {
filter.user_id = user_ids[0];
filter.base_date = base_date;
Global.addViewTab( $this.viewId, $.i18n._( 'Pay Stubs' ), window.location.href );
IndexViewController.goToView( 'TimeSheet', filter );
}
break;
case 'schedule':
filter.filter_data = {};
var include_users = { value: user_ids };
filter.filter_data.include_user_ids = include_users;
filter.select_date = base_date;
Global.addViewTab( this.viewId, $.i18n._( 'Pay Stubs' ), window.location.href );
IndexViewController.goToView( 'Schedule', filter );
break;
case 'pay_stub_amendment':
filter.filter_data = {};
filter.filter_data.user_id = user_ids[0];
filter.filter_data.pay_period_id = pay_period_ids[0];
Global.addViewTab( this.viewId, $.i18n._( 'Pay Stubs' ), window.location.href );
IndexViewController.goToView( 'PayStubAmendment', filter );
break;
case 'generate_pay_stub':
if ( user_ids.length === 1 ) {
filter.user_id = user_ids[0];
} else if ( user_ids.length > 1 ) {
filter.user_id = user_ids;
}
if ( pay_period_ids.length === 1 ) {
filter.pay_period_id = [pay_period_ids[0]];
} else if ( pay_period_ids.length > 1 ) {
filter.pay_period_id = pay_period_ids;
} else {
filter.pay_period_id = [];
}
IndexViewController.openWizard( 'GeneratePayStubWizard', filter, function() {
$this.search();
} );
break;
case 'view':
//If its a payroll admin or higher, by default make the View button show employer pay stub.
if ( ( PermissionManager.validate( 'pay_stub', 'view' ) || PermissionManager.validate( 'pay_stub', 'view_child' ) ) ) {
post_data = { 0: args, 1: false, 2: 'pdf', 3: false };
} else {
post_data = { 0: args, 1: false, 2: 'pdf', 3: true };
}
this.doFormIFrameCall( post_data );
$().TFeedback( {
source: 'View', // viewId GovernmentDocument will be prepended in TFeedback functions.
delay: 5000
} );
break;
case 'employee_pay_stubs':
post_data = { 0: args, 1: false, 2: 'pdf', 3: true };
this.doFormIFrameCall( post_data );
break;
case 'employer_pay_stubs':
post_data = { 0: args, 1: false, 2: 'pdf', 3: false };
this.doFormIFrameCall( post_data );
break;
case 'pay_stub_transaction':
filter = {};
filter.filter_data = {};
filter.filter_data.user_id = { value: user_ids };
filter.filter_data.pay_period_id = { value: pay_period_ids };
Global.addViewTab( this.viewId, $.i18n._( 'Pay Stubs' ), window.location.href );
IndexViewController.goToView( 'PayStubTransaction', filter );
break;
case 'export_excel':
this.onExportClick( 'export' + this.api.key_name );
break;
case 'direct_deposit':
var data = {
filter_data: {
pay_stub_id: this.getGridSelectIdArray()
}
};
IndexViewController.openWizardController( 'ProcessTransactionsWizardController', data );
break;
}
}
onReportMenuClick( id ) {
this.onReportPrintClick( id );
}
doFormIFrameCall( postData ) {
Global.APIFileDownload( this.api.className, 'get' + this.api.key_name, postData );
}
getPayStubTabHtml() {
return `<div id="tab_pay_stub" class="edit-view-tab-outside">
<div class="edit-view-tab" id="tab_pay_stub_content_div">
<div class="first-column"></div>
<div class="second-column"></div>
<div class="inside-pay-stub-entry-editor-div full-width-column" style="float: left; position: relative">
</div>
</div>
</div>`;
}
}