[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(); return $this->sqlError();
} }
/** /**
* Fetch a transaction summary by user with total amounts * Fetch a transaction summary by user with total amounts
* @param account_id int Account ID, NULL for all * @param account_id int Account ID, NULL for all
* @return data array type and total * @return data array type and total
**/ **/
public function getTransactionSummarybyTime($account_id=NULL) { public function getTransactionTypebyTime($account_id=NULL, $type=NULL) {
if ($data = $this->memcache->get(__FUNCTION__ . $account_id)) return $data; $this->debug->append("STA " . __METHOD__, 4);
$sql = " if ($data = $this->memcache->get(__FUNCTION__)) return $data;
SELECT $stmt = $this->mysqli->prepare("
SUM(t.amount) AS total, SELECT
t.type AS type 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 FROM transactions AS t
LEFT OUTER JOIN blocks AS b LEFT OUTER JOIN blocks AS b ON b.id = t.block_id
ON b.id = t.block_id WHERE
WHERE ( b.confirmations > 0 OR b.id IS NULL )"; t.account_id = ? AND (b.confirmations > 120 OR b.id IS NULL)");
if (!empty($account_id)) { if ($this->checkStmt($stmt) && $stmt->bind_param("i", $account_id) && $stmt->execute() && $result = $stmt->get_result())
$sql .= " AND t.account_id = ? "; return $this->memcache->setCache(__FUNCTION__, $result->fetch_assoc());
$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);
}
return $this->sqlError(); return $this->sqlError();
} }

View File

@ -11,8 +11,22 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$iLimit = 30; $iLimit = 30;
$debug->append('No cached version available, fetching from backend', 3); $debug->append('No cached version available, fetching from backend', 3);
if (!$setting->getValue('disable_transactionsummary')) { 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('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 { } else {
$debug->append('Using cached page', 3); $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="col-lg-12">
<div class="panel panel-info"> <div class="panel panel-info">
<div class="panel-heading"> <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>
<div class="panel-body no-padding"> <div class="panel-body">
<div class="table-responsive"> <div class="row">
<table class="table table-striped table-bordered table-hover"> <div class="col-lg-12">
<thead> <div class="panel panel-info">
<tr> <div class="panel-heading">
{foreach $SUMMARY as $type=>$total} <i class="fa fa-credit-card fa-fw"></i> All Time
<th>{$type}</th> </div>
{/foreach} <div class="panel-body">
</tr> <table class="table table-striped table-bordered table-hover">
</thead> <thead>
<tbody> <tr>
<tr> {foreach $SUMMARY as $type=>$total}
{foreach $SUMMARY as $type=>$total} <th>{$type}</th>
<td class="right">{$total|number_format:"8"}</td> {/foreach}
{/foreach} </tr>
</tr> </thead>
</tbody> <tbody>
</table> <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> </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}