akaunting/app/Abstracts/BulkAction.php

233 lines
5.8 KiB
PHP
Raw Normal View History

2019-11-16 10:21:14 +03:00
<?php
namespace App\Abstracts;
2019-12-23 12:46:00 +03:00
use App\Jobs\Common\DeleteContact;
use App\Jobs\Common\UpdateContact;
use App\Jobs\Banking\DeleteTransaction;
2019-12-22 15:58:48 +03:00
use App\Traits\Jobs;
use App\Traits\Relationships;
2021-05-23 17:13:13 +03:00
use App\Utilities\Export;
use App\Utilities\Import;
2021-06-27 22:08:02 +03:00
use Illuminate\Support\Arr;
2019-11-16 10:21:14 +03:00
2019-11-18 21:51:19 +03:00
abstract class BulkAction
2019-11-16 10:21:14 +03:00
{
2019-12-22 15:58:48 +03:00
use Jobs, Relationships;
2019-11-16 10:21:14 +03:00
public $model = false;
public $actions = [
2022-06-01 10:15:55 +03:00
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-common-items',
2019-11-16 10:21:14 +03:00
],
2022-06-01 10:15:55 +03:00
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-common-items',
2019-12-23 12:46:00 +03:00
],
2022-06-01 10:15:55 +03:00
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-common-items',
2019-11-16 10:21:14 +03:00
],
2022-06-01 10:15:55 +03:00
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.export',
'type' => 'download'
2019-11-16 10:21:14 +03:00
],
];
2022-06-01 10:15:55 +03:00
public $icons = [
'enable' => 'check_circle',
'disable' => 'hide_source',
'delete' => 'delete',
2022-09-19 17:01:09 +03:00
'duplicate' => 'file_copy',
2022-06-01 10:15:55 +03:00
'export' => 'file_download',
'reconcile' => 'published_with_changes',
'unreconcile' => 'layers_clear',
'received' => 'call_received',
'cancelled' => 'cancel',
'sent' => 'send',
'approved' => 'approval',
'refused' => 'do_not_disturb_on',
'issued' => 'mark_email_read',
'confirmed' => 'thumb_up_alt',
];
public $messages = [
'general' => 'bulk_actions.success.general',
'enable' => 'messages.success.enabled',
'disable' => 'messages.success.disabled',
'delete' => 'messages.success.deleted',
'duplicate' => 'messages.success.duplicated',
'invite' => 'messages.success.invited',
'end' => 'messages.success.ended',
];
2021-06-27 22:08:02 +03:00
public function getSelectedRecords($request, $relationships = null)
2019-12-23 12:46:00 +03:00
{
2021-06-27 22:08:02 +03:00
if (empty($relationships)) {
$model = $this->model::query();
} else {
$relationships = Arr::wrap($relationships);
$model = $this->model::with($relationships);
}
return $model->find($this->getSelectedInput($request));
2019-12-23 12:46:00 +03:00
}
public function getSelectedInput($request)
{
return $request->get('selected', []);
}
2019-11-16 10:21:14 +03:00
/**
* Duplicate the specified resource.
*
* @param $request
*
* @return Response
*/
public function duplicate($request)
{
2019-12-23 12:46:00 +03:00
$items = $this->getSelectedRecords($request);
2019-11-16 10:21:14 +03:00
foreach ($items as $item) {
$item->duplicate();
}
}
/**
* Enable the specified resource.
*
* @param $request
*
* @return Response
*/
public function enable($request)
{
2019-12-23 12:46:00 +03:00
$items = $this->getSelectedRecords($request);
2019-11-16 10:21:14 +03:00
foreach ($items as $item) {
2020-11-13 15:37:46 +03:00
$item->enabled = true;
2019-11-16 10:21:14 +03:00
$item->save();
}
}
/**
* Disable the specified resource.
*
* @param $request
*
* @return Response
*/
public function disable($request)
{
2019-12-23 12:46:00 +03:00
$items = $this->getSelectedRecords($request);
2019-11-16 10:21:14 +03:00
foreach ($items as $item) {
2020-11-13 15:37:46 +03:00
$item->enabled = false;
2019-11-16 10:21:14 +03:00
$item->save();
}
}
/**
* Remove the specified resource from storage.
*
* @param $request
*
* @return Response
*/
public function delete($request)
{
$this->destroy($request);
}
/**
* Remove the specified resource from storage.
*
* @param $request
*
* @return Response
*/
public function destroy($request)
{
2019-12-23 12:46:00 +03:00
$items = $this->getSelectedRecords($request);
2019-11-16 10:21:14 +03:00
foreach ($items as $item) {
$item->delete();
}
}
2019-12-23 12:46:00 +03:00
public function disableContacts($request)
{
2021-06-27 22:08:02 +03:00
$contacts = $this->getSelectedRecords($request, 'user');
2019-12-23 12:46:00 +03:00
foreach ($contacts as $contact) {
try {
$this->dispatch(new UpdateContact($contact, request()->merge(['enabled' => 0])));
} catch (\Exception $e) {
flash($e->getMessage())->error()->important();
2019-12-23 12:46:00 +03:00
}
}
}
public function deleteContacts($request)
{
2021-06-27 22:08:02 +03:00
$contacts = $this->getSelectedRecords($request, 'user');
2019-12-23 12:46:00 +03:00
foreach ($contacts as $contact) {
try {
$this->dispatch(new DeleteContact($contact));
} catch (\Exception $e) {
flash($e->getMessage())->error()->important();
2019-12-23 12:46:00 +03:00
}
}
}
public function deleteTransactions($request)
{
2021-06-27 22:08:02 +03:00
$transactions = $this->getSelectedRecords($request, 'category');
2019-12-23 12:46:00 +03:00
foreach ($transactions as $transaction) {
try {
$this->dispatch(new DeleteTransaction($transaction));
} catch (\Exception $e) {
flash($e->getMessage())->error()->important();
2019-12-23 12:46:00 +03:00
}
}
}
2021-05-23 17:13:13 +03:00
/**
* Import the excel file or catch errors
*
* @param $class
* @param $request
* @param $translation
*
* @return array
*/
public function importExcel($class, $request, $translation)
{
return Import::fromExcel($class, $request, $translation);
}
/**
* Export the excel file or catch errors
*
* @param $class
* @param $translation
* @param $extension
*
* @return mixed
*/
public function exportExcel($class, $translation, $extension = 'xlsx')
{
return Export::toExcel($class, $translation, $extension);
}
2019-11-16 10:21:14 +03:00
}