Viewing file: NumberController.php (15.11 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller; use App\Models\BillingRequest; use App\Models\Customer; use App\Models\CustomerNumber; use App\Models\DynamicGateway; use App\Models\Invoice; use App\Models\Number; use App\Models\NumberRequest; use App\Models\Transactions; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB;
class NumberController extends Controller { public function index(){ return view('admin.numbers.index'); }
public function getAll(){ $customers=auth()->user()->numbers()->select(['id','number','dynamic_gateway_id','purch_price','sell_price','status','created_at','sms_capability','mms_capability','voice_capability','whatsapp_capability'])->orderByDesc('created_at'); return datatables()->of($customers) ->addColumn('created_at',function($q){ return $q->created_at->format('d-m-Y'); }) ->addColumn('purch_price',function($q){ return formatNumberWithCurrSymbol($q->purch_price); }) ->addColumn('capabilities',function($q){ $number=$q; $capability=''; if($number->sms_capability=='yes') { $capability = '<span class="badge badge-success capability-badge">SMS</span>'; } if($number->mms_capability=='yes') { $capability =$capability. '<span class="badge badge-success capability-badge ml-2">MMS</span>'; } if($number->voice_capability=='yes') { $capability =$capability. '<span class="badge badge-success capability-badge ml-2">Voice SMS</span>'; } if($number->whatsapp_capability=='yes') { $capability =$capability. '<span class="badge badge-success capability-badge ml-2">Whatsapp</span>'; } return $capability; }) ->addColumn('sell_price',function($q){ return formatNumberWithCurrSymbol($q->sell_price); }) ->addColumn('number',function($q){ $numberRequest=NumberRequest::where('number_id', $q->id)->where('status', 'approved')->first(); $customerNumber=CustomerNumber::where('number_id', $q->id)->first(); if($numberRequest || $customerNumber) { $number = $q->number . ' <span class="badge badge-danger ml-2">Sold</span>'; }else{ $number = $q->number . ' <span class="badge badge-success ml-2">Available</span>'; } return $number; }) ->addColumn('from',function($q){ $gateway=$q->gateway->name; return $gateway; }) ->addColumn('status',function($q){ if($q->status=='Active') { $status= '<strong class="text-white bg-success px-2 py-1 rounded status-font-size"> '.ucfirst($q->status).' </strong>'; }else{ $status= '<strong class="text-white bg-danger px-2 py-1 rounded status-font-size"> '.ucfirst($q->status).' </strong>'; } return $status; }) ->addColumn('action',function($q){ return "<a class='btn btn-sm btn-info' href='".route('admin.numbers.edit',[$q->id])."' title='Edit'><i class='fa fa-pencil-alt'></i></a> ". '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to delete this number?" data-action='.route('admin.numbers.destroy',[$q]).' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm" title="Delete"><i class="fa fa-trash"></i></button>' ; }) ->rawColumns(['action','number','from','status','purch_price','sell_price','capabilities']) ->toJson(); } public function create(){ $data['gateways']=auth()->user()->gateways()->where('status', 'active')->get(); return view('admin.numbers.create', $data); }
public function store(Request $request){
$request->validate([ 'number'=>'required|unique:numbers|regex:/^[0-9\-\+]{9,15}$/', 'purch_price'=>'required|numeric', 'sell_price'=>'required|numeric', 'dynamic_gateway_id'=>'required', 'status'=>'required|in:active,inactive' ]);
if ($request->sms_capability && $request->sms_capability=='on'){ $request['sms_capability']='yes'; }else{ $request['sms_capability']='no'; } if ($request->mms_capability && $request->mms_capability=='on'){ $request['mms_capability']='yes'; }else{ $request['mms_capability']='no'; }
if ($request->voice_capability && $request->voice_capability=='on'){ $request['voice_capability']='yes'; }else{ $request['voice_capability']='no'; }
if ($request->whatsapp_capability && $request->whatsapp_capability=='on'){ $request['whatsapp_capability']='yes'; }else{ $request['whatsapp_capability']='no'; }
if(!auth()->user()->default_number()){ $request['is_default']=isset($request->is_default)?'yes':'no'; }
$request['number']="+".str_replace('+','',$request->number); $number = auth()->user()->numbers()->create($request->all());
if ($number->is_default == 'yes') { $customers = Customer::all(); $time = Carbon::now()->addMonths(1); foreach ($customers as $customer) { if(!$customer->numbers()->where('is_default', 'yes')->first()) { $customer->numbers()->create(['number_id' => $number->id, 'number' => $number->number, 'expire_date' => $time, 'cost' => $number->sell_price, 'is_default'=>'yes','dynamic_gateway_id'=>$number->dynamic_gateway_id]); } } }
return back()->with('success', trans('admin.message.number_created')); }
public function edit(Number $number){ $data['gateways']=DynamicGateway::where('status', 'active')->get(); $data['number']=$number; return view('admin.numbers.edit',$data); }
public function update(Number $number,Request $request){ $request->validate([ 'purch_price'=>'required|numeric', 'sell_price'=>'required|numeric', 'status'=>'required|in:active,inactive' ]);
$request['is_default']=isset($request->is_default)?'yes':'no';
$numbers = Number::where('is_default', 'yes')->first(); if (!$numbers && $request->is_default) { $customers = Customer::all(); $time = Carbon::now()->addMonths(1); foreach ($customers as $customer) { if (!$customer->numbers()->where('is_default', 'yes')->first()) { $customer->numbers()->create(['number_id' => $number->id, 'number' => $number->number, 'expire_date' => $time, 'cost' => $number->sell_price, 'is_default' => 'yes', 'sms_capability'=>$number->sms_capability,'mms_capability'=>$number->mms_capability,'voice_capability'=>$number->voice_capability, 'whatsapp_capability'=>$number->whatsapp_capability]); } } }
if ($request->sms_capability && $request->sms_capability=='on'){ $request['sms_capability']='yes'; }else{ $request['sms_capability']='no'; } if ($request->mms_capability && $request->mms_capability=='on'){ $request['mms_capability']='yes'; }else{ $request['mms_capability']='no'; }
if ($request->voice_capability && $request->voice_capability=='on'){ $request['voice_capability']='yes'; }else{ $request['voice_capability']='no'; }
if ($request->whatsapp_capability && $request->whatsapp_capability=='on'){ $request['whatsapp_capability']='yes'; }else{ $request['whatsapp_capability']='no'; }
$valid_data=$request->only('purch_price','sell_price','status','is_default','sms_capability','mms_capability','voice_capability','whatsapp_capability'); //update the model $number->update($valid_data);
return back()->with('success', trans('admin.message.number_updated')); }
public function requests(){ return view('admin.numbers.requests'); }
public function get_requests() { $requests=auth()->user()->number_requests()->orderByDesc('created_at')->get();
return datatables()->of($requests) ->addColumn('customer',function($q){ return "<a href='" . route('admin.customers.edit', [$q->customer_id]) . "'>".$q->customer->full_name."</a>"; }) ->addColumn('number',function($q){ return $q->number->number; }) ->addColumn('from',function($q){ return $q->number->from; }) ->addColumn('purch_price',function($q){ return formatNumberWithCurrSymbol($q->number->purch_price); }) ->addColumn('sell_price',function($q){ return formatNumberWithCurrSymbol($q->number->sell_price); }) ->addColumn('status',function($q){ if ($q->status=='pending') { $status = '<strong class="text-white bg-primary px-2 py-1 rounded status-font-size"> ' . ucfirst($q->status) . ' </strong>'; }elseif ($q->status=='approved'){ $status = '<strong class="text-white bg-success px-2 py-1 rounded status-font-size"> ' . ucfirst($q->status) . ' </strong>'; }else{ $status= '<strong class="text-white bg-danger px-2 py-1 rounded status-font-size"> '.ucfirst($q->status).' </strong>'; } return $status; }) ->addColumn('action',function(NumberRequest $q){ if ($q->status=='pending') { return '<button class="mr-1 btn btn-sm btn-info" data-message="Are you sure you want to add <b>\'' . $q->number->number . '\'</b> to \'' . $q->customer->full_name . '\' ?" data-action=' . route('admin.number.requests.response') . ' data-input={"id":"' . $q->id . '","status":"accepted"} data-toggle="modal" data-target="#modal-confirm" title="Approved" ><i class="fa fa-check"></i></button>' . '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to reject the request ?" data-action=' . route('admin.number.requests.response') . ' data-input={"id":"' . $q->id . '","status":"rejected"} data-toggle="modal" data-target="#modal-confirm" title="Reject" ><i class="fa fa-times"></i></button>'; }else if($q->status=='approved'){ return '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to reject the request ?" data-action=' . route('admin.number.requests.response') . ' data-input={"id":"' . $q->id . '","status":"rejected"} data-toggle="modal" data-target="#modal-confirm" title="Reject" ><i class="fa fa-times"></i></button>'; } }) ->rawColumns(['action','customer','status']) ->toJson(); }
public function request_response(Request $request){
DB::beginTransaction();
try{ $this->validate($request, [ 'id' => 'required', 'status' => 'required|in:accepted,rejected', ]); $number_request = auth()->user()->number_requests()->where('id', $request->id)->first(); if (!$number_request) return back()->with('fail', 'Request not found');
if($number_request->status!='pending') return back()->with('fail', 'Request is not pending');
$customer = auth()->user()->customers()->where('id', $number_request->customer_id)->first(); if (!$customer) return back()->with('fail', 'Customer not found');
$number = Number::where('id', $number_request->number_id)->first(); if (!$number) return back()->with('fail', 'Number not found');
$isAssigned = $customer->numbers()->where('number_id', $number->id)->first(); if ($isAssigned && $isAssigned->expire_date > now()) return back()->with('fail', trans('admin.message.number_assigned'));
$number_request->status=$request->status; $number_request->save(); if ($number_request->invoice_id){ $invoice=Invoice::find($number_request->invoice_id); if ($invoice){ if($request->status=='accepted') { $invoice->payment_status = 'approved'; }else{ $invoice->payment_status = 'rejected'; } $invoice->save(); } }
if($request->status=='rejected') { $number_request->delete(); DB::commit(); return back()->with('success', trans('admin.message.number_rejected')); }
if($request->status=='accepted') { $transactions = Transactions::where('ref_id', $number_request->id)->first(); if ($transactions) { $transactions->status = 'paid'; $transactions->save(); } }
$time = Carbon::now()->addMonths(1); if ($isAssigned){ $isAssigned->update(['expire_date'=>$time]); }else { $customer->numbers()->create(['number_id' => $number->id,'dynamic_gateway_id'=>$number->dynamic_gateway_id ,'number' => $number->number, 'expire_date' => $time, 'cost' => $number->sell_price, 'sms_capability'=>$number->sms_capability,'mms_capability'=>$number->mms_capability,'voice_capability'=>$number->voice_capability, 'whatsapp_capability'=>$number->whatsapp_capability]); }
DB::commit(); return back()->with('success', trans('admin.message.number_successfully_added')); }catch(\Exception $ex){ DB::rollBack(); return redirect()->back()->withErrors(['failed'=>$ex->getMessage()]); } }
public function destroy(Number $number){ if($number->customer_numbers->isNotEmpty()){ return back()->with('fail', trans('admin.message.number_already_used')); } $number->delete(); return back()->with('success', trans('admin.message.number_deleted')); }
}
|