diff --git a/app/Abstracts/Http/Controller.php b/app/Abstracts/Http/Controller.php index ce3a6b3a4..dfc1b9848 100644 --- a/app/Abstracts/Http/Controller.php +++ b/app/Abstracts/Http/Controller.php @@ -6,12 +6,18 @@ use App\Abstracts\Http\Response; use App\Traits\Jobs; use App\Traits\Permissions; use App\Traits\Relationships; +use Exception; +use ErrorException; use Illuminate\Database\Eloquent\Collection; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Pagination\Paginator; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Routing\Controller as BaseController; +use Illuminate\Support\Str; +use Maatwebsite\Excel\Exceptions\SheetNotFoundException; +use Maatwebsite\Excel\Facades\Excel; +use Throwable; abstract class Controller extends BaseController { @@ -66,4 +72,45 @@ abstract class Controller extends BaseController return $response; } + + /** + * Import the excel file or catch errors + * + * @param $class + * @param $request + * @param $url + * + * @return mixed + */ + public function importExcel($class, $request, $url) + { + 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)); + } + + return true; + } + + /** + * Export the excel file or catch errors + * + * @param $class + * @param $file_name + * + * @return mixed + */ + public function exportExcel($class, $file_name, $extension = 'xlsx') + { + try { + return Excel::download($class, Str::filename($file_name) . '.' . $extension); + } catch (ErrorException | Exception | Throwable $e) { + flash($e->getMessage())->error()->important(); + + return back(); + } + } } diff --git a/app/Http/Controllers/Banking/Transactions.php b/app/Http/Controllers/Banking/Transactions.php index 0daceef6a..b28cc5f46 100644 --- a/app/Http/Controllers/Banking/Transactions.php +++ b/app/Http/Controllers/Banking/Transactions.php @@ -84,6 +84,6 @@ class Transactions extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.transactions', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.transactions', 2)); } } diff --git a/app/Http/Controllers/Banking/Transfers.php b/app/Http/Controllers/Banking/Transfers.php index 3eac88ee6..70c6fc812 100644 --- a/app/Http/Controllers/Banking/Transfers.php +++ b/app/Http/Controllers/Banking/Transfers.php @@ -139,6 +139,26 @@ class Transfers extends Controller return response()->json($response); } + /** + * Import the specified resource. + * + * @param ImportRequest $request + * + * @return Response + */ + public function import(ImportRequest $request) + { + if (true !== $result = $this->importExcel(new Import, $request, 'banking/transfers')) { + return $result; + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.transfers', 2)]); + + flash($message)->success(); + + return redirect()->route('transfers.index'); + } + /** * Show the form for editing the specified resource. * @@ -222,24 +242,6 @@ class Transfers extends Controller return response()->json($response); } - /** - * Import the specified resource. - * - * @param ImportRequest $request - * - * @return Response - */ - public function import(ImportRequest $request) - { - \Excel::import(new Import(), $request->file('import')); - - $message = trans('messages.success.imported', ['type' => trans_choice('general.transfers', 2)]); - - flash($message)->success(); - - return redirect()->route('transfers.index'); - } - /** * Export the specified resource. * @@ -247,6 +249,6 @@ class Transfers extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.transfers', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.transfers', 2)); } } diff --git a/app/Http/Controllers/Common/Items.php b/app/Http/Controllers/Common/Items.php index d44a7863e..942b43eca 100644 --- a/app/Http/Controllers/Common/Items.php +++ b/app/Http/Controllers/Common/Items.php @@ -111,7 +111,9 @@ class Items extends Controller */ public function import(ImportRequest $request) { - \Excel::import(new Import(), $request->file('import')); + if (true !== $result = $this->importExcel(new Import, $request, 'common/items')) { + return $result; + } $message = trans('messages.success.imported', ['type' => trans_choice('general.items', 2)]); @@ -237,7 +239,7 @@ class Items extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.items', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.items', 2)); } public function autocomplete() diff --git a/app/Http/Controllers/Purchases/Bills.php b/app/Http/Controllers/Purchases/Bills.php index eeaf03c03..bf097307e 100644 --- a/app/Http/Controllers/Purchases/Bills.php +++ b/app/Http/Controllers/Purchases/Bills.php @@ -128,12 +128,8 @@ class Bills extends Controller */ public function import(ImportRequest $request) { - try { - \Excel::import(new Import(), $request->file('import')); - } catch (\Maatwebsite\Excel\Exceptions\SheetNotFoundException $e) { - flash($e->getMessage())->error()->important(); - - return redirect()->route('import.create', ['purchases', 'bills']); + if (true !== $result = $this->importExcel(new Import, $request, 'purchases/bills')) { + return $result; } $message = trans('messages.success.imported', ['type' => trans_choice('general.bills', 2)]); @@ -217,7 +213,7 @@ class Bills extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.bills', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.bills', 2)); } /** diff --git a/app/Http/Controllers/Purchases/Payments.php b/app/Http/Controllers/Purchases/Payments.php index 5c4c73d41..f3980f8cd 100644 --- a/app/Http/Controllers/Purchases/Payments.php +++ b/app/Http/Controllers/Purchases/Payments.php @@ -124,7 +124,9 @@ class Payments extends Controller */ public function import(ImportRequest $request) { - \Excel::import(new Import(), $request->file('import')); + if (true !== $result = $this->importExcel(new Import, $request, 'purchases/payments')) { + return $result; + } $message = trans('messages.success.imported', ['type' => trans_choice('general.payments', 2)]); @@ -229,6 +231,6 @@ class Payments extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.payments', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.payments', 2)); } } diff --git a/app/Http/Controllers/Purchases/Vendors.php b/app/Http/Controllers/Purchases/Vendors.php index 72518602c..e0793ac16 100644 --- a/app/Http/Controllers/Purchases/Vendors.php +++ b/app/Http/Controllers/Purchases/Vendors.php @@ -161,7 +161,9 @@ class Vendors extends Controller */ public function import(ImportRequest $request) { - \Excel::import(new Import(), $request->file('import')); + if (true !== $result = $this->importExcel(new Import, $request, 'purchases/vendors')) { + return $result; + } $message = trans('messages.success.imported', ['type' => trans_choice('general.vendors', 2)]); @@ -282,7 +284,7 @@ class Vendors extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.vendors', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.vendors', 2)); } public function currency(Contact $vendor) diff --git a/app/Http/Controllers/Sales/Customers.php b/app/Http/Controllers/Sales/Customers.php index aea2f7bfe..cac9b0a6b 100644 --- a/app/Http/Controllers/Sales/Customers.php +++ b/app/Http/Controllers/Sales/Customers.php @@ -159,7 +159,9 @@ class Customers extends Controller */ public function import(ImportRequest $request) { - \Excel::import(new Import(), $request->file('import')); + if (true !== $result = $this->importExcel(new Import, $request, 'sales/customers')) { + return $result; + } $message = trans('messages.success.imported', ['type' => trans_choice('general.customers', 2)]); @@ -280,7 +282,7 @@ class Customers extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.customers', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.customers', 2)); } public function currency(Contact $customer) diff --git a/app/Http/Controllers/Sales/Invoices.php b/app/Http/Controllers/Sales/Invoices.php index 310b16ebd..94dbc8867 100644 --- a/app/Http/Controllers/Sales/Invoices.php +++ b/app/Http/Controllers/Sales/Invoices.php @@ -13,7 +13,6 @@ use App\Jobs\Document\DuplicateDocument; use App\Jobs\Document\UpdateDocument; use App\Models\Document\Document; use App\Notifications\Sale\Invoice as Notification; -use App\Models\Setting\Currency; use App\Traits\Documents; use File; @@ -128,12 +127,8 @@ class Invoices extends Controller */ public function import(ImportRequest $request) { - try { - \Excel::import(new Import(), $request->file('import')); - } catch (\Maatwebsite\Excel\Exceptions\SheetNotFoundException $e) { - flash($e->getMessage())->error()->important(); - - return redirect()->route('import.create', ['sales', 'invoices']); + if (true !== $result = $this->importExcel(new Import, $request, 'sales/invoices')) { + return $result; } $message = trans('messages.success.imported', ['type' => trans_choice('general.invoices', 2)]); @@ -217,7 +212,7 @@ class Invoices extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.invoices', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.invoices', 2)); } /** diff --git a/app/Http/Controllers/Sales/Revenues.php b/app/Http/Controllers/Sales/Revenues.php index 6f5bad53f..15aead9bf 100644 --- a/app/Http/Controllers/Sales/Revenues.php +++ b/app/Http/Controllers/Sales/Revenues.php @@ -124,7 +124,9 @@ class Revenues extends Controller */ public function import(ImportRequest $request) { - \Excel::import(new Import(), $request->file('import')); + if (true !== $result = $this->importExcel(new Import, $request, 'sales/revenues')) { + return $result; + } $message = trans('messages.success.imported', ['type' => trans_choice('general.revenues', 2)]); @@ -229,6 +231,6 @@ class Revenues extends Controller */ public function export() { - return \Excel::download(new Export(), \Str::filename(trans_choice('general.revenues', 2)) . '.xlsx'); + return $this->exportExcel(new Export, trans_choice('general.revenues', 2)); } } diff --git a/app/Imports/Sales/Invoices.php b/app/Imports/Sales/Invoices.php index 863381dac..ad99d8689 100644 --- a/app/Imports/Sales/Invoices.php +++ b/app/Imports/Sales/Invoices.php @@ -12,7 +12,6 @@ use Maatwebsite\Excel\Concerns\WithMultipleSheets; class Invoices implements WithMultipleSheets { - public function sheets(): array { return [