user()->business_id; $type = $request->type; $templates = Template::where('business_id', $businessId) ->where('type', $type) ->get() ->keyBy('title'); $page_data = Option::where('key', 'notification_settings_' . $businessId)->first()?->value ?? []; return view('marketingaddon::templates.index', compact('templates', 'page_data')); } public function store(Request $request) { $businessId = auth()->user()->business_id; $type = $request->type; $tabs = ['new_sale', 'payment_received', 'payment_paid', 'purchase', 'payment_reminder', 'attendance']; $request->validate(collect($tabs) ->flatMap(function ($key) use ($request, $type) { if (!$request->has($key)) { return []; } return [ "{$key}.template" => 'nullable|string|max:255', "{$key}.subject" => $type === 'email' ? 'required|string|max:255' : 'nullable|string|max:255', "{$key}.message" => 'required|string|max:1000', ]; })->toArray() ); $optionKey = 'notification_settings_' . $businessId; $option = Option::firstOrCreate( ['key' => $optionKey], ['value' => []] ); $optionValue = $option->value ?? []; foreach ($tabs as $tab) { if (!$request->has($tab)) continue; $tabData = $request->{$tab}; $optionValue[$tab][$type]['enabled'] = $tabData[$type]['enabled'] ?? 0; $message = $tabData['message'] ?? null; $variables = $message ? extractTemplateVariables($message) : []; Template::updateOrCreate( [ 'business_id' => $businessId, 'title' => $tab, 'type' => $type, ], [ 'subject' => $tabData['subject'] ?? null, 'template' => $tabData['template'] ?? null, 'message' => $message, 'variables' => $variables, ] ); } $option->update(['value' => $optionValue]); Cache::forget($optionKey); return response()->json(__(ucfirst($type) . ' template updated successfully')); } }