/home2/mshostin/carnival.ms-hostingladz.com/app/Http/Controllers/SubVendorController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Product;
use App\Models\Category;
use App\Models\Variant;
use App\Models\Event;
use App\Models\Ticket;
use App\Models\Package;
use Illuminate\Support\Facades\Auth;
use App\Services\ProductService;
use App\Services\EventService;
class SubVendorController extends Controller
{
protected $productService, $eventService;
public function __construct(ProductService $productService, EventService $eventService)
{
$this->productService = $productService;
$this->eventService = $eventService;
}
public function index()
{
return view('dashboard.subVendor.pages.user_management.index');
}
public function indexProducts()
{
$categories = Category::all();
$variants = Variant::all();
$products = Product::where('user_id', Auth::id())->get();
return view('dashboard.subVendor.products.index', compact('products', 'variants', 'categories'));
}
public function storeProducts(Request $request)
{
$request->validate([
'title' => 'required',
'category_id' => 'required',
'description' => 'required',
'old_price' => 'required',
'new_price' => 'required',
'status' => 'required',
'variant_id' => 'required|array',
'variant_id.*' => 'exists:variants,id',
]);
$product = $this->productService->createProduct($request->all());
if ($product) {
$products = Product::where('user_id', Auth::id())->get();
$view = view('dashboard.admin.products.table', compact('products'))->render();
return response()->json(['message' => 'Product created successfully', 'table_html' => $view], 200);
} else {
return response()->json(['error' => 'Failed to create Product'], 500);
}
}
public function editProducts($id)
{
$product = Product::with('category', 'variants')->findOrFail($id);
$categories = Category::all();
return response()->json(['product' => $product]);
}
public function updateProducts(Request $request, $id)
{
$request->validate([
'title' => 'required',
'category_id' => 'required',
'description' => 'required',
'old_price' => 'required',
'new_price' => 'required',
'status' => 'required',
]);
$product = Product::findOrFail($id);
$this->productService->updateProduct($product, $request->all());
return redirect()->route('products.index')->with('success', 'Product updated successfully.');
}
public function indexEvents()
{
$packages = Package::all();
$ticktes = Ticket::all();
$packageId = Auth::user()->subVendor->vendor->package->id;
$categories = Category::with('package')->get();
$events = Event::where('user_id', Auth::id())->get(['id', 'name', 'start_date', 'end_date']);
return view('dashboard.subVendor.events.index', compact('packages', 'categories', 'events', 'ticktes'));
}
public function storeEvents(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'package_id' => 'required|exists:packages,id',
'category_id' => 'required|exists:categories,id',
'total_no_of_tickets' => 'required|integer|min:1',
'venue' => 'required|string|max:255',
'address' => 'required|string|max:255',
'dress_code' => 'nullable|array',
'dress_code.*' => 'nullable|string|max:255',
'ticket_id' => 'required|array',
'ticket_id.*' => 'exists:tickets,id',
'description' => 'nullable|string',
'eventType' => 'required|in:private,public',
'start_date' => 'nullable|date',
'start_time' => 'nullable',
'end_date' => 'nullable|date|after_or_equal:start_date',
'end_time' => 'nullable|after:start_time',
'all_day' => 'nullable',
'status' => 'required|in:active,inactive',
]);
$request['user_id'] = Auth::id();
if ($request->has('all_day')) {
$request['all_day'] = $request->all_day ? 1 : 0;
$event = $this->eventService->createEvent($request->all());
return response()->json(['success' => 'Event created successfully.', 'event' => $event]);
}
}
public function editEvents(Event $event)
{
$packages = Package::all();
$categories = Category::all();
return view('dashboard.admin.events.edit', compact('event', 'packages', 'categories'));
}
public function updateEvents(Request $request, Event $event)
{
$request->validate([
'name' => 'required|string|max:255',
'package_id' => 'required|exists:packages,id',
'category_id' => 'required|exists:categories,id',
'description' => 'nullable|string',
'status' => 'required|in:active,inactive',
]);
$event = $this->eventService->updateEvent($event, $request->all());
return redirect()->route('events.index')
->with('success', 'Event updated successfully.');
}
}