ownerRef($request); $location = $this->locations->ensureDefault($owner); return view('pos.settings', [ 'location' => $location, 'merchantImportEnabled' => (bool) config('pos.merchant_import_enabled', true), 'tables' => PosTable::owned($owner)->orderBy('area')->orderBy('position')->orderBy('label')->get(), ]); } public function update(Request $request): RedirectResponse { $data = $request->validate([ 'name' => ['required', 'string', 'max:120'], 'currency' => ['required', 'string', 'size:3'], 'service_style' => ['required', 'in:retail,restaurant'], 'receipt_footer' => ['nullable', 'string', 'max:1000'], ]); $location = $this->locations->ensureDefault($this->ownerRef($request)); $location->update([ 'name' => $data['name'], 'currency' => strtoupper($data['currency']), 'service_style' => $data['service_style'], 'receipt_footer' => $data['receipt_footer'] ?? null, ]); return back()->with('success', 'Settings saved.'); } public function storeTable(Request $request): RedirectResponse { $data = $request->validate([ 'area' => ['nullable', 'string', 'max:60'], 'label' => ['required', 'string', 'max:60'], 'seats' => ['nullable', 'integer', 'min:1', 'max:99'], ]); $owner = $this->ownerRef($request); $location = $this->locations->ensureDefault($owner); PosTable::create([ 'owner_ref' => $owner, 'location_id' => $location->id, 'area' => $data['area'] ?? null, 'label' => $data['label'], 'seats' => $data['seats'] ?? 2, 'status' => PosTable::STATUS_FREE, 'position' => (int) PosTable::owned($owner)->max('position') + 1, ]); return back()->with('success', 'Table added.'); } public function destroyTable(Request $request, PosTable $table): RedirectResponse { $this->authorizeOwner($request, $table); if (! $table->isFree()) { return back()->with('error', 'Settle the open ticket before removing this table.'); } $table->delete(); return back()->with('success', 'Table removed.'); } public function importCrm(Request $request, CrmProductImportService $import): RedirectResponse { try { $result = $import->import($this->ownerRef($request)); return back()->with('success', "Imported {$result['imported']} product(s), updated {$result['updated']}."); } catch (RuntimeException $e) { return back()->with('error', $e->getMessage()); } } public function importMerchant(Request $request, MerchantCatalogImportService $import): RedirectResponse { try { $result = $import->import($this->ownerRef($request)); return back()->with('success', "Imported {$result['imported']} item(s) from {$result['storefronts']} storefront(s), updated {$result['updated']}."); } catch (RuntimeException $e) { return back()->with('error', $e->getMessage()); } } }