2019-06-21 06:21:48 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use Illuminate\Http\Request;
|
2021-10-08 01:19:33 +00:00
|
|
|
use Illuminate\Support\Collection;
|
2019-06-21 06:21:48 +00:00
|
|
|
use Illuminate\Support\Facades\Auth;
|
2021-07-23 07:25:26 +00:00
|
|
|
use Illuminate\Support\Facades\Gate;
|
2019-06-21 06:21:48 +00:00
|
|
|
|
2022-04-19 07:07:39 +00:00
|
|
|
use App\Models\{Account,Invoice,Payment,Service,Service\Broadband,Service\Phone,User};
|
2019-06-21 06:21:48 +00:00
|
|
|
|
|
|
|
class SearchController extends Controller
|
|
|
|
{
|
|
|
|
/**
|
2020-01-12 12:42:32 +00:00
|
|
|
* Search from the Application Dashboard.
|
2019-06-21 06:21:48 +00:00
|
|
|
*
|
2020-01-12 12:42:32 +00:00
|
|
|
* @param Request $request
|
2021-10-08 01:19:33 +00:00
|
|
|
* @return Collection
|
2019-06-21 06:21:48 +00:00
|
|
|
*/
|
2021-10-08 01:19:33 +00:00
|
|
|
public function search(Request $request): Collection
|
2019-06-21 06:21:48 +00:00
|
|
|
{
|
2021-10-08 01:19:33 +00:00
|
|
|
$result = collect();
|
|
|
|
|
2020-01-12 12:42:32 +00:00
|
|
|
// If there isnt a term value, return null
|
2019-06-21 06:21:48 +00:00
|
|
|
if (! $request->input('term'))
|
2021-10-08 01:19:33 +00:00
|
|
|
return $result;
|
2019-06-21 06:21:48 +00:00
|
|
|
|
2022-04-21 06:25:29 +00:00
|
|
|
$account_ids = ($x=Auth::user()->accounts)->pluck('id');
|
|
|
|
$user_ids = $x->transform(function($item) { return $item->user;})->pluck('id');
|
2019-06-21 06:21:48 +00:00
|
|
|
|
2020-02-08 11:51:50 +00:00
|
|
|
# Look for User
|
2020-02-06 22:11:02 +00:00
|
|
|
foreach (User::Search($request->input('term'))
|
2022-04-21 06:25:29 +00:00
|
|
|
->whereIN('id',$user_ids)
|
2020-02-06 22:11:02 +00:00
|
|
|
->orderBy('lastname')
|
|
|
|
->orderBy('firstname')
|
2019-06-21 06:21:48 +00:00
|
|
|
->limit(10)->get() as $o)
|
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s (%s)',$o->lid,$o->name),'value'=>'/u/home/'.$o->id,'category'=>'Users']);
|
2020-01-12 12:42:32 +00:00
|
|
|
}
|
|
|
|
|
2020-02-08 11:51:50 +00:00
|
|
|
# Look for Account
|
|
|
|
foreach (Account::Search($request->input('term'))
|
2022-04-22 00:36:41 +00:00
|
|
|
->whereIN('user_id',$user_ids)
|
|
|
|
->orderBy('company')
|
|
|
|
->limit(10)->get() as $o)
|
2020-02-08 11:51:50 +00:00
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s (%s)',$o->lid,$o->company),'value'=>'/u/home/'.$o->user_id,'category'=>'Accounts']);
|
2020-02-08 11:51:50 +00:00
|
|
|
}
|
|
|
|
|
2020-01-12 12:42:32 +00:00
|
|
|
# Look for a Service
|
|
|
|
foreach (Service::Search($request->input('term'))
|
2022-04-22 00:36:41 +00:00
|
|
|
->whereIN('account_id',$account_ids)
|
|
|
|
->orderBy('id')
|
|
|
|
->limit(10)->get() as $o)
|
2020-01-12 12:42:32 +00:00
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s (%s)',$o->name,$o->lid),'value'=>'/u/service/'.$o->id,'category'=>'Services']);
|
2020-01-12 12:42:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# Look for an Invoice
|
|
|
|
foreach (Invoice::Search($request->input('term'))
|
2022-04-22 00:36:41 +00:00
|
|
|
->whereIN('account_id',$account_ids)
|
|
|
|
->orderBy('id')
|
|
|
|
->limit(10)->get() as $o)
|
2020-01-12 12:42:32 +00:00
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s: %s',$o->lid,$o->account->name),'value'=>'/u/invoice/'.$o->id,'category'=>'Invoices']);
|
2019-06-21 06:21:48 +00:00
|
|
|
}
|
|
|
|
|
2022-04-22 00:36:41 +00:00
|
|
|
# Look for a Broadband Service
|
2022-04-19 07:07:39 +00:00
|
|
|
foreach (Broadband::Search($request->input('term'))
|
2022-04-22 00:36:41 +00:00
|
|
|
->whereIN('account_id',$account_ids)
|
|
|
|
->orderBy('service_number')
|
|
|
|
->with(['service'])
|
|
|
|
->limit(10)->get() as $o)
|
2019-06-29 00:14:12 +00:00
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s (%s)',$o->service->name,$o->service->lid),'value'=>'/u/service/'.$o->service_id,'category'=>'Broadband']);
|
2021-07-19 06:42:37 +00:00
|
|
|
}
|
|
|
|
|
2022-04-22 00:36:41 +00:00
|
|
|
# Look for a Phone Service
|
2022-04-19 07:07:39 +00:00
|
|
|
foreach (Phone::Search($request->input('term'))
|
2022-04-22 00:36:41 +00:00
|
|
|
->whereIN('account_id',$account_ids)
|
|
|
|
->orderBy('service_number')
|
|
|
|
->with(['service'])
|
|
|
|
->limit(10)->get() as $o)
|
2021-07-19 06:42:37 +00:00
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s (%s)',$o->service->name,$o->service->lid),'value'=>'/u/service/'.$o->service_id,'category'=>'Phone']);
|
2019-06-29 00:14:12 +00:00
|
|
|
}
|
|
|
|
|
2021-07-13 02:31:56 +00:00
|
|
|
# Look for Domain Name
|
|
|
|
foreach (Service\Domain::Search($request->input('term'))
|
2022-04-22 00:36:41 +00:00
|
|
|
->whereIN('account_id',$account_ids)
|
|
|
|
->orderBy('domain_name')
|
|
|
|
->with(['service'])
|
|
|
|
->limit(10)->get() as $o)
|
2021-07-13 02:31:56 +00:00
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s (%s)',$o->service->name,$o->service->lid),'value'=>'/u/service/'.$o->service_id,'category'=>'Domains']);
|
2021-07-13 02:31:56 +00:00
|
|
|
}
|
|
|
|
|
2021-07-23 07:25:26 +00:00
|
|
|
if (Gate::any(['wholesaler'],new Payment)) {
|
|
|
|
# Look for Payments
|
|
|
|
foreach (Payment::Search($request->input('term'))
|
2022-04-22 00:36:41 +00:00
|
|
|
->whereIN('account_id',$account_ids)
|
|
|
|
->limit(10)->get() as $o)
|
2021-07-23 07:25:26 +00:00
|
|
|
{
|
2022-04-22 00:36:41 +00:00
|
|
|
$result->push(['name'=>sprintf('%s: %s $%s',$o->lid,$o->account->name,number_format($o->total,2)),'value'=>'/a/payment/addedit/'.$o->id,'category'=>'Payments']);
|
2021-07-23 07:25:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-21 06:21:48 +00:00
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
}
|