This commit is contained in:
James Cole 2016-03-29 15:55:14 +02:00
parent ef97c3b42d
commit f200086d01
4 changed files with 82 additions and 52 deletions

View File

@ -110,11 +110,29 @@ class BillController extends Controller
*/
public function index(BillRepositoryInterface $repository)
{
$start = session('start');
$end = session('end');
$bills = $repository->getBills();
$bills->each(
function (Bill $bill) use ($repository) {
function (Bill $bill) use ($repository, $start, $end) {
$bill->nextExpectedMatch = $repository->nextExpectedMatch($bill);
$bill->lastFoundMatch = $repository->lastFoundMatch($bill);
$journals = $repository->getJournalsInRange($bill, $start, $end);
// loop journals, find average:
$average = '0';
$count = $journals->count();
if ($count > 0) {
$sum = '0';
foreach ($journals as $journal) {
$sum = bcadd($sum, TransactionJournal::amountPositive($journal));
}
$average = bcdiv($sum, strval($count));
}
$bill->lastPaidAmount = $average;
$bill->paidInPeriod = ($start <= $bill->lastFoundMatch) && ($end >= $bill->lastFoundMatch);
}
);

View File

@ -27,6 +27,8 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property-read \FireflyIII\User $user
* @property \Carbon\Carbon $nextExpectedMatch
* @property \Carbon\Carbon $lastFoundMatch
* @property bool $paidInPeriod
* @property string $lastPaidAmount
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereUpdatedAt($value)
@ -47,11 +49,25 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class Bill extends Model
{
protected $dates = ['created_at', 'updated_at', 'date'];
protected $fillable
= ['name', 'match', 'amount_min', 'match_encrypted', 'name_encrypted', 'user_id', 'amount_max', 'date', 'repeat_freq', 'skip', 'automatch', 'active',];
protected $hidden = ['amount_min_encrypted', 'amount_max_encrypted', 'name_encrypted', 'match_encrypted'];
protected $dates = ['created_at', 'updated_at', 'date'];
/**
* @param Bill $value
*
* @return Bill
*/
public static function routeBinder(Bill $value)
{
if (Auth::check()) {
if ($value->user_id == Auth::user()->id) {
return $value;
}
}
throw new NotFoundHttpException;
}
/**
* @param $value
@ -134,20 +150,4 @@ class Bill extends Model
}
/**
* @param Bill $value
*
* @return Bill
*/
public static function routeBinder(Bill $value)
{
if (Auth::check()) {
if ($value->user_id == Auth::user()->id) {
return $value;
}
}
throw new NotFoundHttpException;
}
}

View File

@ -8,34 +8,35 @@
*/
return [
'name' => 'Name',
'role' => 'Role',
'currentBalance' => 'Current balance',
'active' => 'Is active?',
'lastActivity' => 'Last activity',
'balanceDiff' => 'Balance difference between :start and :end',
'matchedOn' => 'Matched on',
'matchesOn' => 'Matched on',
'matchingAmount' => 'Amount',
'lastMatch' => 'Last match',
'expectedMatch' => 'Expected match',
'automatch' => 'Auto match?',
'repeat_freq' => 'Repeats',
'description' => 'Description',
'amount' => 'Amount',
'date' => 'Date',
'interest_date' => 'Interest date',
'book_date' => 'Book date',
'process_date' => 'Processing date',
'from' => 'From',
'to' => 'To',
'budget' => 'Budget',
'category' => 'Category',
'bill' => 'Bill',
'withdrawal' => 'Withdrawal',
'deposit' => 'Deposit',
'transfer' => 'Transfer',
'type' => 'Type',
'completed' => 'Completed',
'iban' => 'IBAN',
'name' => 'Name',
'role' => 'Role',
'currentBalance' => 'Current balance',
'active' => 'Is active?',
'lastActivity' => 'Last activity',
'balanceDiff' => 'Balance difference between :start and :end',
'matchedOn' => 'Matched on',
'matchesOn' => 'Matched on',
'matchingAmount' => 'Amount',
'lastMatch' => 'Last match',
'expectedMatch' => 'Expected match',
'automatch' => 'Auto match?',
'repeat_freq' => 'Repeats',
'description' => 'Description',
'amount' => 'Amount',
'date' => 'Date',
'interest_date' => 'Interest date',
'book_date' => 'Book date',
'process_date' => 'Processing date',
'from' => 'From',
'to' => 'To',
'budget' => 'Budget',
'category' => 'Category',
'bill' => 'Bill',
'withdrawal' => 'Withdrawal',
'deposit' => 'Deposit',
'transfer' => 'Transfer',
'type' => 'Type',
'completed' => 'Completed',
'iban' => 'IBAN',
'paid_current_period' => 'Paid this period',
];

View File

@ -5,7 +5,7 @@
<th>{{ trans('list.name') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.matchesOn') }}</th>
<th colspan="2">{{ trans('list.matchingAmount') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.lastMatch') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.paid_current_period') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.expectedMatch') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.active') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.automatch') }}</th>
@ -36,8 +36,19 @@
{{ entry.amount_max|formatAmount }}
</td>
{% if not entry.lastFoundMatch.isFuture %}
<td class="hidden-sm hidden-xs" data-value="{{ entry.lastFoundMatch.format('U') }}">
<td class="hidden-sm hidden-xs
{% if entry.active %}
{% if entry.paidInPeriod %}
bg-success
{% else %}
bg-danger
{% endif %}
{% endif %}
" data-value="{{ entry.lastFoundMatch.format('U') }}">
{{ entry.lastFoundMatch.formatLocalized(monthAndDayFormat) }}
{% if entry.active and entry.paidInPeriod %}
({{ entry.lastPaidAmount|formatAmountPlain }})
{% endif %}
</td>
{% else %}
<td class="hidden-sm hidden-xs" data-value="0">
@ -51,7 +62,7 @@
</td>
{% else %}
<td class="hidden-sm hidden-xs" data-value="{{ entry.nextExpectedMatch.format('U') }}">
{{ entry.nextExpectedMatch.formatLocalized(monthAndDayFormat) }}
~ {{ entry.nextExpectedMatch.formatLocalized(monthAndDayFormat) }}
</td>
{% endif %}