Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
73.53% covered (warning)
73.53%
25 / 34
75.00% covered (warning)
75.00%
6 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
Taxes_Over_Time_Controller
72.73% covered (warning)
72.73%
24 / 33
75.00% covered (warning)
75.00%
6 / 8
9.30
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_column_headers
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 get_default_values
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 format_row_for_csv
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 get_additional_params
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 get_fields
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * REST API Reports Taxes 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 * Taxes Over Time CSV Export Controller.
18 *
19 * Handles CSV exports for the Taxes Over Time report, supporting both
20 * single interval and comparison interval data.
21 *
22 * @since $$next-version$$
23 */
24class Taxes_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 'taxesovertime';
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 __( 'Taxes Over Time', 'jetpack-premium-analytics' );
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/taxes/by-date';
51    }
52
53    /**
54     * Get the column headers for this controller.
55     *
56     * @param string|null $interval Optional time interval for dynamic headers.
57     * @return array The column headers.
58     */
59    public function get_column_headers( ?string $interval = null ): array {
60        return array(
61            'time_interval' => $this->get_interval_label( $interval ),
62            'orders_count'  => __( 'Orders', 'jetpack-premium-analytics' ),
63            'order_tax'     => __( 'Order tax', 'jetpack-premium-analytics' ),
64            'shipping_tax'  => __( 'Shipping tax', 'jetpack-premium-analytics' ),
65            'total_tax'     => __( 'Total tax', 'jetpack-premium-analytics' ),
66        );
67    }
68
69    /**
70     * Get default values for missing data fields.
71     *
72     * @return array Array of field_name => default_value pairs.
73     */
74    public function get_default_values(): array {
75        return array(
76            'orders_count' => 0,
77            'order_tax'    => 0,
78            'shipping_tax' => 0,
79            'total_tax'    => 0,
80        );
81    }
82
83    /**
84     * Format a row for CSV export.
85     *
86     * @param array       $item     The row data.
87     * @param string|null $interval Optional time interval for formatting.
88     * @return array The formatted row.
89     */
90    public function format_row_for_csv( array $item, ?string $interval = null ): array {
91        $defaults = $this->get_default_values();
92        return array(
93            'time_interval' => $this->format_time_interval( $item, $interval ),
94            'orders_count'  => $item['orders_count'] ?? $defaults['orders_count'],
95            'order_tax'     => self::format_amount( $item['order_tax'] ?? $defaults['order_tax'] ),
96            'shipping_tax'  => self::format_amount( $item['shipping_tax'] ?? $defaults['shipping_tax'] ),
97            'total_tax'     => self::format_amount( $item['total_tax'] ?? $defaults['total_tax'] ),
98        );
99    }
100
101    /**
102     * Get additional request parameters for data fetching.
103     *
104     * @return array Additional parameters to include in data requests.
105     */
106    public function get_additional_params(): array {
107        return array(
108            'date_type' => self::DEFAULT_DATE_TYPE,
109        );
110    }
111
112    /**
113     * Get the list of API fields needed for this report.
114     *
115     * @return array
116     */
117    public function get_fields(): array {
118        // time_interval, date_start, and date_end are always returned by the
119        // API for time-series endpoints and do not need to be requested.
120        return array(
121            'orders_count',
122            'order_tax',
123            'shipping_tax',
124            'total_tax',
125        );
126    }
127}