From 9abda76d22eb3f68ba3864888bcb63ff60d59628 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Tue, 22 Sep 2020 00:37:00 +0300 Subject: [PATCH] BulkAction re-factoring for module use core bulk action --- app/Abstracts/BulkAction.php | 1 + app/BulkActions/Common/Items.php | 5 + app/BulkActions/Purchases/Bills.php | 1 + app/BulkActions/Purchases/Payments.php | 1 + app/BulkActions/Purchases/Vendors.php | 1 + app/BulkActions/Sales/Customers.php | 1 + app/BulkActions/Sales/Invoices.php | 1 + app/BulkActions/Sales/Revenues.php | 1 + app/Events/Common/BulkActionsAdding.php | 22 +++ app/Http/ViewComposers/Index.php | 16 +- resources/assets/js/plugins/bulk-action.js | 137 ++++++++++-------- .../form/bulk_action_row_group.blade.php | 10 ++ 12 files changed, 136 insertions(+), 61 deletions(-) create mode 100644 app/Events/Common/BulkActionsAdding.php diff --git a/app/Abstracts/BulkAction.php b/app/Abstracts/BulkAction.php index 2cdaeb72e..2493fedbc 100644 --- a/app/Abstracts/BulkAction.php +++ b/app/Abstracts/BulkAction.php @@ -34,6 +34,7 @@ abstract class BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download' ], ]; diff --git a/app/BulkActions/Common/Items.php b/app/BulkActions/Common/Items.php index 3454ea560..815256a5f 100644 --- a/app/BulkActions/Common/Items.php +++ b/app/BulkActions/Common/Items.php @@ -15,11 +15,15 @@ class Items extends BulkAction 'enable' => [ 'name' => 'general.enable', 'message' => 'bulk_actions.message.enable', + 'path' => ['group' => 'common', 'type' => 'items'], + 'type' => '*', 'permission' => 'update-common-items', ], 'disable' => [ 'name' => 'general.disable', 'message' => 'bulk_actions.message.disable', + 'path' => ['group' => 'common', 'type' => 'items'], + 'type' => '*', 'permission' => 'update-common-items', ], 'delete' => [ @@ -30,6 +34,7 @@ class Items extends BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download', ], ]; diff --git a/app/BulkActions/Purchases/Bills.php b/app/BulkActions/Purchases/Bills.php index 6b0088646..a8ea511f2 100644 --- a/app/BulkActions/Purchases/Bills.php +++ b/app/BulkActions/Purchases/Bills.php @@ -33,6 +33,7 @@ class Bills extends BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download', ], ]; diff --git a/app/BulkActions/Purchases/Payments.php b/app/BulkActions/Purchases/Payments.php index 770e0c8dc..4cf2d1b6a 100644 --- a/app/BulkActions/Purchases/Payments.php +++ b/app/BulkActions/Purchases/Payments.php @@ -14,6 +14,7 @@ class Payments extends BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download', ], 'delete' => [ 'name' => 'general.delete', diff --git a/app/BulkActions/Purchases/Vendors.php b/app/BulkActions/Purchases/Vendors.php index 25d4eda9c..7f6040ea0 100644 --- a/app/BulkActions/Purchases/Vendors.php +++ b/app/BulkActions/Purchases/Vendors.php @@ -29,6 +29,7 @@ class Vendors extends BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download', ], ]; diff --git a/app/BulkActions/Sales/Customers.php b/app/BulkActions/Sales/Customers.php index 7dcaeae23..0855c100a 100644 --- a/app/BulkActions/Sales/Customers.php +++ b/app/BulkActions/Sales/Customers.php @@ -29,6 +29,7 @@ class Customers extends BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download', ], ]; diff --git a/app/BulkActions/Sales/Invoices.php b/app/BulkActions/Sales/Invoices.php index 5d8e7dc21..46a0ba484 100644 --- a/app/BulkActions/Sales/Invoices.php +++ b/app/BulkActions/Sales/Invoices.php @@ -39,6 +39,7 @@ class Invoices extends BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download', ], ]; diff --git a/app/BulkActions/Sales/Revenues.php b/app/BulkActions/Sales/Revenues.php index 218694443..ebb07f795 100644 --- a/app/BulkActions/Sales/Revenues.php +++ b/app/BulkActions/Sales/Revenues.php @@ -19,6 +19,7 @@ class Revenues extends BulkAction 'export' => [ 'name' => 'general.export', 'message' => 'bulk_actions.message.export', + 'type' => 'download', ], ]; diff --git a/app/Events/Common/BulkActionsAdding.php b/app/Events/Common/BulkActionsAdding.php new file mode 100644 index 000000000..ecf26b64c --- /dev/null +++ b/app/Events/Common/BulkActionsAdding.php @@ -0,0 +1,22 @@ +bulk_action = $bulk_action; + } +} diff --git a/app/Http/ViewComposers/Index.php b/app/Http/ViewComposers/Index.php index 5fe668f31..2c40908f2 100644 --- a/app/Http/ViewComposers/Index.php +++ b/app/Http/ViewComposers/Index.php @@ -3,6 +3,7 @@ namespace App\Http\ViewComposers; use Akaunting\Module\Module; +use App\Events\Common\BulkActionsAdding; use Date; use Illuminate\Support\Str; use Illuminate\View\View; @@ -67,10 +68,19 @@ class Index $class_name = 'App\BulkActions\\' . $file_name; } - if (!class_exists($class_name)) { - return; + if (class_exists($class_name)) { + event(new BulkActionsAdding(app($class_name))); + + $bulk_actions = app($class_name)->actions; + } else { + $b = new \stdClass(); + $b->actions = []; + + event(new BulkActionsAdding($b)); + + $bulk_actions = $b->actions; } - $view->with(['bulk_actions' => app($class_name)->actions]); + $view->with(['bulk_actions' => $bulk_actions]); } } diff --git a/resources/assets/js/plugins/bulk-action.js b/resources/assets/js/plugins/bulk-action.js index 61abe9750..e82770462 100644 --- a/resources/assets/js/plugins/bulk-action.js +++ b/resources/assets/js/plugins/bulk-action.js @@ -12,6 +12,8 @@ export default class BulkAction { this['value'] = '*'; // Select action message this['message'] = ''; + // Action type + this['type'] = ''; // Bulk action view status this['show'] = false; // Bulk action modal status @@ -63,6 +65,18 @@ export default class BulkAction { this.message = ''; } + this.path = document.getElementsByName("bulk_action_path")[0].getAttribute('value'); + + if (event.target.options[event.target.options.selectedIndex].dataset.path) { + this.path = event.target.options[event.target.options.selectedIndex].dataset.path; + } + + this.type = '*'; + + if (event.target.options[event.target.options.selectedIndex].dataset.type) { + this.type = event.target.options[event.target.options.selectedIndex].dataset.type; + } + return this.message; } @@ -72,72 +86,79 @@ export default class BulkAction { return; } - var path = document.getElementsByName("bulk_action_path")[0].getAttribute('value'); - this.loading = true; - if (this.value != 'export') { - window.axios.post(path, { - 'handle': this.value, - 'selected': this.selected - }) - .then(response => { - if (response.data.redirect) { - window.location.reload(false); - } - }) - .catch(error => { - //this.loading = false; - //this.modal = false; + // bwfore version 2.0.23 + if (this.value == 'export') { + this.type = 'download'; + } - //window.location.reload(false); - }) - .finally(function () { - //window.location.reload(false); - }); - } else { - window.axios({ - url: path, - method: 'POST', - data:{ + switch (this.type) { + case 'download': + let download_promise = Promise.resolve(window.axios({ + url: this.path, + method: 'POST', + data:{ + 'handle': this.value, + 'selected': this.selected + }, + responseType: 'blob', + })); + + download_promise.then((response) => { + const blob = new Blob([response.data], {type: response.data.type}); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + + link.href = url; + + const contentDisposition = response.headers['content-disposition']; + + let fileName = 'unknown'; + + if (contentDisposition) { + const fileNameMatch = contentDisposition.match(/filename=(.+)/); + + if (fileNameMatch.length === 2) { + fileName = fileNameMatch[1]; + } + } + + link.setAttribute('download', fileName); + + document.body.appendChild(link); + + link.click(); + link.remove(); + + window.URL.revokeObjectURL(url); + + this.loading = false; + this.modal = false; + this.value = '*'; + this.clear(); + }); + break; + default: + let type_promise = Promise.resolve(window.axios.post(this.path, { 'handle': this.value, 'selected': this.selected - }, - responseType: 'blob', - }).then((response) => { - console.log(response.data); - const blob = new Blob([response.data], {type: response.data.type}); - const url = window.URL.createObjectURL(blob); - const link = document.createElement('a'); + })); - link.href = url; - - const contentDisposition = response.headers['content-disposition']; - - let fileName = 'unknown'; - - if (contentDisposition) { - const fileNameMatch = contentDisposition.match(/filename=(.+)/); - - if (fileNameMatch.length === 2) { - fileName = fileNameMatch[1]; + type_promise.then(response => { + if (response.data.redirect) { + window.location.reload(false); } - } + }) + .catch(error => { + //this.loading = false; + //this.modal = false; - link.setAttribute('download', fileName); - - document.body.appendChild(link); - - link.click(); - link.remove(); - - window.URL.revokeObjectURL(url); - - this.loading = false; - this.modal = false; - this.value = '*'; - this.clear(); - }); + //window.location.reload(false); + }) + .finally(function () { + //window.location.reload(false); + }); } } diff --git a/resources/views/partials/form/bulk_action_row_group.blade.php b/resources/views/partials/form/bulk_action_row_group.blade.php index 0929ce30f..d6dfe063d 100644 --- a/resources/views/partials/form/bulk_action_row_group.blade.php +++ b/resources/views/partials/form/bulk_action_row_group.blade.php @@ -48,6 +48,16 @@ @if(!empty($action['message'])) data-message="{{ trans_choice($action['message'], 2, ['type' => $text]) }}" @endif + @if(isset($action['path']) && !empty($action['path'])) + data-path="{{ route('bulk-actions.action', $action['path']) }}" + @else + data-path="" + @endif + @if(isset($action['type']) && !empty($action['type'])) + data-type="{{ $action['type'] }}" + @else + data-type="" + @endif >{{ trans($action['name']) }} @endif @endforeach