diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php new file mode 100644 index 0000000..bf6b18a --- /dev/null +++ b/app/Http/Controllers/CustomerController.php @@ -0,0 +1,185 @@ +validated(); + + if ($validate) { + try { + // Save to database + Customer::create($validate); + return redirect() + ->route('customer.index') + ->with('success', 'Customer created successfully'); + } catch (Exception $e) { + return redirect() + ->route('customer.create') + ->with('error', 'Failed to create customer'); + } + } + } + + public function create() + { + $branches = Branch::all(); // Fetch all branches for the dropdown + return view('webstatement::customer.create', compact('branches')); + } + + public function edit($id) + { + $customer = Customer::find($id); + $branches = Branch::all(); // Fetch all branches for the dropdown + return view('webstatement::customer.create', compact('customer', 'branches')); + } + + public function update(CustomerRequest $request, $id) + { + $validate = $request->validated(); + + if ($validate) { + try { + // Update in database + $customer = Customer::find($id); + $customer->update($validate); + return redirect() + ->route('customer.index') + ->with('success', 'Customer updated successfully'); + } catch (Exception $e) { + return redirect() + ->route('customer.edit', $id) + ->with('error', 'Failed to update customer'); + } + } + } + + public function destroy($id) + { + try { + // Delete from database + $customer = Customer::find($id); + $customer->delete(); + + echo json_encode(['success' => true, 'message' => 'Customer deleted successfully']); + } catch (Exception $e) { + echo json_encode(['success' => false, 'message' => 'Failed to delete customer']); + } + } + + public function dataForDatatables(Request $request) + { + // Check user permissions + if (is_null($this->user) || !$this->user->can('customer.view')) { + //abort(403, 'Sorry! You are not allowed to view customers.'); + } + + // Retrieve data from the database + $query = Customer::query(); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $search_ = json_decode($search); + + if (isset($search_->search)) { + $query->where(function ($q) use ($search_) { + $q->where('customer_code', 'LIKE', "%$search_->search%"); + $q->orWhere('name', 'LIKE', "%$search_->search%"); + $q->orWhere('address', 'LIKE', "%$search_->search%"); + $q->orWhere('branch_code', 'LIKE', "%$search_->search%"); + $q->orWhereRelation('branch', 'name', 'LIKE', "%$search_->search%"); + $q->orWhere('date_of_birth', 'LIKE', "%$search_->search%"); + $q->orWhere('email', 'LIKE', "%$search_->search%"); + }); + } + + if (isset($search_->branch_code)) { + $query->whereHas('branch', function ($q) use ($search_) { + $q->where('id', $search_->branch_code); + }); + } + } + + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Get the total count of records + $totalRecords = $query->count(); + + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset + + $query->skip($offset)->take($size); + } + + // Get the filtered count of records + $filteredRecords = $query->count(); + + // Get the data for the current page + $data = $query->with('branch')->get(); + + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); + + // Calculate the current page number + $currentPage = 0 + 1; + + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function export() + { + return Excel::download(new CustomerExport, 'customer.xlsx'); + } + + public function search(Request $request) + { + $query = $request->input('query'); + + $customers = Customer::where('name', 'like', "%{$query}%") + ->orWhere('email', 'like', "%{$query}%") + ->limit(10) + ->get(['id', 'name', 'email']); + + return response()->json($customers); + } + }