mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-12 22:22:32 +01:00
Working on expenses
This commit is contained in:
parent
7a26dd610c
commit
360b59baa0
@ -49,7 +49,7 @@ class ExpenseController extends BaseController
|
|||||||
'checkbox',
|
'checkbox',
|
||||||
'vendor',
|
'vendor',
|
||||||
'expense_date',
|
'expense_date',
|
||||||
'expense_amount',
|
'amount',
|
||||||
'public_notes',
|
'public_notes',
|
||||||
'status',
|
'status',
|
||||||
''
|
''
|
||||||
@ -96,17 +96,42 @@ class ExpenseController extends BaseController
|
|||||||
$expense = Expense::scope($publicId)->firstOrFail();
|
$expense = Expense::scope($publicId)->firstOrFail();
|
||||||
$expense->expense_date = Utils::fromSqlDate($expense->expense_date);
|
$expense->expense_date = Utils::fromSqlDate($expense->expense_date);
|
||||||
|
|
||||||
|
$actions = [];
|
||||||
|
if ($expense->invoice) {
|
||||||
|
$actions[] = ['url' => URL::to("invoices/{$expense->invoice->public_id}/edit"), 'label' => trans("texts.view_invoice")];
|
||||||
|
} else {
|
||||||
|
$actions[] = ['url' => 'javascript:submitAction("invoice")', 'label' => trans("texts.invoice_expense")];
|
||||||
|
|
||||||
|
/*
|
||||||
|
// check for any open invoices
|
||||||
|
$invoices = $task->client_id ? $this->invoiceRepo->findOpenInvoices($task->client_id) : [];
|
||||||
|
|
||||||
|
foreach ($invoices as $invoice) {
|
||||||
|
$actions[] = ['url' => 'javascript:submitAction("add_to_invoice", '.$invoice->public_id.')', 'label' => trans("texts.add_to_invoice", ["invoice" => $invoice->invoice_number])];
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
$actions[] = \DropdownButton::DIVIDER;
|
||||||
|
if (!$expense->trashed()) {
|
||||||
|
$actions[] = ['url' => 'javascript:submitAction("archive")', 'label' => trans('texts.archive_expense')];
|
||||||
|
$actions[] = ['url' => 'javascript:onDeleteClick()', 'label' => trans('texts.delete_expense')];
|
||||||
|
} else {
|
||||||
|
$actions[] = ['url' => 'javascript:submitAction("restore")', 'label' => trans('texts.restore_expense')];
|
||||||
|
}
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'vendor' => null,
|
'vendor' => null,
|
||||||
'expense' => $expense,
|
'expense' => $expense,
|
||||||
'method' => 'PUT',
|
'method' => 'PUT',
|
||||||
'url' => 'expenses/'.$publicId,
|
'url' => 'expenses/'.$publicId,
|
||||||
'title' => 'Edit Expense',
|
'title' => 'Edit Expense',
|
||||||
|
'actions' => $actions,
|
||||||
'vendors' => Vendor::scope()->with('vendorcontacts')->orderBy('name')->get(),
|
'vendors' => Vendor::scope()->with('vendorcontacts')->orderBy('name')->get(),
|
||||||
'vendorPublicId' => $expense->vendor ? $expense->vendor->public_id : null,
|
'vendorPublicId' => $expense->vendor ? $expense->vendor->public_id : null,
|
||||||
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(),
|
||||||
'clientPublicId' => $expense->client ? $expense->client->public_id : null,
|
'clientPublicId' => $expense->client ? $expense->client->public_id : null,
|
||||||
);
|
);
|
||||||
|
|
||||||
$data = array_merge($data, self::getViewModel());
|
$data = array_merge($data, self::getViewModel());
|
||||||
|
|
||||||
@ -131,6 +156,11 @@ class ExpenseController extends BaseController
|
|||||||
|
|
||||||
Session::flash('message', trans('texts.updated_expense'));
|
Session::flash('message', trans('texts.updated_expense'));
|
||||||
|
|
||||||
|
$action = Input::get('action');
|
||||||
|
if (in_array($action, ['archive', 'delete', 'restore', 'invoice'])) {
|
||||||
|
return self::bulk();
|
||||||
|
}
|
||||||
|
|
||||||
return redirect()->to("expenses/{$expense->public_id}/edit");
|
return redirect()->to("expenses/{$expense->public_id}/edit");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,10 +191,10 @@ class ExpenseController extends BaseController
|
|||||||
if ($expense->client_id) {
|
if ($expense->client_id) {
|
||||||
if (!$clientPublicId) {
|
if (!$clientPublicId) {
|
||||||
$clientPublicId = $expense->client_id;
|
$clientPublicId = $expense->client_id;
|
||||||
} else if ($clientPublicId != $expense->client_id) {
|
} elseif ($clientPublicId != $expense->client_id) {
|
||||||
Session::flash('error', trans('texts.expense_error_multiple_clients'));
|
Session::flash('error', trans('texts.expense_error_multiple_clients'));
|
||||||
return Redirect::to('expenses');
|
return Redirect::to('expenses');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($expense->invoice_id) {
|
if ($expense->invoice_id) {
|
||||||
|
@ -258,7 +258,7 @@ class Utils
|
|||||||
return $data->first();
|
return $data->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function formatMoney($value, $currencyId = false, $countryId = false, $hideSymbol = false)
|
public static function formatMoney($value, $currencyId = false, $countryId = false, $showCode = false)
|
||||||
{
|
{
|
||||||
if (!$value) {
|
if (!$value) {
|
||||||
$value = 0;
|
$value = 0;
|
||||||
@ -292,9 +292,7 @@ class Utils
|
|||||||
$value = number_format($value, $currency->precision, $decimal, $thousand);
|
$value = number_format($value, $currency->precision, $decimal, $thousand);
|
||||||
$symbol = $currency->symbol;
|
$symbol = $currency->symbol;
|
||||||
|
|
||||||
if ($hideSymbol) {
|
if ($showCode || !$symbol) {
|
||||||
return $value;
|
|
||||||
} elseif (!$symbol) {
|
|
||||||
return "{$value} {$code}";
|
return "{$value} {$code}";
|
||||||
} elseif ($swapSymbol) {
|
} elseif ($swapSymbol) {
|
||||||
return "{$value} " . trim($symbol);
|
return "{$value} " . trim($symbol);
|
||||||
|
@ -45,6 +45,11 @@ class Expense extends EntityModel
|
|||||||
return $this->belongsTo('App\Models\Client')->withTrashed();
|
return $this->belongsTo('App\Models\Client')->withTrashed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function invoice()
|
||||||
|
{
|
||||||
|
return $this->belongsTo('App\Models\Invoice')->withTrashed();
|
||||||
|
}
|
||||||
|
|
||||||
public function getName()
|
public function getName()
|
||||||
{
|
{
|
||||||
if($this->expense_number)
|
if($this->expense_number)
|
||||||
|
@ -31,12 +31,16 @@ class ExpenseRepository extends BaseRepository
|
|||||||
->join('accounts', 'accounts.id', '=', 'expenses.account_id')
|
->join('accounts', 'accounts.id', '=', 'expenses.account_id')
|
||||||
->where('expenses.account_id', '=', $accountid)
|
->where('expenses.account_id', '=', $accountid)
|
||||||
->where('expenses.vendor_id', '=', $vendorPublicId)
|
->where('expenses.vendor_id', '=', $vendorPublicId)
|
||||||
->select('expenses.id',
|
->select(
|
||||||
'expenses.expense_date',
|
'expenses.id',
|
||||||
'expenses.amount',
|
'expenses.expense_date',
|
||||||
'expenses.public_notes',
|
'expenses.amount',
|
||||||
'expenses.public_id',
|
'expenses.public_notes',
|
||||||
'expenses.deleted_at', 'expenses.should_be_invoiced', 'expenses.created_at');
|
'expenses.public_id',
|
||||||
|
'expenses.deleted_at',
|
||||||
|
'expenses.should_be_invoiced',
|
||||||
|
'expenses.created_at'
|
||||||
|
);
|
||||||
|
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
@ -46,7 +50,9 @@ class ExpenseRepository extends BaseRepository
|
|||||||
$accountid = \Auth::user()->account_id;
|
$accountid = \Auth::user()->account_id;
|
||||||
$query = DB::table('expenses')
|
$query = DB::table('expenses')
|
||||||
->join('accounts', 'accounts.id', '=', 'expenses.account_id')
|
->join('accounts', 'accounts.id', '=', 'expenses.account_id')
|
||||||
->leftjoin('vendors', 'vendors.public_id', '=', 'expenses.vendor_id')
|
->leftjoin('clients', 'clients.id', '=', 'expenses.client_id')
|
||||||
|
->leftjoin('vendors', 'vendors.id', '=', 'expenses.vendor_id')
|
||||||
|
->leftJoin('invoices', 'invoices.id', '=', 'expenses.invoice_id')
|
||||||
->where('expenses.account_id', '=', $accountid)
|
->where('expenses.account_id', '=', $accountid)
|
||||||
->select('expenses.account_id',
|
->select('expenses.account_id',
|
||||||
'expenses.amount',
|
'expenses.amount',
|
||||||
@ -62,8 +68,13 @@ class ExpenseRepository extends BaseRepository
|
|||||||
'expenses.public_notes',
|
'expenses.public_notes',
|
||||||
'expenses.should_be_invoiced',
|
'expenses.should_be_invoiced',
|
||||||
'expenses.vendor_id',
|
'expenses.vendor_id',
|
||||||
|
'invoices.public_id as invoice_public_id',
|
||||||
'vendors.name as vendor_name',
|
'vendors.name as vendor_name',
|
||||||
'vendors.public_id as vendor_public_id');
|
'vendors.public_id as vendor_public_id',
|
||||||
|
'accounts.country_id as account_country_id',
|
||||||
|
'accounts.currency_id as account_currency_id',
|
||||||
|
'clients.country_id as client_country_id'
|
||||||
|
);
|
||||||
|
|
||||||
$showTrashed = \Session::get('show_trash:expense');
|
$showTrashed = \Session::get('show_trash:expense');
|
||||||
|
|
||||||
|
@ -69,7 +69,11 @@ class ExpenseService extends BaseService
|
|||||||
[
|
[
|
||||||
'amount',
|
'amount',
|
||||||
function ($model) {
|
function ($model) {
|
||||||
return Utils::formatMoney($model->amount, false, false);
|
$str = Utils::formatMoney($model->amount, $model->account_currency_id, $model->account_country_id, true);
|
||||||
|
if ($model->exchange_rate != 1) {
|
||||||
|
$str .= ' | ' . Utils::formatMoney(round($model->amount * $model->exchange_rate,2), $model->currency_id, $model->client_country_id, true);
|
||||||
|
}
|
||||||
|
return $str;
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -126,14 +130,24 @@ class ExpenseService extends BaseService
|
|||||||
return URL::to("expenses/{$model->public_id}/edit") ;
|
return URL::to("expenses/{$model->public_id}/edit") ;
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
/*
|
[
|
||||||
|
trans('texts.view_invoice'),
|
||||||
|
function ($model) {
|
||||||
|
return URL::to("/invoices/{$model->invoice_public_id}/edit");
|
||||||
|
},
|
||||||
|
function ($model) {
|
||||||
|
return $model->invoice_public_id;
|
||||||
|
}
|
||||||
|
],
|
||||||
[
|
[
|
||||||
trans('texts.invoice_expense'),
|
trans('texts.invoice_expense'),
|
||||||
function ($model) {
|
function ($model) {
|
||||||
return URL::to("expense/invoice/{$model->public_id}") . '?client=1';
|
return "javascript:invoiceEntity({$model->public_id})";
|
||||||
|
},
|
||||||
|
function ($model) {
|
||||||
|
return ! $model->invoice_id && (!$model->deleted_at || $model->deleted_at == '0000-00-00');
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
*/
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ class TaskService extends BaseService
|
|||||||
[
|
[
|
||||||
trans('texts.invoice_task'),
|
trans('texts.invoice_task'),
|
||||||
function ($model) {
|
function ($model) {
|
||||||
return "javascript:invoiceTask({$model->public_id})";
|
return "javascript:invoiceEntity({$model->public_id})";
|
||||||
},
|
},
|
||||||
function ($model) {
|
function ($model) {
|
||||||
return ! $model->invoice_number && (!$model->deleted_at || $model->deleted_at == '0000-00-00');
|
return ! $model->invoice_number && (!$model->deleted_at || $model->deleted_at == '0000-00-00');
|
||||||
|
@ -8,7 +8,10 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
{!! Former::open($url)->addClass('warn-on-exit')->method($method) !!}
|
{!! Former::open($url)->addClass('warn-on-exit main-form')->method($method) !!}
|
||||||
|
<div style="display:none">
|
||||||
|
{!! Former::text('action') !!}
|
||||||
|
</div>
|
||||||
|
|
||||||
@if ($expense)
|
@if ($expense)
|
||||||
{!! Former::populate($expense) !!}
|
{!! Former::populate($expense) !!}
|
||||||
@ -83,6 +86,12 @@
|
|||||||
<center class="buttons">
|
<center class="buttons">
|
||||||
{!! Button::normal(trans('texts.cancel'))->large()->asLinkTo(URL::to('/expenses'))->appendIcon(Icon::create('remove-circle')) !!}
|
{!! Button::normal(trans('texts.cancel'))->large()->asLinkTo(URL::to('/expenses'))->appendIcon(Icon::create('remove-circle')) !!}
|
||||||
{!! Button::success(trans('texts.save'))->submit()->large()->appendIcon(Icon::create('floppy-disk')) !!}
|
{!! Button::success(trans('texts.save'))->submit()->large()->appendIcon(Icon::create('floppy-disk')) !!}
|
||||||
|
@if ($expense)
|
||||||
|
{!! DropdownButton::normal(trans('texts.more_actions'))
|
||||||
|
->withContents($actions)
|
||||||
|
->large()
|
||||||
|
->dropup() !!}
|
||||||
|
@endif
|
||||||
</center>
|
</center>
|
||||||
|
|
||||||
{!! Former::close() !!}
|
{!! Former::close() !!}
|
||||||
@ -106,6 +115,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function submitAction(action) {
|
||||||
|
$('#action').val(action);
|
||||||
|
$('.main-form').submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onDeleteClick() {
|
||||||
|
if (confirm('{!! trans("texts.are_you_sure") !!}')) {
|
||||||
|
submitAction('delete');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|
||||||
var $vendorSelect = $('select#vendor_id');
|
var $vendorSelect = $('select#vendor_id');
|
||||||
|
@ -373,9 +373,9 @@
|
|||||||
{!! HTML::nav_link('dashboard', 'dashboard') !!}
|
{!! HTML::nav_link('dashboard', 'dashboard') !!}
|
||||||
{!! HTML::menu_link('client') !!}
|
{!! HTML::menu_link('client') !!}
|
||||||
{!! HTML::menu_link('task') !!}
|
{!! HTML::menu_link('task') !!}
|
||||||
|
{!! HTML::menu_link('expense') !!}
|
||||||
{!! HTML::menu_link('invoice') !!}
|
{!! HTML::menu_link('invoice') !!}
|
||||||
{!! HTML::menu_link('payment') !!}
|
{!! HTML::menu_link('payment') !!}
|
||||||
{!! HTML::menu_link('expense') !!}
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="navbar-form navbar-right">
|
<div class="navbar-form navbar-right">
|
||||||
|
@ -91,7 +91,7 @@
|
|||||||
submitForm('stop');
|
submitForm('stop');
|
||||||
}
|
}
|
||||||
|
|
||||||
function invoiceTask(id) {
|
function invoiceEntity(id) {
|
||||||
$('#public_id').val(id);
|
$('#public_id').val(id);
|
||||||
submitForm('invoice');
|
submitForm('invoice');
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@
|
|||||||
<header>
|
<header>
|
||||||
@if ($client)
|
@if ($client)
|
||||||
<h2>{{ $client->getDisplayName() }}</h2>
|
<h2>{{ $client->getDisplayName() }}</h2>
|
||||||
<h3>{{ trans('texts.invoice') . ' ' . $invoiceNumber }}<span>| {{ trans('texts.amount_due') }}: <em>{{ $account->formatMoney($amount, $client, true) }} {{ $currencyCode }}</em></span></h3>
|
<h3>{{ trans('texts.invoice') . ' ' . $invoiceNumber }}<span>| {{ trans('texts.amount_due') }}: <em>{{ $account->formatMoney($amount, $client, true) }}</em></span></h3>
|
||||||
@elseif ($paymentTitle)
|
@elseif ($paymentTitle)
|
||||||
<h2>{{ $paymentTitle }}<br/><small>{{ $paymentSubtitle }}</small></h2>
|
<h2>{{ $paymentTitle }}<br/><small>{{ $paymentSubtitle }}</small></h2>
|
||||||
@endif
|
@endif
|
||||||
@ -280,7 +280,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 col-md-offset-4">
|
<div class="col-md-4 col-md-offset-4">
|
||||||
{!! Button::success(strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, true) . ' ' . $currencyCode ))->submit()->block()->large() !!}
|
{!! Button::success(strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, true) ))->submit()->block()->large() !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user