Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
57.14% covered (warning)
57.14%
16 / 28
75.00% covered (warning)
75.00%
6 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
Orders_Fulfilled_Over_Time_Controller
55.56% covered (warning)
55.56%
15 / 27
75.00% covered (warning)
75.00%
6 / 8
13.62
0.00% covered (danger)
0.00%
0 / 1
 get_report_key
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 get_report_label
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 get_data_endpoint
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 get_additional_params
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 get_fields
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 get_column_headers
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 get_default_values
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 format_row_for_csv
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3 * REST API Reports Orders Fulfilled Over Time controller class.
4 *
5 * @package Automattic\Jetpack\PremiumAnalytics\Reports\Export\Exports
6 */
7
8declare( strict_types=1 );
9
10namespace Automattic\Jetpack\PremiumAnalytics\Reports\Export\Exports;
11
12defined( 'ABSPATH' ) || exit;
13
14use Automattic\Jetpack\PremiumAnalytics\Reports\Export\Abstract_Csv_Report_Controller;
15
16/**
17 * Orders Fulfilled Over Time CSV Export Controller.
18 *
19 * Handles CSV exports for the Orders Fulfilled Over Time report, supporting both
20 * single interval and comparison interval data. Filters orders by fulfillment status.
21 *
22 * @since 0.1.0
23 */
24class Orders_Fulfilled_Over_Time_Controller extends Abstract_Csv_Report_Controller {
25
26    /**
27     * Get the report key for this controller.
28     *
29     * @return string The report key.
30     */
31    public function get_report_key(): string {
32        return 'ordersfulfilledovertime';
33    }
34
35    /**
36     * Get the report label for this controller.
37     *
38     * @return string The report label.
39     */
40    public function get_report_label(): string {
41        return __( 'Orders Fulfilled Over Time', 'jetpack-premium-analytics-pkg' );
42    }
43
44    /**
45     * Get the data endpoint for this controller.
46     *
47     * @return string The data endpoint.
48     */
49    public function get_data_endpoint(): string {
50        return 'reports/orders/by-date';
51    }
52
53    /**
54     * Get additional request parameters for data fetching.
55     *
56     * Adds filters to only include fulfilled orders.
57     *
58     * @return array Additional parameters to include in data requests.
59     */
60    public function get_additional_params(): array {
61        return array(
62            'filters' => array(
63                array(
64                    'key'     => 'fulfillment_status',
65                    'compare' => '=',
66                    'value'   => 'fulfilled',
67                ),
68            ),
69        );
70    }
71
72    /**
73     * Get the list of API fields needed for this report.
74     *
75     * @return array
76     */
77    public function get_fields(): array {
78        // time_interval, date_start, and date_end are always returned by the
79        // API for time-series endpoints and do not need to be requested.
80        return array(
81            'orders_no',
82        );
83    }
84
85    /**
86     * Get the column headers for this controller.
87     *
88     * @param string|null $interval Optional time interval for dynamic headers.
89     * @return array The column headers.
90     */
91    public function get_column_headers( ?string $interval = null ): array {
92        return array(
93            'time_interval' => $this->get_interval_label( $interval ),
94            'orders_no'     => __( 'Fulfilled Orders', 'jetpack-premium-analytics-pkg' ),
95        );
96    }
97
98    /**
99     * Get default values for missing data fields.
100     *
101     * @return array Array of field_name => default_value pairs.
102     */
103    public function get_default_values(): array {
104        return array(
105            'orders_no' => 0,
106        );
107    }
108
109    /**
110     * Format a row for CSV export.
111     *
112     * @param array       $item     The row data.
113     * @param string|null $interval Optional time interval for formatting.
114     * @return array The formatted row.
115     */
116    public function format_row_for_csv( array $item, ?string $interval = null ): array {
117        $defaults = $this->get_default_values();
118        return array(
119            'time_interval' => $this->format_time_interval( $item, $interval ),
120            'orders_no'     => $item['orders_no'] ?? $defaults['orders_no'],
121        );
122    }
123}