Viewing file: CustomerController.php (9.91 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Admin;
use App\Events\SendMail; use App\Http\Controllers\Controller; use App\Models\AuthorizationToken; use App\Models\BillingRequest; use App\Models\Customer; use App\Models\CustomerEmailLog; use App\Models\CustomerSettings; use App\Models\CustomerWallet; use App\Models\Label; use App\Models\Number; use App\Models\Order; use App\Models\OrderDetails; use App\Models\Plan; use App\Models\SenderId; use App\Models\Transaction; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Mail;
class CustomerController extends Controller { public function index() { return view('admin.customers.index'); }
public function getAll() { $customers = Customer::with(['wallet'])->select(['id', 'first_name', 'last_name', 'email', 'status', 'created_at']); return datatables()->of($customers) ->addColumn('status', function ($q) { if($q->status=='Active'){ $status='<span class="badge bg-green">Active</span>'; }else{ $status='<span class="badge bg-danger">Inactive</span>'; } return $status; }) ->addColumn('profile', function ($q) { return $q->full_name.'<br>' . '<div class="email-address">' .$q->email. '</div>' ; }) ->addColumn('created_at', function ($q) { return formatDate($q->created_at); }) ->addColumn('balance', function ($q) { if ($q->wallet){ $wallet = $q->wallet->amount; }else{ $wallet = 0; } return formatNumberWithCurrSymbol($wallet); }) ->addColumn('action', function (Customer $q) {
return '<div class="btn-group-vertical"> <div class="btn-group"> <i class="fa fa-ellipsis-h text-success" type="button" data-toggle="dropdown" aria-expanded="false"></i> <ul class="dropdown-menu" style=""> <li><a class="dropdown-item data-customer" data-url="'.route('admin.customers.update',[$q]).'" data-id="'.$q->id.'" data-first-name="'.$q->first_name.'" data-last-name="'.$q->last_name.'" data-email="'.$q->email.'" data-status="'.$q->status.'" data-toggle="modal" data-target="#threedot" href="#">Edit</a></li> <li><a class="dropdown-item" href="#" data-message="You will be logged in as customer?" data-action='.route('admin.customer.login.ass').' data-input={"id":'.$q->id.'} data-toggle="modal" data-target="#modal-confirm" >Login as</a></li> <li><a class="dropdown-item customRate" href="#" data-id="'.$q->id.'">Custom Rate</a></li> <li><a class="dropdown-item addOrSubtractBalanceBtn" href="#" data-id="'.$q->wallet->id.'" data-balance="'.$q->wallet->amount.'">Add/Subtract Balance</a></li> <li><a class="dropdown-item customerMailModalBtn" href="#" data-email="'.$q->email.'">Send Mail</a></li> <li><a class="dropdown-item" href="#" data-message="Are you sure you want to delete ?" data-action='.route('admin.customers.destroy',[$q]).' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm" >Delete</a></li> </ul> </div> </div>' ;
}) ->rawColumns(['action','profile','status']) ->toJson(); } public function create() { return view('admin.customers.create'); } public function destroy(Customer $customer){ $orders = $customer->orders()->get(); foreach ($orders as $order){ $order->orderdetails()->delete(); } $customer->orders()->delete(); $customer->deposit()->delete(); $customer->wallet()->delete(); $customer->transactions()->delete(); $customer->delete(); return back()->with('success', 'Customer successfully deleted'); } public function store(Request $request) { $request->validate([ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required|unique:customers', 'password' => 'required', 'status' => 'required|in:active,inactive', ]);
$request['email_verified_at']=now();
$customer=auth()->user()->customers()->create($request->all());
$access_token= $customer->createToken($customer->email)->plainTextToken; $preToken = AuthorizationToken::where('customer_id', $customer->id)->first(); $authorization = isset($preToken) ? $preToken : new AuthorizationToken(); $authorization->access_token = $access_token; $authorization->customer_id=$customer->id; $authorization->refresh_token = $access_token; $authorization->save();
$customer->wallet()->create(['amount'=> 0]); return back()->with('success', 'Customer successfully created'); }
public function edit(Customer $customer) { $data['customer'] = $customer; return view('admin.customers.edit', $data); }
public function update(Customer $customer, Request $request) { $request->validate([ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required|unique:customers,email,' . $customer->id, 'status' => 'required' ]);
//Check for password availability if (!$request->password) unset($request['password']);
//update the model $customer->update($request->all());
return back()->with('success', 'Customer successfully updated'); }
public function loginAs(Request $request){ if(!$request->id) abort(404); auth('customer')->loginUsingId($request->id); return redirect()->route('customer.dashboard')->with('success',trans('You are now logged as customer')); } public function mailSend(Request $request){ $request->validate([ 'recipient_mail' => 'required', 'email_subject' => 'required', 'email_body' => 'required', ]); try { $regTemp = $request->email_body; SendMail::dispatch($request->recipient_mail, $request->email_subject, $regTemp); } catch (\Exception $ex) { return redirect()->back()->withErrors(['msg' => trans('Invalid email credentials')]); } CustomerEmailLog::create($request->all()); return redirect()->back()->with('success',trans('Email successfully send')); } public function balanceUpdate(Request $request){ $request->validate([ 'id' => 'required|numeric', 'type' => 'required|in:add,subtract', 'amount' => 'required|numeric', ]); $wallet = CustomerWallet::where('id',$request->id)->firstOrFail();
if ($request->type == 'add'){ Transaction::create([ 'customer_id'=> $wallet->customer_id, 'amount'=> $request->amount, 'payment_type'=> 'offline', 'type'=> 'add', 'payment_status'=> 'paid', 'status'=> 'approved', ]); $amount = $wallet->amount + $request->amount; }elseif ($request->type == 'subtract'){ if ($wallet->amount < $request->amount){ return redirect()->back()->withErrors(['msg' => trans('admin.balance_test')]); } Transaction::create([ 'customer_id'=> $wallet->customer_id, 'amount'=> $request->amount, 'payment_type'=> 'offline', 'type'=> 'subtract', 'payment_status'=> 'paid', 'status'=> 'approved', ]); $amount = $wallet->amount - $request->amount; } $wallet->update(['amount'=>$amount]); return redirect()->back()->with('success',trans('Customer wallet balance successfully updated')); } public function servicePurchase(Request $request){
$orders = Order::where('customer_id',$request->id)->where('status','pending')->pluck('id'); $orderdetails=OrderDetails::whereIn('order_id',$orders)->get(); $services = []; foreach ($orderdetails as $order){ if ($order && $order->service){ $services[] = [ 'name'=>$order->service->name, 'rate_per'=>$order->service->rate_per, 'charges'=>$order->charges, 'order_quantity'=>$order->order_quantity, 'service_id'=>$order->service_id, ]; }
}
$serviceUniques = array(); foreach ($services as $service) { $serviceUniques[$service['name']] = $service; } return response()->json(['status'=>'success','data'=>$serviceUniques]); } public function customRateStore(Request $request){ $request->validate([ 'service_id' => 'required|numeric', 'customer_charges' => 'required|numeric', ]); OrderDetails::where('service_id',$request->service_id)->update(['charges'=>$request->customer_charges]); return redirect()->back()->with('success',trans('Customer charges successfully updated')); } }
|