From 58daa83030937d8d0618b17a1b073caea1269fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Thu, 11 Feb 2021 18:08:06 +0300 Subject: [PATCH] Improved import upload page.. --- app/Abstracts/Http/Controller.php | 22 ++++++++++--- app/Http/Controllers/Banking/Transactions.php | 18 +++++++--- app/Http/Controllers/Banking/Transfers.php | 22 +++++++++---- app/Http/Controllers/Common/Items.php | 22 +++++++++---- app/Http/Controllers/Purchases/Bills.php | 22 +++++++++---- app/Http/Controllers/Purchases/Payments.php | 22 +++++++++---- app/Http/Controllers/Purchases/Vendors.php | 22 +++++++++---- app/Http/Controllers/Sales/Customers.php | 22 +++++++++---- app/Http/Controllers/Sales/Invoices.php | 22 +++++++++---- app/Http/Controllers/Sales/Revenues.php | 22 +++++++++---- resources/assets/js/views/common/imports.js | 31 +++++++++++++++++ .../views/common/import/create.blade.php | 33 ++++++++----------- webpack.mix.js | 3 +- 13 files changed, 198 insertions(+), 85 deletions(-) create mode 100644 resources/assets/js/views/common/imports.js diff --git a/app/Abstracts/Http/Controller.php b/app/Abstracts/Http/Controller.php index dfc1b9848..371a635fa 100644 --- a/app/Abstracts/Http/Controller.php +++ b/app/Abstracts/Http/Controller.php @@ -82,17 +82,29 @@ abstract class Controller extends BaseController * * @return mixed */ - public function importExcel($class, $request, $url) + public function importExcel($class, $request) { try { Excel::import($class, $request->file('import')); - } catch (SheetNotFoundException | ErrorException | Exception | Throwable $e) { - flash($e->getMessage())->error()->important(); - return redirect()->route('import.create', explode('/', $url)); + $response = [ + 'success' => true, + 'error' => false, + 'data' => null, + 'message' => '', + ]; + } catch (SheetNotFoundException | ErrorException | Exception | Throwable $e) { + $message = $e->getMessage(); + + $response = [ + 'success' => false, + 'error' => true, + 'data' => null, + 'message' => $message, + ]; } - return true; + return $response; } /** diff --git a/app/Http/Controllers/Banking/Transactions.php b/app/Http/Controllers/Banking/Transactions.php index b28cc5f46..3f19b0e12 100644 --- a/app/Http/Controllers/Banking/Transactions.php +++ b/app/Http/Controllers/Banking/Transactions.php @@ -42,13 +42,23 @@ class Transactions extends Controller */ public function import(ImportRequest $request) { - \Excel::import(new Import(), $request->file('import')); + $response = $this->importExcel(new Import, $request); - $message = trans('messages.success.imported', ['type' => trans_choice('general.transactions', 2)]); + if ($response['success']) { + $response['redirect'] = route('transactions.index'); - flash($message)->success(); + $message = trans('messages.success.imported', ['type' => trans_choice('general.transactions', 1)]); - return redirect()->route('transactions.index'); + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['banking', 'transactions']); + + $message = $response['message']; + + flash($message)->error()->important(); + } + + return response()->json($response); } /** diff --git a/app/Http/Controllers/Banking/Transfers.php b/app/Http/Controllers/Banking/Transfers.php index 4f37c97f8..32d3f2fe7 100644 --- a/app/Http/Controllers/Banking/Transfers.php +++ b/app/Http/Controllers/Banking/Transfers.php @@ -95,15 +95,23 @@ class Transfers extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'banking/transfers')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('transfers.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.transfers', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['banking', 'transfers']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.transfers', 2)]); - - flash($message)->success(); - - return redirect()->route('transfers.index'); + return response()->json($response); } /** diff --git a/app/Http/Controllers/Common/Items.php b/app/Http/Controllers/Common/Items.php index 942b43eca..f904b95fd 100644 --- a/app/Http/Controllers/Common/Items.php +++ b/app/Http/Controllers/Common/Items.php @@ -111,15 +111,23 @@ class Items extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'common/items')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('items.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.items', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['common', 'items']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.items', 2)]); - - flash($message)->success(); - - return redirect()->route('items.index'); + return response()->json($response); } /** diff --git a/app/Http/Controllers/Purchases/Bills.php b/app/Http/Controllers/Purchases/Bills.php index bf097307e..16f7d637f 100644 --- a/app/Http/Controllers/Purchases/Bills.php +++ b/app/Http/Controllers/Purchases/Bills.php @@ -128,15 +128,23 @@ class Bills extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'purchases/bills')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('bills.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.bills', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['purchases', 'bills']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.bills', 2)]); - - flash($message)->success(); - - return redirect()->route('bills.index'); + return response()->json($response); } /** diff --git a/app/Http/Controllers/Purchases/Payments.php b/app/Http/Controllers/Purchases/Payments.php index bf5b3225e..7a53c6415 100644 --- a/app/Http/Controllers/Purchases/Payments.php +++ b/app/Http/Controllers/Purchases/Payments.php @@ -134,15 +134,23 @@ class Payments extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'purchases/payments')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('payments.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.payments', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['purchases', 'payments']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.payments', 2)]); - - flash($message)->success(); - - return redirect()->route('payments.index'); + return response()->json($response); } /** diff --git a/app/Http/Controllers/Purchases/Vendors.php b/app/Http/Controllers/Purchases/Vendors.php index e0793ac16..b5bf6d05a 100644 --- a/app/Http/Controllers/Purchases/Vendors.php +++ b/app/Http/Controllers/Purchases/Vendors.php @@ -161,15 +161,23 @@ class Vendors extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'purchases/vendors')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('vendors.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.vendors', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['purchases', 'vendors']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.vendors', 2)]); - - flash($message)->success(); - - return redirect()->route('vendors.index'); + return response()->json($response); } /** diff --git a/app/Http/Controllers/Sales/Customers.php b/app/Http/Controllers/Sales/Customers.php index cac9b0a6b..ddcd21f16 100644 --- a/app/Http/Controllers/Sales/Customers.php +++ b/app/Http/Controllers/Sales/Customers.php @@ -159,15 +159,23 @@ class Customers extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'sales/customers')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('customers.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.customers', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['sales', 'customers']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.customers', 2)]); - - flash($message)->success(); - - return redirect()->route('customers.index'); + return response()->json($response); } /** diff --git a/app/Http/Controllers/Sales/Invoices.php b/app/Http/Controllers/Sales/Invoices.php index 94dbc8867..42f00c106 100644 --- a/app/Http/Controllers/Sales/Invoices.php +++ b/app/Http/Controllers/Sales/Invoices.php @@ -127,15 +127,23 @@ class Invoices extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'sales/invoices')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('invoices.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.invoices', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['sales', 'invoices']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.invoices', 2)]); - - flash($message)->success(); - - return redirect()->route('invoices.index'); + return response()->json($response); } /** diff --git a/app/Http/Controllers/Sales/Revenues.php b/app/Http/Controllers/Sales/Revenues.php index 6e761745e..43a3a3de2 100644 --- a/app/Http/Controllers/Sales/Revenues.php +++ b/app/Http/Controllers/Sales/Revenues.php @@ -134,15 +134,23 @@ class Revenues extends Controller */ public function import(ImportRequest $request) { - if (true !== $result = $this->importExcel(new Import, $request, 'sales/revenues')) { - return $result; + $response = $this->importExcel(new Import, $request); + + if ($response['success']) { + $response['redirect'] = route('revenues.index'); + + $message = trans('messages.success.imported', ['type' => trans_choice('general.revenues', 1)]); + + flash($message)->success(); + } else { + $response['redirect'] = route('import.create', ['sales', 'revenues']); + + $message = $response['message']; + + flash($message)->error()->important(); } - $message = trans('messages.success.imported', ['type' => trans_choice('general.revenues', 2)]); - - flash($message)->success(); - - return redirect()->route('revenues.index'); + return response()->json($response); } /** diff --git a/resources/assets/js/views/common/imports.js b/resources/assets/js/views/common/imports.js new file mode 100644 index 000000000..a386f0800 --- /dev/null +++ b/resources/assets/js/views/common/imports.js @@ -0,0 +1,31 @@ +/** + * First we will load all of this project's JavaScript dependencies which + * includes Vue and other libraries. It is a great starting point when + * building robust, powerful web applications using Vue and Laravel. + */ + +require('../../bootstrap'); + +import Vue from 'vue'; + +import DashboardPlugin from '../../plugins/dashboard-plugin'; + +import Global from '../../mixins/global'; +import Form from './../../plugins/form'; + +// plugin setup +Vue.use(DashboardPlugin); + +const app = new Vue({ + el: '#app', + + mixins: [ + Global + ], + + data: function () { + return { + form: new Form('import'), + } + } +}); diff --git a/resources/views/common/import/create.blade.php b/resources/views/common/import/create.blade.php index b90ff025e..c8b62a05f 100644 --- a/resources/views/common/import/create.blade.php +++ b/resources/views/common/import/create.blade.php @@ -6,9 +6,13 @@
@php $form_open = [ + 'id' => 'import', + '@submit.prevent' => 'onSubmit', + '@keydown' => 'form.errors.clear($event.target.name)', 'files' => true, 'role' => 'form', - 'class' => 'form-loading-button' + 'class' => 'form-loading-button', + 'novalidate' => true ]; if (!empty($route)) { @@ -26,24 +30,9 @@ {!! trans('import.message', ['link' => url('public/files/import/' . $type . '.xlsx')]) !!}
- - @stack('import_input_start') -
-
-
- - -
-
-
-
- ... -
-
- {!! $errors->first('import', '

:message

') !!} -
- @stack('import_input_end') + {{ Form::fileGroup('import', '', 'plus', ['dropzone-class' => 'form-file', 'options' => ['acceptedFiles' => '.xls,.xlsx']], null, 'col-md-12') }} + {!! Form::close() !!} @endsection + +@push('scripts_start') + +@endpush diff --git a/webpack.mix.js b/webpack.mix.js index 4d1cf291e..f1081e3cd 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -38,10 +38,11 @@ mix .js('resources/assets/js/views/banking/reconciliations.js', 'public/js/banking') // Common - .js('resources/assets/js/views/common/items.js', 'public/js/common') .js('resources/assets/js/views/common/companies.js', 'public/js/common') .js('resources/assets/js/views/common/dashboards.js', 'public/js/common') .js('resources/assets/js/views/common/documents.js', 'public/js/common') + .js('resources/assets/js/views/common/imports.js', 'public/js/common') + .js('resources/assets/js/views/common/items.js', 'public/js/common') .js('resources/assets/js/views/common/reports.js', 'public/js/common') .js('resources/assets/js/views/common/search.js', 'public/js/common')