This commit is contained in:
2026-11-02 08:10:00 +02:00
parent 504b01b244
commit b44378b899
14 changed files with 655 additions and 121 deletions
@@ -16,35 +16,38 @@ class AutomaticPurchaseController extends Controller
{
public function index(Request $request, AutomaticPurchases $service)
{
$actor=$request->user('web');
abort_unless($actor instanceof User && $actor->hasFunctions(['admin','supply_read','supply_prepare','supply_review']),403);
$prepare=app(SupplyPlanning::class)->allows($actor,'supply_prepare');
$ready=$service->ready();
$planning=app(SupplyPlanning::class);
$actor = $request->user('web');
abort_unless($actor instanceof User && $actor->hasFunctions(['admin', 'supply_read', 'supply_prepare', 'supply_review']), 403);
$prepare = app(SupplyPlanning::class)->allows($actor, 'supply_prepare');
$ready = $service->ready();
$planning = app(SupplyPlanning::class);
Inertia::encryptHistory();
return Inertia::render('stock/replenishment',[
'ready'=>$ready,'canPrepare'=>$prepare,'canReview'=>$planning->allows($actor,'supply_review'),
'rules'=>$ready?$planning->latest('auto_rule')->latest('id')->limit(100)->get():[],
'needs'=>$ready?$planning->latest('auto_need')->latest('id')->limit(100)->get():[],
'history'=>$ready?SupplyRecord::query()->whereIn('kind',['auto_rule','auto_need'])->latest('id')->limit(100)->get():[],
'policies'=>Schema::hasTable('supply_records') && $prepare?$planning->latest('policy')->where('state','approved')->where('data->purpose','internal')->get():[],
'requesters'=>$prepare?User::query()->where('tenant_id',$actor->tenant_id)->get(['id','name','department_id','purchasing_role','tenant_id'])->filter(fn($u)=>in_array('requester',app(OrganizationAccess::class)->permissions($u,'procurement.internal'),true))->map(fn($u)=>$u->only(['id','name','department_id']))->values():[],
'centers'=>$prepare?CostCenter::query()->orderBy('code')->get(['id','department_id','code','name']):[],
])->toResponse($request)->withHeaders(['Cache-Control'=>'private, no-store, max-age=0']);
return Inertia::render('stock/replenishment', [
'ready' => $ready, 'canPrepare' => $prepare, 'canReview' => $planning->allows($actor, 'supply_review'),
'rules' => $ready ? $planning->latest('auto_rule')->latest('id')->limit(100)->get() : [],
'needs' => $ready ? $planning->latest('auto_need')->latest('id')->limit(100)->get() : [],
'history' => $ready ? SupplyRecord::query()->whereIn('kind', ['auto_rule', 'auto_need'])->latest('id')->limit(100)->get() : [],
'policies' => Schema::hasTable('supply_records') && $prepare ? $planning->latest('policy')->where('state', 'approved')->where('data->purpose', 'internal')->get() : [],
'requesters' => $prepare ? User::query()->where('tenant_id', $actor->tenant_id)->get(['id', 'name', 'department_id', 'purchasing_role', 'tenant_id'])->filter(fn ($u) => $service->eligibleRequester($u))->map(fn ($u) => $u->only(['id', 'name', 'department_id']))->values() : [],
'centers' => $prepare ? CostCenter::query()->orderBy('code')->get(['id', 'department_id', 'code', 'name']) : [],
])->toResponse($request)->withHeaders(['Cache-Control' => 'private, no-store, max-age=0']);
}
public function save(Request $request, AutomaticPurchases $service)
{
$service->save($request->user('web'),$request->all());
$service->save($request->user('web'), $request->all());
return redirect('/stock/reposicao');
}
public function evaluate(Request $request, int $id, AutomaticPurchases $service)
{
$actor=$request->user('web');
abort_unless($actor instanceof User && ($actor->hasFunctions(['supply_prepare','supply_review'])) && !app(OrganizationAccess::class)->maintenanceOnly($actor),403);
$need=SupplyRecord::query()->where('kind','auto_need')->findOrFail($id);
$service->evaluate($actor,$need->stock_item_id,$need->warehouse_id);
$actor = $request->user('web');
abort_unless($actor instanceof User && ($actor->hasFunctions(['supply_prepare', 'supply_review'])) && ! app(OrganizationAccess::class)->maintenanceOnly($actor), 403);
$need = SupplyRecord::query()->where('kind', 'auto_need')->findOrFail($id);
$service->evaluate($actor, $need->stock_item_id, $need->warehouse_id);
return redirect('/stock/reposicao');
}
}