1015 lines
51 KiB
PHP
1015 lines
51 KiB
PHP
<?php
|
|
/*********************************************************************************
|
|
*
|
|
* TimeTrex is a Workforce Management program developed by
|
|
* TimeTrex Software Inc. Copyright (C) 2003 - 2021 TimeTrex Software Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU Affero General Public License version 3 as published by
|
|
* the Free Software Foundation with the addition of the following permission
|
|
* added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
|
|
* WORK IN WHICH THE COPYRIGHT IS OWNED BY TIMETREX, TIMETREX DISCLAIMS THE
|
|
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
* details.
|
|
*
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License along
|
|
* with this program; if not, see http://www.gnu.org/licenses or write to the Free
|
|
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
* 02110-1301 USA.
|
|
*
|
|
*
|
|
* You can contact TimeTrex headquarters at Unit 22 - 2475 Dobbin Rd. Suite
|
|
* #292 West Kelowna, BC V4T 2E9, Canada or at email address info@timetrex.com.
|
|
*
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of this program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU Affero General Public License version 3.
|
|
*
|
|
*
|
|
* In accordance with Section 7(b) of the GNU Affero General Public License
|
|
* version 3, these Appropriate Legal Notices must retain the display of the
|
|
* "Powered by TimeTrex" logo. If the display of the logo is not reasonably
|
|
* feasible for technical reasons, the Appropriate Legal Notices must display
|
|
* the words "Powered by TimeTrex".
|
|
*
|
|
********************************************************************************/
|
|
|
|
|
|
/**
|
|
* @package API\Core
|
|
*/
|
|
class APIDashboard extends APIFactory {
|
|
protected $main_class = false;
|
|
|
|
/**
|
|
* APIDashboard constructor.
|
|
*/
|
|
public function __construct() {
|
|
parent::__construct(); //Make sure parent constructor is always called.
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get all possible dashlets
|
|
* @param bool $name
|
|
* @param null $parent
|
|
* @return bool|array
|
|
*/
|
|
function getOptions( $name = false, $parent = null ) {
|
|
$product_edition = $this->getCurrentCompanyObject()->getProductEdition();
|
|
|
|
$retarr = [];
|
|
switch ( $name ) {
|
|
case 'dashlets':
|
|
$retarr = [];
|
|
|
|
//News
|
|
$retarr['news'] = TTi18n::getText( 'News' );
|
|
|
|
if ( $this->getPermissionObject()->Check( 'punch', 'enabled' ) && $this->getPermissionObject()->Check( 'punch', 'view_own' ) ) {
|
|
$retarr['exception_summary'] = TTi18n::getText( 'Exceptions' ); //Current/Last week, Own
|
|
$retarr['timesheet_summary'] = TTi18n::getText( 'TimeSheet Summary' ); //Current/Last week, Own
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_timesheet_summary' ) ) {
|
|
$retarr['timesheet_verification_summary'] = TTi18n::getText( 'TimeSheet Verifications' ); //Own
|
|
}
|
|
}
|
|
|
|
if ( $this->getPermissionObject()->Check( 'punch', 'enabled' ) && ( $this->getPermissionObject()->Check( 'punch', 'view_child' ) || $this->getPermissionObject()->Check( 'punch', 'view' ) ) ) {
|
|
$retarr['exception_summary_child'] = TTi18n::getText( 'Exceptions (Subordinates)' ); //Current/Last week, Subordinates/All
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_timesheet_summary' ) ) {
|
|
$retarr['timesheet_verification_summary_child'] = TTi18n::getText( 'TimeSheet Verifications (Subordinates)' ); //Subordinates/All
|
|
}
|
|
}
|
|
|
|
if ( $this->getPermissionObject()->Check( 'request', 'enabled' ) && $this->getPermissionObject()->Check( 'request', 'view_own' ) ) {
|
|
$retarr['request_summary'] = TTi18n::getText( 'Requests' ); //Current/Last week, Own
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'request', 'enabled' ) && ( $this->getPermissionObject()->Check( 'request', 'authorize' ) ) ) {
|
|
$retarr['request_authorize_summary'] = TTi18n::getText( 'Request Authorizations' ); //Subordinates
|
|
}
|
|
|
|
if ( $this->getPermissionObject()->Check( 'message', 'enabled' ) && $this->getPermissionObject()->Check( 'message', 'view_own' ) ) {
|
|
$retarr['message_summary'] = TTi18n::getText( 'Messages (UnRead)' ); //Own
|
|
}
|
|
|
|
if ( $this->getPermissionObject()->Check( 'accrual', 'enabled' ) && $this->getPermissionObject()->Check( 'accrual', 'view_own' ) ) {
|
|
$retarr['accrual_balance_summary'] = TTi18n::getText( 'Accrual Balances' ); //Own
|
|
}
|
|
|
|
if ( $product_edition >= 25 ) {
|
|
if ( $this->getPermissionObject()->Check( 'expense', 'enabled' ) && $this->getPermissionObject()->Check( 'expense', 'view_own' ) ) {
|
|
$retarr['expense_summary'] = TTi18n::getText( 'Expenses' ); //Current/Last week, Own
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'expense', 'enabled' ) && ( $this->getPermissionObject()->Check( 'expense', 'authorize' ) ) ) {
|
|
$retarr['expense_authorize_summary'] = TTi18n::getText( 'Expense Authorizations' ); //Subordinates
|
|
}
|
|
}
|
|
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_active_shift' ) ) { //Don't check punch/user permissions, as the ActiveShift report itself does not do that.
|
|
$retarr['user_active_shift_summary'] = TTi18n::getText( 'Whos In/Out' ); //Subordinates/All
|
|
}
|
|
|
|
if ( $this->getPermissionObject()->Check( 'schedule', 'enabled' ) ) {
|
|
if ( $this->getPermissionObject()->Check( 'schedule', 'view_own' ) ) {
|
|
$retarr['schedule_summary'] = TTi18n::getText( 'Schedule Summary' ); //Own
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'schedule', 'view_child' ) || $this->getPermissionObject()->Check( 'schedule', 'view' ) ) {
|
|
$retarr['schedule_summary_child'] = TTi18n::getText( 'Schedule Summary (Subordinates)' ); //Own
|
|
}
|
|
}
|
|
|
|
asort( $retarr ); //Put Custom List/Custom Report at the bottom always.
|
|
if ( $product_edition > 10 ) {
|
|
$retarr['custom_list'] = TTi18n::getText( 'Custom List' ); //Saved Search & Layout
|
|
$retarr['custom_report'] = TTi18n::getText( 'Custom Report' ); //Report, Report Template/Saved Report
|
|
}
|
|
|
|
$retarr = Misc::addSortPrefix( $retarr );
|
|
|
|
break;
|
|
case 'custom_list':
|
|
$retarr = [];
|
|
|
|
//Attendance
|
|
if ( $this->getPermissionObject()->Check( 'punch', 'enabled' ) && ( $this->getPermissionObject()->Check( 'punch', 'view_own' ) || $this->getPermissionObject()->Check( 'punch', 'view_child' ) || $this->getPermissionObject()->Check( 'punch', 'view' ) ) ) {
|
|
$retarr['Exception'] = TTi18n::getText( 'Exceptions' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'accrual', 'enabled' ) && ( $this->getPermissionObject()->Check( 'accrual', 'view_own' ) || $this->getPermissionObject()->Check( 'accrual', 'view_child' ) || $this->getPermissionObject()->Check( 'accrual', 'view' ) ) ) {
|
|
$retarr['AccrualBalance'] = TTi18n::getText( 'Accrual Balances' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'accrual', 'enabled' ) && ( $this->getPermissionObject()->Check( 'accrual', 'view_own' ) || $this->getPermissionObject()->Check( 'accrual', 'view_child' ) || $this->getPermissionObject()->Check( 'accrual', 'view' ) ) ) {
|
|
$retarr['Accrual'] = TTi18n::getText( 'Accruals' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'schedule', 'enabled' ) && ( $this->getPermissionObject()->Check( 'schedule', 'view_own' ) || $this->getPermissionObject()->Check( 'schedule', 'view_child' ) || $this->getPermissionObject()->Check( 'schedule', 'view' ) ) ) {
|
|
$retarr['Schedule'] = TTi18n::getText( 'Scheduled Shifts' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'recurring_schedule', 'enabled' ) && ( $this->getPermissionObject()->Check( 'recurring_schedule', 'view_own' ) || $this->getPermissionObject()->Check( 'recurring_schedule', 'view_child' ) || $this->getPermissionObject()->Check( 'recurring_schedule', 'view' ) ) ) {
|
|
$retarr['RecurringScheduleControl'] = TTi18n::getText( 'Recurring Schedules' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'recurring_schedule_template', 'enabled' ) && ( $this->getPermissionObject()->Check( 'recurring_schedule_template', 'view_own' ) || $this->getPermissionObject()->Check( 'recurring_schedule_template', 'view_child' ) || $this->getPermissionObject()->Check( 'recurring_schedule_template', 'view' ) ) ) {
|
|
$retarr['RecurringScheduleTemplateControl'] = TTi18n::getText( 'Recurring Templates' );
|
|
}
|
|
if ( $product_edition >= 20 ) {
|
|
if ( $this->getPermissionObject()->Check( 'job', 'enabled' ) && ( $this->getPermissionObject()->Check( 'job', 'view_own' ) || $this->getPermissionObject()->Check( 'job', 'view_child' ) || $this->getPermissionObject()->Check( 'job', 'view' ) ) ) {
|
|
$retarr['Job'] = TTi18n::getText( 'Jobs' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'job_item', 'enabled' ) && ( $this->getPermissionObject()->Check( 'job_item', 'view_own' ) || $this->getPermissionObject()->Check( 'job_item', 'view_child' ) || $this->getPermissionObject()->Check( 'job_item', 'view' ) ) ) {
|
|
$retarr['JobItem'] = TTi18n::getText( 'Tasks' );
|
|
}
|
|
}
|
|
|
|
|
|
//Employee
|
|
if ( $this->getPermissionObject()->Check( 'user', 'enabled' ) && ( $this->getPermissionObject()->Check( 'user', 'view_own' ) || $this->getPermissionObject()->Check( 'user', 'view_child' ) || $this->getPermissionObject()->Check( 'user', 'view' ) ) ) {
|
|
$retarr['User'] = TTi18n::getText( 'Employees' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'user_contact', 'enabled' ) && ( $this->getPermissionObject()->Check( 'user_contact', 'view_own' ) || $this->getPermissionObject()->Check( 'user_contact', 'view_child' ) || $this->getPermissionObject()->Check( 'user_contact', 'view' ) ) ) {
|
|
$retarr['UserContact'] = TTi18n::getText( 'Employee Contacts' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'wage', 'enabled' ) && ( $this->getPermissionObject()->Check( 'wage', 'view_own' ) || $this->getPermissionObject()->Check( 'wage', 'view_child' ) || $this->getPermissionObject()->Check( 'wage', 'view' ) ) ) {
|
|
$retarr['UserWage'] = TTi18n::getText( 'Wages' );
|
|
}
|
|
|
|
//Company
|
|
|
|
|
|
//Payroll
|
|
if ( $this->getPermissionObject()->Check( 'pay_stub', 'enabled' ) && ( $this->getPermissionObject()->Check( 'pay_stub', 'view_own' ) || $this->getPermissionObject()->Check( 'pay_stub', 'view_child' ) || $this->getPermissionObject()->Check( 'pay_stub', 'view' ) ) ) {
|
|
$retarr['PayStub'] = TTi18n::getText( 'Pay Stubs' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'pay_period', 'enabled' ) && ( $this->getPermissionObject()->Check( 'pay_period', 'view_own' ) || $this->getPermissionObject()->Check( 'pay_period', 'view_child' ) || $this->getPermissionObject()->Check( 'pay_period', 'view' ) ) ) {
|
|
$retarr['PayPeriod'] = TTi18n::getText( 'Pay Periods' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'pay_stub_amendment', 'enabled' ) && ( $this->getPermissionObject()->Check( 'pay_stub_amendment', 'view_own' ) || $this->getPermissionObject()->Check( 'pay_stub_amendment', 'view_child' ) || $this->getPermissionObject()->Check( 'pay_stub_amendment', 'view' ) ) ) {
|
|
$retarr['PayStubAmendment'] = TTi18n::getText( 'Pay Stub Amendments' );
|
|
}
|
|
if ( $product_edition >= 25 && $this->getPermissionObject()->Check( 'user_expense', 'enabled' ) && ( $this->getPermissionObject()->Check( 'user_expense', 'view_own' ) || $this->getPermissionObject()->Check( 'user_expense', 'view_child' ) || $this->getPermissionObject()->Check( 'user_expense', 'view' ) ) ) {
|
|
$retarr['UserExpense'] = TTi18n::getText( 'Expenses' );
|
|
}
|
|
|
|
|
|
//Invoice
|
|
if ( $product_edition >= 20 ) {
|
|
if ( $this->getPermissionObject()->Check( 'client', 'enabled' ) && ( $this->getPermissionObject()->Check( 'client', 'view_own' ) || $this->getPermissionObject()->Check( 'client', 'view_child' ) || $this->getPermissionObject()->Check( 'client', 'view' ) ) ) {
|
|
$retarr['Client'] = TTi18n::getText( 'Clients' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'client_contact', 'enabled' ) && ( $this->getPermissionObject()->Check( 'client_contact', 'view_own' ) || $this->getPermissionObject()->Check( 'client_contact', 'view_child' ) || $this->getPermissionObject()->Check( 'client_contact', 'view' ) ) ) {
|
|
$retarr['ClientContact'] = TTi18n::getText( 'Client Contacts' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'invoice', 'enabled' ) && ( $this->getPermissionObject()->Check( 'invoice', 'view_own' ) || $this->getPermissionObject()->Check( 'invoice', 'view_child' ) || $this->getPermissionObject()->Check( 'invoice', 'view' ) ) ) {
|
|
$retarr['Invoice'] = TTi18n::getText( 'Invoices' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'invoice', 'enabled' ) && ( $this->getPermissionObject()->Check( 'invoice', 'view_own' ) || $this->getPermissionObject()->Check( 'invoice', 'view_child' ) || $this->getPermissionObject()->Check( 'invoice', 'view' ) ) ) {
|
|
$retarr['Transaction'] = TTi18n::getText( 'Invoice Transactions' );
|
|
}
|
|
}
|
|
|
|
|
|
//HR
|
|
if ( $this->getPermissionObject()->Check( 'user_review', 'enabled' ) && ( $this->getPermissionObject()->Check( 'user_review', 'view_own' ) || $this->getPermissionObject()->Check( 'user_review', 'view_child' ) || $this->getPermissionObject()->Check( 'user_review', 'view' ) ) ) {
|
|
$retarr['UserReviewControl'] = TTi18n::getText( 'Reviews' );
|
|
}
|
|
if ( $product_edition >= 25 ) {
|
|
if ( $this->getPermissionObject()->Check( 'job_vacancy', 'enabled' ) && ( $this->getPermissionObject()->Check( 'job_vacancy', 'view_own' ) || $this->getPermissionObject()->Check( 'job_vacancy', 'view_child' ) || $this->getPermissionObject()->Check( 'job_vacancy', 'view' ) ) ) {
|
|
$retarr['JobVacancy'] = TTi18n::getText( 'Job Vacancies' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'job_applicant', 'enabled' ) && ( $this->getPermissionObject()->Check( 'job_applicant', 'view_own' ) || $this->getPermissionObject()->Check( 'job_applicant', 'view_child' ) || $this->getPermissionObject()->Check( 'job_applicant', 'view' ) ) ) {
|
|
$retarr['JobApplicant'] = TTi18n::getText( 'Job Applicants' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'job_application', 'enabled' ) && ( $this->getPermissionObject()->Check( 'job_application', 'view_own' ) || $this->getPermissionObject()->Check( 'job_application', 'view_child' ) || $this->getPermissionObject()->Check( 'job_application', 'view' ) ) ) {
|
|
$retarr['JobApplication'] = TTi18n::getText( 'Job Applications' );
|
|
}
|
|
}
|
|
|
|
|
|
//My Account
|
|
if ( $this->getPermissionObject()->Check( 'request', 'enabled' ) && ( $this->getPermissionObject()->Check( 'request', 'view_own' ) || $this->getPermissionObject()->Check( 'request', 'view_child' ) || $this->getPermissionObject()->Check( 'request', 'view' ) ) ) {
|
|
$retarr['Request'] = TTi18n::getText( 'Requests' );
|
|
}
|
|
// Expenses is already added above.
|
|
|
|
|
|
//My Account -> Authorization related views.
|
|
if ( $this->getPermissionObject()->Check( 'request', 'enabled' ) && $this->getPermissionObject()->Check( 'request', 'authorize' ) && ( $this->getPermissionObject()->Check( 'request', 'view_child' ) || $this->getPermissionObject()->Check( 'request', 'view' ) ) ) {
|
|
$retarr['Request-Authorization'] = TTi18n::getText( 'Request Authorization' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'punch', 'enabled' ) && $this->getPermissionObject()->Check( 'punch', 'verify_time_sheet' ) && ( $this->getPermissionObject()->Check( 'punch', 'view_child' ) || $this->getPermissionObject()->Check( 'punch', 'view' ) ) ) {
|
|
$retarr['PayPeriodTimeSheetVerify'] = TTi18n::getText( 'TimeSheet Verification' );
|
|
}
|
|
if ( $product_edition >= 25 && $this->getPermissionObject()->Check( 'user_expense', 'enabled' ) && $this->getPermissionObject()->Check( 'user_expense', 'authorize' ) && ( $this->getPermissionObject()->Check( 'user_expense', 'view_child' ) || $this->getPermissionObject()->Check( 'user_expense', 'view' ) ) ) {
|
|
$retarr['UserExpense-Authorization'] = TTi18n::getText( 'Expense Verification' );
|
|
}
|
|
|
|
asort( $retarr );
|
|
$retarr = Misc::addSortPrefix( $retarr );
|
|
|
|
break;
|
|
case 'custom_report':
|
|
$retarr = [];
|
|
|
|
//Employee Reports
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_user_information' ) ) {
|
|
$retarr['UserSummaryReport'] = TTi18n::getText( 'Employee Information' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_active_shift' ) ) {
|
|
$retarr['ActiveShiftReport'] = TTi18n::getText( 'Whos In Summary' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_system_log' ) ) {
|
|
$retarr['AuditTrailReport'] = TTi18n::getText( 'Audit Trail' );
|
|
}
|
|
|
|
|
|
//TimeSheet Reports
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_schedule_summary' ) ) {
|
|
$retarr['ScheduleSummaryReport'] = TTi18n::getText( 'Schedule Summary' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_timesheet_summary' ) ) {
|
|
$retarr['TimesheetSummaryReport'] = TTi18n::getText( 'TimeSheet Summary' );
|
|
$retarr['TimesheetDetailReport'] = TTi18n::getText( 'TimeSheet Detail' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_punch_summary' ) ) {
|
|
$retarr['PunchSummaryReport'] = TTi18n::getText( 'Punch Summary' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_accrual_balance_summary' ) ) {
|
|
$retarr['AccrualBalanceSummaryReport'] = TTi18n::getText( 'Accrual Balance Summary' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_exception_summary' ) ) {
|
|
$retarr['ExceptionReport'] = TTi18n::getText( 'Exception Summary' );
|
|
}
|
|
|
|
|
|
//Payroll Reports
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_pay_stub_summary' ) ) {
|
|
$retarr['PayStubSummaryReport'] = TTi18n::getText( 'Pay Stub Summary' );
|
|
}
|
|
if ( $product_edition >= 25 && $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_expense' ) ) {
|
|
$retarr['UserExpenseReport'] = TTi18n::getText( 'Expense Summary' );
|
|
}
|
|
|
|
|
|
//Job Tracking Reports
|
|
if ( $product_edition >= 20 ) {
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'job_report', 'view_job_summary' ) ) {
|
|
$retarr['JobSummaryReport'] = TTi18n::getText( 'Job Summary' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'job_report', 'view_job_analysis' ) ) {
|
|
$retarr['JobDetailReport'] = TTi18n::getText( 'Job Analysis' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'job_report', 'view_job_summary' ) ) {
|
|
$retarr['JobInformationReport'] = TTi18n::getText( 'Job Information' );
|
|
$retarr['JobItemInformationReport'] = TTi18n::getText( 'Task Information' );
|
|
}
|
|
}
|
|
|
|
|
|
//Invoice Reports
|
|
if ( $product_edition >= 20 ) {
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'report', 'view_transaction_summary' ) ) {
|
|
$retarr['InvoiceTransactionSummaryReport'] = TTi18n::getText( 'Transaction Summary' );
|
|
}
|
|
}
|
|
|
|
|
|
//HR Reports
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'hr_report', 'user_qualification' ) ) {
|
|
$retarr['UserQualificationReport'] = TTi18n::getText( 'Qualification Summary' );
|
|
}
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'hr_report', 'user_review' ) ) {
|
|
$retarr['KPIReport'] = TTi18n::getText( 'Review Summary' );
|
|
}
|
|
|
|
|
|
//HR-Recruitment Reports
|
|
if ( $product_edition >= 25 ) {
|
|
if ( $this->getPermissionObject()->Check( 'report', 'enabled' ) && $this->getPermissionObject()->Check( 'recruitment_report', 'user_recruitment' ) ) {
|
|
$retarr['UserRecruitmentSummaryReport'] = TTi18n::getText( 'Recruitment Summary' );
|
|
$retarr['UserRecruitmentDetailReport'] = TTi18n::getText( 'Recruitment Detail' );
|
|
}
|
|
}
|
|
|
|
asort( $retarr );
|
|
$retarr = Misc::addSortPrefix( $retarr );
|
|
|
|
break;
|
|
case 'auto_refresh':
|
|
$retarr = [
|
|
0 => TTi18n::getText( 'Disabled' ),
|
|
300 => TTi18n::getText( '5 mins' ),
|
|
600 => TTi18n::getText( '10 mins' ),
|
|
900 => TTi18n::getText( '15 mins' ),
|
|
1800 => TTi18n::getText( '30 mins' ),
|
|
3600 => TTi18n::getText( '1 hour' ),
|
|
7200 => TTi18n::getText( '2 hours' ),
|
|
10800 => TTi18n::getText( '3 hours' ),
|
|
21600 => TTi18n::getText( '6 hours' ),
|
|
];
|
|
|
|
if ( PRODUCTION == false ) { //Shorter time for testing.
|
|
$retarr[30] = TTi18n::getText( '30 seconds' );
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return $retarr;
|
|
}
|
|
|
|
/**
|
|
* Create filter base on user generic data
|
|
* @param string $view_name the view name
|
|
* @param array $user_generic_data user generic data
|
|
* @param $rows_per_page
|
|
* @return array
|
|
*/
|
|
function buildFilterParameters( $view_name, $user_generic_data, $rows_per_page ) {
|
|
$parameters = [];
|
|
$parameters['filter_columns'] = [];
|
|
// Always return id column in case we may need it.
|
|
$parameters['filter_columns']['id'] = true;
|
|
// If $user_generic_data set filter_data, convert it to api filter_data format.
|
|
if ( isset( $user_generic_data['filter_data'] ) ) {
|
|
$parameters['filter_data'] = [];
|
|
foreach ( $user_generic_data['filter_data'] as $key => $value ) {
|
|
if ( is_array( $value['value'] ) ) {
|
|
$values = [];
|
|
foreach ( $value['value'] as $i => $item ) {
|
|
if ( isset( $item['value'] ) ) { // saved options
|
|
$values[] = $item['value'];
|
|
} else {
|
|
if ( isset( $item['id'] ) ) { // saved awesomebox
|
|
$values[] = $item['id'];
|
|
} else {
|
|
$values[] = $item;
|
|
}
|
|
}
|
|
}
|
|
$parameters['filter_data'][$key] = $values;
|
|
} else {
|
|
$parameters['filter_data'][$key] = $value['value'];
|
|
}
|
|
}
|
|
}
|
|
// Add default filter for some views.
|
|
if ( $view_name == 'Request-Authorization' ) {
|
|
if ( !isset( $parameters['filter_data'] ) ) {
|
|
$parameters['filter_data'] = [];
|
|
}
|
|
if ( !isset( $parameters['filter_data']['type_id'] ) ) {
|
|
$parameters['filter_data']['type_id'] = [ -1 ];
|
|
}
|
|
if ( !isset( $parameters['filter_data']['hierarchy_level'] ) ) {
|
|
$parameters['filter_data']['hierarchy_level'] = 1;
|
|
}
|
|
} else {
|
|
if ( $view_name == 'PayPeriodTimeSheetVerify' ) {
|
|
if ( !isset( $parameters['filter_data'] ) ) {
|
|
$parameters['filter_data'] = [];
|
|
}
|
|
if ( !isset( $parameters['filter_data']['hierarchy_level'] ) ) {
|
|
$parameters['filter_data']['hierarchy_level'] = 1;
|
|
}
|
|
} else {
|
|
if ( $view_name == 'UserExpense-Authorization' ) {
|
|
if ( !isset( $parameters['filter_data'] ) ) {
|
|
$parameters['filter_data'] = [];
|
|
}
|
|
$parameters['filter_data']['parent_id'] = [ TTUUID::getZeroID() ];
|
|
if ( !isset( $parameters['filter_data']['hierarchy_level'] ) ) {
|
|
$parameters['filter_data']['hierarchy_level'] = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// filter_sort in user generic data is same format as api need.
|
|
if ( isset( $user_generic_data['filter_sort'] ) ) {
|
|
$parameters['filter_sort'] = $user_generic_data['filter_sort'];
|
|
}
|
|
if ( isset( $user_generic_data['display_columns'] ) ) {
|
|
for ( $i = 0; $i < count( $user_generic_data['display_columns'] ); $i++ ) {
|
|
$parameters['filter_columns'][$user_generic_data['display_columns'][$i]] = true;
|
|
}
|
|
}
|
|
$parameters['filter_items_per_page'] = $rows_per_page;
|
|
|
|
return $parameters;
|
|
}
|
|
|
|
/**
|
|
* @param $display_columns
|
|
* @param $rows_per_page
|
|
* @return array
|
|
*/
|
|
function buildDefaultDashletParameters( $display_columns, $rows_per_page ) {
|
|
$parameters = [];
|
|
$parameters['filter_columns'] = [];
|
|
$parameters['filter_columns']['id'] = true;
|
|
if ( is_array( $display_columns ) ) {
|
|
for ( $i = 0; $i < count( $display_columns ); $i++ ) {
|
|
$parameters['filter_columns'][$display_columns[$i]] = true;
|
|
}
|
|
}
|
|
$parameters['filter_items_per_page'] = $rows_per_page;
|
|
|
|
return $parameters;
|
|
}
|
|
|
|
/**
|
|
* Get data for specific datalet
|
|
* @param string $name name of dashlet
|
|
* @param bool $data
|
|
* @return array
|
|
* @internal param array $params parameters for returning dashlet data
|
|
*/
|
|
function getDashletData( $name, $data = false ) {
|
|
$name = strtolower( $name );
|
|
$display_columns = null;
|
|
Debug::Text( 'Name: ' . $name, __FILE__, __LINE__, __METHOD__, 10 );
|
|
switch ( $name ) {
|
|
case 'news':
|
|
$retarr = [];
|
|
|
|
$current_epoch = time();
|
|
|
|
//$product_edition = $this->getCurrentCompanyObject()->getProductEdition();
|
|
|
|
//$permission = new Permission();
|
|
//$permission_level = $permission->getLevel( $this->getCurrentUserObject()->getId(), $this->getCurrentCompanyObject()->getId() );
|
|
|
|
//Notify user of new features.
|
|
//if ( Misc::MajorVersionCompare( APPLICATION_VERSION, '9.0.0', '=' ) && TTDate::getBeginDayEpoch( $this->getCurrentUserObject()->getLastLoginDate() ) <= APPLICATION_VERSION_DATE ) {
|
|
// $retarr[] = '*<b>' . TTi18n::getText( 'Tip' ) . '</b>: ' . TTi18n::getText( 'You can set the default screen that appears after login under MyAccount -> Preferences in the menu along the top of the screen.' );
|
|
//}
|
|
//
|
|
//if ( $product_edition > 10 && $permission_level >= 40 && Misc::MajorVersionCompare( APPLICATION_VERSION, '9.0.0', '=' ) && TTDate::getBeginDayEpoch( $this->getCurrentUserObject()->getLastLoginDate() ) <= APPLICATION_VERSION_DATE ) {
|
|
// $retarr[] = '*<b>' . TTi18n::getText( 'Tip' ) . '</b>: ' . TTi18n::getText( 'You can add your own custom reports to the dashboard by clicking the Add Dashlet icon at the top left.' );
|
|
//}
|
|
|
|
//
|
|
//Regular Employee Related news:
|
|
//
|
|
if ( ( $this->getPermissionObject()->Check( 'punch', 'enabled' ) && ( $this->getPermissionObject()->Check( 'punch', 'view_own' ) || $this->getPermissionObject()->Check( 'punch', 'punch_in_out' ) ) ) ) { //Exceptions are only viewable if they permissions to punch in/out.
|
|
// Check for critical severity exceptions
|
|
$elf = TTNew( 'ExceptionListFactory' ); /** @var ExceptionListFactory $elf */
|
|
$elf->getFlaggedExceptionsByUserIdAndPayPeriodStatus( $this->getCurrentUserObject()->getId(), 10 );
|
|
if ( $elf->getRecordCount() > 0 ) {
|
|
foreach ( $elf as $e_obj ) {
|
|
if ( $e_obj->getColumn( 'severity_id' ) == 30 ) {
|
|
$retarr[] = TTi18n::getText( 'Critical severity exceptions exist, you may want to take a look at those.' );
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
unset( $elf, $e_obj );
|
|
}
|
|
|
|
// Check for recent unread messages
|
|
$api = TTNew( 'APIMessageControl' ); /** @var APIMessageControl $api */
|
|
$api_result = $this->stripReturnHandler( $api->getMessageControl( [ 'filter_data' => [ 'status_id' => 10, 'folder_id' => 10 ] ] ) );
|
|
if ( is_array( $api_result ) && count( $api_result ) > 0 ) {
|
|
foreach ( $api_result as $message_data ) {
|
|
$retarr[] = TTi18n::getText( 'UnRead message sent from %1 on %2.', [ $message_data['from_first_name'] . ' ' . $message_data['from_last_name'], TTDate::getDate( 'DATE', TTDate::parseDateTime( $message_data['created_date'] ) ) ] );
|
|
break;
|
|
}
|
|
}
|
|
unset( $api_result, $message_data );
|
|
|
|
// Check for timesheet verifications
|
|
$ppslf = TTNew( 'PayPeriodScheduleListFactory' ); /** @var PayPeriodScheduleListFactory $ppslf */
|
|
$ppslf->getByUserId( $this->getCurrentUserObject()->getId() );
|
|
if ( $ppslf->getRecordCount() > 0 ) {
|
|
foreach ( $ppslf as $pps_obj ) {
|
|
if ( in_array( $pps_obj->getTimeSheetVerifyType(), [ 20, 40 ] ) ) { //Check if TimeSheet Verification is enabled or not.
|
|
$pplf = TTNew( 'PayPeriodListFactory' ); /** @var PayPeriodListFactory $pplf */
|
|
$pplf->getThisPayPeriodByCompanyIdAndPayPeriodScheduleIdAndDate( $pps_obj->getCompany(), [ $pps_obj->getId() ], $current_epoch );
|
|
if ( $pplf->getRecordCount() > 0 ) {
|
|
foreach ( $pplf as $pp_obj ) {
|
|
Debug::Text( 'Pay Period ID: ' . $pp_obj->getId() . ' PP Schedule ID: ' . $pps_obj->getId(), __FILE__, __LINE__, __METHOD__, 10 );
|
|
$pptsvlf = TTnew( 'PayPeriodTimeSheetVerifyListFactory' ); /** @var PayPeriodTimeSheetVerifyListFactory $pptsvlf */
|
|
$pptsvlf->getByPayPeriodIdAndUserId( $pp_obj->getId(), $this->getCurrentUserObject()->getId() );
|
|
if ( $pptsvlf->getRecordCount() > 0 ) {
|
|
$pptsv_obj = $pptsvlf->getCurrent();
|
|
$pptsv_obj->setCurrentUser( $this->getCurrentUserObject()->getId() );
|
|
} else {
|
|
$pptsv_obj = $pptsvlf;
|
|
$pptsv_obj->setCurrentUser( $this->getCurrentUserObject()->getId() );
|
|
$pptsv_obj->setUser( $this->getCurrentUserObject()->getId() );
|
|
$pptsv_obj->setPayPeriod( $pp_obj->getId() );
|
|
}
|
|
|
|
$verification_window_dates = $pptsv_obj->getVerificationWindowDates();
|
|
Debug::Arr( [ $pptsv_obj->getPayPeriodObject()->data, $verification_window_dates ], ' Verification Dates: ', __FILE__, __LINE__, __METHOD__, 10 );
|
|
|
|
//Only display messages if the timesheet isn't already verified.
|
|
if ( $pptsv_obj->displayVerifyButton( $this->getCurrentUserObject()->getId(), $this->getCurrentUserObject()->getId() ) == true ) {
|
|
$retarr[] = TTi18n::getText( 'Timesheet verification required by %2', [ TTDate::getDate( 'DATE', $verification_window_dates['start'] ), TTDate::getDate( 'DATE', $verification_window_dates['end'] ) ] );
|
|
} else {
|
|
Debug::Text( 'TimeSheet Verification is not required or already done...', __FILE__, __LINE__, __METHOD__, 10 );
|
|
}
|
|
}
|
|
unset( $pptsvlf, $pptsv_obj, $verification_window_dates );
|
|
} else {
|
|
Debug::Text( 'No Pay Periods found for PP Schedule ID: ' . $pps_obj->getId(), __FILE__, __LINE__, __METHOD__, 10 );
|
|
}
|
|
} else {
|
|
Debug::Text( 'TimeSheet Verification is not enabled...', __FILE__, __LINE__, __METHOD__, 10 );
|
|
}
|
|
}
|
|
}
|
|
unset( $ppslf, $pps_obj, $pplf, $pp_obj );
|
|
|
|
// Check for requests that changed status.
|
|
$rlf = TTNew( 'RequestListFactory' ); /** @var RequestListFactory $rlf */
|
|
$rlf->getAPISearchByCompanyIdAndArrayCriteria( $this->getCurrentUserObject()->getCompany(), [ 'user_id' => $this->getCurrentUserObject()->getId(), 'status_id' => [ 50, 55 ], 'updated_date_start' => ( TTDate::getBeginDayEpoch( $current_epoch ) - ( 86400 * 2 ) ), 'updated_date_end' => TTDate::getEndDayEpoch( $current_epoch ) ] );
|
|
if ( $rlf->getRecordCount() > 0 ) {
|
|
foreach ( $rlf as $r_obj ) {
|
|
if ( $r_obj->getStatus() == 50 ) {
|
|
$retarr[] = TTi18n::getText( 'A request has recently been authorized.' );
|
|
} else if ( $r_obj->getStatus() == 55 ) {
|
|
$retarr[] = TTi18n::getText( 'A request has recently been declined.' );
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
unset( $rlf, $r_obj );
|
|
|
|
// Check for upcoming scheduled absences
|
|
$api = TTNew( 'APISchedule' ); /** @var APISchedule $api */
|
|
$api_result = $this->stripReturnHandler( $api->getCombinedSchedule( [ 'filter_data' => [ 'status_id' => 20, 'include_user_id' => [ $this->getCurrentUserObject()->getId() ] ] ], TTDate::getDate( 'DATE', $current_epoch ), 'week', false ) );
|
|
if ( isset( $api_result['schedule_data'] ) ) {
|
|
foreach ( $api_result['schedule_data'] as $date => $schedule_data ) {
|
|
$retarr[] = TTi18n::getText( 'Upcoming %1 absence scheduled for %2.', [ $schedule_data[0]['absence_policy'], TTDate::getDate( 'DATE', strtotime( $date ) ) ] );
|
|
break;
|
|
}
|
|
}
|
|
unset( $api_result, $schedule_data, $date );
|
|
|
|
// Check for recent pay stubs.
|
|
$api = TTNew( 'APIPayStub' ); /** @var APIPayStub $api */
|
|
$api_result = $this->stripReturnHandler( $api->getPayStub( [ 'filter_data' => [ 'status_id' => 40, 'include_user_id' => [ $this->getCurrentUserObject()->getId() ], 'start_date' => TTDate::getBeginDayEpoch( $current_epoch - ( 86400 * 2 ) ), 'end_date' => TTDate::getEndDayEpoch( $current_epoch + ( 86400 * 5 ) ) ] ], false ) );
|
|
if ( is_array( $api_result ) && count( $api_result ) > 0 ) {
|
|
foreach ( $api_result as $pay_stub_data ) {
|
|
$retarr[] = TTi18n::getText( 'Pay stub scheduled to be paid on %1 is now available.', [ $pay_stub_data['transaction_date'] ] );
|
|
break;
|
|
}
|
|
}
|
|
unset( $api_result, $pay_stub_data );
|
|
|
|
// Check for Pay Periods nearing end date or transaction date
|
|
$pplf = TTNew( 'PayPeriodListFactory' ); /** @var PayPeriodListFactory $pplf */
|
|
$pplf->getByUserIdAndTransactionDate( $this->getCurrentUserObject()->getId(), $current_epoch );
|
|
if ( $pplf->getRecordCount() > 0 ) {
|
|
foreach ( $pplf as $pp_obj ) {
|
|
$pay_period_end_diff = ( $pp_obj->getEndDate() - $current_epoch );
|
|
$pay_period_transaction_diff = ( $pp_obj->getTransactionDate() - $current_epoch );
|
|
if ( $pay_period_end_diff > 0 && $pay_period_end_diff < ( 86400 * 2 ) ) {
|
|
$retarr[] = TTi18n::getText( 'Current pay period ends on %1, will be paid by %2', [ TTDate::getDate( 'DATE', $pp_obj->getEndDate() ), TTDate::getDate( 'DATE', $pp_obj->getTransactionDate() ) ] );
|
|
} else if ( $pay_period_end_diff < 0 && $pay_period_end_diff > ( 86400 * -2 ) ) {
|
|
$retarr[] = TTi18n::getText( 'Previous pay period ended on %1, will be paid by %2', [ TTDate::getDate( 'DATE', $pp_obj->getEndDate() ), TTDate::getDate( 'DATE', $pp_obj->getTransactionDate() ) ] );
|
|
} else if ( $pay_period_transaction_diff > 0 && $pay_period_transaction_diff < ( 86400 * 2 ) ) {
|
|
$retarr[] = TTi18n::getText( 'Previous pay period will be paid by %2', [ TTDate::getDate( 'DATE', $pp_obj->getEndDate() ), TTDate::getDate( 'DATE', $pp_obj->getTransactionDate() ) ] );
|
|
}
|
|
}
|
|
}
|
|
unset( $pplf, $pp_obj );
|
|
|
|
$content = '<style type=\'text/css\'>
|
|
.newsItemContainer{
|
|
display:table;
|
|
width:100%;
|
|
border-spacing:0 5px;
|
|
font-family: Arial, Helvetica, sans-serif;
|
|
font-size: 15px;
|
|
}
|
|
|
|
.item{
|
|
display:table-row;
|
|
height:2em;
|
|
line-height: 2em;
|
|
text-align: left;
|
|
}
|
|
|
|
.item > div {
|
|
background-color: #B0C8E0;
|
|
padding-left: 0.25em;
|
|
}
|
|
|
|
.item > div {
|
|
border-radius: 4px 4px 4px 4px;
|
|
}
|
|
|
|
.newsItem g{
|
|
display:table-cell;
|
|
}
|
|
|
|
.newsItem{
|
|
width:100%;
|
|
//font-weight: bold;
|
|
}
|
|
</style>';
|
|
|
|
if ( count( $retarr ) > 0 ) {
|
|
$content .= '<div class="newsItemContainer">';
|
|
foreach ( $retarr as $item ) {
|
|
$content .= '<div class="item"><div class="newsItem">' . $item . '</div></div>';
|
|
}
|
|
$content .= '</div><div align="center">•</center>';
|
|
} else {
|
|
$content .= '<div class="newsItemContainer">';
|
|
$content .= '<div class="item"><div class="newsItem">' . TTi18n::getText( 'Slow news day, nothing to see here yet' ) . '...</div></div>';
|
|
$content .= '</div><div align="center">•</center>';
|
|
}
|
|
|
|
return $this->returnHandler( $content );
|
|
break;
|
|
case 'schedule_summary':
|
|
case 'schedule_summary_child':
|
|
$api = TTNew( 'APISchedule' ); /** @var APISchedule $api */
|
|
|
|
$maximum_row_limit = ( isset( $data['rows_per_page'] ) && $data['rows_per_page'] > 0 ) ? $data['rows_per_page'] : $this->getCurrentUserPreferenceObject()->getItemsPerPage();
|
|
$parameters = $this->buildDefaultDashletParameters( $display_columns, $data['rows_per_page'] );
|
|
if ( $name == 'schedule_summary' ) {
|
|
$display_columns = [ 'id', 'date_stamp', 'status', 'status_id', 'start_time', 'end_time', 'total_time' ];
|
|
$parameters['filter_data'] = [ 'include_user_ids' => [ $this->getCurrentUserObject()->getId() ] ];
|
|
} else {
|
|
$display_columns = $api->getOptions( 'default_display_columns' );
|
|
$parameters['filter_data'] = [ 'exclude_user_ids' => [ $this->getCurrentUserObject()->getId(), '0' ] ];
|
|
}
|
|
|
|
$retarr['api_retval'] = [];
|
|
|
|
$api_result = $api->getCombinedSchedule( $parameters, TTDate::getDate( 'DATE', time() ), 'week', false );
|
|
if ( isset( $api_result['api_retval']['schedule_data'] ) ) {
|
|
$i = 0;
|
|
foreach ( $api_result['api_retval']['schedule_data'] as $val ) {
|
|
foreach ( $val as $val1 ) {
|
|
if ( $val1['status_id'] == 10 ) {
|
|
$val1['status'] = TTi18n::getText( 'Working' );
|
|
} else if ( $val1['status_id'] == 20 ) {
|
|
$val1['status'] = ( $val1['absence_policy'] != '' ) ? $val1['absence_policy'] : TTi18n::getText( 'N/A' );
|
|
}
|
|
$retarr['api_retval'][] = $val1;
|
|
}
|
|
|
|
if ( $i >= $maximum_row_limit ) {
|
|
array_splice( $retarr['api_retval'], $i );
|
|
break;
|
|
}
|
|
$i++;
|
|
}
|
|
}
|
|
unset( $api_result, $i, $maximum_row_limit );
|
|
break;
|
|
case 'user_active_shift_summary':
|
|
$api = TTNew( 'APIActiveShiftReport' ); /** @var APIActiveShiftReport $api */
|
|
$template_data = $api->getTemplate( 'by_status_by_type_by_employee' );
|
|
$template_data = Misc::trimSortPrefix( $template_data['api_retval'] );
|
|
$template_data['other']['maximum_row_limit'] = ( isset( $data['rows_per_page'] ) && $data['rows_per_page'] > 0 ) ? $data['rows_per_page'] : $this->getCurrentUserPreferenceObject()->getItemsPerPage();
|
|
$display_columns = $template_data['columns'];
|
|
$template_data = Misc::addSortPrefix( $template_data );
|
|
$retarr = $api->getActiveShiftReport( $template_data, 'raw' );
|
|
if ( is_array( $retarr['api_retval'] ) ) {
|
|
array_pop( $retarr['api_retval'] );
|
|
}
|
|
break;
|
|
case 'timesheet_verification_summary':
|
|
case 'timesheet_verification_summary_child':
|
|
$api = TTNew( 'APITimesheetSummaryReport' ); /** @var APITimesheetSummaryReport $api */
|
|
$template_data = $api->getTemplate( 'by_pay_period_by_employee+verified_time_sheet' );
|
|
$template_data = Misc::trimSortPrefix( $template_data['api_retval'] );
|
|
$template_data['other']['maximum_row_limit'] = ( isset( $data['rows_per_page'] ) && $data['rows_per_page'] > 0 ) ? $data['rows_per_page'] : $this->getCurrentUserPreferenceObject()->getItemsPerPage();
|
|
$display_columns = $template_data['columns'];
|
|
if ( $name == 'timesheet_verification_summary_child' ) {
|
|
$template_data['exclude_user_id'] = [ $this->getCurrentUserObject()->getId() ];
|
|
}
|
|
$template_data['sort'][] = [ 'verified_time_sheet' => 'asc' ];
|
|
$template_data['sort'][] = [ 'last_name' => 'asc' ];
|
|
$template_data = Misc::addSortPrefix( $template_data );
|
|
$retarr = $api->getTimesheetSummaryReport( $template_data, 'raw' );
|
|
if ( is_array( $retarr['api_retval'] ) ) {
|
|
array_pop( $retarr['api_retval'] );
|
|
}
|
|
break;
|
|
case 'message_summary':
|
|
$api = TTNew( 'APIMessageControl' ); /** @var APIMessageControl $api */
|
|
$display_columns = $api->getOptions( 'default_display_columns' );
|
|
$display_columns[] = 'status_id';
|
|
$parameters = $this->buildDefaultDashletParameters( $display_columns, $data['rows_per_page'] );
|
|
$parameters['filter_data'] = [ 'status_id' => 10, 'folder_id' => 10 ];
|
|
$retarr = $api->getMessageControl( $parameters );
|
|
break;
|
|
case 'exception_summary':
|
|
case 'exception_summary_child':
|
|
$ppslf = TTnew( 'PayPeriodScheduleListFactory' ); /** @var PayPeriodScheduleListFactory $ppslf */
|
|
if ( $name == 'exception_summary_child' ) {
|
|
$ppslf->getByCompanyId( $this->getCurrentCompanyObject()->getId() ); //Must be all PP schedules when showing subordinate exceptions.
|
|
} else {
|
|
$ppslf->getByCompanyIdAndUserId( $this->getCurrentCompanyObject()->getId(), $this->getCurrentUserObject()->getId() ); //Just current users PP schedule.
|
|
}
|
|
$pay_period_schedule_id = $ppslf->getIDSByListFactory( $ppslf );
|
|
|
|
//Get pay period schedule that this user belongs to
|
|
if ( is_array( $pay_period_schedule_id ) && count( $pay_period_schedule_id ) > 0 ) {
|
|
$pay_period_ids = [];
|
|
|
|
//Get last and this pay period IDs.
|
|
$pplf = TTnew( 'PayPeriodListFactory' ); /** @var PayPeriodListFactory $pplf */
|
|
$pplf->getThisPayPeriodByCompanyIdAndPayPeriodScheduleIdAndDate( $this->getCurrentCompanyObject()->getId(), $pay_period_schedule_id, time() );
|
|
if ( $pplf->getRecordCount() > 0 ) {
|
|
foreach ( $pplf as $pp_obj ) {
|
|
$pay_period_ids[] = $pp_obj->getId();
|
|
}
|
|
}
|
|
$pplf->getLastPayPeriodByCompanyIdAndPayPeriodScheduleIdAndDate( $this->getCurrentCompanyObject()->getId(), $pay_period_schedule_id, time() );
|
|
if ( $pplf->getRecordCount() > 0 ) {
|
|
foreach ( $pplf as $pp_obj ) {
|
|
//Only show last pay period if its not closed.
|
|
if ( $pp_obj->getStatus() != 20 ) {
|
|
$pay_period_ids[] = $pp_obj->getId();
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( count( $pay_period_ids ) > 0 ) {
|
|
$api = TTNew( 'APIException' ); /** @var APIException $api */
|
|
|
|
if ( $name == 'exception_summary' ) { //Only show the users own exceptions
|
|
//No need to show first/last name as its only displaying their own exceptions anyways.
|
|
$display_columns = [
|
|
'date_stamp',
|
|
'severity',
|
|
'exception_policy_type',
|
|
'exception_policy_type_id',
|
|
];
|
|
} else {
|
|
//Showing other users exceptions, make sure first/last name is displayed.
|
|
$display_columns = $api->getOptions( 'default_display_columns' );
|
|
}
|
|
$display_columns[] = 'exception_color';
|
|
$display_columns[] = 'exception_background_color';
|
|
$parameters = $this->buildDefaultDashletParameters( $display_columns, $data['rows_per_page'] );
|
|
$parameters['filter_data'] = [ 'pay_period_id' => $pay_period_ids ];
|
|
|
|
if ( $name == 'exception_summary' ) { //Only show the users own exceptions
|
|
$parameters['filter_data']['user_id'] = $this->getCurrentUserObject()->getId();
|
|
} else { //Show all *but* the users own exceptions.
|
|
$parameters['filter_data']['exclude_user_id'] = $this->getCurrentUserObject()->getId();
|
|
}
|
|
$parameters['filter_data']['type_id'] = [ 50 ]; //Exclude pre-mature exceptions.
|
|
$retarr = $api->getException( $parameters );
|
|
}
|
|
}
|
|
break;
|
|
case 'request_summary':
|
|
$api = TTNew( 'APIRequest' ); /** @var APIRequest $api */
|
|
$display_columns = $api->getOptions( 'default_display_columns' );
|
|
$display_columns[] = 'status_id';
|
|
$parameters = $this->buildDefaultDashletParameters( $display_columns, $data['rows_per_page'] );
|
|
$parameters['filter_data'] = [ 'status_id' => 30 ];
|
|
$retarr = $api->getRequest( $parameters );
|
|
break;
|
|
case 'request_authorize_summary':
|
|
$api = TTNew( 'APIRequest' ); /** @var APIRequest $api */
|
|
$display_columns = $api->getOptions( 'default_display_columns' );
|
|
$parameters = $this->buildDefaultDashletParameters( $display_columns, $data['rows_per_page'] );
|
|
$parameters['filter_data'] = [];
|
|
$parameters['filter_data']['type_id'] = [ -1 ];
|
|
$parameters['filter_data']['status_id'] = 30; //Pending Auth
|
|
$parameters['filter_data']['hierarchy_level'] = 1;
|
|
$retarr = $api->getRequest( $parameters );
|
|
break;
|
|
case 'accrual_balance_summary':
|
|
$api = TTNew( 'APIAccrualBalance' ); /** @var APIAccrualBalance $api */
|
|
$display_columns = $api->getOptions( 'default_display_columns' );
|
|
//$display_columns[] = 'status_id';
|
|
$parameters = $this->buildDefaultDashletParameters( $display_columns, $data['rows_per_page'] );
|
|
$parameters['filter_data'] = [ 'status_id' => 10 ]; //Only active employees.
|
|
$retarr = $api->getAccrualBalance( $parameters );
|
|
break;
|
|
case 'custom_list':
|
|
/*
|
|
* Params=array('class' => <string>, 'user_generic_data_id' => array() )
|
|
*/
|
|
|
|
if ( isset( $data['class'] ) && $data['class'] != '' ) {
|
|
Debug::Text( ' Class: ' . $data['class'], __FILE__, __LINE__, __METHOD__, 10 );
|
|
|
|
//Get saved search and layout.
|
|
if ( isset( $data['user_generic_data_id'] ) ) {
|
|
Debug::Text( ' Getting UserGenericData for ID: ' . $data['user_generic_data_id'], __FILE__, __LINE__, __METHOD__, 10 );
|
|
|
|
if ( $data['class'] == 'Request-Authorization' ) {
|
|
$api = TTNew( 'APIRequest' ); /** @var APIRequest $api */
|
|
$function_name = 'getRequest';
|
|
} else {
|
|
if ( $data['class'] == 'UserExpense-Authorization' ) {
|
|
$api = TTNew( 'APIUserExpense' ); /** @var APIUserExpense $api */
|
|
$function_name = 'getUserExpense';
|
|
} else {
|
|
$api = TTNew( 'API' . $data['class'] );
|
|
$function_name = 'get' . $data['class'];
|
|
}
|
|
}
|
|
|
|
$augd = TTNew( 'APIUserGenericData' ); /** @var APIUserGenericData $augd */
|
|
$retval = $this->stripReturnHandler( $augd->getUserGenericData( [ 'filter_data' => [ 'id' => TTUUID::castUUID( $data['user_generic_data_id'] ) ] ] ) );
|
|
if ( is_array( $retval ) && count( $retval ) == 1 ) {
|
|
if ( isset( $retval[0]['data'] ) ) {
|
|
$user_generic_data = $retval[0]['data'];
|
|
$display_columns = $user_generic_data['display_columns'];
|
|
}
|
|
} else {
|
|
//No user_generic_data specified, just use default display columns instead.
|
|
$display_columns = $api->getOptions( 'default_display_columns' );
|
|
$user_generic_data = [ 'display_columns' => $display_columns ];
|
|
}
|
|
unset( $retval );
|
|
|
|
if ( isset( $user_generic_data ) ) {
|
|
Debug::Arr( $user_generic_data, ' UserGenericData for Class: ' . $data['class'] . ' ID: ' . $data['user_generic_data_id'], __FILE__, __LINE__, __METHOD__, 10 );
|
|
|
|
if ( strpos( '-', $data['class'] ) === false ) {
|
|
Debug::Text( ' Getting Dashlet Data for Class: ' . $data['class'], __FILE__, __LINE__, __METHOD__, 10 );
|
|
$retarr = $api->$function_name( $this->buildFilterParameters( $data['class'], $user_generic_data, $data['rows_per_page'] ) );
|
|
}
|
|
//else {
|
|
//Special class, need to handle it manually.
|
|
//}
|
|
} else {
|
|
Debug::Text( 'ERROR: No UserGenericData available...', __FILE__, __LINE__, __METHOD__, 10 );
|
|
}
|
|
} else {
|
|
Debug::Text( 'ERROR: No UserGenericData ID specified...', __FILE__, __LINE__, __METHOD__, 10 );
|
|
}
|
|
} else {
|
|
Debug::Text( 'ERROR: No Class specified...', __FILE__, __LINE__, __METHOD__, 10 );
|
|
}
|
|
|
|
break;
|
|
case 'custom_report':
|
|
break;
|
|
}
|
|
|
|
if ( isset( $retarr ) ) {
|
|
$data = $retarr['api_retval'];
|
|
$retarr['api_retval'] = [ 'data' => $data, 'display_columns' => $display_columns ];
|
|
|
|
return $retarr;
|
|
}
|
|
|
|
return $this->returnHandler( false );
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
function getDefaultDashlets() {
|
|
$parameters = [];
|
|
|
|
$permission = new Permission();
|
|
$permission_level = $permission->getLevel( $this->getCurrentUserObject()->getId(), $this->getCurrentCompanyObject()->getId() );
|
|
Debug::Text( 'Permission Level: ' . $permission_level, __FILE__, __LINE__, __METHOD__, 10 );
|
|
|
|
//Get available dashlets (as that performs permission checks), and only add ones that are available.
|
|
$dashlet_options = Misc::trimSortPrefix( $this->getOptions( 'dashlets' ) );
|
|
|
|
//Check if TimeSheet Verifications are even enabled, not need to display dashlets if they aren't.
|
|
$enabled_timesheet_verification = false;
|
|
$ppslf = TTNew( 'PayPeriodScheduleListFactory' ); /** @var PayPeriodScheduleListFactory $ppslf */
|
|
$ppslf->getByCompanyId( $this->getCurrentCompanyObject()->getId() );
|
|
if ( $ppslf->getRecordCount() > 0 ) {
|
|
foreach ( $ppslf as $pps_obj ) {
|
|
if ( in_array( $pps_obj->getTimeSheetVerifyType(), [ 20, 40 ] ) ) { //Check if TimeSheet Verification is enabled or not.
|
|
$enabled_timesheet_verification = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Note: Dashlet information including its name/title is saved to UserGenericData, which means if the user changes languages then the dashlet titles won't get changed unless they edit/save them, or restore defaults.
|
|
// This is required behavior since the user can rename the dashlets to whatever they want.
|
|
|
|
//Common to all levels.
|
|
( ( isset( $dashlet_options['news'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'news', TTi18n::getText( 'News' ) ) : null );
|
|
( ( isset( $dashlet_options['exception_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'exception_summary', TTi18n::getText( 'Exception Summary' ) ) : null );
|
|
( ( isset( $dashlet_options['message_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'message_summary', TTi18n::getText( 'Messages (UnRead)' ) ) : null );
|
|
|
|
if ( $permission_level >= 40 ) {
|
|
( ( isset( $dashlet_options['request_authorize_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'request_authorize_summary', TTi18n::getText( 'Request Authorizations' ) ) : null );
|
|
( ( isset( $dashlet_options['exception_summary_child'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'exception_summary_child', TTi18n::getText( 'Exceptions (Subordinates)' ) ) : null );
|
|
( ( isset( $dashlet_options['schedule_summary_child'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'schedule_summary_child', TTi18n::getText( 'Schedule Summary (Subordinates)' ) ) : null );
|
|
}
|
|
|
|
if ( $permission_level <= 40 ) {
|
|
( ( isset( $dashlet_options['timesheet_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'timesheet_summary', TTi18n::getText( 'TimeSheet Summary' ) ) : null );
|
|
}
|
|
( ( isset( $dashlet_options['schedule_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'schedule_summary', TTi18n::getText( 'Schedule Summary' ) ) : null );
|
|
if ( $permission_level <= 40 ) {
|
|
( ( isset( $dashlet_options['accrual_balance_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'accrual_balance_summary', TTi18n::getText( 'Accrual Balances' ) ) : null );
|
|
}
|
|
|
|
if ( $enabled_timesheet_verification == true ) {
|
|
if ( $permission_level == 40 ) {
|
|
( ( isset( $dashlet_options['timesheet_verification_summary_child'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'timesheet_verification_summary_child', TTi18n::getText( 'TimeSheet Verifications (Subordinates)' ) ) : null );
|
|
} else if ( $permission_level >= 50 ) {
|
|
( ( isset( $dashlet_options['timesheet_verification_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'timesheet_verification_summary', TTi18n::getText( 'TimeSheet Verifications' ) ) : null );
|
|
}
|
|
}
|
|
|
|
if ( $permission_level >= 40 ) {
|
|
( ( isset( $dashlet_options['user_active_shift_summary'] ) ) ? $parameters[] = $this->createDefaultDashletData( 'user_active_shift_summary', TTi18n::getText( 'Whos In/Out' ) ) : null );
|
|
}
|
|
|
|
$augd = TTNew( 'APIUserGenericData' ); /** @var APIUserGenericData $augd */
|
|
$retval = $augd->setUserGenericData( $parameters );
|
|
if ( $retval['api_retval'] == true ) {
|
|
$parameters = [
|
|
'name' => 'order_data',
|
|
'script' => 'global_dashboard_order',
|
|
'is_default' => true,
|
|
'data' => $retval['api_details']['details'],
|
|
];
|
|
$augd->setUserGenericData( $parameters );
|
|
|
|
return $augd->getUserGenericData( [ 'filter_data' => [ 'script' => 'global_dashboard', 'deleted' => false ] ] );
|
|
} else {
|
|
return $this->returnHandler( false );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $type
|
|
* @param $name
|
|
* @return array
|
|
*/
|
|
function createDefaultDashletData( $type, $name ) {
|
|
$result = [
|
|
'script' => 'global_dashboard',
|
|
'is_default' => false,
|
|
'name' => $name,
|
|
'data' => [
|
|
'dashlet_type' => $type,
|
|
'auto_refresh' => 0,
|
|
'rows_per_page' => 0,
|
|
],
|
|
];
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
function removeAllDashlets() {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
?>
|