Пример #1
0
 public function getrecurring_next_formatted()
 {
     return $this->recurring_next ? HelperFormatted::date($this->recurring_next, HelperFormatted::TIME_FORMAT_DATE) : '';
 }
Пример #2
0
 public function getForGraph()
 {
     $searchFields = $this->searchFields;
     if (!$searchFields['initial_dates']) {
         return array();
     }
     $billingCycle = (int) $searchFields['billing_cycle'];
     if ($billingCycle < 1 || $billingCycle > 2) {
         $billingCycle = 1;
     }
     $initialDates = explode('-', $searchFields['initial_dates']);
     $dateStartT = explode('.', $initialDates[0]);
     $dateStart = array_reverse($dateStartT);
     $dateStart = implode('-', $dateStart);
     $dateFinishT = explode('.', $initialDates[1]);
     $dateFinish = array_reverse($dateFinishT);
     $dateFinish = implode('-', $dateFinish);
     $datetime1 = new DateTime($dateStart);
     $datetime2 = new DateTime($dateFinish);
     $interval = $datetime1->diff($datetime2);
     $int = $interval->days;
     $dates = array();
     if ($int < 10) {
         for ($i = 0; $i <= $int; $i++) {
             $dates[] = $datetime1->format('Y-m-d');
             $datetime1->add(new DateInterval('P1D'));
         }
     } else {
         $maxSelect = 10;
         $max = ceil($int / $maxSelect);
         $min = floor($interval->days / 10);
         $dif = $min == $max ? 1 : $min - $max;
         $x = ($int - $max * $maxSelect) / $dif;
         $y = ($int - $min * $x) / $max;
         while ($datetime1->getTimestamp() <= $datetime2->getTimestamp()) {
             $dates[] = $datetime1->format('Y-m-d');
             if ($x) {
                 $step = $min;
                 $x--;
             } elseif ($y) {
                 $step = $max;
                 $y--;
             }
             $datetime1->add(new DateInterval('P' . $step . 'D'));
         }
     }
     $db = self::$_msql;
     $this->whereAndLimit();
     $tempReport = array();
     $campaignsName = array();
     foreach ($dates as $date) {
         $sql = "SELECT `campaign_id`, 'ALL' AS `aff_id`, `col_name`, SUM(`data`) AS `data`, `campaign_name`\n                FROM (\n                    SELECT `date`, `campaign_id`, `aff_id`, `col_name`, `data`, `campaign_name`\n                    FROM (\n                        SELECT rh.*, c.`campaign_name`\n                        FROM `retention_history` as rh\n                        LEFT JOIN `campaigns` as c USING(`campaign_id`)\n                        WHERE ?p\n                        AND rh.`id_date` <= ?s\n                        AND rh.`col_name` IN ('c{$billingCycle}_net_revenue', 'c{$billingCycle}_potential_revenue')\n                        ORDER BY rh.`id_date` DESC\n                    ) `t`\n                    GROUP BY `date`, `campaign_id`, `aff_id`, `col_name`\n                ) `t2`\n                GROUP BY `campaign_id`, `col_name`\n                ORDER BY `campaign_id`";
         $r = $db->getAll($sql, $this->where, $date);
         $tArrayByCampaign = array();
         foreach ($r as $item) {
             if (!isset($campaignsName[$item['campaign_id']])) {
                 $campaignsName[$item['campaign_id']] = $item['campaign_name'];
             }
             if (!isset($tArrayByCampaign[$item['campaign_id']])) {
                 $tArrayByCampaign[$item['campaign_id']] = array();
             }
             $colNameArray = explode('_', $item['col_name'], 2);
             $tArrayByCampaign[$item['campaign_id']][$colNameArray[1]] = $item['data'];
         }
         foreach ($tArrayByCampaign as $k => $v) {
             if (!isset($tempReport[$k])) {
                 $tempReport[$k] = array();
             }
             $tempReport[$k][$date] = isset($v['potential_revenue']) && $v['potential_revenue'] && isset($v['net_revenue']) ? round($v['net_revenue'] / $v['potential_revenue'], 4) * 100 : null;
         }
         unset($tArrayByCampaign, $k, $v, $date, $colNameArray, $item, $r);
     }
     if (!$tempReport) {
         return array();
     }
     $campaigns = array_keys($campaignsName);
     $report = array(0 => array('Dates'));
     foreach ($campaignsName as $k => $v) {
         $tName = '[' . $k . '] ';
         $tName .= $v ? $v : __('no_name');
         array_push($report[0], $tName);
     }
     $i = 1;
     foreach ($dates as $date) {
         $dateFormatted = HelperFormatted::date($date, HelperFormatted::TIME_FORMAT_DATE);
         $report[$i] = array($dateFormatted);
         foreach ($campaigns as $campaignID) {
             array_push($report[$i], isset($tempReport[$campaignID][$date]) ? $tempReport[$campaignID][$date] : 0);
         }
         $i++;
     }
     return $report;
 }
