mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Support cloning expenses
This commit is contained in:
parent
297bc6f18a
commit
7e9add625b
@ -94,11 +94,20 @@ class ExpenseController extends BaseController
|
|||||||
return View::make('expenses.edit', $data);
|
return View::make('expenses.edit', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function edit(ExpenseRequest $request)
|
public function clone(ExpenseRequest $request, $publicId)
|
||||||
|
{
|
||||||
|
return self::edit($request, $publicId, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function edit(ExpenseRequest $request, $publicId = false, $clone = false)
|
||||||
{
|
{
|
||||||
$expense = $request->entity();
|
$expense = $request->entity();
|
||||||
|
|
||||||
$actions = [];
|
$actions = [];
|
||||||
|
|
||||||
|
if (! $clone) {
|
||||||
|
$actions[] = ['url' => 'javascript:submitAction("clone")', 'label' => trans("texts.clone_expense")];
|
||||||
|
}
|
||||||
if ($expense->invoice) {
|
if ($expense->invoice) {
|
||||||
$actions[] = ['url' => URL::to("invoices/{$expense->invoice->public_id}/edit"), 'label' => trans('texts.view_invoice')];
|
$actions[] = ['url' => URL::to("invoices/{$expense->invoice->public_id}/edit"), 'label' => trans('texts.view_invoice')];
|
||||||
} else {
|
} else {
|
||||||
@ -124,12 +133,28 @@ class ExpenseController extends BaseController
|
|||||||
$actions[] = ['url' => 'javascript:submitAction("restore")', 'label' => trans('texts.restore_expense')];
|
$actions[] = ['url' => 'javascript:submitAction("restore")', 'label' => trans('texts.restore_expense')];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($clone) {
|
||||||
|
$expense->id = null;
|
||||||
|
$expense->public_id = null;
|
||||||
|
$expense->expense_date = date_create()->format('Y-m-d');
|
||||||
|
$expense->deleted_at = null;
|
||||||
|
$expense->invoice_id = null;
|
||||||
|
$expense->payment_date = null;
|
||||||
|
$expense->payment_type_id = null;
|
||||||
|
$expense->transaction_reference = null;
|
||||||
|
$method = 'POST';
|
||||||
|
$url = 'expenses';
|
||||||
|
} else {
|
||||||
|
$method = 'PUT';
|
||||||
|
$url = 'expenses/' . $expense->public_id;
|
||||||
|
}
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'vendor' => null,
|
'vendor' => null,
|
||||||
'expense' => $expense,
|
'expense' => $expense,
|
||||||
'entity' => $expense,
|
'entity' => $expense,
|
||||||
'method' => 'PUT',
|
'method' => $method,
|
||||||
'url' => 'expenses/'.$expense->public_id,
|
'url' => $url,
|
||||||
'title' => 'Edit Expense',
|
'title' => 'Edit Expense',
|
||||||
'actions' => $actions,
|
'actions' => $actions,
|
||||||
'vendors' => Vendor::scope()->with('vendor_contacts')->orderBy('name')->get(),
|
'vendors' => Vendor::scope()->with('vendor_contacts')->orderBy('name')->get(),
|
||||||
@ -165,7 +190,11 @@ class ExpenseController extends BaseController
|
|||||||
return self::bulk();
|
return self::bulk();
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->to("expenses/{$expense->public_id}/edit");
|
if ($action == 'clone') {
|
||||||
|
return redirect()->to(sprintf('expenses/%s/clone', $expense->public_id));
|
||||||
|
} else {
|
||||||
|
return redirect()->to("expenses/{$expense->public_id}/edit");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(CreateExpenseRequest $request)
|
public function store(CreateExpenseRequest $request)
|
||||||
|
@ -224,6 +224,7 @@ Route::group(['middleware' => ['lookup:user', 'auth:user']], function () {
|
|||||||
// Expense
|
// Expense
|
||||||
Route::resource('expenses', 'ExpenseController');
|
Route::resource('expenses', 'ExpenseController');
|
||||||
Route::get('expenses/create/{vendor_id?}/{client_id?}/{category_id?}', 'ExpenseController@create');
|
Route::get('expenses/create/{vendor_id?}/{client_id?}/{category_id?}', 'ExpenseController@create');
|
||||||
|
Route::get('expenses/{expenses}/clone', 'ExpenseController@clone');
|
||||||
Route::get('api/expenses', 'ExpenseController@getDatatable');
|
Route::get('api/expenses', 'ExpenseController@getDatatable');
|
||||||
Route::get('api/expenses/{id}', 'ExpenseController@getDatatableVendor');
|
Route::get('api/expenses/{id}', 'ExpenseController@getDatatableVendor');
|
||||||
Route::post('expenses/bulk', 'ExpenseController@bulk');
|
Route::post('expenses/bulk', 'ExpenseController@bulk');
|
||||||
|
@ -108,6 +108,15 @@ class ExpenseDatatable extends EntityDatatable
|
|||||||
return Auth::user()->can('editByOwner', [ENTITY_EXPENSE, $model->user_id]);
|
return Auth::user()->can('editByOwner', [ENTITY_EXPENSE, $model->user_id]);
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
trans("texts.clone_expense"),
|
||||||
|
function ($model) {
|
||||||
|
return URL::to("expenses/{$model->public_id}/clone");
|
||||||
|
},
|
||||||
|
function ($model) {
|
||||||
|
return Auth::user()->can('create', ENTITY_EXPENSE);
|
||||||
|
},
|
||||||
|
],
|
||||||
[
|
[
|
||||||
trans('texts.view_invoice'),
|
trans('texts.view_invoice'),
|
||||||
function ($model) {
|
function ($model) {
|
||||||
|
@ -33,7 +33,9 @@ class EntityPresenter extends Presenter
|
|||||||
{
|
{
|
||||||
$class = $text = '';
|
$class = $text = '';
|
||||||
|
|
||||||
if ($this->entity->is_deleted) {
|
if (! $this->entity->id) {
|
||||||
|
return '';
|
||||||
|
} elseif ($this->entity->is_deleted) {
|
||||||
$class = 'danger';
|
$class = 'danger';
|
||||||
$label = trans('texts.deleted');
|
$label = trans('texts.deleted');
|
||||||
} elseif ($this->entity->trashed()) {
|
} elseif ($this->entity->trashed()) {
|
||||||
|
@ -2315,6 +2315,7 @@ $LANG = array(
|
|||||||
'downloaded_quote' => 'An email will be sent with the quote PDF',
|
'downloaded_quote' => 'An email will be sent with the quote PDF',
|
||||||
'downloaded_invoices' => 'An email will be sent with the invoice PDFs',
|
'downloaded_invoices' => 'An email will be sent with the invoice PDFs',
|
||||||
'downloaded_quotes' => 'An email will be sent with the quote PDFs',
|
'downloaded_quotes' => 'An email will be sent with the quote PDFs',
|
||||||
|
'clone_expense' => 'Clone Expense',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user