chatwoot-develop/enterprise/lib/captain/tools/list_reservations_tool.rb

44 lines
1.5 KiB
Ruby

class Captain::Tools::ListReservationsTool < Captain::Tools::BasePublicTool
def name
'list_reservations'
end
def description
'Lista as reservas recentes do contato atual para consulta.'
end
def perform(tool_context, **args)
_actual_params = resolve_params([args], {})
conversation = @conversation || find_conversation_from_context(tool_context)
return 'Erro: Contexto de conversa nao disponivel.' unless conversation
reservations = Captain::Reservation
.where(conversation_id: conversation.id)
.or(Captain::Reservation.where(contact_id: conversation.contact_id))
.order(check_in_at: :desc)
.limit(5)
return 'Nenhuma reserva encontrada para este contato.' if reservations.blank?
formatted = reservations.map do |reservation|
unit_name = reservation.unit&.name || 'unidade indefinida'
check_in = reservation.check_in_at&.strftime('%d/%m/%Y %H:%M')
status = reservation.status
payment = reservation.payment_status
"ID #{reservation.id} - #{reservation.suite_identifier} - #{check_in} - #{unit_name} - status: #{status} - pagamento: #{payment}"
end
"Reservas recentes:\n#{formatted.join("\n")}"
end
private
def find_conversation_from_context(tool_context)
state = resolve_context(tool_context)
conversation_id = state.dig(:conversation, :id)
return nil unless conversation_id
::Conversation.find_by(id: conversation_id)
end
end