Co-authored-by: Juan Felipe Zapata Moreno <zapata_pipe@hotmail.com> Reviewed-on: #1
92 lines
2.4 KiB
PHP
92 lines
2.4 KiB
PHP
<?php namespace App\Http\Controllers\Netbien;
|
|
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Client;
|
|
use App\Http\Requests\Netbien\ClientStoreRequest;
|
|
use App\Http\Requests\Netbien\ClientUpdateRequest;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class ClientController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$clients = Client::with('simCards:id,msisdn')->orderBy('id', 'asc')->paginate(config('app.pagination'));
|
|
|
|
return ApiResponse::OK->response([
|
|
'data' => $clients,
|
|
]);
|
|
}
|
|
|
|
public function search(Request $request)
|
|
{
|
|
$request->validate([
|
|
'filter' => 'required|string|min:2',
|
|
]);
|
|
|
|
$search = $request->input('filter');
|
|
|
|
$clients = Client::with('simCards:id,msisdn')
|
|
->where(function($q) use ($search) {
|
|
$q->whereRaw("CONCAT(name, ' ', paternal, ' ', maternal) LIKE ?", ["%{$search}%"])
|
|
->orWhere('rfc', 'like', "%{$search}%")
|
|
->orWhere('email', 'like', "%{$search}%")
|
|
->orWhere('phone', 'like', "%{$search}%");
|
|
})
|
|
->orderBy('id', 'asc')
|
|
->paginate(config('app.pagination'));
|
|
|
|
return ApiResponse::OK->response([
|
|
'data' => $clients,
|
|
]);
|
|
}
|
|
|
|
public function show(Client $client)
|
|
{
|
|
$client->load('simCards:id,msisdn');
|
|
|
|
return ApiResponse::OK->response([
|
|
'data' => $client,
|
|
]);
|
|
}
|
|
|
|
public function store(ClientStoreRequest $request)
|
|
{
|
|
$client = Client::create($request->validated());
|
|
|
|
return ApiResponse::CREATED->response([
|
|
'data' => $client,
|
|
]);
|
|
}
|
|
|
|
public function update(ClientUpdateRequest $request, Client $client)
|
|
{
|
|
$client->update($request->validated());
|
|
|
|
return ApiResponse::OK->response([
|
|
'data' => $client,
|
|
]);
|
|
}
|
|
|
|
public function destroy(Client $client)
|
|
{
|
|
$hasActiveSims = $client->simCards()
|
|
->wherePivot('is_active', true)
|
|
->exists();
|
|
|
|
if ($hasActiveSims) {
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'No se puede eliminar el cliente porque tiene SIMs activas',
|
|
]);
|
|
}
|
|
|
|
$client->delete();
|
|
|
|
return ApiResponse::NO_CONTENT->response();
|
|
}
|
|
|
|
}
|