-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8c7ac76
commit 1baee60
Showing
9 changed files
with
270 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
<?php | ||
|
||
namespace App\Http\Controllers\Reports; | ||
|
||
use App\Http\Controllers\Controller; | ||
use App\Models\Expense\Bill; | ||
use App\Models\Expense\BillPayment; | ||
use App\Models\Expense\BillTotal; | ||
use App\Models\Income\Invoice; | ||
use App\Models\Income\InvoicePayment; | ||
use App\Models\Income\InvoiceTotal; | ||
use App\Models\Setting\Tax; | ||
use App\Traits\Currencies; | ||
use Date; | ||
|
||
class TaxSummary extends Controller | ||
{ | ||
use Currencies; | ||
|
||
/** | ||
* Display a listing of the resource. | ||
* | ||
* @return Response | ||
*/ | ||
public function index() | ||
{ | ||
$dates = $incomes = $expenses = $totals = []; | ||
|
||
$status = request('status'); | ||
|
||
$t = Tax::enabled()->where('rate', '<>', '0')->pluck('name')->toArray(); | ||
|
||
$taxes = array_combine($t, $t); | ||
|
||
// Get year | ||
$year = request('year'); | ||
if (empty($year)) { | ||
$year = Date::now()->year; | ||
} | ||
|
||
// Dates | ||
for ($j = 1; $j <= 12; $j++) { | ||
$dates[$j] = Date::parse($year . '-' . $j)->format('M'); | ||
|
||
foreach ($taxes as $tax_name) { | ||
$incomes[$tax_name][$dates[$j]] = [ | ||
'amount' => 0, | ||
'currency_code' => setting('general.default_currency'), | ||
'currency_rate' => 1, | ||
]; | ||
|
||
$expenses[$tax_name][$dates[$j]] = [ | ||
'amount' => 0, | ||
'currency_code' => setting('general.default_currency'), | ||
'currency_rate' => 1, | ||
]; | ||
|
||
$totals[$tax_name][$dates[$j]] = [ | ||
'amount' => 0, | ||
'currency_code' => setting('general.default_currency'), | ||
'currency_rate' => 1, | ||
]; | ||
} | ||
} | ||
|
||
switch ($status) { | ||
case 'paid': | ||
// Invoices | ||
$invoices = InvoicePayment::monthsOfYear('paid_at')->get(); | ||
$this->setAmount($incomes, $totals, $invoices, 'invoice', 'paid_at'); | ||
// Bills | ||
$bills = BillPayment::monthsOfYear('paid_at')->get(); | ||
$this->setAmount($expenses, $totals, $bills, 'bill', 'paid_at'); | ||
break; | ||
case 'upcoming': | ||
// Invoices | ||
$invoices = Invoice::accrued()->monthsOfYear('due_at')->get(); | ||
$this->setAmount($incomes, $totals, $invoices, 'invoice', 'due_at'); | ||
// Bills | ||
$bills = Bill::accrued()->monthsOfYear('due_at')->get(); | ||
$this->setAmount($expenses, $totals, $bills, 'bill', 'due_at'); | ||
break; | ||
default: | ||
// Invoices | ||
$invoices = Invoice::accrued()->monthsOfYear('invoiced_at')->get(); | ||
$this->setAmount($incomes, $totals, $invoices, 'invoice', 'invoiced_at'); | ||
// Bills | ||
$bills = Bill::accrued()->monthsOfYear('billed_at')->get(); | ||
$this->setAmount($expenses, $totals, $bills, 'bill', 'billed_at'); | ||
break; | ||
} | ||
|
||
// Check if it's a print or normal request | ||
if (request('print')) { | ||
$view_template = 'reports.tax_summary.print'; | ||
} else { | ||
$view_template = 'reports.tax_summary.index'; | ||
} | ||
|
||
return view($view_template, compact('dates', 'taxes', 'incomes', 'expenses', 'totals')); | ||
} | ||
|
||
private function setAmount(&$items, &$totals, $rows, $type, $date_field) | ||
{ | ||
foreach ($rows as $row) { | ||
$date = Date::parse($row->$date_field)->format('M'); | ||
|
||
if ($date_field == 'paid_at') { | ||
if (!$row->invoice instanceof Invoice) { | ||
continue; | ||
} | ||
|
||
$row_totals = $row->invoice->totals; | ||
} else { | ||
$row_totals = $row->totals; | ||
} | ||
|
||
foreach ($row_totals as $row_total) { | ||
if ($row_total->code != 'tax') { | ||
continue; | ||
} | ||
|
||
if (!isset($items[$row_total->name])) { | ||
continue; | ||
} | ||
|
||
$amount = $this->convert($row_total->amount, $row->currency_code, $row->currency_rate); | ||
|
||
$items[$row_total->name][$date]['amount'] += $amount; | ||
|
||
if ($type == 'invoice') { | ||
$totals[$row_total->name][$date]['amount'] += $amount; | ||
} else { | ||
$totals[$row_total->name][$date]['amount'] -= $amount; | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
<div class="box-body"> | ||
<div class="table-responsive"> | ||
<table class="table"> | ||
<thead> | ||
<tr> | ||
<th style="width: 120px;"> </th> | ||
@foreach($dates as $date) | ||
<th class="text-right">{{ $date }}</th> | ||
@endforeach | ||
</tr> | ||
</thead> | ||
</table> | ||
@if ($taxes) | ||
@foreach($taxes as $tax_name) | ||
<table class="table table-hover" style="margin-top: 40px"> | ||
<thead> | ||
<tr> | ||
<th style="width: 120px;" colspan="13">{{ $tax_name }}</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr> | ||
<td style="width: 120px;">{{ trans_choice('general.incomes', 2) }}</td> | ||
@foreach($incomes[$tax_name] as $tax_date) | ||
<td class="text-right">@money($tax_date['amount'], $tax_date['currency_code'], true)</td> | ||
@endforeach | ||
</tr> | ||
<tr> | ||
<td style="width: 120px;">{{ trans_choice('general.expenses', 2) }}</td> | ||
@foreach($expenses[$tax_name] as $tax_date) | ||
<td class="text-right">@money($tax_date['amount'], $tax_date['currency_code'], true)</td> | ||
@endforeach | ||
</tr> | ||
</tbody> | ||
<tfoot> | ||
<tr> | ||
<th style="width: 120px;">{{ trans('reports.net') }}</th> | ||
@foreach($totals[$tax_name] as $tax_date) | ||
<th class="text-right">@money($tax_date['amount'], $tax_date['currency_code'], true)</th> | ||
@endforeach | ||
</tr> | ||
</tfoot> | ||
</table> | ||
@endforeach | ||
@else | ||
<table class="table table-bordered table-striped table-hover" style="margin-top: 40px"> | ||
<tbody> | ||
<tr> | ||
<td colspan="13"> | ||
<h5 class="text-center">{{ trans('general.no_records') }}</h5> | ||
</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
@endif | ||
</div> | ||
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
@extends('layouts.admin') | ||
|
||
@section('title', trans('reports.summary.tax')) | ||
|
||
@section('new_button') | ||
<span class="new-button"><a href="{{ url('reports/tax-summary') }}?print=1&status={{ request('status') }}&year={{ request('year', $this_year) }}" target="_blank" class="btn btn-success btn-sm"><span class="fa fa-print"></span> {{ trans('general.print') }}</a></span> | ||
@endsection | ||
|
||
@section('content') | ||
<!-- Default box --> | ||
<div class="box box-success"> | ||
<div class="box-header"> | ||
<div class="pull-left" style="margin-left: 5px"> | ||
<a href="{{ url('reports/tax-summary') }}?year={{ request('year', $this_year) }}"><span class="badge @if (request('status') == '') bg-green @else bg-default @endif">{{ trans('general.all') }}</span></a> | ||
<a href="{{ url('reports/tax-summary') }}?status=paid&year={{ request('year', $this_year) }}"><span class="badge @if (request('status') == 'paid') bg-green @else bg-default @endif">{{ trans('invoices.paid') }}</span></a> | ||
<a href="{{ url('reports/tax-summary') }}?status=upcoming&year={{ request('year', $this_year) }}"><span class="badge @if (request('status') == 'upcoming') bg-green @else bg-default @endif">{{ trans('dashboard.receivables') }}</span></a> | ||
</div> | ||
{!! Form::open(['url' => 'reports/tax-summary', 'role' => 'form', 'method' => 'GET']) !!} | ||
<div class="pull-right"> | ||
{!! Form::select('year', $years, request('year', $this_year), ['class' => 'form-control input-filter input-sm', 'onchange' => 'this.form.submit()']) !!} | ||
</div> | ||
{!! Form::close() !!} | ||
</div> | ||
|
||
@include('reports.tax_summary.body') | ||
</div> | ||
<!-- /.box --> | ||
@endsection |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
@extends('layouts.print') | ||
|
||
@section('title', trans('reports.summary.tax')) | ||
|
||
@section('content') | ||
<div class="box-header"> | ||
<h2>{{ trans('reports.summary.tax') }}</h2> | ||
<div class="text-muted"> | ||
{{ setting('general.company_name') }} | ||
<br/> | ||
{{ Date::parse(request('year') . '-1-1')->format($date_format) }} - {{ Date::parse(request('year') . '-12-31')->format($date_format) }} | ||
</div> | ||
</div> | ||
@include('reports.tax_summary.body') | ||
@endsection |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters