refactored bulk actions

This commit is contained in:
denisdulici 2019-12-23 12:46:00 +03:00
parent d4efb90251
commit a3dc7b8bb7
20 changed files with 342 additions and 681 deletions

View File

@ -2,6 +2,9 @@
namespace App\Abstracts;
use App\Jobs\Common\DeleteContact;
use App\Jobs\Common\UpdateContact;
use App\Jobs\Banking\DeleteTransaction;
use App\Traits\Jobs;
use App\Traits\Relationships;
use Artisan;
@ -16,24 +19,34 @@ abstract class BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-common-items'
'permission' => 'update-common-items',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-common-items'
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.exports',
'permission' => 'update-common-items',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-common-items'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-common-items',
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.export',
],
];
public function getSelectedRecords($request)
{
return $this->model::find($this->getSelectedInput($request));
}
public function getSelectedInput($request)
{
return $request->get('selected', []);
}
/**
* Duplicate the specified resource.
*
@ -43,9 +56,7 @@ abstract class BulkAction
*/
public function duplicate($request)
{
$selected = $request->get('selected', []);
$items = $this->model::find($selected);
$items = $this->getSelectedRecords($request);
foreach ($items as $item) {
$item->duplicate();
@ -61,9 +72,7 @@ abstract class BulkAction
*/
public function enable($request)
{
$selected = $request->get('selected', []);
$items = $this->model::find($selected);
$items = $this->getSelectedRecords($request);
foreach ($items as $item) {
$item->enabled = 1;
@ -80,9 +89,7 @@ abstract class BulkAction
*/
public function disable($request)
{
$selected = $request->get('selected', []);
$items = $this->model::find($selected);
$items = $this->getSelectedRecords($request);
foreach ($items as $item) {
$item->enabled = 0;
@ -111,9 +118,7 @@ abstract class BulkAction
*/
public function destroy($request)
{
$selected = $request->get('selected', []);
$items = $this->model::find($selected);
$items = $this->getSelectedRecords($request);
foreach ($items as $item) {
$item->delete();
@ -121,4 +126,43 @@ abstract class BulkAction
Artisan::call('cache:clear');
}
public function disableContacts($request)
{
$contacts = $this->getSelectedRecords($request);
foreach ($contacts as $contact) {
try {
$this->dispatch(new UpdateContact($contact, request()->merge(['enabled' => 0])));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function deleteContacts($request)
{
$contacts = $this->getSelectedRecords($request);
foreach ($contacts as $contact) {
try {
$this->dispatch(new DeleteContact($contact));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function deleteTransactions($request)
{
$transactions = $this->getSelectedRecords($request);
foreach ($transactions as $transaction) {
try {
$this->dispatch(new DeleteTransaction($transaction));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
}

View File

@ -12,8 +12,8 @@ class Permissions extends BulkAction
public $actions = [
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-auth-permissions'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-auth-permissions',
],
];
}

View File

@ -12,8 +12,8 @@ class Roles extends BulkAction
public $actions = [
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-auth-roles'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-auth-roles',
],
];
}

View File

@ -4,6 +4,7 @@ namespace App\BulkActions\Auth;
use App\Abstracts\BulkAction;
use App\Jobs\Auth\DeleteUser;
use App\Jobs\Auth\UpdateUser;
use App\Models\Auth\User;
class Users extends BulkAction
@ -14,54 +15,42 @@ class Users extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-auth-users'
'permission' => 'update-auth-users',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-auth-users'
'permission' => 'update-auth-users',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-auth-users'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-auth-users',
],
];
public function disable($request)
{
$selected = $request->get('selected', []);
$users = $this->model::find($selected);
$users = $this->getSelectedRecords($request);
foreach ($users as $user) {
// Can't disable yourself
if ($user->id == user()->id) {
continue;
//$this->response->errorMethodNotAllowed(trans('auth.error.self_delete'));
try {
$this->dispatch(new UpdateUser($user, $request->merge(['enabled' => 0])));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
$user->enabled = 0;
$user->save();
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$users = $this->model::find($selected);
$users = $this->getSelectedRecords($request);
foreach ($users as $user) {
try {
$this->dispatch(new DeleteUser($user));
} catch (\Exception $e) {
return $e->getMessage();
flash($e->getMessage())->error();
}
}
}

View File

@ -15,51 +15,42 @@ class Accounts extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-banking-accounts'
'permission' => 'update-banking-accounts',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-banking-accounts'
'permission' => 'update-banking-accounts',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-banking-accounts'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-banking-accounts',
],
];
public function disable($request)
{
$selected = $request->get('selected', []);
$accounts = $this->model::find($selected);
$accounts = $this->getSelectedRecords($request);
foreach ($accounts as $account) {
try {
$this->dispatch(new UpdateAccount($account, request()->merge(['enabled' => 1])));
$this->dispatch(new UpdateAccount($account, $request->merge(['enabled' => 0])));
} catch (\Exception $e) {
return $e->getMessage();
flash($e->getMessage())->error();
}
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$accounts = $this->model::find($selected);
$accounts = $this->getSelectedRecords($request);
foreach ($accounts as $account) {
try {
$this->dispatch(new DeleteAccount($account));
} catch (\Exception $e) {
return $e->getMessage();
flash($e->getMessage())->error();
}
}
}

View File

@ -14,25 +14,23 @@ class Reconciliations extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-banking-reconciliations'
'permission' => 'update-banking-reconciliations',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-banking-reconciliations'
'permission' => 'update-banking-reconciliations',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-banking-reconciliations'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-banking-reconciliations',
],
];
public function enable($request)
{
$selected = $request->get('selected', []);
$reconciliations = $this->model::find($selected);
$reconciliations = $this->getSelectedRecords($request);
foreach ($reconciliations as $reconciliation) {
$reconciliation->enabled = 1;
@ -49,9 +47,7 @@ class Reconciliations extends BulkAction
public function disable($request)
{
$selected = $request->get('selected', []);
$reconciliations = $this->model::find($selected);
$reconciliations = $this->getSelectedRecords($request);
foreach ($reconciliations as $reconciliation) {
$reconciliation->enabled = 0;
@ -66,16 +62,9 @@ class Reconciliations extends BulkAction
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$reconciliations = $this->model::find($selected);
$reconciliations = $this->getSelectedRecords($request);
foreach ($reconciliations as $reconciliation) {
$reconciliation->delete();

View File

@ -14,23 +14,20 @@ class Transfers extends BulkAction
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_action.message.deletes',
'permission' => 'delete-banking-transfers'
]
'permission' => 'delete-banking-transfers',
],
];
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$transfers = $this->model::find($selected);
$transfers = $this->getSelectedRecords($request);
foreach ($transfers as $transfer) {
$this->dispatch(new DeleteTransfer($transfer));
try {
$this->dispatch(new DeleteTransfer($transfer));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
}

View File

@ -3,6 +3,8 @@
namespace App\BulkActions\Common;
use App\Abstracts\BulkAction;
use App\Jobs\Common\DeleteCompany;
use App\Jobs\Common\UpdateCompany;
use App\Models\Common\Company;
class Companies extends BulkAction
@ -13,104 +15,56 @@ class Companies extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-common-companies'
'permission' => 'update-common-companies',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-common-companies'
'permission' => 'update-common-companies',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-common-companies'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-common-companies',
],
];
public function enable($request)
{
try {
$selected = $request->get('selected', []);
$companies = $this->getSelectedRecords($request);
$companies = $this->model::find($selected);
foreach ($companies as $company) {
// Check if user can access company
$this->owner($company);
$company->enabled = 1;
$company->save();
foreach ($companies as $company) {
try {
$this->dispatch(new UpdateCompany($company, $request->merge(['enabled' => 1])));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
$message = trans('messages.success.enabled', ['type' => $company->name]);
return $this->itemResponse($company->fresh(), new Transformer(), $message);
} catch (\HttpException $e) {
$this->response->errorUnauthorized(trans('companies.error.not_user_company'));
}
}
public function disable($request)
{
try {
$selected = $request->get('selected', []);
$companies = $this->getSelectedRecords($request);
$companies = $this->model::find($selected);
foreach ($companies as $company) {
// Check if user can access company
$this->owner($company);
$company->enabled = 0;
$company->save();
foreach ($companies as $company) {
try {
$this->dispatch(new UpdateCompany($company, $request->merge(['enabled' => 0])));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
} catch (\HttpException $e) {
$this->response->errorUnauthorized(trans('companies.error.not_user_company'));
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$companies = $this->model::find($selected);
$companies = $this->getSelectedRecords($request);
foreach ($companies as $company) {
// Can't delete active company
if ($company->id == session('company_id')) {
$content = trans('companies.error.delete_active');
return new Response($content, 422);
}
try {
// Check if user can access company
$this->owner($company);
$company->delete();
$message = trans('messages.success.deleted', ['type' => $company->name]);
flash($message)->success();
} catch (\HttpException $e) {
$this->response->errorUnauthorized(trans('companies.error.not_user_company'));
$this->dispatch(new DeleteCompany($company));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function owner(Company $company)
{
$companies = user()->companies()->pluck('id')->toArray();
if (in_array($company->id, $companies)) {
return new Response('');
}
$this->response->errorUnauthorized(trans('companies.error.not_user_company'));
}
}

View File

@ -4,6 +4,8 @@ namespace App\BulkActions\Common;
use App\Abstracts\BulkAction;
use App\Exports\Common\Items as Export;
use App\Jobs\Common\DeleteItem;
use App\Jobs\Common\UpdateItem;
use App\Models\Common\Item;
class Items extends BulkAction
@ -14,76 +16,46 @@ class Items extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-common-items'
'permission' => 'update-common-items',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-common-items'
'permission' => 'update-common-items',
],
'duplicate' => [
'name' => 'general.duplicate',
'message' => 'bulk_actions.message.duplicate',
'permission' => 'create-common-items',
'multiple' => true
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.exports',
'multiple' => true,
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-common-items'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-common-items',
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.export',
],
];
/**
* Remove the specified resource from storage.
*
* @param $id
*
* @return Response
*/
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$items = $this->model::find($selected);
$items = $this->getSelectedRecords($request);
foreach ($items as $item) {
$relationships = $this->countRelationships($item, [
'invoice_items' => 'invoices',
'bill_items' => 'bills',
]);
if (empty($relationships)) {
$item->delete();
$message = trans('messages.success.deleted', ['type' => $item->name]);
flash($message)->success();
} else {
$message = trans('messages.warning.deleted', ['name' => $item->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
try {
$this->dispatch(new DeleteItem($item));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
/**
* Export the specified resource.
*
* @return Response
*/
public function export($request)
{
$selected = $request->get('selected', []);
$selected = $this->getSelectedInput($request);
return \Excel::download(new Export($selected), trans_choice('general.items', 2) . '.xlsx');
}

View File

@ -4,9 +4,9 @@ namespace App\BulkActions\Expenses;
use App\Abstracts\BulkAction;
use App\Exports\Expenses\Bills as Export;
use App\Jobs\Expense\CreateBillHistory;
use App\Jobs\Expense\DeleteBill;
use App\Models\Expense\Bill;
use App\Models\Expense\BillHistory;
class Bills extends BulkAction
{
@ -14,88 +14,71 @@ class Bills extends BulkAction
public $actions = [
'received' => [
'name' => 'general.received',
'message' => '',
'permission' => 'update-expenses-bills'
'name' => 'bills.mark_received',
'message' => 'bulk_actions.message.received',
'permission' => 'update-expenses-bills',
],
'duplicate' => [
'name' => 'general.duplicate',
'message' => 'bulk_actions.message.duplicate',
'permission' => 'create-expenses-bills',
'multiple' => true
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.exports',
'multiple' => true,
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-expenses-bills'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-expenses-bills',
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.export',
],
];
public function duplicate($request)
{
$selected = $request->get('selected', []);
$bills = $this->model::find($selected);
foreach ($bills as $bill) {
$clone = $bill->duplicate();
// Add bill history
BillHistory::create([
'company_id' => session('company_id'),
'bill_id' => $clone->id,
'status_code' => 'draft',
'notify' => 0,
'description' => trans('messages.success.added', ['type' => $clone->bill_number]),
]);
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$bills = $this->model::find($selected);
foreach ($bills as $bill) {
$this->dispatch(new DeleteBill($bill));
}
}
public function export($request)
{
$selected = $request->get('selected', []);
return \Excel::download(new Export($selected), trans_choice('general.bills', 2) . '.xlsx');
}
public function received($request)
{
$selected = $request->get('selected', []);
$bills = $this->model::find($selected);
$bills = $this->getSelectedRecords($request);
foreach ($bills as $bill) {
$bill->bill_status_code = 'received';
$bill->save();
// Add bill history
BillHistory::create([
'company_id' => $bill->company_id,
'bill_id' => $bill->id,
'status_code' => 'received',
'notify' => 0,
'description' => trans('bills.mark_recevied'),
]);
$description = trans('bills.mark_recevied');
$this->dispatch(new CreateBillHistory($bill, 0, $description));
}
}
public function duplicate($request)
{
$bills = $this->getSelectedRecords($request);
foreach ($bills as $bill) {
$clone = $bill->duplicate();
$description = trans('messages.success.added', ['type' => $clone->bill_number]);
$this->dispatch(new CreateBillHistory($clone, 0, $description));
}
}
public function destroy($request)
{
$bills = $this->getSelectedRecords($request);
foreach ($bills as $bill) {
try {
$this->dispatch(new DeleteBill($bill));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function export($request)
{
$selected = $this->getSelectedInput($request);
return \Excel::download(new Export($selected), trans_choice('general.bills', 2) . '.xlsx');
}
}

View File

@ -5,7 +5,6 @@ namespace App\BulkActions\Expenses;
use App\Abstracts\BulkAction;
use App\Exports\Expenses\Payments as Export;
use App\Models\Banking\Transaction;
use App\Models\Setting\Category;
class Payments extends BulkAction
{
@ -16,60 +15,27 @@ class Payments extends BulkAction
'name' => 'general.duplicate',
'message' => 'bulk_actions.message.duplicate',
'permission' => 'create-expenses-payments',
'multiple' => true
'multiple' => true,
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.exports',
'message' => 'bulk_actions.message.export',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-expenses-payments'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-expenses-payments',
],
];
public function duplicate($request)
{
$selected = $request->get('selected', []);
$transactions = $this->model::find($selected);
foreach ($transactions as $transaction) {
$clone = $transaction->duplicate();
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$transactions = $this->model::find($selected);
foreach ($transactions as $transaction) {
if ($transaction->category->id != Category::transfer()) {
$type = $transaction->type;
$transaction->recurring()->delete();
$transaction->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.' . \Str::plural($type), 1)]);
flash($message)->success();
} else {
$this->response->errorUnauthorized();
}
}
$this->deleteTransactions($request);
}
public function export($request)
{
$selected = $request->get('selected', []);
$selected = $this->getSelectedInput($request);
return \Excel::download(new Export($selected), trans_choice('general.payments', 2) . '.xlsx');
}

View File

@ -4,6 +4,7 @@ namespace App\BulkActions\Expenses;
use App\Abstracts\BulkAction;
use App\Exports\Expenses\Vendors as Export;
use App\Jobs\Common\UpdateContact;
use App\Models\Common\Contact;
class Vendors extends BulkAction
@ -14,12 +15,12 @@ class Vendors extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-expenses-vendors'
'permission' => 'update-expenses-vendors',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-expenses-vendors'
'permission' => 'update-expenses-vendors',
],
'duplicate' => [
'name' => 'general.duplicate',
@ -27,70 +28,31 @@ class Vendors extends BulkAction
'permission' => 'create-expenses-vendors',
'multiple' => true
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.exports',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-expenses-vendors'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-expenses-vendors',
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.export',
],
];
public function duplicate($request)
public function disable($request)
{
$selected = $request->get('selected', []);
$contacts = $this->model::find($selected);
foreach ($contacts as $contact) {
$clone = $contact->duplicate();
}
}
public function delete($request)
{
$this->destroy($request);
$this->disableContacts($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$contacts = $this->model::find($selected);
foreach ($contacts as $contact) {
if (!$relationships = $this->getRelationships($contact)) {
$contact->delete();
$message = trans('messages.success.deleted', ['type' => $contact->name]);
flash($message)->success();
} else {
$message = trans('messages.warning.deleted', ['name' => $contact->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
}
}
$this->deleteContacts($request);
}
public function export($request)
{
$selected = $request->get('selected', []);
$selected = $this->getSelectedInput($request);
return \Excel::download(new Export($selected), trans_choice('general.vendors', 2) . '.xlsx');
}
protected function getRelationships($contact)
{
$rels = [
'bills' => 'bills',
'payments' => 'payments',
];
$relationships = $this->countRelationships($contact, $rels);
return $relationships;
}
}

View File

@ -14,12 +14,12 @@ class Customers extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-incomes-customers'
'permission' => 'update-incomes-customers',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-incomes-customers'
'permission' => 'update-incomes-customers',
],
'duplicate' => [
'name' => 'general.duplicate',
@ -27,70 +27,31 @@ class Customers extends BulkAction
'permission' => 'create-incomes-customers',
'multiple' => true
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-incomes-customers',
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.export',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-incomes-customers'
]
];
public function duplicate($request)
public function disable($request)
{
$selected = $request->get('selected', []);
$contacts = $this->model::find($selected);
foreach ($contacts as $contact) {
$clone = $contact->duplicate();
}
}
public function delete($request)
{
$this->destroy($request);
$this->disableContacts($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$contacts = $this->model::find($selected);
foreach ($contacts as $contact) {
if (!$relationships = $this->getRelationships($contact)) {
$contact->delete();
$message = trans('messages.success.deleted', ['type' => $contact->name]);
flash($message)->success();
} else {
$message = trans('messages.warning.deleted', ['name' => $contact->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
}
}
$this->deleteContacts($request);
}
public function export($request)
{
$selected = $request->get('selected', []);
$selected = $this->getSelectedInput($request);
return \Excel::download(new Export($selected), trans_choice('general.customers', 2) . '.xlsx');
}
protected function getRelationships($contact)
{
$rels = [
'invoices' => 'invoices',
'income_transactions' => 'transactions',
];
$relationships = $this->countRelationships($contact, $rels);
return $relationships;
}
}

View File

@ -9,7 +9,6 @@ use App\Events\Income\PaymentReceived;
use App\Exports\Incomes\Invoices as Export;
use App\Jobs\Income\DeleteInvoice;
use App\Models\Income\Invoice;
use Date;
class Invoices extends BulkAction
{
@ -17,37 +16,53 @@ class Invoices extends BulkAction
public $actions = [
'paid' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-incomes-invoices'
'name' => 'invoices.mark_paid',
'message' => 'bulk_actions.message.paid',
'permission' => 'update-incomes-invoices',
],
'sent' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-incomes-invoices'
'name' => 'invoice.mark_sent',
'message' => 'bulk_actions.message.sent',
'permission' => 'update-incomes-invoices',
],
'duplicate' => [
'name' => 'general.duplicate',
'message' => 'bulk_actions.message.duplicate',
'permission' => 'create-incomes-invoices',
'multiple' => true
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.exports',
'multiple' => true,
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-incomes-invoices'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-incomes-invoices',
],
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.export',
],
];
public function paid($request)
{
$invoices = $this->getSelectedRecords($request);
foreach ($invoices as $invoice) {
event(new PaymentReceived($invoice, []));
}
}
public function sent($request)
{
$invoices = $this->getSelectedRecords($request);
foreach ($invoices as $invoice) {
event(new InvoiceSent($invoice));
}
}
public function duplicate($request)
{
$selected = $request->get('selected', []);
$invoices = $this->model::find($selected);
$invoices = $this->getSelectedRecords($request);
foreach ($invoices as $invoice) {
$clone = $invoice->duplicate();
@ -63,43 +78,21 @@ class Invoices extends BulkAction
public function destroy($request)
{
$selected = $request->get('selected', []);
$invoices = $this->model::find($selected);
$invoices = $this->getSelectedRecords($request);
foreach ($invoices as $invoice) {
$this->dispatch(new DeleteInvoice($invoice));
try {
$this->dispatch(new DeleteInvoice($invoice));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function export($request)
{
$selected = $request->get('selected', []);
$selected = $this->getSelectedInput($request);
return \Excel::download(new Export($selected), trans_choice('general.invoices', 2) . '.xlsx');
}
public function sent($request)
{
$selected = $request->get('selected', []);
$invoices = $this->model::find($selected);
foreach ($invoices as $invoice) {
event(new InvoiceSent($invoice));
$message = trans('invoices.messages.marked_sent');
}
}
public function paid($request)
{
$selected = $request->get('selected', []);
$invoices = $this->model::find($selected);
foreach ($invoices as $invoice) {
event(new PaymentReceived($invoice, []));
}
}
}

View File

@ -5,7 +5,6 @@ namespace App\BulkActions\Incomes;
use App\Abstracts\BulkAction;
use App\Exports\Incomes\Revenues as Export;
use App\Models\Banking\Transaction;
use App\Models\Setting\Category;
class Revenues extends BulkAction
{
@ -14,62 +13,29 @@ class Revenues extends BulkAction
public $actions = [
'export' => [
'name' => 'general.export',
'message' => 'bulk_actions.message.exports',
'message' => 'bulk_actions.message.export',
],
'duplicate' => [
'name' => 'general.duplicate',
'message' => 'bulk_actions.message.duplicate',
'permission' => 'create-incomes-revenues',
'multiple' => true
'multiple' => true,
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-incomes-revenues'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-incomes-revenues',
],
];
public function duplicate($request)
{
$selected = $request->get('selected', []);
$transactions = $this->model::find($selected);
foreach ($transactions as $transaction) {
$clone = $transaction->duplicate();
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$transactions = $this->model::find($selected);
foreach ($transactions as $transaction) {
if ($transaction->category->id != Category::transfer()) {
$type = $transaction->type;
$transaction->recurring()->delete();
$transaction->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.' . \Str::plural($type), 1)]);
flash($message)->success();
} else {
$this->response->errorUnauthorized();
}
}
$this->deleteTransactions($request);
}
public function export($request)
{
$selected = $request->get('selected', []);
$selected = $this->getSelectedInput($request);
return \Excel::download(new Export($selected), trans_choice('general.revenues', 2) . '.xlsx');
}

View File

@ -3,6 +3,8 @@
namespace App\BulkActions\Settings;
use App\Abstracts\BulkAction;
use App\Jobs\Setting\DeleteCategory;
use App\Jobs\Setting\UpdateCategory;
use App\Models\Setting\Category;
class Categories extends BulkAction
@ -13,85 +15,43 @@ class Categories extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-settings-categories'
'permission' => 'update-settings-categories',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-settings-categories'
'permission' => 'update-settings-categories',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-settings-categories'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-settings-categories',
],
];
public function disable($request)
{
$selected = $request->get('selected', []);
$categories = $this->model::find($selected);
$categories = $this->getSelectedRecords($request);
foreach ($categories as $category) {
if ($relationships = $this->getRelationships($category)) {
$category->enabled = 0;
$category->save();
$message = trans('messages.success.disabled', ['type' => $category->name]);
flash($message)->success();
} else {
$message = trans('messages.warning.disabled', ['name' => $category->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
try {
$this->dispatch(new UpdateCategory($category, $request->merge(['enabled' => 0])));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$categories = $this->model::find($selected);
$categories = $this->getSelectedRecords($request);
foreach ($categories as $category) {
// Can not delete the last category by type
if (Category::where('type', $category->type)->count() == 1) {
$message = trans('messages.error.last_category', ['type' => strtolower(trans_choice('general.' . $category->type . 's', 1))]);
$this->response->errorUnauthorized($message);
}
if (!$relationships = $this->getRelationships($category)) {
$category->delete();
$message = trans('messages.success.deleted', ['type' => $category->name]);
return new Response($message);
} else {
$message = trans('messages.warning.deleted', ['name' => $category->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
try {
$this->dispatch(new DeleteCategory($category));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
protected function getRelationships($category)
{
$relationships = $this->countRelationships($category, [
'items' => 'items',
'invoices' => 'invoices',
'income_transacions' => 'transactions',
'bills' => 'bills',
'expense_transactions' => 'transactions',
]);
return $relationships;
}
}

View File

@ -3,6 +3,8 @@
namespace App\BulkActions\Settings;
use App\Abstracts\BulkAction;
use App\Jobs\Setting\DeleteCurrency;
use App\Jobs\Setting\UpdateCurrency;
use App\Models\Setting\Currency;
class Currencies extends BulkAction
@ -13,83 +15,43 @@ class Currencies extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-settings-currencies'
'permission' => 'update-settings-currencies',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-settings-currencies'
'permission' => 'update-settings-currencies',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-settings-currencies'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-settings-currencies',
],
];
public function disable($request)
{
$selected = $request->get('selected', []);
$currencies = $this->model::find($selected);
$currencies = $this->getSelectedRecords($request);
foreach ($currencies as $currency) {
if (!$relationships = $this->getRelationships($currency)) {
$currency->enabled = 0;
$currency->save();
$message = trans('messages.success.disabled', ['type' => $currency->name]);
return $this->itemResponse($currency->fresh(), new Transformer(), $message);
} else {
$message = trans('messages.warning.disabled', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
try {
$this->dispatch(new UpdateCurrency($currency, $request->merge(['enabled' => 0])));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$currencies = $this->model::find($selected);
$currencies = $this->getSelectedRecords($request);
foreach ($currencies as $currency) {
if (!$relationships = $this->getRelationships($currency)) {
$currency->delete();
$message = trans('messages.success.deleted', ['type' => $currency->name]);
flash($message)->success();
} else {
$message = trans('messages.warning.deleted', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
try {
$this->dispatch(new DeleteCurrency($currency));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
protected function getRelationships($currency)
{
$relationships = $this->countRelationships($currency, [
'accounts' => 'accounts',
'customers' => 'customers',
'invoices' => 'invoices',
'income_transactions' => 'transactions',
'bills' => 'bills',
'expense_transactions' => 'transactions',
]);
if ($currency->code == setting('default.currency')) {
$relationships[] = strtolower(trans_choice('general.companies', 1));
}
return $relationships;
}
}

View File

@ -3,6 +3,8 @@
namespace App\BulkActions\Settings;
use App\Abstracts\BulkAction;
use App\Jobs\Setting\DeleteTax;
use App\Jobs\Setting\UpdateTax;
use App\Models\Setting\Tax;
class Taxes extends BulkAction
@ -13,76 +15,43 @@ class Taxes extends BulkAction
'enable' => [
'name' => 'general.enable',
'message' => 'bulk_actions.message.enable',
'permission' => 'update-settings-taxes'
'permission' => 'update-settings-taxes',
],
'disable' => [
'name' => 'general.disable',
'message' => 'bulk_actions.message.disable',
'permission' => 'update-settings-taxes'
'permission' => 'update-settings-taxes',
],
'delete' => [
'name' => 'general.delete',
'message' => 'bulk_actions.message.deletes',
'permission' => 'delete-settings-taxes'
]
'message' => 'bulk_actions.message.delete',
'permission' => 'delete-settings-taxes',
],
];
public function disable($request)
{
$selected = $request->get('selected', []);
$taxes = $this->model::find($selected);
$taxes = $this->getSelectedRecords($request);
foreach ($taxes as $tax) {
if (!$relationships = $this->getRelationships($tax)) {
$tax->enabled = 0;
$tax->save();
$message = trans('messages.success.disabled', ['type' => $tax->name]);
return $this->itemResponse($tax->fresh(), new Transformer(), $message);
} else {
$message = trans('messages.warning.disabled', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
try {
$this->dispatch(new UpdateTax($tax, $request->merge(['enabled' => 0])));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
public function delete($request)
{
$this->destroy($request);
}
public function destroy($request)
{
$selected = $request->get('selected', []);
$taxes = $this->model::find($selected);
$taxes = $this->getSelectedRecords($request);
foreach ($taxes as $tax) {
if (!$relationships = $this->getRelationships($tax)) {
$tax->delete();
$message = trans('messages.success.deleted', ['type' => $tax->name]);
flash($message)->success();
} else {
$message = trans('messages.warning.deleted', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
$this->response->errorUnauthorized($message);
try {
$this->dispatch(new DeleteTax($tax));
} catch (\Exception $e) {
flash($e->getMessage())->error();
}
}
}
protected function getRelationships($tax)
{
$relationships = $this->countRelationships($tax, [
'items' => 'items',
'invoice_items' => 'invoices',
'bill_items' => 'bills',
]);
return $relationships;
}
}

View File

@ -3,6 +3,7 @@
namespace App\Jobs\Common;
use App\Abstracts\Job;
use App\Models\Auth\User;
use App\Models\Common\Contact;
class UpdateContact extends Job

View File

@ -2,9 +2,8 @@
return [
'select_to_action' => 'Select To Action',
'selected' => 'selected',
'bulk_actions' => 'Bulk Action|Bulk Actions',
'selected' => 'selected',
'delete' => 'Delete',
'duplicate' => 'Duplicate',
'export' => 'Export',
@ -40,12 +39,15 @@ return [
],
'message' => [
'sure' => 'Are you sure?',
'duplicate' => 'Do you really want to duplicate these record?',
'deletes' => 'Do you really want to delete these record?|Do you really want to delete these records?',
'exports' => 'Do you really want to export these record?|Do you really want to export these records?',
'enable' => 'Do you really want to enable these record?|Do you really want to enable these records?',
'disable' => 'Do your really want to disable these record?|Do your really want to disable these records?',
]
'sure' => 'Are you sure?',
'duplicate' => 'Do you really want to duplicate these record?',
'delete' => 'Do you really want to delete this record?|Do you really want to delete these records?',
'export' => 'Do you really want to export this record?|Do you really want to export these records?',
'enable' => 'Do you really want to enable this record?|Do you really want to enable these records?',
'disable' => 'Do you really want to disable this record?|Do you really want to disable these records?',
'paid' => 'Do you really want to mark this invoice as paid?|Do you really want to mark these invoices as paid?',
'sent' => 'Do you really want to mark this invoice as sent?|Do you really want to mark these invoices as sent?',
'received' => 'Do you really want to mark this bill as received?|Do you really want to mark these bills as received?',
],
];