. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Bill; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Attachments\AttachmentHelperInterface; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Requests\BillStoreRequest; use FireflyIII\Repositories\Bill\BillRepositoryInterface; use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Log; /** * Class CreateController */ class CreateController extends Controller { private AttachmentHelperInterface $attachments; private BillRepositoryInterface $repository; /** * BillController constructor. * * @codeCoverageIgnore */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { app('view')->share('title', (string) trans('firefly.bills')); app('view')->share('mainTitleIcon', 'fa-calendar-o'); $this->attachments = app(AttachmentHelperInterface::class); $this->repository = app(BillRepositoryInterface::class); return $next($request); } ); } /** * Create a new bill. * * @param Request $request * * @return Factory|View */ public function create(Request $request) { $periods = []; /** @var array $billPeriods */ $billPeriods = config('firefly.bill_periods'); foreach ($billPeriods as $current) { $periods[$current] = (string) trans('firefly.repeat_freq_' . $current); } $subTitle = (string) trans('firefly.create_new_bill'); $defaultCurrency = app('amount')->getDefaultCurrency(); // put previous url in session if not redirect from store (not "create another"). if (true !== session('bills.create.fromStore')) { $this->rememberPreviousUrl('bills.create.url'); } $request->session()->forget('bills.create.fromStore'); return view('bills.create', compact('periods', 'subTitle', 'defaultCurrency')); } /** * Store a new bill. * * @param BillStoreRequest $request * * @return RedirectResponse * */ public function store(BillStoreRequest $request): RedirectResponse { $billData = $request->getBillData(); $billData['active'] = true; try { $bill = $this->repository->store($billData); } catch (FireflyException $e) { Log::error($e->getMessage()); $request->session()->flash('error', (string) trans('firefly.bill_store_error')); return redirect(route('bills.create'))->withInput(); } $request->session()->flash('success', (string) trans('firefly.stored_new_bill', ['name' => $bill->name])); app('preferences')->mark(); /** @var array $files */ $files = $request->hasFile('attachments') ? $request->file('attachments') : null; if (null !== $files && !auth()->user()->hasRole('demo')) { $this->attachments->saveAttachmentsForModel($bill, $files); } if (null !== $files && auth()->user()->hasRole('demo')) { session()->flash('info', (string) trans('firefly.no_att_demo_user')); } if (count($this->attachments->getMessages()->get('attachments')) > 0) { $request->session()->flash('info', $this->attachments->getMessages()->get('attachments')); } return redirect(route('rules.create-from-bill', [$bill->id])); } }