3.8 KiB
3.8 KiB
Criação de Reservas Manuais
Objetivo: Permitir que as recepcionistas possam criar reservas manualmente (bypassando o comportamento automático da IA), incluindo a associação direta a uma caixa de entrada (inbox) e um contato, além de preencher dados como check-in, check-out e status.
Contexto:
Antes, a rotina de criação de reservas ocorria exclusivamente de forma automatizada via AiReservationMessageWorker ou fluxos da IA. Havia necessidade de que, caso a IA não tenha executado a ação, a equipe pudesse criar a reserva pela própria UI.
Passos:
-
Model & Endpoint (Backend):
- Confirmado que o model já possuía
inbox_id(belongs_to :inbox). - Criamos o método
createnoApi::V1::Accounts::Captain::ReservationsControllerpara suportarPOST, que além de tudo garante a criação de umContactInboxna caixa de entrada fornecida se o contato não existisse ainda no pool da referida caixa. (Método privadocreate_paramsvalidando inputs usando Strong Parameters). - Adicionamento de
post :createnoconfig/routes.rbpara a rota namespacecaptain/reservations.
- Confirmado que o model já possuía
-
Store & API (Frontend):
- No arquivo
captain/reservations.jsda API, introduzido método assíncrono genérico.create(...)postando ao endpoint. - Adicionado no Vuex Store (
dashboard/store/captain/reservations.js) a actioncreateque despacha a requisição e sinaliza mensagens de erro/sucesso.
- No arquivo
-
Componente de Modal & Tradução:
- Adicionada as labels de tradução JSON de Reservas em PT e EN (Ex:
CAPTAIN_RESERVATIONS.NEW_RESERVATION_MODAL). - Criado o arquivo
NewReservationModal.vueusando componentes globais modulares (Dialog,Input,ComboBoxe etc) e validando props de injeção direta deinbox-idecontact-id.
- Adicionada as labels de tradução JSON de Reservas em PT e EN (Ex:
-
Integração nas Telas (Views):
Index.vue(Reservas em Lista Geral): Renderiza o subcomponente modal em overlay disparado pelo Header Button "Nova Reserva", onde recarrega as reservas (fetchReservations(1)) após inserção de sucesso.ReservationSummary.vue(Painel lateral das conversas): Disponibilizado um novo botão que repassa diretamente os identificadores do Contato Atual e a Inbox Atual para que o formulário da Reserva seja gerado já pré-povoado e associado devidamente, exibido caso!hasMarker.
- Simplificação do Modal: O campo de seleção de 'Unidade' foi removido do modal de criação manual, pois o sistema vincula a unidade automaticamente com base na Caixa de Entrada (Inbox) selecionada. Isso evita erros de preenchimento e facilita a operação.
- Traduções: Atualizadas as chaves de tradução para tornar os campos mais descritivos (ex: Identificador da Suíte).
Principais Códigos e Arquivos Alterados:
app/javascript/dashboard/routes/dashboard/captain/reservations/components/NewReservationModal.vueapp/javascript/dashboard/routes/dashboard/captain/reservations/Index.vueapp/javascript/dashboard/routes/dashboard/conversation/reservation/ReservationSummary.vueapp/javascript/dashboard/routes/dashboard/conversation/ContactPanel.vueenterprise/app/controllers/api/v1/accounts/captain/reservations_controller.rbconfig/routes.rb- Arquivos de tradução (pt_BR, en
captain.json) app/javascript/dashboard/store/captain/reservations.jsapp/javascript/dashboard/api/captain/reservations.js
Como validar ou reverter:
- Validar: Acessar a página global das IA Reservations ou o painel lateral de uma conversa e tocar em "Nova Reserva". Crie preenchendo as informações, e se aparecer as mensagens de confirmação sem console log error, a UI consumiu o Backend corretamente.
- Reverter: Realizar um
$ git revertdesta feature ou dar Rollback / desfazer os commits. Nenhuma migração de database extra foi executada neste processo (portanto, safe revert).