Crear un calendario para un software que funcione para múltiples industrias.

Avatar

Comenzamos con una solución simple para un calendario. Reserve una fecha y no estará disponible después de hacerlo. Sin embargo, me di cuenta rápidamente de que nuestros primeros 10 clientes querían algo mucho más complejo.

Las empresas tienen necesidades específicas cuando se trata de tiempo. Por ejemplo, recibimos consultas como “¿Puedo hacer que el cliente reserve 3 días a la vez y hacer que se repita todos los meses”. Como propietario de un negocio respondí “por supuesto”, pero como desarrollador mi cabeza daba vueltas. 

Terminamos reformateando todo nuestro calendario y estructura de disponibilidad. Aquí está roto en pedazos.

La estructura central

Tenemos dos cosas que juntas forman nuestra solución de calendario; Presentaciones y eventos de entidades. Los envíos contienen todos los datos de envío, como la información del reservante, el precio y otra información relacionada. Las entidades de eventos contienen toda la información relacionada con el tiempo.

Los eventos necesitan sus propias entidades de datos. Cada envío o reserva que se realiza a través de nuestra solución tiene su propia “entidad” que almacena todos los datos. Inicialmente incluí la información de tiempo en esa entidad, pero luego me di cuenta de que eso no es escalable. Me di cuenta de que será necesaria una entidad de datos especializada que contenga la información relacionada con el evento.

Los eventos son muy simples

El objetivo de una entidad de datos es separar la información de la fecha de otra información, pero aun así vincularla para mantenerla como un todo coherente. Aquí están los datos que almacenamos en cada evento. 

Nombre programático  : se utiliza para encontrar la entidad
De – A  – Almacenar el evento como una marca de tiempo de-a
Enlace a envío  – Enlace a la presentación relacionada
Notas –  Esto permite al usuario agregar notas a cada
miembro del equipo del  evento – Aunque no siempre necesario, agregamos un campo de miembros del equipo que puede asignar a un miembro del equipo a cargo de un evento determinado.


Construir la IU es difícil

A medida que la funcionalidad del calendario se vuelve cada vez más compleja, es muy difícil crear una interfaz de usuario para admitirlo.

Calendario en un generador de formularios y un generador de chat

Esto resultó ser la parte más compleja de todo el proceso. Esto significa que cuando el calendario es visible para la empresa y usted está creando su formulario. Teníamos una variedad de clientes tan grande que necesitamos muchas funciones diferentes para ser compatibles y, al mismo tiempo, simple de usar. Las características que apoyamos son los siguientes:

las reservas de fecha Múltiples
teníamos que apoyar la reserva de varias fechas. Por ejemplo, una persona quiere reservar un servicio de catering para dos eventos a la vez. Construí esto con la replicación del calendario, simplemente configurándolo en una matriz en el json por la cantidad de veces que el usuario ha permitido que se reserven múltiples.

Seleccionar rango de fechas
Algunas empresas también querían un selector de rango de fechas, por lo que ofrecemos esta opción como un tipo de calendario. El primer clic selecciona la primera fecha y el segundo clic en el segundo. No permitimos reservas de tiempo con rango de fechas.

Eventos
recurrentes Los eventos recurrentes son eventos que se repiten hasta un máximo de 6 meses. El tiempo recurrente se puede configurar semanalmente o mensualmente.

Longitud de ranura
Le permitimos establecer una longitud de ranura por tipo de reserva que esté administrando en el formulario. Entonces, en función de sus soluciones, puede reservar por 30 o 90 minutos y ver la disponibilidad en función de eso. Escribí una publicación de blog con un fragmento sobre cómo  construir intervalos de tiempo para calendarios en JavaScript  si está interesado en obtener un poco más de información al respecto.

Fecha de reserva más temprana
Algunos de nuestros clientes no desean permitir reservas para los próximos días y, por lo tanto, tenemos 

precios dinámicos.
Lo que quiero decir con precios dinámicos es la posibilidad de que el usuario establezca cualquier día o día de la semana recurrente y proporcione un valor numérico o porcentaje de aumento o disminución para ese día. Por ejemplo, si el cliente desea reservar un lunes, puede establecer el precio como -20 o -20%. También permitimos que una biblioteca externa se agregue y proporcione precios dinámicos basados ​​en devolver un valor de 0 a 1.

Construyendo esto en nuestro fragmento

Cuando comencé a construir el front-end del formulario, encontré este paso. Esto significa lo que se muestra al usuario final del formulario. Quería mantener las cosas simples, lo que significa que no habría bibliotecas externas en su lugar. Alguien me llamó loco por eso. Mi lógica era construir todo en JavaScript vainilla para asegurar tres cosas; compatibilidad total del navegador, conocimiento de cómo funcionan las cosas y asegurarse de que no necesitamos cargar ninguna biblioteca externa.

Terminé construyendo el calendario basado en un calendario javascript de vainilla aquí:  https://github.com/vanilla-calendar/vanilla-calendar . Shoutout to  https://github.com/bennias por darme una ventaja Nuestra versión comenzó con la misma lógica, pero ahora se ha extendido a su propia bestia. Espero tener tiempo para volver al punto de partida.

Toda la lógica en el paso 1 se puede navegar a través de este calendario. Tenemos 3 tipos de front-end principales para el calendario; calendario, calendario con selector de tiempo y selector de rango.

Backend y gestión de eventos.

Comenzamos a usar un FullCalendar en nuestro servidor, ya que es una solución probada y compatible. https://fullcalendar.io/ . Modificamos esto para adaptarlo a nuestra solución. Fullcalendar es una gran solución para backends. En el nuestro desempeña el papel de gestión empresarial. 

Poniendo las partes juntas

Reunir todas las partes y la lógica cuando no se planeó desde el principio fue un desafío y, en conjunto, probablemente una de las cosas más complejas que he construido. Sin embargo, ahora puedo decir con confianza que he creado un sistema de gestión de calendario y tiempo que no es una mierda. Todo esto también se basa en nuestras  formas amigables GDPR  para que nuestros clientes de la UE puedan respirar libremente.

Compruébalo iniciando sesión y jugando aquí.

Si desea copiar más el trabajo u obtener algunos comentarios sobre la lógica de su calendario, envíeme un comentario o una solicitud de formulario de contacto y me complacerá ayudarlo más.

Leave a Comment

Your email address will not be published. Required fields are marked *

Add Comment *

Name *

Email *

Website *

¿Quieres saber más o ponerte en contacto con nosotros?