class SalesTaxReport in Ubercart 8.4
Displays sales tax report.
Hierarchy
- class \Drupal\uc_tax_report\Controller\SalesTaxReport
Expanded class hierarchy of SalesTaxReport
File
- uc_tax_report/
src/ Controller/ SalesTaxReport.php, line 11
Namespace
Drupal\uc_tax_report\ControllerView source
class SalesTaxReport {
/**
* Displays the sales tax report form and table.
*
* @return array
* Form API render array.
*/
public function report($start_date = NULL, $end_date = NULL, $statuses = NULL) {
// Use default report parameters if we don't detect values in the URL.
if ($start_date == '') {
$args = [
'start_date' => mktime(0, 0, 0, date('n'), 1, date('Y')),
'end_date' => \Drupal::time()
->getRequestTime(),
'statuses' => uc_report_order_statuses(),
];
}
else {
$args = [
'start_date' => $start_date,
'end_date' => $end_date,
'statuses' => explode(',', $statuses),
];
}
// Build the header for the report table.
$header = [
t('Tax Name'),
t('Jurisdiction'),
t('Tax rate'),
t('Total taxable amount'),
t('Total tax collected'),
];
$rows = [];
$csv_rows = [];
$csv_rows[] = $header;
// Query to get the tax line items in this date range.
$result = \Drupal::database()
->query("SELECT li.amount, li.title, li.data FROM {uc_orders} o LEFT JOIN {uc_order_line_items} li ON o.order_id = li.order_id WHERE :start <= created AND created <= :end AND order_status IN (:statuses[]) AND li.type = :type", [
':start' => $args['start_date'],
':end' => $args['end_date'],
':statuses[]' => $args['statuses'],
':type' => 'tax',
]);
// Add up the amounts by jurisdiction.
$totals = [];
$no_meta_totals = [];
foreach ($result as $item) {
$name = trim($item->title);
$amount = floatval($item->amount);
// Get the meta-data out of the serialized array.
$data = unserialize($item->data);
$jurisdiction = trim($data['tax_jurisdiction']);
$taxable_amount = floatval($data['taxable_amount']);
$rate = floatval($data['tax_rate']);
// Make a line item in the report for each name/jurisdiction/rate.
$key = strtolower($name) . strtolower($jurisdiction) . number_format($rate, 5);
if (!empty($jurisdiction) && $amount && $taxable_amount) {
// We have meta-data.
if (empty($totals[$key])) {
$totals[$key] = [
'name' => $name,
'jurisdiction' => $jurisdiction,
'rate' => $rate,
'taxable_amount' => $taxable_amount,
'amount' => $amount,
];
}
else {
$totals[$key]['taxable_amount'] += $taxable_amount;
$totals[$key]['amount'] += $amount;
}
}
elseif ($amount) {
// Old data: no meta-data was stored. Just report the amount collected.
if (empty($no_meta_totals[$key])) {
$no_meta_totals[$key] = [
'name' => $name,
'amount' => $amount,
];
}
else {
$no_meta_totals[$key]['amount'] += $amount;
}
}
}
// Sort and make this into a report.
ksort($totals);
ksort($no_meta_totals);
$taxable_amount = 0;
$amount = 0;
$star_legend = '';
foreach ($totals as $line) {
$row = [
$line['name'],
$line['jurisdiction'],
number_format($line['rate'] * 100, 3) . '%',
[
'#theme' => 'uc_price',
'#price' => $line['taxable_amount'],
],
[
'#theme' => 'uc_price',
'#price' => $line['amount'],
],
];
$rows[] = $row;
// Remove HTML for CSV files.
$row[3] = $line['taxable_amount'];
$row[4] = $line['amount'];
$csv_rows[] = $row;
$taxable_amount += $line['taxable_amount'];
$amount += $line['amount'];
}
foreach ($no_meta_totals as $line) {
$row = [
$line['name'],
'*',
'*',
'*',
[
'#theme' => 'uc_price',
'#price' => $line['amount'],
],
];
$rows[] = $row;
// Remove HTML for CSV files.
$row[4] = $line['amount'];
$csv_rows[] = $row;
$amount += $line['amount'];
// We have at least one no-meta-data line. Explain why.
$star_legend = t('* No information on jurisdiction, tax rate, or taxable amount is available for this line.');
}
// Add a totals line.
$row = [
t('Total'),
'',
'',
[
'#theme' => 'uc_price',
'#price' => $taxable_amount,
],
[
'#theme' => 'uc_price',
'#price' => $amount,
],
];
$rows[] = $row;
// Removes HTML for CSV files.
$row[3] = $taxable_amount;
$row[4] = $amount;
$csv_rows[] = $row;
// Cache the CSV export.
$controller = new Reports();
$csv_data = $controller
->store_csv('uc_tax_report', $csv_rows);
// Build the page output holding the form, table, and CSV export link.
$build['form'] = \Drupal::formBuilder()
->getForm('\\Drupal\\uc_tax_report\\Form\\ParametersForm', $args);
$build['report'] = [
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
'#attributes' => [
'width' => '100%',
'class' => [
'uc-sales-table',
],
],
];
if ($star_legend) {
$build['legend'] = [
'#prefix' => '<div class="uc-reports-note"><p>',
'#markup' => $star_legend,
'#suffix' => '</p></div>',
];
}
$build['export_csv'] = [
'#type' => 'link',
'#prefix' => '<div class="uc-reports-links">',
'#title' => t('Export to CSV file.'),
'#url' => Url::fromRoute('uc_report.getcsv', [
'report_id' => $csv_data['report'],
'user_id' => $csv_data['user'],
]),
'#suffix' => '</div>',
];
return $build;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
SalesTaxReport:: |
public | function | Displays the sales tax report form and table. |