Пример #3
0
 public function getcreated_formatted()
 {
     return $this->created ? HelperFormatted::date($this->created) : null;
 }
Пример #4
0
 public function getcreated_formatted()
 {
     return HelperFormatted::date($this->created);
 }
Пример #5
0
 private static function clearDateArray($FilterFields, $dataArray)
 {
     foreach ($FilterFields as $k => $v) {
         if (!in_array($k, $dataArray)) {
             continue;
         }
         $dArray = explode('-', $v);
         if (isset($dArray[0]) && isset($dArray[1])) {
             $d1 = HelperFormatted::date($dArray[0], HelperFormatted::TIME_FORMAT_DATE);
             $d2 = HelperFormatted::date($dArray[1], HelperFormatted::TIME_FORMAT_DATE);
             if ($d1 && $d2) {
                 $FilterFields[$k . '_post'] = $FilterFields[$k];
                 $FilterFields[$k] = $d1 . '-' . $d2;
             }
         }
     }
     return $FilterFields;
 }
Пример #6
0
 function newretentionAction()
 {
     $clearArray = array('campaign_id', 'detail_dates', 'detail_affiliates', 'detail_sid', 'simple', 'currency_id', 'country_id');
     $this->filter($clearArray);
     $filterFields = $this->params;
     //AFActiveDataProvider::clearDateArray($this->params, array('r_dates'));
     if (!isset($filterFields['circle']) || isset($filterFields['circle']) && !$filterFields['circle']) {
         $filterFields['circle'] = 0;
     }
     if ($clearArray) {
         foreach ($clearArray as $value) {
             if (isset($filterFields[$value])) {
                 $filterFields[$value] = explode(',', $filterFields[$value]);
             }
         }
     }
     // build filter select datasources
     $currencies = Currency::model()->cache()->findAllInArray();
     $countries = Country::model()->cache()->findAllInArray();
     $campaigns = isset($filterFields['campaign_id']) ? $filterFields['campaign_id'] : null;
     $country_id = isset($filterFields['country_id']) ? $filterFields['country_id'] : null;
     $currency_id = isset($filterFields['currency_id']) ? $filterFields['currency_id'] : null;
     $groupDate = isset($filterFields['detail_dates']) ? false : true;
     $groupAfid = isset($filterFields['detail_affiliates']) ? false : true;
     $groupSid = isset($filterFields['detail_sid']) ? false : true;
     $msql = SafeMySQL::getInstance();
     $sql = 'SELECT campaign_id, campaign_name
         FROM `campaigns`
         ORDER BY `campaign_id`';
     $campaignsFilterTemp = $msql->getAll($sql);
     $campaignsFilter = array();
     foreach ($campaignsFilterTemp as $v) {
         $campaignsFilter[$v['campaign_id']] = $v;
     }
     unset($campaignsFilterTemp);
     $sql = 'SELECT aff_id, aff_name
         FROM `affiliates`
         ORDER BY `aff_id`';
     $affidsTemp = $msql->getAll($sql);
     $affids = array();
     foreach ($affidsTemp as $v) {
         $affids[$v['aff_id']] = $v;
     }
     unset($affidsTemp);
     $where = '';
     if ($campaigns) {
         $where .= $msql->parse(" AND `campaign_id` IN (?a)", $campaigns);
     }
     if ($currency_id) {
         $where .= $msql->parse(" AND `campaign_id` IN ( select campaign_id from campaigns where currency_id in (?a))", $currency_id);
     }
     if ($country_id) {
         $where .= $msql->parse(" AND `campaign_id` IN ( select campaign_id from campaigns where country_id in (?a))", $country_id);
     }
     if (!isset($filterFields['r_dates'])) {
         $filterFields['r_dates'] = date('d.m.Y-d.m.Y');
     }
     $dates = explode('-', $filterFields['r_dates']);
     if (isset($dates[0]) && isset($dates[1])) {
         $dateStartT = explode('.', $dates[0]);
         $dateStart = array_reverse($dateStartT);
         $dateStart = implode('-', $dateStart);
         $dateFinishT = explode('.', $dates[1]);
         $dateFinish = array_reverse($dateFinishT);
         $dateFinish = implode('-', $dateFinish);
         $where .= $msql->parse(" AND DATE(`date`) BETWEEN ?s AND ?s", $dateStart, $dateFinish);
         unset($dateStartT, $dateFinishT);
     }
     if (!isset($filterFields['report_date'])) {
         $filterFields['report_date'] = date('d.m.Y');
     }
     $reportDateArray = explode('.', $filterFields['report_date']);
     if (isset($reportDateArray[0]) && isset($reportDateArray[1]) && isset($reportDateArray[2])) {
         $reportDate = array_reverse($reportDateArray);
         $reportDate = implode('-', $reportDate);
         $where .= $msql->parse("AND `id_date` <= ?s", $reportDate);
         unset($reportDate, $reportDateArray);
     }
     $where .= $msql->parse("AND CAST(SUBSTR(`col_name`,2,1) AS UNSIGNED) <= ?i", (int) $filterFields['circle']);
     $sql = "\n        SELECT " . ($groupDate ? "'ALL' AS " : '') . "`date`, `campaign_id`, " . ($groupAfid ? "'ALL' AS " : '') . "`aff_id`, " . ($groupSid ? "'ALL' AS " : '') . "`sid`, `col_name`, SUM(`data`) AS `data`, `currency_id`\n        FROM (\n            SELECT `date`, `campaign_id`, `aff_id`, `sid`, `col_name`, `data`, `currency_id`\n            FROM (\n                SELECT `retention_history`.*, `campaigns`.`currency_id`\n                FROM `retention_history`\n                LEFT JOIN `campaigns` USING(`campaign_id`)\n                WHERE 1 " . $where . "\n                ORDER BY `id_date` DESC\n            ) `t`\n            GROUP BY `date`, `campaign_id`, `aff_id`, `col_name`\n            ) `t2`\n        GROUP BY " . ($groupDate ? '' : "`date`, ") . "`campaign_id`, " . ($groupAfid ? '' : "`aff_id`, ") . "`col_name`\n        ";
     $result = $msql->getAll($sql);
     $report = array();
     $reportCur = array();
     $countR = 0;
     foreach ($result as $row) {
         if (isset($row['col_name'])) {
             $colNameArr = explode('_', $row['col_name']);
             if (isset($colNameArr[0])) {
                 $countCycles = (int) substr($colNameArr[0], 1, 1);
                 if ($countCycles > $countR) {
                     $countR = $countCycles;
                 }
             }
         }
         if (!isset($report[$row['date'] . '_' . $row['campaign_id'] . '_' . $row['aff_id']]['c' . ($row['col_name'][1] + 1) . '_gross'])) {
             if (!isset($report[$row['date'] . '_' . $row['campaign_id'] . '_' . $row['aff_id']])) {
                 $report[$row['date'] . '_' . $row['campaign_id'] . '_' . $row['aff_id']] = array();
             }
             $report[$row['date'] . '_' . $row['campaign_id'] . '_' . $row['aff_id']] += self::cycle_array($row['col_name'][1]);
         }
         $report[$row['date'] . '_' . $row['campaign_id'] . '_' . $row['aff_id']][$row['col_name']] = $row['data'];
         if (!isset($reportCur[$row['date'] . '_' . $row['campaign_id'] . '_' . $row['aff_id']])) {
             $reportCur[$row['date'] . '_' . $row['campaign_id'] . '_' . $row['aff_id']] = $row['currency_id'];
         }
     }
     $countR++;
     unset($result);
     foreach ($report as $row => $data) {
         for ($i = 0; isset($data['c' . ($i + 1) . '_gross']); $i++) {
             $report[$row]['c' . $i . '_gross'] = (int) $report[$row]['c' . $i . '_gross'];
             $report[$row]['c' . $i . '_declined'] = (int) $report[$row]['c' . $i . '_declined'];
             $report[$row]['c' . $i . '_void'] = (int) $report[$row]['c' . $i . '_void'];
             $report[$row]['c' . $i . '_pending'] = (int) $report[$row]['c' . $i . '_pending'];
             $report[$row]['c' . $i . '_rma'] = (int) $report[$row]['c' . $i . '_rma'];
             $report[$row]['c' . $i . '_partial_refund'] = (int) $report[$row]['c' . $i . '_partial_refund'];
             $report[$row]['c' . $i . '_chargeback'] = (int) $report[$row]['c' . $i . '_chargeback'];
             if ($i) {
                 $report[$row]['c' . $i . '_discounts'] = (int) $report[$row]['c' . $i . '_discounts'];
             }
             $report[$row]['c' . $i . '_decline_rate'] = $report[$row]['c' . $i . '_gross'] ? round($report[$row]['c' . $i . '_declined'] / $report[$row]['c' . $i . '_gross'], 4) : NULL;
             $report[$row]['c' . $i . '_paid'] = $report[$row]['c' . $i . '_gross'] - $report[$row]['c' . $i . '_declined'];
             $report[$row]['c' . $i . '_void_rate'] = $report[$row]['c' . $i . '_paid'] ? round($report[$row]['c' . $i . '_void'] / $report[$row]['c' . $i . '_paid'], 4) : NULL;
             $report[$row]['c' . $i . '_net_approved'] = $report[$row]['c' . $i . '_paid'] - $report[$row]['c' . $i . '_void'];
             $report[$row]['c' . $i . '_approval_rate'] = $report[$row]['c' . $i . '_paid'] ? round($report[$row]['c' . $i . '_net_approved'] / $report[$row]['c' . $i . '_paid'], 4) : NULL;
             $report[$row]['c' . $i . '_cancelled'] = $report[$row]['c' . $i . '_paid'] - $report[$row]['c' . $i . '_pending'] - $report[$row]['c' . ($i + 1) . '_gross'];
             $report[$row]['c' . $i . '_cancel_rate'] = $report[$row]['c' . $i . '_paid'] ? round($report[$row]['c' . $i . '_cancelled'] / $report[$row]['c' . $i . '_paid'], 4) : NULL;
             $report[$row]['c' . $i . '_subscriptions_approved'] = $report[$row]['c' . $i . '_paid'] - $report[$row]['c' . $i . '_cancelled'];
             $report[$row]['c' . $i . '_rma_rate'] = $report[$row]['c' . $i . '_paid'] ? round($report[$row]['c' . $i . '_rma'] / $report[$row]['c' . $i . '_paid'], 4) : NULL;
             //		$report[$row]['c'.$i.'_pending_rebill'] = $report[$row]['c'.$i.'_pending'] - $report[$row]['c'.$i.'_rma'];
             $report[$row]['c' . $i . '_chargeback_rate'] = $report[$row]['c' . $i . '_paid'] ? round($report[$row]['c' . $i . '_chargeback'] / $report[$row]['c' . $i . '_paid'], 4) : NULL;
             if ($i) {
                 $report[$row]['c' . $i . '_retention_count_rate'] = $report[$row]['c' . ($i - 1) . '_paid'] ? round($report[$row]['c' . $i . '_paid'] / $report[$row]['c' . ($i - 1) . '_paid'], 4) : NULL;
                 $report[$row]['c' . $i . '_retention_rate'] = $report[$row]['c' . $i . '_potential_revenue'] ? round($report[$row]['c' . $i . '_net_revenue'] / $report[$row]['c' . $i . '_potential_revenue'], 4) : NULL;
             }
         }
         if (isset($report[$row]['c' . $countR . '_gross']) && !$report[$row]['c' . $countR . '_gross']) {
             unset($report[$row]['c' . $countR . '_gross']);
         }
     }
     $extraFields = array(array('gross', 'declined', 'decline_rate', 'paid', 'void', 'void_rate', 'net_approved', 'approval_rate', 'cancelled', 'cancel_rate', 'subscriptions_approved', 'pending', 'rma', 'rma_rate', 'partial_refund', 'refund_amount', 'chargeback', 'chargeback_rate', 'chargeback_loss', 'net_revenue'), array('gross2', 'declined', 'decline_rate', 'paid', 'void', 'void_rate', 'net_approved', 'approval_rate', 'cancelled', 'cancel_rate', 'subscriptions_approved', 'pending', 'rma', 'rma_rate', 'discounts', 'discount_amount', 'partial_refund', 'refund_amount', 'chargeback', 'chargeback_rate', 'chargeback_loss', 'retention_count_rate', 'net_revenue', 'potential_revenue', 'retention_rate'));
     $simpleReportFields = array('gross', 'gross2', 'decline_rate', 'cancel_rate', 'chargeback_rate', 'pending', 'net_revenue', 'potential_revenue', 'retention_rate');
     // CSV builder
     if (isset($this->params['download_csv']) && $this->params['download_csv']) {
         self::retentionCsvBuilder($report, $extraFields, $campaignsFilter, $affids, $countR, $simpleReportFields, $filterFields);
         die;
     }
     $tempArray = explode('-', $filterFields['r_dates']);
     $filterFields['r_dates_post'] = $filterFields['r_dates'];
     $filterFields['r_dates'] = HelperFormatted::date($tempArray[0], HelperFormatted::TIME_FORMAT_DATE) . '-' . HelperFormatted::date($tempArray[1], HelperFormatted::TIME_FORMAT_DATE);
     $filterFields['report_date'] = HelperFormatted::date($filterFields['report_date'], HelperFormatted::TIME_FORMAT_DATE);
     // set ajax table
     if (AF::isAjaxRequestModels()) {
         $this->view->includeFile('_newretantion_table', array('application', 'views', 'reports'), array('access' => $this->access, 'controller' => $this->controller, 'report' => $report, 'extraFields' => $extraFields, 'countR' => $countR, 'campaignsFilter' => $campaignsFilter, 'filterFields' => $filterFields, 'affids' => $affids, 'simpleReportFields' => $simpleReportFields, 'simple' => isset($this->params['simple']) ? (int) $this->params['simple'] : 0, 'currencies' => $currencies, 'countries' => $countries, 'reportCur' => $reportCur));
         die;
     }
     Assets::css('jquery-ui');
     Assets::js('//code.jquery.com/ui/1.10.3/jquery-ui.js');
     Assets::js('dateRange/jquery.daterange');
     Assets::js('jquery.form');
     // for ajax submission used to build csv
     Assets::js('ajax_table');
     Assets::js('af_input_field');
     $this->render('newretention', array('report' => $report, 'extraFields' => $extraFields, 'countR' => $countR, 'campaignsFilter' => $campaignsFilter, 'filterFields' => $filterFields, 'affids' => $affids, 'simpleReportFields' => $simpleReportFields, 'simple' => isset($this->params['simple']) ? (int) $this->params['simple'] : 0, 'currencies' => $currencies, 'countries' => $countries, 'reportCur' => $reportCur));
 }
Пример #7
0
 public function getupdated_formatted_date()
 {
     return $this->updated ? HelperFormatted::date($this->updated, HelperFormatted::TIME_FORMAT_DATE) : null;
 }