$o]); } /** * Record payments on an account. * * @param Request $request * @param Payment $o * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse */ public function pay_add(Request $request,Payment $o) { if ($request->post()) { $validation = $request->validate([ 'account_id' => 'required|exists:ab_account,id', 'date_payment' => 'required|date', 'checkout_id' => 'required|exists:ab_checkout,id', 'total_amt' => 'required|numeric|min:0.01', 'fees_amt' => 'nullable|numeric|lt:total_amt', 'source_id' => 'nullable|exists:ab_account,id', 'pending' => 'nullable|boolean', 'notes' => 'nullable|string', 'ip' => 'nullable|ip', 'invoices' => ['nullable','array',function ($attribute,$value,$fail) use ($request) { if (collect($value)->sum() > $request->post('total_amt')) $fail('Allocation is greater than payment total.'); }], 'invoices.*.id' => 'nullable|exists:ab_invoice,id', ]); $oo = new Payment; $oo->forceFill($request->only(['account_id','date_payment','checkout_id','checkout_id','total_amt','fees_amt','source_id','pending','notes','ip'])); $oo->site_id = config('SITE')->site_id; $oo->save(); foreach ($validation['invoices'] as $id => $amount) { $ooo = new PaymentItem; $ooo->invoice_id = $id; $ooo->alloc_amt = $amount; $ooo->site_id = config('SITE')->site_id; $oo->items()->save($ooo); } return redirect()->back() ->with('success','Payment recorded'); } return view('a.payment.add') ->with('o',$o); } /** * Show a list of invoices to apply payments to * * @param Account $o * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function pay_invoices(Account $o) { return view('a.payment.widgets.invoices') ->with('o',$o); } /** * Site setup * * @note This method is protected by the routes * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse */ public function setup(Request $request) { if ($request->post()) { $validated = $request->validate([ 'site_name' => 'required|string|max:255', 'site_email' => 'required|string|email|max:255', 'site_address1' => 'required|string|max:255', 'site_address2' => 'nullable|string|max:255', 'site_city' => 'required|string|max:64', 'site_state' => 'required|string|max:32', 'site_postcode' => 'required|string|max:8', 'site_description' => 'nullable|string|min:5', 'site_phone' => 'nullable|regex:/[0-9 ]+/|min:6|max:12', 'site_fax' => 'nullable|regex:/[0-9 ]+/|min:6|max:12', 'site_tax' => 'required|regex:/[0-9 ]+/|size:14', 'social' => 'nullable|array', 'top_menu' => 'nullable|array', 'site_logo' => 'nullable|image', 'email_logo' => 'nullable|image', ]); $site = config('SITE'); // @todo - not currently rendered in the home page $validated['social'] = []; $validated['top_menu'] = []; // Handle the images foreach(['site_logo','email_logo'] as $key) if (array_key_exists($key,$validated)) $validated[$key] = ($x=$validated[$key])->storeAs('site/'.$site->site_id,$x->getClientOriginalName(),'public'); foreach ($site->details as $oo) if (array_key_exists($oo->key,$validated)) { $oo->value = Arr::get($validated,$oo->key); $oo->save(); unset($validated[$oo->key]); } // Left over values to be created. foreach ($validated as $k=>$v) { $oo = new SiteDetail; $oo->key = $k; $oo->value = $v ?: ''; $site->details()->save($oo); } return redirect()->back() ->with('success','Settings saved'); } return view('a.setup'); } }