111 lines
2.6 KiB
PHP
111 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\App;
|
|
|
|
use App\Models\ClientTier;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\ClientTiers\ClientTierStoreRequest;
|
|
use App\Http\Requests\ClientTiers\ClientTierUpdateRequest;
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
|
|
class ClientTierController extends Controller
|
|
{
|
|
/**
|
|
* Listar todos los tiers
|
|
*/
|
|
public function index()
|
|
{
|
|
$tiers = ClientTier::withCount('clients')
|
|
->orderBy('min_purchase_amount')
|
|
->paginate(config('app.pagination'));
|
|
|
|
return ApiResponse::OK->response([
|
|
'tiers' => $tiers
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Almacenar un nuevo tier
|
|
*/
|
|
public function store(ClientTierStoreRequest $request)
|
|
{
|
|
$tier = ClientTier::create($request->validated());
|
|
|
|
return ApiResponse::OK->response([
|
|
'tier' => $tier,
|
|
'message' => 'Tier creado correctamente.'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Mostrar un tier específico
|
|
*/
|
|
public function show(ClientTier $tier)
|
|
{
|
|
$tier->loadCount('clients');
|
|
|
|
return ApiResponse::OK->response([
|
|
'tier' => $tier
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Actualizar un tier existente
|
|
*/
|
|
public function update(ClientTierUpdateRequest $request, ClientTier $tier)
|
|
{
|
|
$tier->update($request->validated());
|
|
|
|
return ApiResponse::OK->response([
|
|
'tier' => $tier,
|
|
'message' => 'Tier actualizado correctamente.'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Eliminar un tier
|
|
*/
|
|
public function destroy(ClientTier $tier)
|
|
{
|
|
// Verificar si el tier tiene clientes asignados
|
|
if ($tier->clients()->count() > 0) {
|
|
return ApiResponse::BAD_REQUEST->response([
|
|
'message' => 'No se puede eliminar el tier porque tiene clientes asignados.'
|
|
]);
|
|
}
|
|
|
|
$tier->delete();
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Tier eliminado correctamente.'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Activar/Desactivar un tier
|
|
*/
|
|
public function toggleActive(ClientTier $tier)
|
|
{
|
|
$tier->update(['is_active' => !$tier->is_active]);
|
|
|
|
return ApiResponse::OK->response([
|
|
'tier' => $tier,
|
|
'message' => 'Estado del tier actualizado correctamente.'
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Seleccionar tiers activos
|
|
*/
|
|
public function active()
|
|
{
|
|
$tiers = ClientTier::active()
|
|
->orderBy('min_purchase_amount')
|
|
->get();
|
|
|
|
return ApiResponse::OK->response([
|
|
'tiers' => $tiers
|
|
]);
|
|
}
|
|
}
|