<?php namespace App\Http\Controllers; use Clarkeash\Doorman\Exceptions\{ExpiredInviteCode,InvalidInviteCode,NotYourInviteCode}; use Clarkeash\Doorman\Facades\Doorman; use Illuminate\Http\Request; use Illuminate\View\View; use Barryvdh\Snappy\Facades\SnappyPdf as PDF; use App\Models\{Account,Invoice}; /** * Class InvoiceController * This controller manages invoices * * The methods to this controller should be projected by the route * * @package App\Http\Controllers */ class InvoiceController extends Controller { /** * Show a list of invoices to apply payments to * * @param Request $request * @return \Illuminate\Contracts\View\View */ public function api_account_invoices(Request $request): \Illuminate\Contracts\View\View { session()->flashInput($request->post('old',[])); return view('theme.backend.adminlte.payment.widget.invoices') ->with('pid',$request->post('pid')) ->with('o',Account::findOrFail($request->post('aid'))); } /** * Return the invoice in PDF format, ready to download * * @param Invoice $o * @return mixed */ public function pdf(Invoice $o) { return PDF::loadView('theme.backend.adminlte.u.invoice.home',['o'=>$o]) ->stream(sprintf('%s.pdf',$o->sid)); } /** * Render a specific invoice for the user * * @param Invoice $o * @param string|null $code * @return View */ public function view(Invoice $o,string $code=NULL): View { if ($code) { try { Doorman::redeem($code,$o->account->user->email); } catch (ExpiredInviteCode|InvalidInviteCode|NotYourInviteCode $e) { abort(404); } } return view('theme.backend.adminlte.invoice.view') ->with('o',$o); } }