<?php class OsServiceHelper { /** * @return OsServiceModel[] */ public static function get_allowed_active_services(): array { $agents = new OsServiceModel(); return $agents->should_be_active()->filter_allowed_records()->get_results_as_models(); } public static function get_max_capacity_by_service_id( $service_id ) { $service = new OsServiceModel( $service_id ); return self::get_max_capacity( $service ); } public static function get_min_capacity_by_service_id( $service_id ) { $service = new OsServiceModel( $service_id ); return self::get_min_capacity( $service ); } public static function get_minimum_duration_across_services() { $service = new OsServiceModel(); $services = $service->should_be_active()->get_results_as_models(); $min_duration = false; foreach ( $services as $service ) { $min_duration = $min_duration ? min( $min_duration, $service->duration ) : $service->duration; } return $min_duration; } public static function get_summary_duration_label( $duration ) { if ( ! $duration ) { return ''; } if ( ( $duration >= 60 ) && ! OsSettingsHelper::is_on( 'steps_show_duration_in_minutes' ) ) { $hours = floor( $duration / 60 ); $minutes = $duration % 60; $summary_duration_label = $hours . ' '; $summary_duration_label .= ( $hours > 1 ) ? __( 'Hours', 'latepoint' ) : __( 'Hour', 'latepoint' ); if ( $minutes ) { $summary_duration_label .= ', ' . $minutes . ' ' . __( 'Minutes', 'latepoint' ); } } else { $summary_duration_label = $duration . ' ' . __( 'Minutes', 'latepoint' ); } return $summary_duration_label; } public static function get_max_capacity( $service ) { if ( $service && ! empty( $service->capacity_max ) ) { return $service->capacity_max; } return 1; } public static function get_min_capacity( $service ) { if ( $service && ! empty( $service->capacity_min ) ) { return $service->capacity_min; } return 1; } public static function get_percent_of_capacity_booked( $service, $total_attendees ) { $total_attendees = empty( $total_attendees ) ? 1 : $total_attendees; $max_capacity = self::get_max_capacity( $service ); return min( 100, round( $total_attendees / $max_capacity * 100 ) ); } public static function get_default_colors() { return array( '#2752E4', '#C066F1', '#26B7DD', '#E8C634', '#19CED6', '#2FEAA3', '#252a3e', '#8d87a5', '#b9b784' ); } public static function get_default_duration_for_service( $service_id ) { $service = new OsServiceModel( $service_id ); return $service->duration; } public static function service_option_html_for_select( $service, $selected = false ) { ?> <div class="service-option <?php if ( $selected ) { echo 'selected'; } ?>" data-extra-durations="<?php echo esc_attr( wp_json_encode( $service->get_extra_durations() ) ); ?>" data-id="<?php echo esc_attr( $service->id ); ?>" data-buffer-before="<?php echo esc_attr( $service->buffer_before ); ?>" data-buffer-after="<?php echo esc_attr( $service->buffer_after ); ?>" data-capacity-min="<?php echo esc_attr( $service->capacity_min ); ?>" data-capacity-max="<?php echo esc_attr( $service->capacity_max ); ?>" data-duration-name="<?php echo esc_attr( $service->duration_name ); ?>" data-duration="<?php echo esc_attr( $service->duration ); ?>"> <div class="service-color" style="background-color: <?php echo esc_attr( $service->bg_color ); ?>"></div> <span><?php echo esc_html( $service->name ); ?></span> </div> <?php } /** * @param $agent_id * * @return OsServiceModel[] */ public static function get_services( bool $filter_allowed_records = false ): array { $services = new OsServiceModel(); if ( $filter_allowed_records ) { $services->filter_allowed_records(); } $services = $services->get_results_as_models(); return $services; } /** * @param bool $filter_allowed_records * @param array $service_ids * * @return array */ public static function get_services_list( bool $filter_allowed_records = false, array $service_ids = [], bool $exclude_disabled = false ): array { $services = new OsServiceModel(); if ( $filter_allowed_records ) { $services->filter_allowed_records(); } if ( ! empty( $service_ids ) ) { $services->where_in( 'id', $service_ids ); } if ( $exclude_disabled ) { $services->where( [ 'status' => LATEPOINT_SERVICE_STATUS_ACTIVE ] ); } $services = $services->order_by('status asc, name asc')->get_results_as_models(); $services_list = []; if ( $services ) { foreach ( $services as $service ) { $label = ( $service->status == LATEPOINT_LOCATION_STATUS_DISABLED ) ? ( $service->name . ' [' . esc_html__( 'Disabled', 'latepoint' ) . ']' ) : $service->name; $services_list[] = [ 'value' => $service->id, 'label' => $label ]; } } return $services_list; } public static function has_multiple_durations( int $service_id ): bool { $service = new OsServiceModel( $service_id ); $extra_durations = $service->get_extra_durations(); return ! empty( $extra_durations ); } }