commit21
This commit is contained in:
@@ -5,12 +5,15 @@ namespace App\Http\Controllers;
|
||||
use App\Http\Requests\ConfirmReceiptRequest;
|
||||
use App\Models\GoodsReceipt;
|
||||
use App\Models\PurchaseOrder;
|
||||
use App\Models\ReceiptDocument;
|
||||
use App\Models\Requisition;
|
||||
use App\Models\StockItem;
|
||||
use App\Models\StockMovement;
|
||||
use App\Models\User;
|
||||
use App\Models\Warehouse;
|
||||
use App\Services\InventoryLots;
|
||||
use App\Services\InventoryReversals;
|
||||
use App\Services\ReceiptDocuments;
|
||||
use App\Services\ReceiptWorkflow;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -23,13 +26,21 @@ use Inertia\Response;
|
||||
|
||||
class GoodsReceiptController extends Controller
|
||||
{
|
||||
private function actor(Request $request): User
|
||||
{
|
||||
$actor = $request->user('web');
|
||||
abort_unless($actor instanceof User, 403);
|
||||
|
||||
return $actor;
|
||||
}
|
||||
|
||||
/** @return Builder<PurchaseOrder> */
|
||||
private function visibleOrders(Request $request): Builder
|
||||
{
|
||||
Gate::authorize('viewAny', GoodsReceipt::class);
|
||||
$orders = PurchaseOrder::query();
|
||||
if ($request->user()->departmentScoped()) {
|
||||
$orders->whereIn('requisition_id', Requisition::query()->visibleTo($request->user())->select('id'));
|
||||
if ($this->actor($request)->departmentScoped()) {
|
||||
$orders->whereIn('requisition_id', Requisition::query()->visibleTo($this->actor($request))->select('id'));
|
||||
}
|
||||
|
||||
return $orders;
|
||||
@@ -65,7 +76,7 @@ class GoodsReceiptController extends Controller
|
||||
|
||||
public function store(ConfirmReceiptRequest $request, PurchaseOrder $order, ReceiptWorkflow $workflow): JsonResponse|RedirectResponse
|
||||
{
|
||||
$receipt = $workflow->confirm($request->user(), $order, $request->validated());
|
||||
$receipt = $workflow->confirm($this->actor($request), $order, $request->validated());
|
||||
if ($request->expectsJson()) {
|
||||
return response()->json(['id' => $receipt->id, 'number' => $receipt->number, 'created' => $receipt->wasRecentlyCreated, 'status' => $receipt->status], $receipt->wasRecentlyCreated ? 201 : 200);
|
||||
}
|
||||
@@ -73,14 +84,37 @@ class GoodsReceiptController extends Controller
|
||||
return to_route('receipts.show', $receipt);
|
||||
}
|
||||
|
||||
public function show(GoodsReceipt $receipt): Response
|
||||
public function show(Request $request, GoodsReceipt $receipt, ReceiptDocuments $documents): Response
|
||||
{
|
||||
Gate::authorize('view', $receipt);
|
||||
$actor = $request->user('web');
|
||||
abort_unless($actor instanceof User, 403);
|
||||
$ready = $documents->ready();
|
||||
$order = PurchaseOrder::query()->findOrFail($receipt->purchase_order_id);
|
||||
$source = Requisition::query()->visibleTo($actor)->whereKey($order->requisition_id)->first(['id']);
|
||||
Inertia::encryptHistory();
|
||||
|
||||
return Inertia::render('receipts/show', [
|
||||
'documentsReady' => $ready,
|
||||
'purchaseProcessHref' => $source === null ? null : '/requisicoes/'.$source->id.'/processo',
|
||||
'canAddDocuments' => $ready && $documents->canAdd($actor, $receipt),
|
||||
'documents' => $ready && $documents->canRead($actor, $receipt) ? ReceiptDocument::query()->where('goods_receipt_id', $receipt->id)->orderBy('id')->get(['id', 'document_type', 'original_name', 'size', 'sha256', 'uploaded_by', 'created_at']) : [],
|
||||
'correctedReceiptItems' => collect(app(InventoryReversals::class)->corrections('receipt'))->only($receipt->items()->pluck('id')->all())->map(fn ($r) => $r->data['reference']),
|
||||
'receipt' => $receipt->load('items'),
|
||||
'movements' => StockMovement::query()->whereIn('goods_receipt_item_id', $receipt->items()->select('id'))->orderBy('id')->get(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function print(Request $request, GoodsReceipt $receipt, ReceiptDocuments $documents): \Illuminate\Http\Response
|
||||
{
|
||||
Gate::authorize('view', $receipt);
|
||||
$actor = $this->actor($request);
|
||||
|
||||
return response()->view('receipts.print', [
|
||||
'receipt' => $receipt->load('items'),
|
||||
'corrections' => collect(app(InventoryReversals::class)->corrections('receipt'))->only($receipt->items()->pluck('id')->all()),
|
||||
'documents' => $documents->ready() && $documents->canRead($actor, $receipt)
|
||||
? ReceiptDocument::query()->where('goods_receipt_id', $receipt->id)->orderBy('id')->get(['document_type', 'original_name', 'sha256', 'created_at']) : collect(),
|
||||
])->header('Cache-Control', 'no-store, private')->header('X-Content-Type-Options', 'nosniff');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user