vernova/app/Http/Controllers/SettingsController.php
2026-07-26 19:58:27 +03:30

179 lines
5.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\Currency;
use App\Models\Tenant;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
class SettingsController extends Controller
{
/**
* Display settings index.
*/
public function index()
{
$tenant = Tenant::find($this->getTenantId());
$users = User::where('tenant_id', $this->getTenantId())->get();
$currencies = Currency::all();
return view('settings.index', compact('tenant', 'users', 'currencies'));
}
/**
* Update organization settings.
*/
public function updateOrganization(Request $request)
{
$tenant = Tenant::find($this->getTenantId());
$validated = $request->validate([
'name' => 'required|string|max:255',
'default_locale' => 'required|in:fa,en,ar',
'default_calendar' => 'required|in:jalali,gregorian',
'logo' => 'nullable|image|max:2048',
]);
if ($request->hasFile('logo')) {
// Delete old logo
if ($tenant->logo) {
Storage::disk('public')->delete($tenant->logo);
}
$validated['logo'] = $request->file('logo')->store('logos', 'public');
}
$tenant->update($validated);
return redirect()
->route('settings.index')
->with('success', __('settings.organization_updated'));
}
/**
* Store a new user.
*/
public function storeUser(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|string|min:8|confirmed',
'roles' => 'nullable|array',
]);
$validated['tenant_id'] = $this->getTenantId();
$validated['password'] = Hash::make($validated['password']);
$validated['is_active'] = true;
$roles = $validated['roles'] ?? [];
unset($validated['roles']);
$user = User::create($validated);
if (!empty($roles)) {
$user->assignRole($roles);
}
return redirect()
->route('settings.index')
->with('success', __('settings.user_created'));
}
/**
* Update a user.
*/
public function updateUser(Request $request, User $user)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email,' . $user->id,
'password' => 'nullable|string|min:8|confirmed',
'roles' => 'nullable|array',
]);
if (!empty($validated['password'])) {
$validated['password'] = Hash::make($validated['password']);
} else {
unset($validated['password']);
}
$roles = $validated['roles'] ?? [];
unset($validated['roles']);
$user->update($validated);
$user->syncRoles($roles);
return redirect()
->route('settings.index')
->with('success', __('settings.user_updated'));
}
/**
* Toggle user active status.
*/
public function toggleUser(User $user)
{
$user->update(['is_active' => !$user->is_active]);
return redirect()
->route('settings.index')
->with('success', __('settings.user_status_updated'));
}
/**
* Store a new currency.
*/
public function storeCurrency(Request $request)
{
$validated = $request->validate([
'code' => 'required|string|max:10|unique:currencies,code',
'name' => 'required|string|max:100',
'symbol' => 'required|string|max:10',
'decimal_places' => 'required|integer|min:0|max:6',
'exchange_rate_to_usd' => 'required|numeric|min:0',
]);
Currency::create($validated);
return redirect()
->route('settings.index')
->with('success', __('settings.currency_created'));
}
/**
* Update a currency.
*/
public function updateCurrency(Request $request, Currency $currency)
{
$validated = $request->validate([
'name' => 'required|string|max:100',
'symbol' => 'required|string|max:10',
'decimal_places' => 'required|integer|min:0|max:6',
'exchange_rate_to_usd' => 'required|numeric|min:0',
]);
$currency->update($validated);
return redirect()
->route('settings.index')
->with('success', __('settings.currency_updated'));
}
/**
* Toggle currency active status.
*/
public function toggleCurrency(Currency $currency)
{
$currency->update(['is_active' => !$currency->is_active]);
return redirect()
->route('settings.index')
->with('success', __('settings.currency_status_updated'));
}
}