pdv.backend/app/Http/Controllers/App/ClientTierController.php
2026-01-28 16:46:31 -06:00

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
{
/**
* Display a listing of client tiers
*/
public function index()
{
$tiers = ClientTier::withCount('clients')
->orderBy('min_purchase_amount')
->get();
return ApiResponse::OK->response([
'tiers' => $tiers
]);
}
/**
* Store a newly created tier
*/
public function store(ClientTierStoreRequest $request)
{
$tier = ClientTier::create($request->validated());
return ApiResponse::OK->response([
'tier' => $tier,
'message' => 'Tier creado correctamente.'
]);
}
/**
* Display the specified tier
*/
public function show(ClientTier $tier)
{
$tier->loadCount('clients');
return ApiResponse::OK->response([
'tier' => $tier
]);
}
/**
* Update the specified tier
*/
public function update(ClientTierUpdateRequest $request, ClientTier $tier)
{
$tier->update($request->validated());
return ApiResponse::OK->response([
'tier' => $tier,
'message' => 'Tier actualizado correctamente.'
]);
}
/**
* Remove the specified tier (soft delete if has clients, else force delete)
*/
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.'
]);
}
/**
* Toggle tier active status
*/
public function toggleActive(ClientTier $tier)
{
$tier->update(['is_active' => !$tier->is_active]);
return ApiResponse::OK->response([
'tier' => $tier,
'message' => 'Estado del tier actualizado correctamente.'
]);
}
/**
* Get active tiers only
*/
public function active()
{
$tiers = ClientTier::active()
->orderBy('min_purchase_amount')
->get();
return ApiResponse::OK->response([
'tiers' => $tiers
]);
}
}