179 lines
5.0 KiB
PHP
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'));
|
|
}
|
|
}
|