97 lines
3.4 KiB
PHP
97 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Repuve;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Repuve\CancelConstanciaRequest;
|
|
use App\Models\Record;
|
|
use App\Models\VehicleTagLog;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
|
|
class CancellationController extends Controller
|
|
{
|
|
|
|
/**
|
|
* Cancelar la constancia/tag
|
|
*/
|
|
public function cancelarConstancia(CancelConstanciaRequest $request)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
// Buscar el expediente con sus relaciones
|
|
$record = Record::with('vehicle.tag')->findOrFail($request->record_id);
|
|
$vehicle = $record->vehicle;
|
|
$tag = $vehicle->tag;
|
|
|
|
// Validar que el vehículo tiene un tag asignado
|
|
if (!$tag) {
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'El vehículo no tiene un tag/constancia asignada.'
|
|
]);
|
|
}
|
|
|
|
// Validar que el tag está en estado activo
|
|
if ($tag->status !== 'assigned') {
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'El tag ya no está activo. Status actual: ' . $tag->status
|
|
]);
|
|
}
|
|
|
|
// Crear registro en el log de cancelaciones (HISTORIAL)
|
|
$cancellationLog = VehicleTagLog::create([
|
|
'vehicle_id' => $vehicle->id,
|
|
'tag_id' => $tag->id,
|
|
'cancellation_reason' => $request->cancellation_reason,
|
|
'cancellation_observations' => $request->cancellation_observations,
|
|
'cancellation_at' => now(),
|
|
'cancelled_by' => auth()->id(),
|
|
]);
|
|
|
|
// Actualizar estado del tag a 'cancelled'
|
|
$tag->update([
|
|
'status' => 'cancelled',
|
|
]);
|
|
|
|
DB::commit();
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Constancia cancelada exitosamente',
|
|
'cancellation' => [
|
|
'id' => $cancellationLog->id,
|
|
'vehicle' => [
|
|
'id' => $vehicle->id,
|
|
'placa' => $vehicle->placa,
|
|
'numero_serie' => $vehicle->numero_serie,
|
|
],
|
|
'tag' => [
|
|
'id' => $tag->id,
|
|
'folio' => $tag->folio,
|
|
'old_status' => 'assigned',
|
|
'new_status' => 'cancelled',
|
|
],
|
|
'cancellation_reason' => $request->cancellation_reason,
|
|
'cancellation_observations' => $request->cancellation_observations,
|
|
'cancelled_at' => $cancellationLog->cancellation_at->toDateTimeString(),
|
|
'cancelled_by' => auth()->user()->name,
|
|
]
|
|
]);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
|
|
Log::error('Error en cancelarConstancia: ' . $e->getMessage(), [
|
|
'record_id' => $request->record_id ?? null,
|
|
'cancellation_reason' => $request->cancellation_reason ?? null,
|
|
'trace' => $e->getTraceAsString()
|
|
]);
|
|
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'Error al cancelar la constancia',
|
|
'error' => $e->getMessage()
|
|
]);
|
|
}
|
|
}
|
|
}
|