Files
compras/app/Http/Controllers/RequisitionCatalogueController.php
nala c6373365bf
tests / ci (push) Canceled after 0s
commit9
2026-10-30 20:02:30 +02:00

48 lines
2.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\StockItem;
use App\Services\RequisitionCatalogue;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Inertia\Inertia;
use Symfony\Component\HttpFoundation\Response;
class RequisitionCatalogueController extends Controller
{
public function index(Request $request, RequisitionCatalogue $catalogue): Response
{
abort_unless($request->user()->hasFunctions(['admin', 'warehouse']), 403);
$filter = $request->validate(['search' => 'nullable|string|max:100']);
$ready = Schema::hasTable('requisition_catalogue');
$query = StockItem::query()->where('tenant_id', $request->user()->tenant_id);
if (($filter['search'] ?? '') !== '') {
$query->where(fn ($q) => $q->whereLike('name', '%'.$filter['search'].'%')->orWhereLike('code', '%'.$filter['search'].'%'));
}
$records = $query->orderBy('code')->paginate(15)->withQueryString();
$entries = $ready ? DB::table('requisition_catalogue')->where('tenant_id', $request->user()->tenant_id)->whereIn('stock_item_id', $records->pluck('id'))->get()->keyBy('stock_item_id') : collect();
$records->through(function (StockItem $stock) use ($entries, $catalogue) {
$entry = $entries->get($stock->id);
return [...$catalogue->source($stock), 'stock_basis' => $catalogue->basis($stock), 'version' => $entry->version ?? 0,
'category' => $entry->category ?? '', 'purchase_type' => $entry->purchase_type ?? 'consumable', 'published' => (bool) ($entry->published ?? false),
'source_current' => $entry === null || json_decode($entry->source_snapshot, true, 16, JSON_THROW_ON_ERROR) === $catalogue->source($stock)];
});
Inertia::encryptHistory();
$response = Inertia::render('stock/catalogue', ['records' => $records, 'ready' => $ready, 'canManage' => $catalogue->canManage($request->user()), 'filters' => $filter])->toResponse($request);
$response->headers->set('Cache-Control', 'private, no-store, max-age=0');
return $response;
}
public function save(Request $request, int $stock, RequisitionCatalogue $catalogue): Response
{
abort_unless(Schema::hasTable('requisition_catalogue'), 503, 'Instalação do catálogo pendente.');
$catalogue->save($request->user(), $stock, $request->all());
return back();
}
}