validate(['from_on' => 'required|date_format:Y-m-d', 'to_on' => 'required|date_format:Y-m-d|after_or_equal:from_on', 'account_id' => 'sometimes|required|integer|min:1', 'page' => 'sometimes|integer|min:1|max:100000', 'per_page' => 'sometimes|integer|in:25,100']); abort_if(array_diff(array_keys($r->query()), array_keys($d)) !== [], 422); try { $data = $ledger->report($this->actor($r), $kind, $d); } catch (\InvalidArgumentException $e) { abort(422, $e->getMessage()); } catch (\DomainException $e) { abort(403, $e->getMessage()); } if ($r->is('api/*')) { return response()->json($data)->header('Cache-Control', 'no-store'); } return response(ReportsWorkspace::render($data, ['host' => 'SGC autónomo', 'return_url' => '/general-ledger/cycle']))->header('Cache-Control', 'no-store'); } private function actor(Request $r): User { $user = $r->user(); abort_unless($user instanceof User, 403); return $user; } public function page(Request $r, GeneralLedger $ledger): Response { $d = $r->validate(['page' => 'sometimes|integer|min:1|max:100000']); abort_if(array_diff(array_keys($r->query()), ['page']) !== [], 422); $data = $ledger->workspace($this->actor($r), (int) ($d['page'] ?? 1)); return response(CycleWorkspace::render($data, ['host' => 'SGC autónomo', 'csrf' => csrf_token(), 'financial_url' => '/supplier-payments', 'return_url' => '/obrigacoes-fornecedores', 'page_url' => '/general-ledger/cycle']))->header('Cache-Control', 'no-store'); } public function command(Request $r, string $action, GeneralLedger $ledger): JsonResponse { abort_unless(config('general-ledger.cycle_enabled') === true, 403); try { return response()->json($ledger->engine($this->actor($r))->command($action, $r->all(), (string) $r->header('Idempotency-Key')))->header('Cache-Control', 'no-store'); } catch (\InvalidArgumentException $e) { abort(422, $e->getMessage()); } catch (\DomainException $e) { abort(409, $e->getMessage()); } } public function index(Request $r, GeneralLedger $ledger): JsonResponse { $d = $r->validate(['page' => 'sometimes|integer|min:1|max:100000']); abort_if(array_diff(array_keys($r->query()), ['page']) !== [], 422); return response()->json($ledger->workspace($this->actor($r), (int) ($d['page'] ?? 1)))->header('Cache-Control', 'no-store'); } }