pdv.backend/app/Http/Controllers/App/ClientTierController.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
]);
}
}