Payout
Source
File: src/Tribe/Repositories/Payout.php
class Payout extends Tribe__Repository {
/**
* The unique fragment that will be used to identify this repository filters.
*
* @var string
*/
protected $filter_name = 'payouts';
/**
* Payouts_Repository constructor.
*
* @since 4.7.0
*/
public function __construct() {
parent::__construct();
$this->default_args = [
'post_type' => Payouts::PAYOUT_OBJECT,
'post_status' => 'any',
'orderby' => [
'date',
'ID',
],
];
$this->create_args = [
'post_type' => Payouts::PAYOUT_OBJECT,
];
$this->add_simple_meta_schema_entry( 'event', '_tribe_event_id', 'meta_in' );
$this->add_simple_meta_schema_entry( 'event__not_in', '_tribe_event_id', 'meta_not_in' );
$this->add_simple_meta_schema_entry( 'ticket', '_tribe_ticket_id', 'meta_in' );
$this->add_simple_meta_schema_entry( 'ticket__not_in', '_tribe_ticket_id', 'meta_not_in' );
$this->add_simple_meta_schema_entry( 'order', '_tribe_order_id', 'meta_in' );
$this->add_simple_meta_schema_entry( 'order__not_in', '_tribe_order_id', 'meta_not_in' );
$this->add_simple_meta_schema_entry( 'user', '_tribe_user_id', 'meta_in' );
$this->add_simple_meta_schema_entry( 'user__not_in', '_tribe_user_id', 'meta_not_in' );
$this->add_simple_meta_schema_entry( 'amount', '_tribe_amount' );
$this->add_simple_meta_schema_entry( 'fees', '_tribe_fees' );
$this->add_simple_meta_schema_entry( 'order_provider', '_tribe_order_provider' );
$this->add_simple_meta_schema_entry( 'receiver_key', '_tribe_receiver_key' );
$this->add_simple_meta_schema_entry( 'gateway', '_tribe_gateway' );
$this->add_simple_meta_schema_entry( 'transaction', '_tribe_transaction_id' );
$this->add_simple_meta_schema_entry( 'date_paid', '_tribe_date_paid' );
}
/**
* Get total ticket quantity for tickets/events in query.
*
* @since 4.7.0
*
* @return int Total ticket quantity for tickets/events in query.
*/
public function get_total_ticket_quantity() {
/** @var \wpdb $wpdb */
global $wpdb;
$query = $this->get_query();
$value_ids = [];
if ( ! empty( $query->query_vars['meta_query']['_tribe_ticket_id_in']['value'] ) ) {
$meta_key = '_tribe_ticket_qty_%d';
$value_ids = (array) $query->query_vars['meta_query']['_tribe_ticket_id_in']['value'];
} elseif ( ! empty( $query->query_vars['meta_query']['_tribe_event_id_in']['value'] ) ) {
$meta_key = '_tribe_event_qty_%d';
$value_ids = (array) $query->query_vars['meta_query']['_tribe_event_id_in']['value'];
} else {
return 0;
}
$meta_keys = [];
foreach ( $value_ids as $value_id ) {
$meta_keys[] = sprintf( $meta_key, $value_id );
}
return $this->get_total_for_meta_keys( $meta_keys );
}
/**
* Get total amount of payouts in query.
*
* @since 4.7.0
*
* @return int Total amount of payouts in query.
*/
public function get_total_amount() {
/** @var \wpdb $wpdb */
global $wpdb;
$query = $this->get_query();
if ( ! empty( $query->query_vars['meta_query']['_tribe_event_id_in']['value'] ) ) {
$meta_key = '_tribe_event_amt_%d';
$value_ids = (array) $query->query_vars['meta_query']['_tribe_event_id_in']['value'];
$meta_keys = [];
foreach ( $value_ids as $value_id ) {
$meta_keys[] = sprintf( $meta_key, $value_id );
}
} else {
$meta_keys = '_tribe_amount';
}
return $this->get_total_for_meta_keys( $meta_keys );
}
/**
* Get total fees for payouts in query.
*
* @since 4.7.0
*
* @return int Total fees for payouts in query.
*/
public function get_total_fees() {
/** @var \wpdb $wpdb */
global $wpdb;
$query = $this->get_query();
if ( ! empty( $query->query_vars['meta_query']['_tribe_event_id_in']['value'] ) ) {
$meta_key = '_tribe_event_fee_%d';
$value_ids = (array) $query->query_vars['meta_query']['_tribe_event_id_in']['value'];
$meta_keys = [];
foreach ( $value_ids as $value_id ) {
$meta_keys[] = sprintf( $meta_key, $value_id );
}
} else {
$meta_keys = '_tribe_fees';
}
return $this->get_total_for_meta_keys( $meta_keys );
}
/**
* Get total of a specific meta query for payouts in query.
*
* @since 4.7.0
*
* @param string|array $meta_keys Meta key(s) to use.
*
* @return int Total of a specific meta query for payouts in query.
*/
public function get_total_for_meta_keys( $meta_keys ) {
/** @var \wpdb $wpdb */
global $wpdb;
$query = clone $this->get_query();
$query->set( 'fields', 'ids' );
$query->set( 'posts_per_page', 1 );
$meta_keys = (array) $meta_keys;
$meta_key_sql = implode( ', ', array_fill( 0, count( $meta_keys ), '%s' ) );
$post_query = $query->request;
$post_query = preg_replace( '/^\s*SELECT\s*SQL_CALC_FOUND_ROWS\s*/', 'SELECT ', $post_query );
$post_query = preg_replace( '/\s*LIMIT\s*\d+,\s*\d+$/', '', $post_query );
$post_query = "
SELECT SUM( meta_value )
FROM {$wpdb->postmeta}
WHERE
meta_key IN ( {$meta_key_sql} )
AND post_id IN (
{$post_query}
)
";
$post_query = $wpdb->prepare( $post_query, $meta_keys );
return (int) $wpdb->get_var( $post_query );
}
}
Methods
- __construct — Payouts_Repository constructor.
- get_total_amount — Get total amount of payouts in query.
- get_total_fees — Get total fees for payouts in query.
- get_total_for_meta_keys — Get total of a specific meta query for payouts in query.
- get_total_ticket_quantity — Get total ticket quantity for tickets/events in query.