You are here

function uc_discounts_admin_report_discounts_list in Ubercart Discounts (Alternative) 7.2

Generate admin report page content of all discount usage.

Return value

array Array of page content.

1 string reference to 'uc_discounts_admin_report_discounts_list'
uc_discounts_menu in uc_discounts/uc_discounts.module
Implements hook_menu().

File

uc_discounts/uc_discounts.admin.inc, line 1104
Admin forms and functions for uc_discounts module.

Code

function uc_discounts_admin_report_discounts_list($download = FALSE) {
  $op = arg(4) == 'download' ? 'download' : 'show';
  $header = array(
    array(
      'data' => t('Active'),
      'field' => 'd.is_active',
    ),
    array(
      'data' => t('Name'),
      'field' => 'd.name',
    ),
    array(
      'data' => t('Short Description'),
      'field' => 'd.short_description',
    ),
    array(
      'data' => t('Qualifying Type'),
      'field' => 'd.qualifying_type',
    ),
    array(
      'data' => t('Type'),
      'field' => 'd.discount_type',
    ),
    array(
      'data' => t('Uses'),
      'field' => 'use_count',
    ),
    array(
      'data' => t('Times Applied'),
      'field' => 'total_times_applied',
    ),
    array(
      'data' => t('Discounted Amount'),
      'field' => 'total_amount',
    ),
    array(
      'data' => t('Revenue Amount'),
      'field' => 'total_revenue',
    ),
    array(
      'data' => t('Weight'),
      'field' => 'd.weight',
    ),
    array(
      'data' => t('Created At'),
      'field' => 'insert_timestamp',
      'sort' => 'desc',
    ),
    array(
      'data' => t('Operations'),
    ),
  );

  // TODO Please convert this statement to the D7 database API syntax.
  $select = db_select('uc_discounts', 'd')
    ->extend('TableSort')
    ->orderByHeader($header);
  if ($op != 'download') {
    $select = $select
      ->extend('PagerDefault')
      ->limit(50);
  }
  $select
    ->fields('d')
    ->groupBy('d.discount_id');
  $select
    ->leftjoin('uc_discounts_uses', 'du', 'd.discount_id=du.discount_id');
  $select
    ->leftjoin('uc_orders', 'o', 'o.order_id=du.order_id AND o.order_status = :order_status AND o.order_total > 0', array(
    ':order_status' => 'completed',
  ));
  $select
    ->addExpression('COUNT(du.discount_use_id)', 'total_use_count');
  $select
    ->addExpression('SUM(du.times_applied)', 'total_times_applied');
  $select
    ->addExpression('SUM(du.amount)', 'total_amount');
  $select
    ->addExpression('SUM(o.order_total)', 'total_revenue');
  $result = $select
    ->execute();
  $rows = array();
  foreach ($result as $discount) {
    $total_use_count = is_numeric($discount->total_use_count) ? $discount->total_use_count : 0;
    $total_times_applied = is_numeric($discount->total_times_applied) ? $discount->total_times_applied : 0;
    $operations = array(
      l(t('usage'), 'admin/reports/uc_discounts/discount/' . $discount->discount_id),
      l(t('edit'), 'admin/store/uc_discounts/edit/' . $discount->discount_id),
      l(t('delete'), 'admin/store/uc_discounts/delete/' . $discount->discount_id),
    );
    $rows[] = array(
      array(
        'data' => $discount->is_active ? '✓' : 'X',
        'class' => array(
          $discount->is_active ? 'is_active' : 'is_inactive',
        ),
      ),
      $discount->name,
      $discount->short_description,
      uc_discounts_qualifying_type_name($discount->qualifying_type),
      uc_discounts_discount_type_name($discount->discount_type),
      array(
        'data' => $total_use_count,
        'class' => array(
          'numeric',
        ),
      ),
      array(
        'data' => $total_times_applied,
        'class' => array(
          'numeric',
        ),
      ),
      uc_currency_format($discount->total_amount),
      uc_currency_format($discount->total_revenue),
      array(
        'data' => $discount->weight,
        'class' => array(
          'weight',
        ),
      ),
      array(
        'data' => format_date($discount->insert_timestamp, 'short'),
        'class' => array(
          'date',
        ),
      ),
      array(
        'data' => implode(' ', $operations),
        'class' => array(
          'operations',
        ),
      ),
    );
  }
  if ($op == 'download') {
    $http_headers = array(
      'Pragma: no-cache',
      'Expires: 0',
      'Cache-Control: no-cache, must-revalidate',
      'Cache-Control: private',
      'Content-Transfer-Encoding: binary',
      'Content-Disposition: attachment; filename="discount_usage_report.csv"',
      'Content-Type: text/csv',
    );
    foreach ($http_headers as $http_header) {
      $http_header = preg_replace('/\\r?\\n(?!\\t| )/', '', $http_header);
      drupal_add_http_header($http_header);
    }
    $fp = fopen('php://output', 'w');
    array_unshift($rows, $header);
    foreach ($rows as $key => $row) {
      $csv_row = array();

      // Remove Operations cell.
      array_pop($row);
      foreach ($row as $cell) {
        $csv_row[] = is_array($cell) ? $cell['data'] : $cell;
      }
      if ($key > 0) {

        // Make is_active CSV friendly.
        $csv_row[0] = $csv_row[0] == 'X' ? 0 : 1;
      }
      fputcsv($fp, $csv_row);
    }
    fclose($fp);
    exit;
  }
  else {
    if (empty($rows)) {
      $rows[] = array(
        array(
          'data' => t('No discounts.'),
          'colspan' => count($header),
        ),
      );
    }
    $output['content'] = array(
      'table' => array(
        '#markup' => theme('table', array(
          'header' => $header,
          'rows' => $rows,
          'attributes' => array(
            'class' => array(
              'uc-discounts',
            ),
          ),
        )),
      ),
      'pager' => array(
        '#theme' => 'pager',
        '#weight' => 5,
      ),
      'link' => array(
        '#markup' => l(t('Export to CSV'), 'admin/reports/uc_discounts/all/download'),
      ),
    );
    return $output;
  }
}