164 lines
5.5 KiB
PHP
164 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Repuve;
|
|
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\Repuve\PackageStoreRequest;
|
|
use App\Http\Requests\Repuve\PackageUpdateRequest;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Package;
|
|
use App\Models\Tag;
|
|
use Dompdf\FrameDecorator\Page;
|
|
|
|
class PackageController extends Controller
|
|
{
|
|
|
|
public function index(Request $request)
|
|
{
|
|
try {
|
|
$query = Package::query();
|
|
|
|
if ($request->filled('lote')) {
|
|
$query->where('lot', 'LIKE', '%' . $request->lote . '%');
|
|
}
|
|
|
|
if ($request->filled('caja')) {
|
|
$query->where('box_number', 'LIKE', '%' . $request->caja . '%');
|
|
}
|
|
|
|
|
|
$query->with('tags')->orderBy('id', 'ASC');
|
|
$perPage = $request->input('per_page', 20);
|
|
$packages = $query->paginate($perPage);
|
|
|
|
return ApiResponse::OK->response([
|
|
'packages' => $packages->map(fn($item) => [
|
|
'id' => $item->id,
|
|
'lot' => $item->lot,
|
|
'box_number' => $item->box_number,
|
|
'starting_page' => $item->starting_page,
|
|
'ending_page' => $item->ending_page,
|
|
'module' => $item->module ? [
|
|
'id' => $item->module->id,
|
|
'name' => $item->module->name,
|
|
] : null,
|
|
'tags' => $item->tags->map(fn($tag) => [
|
|
'id' => $tag->id,
|
|
'folio' => $tag->folio,
|
|
'vehicle_id' => $tag->vehicle_id,
|
|
'status' => $tag->status ?? null,
|
|
]),
|
|
'tags_count' => $item->tags->count(),
|
|
'created_at' => $item->created_at->format('Y-m-d H:i:s'),
|
|
]),
|
|
'pagination' => [
|
|
'total' => $packages->total(),
|
|
'per_page' => $packages->perPage(),
|
|
'current_page' => $packages->currentPage(),
|
|
'last_page' => $packages->lastPage(),
|
|
'from' => $packages->firstItem(),
|
|
'to' => $packages->lastItem(),
|
|
],
|
|
]);
|
|
} catch (\Exception $e) {
|
|
return ApiResponse::INTERNAL_ERROR->response([
|
|
'message' => 'Error al obtener los paquetes',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function store(PackageStoreRequest $request)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$package = Package::create([
|
|
'lot' => $request->input('lot'),
|
|
'box_number' => $request->input('box_number'),
|
|
'starting_page' => $request->input('starting_page'),
|
|
'ending_page' => $request->input('ending_page'),
|
|
'module_id' => $request->input('module_id'),
|
|
|
|
]);
|
|
|
|
DB::commit();
|
|
|
|
return ApiResponse::CREATED->response([
|
|
'message' => 'Paquete creado exitosamente',
|
|
'package' => [
|
|
'id' => $package->id,
|
|
'lot' => $package->lot,
|
|
'box_number' => $package->box_number,
|
|
'starting_page' => $package->starting_page,
|
|
'ending_page' => $package->ending_page,
|
|
'module_id' => $package->module_id,
|
|
'created_at' => $package->created_at->format('Y-m-d H:i:s'),
|
|
],
|
|
]);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return ApiResponse::INTERNAL_ERROR->response([
|
|
'message' => 'Error al crear el paquete',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function update(PackageUpdateRequest $request, $id)
|
|
{
|
|
try {
|
|
$package = Package::findOrFail($id);
|
|
|
|
DB::beginTransaction();
|
|
|
|
$package->update($request->validated());
|
|
|
|
DB::commit();
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Paquete actualizado exitosamente',
|
|
'package' => [
|
|
'id' => $package->id,
|
|
'lot' => $package->lot,
|
|
'box_number' => $package->box_number,
|
|
'starting_page' => $package->starting_page,
|
|
'ending_page' => $package->ending_page,
|
|
'module_id' => $package->module_id,
|
|
'updated_at' => $package->updated_at->format('Y-m-d H:i:s'),
|
|
],
|
|
]);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return ApiResponse::INTERNAL_ERROR->response([
|
|
'message' => 'Error al actualizar el paquete',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$package = Package::findOrFail($id);
|
|
$package->delete();
|
|
|
|
DB::commit();
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Paquete eliminado exitosamente.',
|
|
]);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return ApiResponse::INTERNAL_ERROR->response([
|
|
'message' => 'Error al eliminar el paquete.',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
}
|