diff --git a/app/Http/Controllers/CreditController.php b/app/Http/Controllers/CreditController.php index 13dd24a6d978..658a9450738c 100644 --- a/app/Http/Controllers/CreditController.php +++ b/app/Http/Controllers/CreditController.php @@ -7,8 +7,10 @@ use URL; use Utils; use View; use App\Models\Client; +use App\Models\Credit; use App\Services\CreditService; use App\Ninja\Repositories\CreditRepository; +use App\Http\Requests\UpdateCreditRequest; use App\Http\Requests\CreateCreditRequest; use App\Http\Requests\CreditRequest; use App\Ninja\Datatables\CreditDatatable; @@ -60,10 +62,9 @@ class CreditController extends BaseController return View::make('credits.edit', $data); } - /* public function edit($publicId) { - $credit = Credit::scope($publicId)->firstOrFail(); + $credit = Credit::withTrashed()->scope($publicId)->firstOrFail(); $this->authorize('edit', $credit); @@ -71,23 +72,37 @@ class CreditController extends BaseController $data = array( 'client' => null, + 'clientPublicId' => $credit->client->public_id, 'credit' => $credit, 'method' => 'PUT', 'url' => 'credits/'.$publicId, 'title' => 'Edit Credit', - 'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), ); + 'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), + ); - return View::make('credit.edit', $data); + return View::make('credits.edit', $data); + } + + public function update(UpdateCreditRequest $request) + { + $credit = $request->entity(); + + return $this->save($credit); } - */ public function store(CreateCreditRequest $request) { - $credit = $this->creditRepo->save($request->input()); + return $this->save(); + } - Session::flash('message', trans('texts.created_credit')); + private function save($credit = null) + { + $credit = $this->creditService->save(Input::all(), $credit); - return redirect()->to($credit->client->getRoute()); + $message = $credit->wasRecentlyCreated ? trans('texts.created_created') : trans('texts.updated_credit'); + Session::flash('message', $message); + + return redirect()->to("credits/{$credit->public_id}/edit"); } public function bulk() diff --git a/app/Http/Requests/UpdateCreditRequest.php b/app/Http/Requests/UpdateCreditRequest.php new file mode 100644 index 000000000000..c5c1d4c6c20b --- /dev/null +++ b/app/Http/Requests/UpdateCreditRequest.php @@ -0,0 +1,27 @@ +user()->can('edit', $this->entity()); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'client' => 'required', + 'amount' => 'required|positive', + ]; + } +} diff --git a/app/Models/Credit.php b/app/Models/Credit.php index 02a38777509f..b7d041b148b9 100644 --- a/app/Models/Credit.php +++ b/app/Models/Credit.php @@ -61,6 +61,14 @@ class Credit extends EntityModel return ''; } + /** + * @return string + */ + public function getRoute() + { + return "/credits/{$this->public_id}"; + } + /** * @return mixed */ diff --git a/app/Ninja/Datatables/CreditDatatable.php b/app/Ninja/Datatables/CreditDatatable.php index c27bf8466f31..5e07cfe3432c 100644 --- a/app/Ninja/Datatables/CreditDatatable.php +++ b/app/Ninja/Datatables/CreditDatatable.php @@ -8,7 +8,7 @@ class CreditDatatable extends EntityDatatable { public $entityType = ENTITY_CREDIT; public $sortCol = 4; - + public function columns() { return [ @@ -53,6 +53,15 @@ class CreditDatatable extends EntityDatatable public function actions() { return [ + [ + trans('texts.edit_credit'), + function ($model) { + return URL::to("credits/{$model->public_id}/edit"); + }, + function ($model) { + return Auth::user()->can('editByOwner', [ENTITY_CREDIT, $model->user_id]); + } + ], [ trans('texts.apply_credit'), function ($model) { diff --git a/app/Services/CreditService.php b/app/Services/CreditService.php index 621b3ded2a3b..5b83b3640cf4 100644 --- a/app/Services/CreditService.php +++ b/app/Services/CreditService.php @@ -44,9 +44,9 @@ class CreditService extends BaseService * @param $data * @return mixed|null */ - public function save($data) + public function save($data, $credit = null) { - return $this->creditRepo->save($data); + return $this->creditRepo->save($data, $credit); } /** diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 57970f7b961c..8249acde2689 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -2249,7 +2249,9 @@ $LANG = array( 'deleted_product' => 'Successfully deleted product', 'deleted_products' => 'Successfully deleted :count products', 'restored_product' => 'Successfully restored product', - + 'update_credit' => 'Update credit', + 'updated_credit' => 'Successfully updated credit', + 'edit_credit' => 'Edit credit', ); diff --git a/resources/views/credits/edit.blade.php b/resources/views/credits/edit.blade.php index 5b4c7ae24dec..18b00b4807f4 100644 --- a/resources/views/credits/edit.blade.php +++ b/resources/views/credits/edit.blade.php @@ -8,6 +8,13 @@ 'amount' => 'required', )) !!} + @if ($credit) + {!! Former::populate($credit) !!} +
+ {!! Former::text('public_id') !!} +
+ @endif +
@@ -60,7 +67,7 @@ $clientSelect.combobox(); $('#currency_id').combobox(); - $('#credit_date').datepicker('update', new Date()); + $('#credit_date').datepicker('update', '{{ $credit ? $credit->credit_date : 'new Date()' }}'); @if (!$clientPublicId) $('.client-select input.form-control').focus(); diff --git a/resources/views/list.blade.php b/resources/views/list.blade.php index 5dae720c4d34..9f93cc0e9453 100644 --- a/resources/views/list.blade.php +++ b/resources/views/list.blade.php @@ -55,7 +55,7 @@ {!! Button::normal(trans('texts.projects'))->asLinkTo(URL::to('/projects'))->appendIcon(Icon::create('list')) !!} @endif - @if (empty($clientId) && empty($vendorId) && Auth::user()->can('create', $entityType)) + @if (Auth::user()->can('create', $entityType)) {!! Button::primary(trans("texts.new_{$entityType}"))->asLinkTo(url(Utils::pluralizeEntityType($entityType) . '/create'))->appendIcon(Icon::create('plus-sign')) !!} @endif