v2 first commit
This commit is contained in:
20
app/BulkActions/Auth/Permissions.php
Normal file
20
app/BulkActions/Auth/Permissions.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Auth;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Auth\Permission;
|
||||
|
||||
class Permissions extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Permission::class;
|
||||
|
||||
public $actions = [
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-auth-permissions'
|
||||
]
|
||||
];
|
||||
}
|
20
app/BulkActions/Auth/Roles.php
Normal file
20
app/BulkActions/Auth/Roles.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Auth;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Auth\Role;
|
||||
|
||||
class Roles extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Role::class;
|
||||
|
||||
public $actions = [
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-auth-roles'
|
||||
]
|
||||
];
|
||||
}
|
78
app/BulkActions/Auth/Users.php
Normal file
78
app/BulkActions/Auth/Users.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Auth;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Auth\User;
|
||||
use Artisan;
|
||||
|
||||
class Users extends BulkAction
|
||||
{
|
||||
|
||||
public $model = User::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-auth-users'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-auth-users'
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-auth-users'
|
||||
]
|
||||
];
|
||||
|
||||
public function disable($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$users = $this->model::find($selected);
|
||||
|
||||
foreach ($users as $user) {
|
||||
// Can't disable yourself
|
||||
if ($user->id == user()->id) {
|
||||
continue;
|
||||
//$this->response->errorMethodNotAllowed(trans('auth.error.self_delete'));
|
||||
}
|
||||
|
||||
$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);
|
||||
|
||||
foreach ($users as $user) {
|
||||
// Can't delete yourself
|
||||
if ($user->id == user()->id) {
|
||||
continue;
|
||||
//$this->response->errorMethodNotAllowed(trans('auth.error.self_delete'));
|
||||
}
|
||||
|
||||
$user->delete();
|
||||
}
|
||||
|
||||
// Can't delete yourself
|
||||
if ($user->id == app(Auth::class)->user()->id) {
|
||||
$this->response->errorMethodNotAllowed(trans('auth.error.self_delete'));
|
||||
}
|
||||
|
||||
Artisan::call('cache:clear');
|
||||
}
|
||||
}
|
98
app/BulkActions/Banking/Accounts.php
Normal file
98
app/BulkActions/Banking/Accounts.php
Normal file
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Banking;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Banking\Account;
|
||||
|
||||
class Accounts extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Account::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-banking-accounts'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-banking-accounts'
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-banking-accounts'
|
||||
]
|
||||
];
|
||||
|
||||
public function disable($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$accounts = $this->model::find($selected);
|
||||
|
||||
foreach ($accounts as $account) {
|
||||
if ($account->id == setting('default.account')) {
|
||||
$relationships[] = strtolower(trans_choice('general.companies', 1));
|
||||
}
|
||||
|
||||
if (empty($relationships)) {
|
||||
$account->enabled = 0;
|
||||
$account->save();
|
||||
|
||||
$message = trans('messages.success.disabled', ['type' => $account->name]);
|
||||
|
||||
return $this->itemResponse($account->fresh(), new Transformer(), $message);
|
||||
} else {
|
||||
$message = trans('messages.warning.disabled', ['name' => $account->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($request);
|
||||
}
|
||||
|
||||
public function destroy($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$accounts = $this->model::find($selected);
|
||||
|
||||
foreach ($accounts as $account) {
|
||||
if ($relationships = $this->getRelationships($account)) {
|
||||
if ($account->id == setting('default.account')) {
|
||||
$relationships[] = strtolower(trans_choice('general.companies', 1));
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($relationships)) {
|
||||
$account->delete();
|
||||
|
||||
$message = trans('messages.success.deleted', ['type' => $account->name]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$message = trans('messages.warning.deleted', ['name' => $account->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function getRelationships($account)
|
||||
{
|
||||
$relationships = $this->countRelationships($account, [
|
||||
'payments' => 'payments',
|
||||
'revenues' => 'revenues',
|
||||
]);
|
||||
|
||||
return $relationships;
|
||||
}
|
||||
}
|
92
app/BulkActions/Banking/Reconciliations.php
Normal file
92
app/BulkActions/Banking/Reconciliations.php
Normal file
@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Banking;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Banking\Reconciliation;
|
||||
use App\Models\Banking\Transaction;
|
||||
|
||||
class Reconciliations extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Reconciliation::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-banking-reconciliations'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-banking-reconciliations'
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-banking-reconciliations'
|
||||
]
|
||||
];
|
||||
|
||||
public function enable($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$reconciliations = $this->model::find($selected);
|
||||
|
||||
foreach ($reconciliations as $reconciliation) {
|
||||
$reconciliation->enabled = 1;
|
||||
$reconciliation->save();
|
||||
|
||||
Transaction::where('account_id', $reconciliation->account_id)
|
||||
->reconciled()
|
||||
->whereBetween('paid_at', [$reconciliation->started_at, $reconciliation->ended_at])->each(function ($item) {
|
||||
$item->reconciled = 1;
|
||||
$item->save();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function disable($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$reconciliations = $this->model::find($selected);
|
||||
|
||||
foreach ($reconciliations as $reconciliation) {
|
||||
$reconciliation->enabled = 0;
|
||||
$reconciliation->save();
|
||||
|
||||
Transaction::where('account_id', $reconciliation->account_id)
|
||||
->reconciled()
|
||||
->whereBetween('paid_at', [$reconciliation->started_at, $reconciliation->ended_at])->each(function ($item) {
|
||||
$item->reconciled = 0;
|
||||
$item->save();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($request);
|
||||
}
|
||||
|
||||
public function destroy($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$reconciliations = $this->model::find($selected);
|
||||
|
||||
foreach ($reconciliations as $reconciliation) {
|
||||
$reconciliation->delete();
|
||||
|
||||
Transaction::where('account_id', $reconciliation->account_id)
|
||||
->reconciled()
|
||||
->whereBetween('paid_at', [$reconciliation->started_at, $reconciliation->ended_at])->each(function ($item) {
|
||||
$item->reconciled = 0;
|
||||
$item->save();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
38
app/BulkActions/Banking/Transfers.php
Normal file
38
app/BulkActions/Banking/Transfers.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Banking;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Banking\Transfer;
|
||||
|
||||
class Transfers extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Transfer::class;
|
||||
|
||||
public $actions = [
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_action.message.deletes',
|
||||
'permission' => 'delete-banking-transfers'
|
||||
]
|
||||
];
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($request);
|
||||
}
|
||||
|
||||
public function destroy($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$transfers = $this->model::find($selected);
|
||||
|
||||
foreach ($transfers as $transfer) {
|
||||
$this->deleteRelationships($transfer, ['expense_transaction', 'income_transaction']);
|
||||
|
||||
$transfer->delete();
|
||||
}
|
||||
}
|
||||
}
|
117
app/BulkActions/Common/Companies.php
Normal file
117
app/BulkActions/Common/Companies.php
Normal file
@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Common;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Common\Company;
|
||||
|
||||
class Companies extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Company::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-common-companies'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-common-companies'
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-common-companies'
|
||||
]
|
||||
];
|
||||
|
||||
public function enable($request)
|
||||
{
|
||||
try {
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$companies = $this->model::find($selected);
|
||||
|
||||
foreach ($companies as $company) {
|
||||
// Check if user can access company
|
||||
$this->owner($company);
|
||||
|
||||
$company->enabled = 1;
|
||||
$company->save();
|
||||
}
|
||||
|
||||
$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->model::find($selected);
|
||||
|
||||
foreach ($companies as $company) {
|
||||
// Check if user can access company
|
||||
$this->owner($company);
|
||||
|
||||
$company->enabled = 0;
|
||||
$company->save();
|
||||
}
|
||||
} 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);
|
||||
|
||||
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]);
|
||||
|
||||
return new Response($message);
|
||||
} catch (\HttpException $e) {
|
||||
$this->response->errorUnauthorized(trans('companies.error.not_user_company'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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'));
|
||||
}
|
||||
}
|
91
app/BulkActions/Common/Items.php
Normal file
91
app/BulkActions/Common/Items.php
Normal file
@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Common;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Exports\Common\Items as Export;
|
||||
use App\Models\Common\Item;
|
||||
|
||||
class Items extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Item::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-common-items'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'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',
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-common-items'
|
||||
]
|
||||
];
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
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]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$message = trans('messages.warning.deleted', ['name' => $item->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Export the specified resource.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function export($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
return \Excel::download(new Export($selected), trans_choice('general.items', 2) . '.xlsx');
|
||||
}
|
||||
}
|
102
app/BulkActions/Expenses/Bills.php
Normal file
102
app/BulkActions/Expenses/Bills.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Expenses;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Exports\Expenses\Bills as Export;
|
||||
use App\Models\Expense\Bill;
|
||||
use App\Models\Expense\BillHistory;
|
||||
|
||||
class Bills extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Bill::class;
|
||||
|
||||
public $actions = [
|
||||
'received' => [
|
||||
'name' => 'general.received',
|
||||
'message' => '',
|
||||
'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',
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-expenses-bills'
|
||||
]
|
||||
];
|
||||
|
||||
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->deleteRelationships($bill, ['items', 'item_taxes', 'histories', 'payments', 'recurring', 'totals']);
|
||||
$bill->delete();
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
77
app/BulkActions/Expenses/Payments.php
Normal file
77
app/BulkActions/Expenses/Payments.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
public $model = Transaction::class;
|
||||
|
||||
public $actions = [
|
||||
'duplicate' => [
|
||||
'name' => 'general.duplicate',
|
||||
'message' => 'bulk_actions.message.duplicate',
|
||||
'permission' => 'create-expenses-payments',
|
||||
'multiple' => true
|
||||
],
|
||||
'export' => [
|
||||
'name' => 'general.export',
|
||||
'message' => 'bulk_actions.message.exports',
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'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)]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$this->response->errorUnauthorized();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function export($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
return \Excel::download(new Export($selected), trans_choice('general.payments', 2) . '.xlsx');
|
||||
}
|
||||
}
|
97
app/BulkActions/Expenses/Vendors.php
Normal file
97
app/BulkActions/Expenses/Vendors.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Expenses;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Exports\Expenses\Vendors as Export;
|
||||
use App\Models\Common\Contact;
|
||||
|
||||
class Vendors extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Contact::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-expenses-vendors'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-expenses-vendors'
|
||||
],
|
||||
'duplicate' => [
|
||||
'name' => 'general.duplicate',
|
||||
'message' => 'bulk_actions.message.duplicate',
|
||||
'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'
|
||||
]
|
||||
];
|
||||
|
||||
public function duplicate($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$contacts = $this->model::find($selected);
|
||||
|
||||
foreach ($contacts as $contact) {
|
||||
$clone = $contact->duplicate();
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($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]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$message = trans('messages.warning.deleted', ['name' => $contact->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function export($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
97
app/BulkActions/Incomes/Customers.php
Normal file
97
app/BulkActions/Incomes/Customers.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Incomes;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Exports\Incomes\Customers as Export;
|
||||
use App\Models\Common\Contact;
|
||||
|
||||
class Customers extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Contact::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-incomes-customers'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-incomes-customers'
|
||||
],
|
||||
'duplicate' => [
|
||||
'name' => 'general.duplicate',
|
||||
'message' => 'bulk_actions.message.duplicate',
|
||||
'permission' => 'create-incomes-customers',
|
||||
'multiple' => true
|
||||
],
|
||||
'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)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$contacts = $this->model::find($selected);
|
||||
|
||||
foreach ($contacts as $contact) {
|
||||
$clone = $contact->duplicate();
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($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]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$message = trans('messages.warning.deleted', ['name' => $contact->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function export($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
return \Excel::download(new Export($selected), trans_choice('general.customers', 2) . '.xlsx');
|
||||
}
|
||||
|
||||
protected function getRelationships($contact)
|
||||
{
|
||||
$rels = [
|
||||
'invoices' => 'invoices',
|
||||
'revenues' => 'revenues',
|
||||
];
|
||||
|
||||
$relationships = $this->countRelationships($contact, $rels);
|
||||
|
||||
return $relationships;
|
||||
}
|
||||
}
|
105
app/BulkActions/Incomes/Invoices.php
Normal file
105
app/BulkActions/Incomes/Invoices.php
Normal file
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Incomes;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Events\Income\InvoiceCreated;
|
||||
use App\Events\Income\InvoiceSent;
|
||||
use App\Events\Income\PaymentReceived;
|
||||
use App\Exports\Incomes\Invoices as Export;
|
||||
use App\Models\Income\Invoice;
|
||||
use Date;
|
||||
|
||||
class Invoices extends BulkAction
|
||||
{
|
||||
public $model = Invoice::class;
|
||||
|
||||
public $actions = [
|
||||
'paid' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-incomes-invoices'
|
||||
],
|
||||
'sent' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'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',
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-incomes-invoices'
|
||||
]
|
||||
];
|
||||
|
||||
public function duplicate($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$invoices = $this->model::find($selected);
|
||||
|
||||
foreach ($invoices as $invoice) {
|
||||
$clone = $invoice->duplicate();
|
||||
|
||||
event(new InvoiceCreated($clone));
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($request);
|
||||
}
|
||||
|
||||
public function destroy($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$invoices = $this->model::find($selected);
|
||||
|
||||
foreach ($invoices as $invoice) {
|
||||
$this->deleteRelationships($invoice, ['items', 'item_taxes', 'histories', 'transactions', 'recurring', 'totals']);
|
||||
$invoice->delete();
|
||||
}
|
||||
}
|
||||
|
||||
public function export($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
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, []));
|
||||
}
|
||||
}
|
||||
}
|
77
app/BulkActions/Incomes/Revenues.php
Normal file
77
app/BulkActions/Incomes/Revenues.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
public $model = Transaction::class;
|
||||
|
||||
public $actions = [
|
||||
'export' => [
|
||||
'name' => 'general.export',
|
||||
'message' => 'bulk_actions.message.exports',
|
||||
],
|
||||
'duplicate' => [
|
||||
'name' => 'general.duplicate',
|
||||
'message' => 'bulk_actions.message.duplicate',
|
||||
'permission' => 'create-incomes-revenues',
|
||||
'multiple' => true
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'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)]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$this->response->errorUnauthorized();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function export($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
return \Excel::download(new Export($selected), trans_choice('general.revenues', 2) . '.xlsx');
|
||||
}
|
||||
}
|
98
app/BulkActions/Settings/Categories.php
Normal file
98
app/BulkActions/Settings/Categories.php
Normal file
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Settings;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Setting\Category;
|
||||
|
||||
class Categories extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Category::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-settings-categories'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-settings-categories'
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-settings-categories'
|
||||
]
|
||||
];
|
||||
|
||||
public function disable($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$categories = $this->model::find($selected);
|
||||
|
||||
foreach ($categories as $category) {
|
||||
if ($relationships = $this->getRelationships($category)) {
|
||||
$category->enabled = 0;
|
||||
$category->save();
|
||||
|
||||
$message = trans('messages.success.disabled', ['type' => $category->name]);
|
||||
|
||||
return $this->itemResponse($category->fresh(), new Transformer(), $message);
|
||||
} else {
|
||||
$message = trans('messages.warning.disabled', ['name' => $category->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($request);
|
||||
}
|
||||
|
||||
public function destroy($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$categories = $this->model::find($selected);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function getRelationships($category)
|
||||
{
|
||||
$relationships = $this->countRelationships($category, [
|
||||
'items' => 'items',
|
||||
'invoices' => 'invoices',
|
||||
'revenues' => 'revenues',
|
||||
'bills' => 'bills',
|
||||
'payments' => 'payments',
|
||||
]);
|
||||
|
||||
return $relationships;
|
||||
}
|
||||
}
|
96
app/BulkActions/Settings/Currencies.php
Normal file
96
app/BulkActions/Settings/Currencies.php
Normal file
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Settings;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Setting\Currency;
|
||||
|
||||
class Currencies extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Currency::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-settings-currencies'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-settings-currencies'
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-settings-currencies'
|
||||
]
|
||||
];
|
||||
|
||||
public function disable($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$currencies = $this->model::find($selected);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($request);
|
||||
}
|
||||
|
||||
public function destroy($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$currencies = $this->model::find($selected);
|
||||
|
||||
foreach ($currencies as $currency) {
|
||||
if (!$relationships = $this->getRelationships($currency)) {
|
||||
$currency->delete();
|
||||
|
||||
$message = trans('messages.success.deleted', ['type' => $currency->name]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$message = trans('messages.warning.deleted', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function getRelationships($currency)
|
||||
{
|
||||
$relationships = $this->countRelationships($currency, [
|
||||
'accounts' => 'accounts',
|
||||
'customers' => 'customers',
|
||||
'invoices' => 'invoices',
|
||||
'revenues' => 'revenues',
|
||||
'bills' => 'bills',
|
||||
'payments' => 'payments',
|
||||
]);
|
||||
|
||||
if ($currency->code == setting('default.currency')) {
|
||||
$relationships[] = strtolower(trans_choice('general.companies', 1));
|
||||
}
|
||||
|
||||
return $relationships;
|
||||
}
|
||||
}
|
89
app/BulkActions/Settings/Taxes.php
Normal file
89
app/BulkActions/Settings/Taxes.php
Normal file
@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
namespace App\BulkActions\Settings;
|
||||
|
||||
use App\Abstracts\BulkAction;
|
||||
use App\Models\Setting\Tax;
|
||||
|
||||
class Taxes extends BulkAction
|
||||
{
|
||||
|
||||
public $model = Tax::class;
|
||||
|
||||
public $actions = [
|
||||
'enable' => [
|
||||
'name' => 'general.enable',
|
||||
'message' => 'bulk_actions.message.enable',
|
||||
'permission' => 'update-settings-taxes'
|
||||
],
|
||||
'disable' => [
|
||||
'name' => 'general.disable',
|
||||
'message' => 'bulk_actions.message.disable',
|
||||
'permission' => 'update-settings-taxes'
|
||||
],
|
||||
'delete' => [
|
||||
'name' => 'general.delete',
|
||||
'message' => 'bulk_actions.message.deletes',
|
||||
'permission' => 'delete-settings-taxes'
|
||||
]
|
||||
];
|
||||
|
||||
public function disable($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$taxes = $this->model::find($selected);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($request)
|
||||
{
|
||||
$this->destroy($request);
|
||||
}
|
||||
|
||||
public function destroy($request)
|
||||
{
|
||||
$selected = $request->get('selected', []);
|
||||
|
||||
$taxes = $this->model::find($selected);
|
||||
|
||||
foreach ($taxes as $tax) {
|
||||
if (!$relationships = $this->getRelationships($tax)) {
|
||||
$tax->delete();
|
||||
|
||||
$message = trans('messages.success.deleted', ['type' => $tax->name]);
|
||||
|
||||
return new Response($message);
|
||||
} else {
|
||||
$message = trans('messages.warning.deleted', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
|
||||
|
||||
$this->response->errorUnauthorized($message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function getRelationships($tax)
|
||||
{
|
||||
$relationships = $this->countRelationships($tax, [
|
||||
'items' => 'items',
|
||||
'invoice_items' => 'invoices',
|
||||
'bill_items' => 'bills',
|
||||
]);
|
||||
|
||||
return $relationships;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user