[FEATURE] timeframed earning stats

This commit is contained in:
iAmShorty 2014-03-03 15:43:23 +01:00
parent d470daea45
commit 84b62aedbd
5 changed files with 235 additions and 53 deletions

BIN
public/earnings.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -100,44 +100,28 @@ class Transaction extends Base {
return $this->sqlError();
}
/**
* Fetch a transaction summary by user with total amounts
* @param account_id int Account ID, NULL for all
* @return data array type and total
**/
public function getTransactionSummarybyTime($account_id=NULL) {
if ($data = $this->memcache->get(__FUNCTION__ . $account_id)) return $data;
$sql = "
SELECT
SUM(t.amount) AS total,
t.type AS type
public function getTransactionTypebyTime($account_id=NULL, $type=NULL) {
$this->debug->append("STA " . __METHOD__, 4);
if ($data = $this->memcache->get(__FUNCTION__)) return $data;
$stmt = $this->mysqli->prepare("
SELECT
IFNULL(SUM(IF(t.type = '" . $type ."' AND timestamp >= DATE_SUB(now(), INTERVAL 3600 SECOND), t.amount, 0)), 0) AS HourlyTrans,
IFNULL(SUM(IF(t.type = '" . $type ."' AND timestamp >= DATE_SUB(now(), INTERVAL 3600 * 24 SECOND), t.amount, 0)), 0) AS DailyTrans,
IFNULL(SUM(IF(t.type = '" . $type ."' AND timestamp >= DATE_SUB(now(), INTERVAL 3600 * 24 * 7 SECOND), t.amount, 0)), 0) AS WeeklyTrans,
IFNULL(SUM(IF(t.type = '" . $type ."' AND timestamp >= DATE_SUB(now(), INTERVAL 3600 * 24 * 30 SECOND), t.amount, 0)), 0) AS MonthlyTrans,
IFNULL(SUM(IF(t.type = '" . $type ."' AND timestamp >= DATE_SUB(now(), INTERVAL 3600 * 24 * 30 * 12 SECOND), t.amount, 0)), 0) AS YearlyTrans
FROM transactions AS t
LEFT OUTER JOIN blocks AS b
ON b.id = t.block_id
WHERE ( b.confirmations > 0 OR b.id IS NULL )";
if (!empty($account_id)) {
$sql .= " AND t.account_id = ? ";
$this->addParam('i', $account_id);
}
$sql .= " GROUP BY t.type";
$stmt = $this->mysqli->prepare($sql);
if (!empty($account_id)) {
if (!($this->checkStmt($stmt) && call_user_func_array( array($stmt, 'bind_param'), $this->getParam()) && $stmt->execute()))
return false;
$result = $stmt->get_result();
} else {
if (!($this->checkStmt($stmt) && $stmt->execute()))
return false;
$result = $stmt->get_result();
}
if ($result) {
$aData = NULL;
while ($row = $result->fetch_assoc()) {
$aData[$row['type']] = $row['total'];
}
// Cache data for a while, query takes long on many rows
return $this->memcache->setCache(__FUNCTION__ . $account_id, $aData, 60);
}
LEFT OUTER JOIN blocks AS b ON b.id = t.block_id
WHERE
t.account_id = ? AND (b.confirmations > 120 OR b.id IS NULL)");
if ($this->checkStmt($stmt) && $stmt->bind_param("i", $account_id) && $stmt->execute() && $result = $stmt->get_result())
return $this->memcache->setCache(__FUNCTION__, $result->fetch_assoc());
return $this->sqlError();
}

View File

@ -11,8 +11,22 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$iLimit = 30;
$debug->append('No cached version available, fetching from backend', 3);
if (!$setting->getValue('disable_transactionsummary')) {
$aTransactionSummary = $transaction->getTransactionSummarybyTime($_SESSION['USERDATA']['id']);
$aTransactionSummary = $transaction->getTransactionSummary($_SESSION['USERDATA']['id']);
$aCredit = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id'], 'CREDIT');
$aDebitAP = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id'], 'DEBIT_AP');
$aDebitMP = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id'], 'DEBIT_MP');
$aTXFee = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id'], 'TXFee');
$aFee = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id'], 'Fee');
$aDonation = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id'], 'Donation');
$smarty->assign('SUMMARY', $aTransactionSummary);
$smarty->assign('CREDIT', $aCredit);
$smarty->assign('DEBITAP', $aDebitAP);
$smarty->assign('DEBITMP', $aDebitMP);
$smarty->assign('TXFEE', $aTXFee);
$smarty->assign('FEE', $aFee);
$smarty->assign('DONATION', $aDonation);
}
} else {
$debug->append('Using cached page', 3);

139
public/templates/bootstrap/account/earnings/default.tpl Executable file → Normal file
View File

@ -3,29 +3,128 @@
<div class="col-lg-12">
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-money fa-fw"></i> Total Earning Stats
<i class="fa fa-money fa-fw"></i> Total {$GLOBAL.config.currency} Earning Reports
</div>
<div class="panel-body no-padding">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
{foreach $SUMMARY as $type=>$total}
<th>{$type}</th>
{/foreach}
</tr>
</thead>
<tbody>
<tr>
{foreach $SUMMARY as $type=>$total}
<td class="right">{$total|number_format:"8"}</td>
{/foreach}
</tr>
</tbody>
</table>
<div class="panel-body">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-credit-card fa-fw"></i> All Time
</div>
<div class="panel-body">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
{foreach $SUMMARY as $type=>$total}
<th>{$type}</th>
{/foreach}
</tr>
</thead>
<tbody>
<tr>
{foreach $SUMMARY as $type=>$total}
<td class="right">{$total|number_format:"8"}</td>
{/foreach}
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-clock-o fa-fw"></i> Sorted by Time
</div>
<div class="panel-body">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th></th>
<th>Credit</th>
<th>Debit AP</th>
<th>Debit MP</th>
<th>TXFee</th>
{if $GLOBAL.fees > 0}
<th>Fee</th>
{/if}
<th>Donation</th>
</tr>
</thead>
<tbody>
<tr>
<td>Last Hour</th>
<td>{$CREDIT.HourlyTrans|number_format:"8"}</td>
<td>{$DEBITAP.HourlyTrans|number_format:"8"}</td>
<td>{$DEBITMP.HourlyTrans|number_format:"8"}</td>
<td>{$TXFEE.HourlyTrans|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE.HourlyTrans|number_format:"8"}</td>
{/if}
<td>{$DONATION.HourlyTrans|number_format:"8"}</td>
</tr>
<tr>
<td>Last Day</th>
<td>{$CREDIT.DailyTrans|number_format:"8"}</td>
<td>{$DEBITAP.DailyTrans|number_format:"8"}</td>
<td>{$DEBITMP.DailyTrans|number_format:"8"}</td>
<td>{$TXFEE.DailyTrans|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE.DailyTrans|number_format:"8"}</td>
{/if}
<td>{$DONATION.DailyTrans|number_format:"8"}</td>
</tr>
<tr>
<td>Last Week</th>
<td>{$CREDIT.WeeklyTrans|number_format:"8"}</td>
<td>{$DEBITAP.WeeklyTrans|number_format:"8"}</td>
<td>{$DEBITMP.WeeklyTrans|number_format:"8"}</td>
<td>{$TXFEE.WeeklyTrans|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE.WeeklyTrans|number_format:"8"}</td>
{/if}
<td>{$DONATION.WeeklyTrans|number_format:"8"}</td>
</tr>
<tr>
<td>Last Month</th>
<td>{$CREDIT.MonthlyTrans|number_format:"8"}</td>
<td>{$DEBITAP.MonthlyTrans|number_format:"8"}</td>
<td>{$DEBITMP.MonthlyTrans|number_format:"8"}</td>
<td>{$TXFEE.MonthlyTrans|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE.MonthlyTrans|number_format:"8"}</td>
{/if}
<td>{$DONATION.MonthlyTrans|number_format:"8"}</td>
</tr>
<tr>
<td>Last Year</th>
<td>{$CREDIT.YearlyTrans|number_format:"8"}</td>
<td>{$DEBITAP.YearlyTrans|number_format:"8"}</td>
<td>{$DEBITMP.YearlyTrans|number_format:"8"}</td>
<td>{$TXFEE.YearlyTrans|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE.YearlyTrans|number_format:"8"}</td>
{/if}
<td>{$DONATION.YearlyTrans|number_format:"8"}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{/if}
{/if}

View File

@ -0,0 +1,85 @@
{if $DISABLE_TRANSACTIONSUMMARY|default:"0" != 1}
<div class="row">
<div class="col-lg-12">
<div class="panel panel-info">
<div class="panel-heading">
<i class="fa fa-money fa-fw"></i> Total Earning Stats
</div>
<div class="panel-body">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th></th>
{foreach $SUMMARY as $type=>$total}
<th>{$type}</th>
{/foreach}
</tr>
</thead>
<tbody>
<tr>
<td>All Time</td>
{foreach $SUMMARY as $type=>$total}
<td class="right">{$total|number_format:"8"}</td>
{/foreach}
</tr>
<td>1 Hour</td>
<td>{$DEBITAP_HOUR|number_format:"8" + $DEBITMP_HOUR|number_format:"8"}</td>
<td>{$DEBITAP_HOUR|number_format:"8"}</td>
<td>{$DEBITMP_HOUR|number_format:"8"}</td>
<td>{$TXFEE_HOUR|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE_HOUR|number_format:"8"}</td>
{/if}
<td>{$DONATION_HOUR|number_format:"8"}</td>
</tr>
<tr>
<td>1 Day</td>
<td>{$DEBITAP_DAY|number_format:"8" + $DEBITMP_DAY|number_format:"8"}</td>
<td>{$DEBITAP_DAY|number_format:"8"}</td>
<td>{$DEBITMP_DAY|number_format:"8"}</td>
<td>{$TXFEE_DAY|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE_DAY|number_format:"8"}</td>
{/if}
<td>{$DONATION_DAY|number_format:"8"}</td>
</tr>
<tr>
<td>1 Week</td>
<td>{$DEBITAP_WEEK|number_format:"8" + $DEBITMP_WEEK|number_format:"8"}</td>
<td>{$DEBITAP_WEEK|number_format:"8"}</td>
<td>{$DEBITMP_WEEK|number_format:"8"}</td>
<td>{$TXFEE_WEEK|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE_WEEK|number_format:"8"}</td>
{/if}
<td>{$DONATION_WEEK|number_format:"8"}</td>
</tr>
<tr>
<td>1 Month</td>
<td>{$DEBITAP_MONTH|number_format:"8" + $DEBITMP_MONTH|number_format:"8"}</td>
<td>{$DEBITAP_MONTH|number_format:"8"}</td>
<td>{$DEBITMP_MONTH|number_format:"8"}</td>
<td>{$TXFEE_MONTH|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE_MONTH|number_format:"8"}</td>
{/if}
<td>{$DONATION_MONTH|number_format:"8"}</td>
</tr>
<tr>
<td>1 Year</td>
<td>{$DEBITAP_YEAR + $DEBITMP_YEAR}</td>
<td>{$DEBITAP_YEAR|number_format:"8"}</td>
<td>{$DEBITMP_YEAR|number_format:"8"}</td>
<td>{$TXFEE_YEAR|number_format:"8"}</td>
{if $GLOBAL.fees|default:"0" > 0}
<td>{$FEE_YEAR|number_format:"8"}</td>
{/if}
<td>{$DONATION_YEAR|number_format:"8"}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{/if}