diff --git a/app/Http/Controllers/V1/Admin/Settings/CompanyCurrencyTransactionController.php b/app/Http/Controllers/V1/Admin/Settings/CompanyCurrencyCheckTransactionsController.php similarity index 67% rename from app/Http/Controllers/V1/Admin/Settings/CompanyCurrencyTransactionController.php rename to app/Http/Controllers/V1/Admin/Settings/CompanyCurrencyCheckTransactionsController.php index 0977de23..ee9ce1b9 100644 --- a/app/Http/Controllers/V1/Admin/Settings/CompanyCurrencyTransactionController.php +++ b/app/Http/Controllers/V1/Admin/Settings/CompanyCurrencyCheckTransactionsController.php @@ -8,7 +8,7 @@ use Crater\Models\CompanySetting; use Crater\Models\Currency; use Illuminate\Http\Request; -class CompanyCurrencyTransactionController extends Controller +class CompanyCurrencyCheckTransactionsController extends Controller { /** * Handle the incoming request. @@ -24,15 +24,7 @@ class CompanyCurrencyTransactionController extends Controller $currency = Currency::find((int)$companyCurrency); - if ( - $currency->customers()->exists() || - $currency->items()->exists() || - $currency->invoices()->exists() || - $currency->estimates()->exists() || - $currency->expenses()->exists() || - $currency->payments()->exists() || - $currency->recurringInvoices()->exists() - ) { + if ($currency->checkTransactions()) { return response()->json([ 'success' => false, ]); diff --git a/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php index 264b0af7..eb6f1f2b 100644 --- a/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php +++ b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php @@ -6,6 +6,7 @@ use Crater\Http\Controllers\Controller; use Crater\Http\Requests\UpdateSettingsRequest; use Crater\Models\Company; use Crater\Models\CompanySetting; +use Crater\Models\Currency; class UpdateCompanySettingsController extends Controller { @@ -19,7 +20,19 @@ class UpdateCompanySettingsController extends Controller { $this->authorize('manage company', Company::find($request->header('company'))); - CompanySetting::setSettings($request->settings, $request->header('company')); + $companyCurrency = CompanySetting::getSetting('currency', $request->header('company')); + + $data = $request->settings; + $currency = Currency::find((int)$companyCurrency); + + if ($companyCurrency !== $data['currency'] && $currency->checkTransactions()) { + return response()->json([ + 'success' => false, + 'message' => 'You cannot change currency once transaction is created.' + ]); + } + + CompanySetting::setSettings($data, $request->header('company')); return response()->json([ 'success' => true, diff --git a/app/Models/Currency.php b/app/Models/Currency.php index f777585c..5b8a3fb0 100644 --- a/app/Models/Currency.php +++ b/app/Models/Currency.php @@ -47,4 +47,21 @@ class Currency extends Model { return $this->hasMany(RecurringInvoice::class); } + + public function checkTransactions() + { + if ( + $this->customers()->exists() || + $this->items()->exists() || + $this->invoices()->exists() || + $this->estimates()->exists() || + $this->expenses()->exists() || + $this->payments()->exists() || + $this->recurringInvoices()->exists() + ) { + return true; + } + + return false; + } } diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index ca6c765e..464390af 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -27,7 +27,6 @@ class Invoice extends Model implements HasMedia public const STATUS_DRAFT = 'DRAFT'; public const STATUS_SENT = 'SENT'; - public const STATUS_OVERDUE = 'OVERDUE'; public const STATUS_VIEWED = 'VIEWED'; public const STATUS_COMPLETED = 'COMPLETED'; diff --git a/database/migrations/2022_03_03_063237_change_over_due_status_to_sent.php b/database/migrations/2022_03_03_063237_change_over_due_status_to_sent.php index f2d92bc3..a87a7351 100644 --- a/database/migrations/2022_03_03_063237_change_over_due_status_to_sent.php +++ b/database/migrations/2022_03_03_063237_change_over_due_status_to_sent.php @@ -12,7 +12,7 @@ class ChangeOverDueStatusToSent extends Migration */ public function up() { - $overdueInvoices = Invoice::where('status', Invoice::STATUS_OVERDUE)->get(); + $overdueInvoices = Invoice::where('status', 'OVERDUE')->get(); if ($overdueInvoices) { $overdueInvoices->map(function ($overdueInvoice) { diff --git a/routes/api.php b/routes/api.php index d1c63fc9..b81cbd79 100644 --- a/routes/api.php +++ b/routes/api.php @@ -67,7 +67,7 @@ use Crater\Http\Controllers\V1\Admin\RecurringInvoice\RecurringInvoiceFrequencyC use Crater\Http\Controllers\V1\Admin\Role\AbilitiesController; use Crater\Http\Controllers\V1\Admin\Role\RolesController; use Crater\Http\Controllers\V1\Admin\Settings\CompanyController; -use Crater\Http\Controllers\V1\Admin\Settings\CompanyCurrencyTransactionController; +use Crater\Http\Controllers\V1\Admin\Settings\CompanyCurrencyCheckTransactionsController; use Crater\Http\Controllers\V1\Admin\Settings\DiskController; use Crater\Http\Controllers\V1\Admin\Settings\GetCompanyMailConfigurationController; use Crater\Http\Controllers\V1\Admin\Settings\GetCompanySettingsController; @@ -395,7 +395,7 @@ Route::prefix('/v1')->group(function () { Route::post('/settings', UpdateSettingsController::class); - Route::get('/company-currency-transaction', CompanyCurrencyTransactionController::class); + Route::get('/company/has-transactions', CompanyCurrencyCheckTransactionsController::class); // Mails