@php $sectionClass = 'rounded-3xl border border-primary-700/60 bg-primary-900/40 p-6 shadow-soft'; $sectionHeaderClass = 'mb-6 flex flex-col gap-3 border-b border-primary-700/60 pb-4 lg:flex-row lg:items-start lg:justify-between'; $labelClass = 'text-[11px] font-semibold uppercase tracking-[0.24em] text-primary-200'; $inputClass = 'w-full rounded-2xl border border-primary-600/40 bg-primary-900/70 px-4 py-3 text-sm text-on-primary placeholder:text-primary-300 transition focus:border-accent focus:outline-none focus:ring-2 focus:ring-accent/20'; $textareaClass = $inputClass . ' min-h-28'; $errorClass = 'text-xs font-semibold text-secondary'; @endphp

Modo

{{ $isEditMode ? 'Edición' : 'Nuevo registro' }}

Flujo {{ $isEditMode ? 'de actualización' : 'de alta comercial' }} activo.

Paquetes registrados

{{ $packages->count() }}

opciones comerciales listas para asociar.

Personal disponible

{{ $employees->count() }}

colaboradores para asignar al operativo.

@csrf

Cliente

Datos de contacto

Registra la información base para identificar rápidamente al cliente y mantener trazabilidad del contrato.

@error('phone')

{{ $message }}

@enderror
@error('client_name')

{{ $message }}

@enderror
@error('client_address')

{{ $message }}

@enderror

Programación

Datos del evento

Define fecha de registro, agenda del evento y la ubicación operativa que usará el equipo.

@error('date')

{{ $message }}

@enderror

Si capturas una fecha anterior a hoy, el sistema te pedirá confirmación antes de guardar.

@error('event_date')

{{ $message }}

@enderror
@error('event_time')

{{ $message }}

@enderror
@error('event_type_id')

{{ $message }}

@enderror
@error('event_address')

{{ $message }}

@enderror

Modalidad

Cómo se construirá este evento

Elige si trabajarás con paquetes registrados o con una composición personalizada que solo viva dentro de este evento.

@if ($packageMode === 'registered')

Paquetes

Configuración comercial

Asocia uno o varios paquetes. Puedes repetir el mismo paquete y el sistema lo sumará como cantidad. Si falta alguno, usa la opción de alta rápida desde el selector.

@for ($i = 0; $i < $countPackageInputs; $i++)
@if ($i === $countPackageInputs - 1)

Usa la opción Agregar paquete si necesitas registrarlo sin salir del evento.

@endif @error('package_id')

{{ $message }}

@enderror
@if ($i === $countPackageInputs - 1) @elseif ($countPackageInputs > 1) @endif
@endfor
@else

Composición personalizada

Constructor del evento

Agrega productos reales al evento sin dar de alta un paquete formal. La composición se guardará solo dentro de esta contratación.

Flujo recomendado

1. Busca productos por nombre. 2. Define una cantidad base o registra uno nuevo si todavía no existe. 3. Agrégalos al evento. 4. Captura el precio final en la sección comercial.

Producto nuevo para este evento

Si el material no existe en catálogo o no está dado de alta en inventario, puedes crearlo aquí. Al guardar el evento también quedará registrado en inventario.

@error('newCustomProductName')

{{ $message }}

@enderror
@error('newCustomProductUnit')

{{ $message }}

@enderror

Catálogo de productos

Selecciona piezas reales para construir este evento.

{{ $customCatalogProducts->count() }} visibles
@if ($customCatalogProducts->isNotEmpty())
@foreach ($customCatalogProducts as $catalogProduct) @endforeach
@else

Sin resultados

No encontré materiales con ese filtro. Prueba otro nombre o borra la búsqueda.

@endif

Resumen del paquete personalizado

Edita cantidades o elimina piezas antes de guardar.

{{ $customSelectionItems->count() }} materiales {{ $customSelectionItems->sum('quantity') }} piezas
@error('customProducts')

{{ $message }}

@enderror @if ($customSelectionItems->isNotEmpty())
@foreach ($customSelectionItems as $item)

{{ $item['name'] }}

@if ($item['descriptor'] !== '')

{{ $item['descriptor'] }}

@endif @if ($item['is_new'])

Se dará de alta como producto nuevo del inventario al guardar.

@elseif ($item['requires_inventory_registration'])

No existe en inventario. Se registrará automáticamente al guardar.

@endif

Stock actual: {{ $item['stock'] }}

El costo de inventario no se usará como precio de venta del evento.

@if ($item['requires_inventory_registration'])
@else
Esta cantidad se guardará directamente en los materiales del evento y el stock reservado se calculará con la existencia actual.
@endif
@endforeach
@else

Aún no hay materiales agregados

Usa el catálogo de la izquierda para ir agregando productos al evento antes de guardar.

@endif
@endif

Operación

Equipo responsable

badge Alta de empleado
@for ($i = 0; $i < $countEmployeeInputs; $i++)
@error('employee_id')

{{ $message }}

@enderror
@if ($i === $countEmployeeInputs - 1) @elseif ($countEmployeeInputs > 1) @endif
@endfor

Condiciones

Ajustes comerciales

Configura descuento, anticipos y notas que complementan el cierre de la contratación.

@if ($packageMode === 'custom')

Precio final requerido

Como este evento no registrará un paquete formal, el campo Precio final será la referencia para agenda, contrato y métricas.

@endif
@error('discount')

{{ $message }}

@enderror
@error('deposit')

{{ $message }}

@enderror
@error('viatic')

{{ $message }}

@enderror
@error('price')

{{ $message }}

@enderror
@if ($packageMode === 'custom')

Si la capturas, el contrato mostrará esta descripción comercial en lugar del desglose técnico de materiales.

@error('contract_description')

{{ $message }}

@enderror
@endif
@error('notes')

{{ $message }}

@enderror
@if ($packageMode === 'registered')

Materiales variables

Selección por paquete

Cuando un paquete requiera elegir materiales equivalentes, aquí podrás decidir qué producto se usará.

@if (count($products))
@foreach ($products as $indexProducts => $product) @isset($product->pivot) @for ($indexMaterial = 0; $indexMaterial < $product->pivot->quantity; $indexMaterial++) @php $selectionKey = $indexProducts . '_' . $indexMaterial; @endphp

{{ $product->name }}

Selecciona el material para la unidad {{ $indexMaterial + 1 }}.

{{ $product->pivot->quantity }} requerido(s)
@foreach ($product->products as $material) @endforeach
@endfor @endisset @endforeach
@else

Sin variables adicionales

Los paquetes seleccionados no requieren elección manual de materiales en esta etapa.

@endif
@endif @if (session()->has('message'))

{{ session('message') }}

@endif @if ($this->showAlert)
warning

Confirmación requerida

{{ $this->errorMessage ?: 'Se detectó una validación pendiente antes de guardar el evento.' }}

@endif

Revisión requerida

La fecha del evento es anterior a hoy. Si continúas, el registro se guardará como evento histórico.

Confirma solo si realmente necesitas capturar un evento pasado o corregir historial operativo.

{{ $isEditMode ? 'Actualiza el evento cuando termines los ajustes.' : 'Guarda el evento para enviarlo a la agenda operativa.' }}

El registro usará la configuración actual del backend y sus relaciones.

close Cancelar

Alta rápida

Guarda el paquete y después podrás seleccionarlo dentro del mismo evento.

El alta de empleados se administra desde el módulo correspondiente.

badge Ir a empleados
@script @endscript