diff --git a/app/Http/Controllers/Common/Widgets.php b/app/Http/Controllers/Common/Widgets.php index 8addc8dc4..27c0a38fa 100644 --- a/app/Http/Controllers/Common/Widgets.php +++ b/app/Http/Controllers/Common/Widgets.php @@ -5,6 +5,9 @@ namespace App\Http\Controllers\Common; use App\Abstracts\Http\Controller; use App\Http\Requests\Common\Widget as Request; use App\Models\Common\Widget; +use App\Jobs\Common\CreateWidget; +use App\Jobs\Common\DeleteWidget; +use App\Jobs\Common\UpdateWidget; use App\Utilities\Widgets as Utility; class Widgets extends Controller @@ -33,23 +36,34 @@ class Widgets extends Controller 'width' => $request->get('width'), ]; - $widget = Widget::create($request->input()); + $response = $this->ajaxDispatch(new CreateWidget($request)); - $settings = $widget->settings; + if ($response['success']) { + $response['redirect'] = route('dashboard'); - return response()->json([ - 'status' => 200, - 'success' => true, - 'error' => false, - 'message' => trans('messages.success.added', ['type' => $widget->name]), - 'data' => [ + $widget = $response['data']; + + $settings = $widget->settings; + + $response['data'] = [ 'class' => $widget->class, 'name' => $widget->name, 'settings' => $settings, 'sort' => $widget->sort, - ], - 'redirect' => route('dashboard'), - ]); + ]; + + $message = trans('messages.success.added', ['type' => $widget->name]); + + flash($message)->success(); + } else { + $response['redirect'] = route('dashboard'); + + $message = $response['message']; + + flash($message)->error()->important(); + } + + return response()->json($response); } /** @@ -84,23 +98,30 @@ class Widgets extends Controller 'width' => $request->get('width'), ]; - $widget->update($request->input()); + $response = $this->ajaxDispatch(new UpdateWidget($widget, $request)); - $settings = $widget->settings; + $response['redirect'] = route('dashboard'); - return response()->json([ - 'status' => 200, - 'success' => true, - 'error' => false, - 'message' => trans('messages.success.added', ['type' => $widget->name]), - 'data' => [ + if ($response['success']) { + $settings = $response['data']->settings; + + $response['data'] = [ 'class' => $widget->class, 'name' => $widget->name, 'settings' => $settings, 'sort' => $widget->sort, - ], - 'redirect' => route('dashboard'), - ]); + ]; + + $message = trans('messages.success.updated', ['type' => $widget->name]); + + flash($message)->success(); + } else { + $message = $response['message']; + + flash($message)->error()->important(); + } + + return response()->json($response); } /** @@ -112,18 +133,21 @@ class Widgets extends Controller */ public function destroy(Widget $widget) { - $message = trans('messages.success.deleted', ['type' => $widget->name]); + $response = $this->ajaxDispatch(new DeleteWidget($item)); - $widget->delete(); + $response['redirect'] = route('dashboard'); - return response()->json([ - 'status' => 200, - 'success' => true, - 'error' => false, - 'message' => $message, - 'data' => null, - 'redirect' => route('dashboard'), - ]); + if ($response['success']) { + $message = trans('messages.success.deleted', ['type' => $widget->name]); + + flash($message)->success(); + } else { + $message = $response['message']; + + flash($message)->error()->important(); + } + + return response()->json($response); } public function getData(Request $request) diff --git a/app/Jobs/Common/CreateDashboard.php b/app/Jobs/Common/CreateDashboard.php index edc05e45c..c94fbe060 100644 --- a/app/Jobs/Common/CreateDashboard.php +++ b/app/Jobs/Common/CreateDashboard.php @@ -136,6 +136,7 @@ class CreateDashboard extends Job 'name' => $name, 'sort' => $sort, 'settings' => (new $class())->getDefaultSettings(), + 'created_by' => user_id(), ]); $sort++; diff --git a/app/Jobs/Common/CreateWidget.php b/app/Jobs/Common/CreateWidget.php new file mode 100644 index 000000000..3e636f69a --- /dev/null +++ b/app/Jobs/Common/CreateWidget.php @@ -0,0 +1,40 @@ +request = $this->getRequestInstance($request); + $this->request->merge(['created_by' => user_id()]); + } + + /** + * Execute the job. + * + * @return Widget + */ + public function handle() + { + $this->request['enabled'] = $this->request['enabled'] ?? 1; + + \DB::transaction(function () { + $this->widget = Widget::create($this->request->all()); + }); + + return $this->widget; + } +} diff --git a/app/Jobs/Common/DeleteWidget.php b/app/Jobs/Common/DeleteWidget.php new file mode 100644 index 000000000..51e5a9423 --- /dev/null +++ b/app/Jobs/Common/DeleteWidget.php @@ -0,0 +1,62 @@ +item = $item; + } + + /** + * Execute the job. + * + * @return boolean|Exception + */ + public function handle() + { + $this->authorize(); + + \DB::transaction(function () { + $this->deleteRelationships($this->item, ['taxes']); + + $this->item->delete(); + }); + + return true; + } + + /** + * Determine if this action is applicable. + * + * @return void + */ + public function authorize() + { + if ($relationships = $this->getRelationships()) { + $message = trans('messages.warning.deleted', ['name' => $this->item->name, 'text' => implode(', ', $relationships)]); + + throw new \Exception($message); + } + } + + public function getRelationships() + { + $rels = [ + 'invoice_items' => 'invoices', + 'bill_items' => 'bills', + ]; + + return $this->countRelationships($this->item, $rels); + } +} diff --git a/app/Jobs/Common/UpdateWidget.php b/app/Jobs/Common/UpdateWidget.php new file mode 100644 index 000000000..fa3c5c016 --- /dev/null +++ b/app/Jobs/Common/UpdateWidget.php @@ -0,0 +1,39 @@ +widget = $widget; + $this->request = $this->getRequestInstance($request); + } + + /** + * Execute the job. + * + * @return Item + */ + public function handle() + { + \DB::transaction(function () { + $this->widget->update($this->request->all()); + }); + + return $this->widget; + } +}