diff --git a/app/Http/Controllers/Banking/Accounts.php b/app/Http/Controllers/Banking/Accounts.php
index 8058d4dec..59a373bd6 100644
--- a/app/Http/Controllers/Banking/Accounts.php
+++ b/app/Http/Controllers/Banking/Accounts.php
@@ -108,34 +108,21 @@ class Accounts extends Controller
*/
public function destroy(Account $account)
{
- $canDelete = $account->canDelete();
+ $relationships = $this->countRelationships($account, [
+ 'bill_payments' => 'bills',
+ 'payments' => 'payments',
+ 'invoice_payments' => 'invoices',
+ 'revenues' => 'revenues',
+ ]);
- if ($canDelete === true) {
+ if (empty($relationships)) {
$account->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.accounts', 1)]);
flash($message)->success();
} else {
- $text = array();
-
- if (isset($canDelete['bills'])) {
- $text[] = '' . $canDelete['bills'] . ' ' . trans_choice('general.bills', ($canDelete['bills'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['payments'])) {
- $text[] = '' . $canDelete['payments'] . ' ' . trans_choice('general.payments', ($canDelete['payments'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['invoices'])) {
- $text[] = '' . $canDelete['invoices'] . ' ' . trans_choice('general.invoices', ($canDelete['invoices'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['revenues'])) {
- $text[] = '' . $canDelete['revenues'] . ' ' . trans_choice('general.revenues', ($canDelete['revenues'] > 1) ? 2 : 1);
- }
-
- $message = trans('messages.warning.deleted', ['type' => trans_choice('general.accounts', 1), 'text' => implode(', ', $text)]);
+ $message = trans('messages.warning.deleted', ['name' => $account->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 629dfce2e..27a489670 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -44,4 +44,17 @@ class Controller extends BaseController
$this->middleware('permission:update-' . $controller)->only(['update']);
$this->middleware('permission:delete-' . $controller)->only('destroy');
}
+
+ public function countRelationships($model, $relationships)
+ {
+ $counter = array();
+
+ foreach ($relationships as $relationship => $text) {
+ if ($c = $model->$relationship()->count()) {
+ $counter[] = $c . ' ' . strtolower(trans_choice('general.' . $text, ($c > 1) ? 2 : 1));
+ }
+ }
+
+ return $counter;
+ }
}
diff --git a/app/Http/Controllers/Expenses/Vendors.php b/app/Http/Controllers/Expenses/Vendors.php
index 9ba8e99bd..b407da365 100644
--- a/app/Http/Controllers/Expenses/Vendors.php
+++ b/app/Http/Controllers/Expenses/Vendors.php
@@ -94,26 +94,19 @@ class Vendors extends Controller
*/
public function destroy(Vendor $vendor)
{
- $canDelete = $vendor->canDelete();
+ $relationships = $this->countRelationships($vendor, [
+ 'bills' => 'bills',
+ 'payments' => 'payments',
+ ]);
- if ($canDelete === true) {
+ if (empty($relationships)) {
$vendor->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.vendors', 1)]);
flash($message)->success();
} else {
- $text = array();
-
- if (isset($canDelete['bills'])) {
- $text[] = '' . $canDelete['bills'] . ' ' . trans_choice('general.bills', ($canDelete['bills'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['payments'])) {
- $text[] = '' . $canDelete['payments'] . ' ' . trans_choice('general.payments', ($canDelete['payments'] > 1) ? 2 : 1);
- }
-
- $message = trans('messages.warning.deleted', ['type' => trans_choice('general.vendors', 1), 'text' => implode(', ', $text)]);
+ $message = trans('messages.warning.deleted', ['name' => $vendor->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
}
diff --git a/app/Http/Controllers/Incomes/Customers.php b/app/Http/Controllers/Incomes/Customers.php
index ac8fa1051..228533a94 100644
--- a/app/Http/Controllers/Incomes/Customers.php
+++ b/app/Http/Controllers/Incomes/Customers.php
@@ -127,26 +127,19 @@ class Customers extends Controller
*/
public function destroy(Customer $customer)
{
- $canDelete = $customer->canDelete();
+ $relationships = $this->countRelationships($customer, [
+ 'invoices' => 'invoices',
+ 'revenues' => 'revenues',
+ ]);
- if ($canDelete === true) {
+ if (empty($relationships)) {
$customer->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.customers', 1)]);
flash($message)->success();
} else {
- $text = array();
-
- if (isset($canDelete['invoices'])) {
- $text[] = '' . $canDelete['invoices'] . ' ' . trans_choice('general.invoices', ($canDelete['invoices'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['revenues'])) {
- $text[] = '' . $canDelete['revenues'] . ' ' . trans_choice('general.revenues', ($canDelete['revenues'] > 1) ? 2 : 1);
- }
-
- $message = trans('messages.warning.deleted', ['type' => trans_choice('general.customers', 1), 'text' => implode(', ', $text)]);
+ $message = trans('messages.warning.deleted', ['name' => $customer->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
}
diff --git a/app/Http/Controllers/Items/Items.php b/app/Http/Controllers/Items/Items.php
index 88d753924..70026d540 100644
--- a/app/Http/Controllers/Items/Items.php
+++ b/app/Http/Controllers/Items/Items.php
@@ -117,26 +117,19 @@ class Items extends Controller
*/
public function destroy(Item $item)
{
- $canDelete = $item->canDelete();
+ $relationships = $this->countRelationships($item, [
+ 'invoice_items' => 'invoices',
+ 'bill_items' => 'bills',
+ ]);
- if ($canDelete === true) {
+ if (empty($relationships)) {
$item->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.items', 1)]);
flash($message)->success();
} else {
- $text = array();
-
- if (isset($canDelete['bills'])) {
- $text[] = '' . $canDelete['bills'] . ' ' . trans_choice('general.bills', ($canDelete['bills'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['invoices'])) {
- $text[] = '' . $canDelete['invoices'] . ' ' . trans_choice('general.invoices', ($canDelete['invoices'] > 1) ? 2 : 1);
- }
-
- $message = trans('messages.warning.deleted', ['type' => trans_choice('general.items', 1), 'text' => implode(', ', $text)]);
+ $message = trans('messages.warning.deleted', ['name' => $item->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
}
diff --git a/app/Http/Controllers/Settings/Categories.php b/app/Http/Controllers/Settings/Categories.php
index d0a428b2a..c84b4c298 100644
--- a/app/Http/Controllers/Settings/Categories.php
+++ b/app/Http/Controllers/Settings/Categories.php
@@ -74,13 +74,27 @@ class Categories extends Controller
*/
public function update(Category $category, Request $request)
{
- $category->update($request->all());
+ $relationships = $this->countRelationships($category, [
+ 'items' => 'items',
+ 'revenues' => 'revenues',
+ 'payments' => 'payments',
+ ]);
- $message = trans('messages.success.updated', ['type' => trans_choice('general.categories', 1)]);
+ if (empty($relationships) || $request['enabled']) {
+ $category->update($request->all());
- flash($message)->success();
+ $message = trans('messages.success.updated', ['type' => trans_choice('general.categories', 1)]);
- return redirect('settings/categories');
+ flash($message)->success();
+
+ return redirect('settings/categories');
+ } else {
+ $message = trans('messages.warning.disabled', ['name' => $category->name, 'text' => implode(', ', $relationships)]);
+
+ flash($message)->warning();
+
+ return redirect('settings/categories/' . $category->id . '/edit');
+ }
}
/**
@@ -92,30 +106,20 @@ class Categories extends Controller
*/
public function destroy(Category $category)
{
- $canDelete = $category->canDelete();
+ $relationships = $this->countRelationships($category, [
+ 'items' => 'items',
+ 'revenues' => 'revenues',
+ 'payments' => 'payments',
+ ]);
- if ($canDelete === true) {
+ if (empty($relationships)) {
$category->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.categories', 1)]);
flash($message)->success();
} else {
- $text = array();
-
- if (isset($canDelete['items'])) {
- $text[] = '' . $canDelete['items'] . ' ' . trans_choice('general.items', ($canDelete['items'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['payments'])) {
- $text[] = '' . $canDelete['payments'] . ' ' . trans_choice('general.payments', ($canDelete['payments'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['revenues'])) {
- $text[] = '' . $canDelete['revenues'] . ' ' . trans_choice('general.items', ($canDelete['revenues'] > 1) ? 2 : 1);
- }
-
- $message = trans('messages.warning.deleted', ['type' => trans_choice('general.categories', 1), 'text' => implode(', ', $text)]);
+ $message = trans('messages.warning.deleted', ['name' => $category->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
}
diff --git a/app/Http/Controllers/Settings/Currencies.php b/app/Http/Controllers/Settings/Currencies.php
index 7b6e1a2f7..46e1d2c6c 100644
--- a/app/Http/Controllers/Settings/Currencies.php
+++ b/app/Http/Controllers/Settings/Currencies.php
@@ -95,9 +95,20 @@ class Currencies extends Controller
*/
public function update(Currency $currency, Request $request)
{
- $canDisable = $currency->canDisable();
+ $relationships = $this->countRelationships($currency, [
+ 'accounts' => 'accounts',
+ 'customers' => 'customers',
+ 'invoices' => 'invoices',
+ 'revenues' => 'revenues',
+ 'bills' => 'bills',
+ 'payments' => 'payments',
+ ]);
- if ($canDisable === true || $request['enabled']) {
+ if ($currency->code == setting('general.default_currency')) {
+ $relationships[] = strtolower(trans_choice('general.companies', 1));
+ }
+
+ if (empty($relationships) || $request['enabled']) {
$currency->update($request->all());
// Update default currency setting
@@ -109,43 +120,15 @@ class Currencies extends Controller
$message = trans('messages.success.updated', ['type' => trans_choice('general.currencies', 1)]);
flash($message)->success();
+
+ return redirect('settings/currencies');
} else {
- $text = array();
-
- if (isset($canDisable['company'])) {
- $text[] = '' . $canDisable['company'] . ' ' . trans_choice('general.companies', ($canDisable['company'] > 1) ? 2 : 1);
- }
-
- if (isset($canDisable['accounts'])) {
- $text[] = '' . $canDisable['accounts'] . ' ' . trans_choice('general.accounts', ($canDisable['accounts'] > 1) ? 2 : 1);
- }
-
- if (isset($canDisable['customers'])) {
- $text[] = '' . $canDisable['customers'] . ' ' . trans_choice('general.customers', ($canDisable['customers'] > 1) ? 2 : 1);
- }
-
- if (isset($canDisable['invoices'])) {
- $text[] = '' . $canDisable['invoices'] . ' ' . trans_choice('general.invoices', ($canDisable['invoices'] > 1) ? 2 : 1);
- }
-
- if (isset($canDisable['revenues'])) {
- $text[] = '' . $canDisable['revenues'] . ' ' . trans_choice('general.revenues', ($canDisable['revenues'] > 1) ? 2 : 1);
- }
-
- if (isset($canDisable['bills'])) {
- $text[] = '' . $canDisable['bills'] . ' ' . trans_choice('general.bills', ($canDisable['bills'] > 1) ? 2 : 1);
- }
-
- if (isset($canDisable['payments'])) {
- $text[] = '' . $canDisable['payments'] . ' ' . trans_choice('general.payments', ($canDisable['payments'] > 1) ? 2 : 1);
- }
-
- $message = trans('messages.warning.disabled', ['type' => trans_choice('general.currencies', 1), 'text' => implode(', ', $text)]);
+ $message = trans('messages.warning.disabled', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
- }
- return redirect('settings/currencies');
+ return redirect('settings/currencies/' . $currency->id . '/edit');
+ }
}
/**
@@ -157,11 +140,30 @@ class Currencies extends Controller
*/
public function destroy(Currency $currency)
{
- $currency->delete();
+ $relationships = $this->countRelationships($currency, [
+ 'accounts' => 'accounts',
+ 'customers' => 'customers',
+ 'invoices' => 'invoices',
+ 'revenues' => 'revenues',
+ 'bills' => 'bills',
+ 'payments' => 'payments',
+ ]);
- $message = trans('messages.success.deleted', ['type' => trans_choice('general.currencies', 1)]);
+ if ($currency->code == setting('general.default_currency')) {
+ $relationships[] = strtolower(trans_choice('general.companies', 1));
+ }
- flash($message)->success();
+ if (empty($relationships)) {
+ $currency->delete();
+
+ $message = trans('messages.success.deleted', ['type' => trans_choice('general.currencies', 1)]);
+
+ flash($message)->success();
+ } else {
+ $message = trans('messages.warning.deleted', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
+
+ flash($message)->warning();
+ }
return redirect('settings/currencies');
}
diff --git a/app/Http/Controllers/Settings/Taxes.php b/app/Http/Controllers/Settings/Taxes.php
index 586ac70e5..1600cf0b5 100644
--- a/app/Http/Controllers/Settings/Taxes.php
+++ b/app/Http/Controllers/Settings/Taxes.php
@@ -71,13 +71,27 @@ class Taxes extends Controller
*/
public function update(Tax $tax, Request $request)
{
- $tax->update($request->all());
+ $relationships = $this->countRelationships($tax, [
+ 'items' => 'items',
+ 'invoice_items' => 'invoices',
+ 'bill_items' => 'bills',
+ ]);
- $message = trans('messages.success.updated', ['type' => trans_choice('general.tax_rates', 1)]);
+ if (empty($relationships) || $request['enabled']) {
+ $tax->update($request->all());
- flash($message)->success();
+ $message = trans('messages.success.updated', ['type' => trans_choice('general.tax_rates', 1)]);
- return redirect('settings/taxes');
+ flash($message)->success();
+
+ return redirect('settings/taxes');
+ } else {
+ $message = trans('messages.warning.disabled', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
+
+ flash($message)->warning();
+
+ return redirect('settings/taxes/' . $tax->id . '/edit');
+ }
}
/**
@@ -89,30 +103,20 @@ class Taxes extends Controller
*/
public function destroy(Tax $tax)
{
- $canDelete = $tax->canDelete();
+ $relationships = $this->countRelationships($tax, [
+ 'items' => 'items',
+ 'invoice_items' => 'invoices',
+ 'bill_items' => 'bills',
+ ]);
- if ($canDelete === true) {
+ if (empty($relationships)) {
$tax->delete();
$message = trans('messages.success.deleted', ['type' => trans_choice('general.taxes', 1)]);
flash($message)->success();
} else {
- $text = array();
-
- if (isset($canDelete['items'])) {
- $text[] = '' . $canDelete['items'] . ' ' . trans_choice('general.items', ($canDelete['items'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['bills'])) {
- $text[] = '' . $canDelete['bills'] . ' ' . trans_choice('general.bills', ($canDelete['bills'] > 1) ? 2 : 1);
- }
-
- if (isset($canDelete['invoices'])) {
- $text[] = '' . $canDelete['invoices'] . ' ' . trans_choice('general.items', ($canDelete['invoices'] > 1) ? 2 : 1);
- }
-
- $message = trans('messages.warning.deleted', ['type' => trans_choice('general.taxes', 1), 'text' => implode(', ', $text)]);
+ $message = trans('messages.warning.deleted', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
}
diff --git a/app/Models/Banking/Account.php b/app/Models/Banking/Account.php
index fbc1fedd2..1d2c7c856 100644
--- a/app/Models/Banking/Account.php
+++ b/app/Models/Banking/Account.php
@@ -81,33 +81,6 @@ class Account extends Model
$this->attributes['opening_balance'] = (float) $value;
}
- public function canDelete()
- {
- $error = false;
-
- if ($bill_payments = $this->bill_payments()->count()) {
- $error['bills'] = $bill_payments;
- }
-
- if ($payments = $this->payments()->count()) {
- $error['payments'] = $payments;
- }
-
- if ($invoice_payments = $this->invoice_payments()->count()) {
- $error['invoices'] = $invoice_payments;
- }
-
- if ($revenues = $this->revenues()->count()) {
- $error['revenues'] = $revenues;
- }
-
- if ($error) {
- return $error;
- }
-
- return true;
- }
-
/**
* Get the current balance.
*
diff --git a/app/Models/Expense/Vendor.php b/app/Models/Expense/Vendor.php
index 608003db9..4a1c718f1 100644
--- a/app/Models/Expense/Vendor.php
+++ b/app/Models/Expense/Vendor.php
@@ -52,23 +52,4 @@ class Vendor extends Model
{
return $this->belongsTo('App\Models\Setting\Currency', 'currency_code', 'code');
}
-
- public function canDelete()
- {
- $error = false;
-
- if ($bills = $this->bills()->count()) {
- $error['bills'] = $bills;
- }
-
- if ($payments = $this->payments()->count()) {
- $error['payments'] = $payments;
- }
-
- if ($error) {
- return $error;
- }
-
- return true;
- }
}
diff --git a/app/Models/Income/Customer.php b/app/Models/Income/Customer.php
index dbd01427b..461bd5f16 100644
--- a/app/Models/Income/Customer.php
+++ b/app/Models/Income/Customer.php
@@ -59,23 +59,4 @@ class Customer extends Model
{
return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id');
}
-
- public function canDelete()
- {
- $error = false;
-
- if ($invoices = $this->invoices()->count()) {
- $error['invoices'] = $invoices;
- }
-
- if ($revenues = $this->revenues()->count()) {
- $error['revenues'] = $revenues;
- }
-
- if ($error) {
- return $error;
- }
-
- return true;
- }
}
diff --git a/app/Models/Item/Item.php b/app/Models/Item/Item.php
index eaf593a1b..99e1020a5 100644
--- a/app/Models/Item/Item.php
+++ b/app/Models/Item/Item.php
@@ -81,25 +81,6 @@ class Item extends Model
$this->attributes['purchase_price'] = (float) $value;
}
- public function canDelete()
- {
- $error = false;
-
- if ($bills = $this->bill_items()->count()) {
- $error['bills'] = $bills;
- }
-
- if ($invoices = $this->invoice_items()->count()) {
- $error['invoices'] = $invoices;
- }
-
- if ($error) {
- return $error;
- }
-
- return true;
- }
-
public static function getItems($filter_data = array())
{
if (empty($filter_data)) {
diff --git a/app/Models/Setting/Category.php b/app/Models/Setting/Category.php
index 1cfc262c1..71bae2c32 100644
--- a/app/Models/Setting/Category.php
+++ b/app/Models/Setting/Category.php
@@ -37,29 +37,6 @@ class Category extends Model
return $this->hasMany('App\Models\Item\Item');
}
- public function canDelete()
- {
- $error = false;
-
- if ($items = $this->items()->count()) {
- $error['items'] = $items;
- }
-
- if ($payments = $this->payments()->count()) {
- $error['payments'] = $payments;
- }
-
- if ($revenues = $this->revenues()->count()) {
- $error['revenues'] = $revenues;
- }
-
- if ($error) {
- return $error;
- }
-
- return true;
- }
-
/**
* Scope to only include categories of a given type.
*
diff --git a/app/Models/Setting/Currency.php b/app/Models/Setting/Currency.php
index 2e0eff22e..b937f01e6 100644
--- a/app/Models/Setting/Currency.php
+++ b/app/Models/Setting/Currency.php
@@ -63,43 +63,4 @@ class Currency extends Model
{
$this->attributes['rate'] = (float) $value;
}
-
- public function canDisable()
- {
- $error = false;
-
- if ($this->code == setting('general.default_currency')) {
- $error['company'] = 1;
- }
-
- if ($accounts = $this->accounts()->count()) {
- $error['accounts'] = $accounts;
- }
-
- if ($customers = $this->customers()->count()) {
- $error['customers'] = $customers;
- }
-
- if ($invoices = $this->invoices()->count()) {
- $error['invoices'] = $invoices;
- }
-
- if ($revenues = $this->revenues()->count()) {
- $error['revenues'] = $revenues;
- }
-
- if ($bills = $this->bills()->count()) {
- $error['bills'] = $bills;
- }
-
- if ($payments = $this->payments()->count()) {
- $error['payments'] = $payments;
- }
-
- if ($error) {
- return $error;
- }
-
- return true;
- }
}
diff --git a/app/Models/Setting/Tax.php b/app/Models/Setting/Tax.php
index 665f20b38..98f5f6d60 100644
--- a/app/Models/Setting/Tax.php
+++ b/app/Models/Setting/Tax.php
@@ -37,27 +37,4 @@ class Tax extends Model
{
return $this->hasMany('App\Models\Income\InvoiceItem');
}
-
- public function canDelete()
- {
- $error = false;
-
- if ($items = $this->items()->count()) {
- $error['items'] = $items;
- }
-
- if ($bills = $this->bill_items()->count()) {
- $error['bills'] = $bills;
- }
-
- if ($invoices = $this->invoice_items()->count()) {
- $error['invoices'] = $invoices;
- }
-
- if ($error) {
- return $error;
- }
-
- return true;
- }
}
diff --git a/resources/lang/en-GB/messages.php b/resources/lang/en-GB/messages.php
index 36961b225..a70ccd9d8 100644
--- a/resources/lang/en-GB/messages.php
+++ b/resources/lang/en-GB/messages.php
@@ -11,8 +11,8 @@ return [
'not_user_company' => 'Error: You are not allowed to manage this company!',
],
'warning' => [
- 'deleted' => 'Warning: You are not delete :type. Because it has :text',
- 'disabled' => 'Warning: You are not disable :type. Because it has :text',
+ 'deleted' => 'Warning: You are not allowed to delete :name because it has :text related.',
+ 'disabled' => 'Warning: You are not allowed to disable :name because it has :text related.',
],
];