@php $configData = Helper::appClasses(); @endphp @extends('layouts/layoutMaster') @section('title', $mode === 'create' ? 'Crear Usuario' : 'Editar Usuario') @section('vendor-style') @vite(['resources/assets/vendor/libs/tagify/tagify.scss']) @endsection @section('vendor-script') @vite(['resources/assets/vendor/libs/tagify/tagify.js']) @endsection @section('page-script') @vite(['resources/assets/js/admin-user-edit.js']) @endsection @section('content') @php $from = request()->query('from'); $prev = url()->previous(); $cameFromRiderContext = $from === 'riders' || \Illuminate\Support\Str::contains($prev, '/admin/riders'); if ($user->exists) { $backUrl = $cameFromRiderContext ? route('admin.users.show', ['user' => $user, 'from' => 'riders']) : ($user->roles->contains('slug', 'rider') ? route('admin.users.show', $user) : route('admin.users.index')); } else { $backUrl = $cameFromRiderContext ? route('admin.riders') : route('admin.users.index'); } $pageTitle = $mode === 'create' ? 'Crear usuario' : 'Editar usuario'; $displayName = old('name', $user->name ?: 'Nuevo usuario'); $displayEmail = old('email', $user->email) ?: 'Sin correo asignado'; $selectedRoleIds = collect(old('roles', $selected['roles'] ?? [])); $primaryRole = $user->roles->first() ?? ($selectedRoleIds->isNotEmpty() ? $roles->firstWhere('id', (int) $selectedRoleIds->first()) : null); $roleName = $primaryRole->name ?? 'Rol sin asignar'; $roleSlug = strtolower($primaryRole->slug ?? ''); $isAdminRole = $roleSlug === 'admin' || ($user->exists && method_exists($user, 'isAdmin') && $user->isAdmin()); $isRiderRole = $roleSlug === 'rider' || str_contains($roleSlug, 'rider'); $roleIcon = $isAdminRole ? 'ti tabler-shield-check' : ($isRiderRole ? 'ti tabler-bike' : 'ti tabler-user-circle'); $roleTone = $isAdminRole ? 'bg-label-danger' : ($isRiderRole ? 'bg-label-success' : 'bg-label-info'); $activeInput = old('active', $user->active ?? true); $isActive = !in_array($activeInput, [null, '', 0, '0', false], true); $hasRiderRole = $user->roles->contains(function ($role) { return \Illuminate\Support\Str::contains(strtolower($role->slug ?? ''), 'rider'); }) || $selectedRoleIds->contains(function ($roleId) use ($roles) { $role = $roles->firstWhere('id', (int) $roleId); return $role && \Illuminate\Support\Str::contains(strtolower($role->slug ?? ''), 'rider'); }); $canDeleteUser = $mode === 'edit' && !$hasRiderRole; @endphp
@csrf @if($mode === 'edit') @method('PUT') @endif
Volver
@if($canDeleteUser) @endif Cancelar

{{ $pageTitle }}

{{ $displayName }}

{{ $roleName }} {{ $isActive ? 'Activo' : 'Inactivo' }}
{{ $displayEmail }} {{ optional($user->created_at)->format('d/m/Y H:i') ?? 'Usuario nuevo' }}
Desactiva para suspender el acceso inmediato.
Identidad y acceso
Información esencial para autenticar al usuario.
@error('name') {{ $message }} @enderror
@error('email') {{ $message }} @enderror
Debe ser único. Obligatorio para riders.
@error('dni') {{ $message }} @enderror
Debe coincidir con el ID del empleado en Sesame para sincronizar horarios.
@error('sesame_employee_id') {{ $message }} @enderror
@error('password') {{ $message }} @enderror
Se usa en reportes de rentabilidad.
@error('cost_per_order') {{ $message }} @enderror
Ideal para métricas de productividad.
@error('cost_per_hour') {{ $message }} @enderror
Roles y permisos
Define qué puede hacer este usuario dentro de la plataforma.
Tagify
Escribe para buscar un rol y pulsa Enter para añadirlo.
@error('roles') {{ $message }} @enderror
Cobertura operativa
Empresas, ciudades y zonas donde este usuario trabaja.
Consejo: comienza seleccionando Empresa(s), luego Ciudad(es) y finalmente Zona(s). Las listas se filtran automáticamente.
@php $initialDirectorId = old('zone_director_id', $currentZoneDirectorId); @endphp
Resumen rápido
Estado actual y datos clave.
  • Estado {{ $isActive ? 'Activo' : 'Inactivo' }}
  • Rol principal {{ $roleName }}
  • Correo {{ $displayEmail }}
  • Última actualización {{ optional($user->updated_at)->diffForHumans() ?? '—' }}
@if($canEditGlovoPin)
PIN seguridad Glovo
Gestiona el PIN privado para credenciales.
{{ $hasGlovoPin ? 'Configurado' : 'Pendiente' }}

Define un PIN de 4 dígitos para desbloquear contraseñas de cuentas Glovo. Si dejas ambos campos vacíos, se mantendrá el PIN actual.

Debe contener exactamente 4 dígitos.
@endif
@endsection @if($mode === 'edit')
@csrf @method('DELETE')
@push('scripts') @endpush @endif