@@ -0,0 +1,47 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user