diff --git a/app/Filament/Tenant/Resources/MasterResource.php b/app/Filament/Tenant/Resources/MasterResource.php index 720ecb3..60c7dda 100644 --- a/app/Filament/Tenant/Resources/MasterResource.php +++ b/app/Filament/Tenant/Resources/MasterResource.php @@ -13,7 +13,7 @@ use Filament\Tables; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Hash; -use Illuminate\Validation\Rules\Unique; +use Illuminate\Validation\Rule; /** * Tehnicieni — vedere filtrată peste users (role=mechanic). @@ -62,16 +62,22 @@ class MasterResource extends Resource ->columns(2) ->schema([ Forms\Components\TextInput::make('name')->label(__('Nume'))->required()->maxLength(120), - Forms\Components\TextInput::make('phone')->label(__('Telefon'))->tel()->maxLength(40), + Forms\Components\TextInput::make('phone') + ->label(__('Telefon')) + ->tel() + ->maxLength(40) + ->rules(fn ($record) => $record + ? [Rule::unique('users', 'phone')->where('company_id', auth()->user()?->company_id)->ignore($record->id)] + : [Rule::unique('users', 'phone')->where('company_id', auth()->user()?->company_id)] + ) + ->validationMessages(['unique' => __('Acest număr de telefon este deja folosit de un alt utilizator.')]), Forms\Components\TextInput::make('email') ->label(__('Email')) ->email() ->maxLength(120) - ->unique( - table: 'users', - column: 'email', - ignoreRecord: true, - modifyRuleUsing: fn (Unique $rule) => $rule->where('company_id', auth()->user()?->company_id), + ->rules(fn ($record) => $record + ? [Rule::unique('users', 'email')->where('company_id', auth()->user()?->company_id)->ignore($record->id)] + : [Rule::unique('users', 'email')->where('company_id', auth()->user()?->company_id)] ) ->validationMessages(['unique' => __('Acest email este deja folosit de un alt utilizator.')]), Forms\Components\Select::make('status') diff --git a/app/Filament/Tenant/Resources/MasterResource/Pages/CreateMaster.php b/app/Filament/Tenant/Resources/MasterResource/Pages/CreateMaster.php index 9540946..5d80fbd 100644 --- a/app/Filament/Tenant/Resources/MasterResource/Pages/CreateMaster.php +++ b/app/Filament/Tenant/Resources/MasterResource/Pages/CreateMaster.php @@ -4,11 +4,28 @@ namespace App\Filament\Tenant\Resources\MasterResource\Pages; use App\Filament\Tenant\Resources\MasterResource; use Filament\Actions; +use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; +use Filament\Support\Exceptions\Halt; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\UniqueConstraintViolationException; class CreateMaster extends CreateRecord { protected static string $resource = MasterResource::class; - + protected function handleRecordCreation(array $data): Model + { + try { + return parent::handleRecordCreation($data); + } catch (UniqueConstraintViolationException $e) { + $msg = str_contains($e->getMessage(), 'email') + ? __('Acest email este deja folosit de un alt utilizator.') + : __('Acest număr de telefon este deja folosit de un alt utilizator.'); + + Notification::make()->danger()->title($msg)->send(); + + throw new Halt(); + } + } } diff --git a/app/Filament/Tenant/Resources/MasterResource/Pages/EditMaster.php b/app/Filament/Tenant/Resources/MasterResource/Pages/EditMaster.php index 10761a5..540f7ea 100644 --- a/app/Filament/Tenant/Resources/MasterResource/Pages/EditMaster.php +++ b/app/Filament/Tenant/Resources/MasterResource/Pages/EditMaster.php @@ -4,11 +4,30 @@ namespace App\Filament\Tenant\Resources\MasterResource\Pages; use App\Filament\Tenant\Resources\MasterResource; use Filament\Actions; +use Filament\Notifications\Notification; use Filament\Resources\Pages\EditRecord; +use Filament\Support\Exceptions\Halt; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\UniqueConstraintViolationException; class EditMaster extends EditRecord { protected static string $resource = MasterResource::class; protected function getHeaderActions(): array { return [Actions\DeleteAction::make()]; } + + protected function handleRecordUpdate(Model $record, array $data): Model + { + try { + return parent::handleRecordUpdate($record, $data); + } catch (UniqueConstraintViolationException $e) { + $msg = str_contains($e->getMessage(), 'email') + ? __('Acest email este deja folosit de un alt utilizator.') + : __('Acest număr de telefon este deja folosit de un alt utilizator.'); + + Notification::make()->danger()->title($msg)->send(); + + throw new Halt(); + } + } } diff --git a/app/Filament/Tenant/Resources/UserResource.php b/app/Filament/Tenant/Resources/UserResource.php index 04f1148..b21617e 100644 --- a/app/Filament/Tenant/Resources/UserResource.php +++ b/app/Filament/Tenant/Resources/UserResource.php @@ -13,7 +13,7 @@ use Filament\Schemas; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Support\Facades\Hash; -use Illuminate\Validation\Rules\Unique; +use Illuminate\Validation\Rule; class UserResource extends Resource { @@ -73,14 +73,19 @@ class UserResource extends Resource ->email() ->required() ->maxLength(120) - ->unique( - table: 'users', - column: 'email', - ignoreRecord: true, - modifyRuleUsing: fn (Unique $rule) => $rule->where('company_id', auth()->user()?->company_id), + ->rules(fn ($record) => $record + ? [Rule::unique('users', 'email')->where('company_id', auth()->user()?->company_id)->ignore($record->id)] + : [Rule::unique('users', 'email')->where('company_id', auth()->user()?->company_id)] ) ->validationMessages(['unique' => __('Acest email este deja folosit de un alt utilizator.')]), - Forms\Components\TextInput::make('phone')->tel()->maxLength(40), + Forms\Components\TextInput::make('phone') + ->tel() + ->maxLength(40) + ->rules(fn ($record) => $record + ? [Rule::unique('users', 'phone')->where('company_id', auth()->user()?->company_id)->ignore($record->id)] + : [Rule::unique('users', 'phone')->where('company_id', auth()->user()?->company_id)] + ) + ->validationMessages(['unique' => __('Acest număr de telefon este deja folosit de un alt utilizator.')]), Forms\Components\Select::make('locale') ->options(['ro' => __('Română'), 'ru' => 'Русский', 'en' => 'English']) ->default('ro'), diff --git a/app/Filament/Tenant/Resources/UserResource/Pages/CreateUser.php b/app/Filament/Tenant/Resources/UserResource/Pages/CreateUser.php index 0d6bc71..d4d06c0 100644 --- a/app/Filament/Tenant/Resources/UserResource/Pages/CreateUser.php +++ b/app/Filament/Tenant/Resources/UserResource/Pages/CreateUser.php @@ -3,7 +3,11 @@ namespace App\Filament\Tenant\Resources\UserResource\Pages; use App\Filament\Tenant\Resources\UserResource; +use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; +use Filament\Support\Exceptions\Halt; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\UniqueConstraintViolationException; class CreateUser extends CreateRecord { @@ -12,6 +16,19 @@ class CreateUser extends CreateRecord /** @var array */ protected array $_rolesPicked = []; + protected function handleRecordCreation(array $data): Model + { + try { + return parent::handleRecordCreation($data); + } catch (UniqueConstraintViolationException $e) { + $msg = str_contains($e->getMessage(), 'email') + ? __('Acest email este deja folosit de un alt utilizator.') + : __('Acest număr de telefon este deja folosit de un alt utilizator.'); + Notification::make()->danger()->title($msg)->send(); + throw new Halt(); + } + } + protected function mutateFormDataBeforeCreate(array $data): array { $this->_rolesPicked = $data['roles_picked'] ?? []; diff --git a/app/Filament/Tenant/Resources/UserResource/Pages/EditUser.php b/app/Filament/Tenant/Resources/UserResource/Pages/EditUser.php index 1c0b865..1e4c712 100644 --- a/app/Filament/Tenant/Resources/UserResource/Pages/EditUser.php +++ b/app/Filament/Tenant/Resources/UserResource/Pages/EditUser.php @@ -4,7 +4,11 @@ namespace App\Filament\Tenant\Resources\UserResource\Pages; use App\Filament\Tenant\Resources\UserResource; use Filament\Actions; +use Filament\Notifications\Notification; use Filament\Resources\Pages\EditRecord; +use Filament\Support\Exceptions\Halt; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\UniqueConstraintViolationException; class EditUser extends EditRecord { @@ -18,6 +22,19 @@ class EditUser extends EditRecord /** @var array */ protected array $_rolesPicked = []; + protected function handleRecordUpdate(Model $record, array $data): Model + { + try { + return parent::handleRecordUpdate($record, $data); + } catch (UniqueConstraintViolationException $e) { + $msg = str_contains($e->getMessage(), 'email') + ? __('Acest email este deja folosit de un alt utilizator.') + : __('Acest număr de telefon este deja folosit de un alt utilizator.'); + Notification::make()->danger()->title($msg)->send(); + throw new Halt(); + } + } + protected function mutateFormDataBeforeSave(array $data): array { $this->_rolesPicked = $data['roles_picked'] ?? [];