Files
2026-09-01 10:46:29 -03:00

107 lines
2.9 KiB
PHP
Executable File

<?php
namespace Modules\FluxoCaixaPro\Controllers;
use App\Controllers\BaseAdminController;
use Symfony\Component\HttpFoundation\Request;
use Modules\FluxoCaixaPro\Models\Category;
/**
* Class CategoryController
*
* Manages financial categories.
*
* @package Modules\FluxoCaixaPro\Controllers
*/
class CategoryController extends BaseAdminController
{
/**
* checkPermission - Check if user has permission
*
* @param string $permission
* @return void
*/
protected function checkPermission(string $permission)
{
$user = $this->getCurrentUser();
if (!$user || !$user->hasPermission($permission)) {
$this->addFlash('error', 'Você não tem permissão para acessar esta área.');
$this->redirect('admin/dashboard')->send();
exit;
}
}
/**
* List all categories.
*/
public function index(Request $request)
{
$this->checkPermission('fluxocaixapro.view');
$categories = Category::orderBy('name')->get();
return $this->renderAdminView('@fluxocaixapro/admin/categories/index.twig', [
'title' => 'Categorias de Fluxo de Caixa',
'categories' => $categories
]);
}
/**
* Store a new category.
*/
public function store(Request $request)
{
$this->checkPermission('fluxocaixapro.manage');
$data = $request->request->all();
Category::create([
'name' => $data['name'],
'type' => $data['type'],
'color' => $data['color'] ?? '#6c757d',
'icon' => $data['icon'] ?? 'bi bi-tag',
'is_active' => true
]);
$this->addFlash('success', 'Categoria criada com sucesso!');
return $this->redirect('/admin/fluxo-caixa/categories');
}
/**
* Update an existing category.
*/
public function update(Request $request, $id)
{
$this->checkPermission('fluxocaixapro.manage');
$category = Category::findOrFail($id);
$data = $request->request->all();
$category->update([
'name' => $data['name'],
'type' => $data['type'],
'color' => $data['color'],
'icon' => $data['icon']
]);
$this->addFlash('success', 'Categoria atualizada com sucesso!');
return $this->redirect('/admin/fluxo-caixa/categories');
}
/**
* Toggle category status.
*/
public function delete(Request $request, $id)
{
$this->checkPermission('fluxocaixapro.manage');
$category = Category::findOrFail($id);
$category->is_active = !$category->is_active;
$category->save();
$status = $category->is_active ? 'ativada' : 'desativada';
$this->addFlash('success', "Categoria {$status} com sucesso!");
return $this->redirect('/admin/fluxo-caixa/categories');
}
}