1426 lines
45 KiB
JavaScript
1426 lines
45 KiB
JavaScript
|
import { TTBackboneView } from '@/views/TTBackboneView';
|
||
|
import { Global } from '@/global/Global';
|
||
|
|
||
|
export class DashletController extends TTBackboneView {
|
||
|
constructor( options = {} ) {
|
||
|
_.defaults( options, {
|
||
|
data: null,
|
||
|
api_dashboard: null,
|
||
|
api_user_report: null,
|
||
|
user_generic_data_api: null,
|
||
|
all_columns: null,
|
||
|
grid: null,
|
||
|
dashboard_data: null,
|
||
|
refresh_timer: null,
|
||
|
iframe_data: null,
|
||
|
initComplete: false,
|
||
|
iframe: null,
|
||
|
homeViewController: null,
|
||
|
initTimesheetGridComplete: null,
|
||
|
accumulated_total_grid_source_map: null,
|
||
|
accmulated_order_map: null
|
||
|
} );
|
||
|
|
||
|
super( options );
|
||
|
}
|
||
|
|
||
|
initialize( options ) {
|
||
|
super.initialize( options );
|
||
|
this.api_dashboard = TTAPI.APIDashboard;
|
||
|
this.user_generic_data_api = TTAPI.APIUserGenericData;
|
||
|
}
|
||
|
|
||
|
refreshIfNecessary() {
|
||
|
if ( this.data && this.data.data.dashlet_type == 'custom_report' || this.data.data.dashlet_type === 'news' ) {
|
||
|
if ( this.iframe_data ) {
|
||
|
this.addIframeBack();
|
||
|
this.setIframeData();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initContent() {
|
||
|
var $this = this;
|
||
|
this.setTitle();
|
||
|
this.initComplete = false;
|
||
|
|
||
|
if ( Global.isScrolledIntoView( $( $this.el ) ) ) {
|
||
|
doInit();
|
||
|
}
|
||
|
|
||
|
//BUG#2070 - Disable resizable for mobile because it negatively impacts usability
|
||
|
if ( Global.detectMobileBrowser() == false ) {
|
||
|
$( '#' + $( this.el ).attr( 'id' ) ).resizable( {
|
||
|
handles: 'all',
|
||
|
start: function( e, ui ) {
|
||
|
},
|
||
|
resize: function( e, ui ) {
|
||
|
$this.setGridSize();
|
||
|
},
|
||
|
stop: function( e, ui ) {
|
||
|
$this.addIframeBack();
|
||
|
var height = Math.round( ui["element"][0].offsetHeight / 10 ) * 10; //Snap to nearest 10px
|
||
|
var width = Math.round( ui["element"][0].offsetWidth / $( '.dashboard-container' ).width() * 100 ); //Snap nearest whole integer
|
||
|
|
||
|
//We perform math on the width value that we save, because of that we need to set the div to that value too.
|
||
|
//This should help prevent differences in width the users see while resizing their dashlets and after refreshing.
|
||
|
ui["element"][0].style.height = height + 'px';
|
||
|
ui["element"][0].style.width = width + '%';
|
||
|
|
||
|
$this.saveSize( height, width );
|
||
|
|
||
|
$this.homeViewController.updateLayout();
|
||
|
$this.homeViewController.dashboard_container.masonry( 'reloadItems' );
|
||
|
},
|
||
|
} );
|
||
|
//$( '#' + $( this.el ).attr( 'id' ) ).resizable( 'option', 'handles','all' );
|
||
|
}
|
||
|
|
||
|
this.homeViewController.dashboard_container.parent().scroll( function() {
|
||
|
if ( Global.isScrolledIntoView( $( $this.el ) ) && !$this.initComplete ) {
|
||
|
doInit();
|
||
|
}
|
||
|
} );
|
||
|
|
||
|
function doInit() {
|
||
|
if ( $this.data.data.dashlet_type == 'custom_list' ) {
|
||
|
$( $this.el ).addClass( 'custom_list' );
|
||
|
$this.initCustomViewContent();
|
||
|
} else if ( $this.data.data.dashlet_type == 'custom_report' ) {
|
||
|
$( $this.el ).addClass( 'custom-report' );
|
||
|
$this.initReportContent();
|
||
|
//DO NOT call .unbind here, as it breaks resizing dashlets at the very bottom that have to be scrolled into view by overwriting jquery-ui mousedown events
|
||
|
$( $this.el ).bind( 'mousedown', function() {
|
||
|
$this.removeIframe();
|
||
|
} );
|
||
|
$( $this.el ).bind( 'mouseup', function() {
|
||
|
$this.addIframeBack();
|
||
|
} );
|
||
|
} else if ( $this.data.data.dashlet_type == 'request_summary' ) {
|
||
|
$( $this.el ).addClass( 'request-summary' );
|
||
|
$this.initDefaultDashletContent( 'request_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'request_authorize_summary' ) {
|
||
|
$( $this.el ).addClass( 'request-authorize-summary' );
|
||
|
$this.initDefaultDashletContent( 'request_authorize_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'accrual_balance_summary' ) {
|
||
|
$( $this.el ).addClass( 'accrual-balance-summary' );
|
||
|
$this.initDefaultDashletContent( 'accrual_balance_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'exception_summary' ) {
|
||
|
$( $this.el ).addClass( 'exception-summary' );
|
||
|
$this.initDefaultDashletContent( 'exception_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'exception_summary_child' ) {
|
||
|
$( $this.el ).addClass( 'exception-summary-child' );
|
||
|
$this.initDefaultDashletContent( 'exception_summary_child' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'message_summary' ) {
|
||
|
$( $this.el ).addClass( 'message-summary' );
|
||
|
$this.initDefaultDashletContent( 'message_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'user_active_shift_summary' ) {
|
||
|
$( $this.el ).addClass( 'user-active-shift-summary' );
|
||
|
$this.initDefaultDashletContent( 'user_active_shift_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'timesheet_verification_summary' ) {
|
||
|
$( $this.el ).addClass( 'timesheet-verification-summary' );
|
||
|
$this.initDefaultDashletContent( 'timesheet_verification_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'timesheet_verification_summary_child' ) {
|
||
|
$( $this.el ).addClass( 'timesheet-verification_summary-child' );
|
||
|
$this.initDefaultDashletContent( 'timesheet_verification_summary_child' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'timesheet_summary' ) {
|
||
|
$( $this.el ).addClass( 'timesheet-summary' );
|
||
|
$this.initTimesheetContent( 'timesheet_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'schedule_summary' ) {
|
||
|
$( $this.el ).addClass( 'schedule-summary' );
|
||
|
$this.initDefaultDashletContent( 'schedule_summary' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'schedule_summary_child' ) {
|
||
|
$( $this.el ).addClass( 'schedule-summary-child' );
|
||
|
$this.initDefaultDashletContent( 'schedule_summary_child' );
|
||
|
} else if ( $this.data.data.dashlet_type == 'news' ) {
|
||
|
$( $this.el ).addClass( 'news' );
|
||
|
$this.initNewsContent();
|
||
|
$( $this.el ).unbind( 'mousedown' ).bind( 'mousedown', function() {
|
||
|
$this.removeIframe();
|
||
|
} );
|
||
|
$( $this.el ).unbind( 'mouseup' ).bind( 'mouseup', function() {
|
||
|
$this.addIframeBack();
|
||
|
|
||
|
} );
|
||
|
}
|
||
|
$this.initComplete = true;
|
||
|
}//if not android
|
||
|
}
|
||
|
|
||
|
onViewClick() {
|
||
|
var target_view = '';
|
||
|
var open_reoprt = false;
|
||
|
if ( this.data.data.dashlet_type == 'custom_list' ) {
|
||
|
target_view = this.data.data.view_name;
|
||
|
if ( target_view === 'Request-Authorization' ) {
|
||
|
target_view = 'RequestAuthorization';
|
||
|
} else if ( target_view === 'PayPeriodTimeSheetVerify' ) {
|
||
|
target_view = 'TimeSheetAuthorization';
|
||
|
} else if ( target_view === 'UserExpense-Authorization' ) {
|
||
|
target_view = 'ExpenseAuthorization';
|
||
|
} else if ( target_view === 'User' ) {
|
||
|
target_view = 'Employee';
|
||
|
} else if ( target_view === 'Transaction' ) {
|
||
|
target_view = 'InvoiceTransaction';
|
||
|
} else if ( target_view === 'UserWage' ) {
|
||
|
target_view = 'Wage';
|
||
|
}
|
||
|
} else {
|
||
|
switch ( this.data.data.dashlet_type ) {
|
||
|
case 'message_summary':
|
||
|
target_view = 'MessageControl';
|
||
|
break;
|
||
|
case 'exception_summary_child':
|
||
|
case 'exception_summary':
|
||
|
target_view = 'Exception';
|
||
|
break;
|
||
|
case 'schedule_summary':
|
||
|
case 'schedule_summary_child':
|
||
|
target_view = 'Schedule';
|
||
|
break;
|
||
|
case 'request_summary':
|
||
|
target_view = 'Request';
|
||
|
break;
|
||
|
case 'timesheet_verification_summary':
|
||
|
open_reoprt = true;
|
||
|
target_view = 'TimesheetSummaryReport';
|
||
|
break;
|
||
|
case 'timesheet_verification_summary_child':
|
||
|
open_reoprt = true;
|
||
|
target_view = 'TimesheetSummaryReport';
|
||
|
break;
|
||
|
case 'timesheet_summary':
|
||
|
target_view = 'TimeSheet';
|
||
|
break;
|
||
|
case 'user_active_shift_summary':
|
||
|
open_reoprt = true;
|
||
|
target_view = 'ActiveShiftReport';
|
||
|
break;
|
||
|
case 'request_authorize_summary':
|
||
|
target_view = 'RequestAuthorization';
|
||
|
break;
|
||
|
case 'accrual_balance_summary':
|
||
|
target_view = 'AccrualBalance';
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if ( open_reoprt ) {
|
||
|
IndexViewController.openReport( this.homeViewController, target_view );
|
||
|
} else {
|
||
|
IndexViewController.goToView( target_view );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
onCellFormat( cell_value, related_data, row ) {
|
||
|
cell_value = Global.decodeCellValue( cell_value );
|
||
|
var col_model = related_data.colModel;
|
||
|
var row_id = related_data.rowid;
|
||
|
var content_div = $( '<div class=\'punch-content-div\'></div>' );
|
||
|
var punch_info;
|
||
|
if ( related_data.pos === 0 ) {
|
||
|
if ( row.type === DashletController.TOTAL_ROW ) {
|
||
|
punch_info = $( '<span class=\'total\' style=\'font-size: 11px\'></span>' );
|
||
|
if ( Global.isSet( cell_value ) ) {
|
||
|
punch_info.text( cell_value );
|
||
|
} else {
|
||
|
punch_info.text( '' );
|
||
|
}
|
||
|
return punch_info.get( 0 ).outerHTML;
|
||
|
} else if ( row.type === DashletController.REGULAR_ROW ) {
|
||
|
|
||
|
punch_info = $( '<span class=\'top-line-span\' style=\'font-size: 11px\'></span>' );
|
||
|
if ( Global.isSet( cell_value ) ) {
|
||
|
punch_info.text( cell_value );
|
||
|
} else {
|
||
|
punch_info.text( '' );
|
||
|
}
|
||
|
return punch_info.get( 0 ).outerHTML;
|
||
|
}
|
||
|
return cell_value;
|
||
|
}
|
||
|
var ex_span;
|
||
|
var i;
|
||
|
var time_span;
|
||
|
var punch;
|
||
|
var break_span;
|
||
|
var related_punch;
|
||
|
var exception;
|
||
|
var len;
|
||
|
var text;
|
||
|
var ex;
|
||
|
var data;
|
||
|
if ( row.type === DashletController.TOTAL_ROW ) {
|
||
|
data = row[col_model.name + '_data'];
|
||
|
time_span = $( '<span class=\'total\'></span>' );
|
||
|
if ( Global.isSet( cell_value ) ) {
|
||
|
if ( data ) {
|
||
|
if ( data.hasOwnProperty( 'override' ) && data.override === true ) {
|
||
|
time_span.addClass( 'absence-override' );
|
||
|
}
|
||
|
if ( data.hasOwnProperty( 'note' ) && data.note ) {
|
||
|
cell_value = '*' + cell_value;
|
||
|
}
|
||
|
}
|
||
|
time_span.text( cell_value );
|
||
|
|
||
|
} else {
|
||
|
time_span.text( '' );
|
||
|
}
|
||
|
content_div.prepend( time_span );
|
||
|
} else if ( row.type === DashletController.REGULAR_ROW ) {
|
||
|
content_div.addClass( 'top-line' );
|
||
|
data = row[col_model.name + '_data'];
|
||
|
time_span = $( '<span ></span>' );
|
||
|
if ( Global.isSet( cell_value ) ) {
|
||
|
if ( data ) {
|
||
|
if ( data.hasOwnProperty( 'override' ) && data.override === true ) {
|
||
|
time_span.addClass( 'absence-override' );
|
||
|
}
|
||
|
if ( data.hasOwnProperty( 'note' ) && data.note ) {
|
||
|
cell_value = '*' + cell_value;
|
||
|
}
|
||
|
}
|
||
|
time_span.text( cell_value );
|
||
|
} else {
|
||
|
time_span.text( '' );
|
||
|
}
|
||
|
content_div.prepend( time_span );
|
||
|
} else if ( row.type === DashletController.ACCUMULATED_TIME_ROW ) {
|
||
|
data = row[col_model.name + '_data'];
|
||
|
time_span = $( '<span></span>' );
|
||
|
if ( Global.isSet( cell_value ) ) {
|
||
|
if ( data ) {
|
||
|
if ( data.hasOwnProperty( 'override' ) && data.override === true ) {
|
||
|
time_span.addClass( 'absence-override' );
|
||
|
}
|
||
|
if ( data.hasOwnProperty( 'note' ) && data.note ) {
|
||
|
cell_value = '*' + cell_value;
|
||
|
}
|
||
|
}
|
||
|
time_span.text( cell_value );
|
||
|
} else {
|
||
|
time_span.text( '' );
|
||
|
}
|
||
|
content_div.prepend( time_span );
|
||
|
} else {
|
||
|
time_span = $( '<span class=\'punch-time\'></span>' );
|
||
|
if ( Global.isSet( cell_value ) ) {
|
||
|
time_span.text( cell_value );
|
||
|
} else {
|
||
|
time_span.text( '' );
|
||
|
}
|
||
|
content_div.prepend( time_span );
|
||
|
}
|
||
|
return content_div.get( 0 ).outerHTML;
|
||
|
}
|
||
|
|
||
|
initNewsContent() {
|
||
|
var $this = this;
|
||
|
$( this.el ).find( '#grid' ).remove();
|
||
|
$( this.el ).find( '.view-btn' ).remove();
|
||
|
$( this.el ).find( '.refresh-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$( e.target ).addClass( 'button-rotate' );
|
||
|
$this.initNewsData();
|
||
|
} );
|
||
|
this.initNewsData();
|
||
|
this.startRefresh();
|
||
|
}
|
||
|
|
||
|
initNewsData() {
|
||
|
var $this = this;
|
||
|
this.api_dashboard.getDashletData( this.data.data.dashlet_type, {}, {
|
||
|
onResult: function( result ) {
|
||
|
var result = result.getResult();
|
||
|
$this.iframe_data = result;
|
||
|
if ( result ) {
|
||
|
$this.removeNoResultCover();
|
||
|
|
||
|
$this.setIframeData();
|
||
|
} else {
|
||
|
$this.showNoResultCover();
|
||
|
}
|
||
|
$( '.button-rotate' ).removeClass( 'button-rotate' );
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
//Error: Uncaught TypeError: Cannot read property 'contentDocument' of undefined in/interface/html5/#!m=MessageControl line 359
|
||
|
setIframeData( iframe_data ) {
|
||
|
if ( $( this.el ).find( '#iframe' ).length > 0 && $( this.el ).find( '#iframe' )[0].contentWindow.document ) {
|
||
|
$( this.el ).find( '#iframe' )[0].contentWindow.document.open();
|
||
|
$( this.el ).find( '#iframe' )[0].contentWindow.document.writeln( this.iframe_data );
|
||
|
$( this.el ).find( '#iframe' )[0].contentWindow.document.close();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initTimesheetContent( view_name ) {
|
||
|
$( this.el ).find( '#iframe' ).remove();
|
||
|
var $this = this;
|
||
|
this.api = this.getAPIByViewName( view_name );
|
||
|
// set grid id
|
||
|
if ( !Global.isSet( this.grid ) || !Global.isSet( this.grid.grid ) ) {
|
||
|
var grid = $( this.el ).find( '#grid' );
|
||
|
grid.attr( 'id', 'dashlet_' + this.data.id + '_grid' ); //Grid's id is ScriptName + _grid
|
||
|
}
|
||
|
// refresh event
|
||
|
$( this.el ).find( '.refresh-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$( e.target ).addClass( 'button-rotate' );
|
||
|
$this.initDefaultTimesheetData();
|
||
|
} );
|
||
|
// view event
|
||
|
$( this.el ).find( '.view-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$this.onViewClick();
|
||
|
} );
|
||
|
|
||
|
// start load grid data
|
||
|
this.initDefaultTimesheetData();
|
||
|
this.startRefresh();
|
||
|
}
|
||
|
|
||
|
initDefaultTimesheetData() {
|
||
|
var $this = this;
|
||
|
this.accumulated_total_grid_source_map = {};
|
||
|
this.api.getTimeSheetData( LocalCacheData.getLoginUser().id, new Date().format(), {
|
||
|
onResult: function( result ) {
|
||
|
//Error: Uncaught TypeError: Cannot read property 'start_display_date' of undefined in /interface/html5/#!m=Home line 409
|
||
|
if ( result.isValid() ) {
|
||
|
$this.full_timesheet_data = result.getResult();
|
||
|
$this.pay_period_data = $this.full_timesheet_data.pay_period_data;
|
||
|
$this.timesheet_verify_data = $this.full_timesheet_data.timesheet_verify_data;
|
||
|
if ( $this.full_timesheet_data.timesheet_dates ) {
|
||
|
$this.start_date = Global.strToDate( $this.full_timesheet_data.timesheet_dates.start_display_date );
|
||
|
$this.end_date = Global.strToDate( $this.full_timesheet_data.timesheet_dates.end_display_date );
|
||
|
// Error: Uncaught TypeError: Cannot read property 'format' of null in interface/html5/#!m=Home line 607
|
||
|
if ( !$this.initTimesheetGridComplete && $this.start_date && $this.end_date ) {
|
||
|
$this.buildAccumulatedTotalGrid();
|
||
|
$this.initTimesheetGridComplete = true;
|
||
|
}
|
||
|
$this.buildAccumulatedTotalData();
|
||
|
} else {
|
||
|
$this.showNoResultCover();
|
||
|
}
|
||
|
} else {
|
||
|
$this.showNoResultCover();
|
||
|
}
|
||
|
|
||
|
$( '.button-rotate' ).removeClass( 'button-rotate' );
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
buildAccmulatedOrderMap( total ) {
|
||
|
if ( !total ) {
|
||
|
return;
|
||
|
}
|
||
|
for ( var key in total ) {
|
||
|
for ( var key1 in total[key] ) {
|
||
|
this.accmulated_order_map[key1] = total[key][key1].order;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
buildAccumulatedTotalData() {
|
||
|
// There will be no grid when no start date and end date when calling getTimeSheetData
|
||
|
if ( !this.grid ) {
|
||
|
return;
|
||
|
}
|
||
|
this.accmulated_order_map = {};
|
||
|
this.accumulated_total_grid_source = [];
|
||
|
var accumulated_user_date_total_data = this.full_timesheet_data.accumulated_user_date_total_data;
|
||
|
var pay_period_accumulated_user_date_total_data = this.full_timesheet_data.pay_period_accumulated_user_date_total_data;
|
||
|
var accumulated_time = pay_period_accumulated_user_date_total_data.accumulated_time;
|
||
|
var premium_time = pay_period_accumulated_user_date_total_data.premium_time;
|
||
|
var absence_time = pay_period_accumulated_user_date_total_data.absence_time_taken;
|
||
|
// Save the order, will do sort after all data prepared.
|
||
|
if ( accumulated_user_date_total_data.total ) {
|
||
|
this.buildAccmulatedOrderMap( accumulated_user_date_total_data.total );
|
||
|
}
|
||
|
if ( pay_period_accumulated_user_date_total_data ) {
|
||
|
this.buildAccmulatedOrderMap( pay_period_accumulated_user_date_total_data );
|
||
|
}
|
||
|
if ( Global.isSet( accumulated_time ) ) {
|
||
|
this.buildSubGridsData( accumulated_time, 'pay_period', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'accumulated_time' );
|
||
|
} else {
|
||
|
accumulated_time = { total: { label: 'Total Time', total_time: '0' } };
|
||
|
this.buildSubGridsData( accumulated_time, 'pay_period', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'accumulated_time' );
|
||
|
}
|
||
|
if ( Global.isSet( premium_time ) ) {
|
||
|
this.buildSubGridsData( premium_time, 'pay_period', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'premium_time' );
|
||
|
}
|
||
|
if ( Global.isSet( absence_time ) ) {
|
||
|
this.buildSubGridsData( absence_time, 'pay_period', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'absence_time' );
|
||
|
}
|
||
|
accumulated_time = { total: { label: 'Total Time', total_time: '0' } };
|
||
|
this.buildSubGridsData( accumulated_time, 'week', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'accumulated_time' );
|
||
|
for ( var key in accumulated_user_date_total_data ) {
|
||
|
//Build Accumulated Total Grid week column data
|
||
|
if ( key === 'total' ) {
|
||
|
var total_result = accumulated_user_date_total_data.total;
|
||
|
accumulated_time = total_result.accumulated_time;
|
||
|
premium_time = total_result.premium_time;
|
||
|
absence_time = total_result.absence_time_taken;
|
||
|
if ( Global.isSet( accumulated_time ) ) {
|
||
|
this.buildSubGridsData( accumulated_time, 'week', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'accumulated_time' );
|
||
|
}
|
||
|
if ( Global.isSet( premium_time ) ) {
|
||
|
this.buildSubGridsData( premium_time, 'week', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'premium_time' );
|
||
|
}
|
||
|
if ( Global.isSet( absence_time ) ) {
|
||
|
this.buildSubGridsData( absence_time, 'week', this.accumulated_total_grid_source_map, this.accumulated_total_grid_source, 'absence_time' );
|
||
|
}
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
this.sortAccumulatedTotalData();
|
||
|
this.grid.setData( this.accumulated_total_grid_source );
|
||
|
}
|
||
|
|
||
|
sortAccumulatedTotalData() {
|
||
|
var sort_fields = ['order', 'punch_info'];
|
||
|
this.accumulated_total_grid_source.sort( Global.m_sort_by( sort_fields ) );
|
||
|
}
|
||
|
|
||
|
buildSubGridsData( array, date_string, map, result_array, parent_key ) {
|
||
|
var row;
|
||
|
var marked_regular_row = false; //Only mark the first regular time row, as thats where the bold top-line is going to go.
|
||
|
for ( var key in array ) {
|
||
|
if ( !map[key] ) {
|
||
|
row = {};
|
||
|
row.parent_key = parent_key;
|
||
|
row.key = key;
|
||
|
|
||
|
if ( parent_key === 'accumulated_time' ) {
|
||
|
|
||
|
if ( key === 'total' || key === 'worked_time' ) {
|
||
|
row.type = DashletController.TOTAL_ROW;
|
||
|
} else if ( marked_regular_row == false && key.indexOf( 'regular_time' ) === 0 ) {
|
||
|
row.type = DashletController.REGULAR_ROW;
|
||
|
marked_regular_row = true;
|
||
|
} else {
|
||
|
row.type = DashletController.ACCUMULATED_TIME_ROW;
|
||
|
}
|
||
|
|
||
|
if ( array[key].override ) {
|
||
|
row.is_override_row = true;
|
||
|
}
|
||
|
|
||
|
} else if ( parent_key === 'premium_time' ) {
|
||
|
row.type = DashletController.PREMIUM_ROW;
|
||
|
}
|
||
|
|
||
|
if ( this.accmulated_order_map[key] ) {
|
||
|
row.order = this.accmulated_order_map[key];
|
||
|
}
|
||
|
|
||
|
row.punch_info = array[key].label;
|
||
|
|
||
|
var key_array = key.split( '_' );
|
||
|
var no_id = false;
|
||
|
if ( key_array.length > 1 && key_array[1] == '0' ) {
|
||
|
no_id = true;
|
||
|
}
|
||
|
|
||
|
array[key].key = key;
|
||
|
row[date_string] = Global.getTimeUnit( array[key].total_time );
|
||
|
row[date_string + '_data'] = array[key];
|
||
|
|
||
|
//if id == 0, put the row as first row.
|
||
|
if ( no_id ) {
|
||
|
result_array.unshift( row );
|
||
|
} else {
|
||
|
result_array.push( row );
|
||
|
}
|
||
|
|
||
|
map[key] = row;
|
||
|
} else {
|
||
|
row = map[key];
|
||
|
if ( row[date_string] && key === 'total' ) { //Override total cell data since we set all to 00:00 at beginning
|
||
|
array[key].key = key;
|
||
|
row[date_string] = Global.getTimeUnit( array[key].total_time );
|
||
|
row[date_string + '_data'] = array[key];
|
||
|
|
||
|
if ( row.parent_key === 'accumulated_time' ) {
|
||
|
if ( array[key].override ) {
|
||
|
row.is_override_row = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
|
||
|
array[key].key = key;
|
||
|
row[date_string] = Global.getTimeUnit( array[key].total_time );
|
||
|
row[date_string + '_data'] = array[key];
|
||
|
|
||
|
if ( row.parent_key === 'accumulated_time' ) {
|
||
|
if ( array[key].override ) {
|
||
|
row.is_override_row = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getAccumulatedTotalGridPayperiodHeader() {
|
||
|
this.pay_period_header = $.i18n._( 'No Pay Period' );
|
||
|
var pay_period_id = this.timesheet_verify_data.pay_period_id;
|
||
|
if ( pay_period_id && this.pay_period_data ) {
|
||
|
for ( var key in this.pay_period_data ) {
|
||
|
var pay_period = this.pay_period_data[key];
|
||
|
if ( pay_period.id === pay_period_id ) {
|
||
|
var start_date = Global.strToDate( pay_period.start_date ).format();
|
||
|
var end_date = Global.strToDate( pay_period.end_date ).format();
|
||
|
this.pay_period_header = start_date + ' to ' + end_date;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
buildAccumulatedTotalGrid() {
|
||
|
var $this = this;
|
||
|
var columns = [];
|
||
|
var grid_id;
|
||
|
if ( !Global.isSet( this.grid ) ) {
|
||
|
grid_id = 'dashlet_' + this.data.id + '_grid';
|
||
|
}
|
||
|
var punch_in_out_column = {
|
||
|
name: 'punch_info',
|
||
|
index: 'punch_info',
|
||
|
label: ' ',
|
||
|
width: 200,
|
||
|
sortable: false,
|
||
|
title: false,
|
||
|
formatter: this.onCellFormat
|
||
|
};
|
||
|
columns.push( punch_in_out_column );
|
||
|
var start_date_str = this.start_date.format( Global.getLoginUserDateFormat() );
|
||
|
var end_date_str = this.end_date.format( Global.getLoginUserDateFormat() );
|
||
|
this.getAccumulatedTotalGridPayperiodHeader();
|
||
|
var column_1 = {
|
||
|
name: 'week',
|
||
|
index: 'week',
|
||
|
label: $.i18n._( 'Week' ) + '<br>' + start_date_str + ' to ' + end_date_str,
|
||
|
width: 100,
|
||
|
sortable: false,
|
||
|
title: false,
|
||
|
formatter: this.onCellFormat
|
||
|
};
|
||
|
var column_2 = {
|
||
|
name: 'pay_period',
|
||
|
index: 'pay_period',
|
||
|
label: $.i18n._( 'Pay Period' ) + '<br>' + this.pay_period_header,
|
||
|
width: 100,
|
||
|
sortable: false,
|
||
|
title: false,
|
||
|
formatter: this.onCellFormat
|
||
|
};
|
||
|
columns.push( column_1 );
|
||
|
columns.push( column_2 );
|
||
|
var grid_data = {};
|
||
|
if ( !this.grid ) { //#2571 - this.grid.jqGrid is not a function
|
||
|
grid_data = {
|
||
|
|
||
|
multiselectPosition: 'none',
|
||
|
gridComplete: function() {
|
||
|
if ( $( this ).jqGrid( 'getGridParam', 'data' ).length > 0 ) {
|
||
|
$this.setGridColumnsWidth();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
} else {
|
||
|
grid_data = {
|
||
|
shrinkToFit: false
|
||
|
}; //use the defaults
|
||
|
}
|
||
|
|
||
|
this.grid = new TTGrid( grid_id, grid_data, columns );
|
||
|
|
||
|
$this.setGridSize();
|
||
|
}
|
||
|
|
||
|
initDefaultDashletContent( view_name ) {
|
||
|
$( this.el ).find( '#iframe' ).remove();
|
||
|
var $this = this;
|
||
|
this.api = this.getAPIByViewName( view_name );
|
||
|
// when auto resize
|
||
|
$( window ).off( 'resize.dashlet_content' ).on( 'resize.dashlet_content', function() {
|
||
|
if ( $this.grid ) {
|
||
|
$this.setGridSize();
|
||
|
}
|
||
|
} );
|
||
|
// set grid id
|
||
|
if ( !Global.isSet( this.grid ) ) {
|
||
|
var grid = $( this.el ).find( '#grid' );
|
||
|
grid.attr( 'id', 'dashlet_' + this.data.id + '_grid' ); //Grid's id is ScriptName + _grid
|
||
|
}
|
||
|
// refresh event
|
||
|
$( this.el ).find( '.refresh-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$( e.target ).addClass( 'button-rotate' );
|
||
|
$this.initDefaultDashletData();
|
||
|
} );
|
||
|
// view event
|
||
|
$( this.el ).find( '.view-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$this.onViewClick();
|
||
|
} );
|
||
|
|
||
|
// start load grid data
|
||
|
this.initDefaultDashletData();
|
||
|
this.startRefresh();
|
||
|
}
|
||
|
|
||
|
initDefaultDashletData() {
|
||
|
var $this = this;
|
||
|
$this.getDefaultDashletData( function() {
|
||
|
$this.getAllColumns( function() {
|
||
|
$this.setSelectLayout();
|
||
|
var data = Global.formatGridData( $this.dashboard_data.data, $this.data.data.dashlet_type );
|
||
|
data = $this.processId( data );
|
||
|
if ( $this.grid ) {
|
||
|
$this.grid.setData( data );
|
||
|
}
|
||
|
$( '.button-rotate' ).removeClass( 'button-rotate' );
|
||
|
if ( !Global.isArray( $this.dashboard_data.data ) || $this.dashboard_data.data.length < 1 ) {
|
||
|
$this.showNoResultCover();
|
||
|
} else {
|
||
|
$this.removeNoResultCover();
|
||
|
}
|
||
|
$this.setGridCellBackGround();
|
||
|
} );
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
processId( data ) {
|
||
|
var start_id = -2;
|
||
|
// Add a random id to make sure each row has different id when the item don't have id itself (Scheudle summary)
|
||
|
data = _.map( data, function( item ) {
|
||
|
if ( item.hasOwnProperty( 'id' ) && ( !item.id || item.id == TTUUID.zero_id ) ) {
|
||
|
item.id = start_id;
|
||
|
}
|
||
|
start_id--;
|
||
|
return item;
|
||
|
} );
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
addIframeBack() {
|
||
|
var $this = this;
|
||
|
if ( $this.iframe ) {
|
||
|
$( $this.el ).find( '.content' ).append( $this.iframe );
|
||
|
$this.setIframeData();
|
||
|
$this.iframe = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
removeIframe() {
|
||
|
var $this = this;
|
||
|
$this.iframe = $( $this.el ).find( '#iframe' );
|
||
|
$( $this.el ).find( '#iframe' ).remove();
|
||
|
}
|
||
|
|
||
|
saveSize( h, w ) {
|
||
|
this.data.data.width = w;
|
||
|
this.data.data.height = h;
|
||
|
this.user_generic_data_api.setUserGenericData( this.data, {
|
||
|
onResult: function( result ) {
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
setGridSize() {
|
||
|
if ( ( !this.grid || !this.grid.grid || !this.grid.grid.is( ':visible' ) ) ) {
|
||
|
return;
|
||
|
}
|
||
|
this.grid.grid.setGridWidth( $( this.el ).find( '.content' ).width() );
|
||
|
this.grid.grid.setGridHeight( $( this.el ).find( '.content' ).height() - 28 );
|
||
|
}
|
||
|
|
||
|
initReportContent() {
|
||
|
var $this = this;
|
||
|
$( this.el ).find( '#grid' ).remove();
|
||
|
$( this.el ).find( '.view-btn' ).remove();
|
||
|
$( this.el ).find( '.refresh-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$( e.target ).addClass( 'button-rotate' );
|
||
|
$this.initReportData();
|
||
|
} );
|
||
|
this.api_user_report = TTAPI.APIUserReportData;
|
||
|
this.api = this.getAPIByViewName( this.data.data.report );
|
||
|
this.initReportData();
|
||
|
this.startRefresh();
|
||
|
}
|
||
|
|
||
|
cleanWhenUnloadView() {
|
||
|
if ( this.refresh_timer ) {
|
||
|
clearInterval( this.refresh_timer );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initReportData() {
|
||
|
var $this = this;
|
||
|
if ( $this.data.data.template !== 'saved_report' ) {
|
||
|
var report_api = this.getAPIByViewName( this.data.data.report );
|
||
|
report_api.getTemplate( $this.data.data.template, {
|
||
|
onResult: function( result ) {
|
||
|
var config = result.getResult();
|
||
|
config.other = {
|
||
|
'page_orientation': 'P',
|
||
|
'font_size': 0,
|
||
|
'auto_refresh': false,
|
||
|
'disable_grand_total': false,
|
||
|
'maximum_page_limit': 100,
|
||
|
'show_duplicate_values': false,
|
||
|
is_embedded: true
|
||
|
};
|
||
|
$this.api['get' + $this.api.key_name]( config, 'html', {
|
||
|
onResult: function( res ) {
|
||
|
var result = res.getResult();
|
||
|
$this.iframe_data = result;
|
||
|
if ( result ) {
|
||
|
$this.setIframeData();
|
||
|
}
|
||
|
$( '.button-rotate' ).removeClass( 'button-rotate' );
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
} );
|
||
|
} else {
|
||
|
$this.api_user_report.getUserReportData( {
|
||
|
filter_data: {
|
||
|
id: $this.data.data.saved_report_id
|
||
|
}
|
||
|
}, {
|
||
|
onResult: function( result ) {
|
||
|
var result_data = result.getResult();
|
||
|
if ( result_data && result_data.length == 1 ) {
|
||
|
if ( result_data[0].data.config.other ) {
|
||
|
result_data[0].data.config.other.is_embedded = true;
|
||
|
} else {
|
||
|
result_data[0].data.config.other = { is_embedded: true };
|
||
|
}
|
||
|
$this.api['get' + $this.api.key_name]( result_data[0].data.config, 'html', {
|
||
|
onResult: function( res ) {
|
||
|
var result = res.getResult();
|
||
|
$this.iframe_data = result;
|
||
|
if ( result ) {
|
||
|
$this.setIframeData();
|
||
|
}
|
||
|
$( '.button-rotate' ).removeClass( 'button-rotate' );
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
startRefresh() {
|
||
|
var $this = this;
|
||
|
var auto_refresh = this.data.data.auto_refresh;
|
||
|
if ( auto_refresh > 0 ) {
|
||
|
this.refresh_timer = setInterval( function() {
|
||
|
//Don't refresh dashlets if user is idle for more than 1 minute.
|
||
|
if ( Global.idle_time && Global.idle_time > 1 ) { //Idle time is in minutes. -- This is required to prevent refreshing dashlets from keeping the session active indefinitely.
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( LocalCacheData.current_open_primary_controller.viewId !== 'Home' ) {
|
||
|
clearInterval( $this.refresh_timer );
|
||
|
}
|
||
|
if ( $this.data.data.dashlet_type == 'custom_list' ) {
|
||
|
$this.initCustomViewData();
|
||
|
} else if ( $this.data.data.dashlet_type == 'custom_report' ) {
|
||
|
$this.initReportData();
|
||
|
} else if ( $this.data.data.dashlet_type == 'exception_summary' ||
|
||
|
$this.data.data.dashlet_type == 'request_summary' ||
|
||
|
$this.data.data.dashlet_type == 'message_summary' ||
|
||
|
$this.data.data.dashlet_type == 'exception_summary_child' ||
|
||
|
$this.data.data.dashlet_type == 'request_authorize_summary' ||
|
||
|
$this.data.data.dashlet_type == 'accrual_balance_summary' ||
|
||
|
$this.data.data.dashlet_type == 'user_active_shift_summary' ||
|
||
|
$this.data.data.dashlet_type == 'timesheet_verification_summary' ||
|
||
|
$this.data.data.dashlet_type == 'timesheet_verification_summary_child' ||
|
||
|
$this.data.data.dashlet_type == 'schedule_summary' ||
|
||
|
$this.data.data.dashlet_type == 'schedule_summary_child' ) {
|
||
|
$this.initDefaultDashletData();
|
||
|
} else if ( $this.data.data.dashlet_type == 'timesheet_summary' ) {
|
||
|
$this.initDefaultTimesheetData();
|
||
|
} else if ( $this.data.data.dashlet_type == 'news' ) {
|
||
|
$this.initNewsData();
|
||
|
}
|
||
|
|
||
|
}, ( auto_refresh * 1000 ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initCustomViewContent() {
|
||
|
$( this.el ).find( '#iframe' ).remove();
|
||
|
var $this = this;
|
||
|
this.api = this.getAPIByViewName( this.data.data.view_name );
|
||
|
// when auto resize
|
||
|
$( window ).off( 'resize.dashlet_custom_content' ).on( 'resize.dashlet_custom_content', function() {
|
||
|
if ( $this.grid ) {
|
||
|
$this.setGridSize();
|
||
|
}
|
||
|
} );
|
||
|
// set grid id
|
||
|
if ( !Global.isSet( this.grid ) ) {
|
||
|
var grid = $( this.el ).find( '#grid' );
|
||
|
grid.attr( 'id', 'dashlet_' + this.data.id + '_grid' ); //Grid's id is ScriptName + _grid
|
||
|
}
|
||
|
// refresh event
|
||
|
$( this.el ).find( '.refresh-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$( e.target ).addClass( 'button-rotate' );
|
||
|
$this.initCustomViewData();
|
||
|
} );
|
||
|
// view event
|
||
|
$( this.el ).find( '.view-btn' ).unbind( 'click' ).bind( 'click', function( e ) {
|
||
|
$this.onViewClick();
|
||
|
} );
|
||
|
|
||
|
// start load grid data
|
||
|
this.initCustomViewData();
|
||
|
this.startRefresh();
|
||
|
}
|
||
|
|
||
|
setGridCellBackGround() {
|
||
|
var data = this.grid.getData();
|
||
|
var len;
|
||
|
var i;
|
||
|
var item;
|
||
|
if ( this.data.data.dashlet_type === 'exception_summary' ||
|
||
|
this.data.data.dashlet_type === 'exception_summary_child' ) {
|
||
|
//Error: TypeError: data is undefined in /interface/html5/framework/jquery.min.js?v=7.4.6-20141027-074127 line 2 > eval line 70
|
||
|
if ( !data ) {
|
||
|
return;
|
||
|
}
|
||
|
len = data.length;
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
item = data[i];
|
||
|
if ( item.exception_background_color ) {
|
||
|
var severity = $( this.el ).find( 'tr[id=\'' + item.id + '\']' ).find( 'td[aria-describedby="dashlet_' + this.data.id + '_grid_severity"]' );
|
||
|
severity.css( 'background-color', item.exception_background_color );
|
||
|
severity.css( 'font-weight', 'bold' );
|
||
|
}
|
||
|
if ( item.exception_color ) {
|
||
|
var code = $( this.el ).find( 'tr[id=\'' + item.id + '\']' ).find( 'td[aria-describedby="dashlet_' + this.data.id + '_grid_exception_policy_type_id"]' );
|
||
|
code.css( 'color', item.exception_color );
|
||
|
code.css( 'font-weight', 'bold' );
|
||
|
}
|
||
|
}
|
||
|
} else if ( this.data.data.dashlet_type === 'message_summary' ) {
|
||
|
//Error: TypeError: data is undefined in /interface/html5/framework/jquery.min.js?v=7.4.6-20141027-074127 line 2 > eval line 70
|
||
|
if ( !data ) {
|
||
|
return;
|
||
|
}
|
||
|
len = data.length;
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
item = data[i];
|
||
|
if ( item.status_id == 10 ) {
|
||
|
$( this.el ).find( 'tr[id=\'' + item.id + '\'] td' ).css( 'font-weight', 'bold' );
|
||
|
}
|
||
|
}
|
||
|
} else if ( this.data.data.dashlet_type === 'request_summary' ) {
|
||
|
//Error: TypeError: data is undefined in /interface/html5/framework/jquery.min.js?v=7.4.6-20141027-074127 line 2 > eval line 70
|
||
|
if ( !data ) {
|
||
|
return;
|
||
|
}
|
||
|
len = data.length;
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
item = data[i];
|
||
|
if ( item.status_id == 30 ) {
|
||
|
$( this.el ).find( 'tr[id=\'' + item.id + '\']' ).addClass( 'bolder-request' );
|
||
|
}
|
||
|
}
|
||
|
} else if ( this.data.data.dashlet_type === 'user_active_shift_summary' ) {
|
||
|
//Error: TypeError: data is undefined in /interface/html5/framework/jquery.min.js?v=7.4.6-20141027-074127 line 2 > eval line 70
|
||
|
if ( !data ) {
|
||
|
return;
|
||
|
}
|
||
|
len = data.length;
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
item = data[i];
|
||
|
if ( item._status_id == 10 ) {
|
||
|
$( this.el ).find( 'tr[id=\'' + item.id + '\']' ).addClass( 'light-green' );
|
||
|
} else if ( item.status === 'Out' ) {
|
||
|
$( this.el ).find( 'tr[id=\'' + item.id + '\']' ).addClass( 'light-red' );
|
||
|
}
|
||
|
}
|
||
|
} else if ( this.data.data.dashlet_type === 'schedule_summary' ||
|
||
|
this.data.data.dashlet_type === 'schedule_summary_child' ) {
|
||
|
//Error: TypeError: data is undefined in /interface/html5/framework/jquery.min.js?v=7.4.6-20141027-074127 line 2 > eval line 70
|
||
|
if ( !data ) {
|
||
|
return;
|
||
|
}
|
||
|
len = data.length;
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
item = data[i];
|
||
|
if ( item.status_id == 20 ) {
|
||
|
$( this.el ).find( 'tr[id=\'' + item.id + '\']' ).addClass( 'red-absence' ); //Do not use ids or coloring gets broken by recurring schedules without ids
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
startCustomViewAutoRefresh() {
|
||
|
var $this = this;
|
||
|
var auto_refresh = this.data.data.auto_refresh;
|
||
|
if ( auto_refresh > 0 ) {
|
||
|
this.refresh_timer = setInterval( function() {
|
||
|
if ( LocalCacheData.current_open_primary_controller.viewId !== 'Home' ) {
|
||
|
clearInterval( $this.refresh_timer );
|
||
|
}
|
||
|
$this.initCustomViewData();
|
||
|
}, ( auto_refresh * 1000 ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
initCustomViewData() {
|
||
|
var $this = this;
|
||
|
$this.getCustomListDashboardData( function() {
|
||
|
$this.getAllColumns( function() {
|
||
|
$this.setSelectLayout();
|
||
|
$this.grid.setData( Global.formatGridData( $this.dashboard_data.data ) );
|
||
|
$( '.button-rotate' ).removeClass( 'button-rotate' );
|
||
|
if ( !Global.isArray( $this.dashboard_data.data ) ) {
|
||
|
$this.showNoResultCover();
|
||
|
} else {
|
||
|
$this.removeNoResultCover();
|
||
|
}
|
||
|
TTPromise.wait( null, null, function() {
|
||
|
$this.setGridCellBackGround();
|
||
|
} );
|
||
|
} );
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
getCustomListDashboardData( callback ) {
|
||
|
var $this = this;
|
||
|
if ( !this.data.data.rows_per_page ) {
|
||
|
this.data.data.rows_per_page = 0;
|
||
|
}
|
||
|
this.api_dashboard.getDashletData( this.data.data.dashlet_type, {
|
||
|
'class': this.data.data.view_name,
|
||
|
'user_generic_data_id': this.data.data.layout_id.toString(),
|
||
|
'rows_per_page': this.data.data.rows_per_page.toString()
|
||
|
}, {
|
||
|
onResult: function( result ) {
|
||
|
var result_data = result.getResult();
|
||
|
$this.dashboard_data = result_data;
|
||
|
callback();
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
getDefaultDashletData( callback ) {
|
||
|
var $this = this;
|
||
|
if ( !this.data.data.rows_per_page ) {
|
||
|
this.data.data.rows_per_page = 0;
|
||
|
}
|
||
|
this.api_dashboard.getDashletData( this.data.data.dashlet_type, {
|
||
|
'rows_per_page': this.data.data.rows_per_page.toString()
|
||
|
}, {
|
||
|
onResult: function( result ) {
|
||
|
var result_data = result.getResult();
|
||
|
$this.dashboard_data = result_data;
|
||
|
callback();
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
buildDisplayColumns( apiDisplayColumnsArray ) {
|
||
|
var len = this.all_columns.length;
|
||
|
var len1 = apiDisplayColumnsArray ? apiDisplayColumnsArray.length : 0;
|
||
|
var display_columns = [];
|
||
|
for ( var j = 0; j < len1; j++ ) {
|
||
|
for ( var i = 0; i < len; i++ ) {
|
||
|
if ( apiDisplayColumnsArray[j] === this.all_columns[i].value ) {
|
||
|
display_columns.push( this.all_columns[i] );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return display_columns;
|
||
|
}
|
||
|
|
||
|
onGridDblClickRow() {
|
||
|
this.onViewClick();
|
||
|
}
|
||
|
|
||
|
setSelectLayout() {
|
||
|
var $this = this;
|
||
|
var grid_id;
|
||
|
if ( !Global.isSet( this.grid ) ) {
|
||
|
grid_id = 'dashlet_' + this.data.id + '_grid';
|
||
|
if ( $( '#' + grid_id ).length > 0 ) {
|
||
|
$( '#' + grid_id ).jqGrid( 'GridUnload' ); // prevent js exception where grid gets detached
|
||
|
}
|
||
|
}
|
||
|
var display_columns = this.buildDisplayColumns( this.dashboard_data.display_columns );
|
||
|
//Set Data Grid on List view
|
||
|
var column_info_array = [];
|
||
|
var len = display_columns.length;
|
||
|
var start_from = 0;
|
||
|
for ( var i = start_from; i < len; i++ ) {
|
||
|
var view_column_data = display_columns[i];
|
||
|
var column_info = {
|
||
|
name: view_column_data.value,
|
||
|
index: view_column_data.value,
|
||
|
label: view_column_data.label,
|
||
|
width: 100,
|
||
|
sortable: false,
|
||
|
title: false
|
||
|
};
|
||
|
column_info_array.push( column_info );
|
||
|
}
|
||
|
|
||
|
if ( !this.grid ) { // #2571 -this.grid.jqGrid is not a function
|
||
|
var grid_data = {
|
||
|
multiselectPosition: 'none',
|
||
|
onSelectRow: $.proxy( this.onGridSelectRow, this ),
|
||
|
ondblClickRow: function() {
|
||
|
$this.onGridDblClickRow();
|
||
|
},
|
||
|
gridComplete: function() {
|
||
|
if ( $( this ).jqGrid( 'getGridParam', 'data' ).length > 0 ) {
|
||
|
$this.setGridColumnsWidth();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
this.grid = new TTGrid( grid_id, grid_data, column_info_array );
|
||
|
}
|
||
|
$this.setGridSize();
|
||
|
}
|
||
|
|
||
|
showNoResultCover() {
|
||
|
this.removeNoResultCover();
|
||
|
this.no_result_box = Global.loadWidgetByName( WidgetNamesDic.NO_RESULT_BOX );
|
||
|
if ( this.no_result_box ) {
|
||
|
this.no_result_box.NoResultBox( {
|
||
|
related_view_controller: this,
|
||
|
is_new: false,
|
||
|
message: this.getNoResultMessage()
|
||
|
} );
|
||
|
this.no_result_box.attr( 'id', 'dashlet_' + this.data.id + '_no_result_box' );
|
||
|
$( '#dashlet_' + this.data.id + '_no_result_box' ).remove(); //prevent doubleups
|
||
|
var grid_div = $( this.el ).find( '.content' );
|
||
|
grid_div.append( this.no_result_box );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getNoResultMessage() {
|
||
|
//Show result message base on different dashlet type
|
||
|
var result = $.i18n._( 'No Results Found' );
|
||
|
switch ( this.data.data.dashlet_type ) {
|
||
|
case 'schedule_summary':
|
||
|
result = $.i18n._( 'Perhaps if you ask nicely, your supervisor will add a schedule for you?' );
|
||
|
break;
|
||
|
case 'exception_summary':
|
||
|
result = $.i18n._( 'No exceptions to correct, great job!' );
|
||
|
break;
|
||
|
case 'message_summary':
|
||
|
result = $.i18n._( 'All messages are read, nicely done!' );
|
||
|
break;
|
||
|
case 'request_summary':
|
||
|
result = $.i18n._( 'Send a request to your supervisor by clicking Profile -> Requests.' );
|
||
|
break;
|
||
|
case 'accrual_balance_summary':
|
||
|
result = $.i18n._( 'No accrual balances at this time.' );
|
||
|
break;
|
||
|
case 'timesheet_summary':
|
||
|
result = $.i18n._( 'Timesheet not available.' );
|
||
|
break;
|
||
|
case 'timesheet_verification_summary':
|
||
|
case 'timesheet_verification_summary_child':
|
||
|
result = $.i18n._( 'No timesheets to verify yet.' );
|
||
|
break;
|
||
|
case 'schedule_summary_child':
|
||
|
result = $.i18n._( 'Schedules can be added by clicking Schedule -> Schedules.' );
|
||
|
break;
|
||
|
case 'exception_summary_child':
|
||
|
result = $.i18n._( 'All exceptions are corrected... You can relax now!' );
|
||
|
break;
|
||
|
case 'user_active_shift_summary':
|
||
|
result = $.i18n._( 'No active shifts at this moment.' );
|
||
|
break;
|
||
|
case 'request_authorize_summary':
|
||
|
result = $.i18n._( 'All requests are authorized, excellent work!' );
|
||
|
break;
|
||
|
case 'news':
|
||
|
result = $.i18n._( 'Slow news day, nothing to see here yet...' );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
removeNoResultCover() {
|
||
|
if ( this.no_result_box && this.no_result_box.length > 0 ) {
|
||
|
this.no_result_box.remove();
|
||
|
}
|
||
|
this.no_result_box = null;
|
||
|
}
|
||
|
|
||
|
getAllColumns( callBack ) {
|
||
|
var $this = this;
|
||
|
|
||
|
if ( this.api ) { // #2571 - Cannot read property 'getOptions' of null
|
||
|
this.api.getOptions( 'columns', {
|
||
|
onResult: function( columns_result ) {
|
||
|
var columns_result_data = columns_result.getResult();
|
||
|
$this.all_columns = Global.buildColumnArray( columns_result_data );
|
||
|
if ( callBack ) {
|
||
|
callBack();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getDefaultDisplayColumns( callBack ) {
|
||
|
var $this = this;
|
||
|
this.api.getOptions( 'default_display_columns', {
|
||
|
onResult: function( columns_result ) {
|
||
|
var columns_result_data = columns_result.getResult();
|
||
|
$this.default_display_columns = columns_result_data;
|
||
|
if ( callBack ) {
|
||
|
callBack();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
} );
|
||
|
}
|
||
|
|
||
|
setTitle() {
|
||
|
$( this.el ).find( '.title' ).text( this.data.name );
|
||
|
}
|
||
|
|
||
|
getAPIByViewName( view_name ) {
|
||
|
var api = null;
|
||
|
switch ( view_name.toLowerCase() ) { //Lower case the view_name to avoid case sensitivity mismatches.
|
||
|
case 'message_summary':
|
||
|
api = TTAPI.APIMessageControl;
|
||
|
break;
|
||
|
case 'schedule_summary':
|
||
|
case 'schedule_summary_child':
|
||
|
case 'schedule':
|
||
|
api = TTAPI.APISchedule;
|
||
|
break;
|
||
|
case 'exception':
|
||
|
case 'exception_summary':
|
||
|
case 'exception_summary_child':
|
||
|
api = TTAPI.APIException;
|
||
|
break;
|
||
|
case 'invoice':
|
||
|
api = TTAPI.APIInvoice;
|
||
|
break;
|
||
|
case 'user':
|
||
|
api = TTAPI.APIUser;
|
||
|
break;
|
||
|
case 'request_summary':
|
||
|
case 'request':
|
||
|
case 'request-authorization':
|
||
|
case 'request_authorize_summary':
|
||
|
api = TTAPI.APIRequest;
|
||
|
break;
|
||
|
case 'accrual_balance_summary':
|
||
|
api = TTAPI.APIAccrualBalance;
|
||
|
break;
|
||
|
case 'timesheet_verification_summary':
|
||
|
case 'timesheet_verification_summary_child':
|
||
|
api = TTAPI.APITimesheetSummaryReport;
|
||
|
break;
|
||
|
case 'timesheet_summary':
|
||
|
api = TTAPI.APITimeSheet;
|
||
|
break;
|
||
|
case 'user_active_shift_summary':
|
||
|
api = TTAPI.APIActiveShiftReport;
|
||
|
break;
|
||
|
case 'payperiodtimesheetverify':
|
||
|
api = TTAPI.APIPayPeriodTimeSheetVerify;
|
||
|
break;
|
||
|
case 'userexpense':
|
||
|
case 'userexpense-authorization':
|
||
|
api = TTAPI.APIUserExpense;
|
||
|
break;
|
||
|
case 'timesheetsummaryreport':
|
||
|
api = TTAPI.APITimesheetSummaryReport;
|
||
|
break;
|
||
|
case 'timesheetdetailreport':
|
||
|
api = TTAPI.APITimesheetDetailReport;
|
||
|
break;
|
||
|
case 'accrualbalance':
|
||
|
api = TTAPI.APIAccrualBalance;
|
||
|
break;
|
||
|
case 'accrual':
|
||
|
api = TTAPI.APIAccrual;
|
||
|
break;
|
||
|
case 'recurringschedulecontrol':
|
||
|
api = TTAPI.APIRecurringScheduleControl;
|
||
|
break;
|
||
|
case 'recurringscheduletemplatecontrol':
|
||
|
api = TTAPI.APIRecurringScheduleTemplateControl;
|
||
|
break;
|
||
|
case 'job':
|
||
|
api = TTAPI.APIJob;
|
||
|
break;
|
||
|
case 'jobitem':
|
||
|
api = TTAPI.APIJobItem;
|
||
|
break;
|
||
|
case 'usercontact':
|
||
|
api = TTAPI.APIUserContact;
|
||
|
break;
|
||
|
case 'userwage':
|
||
|
api = TTAPI.APIUserWage;
|
||
|
break;
|
||
|
case 'paystub':
|
||
|
api = TTAPI.APIPayStub;
|
||
|
break;
|
||
|
case 'payperiod':
|
||
|
api = TTAPI.APIPayPeriod;
|
||
|
break;
|
||
|
case 'paystubamendment':
|
||
|
api = TTAPI.APIPayStubAmendment;
|
||
|
break;
|
||
|
case 'client':
|
||
|
api = TTAPI.APIClient;
|
||
|
break;
|
||
|
case 'clientcontact':
|
||
|
api = TTAPI.APIClientContact;
|
||
|
break;
|
||
|
case 'transaction':
|
||
|
api = TTAPI.APITransaction;
|
||
|
break;
|
||
|
case 'userreviewcontrol':
|
||
|
api = TTAPI.APIUserReviewControl;
|
||
|
break;
|
||
|
case 'jobvacancy':
|
||
|
api = TTAPI.APIJobVacancy;
|
||
|
break;
|
||
|
case 'jobapplicant':
|
||
|
api = TTAPI.APIJobApplicant;
|
||
|
break;
|
||
|
case 'jobapplication':
|
||
|
api = TTAPI.APIJobApplication;
|
||
|
break;
|
||
|
case 'accrualbalancesummaryreport':
|
||
|
api = TTAPI.APIAccrualBalanceSummaryReport;
|
||
|
break;
|
||
|
case 'usersummaryreport':
|
||
|
api = TTAPI.APIUserSummaryReport;
|
||
|
break;
|
||
|
case 'activeshiftreport':
|
||
|
api = TTAPI.APIActiveShiftReport;
|
||
|
break;
|
||
|
case 'audittrailreport':
|
||
|
api = TTAPI.APIAuditTrailReport;
|
||
|
break;
|
||
|
case 'schedulesummaryreport':
|
||
|
api = TTAPI.APIScheduleSummaryReport;
|
||
|
break;
|
||
|
case 'punchsummaryreport':
|
||
|
api = TTAPI.APIPunchSummaryReport;
|
||
|
break;
|
||
|
case 'exceptionreport':
|
||
|
api = TTAPI.APIExceptionReport;
|
||
|
break;
|
||
|
case 'paystubsummaryreport':
|
||
|
api = TTAPI.APIPayStubSummaryReport;
|
||
|
break;
|
||
|
case 'userexpensereport':
|
||
|
api = TTAPI.APIUserExpenseReport;
|
||
|
break;
|
||
|
case 'jobsummaryreport':
|
||
|
api = TTAPI.APIJobSummaryReport;
|
||
|
break;
|
||
|
case 'jobdetailreport':
|
||
|
api = TTAPI.APIJobDetailReport;
|
||
|
break;
|
||
|
case 'jobinformationreport':
|
||
|
api = TTAPI.APIJobInformationReport;
|
||
|
break;
|
||
|
case 'jobiteminformationreport':
|
||
|
api = TTAPI.APIJobItemInformationReport;
|
||
|
break;
|
||
|
case 'invoicetransactionsummaryreport':
|
||
|
api = TTAPI.APIInvoiceTransactionSummaryReport;
|
||
|
break;
|
||
|
case 'userqualificationreport':
|
||
|
api = TTAPI.APIUserQualificationReport;
|
||
|
break;
|
||
|
case 'kpireport':
|
||
|
api = TTAPI.APIKPIReport;
|
||
|
break;
|
||
|
case 'userrecruitmentsummaryreport':
|
||
|
api = TTAPI.APIUserRecruitmentSummaryReport;
|
||
|
break;
|
||
|
case 'userrecruitmentdetailreport':
|
||
|
api = TTAPI.APIUserRecruitmentDetailReport;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return api;
|
||
|
}
|
||
|
|
||
|
setGridColumnsWidth() {
|
||
|
var col_model = this.grid.getGridParam( 'colModel' );
|
||
|
var grid_data = this.grid.getGridParam( 'data' );
|
||
|
this.grid_total_width = 0;
|
||
|
//Possible exception
|
||
|
//Error: Uncaught TypeError: Cannot read property 'length' of undefined in /interface/html5/#!m=TimeSheet&date=20141102&user_id=53130 line 4288
|
||
|
if ( !col_model ) {
|
||
|
return;
|
||
|
}
|
||
|
for ( var i = 0; i < col_model.length; i++ ) {
|
||
|
var col = col_model[i];
|
||
|
var field = col.name;
|
||
|
var longest_words = '';
|
||
|
for ( var j = 0; j < grid_data.length; j++ ) {
|
||
|
var row_data = grid_data[j];
|
||
|
if ( !row_data.hasOwnProperty( field ) ) {
|
||
|
break;
|
||
|
}
|
||
|
var current_words = row_data[field];
|
||
|
if ( !current_words ) {
|
||
|
current_words = '';
|
||
|
}
|
||
|
if ( !longest_words ) {
|
||
|
longest_words = current_words.toString();
|
||
|
} else {
|
||
|
if ( current_words && current_words.toString().length > longest_words.length ) {
|
||
|
longest_words = current_words.toString();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if ( longest_words ) {
|
||
|
var width_test = $( '<span id="width_test"></span>' );
|
||
|
width_test.css( 'font-size', '11' );
|
||
|
width_test.css( 'font-weight', 'normal' );
|
||
|
$( 'body' ).append( width_test );
|
||
|
width_test.text( longest_words );
|
||
|
var width = width_test.width();
|
||
|
width_test.text( col.label );
|
||
|
var header_width = width_test.width();
|
||
|
if ( header_width > width ) {
|
||
|
width = header_width + 20;
|
||
|
}
|
||
|
this.grid_total_width += width + 5;
|
||
|
this.grid.grid.setColProp( field, { widthOrg: width } );
|
||
|
width_test.remove();
|
||
|
}
|
||
|
}
|
||
|
var gw = this.grid.getGridParam( 'width' );
|
||
|
this.grid.setGridWidth( gw );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
DashletController.TOTAL_ROW = 4;
|
||
|
DashletController.REGULAR_ROW = 5;
|
||
|
DashletController.ABSENCE_ROW = 6;
|
||
|
DashletController.ACCUMULATED_TIME_ROW = 7;
|
||
|
DashletController.PREMIUM_ROW = 8;
|