![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mcoil.corals.io/app/Http/Controllers/Admin/Customers/ |
<?php namespace App\Http\Controllers\Admin\Customers; use App\Shop\Customers\Customer; use App\Shop\Customers\Repositories\CustomerRepository; use App\Shop\Customers\Repositories\Interfaces\CustomerRepositoryInterface; use App\Shop\Customers\Requests\CreateCustomerRequest; use App\Shop\Customers\Requests\UpdateCustomerRequest; use App\Shop\Customers\Transformations\CustomerTransformable; use App\Shop\Orders\Order; use App\Http\Controllers\Controller; use App\Shop\Orders\Transformers\OrderTransformable; use App\Shop\Addresses\Repositories\Interfaces\AddressRepositoryInterface; use App\Shop\Addresses\Address; use App\Shop\Addresses\Repositories\AddressRepository; use Illuminate\Http\Request; class CustomerController extends Controller { use CustomerTransformable; use OrderTransformable; /** * @var CustomerRepositoryInterface */ private $customerRepo; /** * CustomerController constructor. * @param CustomerRepositoryInterface $customerRepository */ public function __construct(CustomerRepositoryInterface $customerRepository,AddressRepositoryInterface $addressRepository) { $this->customerRepo = $customerRepository; $this->addressRepo = $addressRepository; } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return view('admin.customers.list'); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('admin.customers.create'); } /** * Store a newly created resource in storage. * * @param CreateCustomerRequest $request * @return \Illuminate\Http\Response */ public function store(CreateCustomerRequest $request) { $data = $request->except('_token', '_method'); $data['name'] = $data['fname'] . ' ' . $data['lname']; $data['phone'] = $request->has('address_phone') ? $request->input('address_phone') : ''; $customer = $this->customerRepo->createCustomer($data); $address_data['address_1']=$request->has('address_1') ? $request->input('address_1') : ''; $address_data['address_2']=$request->has('address_2') ? $request->input('address_2') : ''; $address_data['town'] = $request->has('town') ? $request->input('town') : ''; $address_data['county'] = $request->has('county') ? $request->input('county') : ''; $address_data['zip'] = $request->has('zip') ? $request->input('zip') : ''; $address_data['phone'] = $request->has('address_phone') ? $request->input('address_phone') : ''; $address_data['customer'] = isset($customer->id) ? $customer->id : ''; $address_data['status'] = $request->has('status') ? $request->input('status') : 0; $this->addressRepo->createAddress($address_data); return redirect()->route('admin.customers.index')->with('message', 'Customer added successfully.'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show(int $id) { $customer = $this->customerRepo->findCustomerById($id); // Fetch all orders $orders = Order::leftJoin('customers','customers.id','=','orders.driver_id') ->select('orders.*','customers.name as driver_name') ->where(['orders.customer_id' => $id])->get(); $orders->transform(function (Order $order) { return $this->transformOrder($order); }); $orders->load('products'); // $allOrders = $this->customerRepo->paginateArrayResults($orders->toArray(), 15); return view('admin.customers.show', [ 'customer' => $customer, 'addresses' => $customer->addresses, 'orders' => $orders->toArray(), ]); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $addresses = Address::where('customer_id',$id)->first(); return view('admin.customers.edit', ['customer' => $this->customerRepo->findCustomerById($id),'address'=>$addresses]); } /** * Update the specified resource in storage. * * @param UpdateCustomerRequest $request * @param int $id * @return \Illuminate\Http\Response */ public function update(UpdateCustomerRequest $request, $id) { $customer = $this->customerRepo->findCustomerById($id); $update = new CustomerRepository($customer); $data = $request->except('_method', '_token', 'password'); if ($request->has('password') && $request->input('password') != '') { $data['password'] = bcrypt($request->input('password')); } $data['name'] = $data['fname'] . ' ' . $data['lname']; $data['phone'] = $request->has('address_phone') ? $request->input('address_phone') : ''; $update->updateCustomer($data); $addressId = $request->input('address_id'); $address = $this->addressRepo->findAddressById($addressId); $update = new AddressRepository($address); $address_data['address_1']=$request->has('address_1') ? $request->input('address_1') : ''; $address_data['address_2']=$request->has('address_2') ? $request->input('address_2') : ''; $address_data['town'] = $request->has('town') ? $request->input('town') : ''; $address_data['county'] = $request->has('county') ? $request->input('county') : ''; $address_data['zip'] = $request->has('zip') ? $request->input('zip') : ''; $address_data['phone'] = $request->has('address_phone') ? $request->input('address_phone') : ''; $address_data['status'] = $request->has('status') ? $request->input('status') : 0; $update->updateAddress($address_data); //$request->session()->flash('message', 'Update successful'); //return redirect()->route('admin.customers.edit', $id); return redirect()->route('admin.customers.index')->with('message', 'Customer updated successfully.'); } /** * Remove the specified resource from storage. * * @param int $id * * @return \Illuminate\Http\Response * @throws \Exception */ public function destroy(int $id) { Address::where("customer_id",$id)->delete(); \DB::table('customers')->where('id',$id)->delete(); return redirect()->route('admin.customers.index')->with('message', 'Delete successful'); } public function paginateCustomers(Request $request){ $columns = array( 0 =>'id', 1 =>'name', 2=> 'email', 3=> 'created_at', 4=> 'status', 5=> 'actions', ); $totalData = Customer::where('is_driver','0')->count(); $totalFiltered = $totalData; $start = $request->input('start'); $limit = $request->input('length'); $order = $columns[$request->input('order.0.column')]; $dir = $request->input('order.0.dir'); $data =[]; if(empty($request->input('search.value'))){ $list = Customer::where('is_driver','0') ->offset($start) ->limit($limit)->orderBy($order,$dir)->get(); if(count($list) > 0){ foreach($list as $cus){ $check_order = Order::where('customer_id',$cus->id)->first(); if($check_order){ $btn = "<button type='submit' id='{ $cus->id }' title='Delete' class='btn btn-danger' disabled><i class='fa fa-times'></i> Delete</button>"; }else{ $btn = "<button type='submit' id='{ $cus->id }' title='Delete' class='btn btn-danger delete_submit'><i class='fa fa-times'></i> Delete</button>"; } if($cus->status != '1'){ $status = '<span class="badge font-badge badge-danger">disabled</span>'; }else{ $status = '<span class="badge font-badge badge-success">enabled</span>'; } $destroy = route('admin.customers.destroy', $cus->id); $show = route('admin.customers.show', $cus->id); $edit = route('admin.customers.edit', $cus->id); $csrf_token = csrf_token(); $actions = "<form action='{$destroy}' method='post' id='remove-from-form' class='form-horizontal'><input type='hidden' name='id' value='{ $cus->id }'><input type='hidden' name='_token' value='{$csrf_token}' /> <input type='hidden' name='_method' value='delete'><div class='btn-group'><a href='{$show}' class='btn btn-default'><i class='fa fa-eye'></i> View</a> <a href='{$edit}' class='btn btn-dark'><i class='fa fa-pencil'></i> Edit</a> ".$btn."</div></form>"; $nestedData['id'] = $cus->id; $nestedData['name'] = $cus->name; $nestedData['email'] = $cus->email; $nestedData['created_at'] = date('M d, Y h:i a', strtotime($cus->created_at)); //$nestedData['status'] = $date; $nestedData['total'] = $totalData; $nestedData['status'] = $status; $nestedData['actions'] = $actions; $data[] = $nestedData; } } }else{ $search = $request->input('search.value'); $list = Customer::where('is_driver','0'); $list = $list->where(function($query) use($search){ $query->where('name','LIKE','%'.$search.'%') ->orWhere('email','LIKE','%'.$search.'%') ->orWhere('id','LIKE','%'.$search.'%') ->orWhere(\DB::raw("(STR_TO_DATE(created_at,'%b %d %Y %H:%i:%s'))"), "LIKE", "%{$search}%"); }); $totalFiltered = $list->count(); $list = $list->offset($start) ->limit($limit)->orderBy($order,$dir)->get(); if(count($list) > 0){ foreach($list as $cus){ $check_order = Order::where('customer_id',$cus->id)->first(); if($check_order){ $btn = "<button type='submit' id='{ $cus->id }' title='Delete' class='btn btn-danger' disabled><i class='fa fa-times'></i> Delete</button>"; }else{ $btn = "<button type='submit' id='{ $cus->id }' title='Delete' class='btn btn-danger delete_submit'><i class='fa fa-times'></i> Delete</button>"; } if($cus->status != '1'){ $status = '<span class="badge font-badge badge-danger">disabled</span>'; }else{ $status = '<span class="badge font-badge badge-success">enabled</span>'; } $destroy = route('admin.customers.destroy', $cus->id); $show = route('admin.customers.show', $cus->id); $edit = route('admin.customers.edit', $cus->id); $csrf_token = csrf_token(); $actions = "<form action='{$destroy}' method='post' id='remove-from-form' class='form-horizontal'><input type='hidden' name='id' value='{ $cus->id }'><input type='hidden' name='_token' value='{$csrf_token}' /> <input type='hidden' name='_method' value='delete'><div class='btn-group'><a href='{$show}' class='btn btn-default'><i class='fa fa-eye'></i> View</a> <a href='{$edit}' class='btn btn-dark'><i class='fa fa-pencil'></i> Edit</a> ".$btn."</div></form>"; $nestedData['id'] = $cus->id; $nestedData['name'] = $cus->name; $nestedData['email'] = $cus->email; $nestedData['created_at'] = date('M d, Y h:i a', strtotime($cus->created_at)); //$nestedData['status'] = $date; $nestedData['total'] = $totalData; $nestedData['status'] = $status; $nestedData['actions'] = $actions; $data[] = $nestedData; } } } $json_data = array( "draw" => intval($request->input('draw')), "recordsTotal" => intval($totalData), "recordsFiltered" => intval($totalFiltered), "data" => $data ); echo json_encode($json_data); } }