getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'view' ) || $this->getPermissionObject()->Check( 'company', 'view_own' ) || $this->getPermissionObject()->Check( 'company', 'view_child' ) ) ) ) { $name = 'list_columns'; } $retval = parent::getOptions( $name, $parent ); if ( $name == 'province' ) { //Provinces need to have sort prefixes added, as some countries (like Dominica Republic) use numeric keys (00, 01) and the name of the provinces are not in order when sorting by that. //They needed to be added here though, because if they are added in CompanyFactory->getOptions() it breaks the $parent argument lookup. $retval = Misc::addSortPrefix( $retval ); } return $retval; } /** * Get default company data for creating new companyes. * @return array */ function getCompanyDefaultData() { $company_obj = $this->getCurrentCompanyObject(); $data = [ 'status_id' => 10, 'product_edition_id' => $company_obj->getProductEdition(), 'parent_id' => $company_obj->getId(), 'password_minimum_length' => 8, 'password_minimum_age' => 1, 'password_maximum_age' => 180, ]; $cf = TTnew( 'CompanyFactory' ); /** @var CompanyFactory $cf */ $data = $cf->getCustomFieldsDefaultData( $company_obj->getId(), $data ); return $this->returnHandler( $data ); } /** * Get company data for one or more companyes. * @param array $data filter data * @param bool $disable_paging * @return array|bool */ function getCompany( $data = null, $disable_paging = false ) { $data = $this->initializeFilterAndPager( $data, $disable_paging ); if ( $this->getPermissionObject()->checkAuthenticationType( 700 ) == false ) { //700=HTTP Auth with username/password return $this->getPermissionObject()->AuthenticationTypeDenied(); } if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'view' ) || $this->getPermissionObject()->Check( 'company', 'view_own' ) || $this->getPermissionObject()->Check( 'company', 'view_child' ) ) ) { //return $this->getPermissionObject()->PermissionDenied(); $data['filter_columns'] = $this->handlePermissionFilterColumns( ( isset( $data['filter_columns'] ) ) ? $data['filter_columns'] : null, Misc::trimSortPrefix( $this->getOptions( 'list_columns' ) ) ); } if ( !( $this->getPermissionObject()->Check( 'company', 'view' ) && $this->getCurrentCompanyObject()->getId() == PRIMARY_COMPANY_ID ) ) { //Force ID to current company. $data['filter_data']['id'] = $this->getCurrentCompanyObject()->getId(); } //FIXME: This filters company by created_by. //if ( $this->getPermissionObject()->Check('company', 'view') == FALSE AND $this->getPermissionObject()->Check('company', 'view_own') == TRUE ) { // $data['filter_data']['permission_children_ids'] = $this->getCurrentUserObject()->getId(); //The created_by is unlikely to be the first user in the system, so this isn't going to work. //} Debug::Arr( $data, 'Data: ', __FILE__, __LINE__, __METHOD__, 10 ); $include_last_punch_time = ( isset( $data['filter_columns']['max_punch_time_stamp'] ) ) ? true : false; $blf = TTnew( 'CompanyListFactory' ); /** @var CompanyListFactory $blf */ $blf->getAPISearchByCompanyIdAndArrayCriteria( $this->getCurrentCompanyObject()->getId(), $data['filter_data'], $data['filter_items_per_page'], $data['filter_page'], null, $data['filter_sort'], $include_last_punch_time ); Debug::Text( 'Record Count: ' . $blf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10 ); if ( $blf->getRecordCount() > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $blf->getRecordCount() ); $this->setPagerObject( $blf ); $retarr = []; foreach ( $blf as $b_obj ) { $retarr[] = $b_obj->getObjectAsArray( $data['filter_columns'] ); $this->getProgressBarObject()->set( $this->getAPIMessageID(), $blf->getCurrentRow() ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->returnHandler( $retarr ); } return $this->returnHandler( true ); //No records returned. } /** * @param string $format * @param array $data * @param bool $disable_paging * @return array|bool */ function exportCompany( $format = 'csv', $data = null, $disable_paging = true ) { $result = $this->stripReturnHandler( $this->getCompany( $data, $disable_paging ) ); return $this->exportRecords( $format, 'export_company', $result, ( ( isset( $data['filter_columns'] ) ) ? $data['filter_columns'] : null ) ); } /** * Get only the fields that are common across all records in the search criteria. Used for Mass Editing of records. * @param array $data filter data * @return array */ function getCommonCompanyData( $data ) { return Misc::arrayIntersectByRow( $this->stripReturnHandler( $this->getCompany( $data, true ) ) ); } /** * Validate company data for one or more companyes. * @param array $data company data * @return array */ function validateCompany( $data ) { return $this->setCompany( $data, true ); } /** * Set company data for one or more companyes. * @param array $data company data * @param bool $validate_only * @param bool $ignore_warning * @return array|bool */ function setCompany( $data, $validate_only = false, $ignore_warning = true ) { $validate_only = (bool)$validate_only; $ignore_warning = (bool)$ignore_warning; if ( !is_array( $data ) ) { return $this->returnHandler( false ); } if ( $this->getPermissionObject()->checkAuthenticationType( 700 ) == false ) { //700=HTTP Auth with username/password return $this->getPermissionObject()->AuthenticationTypeDenied(); } if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'edit' ) || $this->getPermissionObject()->Check( 'company', 'edit_own' ) || $this->getPermissionObject()->Check( 'company', 'edit_child' ) || $this->getPermissionObject()->Check( 'company', 'add' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } if ( $validate_only == true ) { Debug::Text( 'Validating Only!', __FILE__, __LINE__, __METHOD__, 10 ); } [ $data, $total_records ] = $this->convertToMultipleRecords( $data ); Debug::Text( 'Received data for: ' . $total_records . ' Companys', __FILE__, __LINE__, __METHOD__, 10 ); Debug::Arr( $data, 'Data: ', __FILE__, __LINE__, __METHOD__, 10 ); $validator_stats = [ 'total_records' => $total_records, 'valid_records' => 0 ]; $validator = $save_result = []; $key = false; if ( is_array( $data ) && $total_records > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $total_records ); foreach ( $data as $key => $row ) { $primary_validator = new Validator(); $lf = TTnew( 'CompanyListFactory' ); /** @var CompanyListFactory $lf */ $lf->StartTransaction(); if ( isset( $row['id'] ) && $row['id'] != '' ) { //Modifying existing object. //Get company object, so we can only modify just changed data for specific records if needed. //$lf->getByIdAndCompanyId( $row['id'], $this->getCurrentCompanyObject()->getId() ); if ( $this->getCurrentCompanyObject()->getId() == PRIMARY_COMPANY_ID ) { $lf->getById( $row['id'] ); } else { $lf->getByIdAndCompanyId( $row['id'], $this->getCurrentCompanyObject()->getId() ); } //$lf->getById( $row['id'] ); if ( $lf->getRecordCount() == 1 ) { //Object exists, check edit permissions if ( $validate_only == true || ( $this->getPermissionObject()->Check( 'company', 'edit' ) || ( $this->getPermissionObject()->Check( 'company', 'edit_own' ) && $this->getCurrentCompanyObject()->getId() == $lf->getCurrent()->getID() ) ) ) { Debug::Text( 'Row Exists, getting current data for ID: ' . $row['id'], __FILE__, __LINE__, __METHOD__, 10 ); $lf = $lf->getCurrent(); $row = array_merge( $lf->getObjectAsArray(), $row ); } else { $primary_validator->isTrue( 'permission', false, TTi18n::gettext( 'Edit permission denied' ) ); } } else { //Object doesn't exist. $primary_validator->isTrue( 'id', false, TTi18n::gettext( 'Edit permission denied, record does not exist' ) ); } } else { //Adding new object, check ADD permissions. $primary_validator->isTrue( 'permission', $this->getPermissionObject()->Check( 'company', 'add' ), TTi18n::gettext( 'Add permission denied' ) ); } Debug::Arr( $row, 'Data: ', __FILE__, __LINE__, __METHOD__, 10 ); $is_valid = $primary_validator->isValid(); if ( $is_valid == true ) { //Check to see if all permission checks passed before trying to save data. Debug::Text( 'Attempting to save data...', __FILE__, __LINE__, __METHOD__, 10 ); //Don't allow changing edition, status unless they can edit all companies, or its the primary company (for On-Site installs) // Need to consider the case of a On-Site Community Edition upgrading to Professional Edition, they need a way to change the Company product edition before 'company','edit' permissions will appear. // Just assume that whenever its the primary company we allow the product edition to change. //if ( !( $this->getCurrentCompanyObject()->getId() == PRIMARY_COMPANY_ID OR $this->getPermissionObject()->Check('company', 'edit') ) ) { if ( !( ( DEPLOYMENT_ON_DEMAND == true && ( $this->getCurrentCompanyObject()->getId() == PRIMARY_COMPANY_ID && $this->getPermissionObject()->Check( 'company', 'edit' ) ) ) || ( DEPLOYMENT_ON_DEMAND == false && $this->getCurrentCompanyObject()->getId() == PRIMARY_COMPANY_ID ) ) ) { unset( $row['product_edition_id'], $row['status_id'] ); if ( DEPLOYMENT_ON_DEMAND == true ) { //When On-Demand, prevent changing of company name unless its by a Master Admin. unset( $row['name'] ); } } $lf->setObjectFromArray( $row ); if ( !$this->getPermissionObject()->Check( 'company', 'edit' ) ) { //Force ID to current company. $lf->setID( $this->getCurrentCompanyObject()->getId() ); } if ( $lf->isNew( true ) == true ) { $lf->setEnableAddLegalEntity( true ); $lf->setEnableAddCurrency( true ); $lf->setEnableAddPermissionGroupPreset( true ); $lf->setEnableAddStation( true ); $lf->setEnableAddPayStubEntryAccountPreset( true ); $lf->setEnableAddRecurringHolidayPreset( true ); $lf->setEnableAddUserDefaultPreset( true ); } $is_valid = $lf->isValid( $ignore_warning ); if ( $is_valid == true ) { Debug::Text( 'Saving data...', __FILE__, __LINE__, __METHOD__, 10 ); if ( $validate_only == true ) { $save_result[$key] = true; } else { $save_result[$key] = $lf->Save(); } $validator_stats['valid_records']++; } } if ( $is_valid == false ) { Debug::Text( 'Data is Invalid...', __FILE__, __LINE__, __METHOD__, 10 ); $lf->FailTransaction(); //Just rollback this single record, continue on to the rest. $validator[$key] = $this->setValidationArray( [ $primary_validator, $lf ] ); } else if ( $validate_only == true ) { $lf->FailTransaction(); } $lf->CommitTransaction(); $this->getProgressBarObject()->set( $this->getAPIMessageID(), $key ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->handleRecordValidationResults( $validator, $validator_stats, $key, $save_result ); } return $this->returnHandler( false ); } /** * Delete one or more companys. * @param array $data company data * @return array|bool */ function deleteCompany( $data ) { if ( !is_array( $data ) ) { $data = [ $data ]; } if ( !is_array( $data ) ) { return $this->returnHandler( false ); } if ( $this->getPermissionObject()->checkAuthenticationType( 700 ) == false ) { //700=HTTP Auth with username/password return $this->getPermissionObject()->AuthenticationTypeDenied(); } if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'delete' ) || $this->getPermissionObject()->Check( 'company', 'delete_own' ) || $this->getPermissionObject()->Check( 'company', 'delete_child' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } Debug::Text( 'Received data for: ' . count( $data ) . ' Companys', __FILE__, __LINE__, __METHOD__, 10 ); Debug::Arr( $data, 'Data: ', __FILE__, __LINE__, __METHOD__, 10 ); $total_records = count( $data ); $validator = $save_result = []; $key = false; $validator_stats = [ 'total_records' => $total_records, 'valid_records' => 0 ]; if ( is_array( $data ) && $total_records > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $total_records ); foreach ( $data as $key => $id ) { $primary_validator = new Validator(); $lf = TTnew( 'CompanyListFactory' ); /** @var CompanyListFactory $lf */ $lf->StartTransaction(); if ( $id != '' ) { //Modifying existing object. //Get company object, so we can only modify just changed data for specific records if needed. if ( $this->getCurrentCompanyObject()->getId() == PRIMARY_COMPANY_ID ) { $lf->getById( $id ); } else { $lf->getByIdAndCompanyId( $id, $this->getCurrentCompanyObject()->getId() ); } if ( $lf->getRecordCount() == 1 ) { //Object exists, check edit permissions if ( $this->getPermissionObject()->Check( 'company', 'delete' ) || ( $this->getPermissionObject()->Check( 'company', 'delete_own' ) && $this->getPermissionObject()->isOwner( $lf->getCurrent()->getCreatedBy(), $lf->getCurrent()->getID() ) === true ) ) { Debug::Text( 'Record Exists, deleting record ID: ' . $id, __FILE__, __LINE__, __METHOD__, 10 ); $lf = $lf->getCurrent(); } else { $primary_validator->isTrue( 'permission', false, TTi18n::gettext( 'Delete permission denied' ) ); } } else { //Object doesn't exist. $primary_validator->isTrue( 'id', false, TTi18n::gettext( 'Delete permission denied, record does not exist' ) ); } } else { $primary_validator->isTrue( 'id', false, TTi18n::gettext( 'Delete permission denied, record does not exist' ) ); } //Debug::Arr($lf, 'AData: ', __FILE__, __LINE__, __METHOD__, 10); $is_valid = $primary_validator->isValid(); if ( $is_valid == true ) { //Check to see if all permission checks passed before trying to save data. Debug::Text( 'Attempting to delete record...', __FILE__, __LINE__, __METHOD__, 10 ); $lf->setDeleted( true ); $is_valid = $lf->isValid(); if ( $is_valid == true ) { Debug::Text( 'Record Deleted...', __FILE__, __LINE__, __METHOD__, 10 ); $save_result[$key] = $lf->Save(); $validator_stats['valid_records']++; } } if ( $is_valid == false ) { Debug::Text( 'Data is Invalid...', __FILE__, __LINE__, __METHOD__, 10 ); $lf->FailTransaction(); //Just rollback this single record, continue on to the rest. $validator[$key] = $this->setValidationArray( [ $primary_validator, $lf ] ); } $lf->CommitTransaction(); $this->getProgressBarObject()->set( $this->getAPIMessageID(), $key ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->handleRecordValidationResults( $validator, $validator_stats, $key, $save_result ); } return $this->returnHandler( false ); } /** * Copy one or more companyes. * @param array $data company data * @return array */ function copyCompany( $data ) { $src_rows = $this->stripReturnHandler( $this->getCompany( $data, true ) ); if ( is_array( $src_rows ) && count( $src_rows ) > 0 ) { Debug::Arr( $src_rows, 'SRC Rows: ', __FILE__, __LINE__, __METHOD__, 10 ); foreach ( $src_rows as $key => $row ) { unset( $src_rows[$key]['id'] ); //Clear fields that can't be copied $src_rows[$key]['name'] = Misc::generateCopyName( $row['name'] ); //Generate unique name $src_rows[$key]['short_name'] = rand( 1000, 9999 ); } Debug::Arr( $src_rows, 'bSRC Rows: ', __FILE__, __LINE__, __METHOD__, 10 ); return $this->setCompany( $src_rows ); //Save copied rows } return $this->returnHandler( false ); } /* Additional Functions... */ /** * Get user counts for a single company. We should be able to support multiple companies as well, or getting data for all companies by not specifying the company filter. * @param array $data filter data * @param bool $disable_paging * @return array|bool */ function getCompanyMinAvgMaxUserCounts( $data = null, $disable_paging = false ) { $data = $this->initializeFilterAndPager( $data, $disable_paging ); if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'view' ) || $this->getPermissionObject()->Check( 'company', 'view_own' ) || $this->getPermissionObject()->Check( 'company', 'view_child' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } if ( $this->getPermissionObject()->Check( 'company', 'view' ) == false ) { if ( $this->getPermissionObject()->Check( 'company', 'view_child' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } if ( $this->getPermissionObject()->Check( 'company', 'view_own' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } } if ( !isset( $data['filter_data']['company_id'] ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } if ( !isset( $data['filter_data']['start_date'] ) ) { $data['filter_data']['start_date'] = TTDate::getBeginMonthEpoch( time() ); } if ( !isset( $data['filter_data']['end_date'] ) ) { $data['filter_data']['end_date'] = TTDate::getEndMonthEpoch( time() ); } Debug::Arr( $data, 'Final Filter Data: ', __FILE__, __LINE__, __METHOD__, 10 ); $cuclf = TTnew( 'CompanyUserCountListFactory' ); /** @var CompanyUserCountListFactory $cuclf */ $cuclf->getMinAvgMaxByCompanyIdsAndStartDateAndEndDate( $data['filter_data']['company_id'], $data['filter_data']['start_date'], $data['filter_data']['end_date'] ); Debug::Text( 'Record Count: ' . $cuclf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10 ); if ( $cuclf->getRecordCount() > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $cuclf->getRecordCount() ); $this->setPagerObject( $cuclf ); $retarr = []; foreach ( $cuclf as $cuc_obj ) { $retarr[] = [ //'company_id' => $data['filter_data']['company_id'], 'company_id' => $cuc_obj->getColumn( 'company_id' ), 'min_active_users' => $cuc_obj->getColumn( 'min_active_users' ), 'avg_active_users' => $cuc_obj->getColumn( 'avg_active_users' ), 'max_active_users' => $cuc_obj->getColumn( 'max_active_users' ), 'min_inactive_users' => $cuc_obj->getColumn( 'min_inactive_users' ), 'avg_inactive_users' => $cuc_obj->getColumn( 'avg_inactive_users' ), 'max_inactive_users' => $cuc_obj->getColumn( 'max_inactive_users' ), 'min_deleted_users' => $cuc_obj->getColumn( 'min_deleted_users' ), 'avg_deleted_users' => $cuc_obj->getColumn( 'avg_deleted_users' ), 'max_deleted_users' => $cuc_obj->getColumn( 'max_deleted_users' ), ]; $this->getProgressBarObject()->set( $this->getAPIMessageID(), $cuclf->getCurrentRow() ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->returnHandler( $retarr ); } return $this->returnHandler( true ); //No records returned. } /** * Get user email addresses for a single company. We should be able to support multiple companies as well, or getting data for all companies by not specifying the company filter. * @param array $data filter data * @param bool $disable_paging * @return array|bool */ function getCompanyEmailAddresses( $data = null, $disable_paging = false ) { $data = $this->initializeFilterAndPager( $data, $disable_paging ); if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'view' ) || $this->getPermissionObject()->Check( 'company', 'view_own' ) || $this->getPermissionObject()->Check( 'company', 'view_child' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } if ( $this->getPermissionObject()->Check( 'company', 'view' ) == false ) { if ( $this->getPermissionObject()->Check( 'company', 'view_child' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } if ( $this->getPermissionObject()->Check( 'company', 'view_own' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } } if ( !isset( $data['filter_data']['company_id'] ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } Debug::Arr( $data, 'Final Filter Data: ', __FILE__, __LINE__, __METHOD__, 10 ); $ulf = TTnew( 'UserListFactory' ); /** @var UserListFactory $ulf */ $ulf->getAPIEmailAddressDataByArrayCriteria( $data['filter_data'], $data['filter_items_per_page'], $data['filter_page'], null, $data['filter_sort'] ); Debug::Text( 'Record Count: ' . $ulf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10 ); if ( $ulf->getRecordCount() > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $ulf->getRecordCount() ); $this->setPagerObject( $ulf ); $retarr = []; foreach ( $ulf as $u_obj ) { $retarr[] = $u_obj->data; $this->getProgressBarObject()->set( $this->getAPIMessageID(), $ulf->getCurrentRow() ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->returnHandler( $retarr ); } return $this->returnHandler( true ); //No records returned. } /** * Get phone minutes for a single company. We should be able to support multiple companies as well, or getting data for all companies by not specifying the company filter. * @param array $data filter data * @param bool $disable_paging * @return array|bool */ function getCompanyPhonePunchData( $data = null, $disable_paging = false ) { $data = $this->initializeFilterAndPager( $data, $disable_paging ); if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'view' ) || $this->getPermissionObject()->Check( 'company', 'view_own' ) || $this->getPermissionObject()->Check( 'company', 'view_child' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } if ( $this->getPermissionObject()->Check( 'company', 'view' ) == false ) { if ( $this->getPermissionObject()->Check( 'company', 'view_child' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } if ( $this->getPermissionObject()->Check( 'company', 'view_own' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } } if ( !isset( $data['filter_data']['company_id'] ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } if ( !isset( $data['filter_data']['start_date'] ) ) { $data['filter_data']['start_date'] = TTDate::getBeginMonthEpoch( time() ); } if ( !isset( $data['filter_data']['end_date'] ) ) { $data['filter_data']['end_date'] = TTDate::getEndMonthEpoch( time() ); } $llf = TTnew( 'LogListFactory' ); /** @var LogListFactory $llf */ $llf->getByPhonePunchDataByCompanyIdAndStartDateAndEndDate( $data['filter_data']['company_id'], $data['filter_data']['start_date'], $data['filter_data']['end_date'] ); Debug::Text( 'Record Count: ' . $llf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10 ); if ( $llf->getRecordCount() > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $llf->getRecordCount() ); $this->setPagerObject( $llf ); $retarr = []; foreach ( $llf as $l_obj ) { $retarr[] = [ 'company_id' => $l_obj->getColumn( 'company_id' ), 'product' => $l_obj->getColumn( 'product' ), 'minutes' => $l_obj->getColumn( 'minutes' ), 'billable_minutes' => $l_obj->getColumn( 'billable_units' ), 'calls' => $l_obj->getColumn( 'calls' ), 'unique_users' => $l_obj->getColumn( 'unique_users' ), ]; $this->getProgressBarObject()->set( $this->getAPIMessageID(), $llf->getCurrentRow() ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->returnHandler( $retarr ); } return $this->returnHandler( true ); //No records returned. } /** * Get station counts for a single company. We should be able to support multiple companies as well, or getting data for all companies by not specifying the company filter. * @param array $data filter data * @param bool $disable_paging * @return array|bool */ function getCompanyStationCounts( $data = null, $disable_paging = false ) { $data = $this->initializeFilterAndPager( $data, $disable_paging ); if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'view' ) || $this->getPermissionObject()->Check( 'company', 'view_own' ) || $this->getPermissionObject()->Check( 'company', 'view_child' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } if ( $this->getPermissionObject()->Check( 'company', 'view' ) == false ) { if ( $this->getPermissionObject()->Check( 'company', 'view_child' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } if ( $this->getPermissionObject()->Check( 'company', 'view_own' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } } if ( !isset( $data['filter_data']['company_id'] ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } $llf = TTnew( 'StationListFactory' ); /** @var StationListFactory $llf */ if ( !isset( $data['filter_data']['type_id'] ) ) { //$data['filter_data']['type_id'] = array_keys( Misc::trimSortPrefix( $llf->getOptions('type') ) ); $data['filter_data']['type_id'] = [ 61, 65 ]; } $llf->getCountByCompanyIdAndTypeId( $data['filter_data']['company_id'], $data['filter_data']['type_id'] ); Debug::Text( 'Record Count: ' . $llf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10 ); if ( $llf->getRecordCount() > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $llf->getRecordCount() ); $this->setPagerObject( $llf ); $retarr = []; foreach ( $llf as $l_obj ) { $retarr[] = [ 'company_id' => $l_obj->getColumn( 'company_id' ), 'type_id' => $l_obj->getColumn( 'type_id' ), 'total' => $l_obj->getColumn( 'total' ), ]; $this->getProgressBarObject()->set( $this->getAPIMessageID(), $llf->getCurrentRow() ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->returnHandler( $retarr ); } return $this->returnHandler( true ); //No records returned. } /** * Get timeclock stations associated with each company. * @param array $data filter data * @param bool $disable_paging * @return array|bool */ function getCompanyTimeClockStations( $data = null, $disable_paging = false ) { $data = $this->initializeFilterAndPager( $data, $disable_paging ); if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'view' ) || $this->getPermissionObject()->Check( 'company', 'view_own' ) || $this->getPermissionObject()->Check( 'company', 'view_child' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } if ( $this->getPermissionObject()->Check( 'company', 'view' ) == false ) { if ( $this->getPermissionObject()->Check( 'company', 'view_child' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } if ( $this->getPermissionObject()->Check( 'company', 'view_own' ) ) { $data['filter_data']['company_id'] = $this->getCurrentCompanyObject()->getId(); } } $llf = TTnew( 'StationListFactory' ); /** @var StationListFactory $llf */ if ( !isset( $data['filter_data']['status_id'] ) ) { $data['filter_data']['status_id'] = [ 20 ]; } if ( !isset( $data['filter_data']['type_id'] ) ) { $data['filter_data']['type_id'] = [ 150 ]; } if ( !isset( $data['filter_columns'] ) ) { $data['filter_columns'] = [ 'id' => true, 'station_id' => true, 'status_id' => true, 'type_id' => true, 'updated_date' => true ]; } $llf->getAPITimeClockStationsByArrayCriteria( $data['filter_data'] ); Debug::Text( 'Record Count: ' . $llf->getRecordCount(), __FILE__, __LINE__, __METHOD__, 10 ); if ( $llf->getRecordCount() > 0 ) { $this->getProgressBarObject()->start( $this->getAPIMessageID(), $llf->getRecordCount() ); $this->setPagerObject( $llf ); $retarr = []; foreach ( $llf as $l_obj ) { $retarr[] = $l_obj->getObjectAsArray( $data['filter_columns'] ); $this->getProgressBarObject()->set( $this->getAPIMessageID(), $llf->getCurrentRow() ); } $this->getProgressBarObject()->stop( $this->getAPIMessageID() ); return $this->returnHandler( $retarr ); } return $this->returnHandler( true ); //No records returned. } /** * Return an array to determine if branches, department, job, task and punch tag dropdown boxes should be enabled and have data. * @return array */ function isBranchAndDepartmentAndJobAndJobItemAndPunchTagEnabled() { $retarr = [ 'branch' => false, 'department' => false, 'job' => false, 'job_item' => false, 'punch_tag' => false, ]; $blf = TTnew( 'BranchListFactory' ); /** @var BranchListFactory $blf */ $blf->getByCompanyId( $this->getCurrentCompanyObject()->getId(), 1 ); if ( $blf->getRecordCount() >= 1 ) { $retarr['branch'] = true; } $dlf = TTnew( 'DepartmentListFactory' ); /** @var DepartmentListFactory $dlf */ $dlf->getByCompanyId( $this->getCurrentCompanyObject()->getId(), 1 ); if ( $dlf->getRecordCount() >= 1 ) { $retarr['department'] = true; } if ( getTTProductEdition() >= TT_PRODUCT_CORPORATE ) { $jlf = TTnew( 'JobListFactory' ); /** @var JobListFactory $jlf */ $jlf->getByCompanyId( $this->getCurrentCompanyObject()->getId(), 1 ); if ( $jlf->getRecordCount() >= 1 ) { $retarr['job'] = true; } $jilf = TTnew( 'JobItemListFactory' ); /** @var JobItemListFactory $jilf */ $jilf->getByCompanyId( $this->getCurrentCompanyObject()->getId(), 1 ); if ( $jilf->getRecordCount() >= 1 ) { $retarr['job_item'] = true; } $ptlf = TTnew( 'PunchTagListFactory' ); /** @var PunchTagListFactory $ptlf */ $ptlf->getByCompanyId( $this->getCurrentCompanyObject()->getId(), 1 ); if ( $ptlf->getRecordCount() >= 1 ) { $retarr['punch_tag'] = true; } } return $retarr; } /** * @param $company_id * @return bool */ function deleteImage( $company_id ) { //Permissions match setCompany if ( !$this->getPermissionObject()->Check( 'company', 'enabled' ) || !( $this->getPermissionObject()->Check( 'company', 'edit' ) || $this->getPermissionObject()->Check( 'company', 'edit_own' ) || $this->getPermissionObject()->Check( 'company', 'edit_child' ) || $this->getPermissionObject()->Check( 'company', 'add' ) ) ) { return $this->getPermissionObject()->PermissionDenied(); } $result = $this->stripReturnHandler( $this->getCompany( [ 'filter_data' => [ 'id' => $company_id ] ] ) ); if ( isset( $result[0] ) && count( $result[0] ) > 0 ) { $f = TTnew( 'CompanyFactory' ); /** @var CompanyFactory $f */ $file_name = $f->getLogoFileName( $company_id, false ); if ( file_exists( $file_name ) ) { unlink( $file_name ); TTLog::addEntry( $company_id, 30, TTi18n::getText( 'Logo' ), null, $f->getTable() ); } } return $this->returnHandler( true ); } } ?>