File manager - Edit - /home/u478019808/domains/bestandroidphones.store/public_html/static/img/logo/src.zip
Back
PK ` �ZGUw�! �! Woocommerce/GetOrdersCommand.phpnu �[��� <?php namespace Hostinger\WPCLI\Woocommerce; use WP_CLI; use WP_CLI_Command; class GetOrdersCommand extends WP_CLI_Command { public function __invoke( array $args, array $assoc_args ): void { if ( ! class_exists( 'WooCommerce' ) ) { WP_CLI::error( 'WooCommerce is not active. Please activate WooCommerce before running this command.' ); } $date_range = $this->get_date_range( $assoc_args ); $orders = $this->fetch_orders( $date_range ); $report = $this->generate_report( $orders, $date_range ); $response = [ 'report' => $report, 'currency' => get_woocommerce_currency(), ]; WP_CLI::line( wp_json_encode( $response, JSON_PRETTY_PRINT ) ); } private function get_date_range( array $assoc_args ): array { $from_date = $assoc_args['from-date'] ?? null; $days = isset($assoc_args['days']) ? (int) $assoc_args['days'] : null; if ( ! $from_date && ! $days ) { WP_CLI::error( 'You must provide either --from-date or --days parameter.' ); } if ( $days ) { $to_date = gmdate( 'Y-m-d 23:59:59', strtotime( 'yesterday' ) ); $from_date = gmdate( 'Y-m-d', strtotime( "-" . ( $days - 1 ) . " days", strtotime( 'yesterday' ) ) ); } else { $to_date = gmdate( 'Y-m-d 23:59:59' ); } return [ 'from' => $from_date, 'to' => $to_date ]; } private function fetch_orders( array $date_range ): array { return wc_get_orders( [ 'limit' => -1, 'orderby' => 'date', 'order' => 'ASC', 'date_query' => [ [ 'after' => $date_range['from'], 'before' => $date_range['to'], 'inclusive' => true, ], ], 'type' => 'shop_order', ] ); } private function generate_report( array $orders, array $date_range ): array { $report = []; $unique_customers = []; // Initialize report for all days in the range $current_date = new \DateTime( $date_range['from'] ); $end_date = new \DateTime( $date_range['to'] ); while ( $current_date <= $end_date ) { $date_key = $current_date->format( 'Y-m-d' ); $this->initialize_report_entry( $report, $unique_customers, $date_key ); $current_date->modify( '+1 day' ); } // Process orders foreach ( $orders as $order ) { $order_date = $this->get_order_date( $order ); if ( ! $order_date ) { continue; } $this->process_order( $report, $unique_customers, $order, $order_date ); } $this->calculate_averages( $report, $unique_customers ); $this->format_payment_methods_count( $report ); // Format the value strings consistently foreach ( $report as $date => $data ) { $report[$date]['orders_count'] = (string)$report[$date]['orders_count']; } return $report; } private function get_order_date( \WC_Order $order ): ?string { return $order->get_date_created() ? $order->get_date_created()->date( 'Y-m-d' ) : null; } private function initialize_report_entry( array &$report, array &$unique_customers, string $order_date ): void { if ( ! isset( $report[$order_date] ) ) { $report[$order_date] = [ 'orders_count' => null, 'num_items_sold' => null, 'gross_sales' => null, 'total_sales' => null, 'coupons' => "0", 'coupons_count' => "0", 'refunds' => null, 'taxes' => null, 'shipping' => null, 'net_revenue' => null, 'avg_items_per_order' => null, 'avg_order_value' => null, 'total_customers' => "0", 'payment_methods' => [], ]; $unique_customers[$order_date] = []; } } private function process_order( array &$report, array &$unique_customers, \WC_Order $order, string $order_date ): void { $order_totals = $this->extract_order_totals( $order ); if ( $refunds = $order->get_refunds() ) { $report[$order_date]['refunds'] = abs( $refunds[0]->get_total() ); } $report[$order_date]['orders_count'] = ($report[$order_date]['orders_count'] ?? 0) + 1; $report[$order_date]['num_items_sold'] = ($report[$order_date]['num_items_sold'] ?? 0) + $order_totals['items']; $report[$order_date]['gross_sales'] = ($report[$order_date]['gross_sales'] ?? 0) + $order_totals['gross_sales']; $report[$order_date]['total_sales'] = ($report[$order_date]['total_sales'] ?? 0) + $order_totals['total']; $report[$order_date]['coupons'] = (string)(($report[$order_date]['coupons'] !== "0" ? (float)$report[$order_date]['coupons'] : 0) + $order_totals['discounts']); $report[$order_date]['coupons_count'] = (string)(($report[$order_date]['coupons_count'] !== "0" ? (int)$report[$order_date]['coupons_count'] : 0) + count($order->get_coupon_codes())); $report[$order_date]['taxes'] = ($report[$order_date]['taxes'] ?? 0) + $order_totals['taxes']; $report[$order_date]['shipping'] = ($report[$order_date]['shipping'] ?? 0) + $order_totals['shipping']; $report[$order_date]['net_revenue'] = ($report[$order_date]['net_revenue'] ?? 0) + $order_totals['net_revenue']; $customer_id = $order->get_customer_id(); if ( ! empty( $customer_id ) ) { $unique_customers[$order_date][$customer_id] = true; } // Track payment method and increment its count $payment_method_id = $order->get_payment_method(); $payment_method = ! empty( $payment_method_id ) ? $payment_method_id : 'Unknown'; if (!isset($report[$order_date]['payment_method_counts'])) { $report[$order_date]['payment_method_counts'] = []; } if (!isset($report[$order_date]['payment_method_counts'][$payment_method])) { $report[$order_date]['payment_method_counts'][$payment_method] = 0; } $report[$order_date]['payment_method_counts'][$payment_method]++; } private function extract_order_totals( \WC_Order $order ): array { return [ 'total' => (float)$order->get_total(), 'items' => (int)$order->get_item_count(), 'taxes' => (float)$order->get_total_tax(), 'shipping' => (float)$order->get_shipping_total(), 'discounts' => (float)$order->get_total_discount(), 'gross_sales' => (float)$order->get_total() + $order->get_total_discount() - $order->get_total_tax() - $order->get_shipping_total(), 'net_revenue' => (float)$order->get_total() - $order->get_total_tax() - $order->get_shipping_total(), ]; } private function calculate_averages( array &$report, array $unique_customers ): void { foreach ( $unique_customers as $date => $customers ) { $report[$date]['total_customers'] = (string)count( $customers ); } foreach ( $report as $date => $data ) { if ( $data['orders_count'] > 0 ) { $report[$date]['avg_items_per_order'] = round( $data['num_items_sold'] / $data['orders_count'], 2 ); $report[$date]['avg_order_value'] = round( $data['total_sales'] / $data['orders_count'], 2 ); } } } private function format_payment_methods_count( array &$report ): void { foreach ( $report as $date => $data ) { if (isset($data['payment_method_counts'])) { $formatted_payment_methods = []; foreach ($data['payment_method_counts'] as $method => $count) { $formatted_payment_methods[] = [ 'payment_method' => $method, 'count' => (string)$count ]; } $report[$date]['payment_methods'] = $formatted_payment_methods; unset($report[$date]['payment_method_counts']); } else { $report[$date]['payment_methods'] = []; } } } } PK ` �Z�s��7* 7* # Woocommerce/GetWooOrdersCommand.phpnu �[��� <?php namespace Hostinger\WPCLI\Woocommerce; use WP_CLI; use WP_CLI_Command; class GetWooOrdersCommand extends WP_CLI_Command { public function __invoke( array $args, array $assoc_args ): void { if ( ! class_exists( 'WooCommerce' ) ) { WP_CLI::error( 'WooCommerce is not active. Please activate WooCommerce before running this command.' ); } $date_range = $this->get_date_range( $assoc_args ); $orders = $this->fetch_orders( $date_range ); $report = $this->generate_report( $orders, $date_range ); $response = [ 'report' => $report, ]; WP_CLI::line( wp_json_encode( $response, JSON_PRETTY_PRINT ) ); } private function get_date_range( array $assoc_args ): array { $from_date = $assoc_args['from-date'] ?? null; $days = isset($assoc_args['days']) ? (int) $assoc_args['days'] : null; if ( ! $from_date && ! $days ) { WP_CLI::error( 'You must provide either --from-date or --days parameter.' ); } if ( $days ) { $to_date = gmdate( 'Y-m-d 23:59:59', strtotime( 'yesterday' ) ); $from_date = gmdate( 'Y-m-d', strtotime( "-" . ( $days - 1 ) . " days", strtotime( 'yesterday' ) ) ); } else { $to_date = gmdate( 'Y-m-d 23:59:59', strtotime( 'yesterday' ) ); } return [ 'from' => $from_date, 'to' => $to_date ]; } private function fetch_orders( array $date_range ): array { return wc_get_orders( [ 'limit' => -1, 'orderby' => 'date', 'order' => 'ASC', 'date_query' => [ [ 'after' => $date_range['from'], 'before' => $date_range['to'], 'inclusive' => true, ], ], 'type' => 'shop_order', 'status' => ['wc-processing', 'wc-completed', 'wc-on-hold'] ] ); } private function generate_report( array $orders, array $date_range ): array { $report = []; $currencies_by_date = []; $unique_customers_by_currency = []; // Initialize report for all days in the range $current_date = new \DateTime( $date_range['from'] ); $end_date = new \DateTime( $date_range['to'] ); while ( $current_date <= $end_date ) { $date_key = $current_date->format( 'Y-m-d' ); $report[$date_key] = []; $currencies_by_date[$date_key] = []; $current_date->modify( '+1 day' ); } // First pass: collect all currencies used in orders foreach ( $orders as $order ) { $order_date = $this->get_order_date( $order ); if ( ! $order_date ) { continue; } $currency = $order->get_currency() ?? 'Unknown'; $currencies_by_date[$order_date][$currency] = true; if (!isset($unique_customers_by_currency[$order_date])) { $unique_customers_by_currency[$order_date] = []; } if (!isset($unique_customers_by_currency[$order_date][$currency])) { $unique_customers_by_currency[$order_date][$currency] = []; } } // Get all unique currencies across all dates $all_currencies = []; foreach ($currencies_by_date as $currencies) { foreach (array_keys($currencies) as $currency) { $all_currencies[$currency] = true; } } // Initialize data structure for each date with all currencies foreach ($report as $date => &$date_data) { // For dates with orders, add the currencies that had orders if (!empty($currencies_by_date[$date])) { foreach (array_keys($currencies_by_date[$date]) as $currency) { $date_data[] = $this->initialize_currency_report_entry($currency); } } // For dates with no orders, add entry with null currency else { $currency = function_exists( 'get_woocommerce_currency' ) ? get_woocommerce_currency() : null; $date_data[] = $this->initialize_currency_report_entry( $currency ); } } // Second pass: process orders and collect data by currency foreach ( $orders as $order ) { $order_date = $this->get_order_date( $order ); if ( ! $order_date ) { continue; } $currency = $order->get_currency() ?? 'Unknown'; // Find the index of this currency in the date's report array foreach ($report[$order_date] as $index => $entry) { if ($entry['currency'] === $currency) { $this->process_order_by_currency($report[$order_date][$index], $unique_customers_by_currency[$order_date][$currency], $order); break; } } } // Calculate averages and format data foreach ($report as $date => $currency_entries) { // Skip dates with no orders (null entries) if (is_array($currency_entries)) { foreach ($currency_entries as $index => $entry) { $this->calculate_currency_averages( $report[$date][$index], $unique_customers_by_currency[$date][$entry['currency']] ?? [] ); } } } return $report; } private function get_order_date( \WC_Order $order ): ?string { return $order->get_date_created() ? $order->get_date_created()->date( 'Y-m-d' ) : null; } private function initialize_currency_report_entry(string $currency = null): array { return [ 'currency' => $currency, 'orders_count' => "", 'num_items_sold' => null, 'gross_sales' => null, 'total_sales' => null, 'coupons' => "0", 'coupons_count' => "0", 'refunds' => null, 'taxes' => null, 'shipping' => null, 'net_revenue' => null, 'avg_items_per_order' => null, 'avg_order_value' => null, 'total_customers' => "0", 'discounts' => null, 'payment_methods' => [], 'payment_method_counts' => [], ]; } private function process_order_by_currency(array &$currency_report, array &$unique_customers, \WC_Order $order): void { $order_totals = $this->extract_order_totals($order); if ($refunds = $order->get_refunds()) { $currency_report['refunds'] = ($currency_report['refunds'] ?? 0) + abs($refunds[0]->get_total()); } // First order for this currency - initialize numeric values if ($currency_report['orders_count'] === "") { $currency_report['num_items_sold'] = 0; $currency_report['gross_sales'] = 0; $currency_report['total_sales'] = 0; $currency_report['taxes'] = 0; $currency_report['shipping'] = 0; $currency_report['net_revenue'] = 0; $currency_report['discounts'] = 0; } $currency_report['orders_count'] = (string)((int)($currency_report['orders_count'] ?: 0) + 1); $currency_report['num_items_sold'] += $order_totals['items']; $currency_report['gross_sales'] += $order_totals['gross_sales']; $currency_report['total_sales'] += $order_totals['total']; $currency_report['coupons'] = (string)(($currency_report['coupons'] !== "0" ? (float)$currency_report['coupons'] : 0) + $order_totals['discounts']); $currency_report['coupons_count'] = (string)(($currency_report['coupons_count'] !== "0" ? (int)$currency_report['coupons_count'] : 0) + count($order->get_coupon_codes())); $currency_report['taxes'] += $order_totals['taxes']; $currency_report['shipping'] += $order_totals['shipping']; $currency_report['net_revenue'] += $order_totals['net_revenue']; $currency_report['discounts'] += $order_totals['discounts']; $customer_id = $order->get_customer_id(); if (!empty($customer_id)) { $unique_customers[$customer_id] = true; } // Track payment method $payment_method_id = $order->get_payment_method(); $payment_method = !empty($payment_method_id) ? $payment_method_id : 'Unknown'; if (!isset($currency_report['payment_method_counts'][$payment_method])) { $currency_report['payment_method_counts'][$payment_method] = 0; } $currency_report['payment_method_counts'][$payment_method]++; } private function extract_order_totals( \WC_Order $order ): array { return [ 'total' => (float)$order->get_total(), 'items' => (int)$order->get_item_count(), 'taxes' => (float)$order->get_total_tax(), 'shipping' => (float)$order->get_shipping_total(), 'discounts' => (float)$order->get_total_discount(), 'gross_sales' => (float)$order->get_total() + $order->get_total_discount() - $order->get_total_tax() - $order->get_shipping_total(), 'net_revenue' => (float)$order->get_total() - $order->get_total_tax() - $order->get_shipping_total(), ]; } private function calculate_currency_averages(array &$currency_report, array $unique_customers): void { // Set total customers $currency_report['total_customers'] = (string)count($unique_customers); // Calculate averages if ((int)$currency_report['orders_count'] > 0) { $currency_report['avg_items_per_order'] = round($currency_report['num_items_sold'] / (int)$currency_report['orders_count'], 2); $currency_report['avg_order_value'] = round($currency_report['total_sales'] / (int)$currency_report['orders_count'], 2); } // Format payment methods if (!empty($currency_report['payment_method_counts'])) { $currency_report['payment_methods'] = []; foreach ($currency_report['payment_method_counts'] as $method => $count) { $currency_report['payment_methods'][] = [ 'payment_method' => $method, 'count' => (string)$count ]; } } unset($currency_report['payment_method_counts']); } } PK ` �Z[���+ + '