v2 first commit

This commit is contained in:
denisdulici
2019-11-16 10:21:14 +03:00
parent 5b23e9c2c4
commit 6d50fa8442
3075 changed files with 3451681 additions and 65594 deletions

View 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'
]
];
}

View 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'
]
];
}

View 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');
}
}

View 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;
}
}

View 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();
});
}
}
}

View 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();
}
}
}

View 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'));
}
}

View 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');
}
}

View 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'),
]);
}
}
}

View 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');
}
}

View 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;
}
}

View 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;
}
}

View 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, []));
}
}
}

View 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');
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}