hierarchyService->canViewClient(Auth::user(), $client), 403); $validated = $request->validate($this->rules()); ClientInvoiceAdjustment::create([ 'client_id' => $client->id, 'entry_type' => $validated['entry_type'], 'amount' => $validated['amount'], 'remark' => $validated['remark'] ?? null, ]); return redirect() ->route('google-ads.accounts.show', ['id' => $client->customer_id]) ->with('message-info', 'Adjustment added successfully.'); } public function update(Request $request, ClientInvoiceAdjustment $adjustment) { abort_unless($this->hierarchyService->canViewClient(Auth::user(), $adjustment->client), 403); $validated = $request->validate($this->rules()); $adjustment->update([ 'entry_type' => $validated['entry_type'], 'amount' => $validated['amount'], 'remark' => $validated['remark'] ?? null, ]); return redirect() ->route('google-ads.accounts.show', ['id' => $adjustment->client->customer_id]) ->with('message-info', 'Adjustment updated successfully.'); } public function destroy(ClientInvoiceAdjustment $adjustment) { abort_unless($this->hierarchyService->canViewClient(Auth::user(), $adjustment->client), 403); $client = $adjustment->client; $adjustment->delete(); return redirect() ->route('google-ads.accounts.show', ['id' => $client->customer_id]) ->with('message-info', 'Adjustment deleted successfully.'); } private function rules(): array { return [ 'entry_type' => ['required', 'string', Rule::in([ ClientInvoiceAdjustment::TYPE_DEBIT, ClientInvoiceAdjustment::TYPE_CREDIT, ])], 'amount' => ['required', 'numeric', 'min:0'], 'remark' => ['nullable', 'string'], ]; } }