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.', ], ];