firstOrFail(); // These routes carry no company header, so ScopeBouncer is not in their // middleware stack and the ability scope was never set. 'view-financial-reports' // is stored scoped to a company, so the unscoped check always failed and every // report PDF answered 403. Scope to the company named in the URL: the policy // still checks membership, so this grants nothing new. BouncerFacade::scope()->to($company->id); $this->authorize('view report', $company); $locale = CompanySetting::getSetting('language', $company->id); App::setLocale($locale); $items = InvoiceItem::whereCompany($company->id) ->applyInvoiceFilters($request->only(['from_date', 'to_date'])) ->itemAttributes() ->get(); $totalAmount = 0; foreach ($items as $item) { $totalAmount += $item->total_amount; } $dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id); $from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->translatedFormat($dateFormat); $to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->translatedFormat($dateFormat); $currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id)); $colors = [ 'primary_text_color', 'heading_text_color', 'section_heading_text_color', 'border_color', 'body_text_color', 'footer_text_color', 'footer_total_color', 'footer_bg_color', 'date_text_color', ]; $colorSettings = CompanySetting::whereIn('option', $colors) ->whereCompany($company->id) ->get(); view()->share([ 'items' => $items, 'colorSettings' => $colorSettings, 'totalAmount' => $totalAmount, 'company' => $company, 'from_date' => $from_date, 'to_date' => $to_date, 'currency' => $currency, ]); $pdf = Pdf::loadView('app.pdf.reports.sales-items'); if ($request->has('preview')) { return view('app.pdf.reports.sales-items'); } if ($request->has('download')) { return $pdf->download(); } return $pdf->stream(); } }