(16) 981791110 contato@policast.studio

Introdução

Gerenciamento de reservas é uma funcionalidade comum em muitos sistemas, especialmente em aplicações que precisam agendar horários para serviços ou reservar espaços. Neste artigo, vamos discutir como criar um sistema totalmente funcional de gerenciamento de reservas de horários com Symfony.

Criando o modelo do banco de dados

Antes de começar a trabalhar na aplicação, precisamos criar o modelo do banco de dados que irá armazenar as informações sobre os horários e as reservas. Para isso, criaremos duas tabelas: uma para armazenar as informações sobre os horários e outra para armazenar as informações sobre as reservas.

Na tabela de horários, precisaremos armazenar informações como a data, o horário de início e o horário de término. Também precisaremos de uma coluna para indicar se o horário está disponível ou se já foi reservado. Na tabela de reservas, precisaremos armazenar informações como o nome do cliente, o horário da reserva e o status (confirmado ou pendente).

Veja o código abaixo para criar as tabelas usando o Doctrine ORM:


// create tables using Doctrine ORM

namespace AppEntity;

use DoctrineORMMapping as ORM;

/**
* @ORMEntity
* @ORMTable(name="horarios")
*/
class Horario
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;

/**
* @ORMColumn(type="datetime")
*/
private $data;

/**
* @ORMColumn(type="time")
*/
private $hora_inicio;

/**
* @ORMColumn(type="time")
*/
private $hora_fim;

/**
* @ORMColumn(type="boolean")
*/
private $disponivel;

// getters and setters

public function getId(): ?int
{
return $this->id;
}

// ...
}

/**
* @ORMEntity
* @ORMTable(name="reservas")
*/
class Reserva
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;

/**
* @ORMColumn(type="string")
*/
private $nome_cliente;

/**
* @ORMColumn(type="datetime")
*/
private $data_horario;

/**
* @ORMColumn(type="boolean")
*/
private $confirmado;

// getters and setters

public function getId(): ?int
{
return $this->id;
}

// ...
}

Criando os controllers

Depois de criar o modelo do banco de dados, precisamos criar os controllers que manipularão as informações dos horários e das reservas.

Criaremos dois controllers: um para gerenciar os horários e outro para gerenciar as reservas. O controller de horários terá funções para listar, adicionar, editar e excluir horários, enquanto o controller de reservas terá funções para listar, adicionar e confirmar reservas.

Veja o código abaixo para criar os controllers:


// create controllers

namespace AppController;

use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use AppEntityHorario;
use AppEntityReserva;

class HorarioController extends AbstractController
{
public function listaHorarios(): Response
{
$horarios = $this->getDoctrine()
->getRepository(Horario::class)
->findAll();

return $this->render('horarios/lista.html.twig', [
'horarios' => $horarios,
]);
}

public function adicionaHorario(Request $request): Response
{
// code to add a new horario to database
}

public function editaHorario(Request $request, Horario $horario): Response
{
// code to edit an existing horario in database
}

public function excluiHorario(Request $request, Horario $horario): Response
{
// code to delete an existing horario from database
}
}

class ReservaController extends AbstractController
{
public function listaReservas(): Response
{
$reservas = $this->getDoctrine()
->getRepository(Reserva::class)
->findAll();

return $this->render('reservas/lista.html.twig', [
'reservas' => $reservas,
]);
}

public function adicionaReserva(Request $request): Response
{
// code to add a new reserva to database
}

public function confirmaReserva(Request $request, Reserva $reserva): Response
{
// code to confirm an existing reserva in database
}
}

Criando as views

Finalmente, precisamos criar as views que serão usadas para mostrar os horários e as reservas aos usuários. Para isso, criaremos quatro views: uma para listar os horários, uma para adicionar/editar um horário, uma para listar as reservas e outra para adicionar/confirmar uma reserva.

Veja o código abaixo para criar as views usando o Twig:


{# lista.html.twig - view to list horarios #}

{% for horario in horarios %}

{% endfor %}

Data Hora Início Hora Fim Status
{{ horario.data|date('d/m/Y') }} {{ horario.hora_inicio|date('H:i') }} {{ horario.hora_fim|date('H:i') }} {% if horario.disponivel %}Disponível{% else %}Reservado{% endif %}

{# adiciona.html.twig - view to add/edit horario #}

{{ form_widget(form) }}

{# lista.html.twig - view to list reservas #}

{% for reserva in reservas %}

{% endfor %}

Data/Hora Cliente Status
{{ reserva.data_horario|date('d/m/Y H:i') }} {{ reserva.nome_cliente }} {% if reserva.confirmado %}Confirmado{% else %}Pendente{% endif %}

{# adiciona.html.twig - view to add/confirm reserva #}

{{ form_widget(form) }}

Conclusão

Neste artigo, discutimos como criar um sistema totalmente funcional de gerenciamento de reservas de horários com Symfony. Criamos o modelo do banco de dados, os controllers para manipular as informações dos horários e das reservas, e as views para mostrar os horários e as reservas aos usuários.

Esperamos que este artigo seja útil para quem deseja criar um sistema de gerenciamento de reservas com Symfony. Caso tenha alguma dúvida ou sugestão, deixe um comentário abaixo.