Open evereq opened 4 years ago
@kamesh95
Organizations already have a public page like http://localhost:4200/#/share/organization/ever-technologies-ltd maybe we can use that itself or a child page in the same share
module to show available meetings as well. like http://localhost:4200/#/share/organization/ever-technologies-ltd maybe/appointments
.
Especially think of repeating weekly/monthly appointments because when setting their availability/work schedule Employees would usually like to enter something like "Ever Monday 9am to 5pm" or "Every Tuesday 10am to 4pm".
I would suggest you first understand the requirements nicely, check existing appointment scheduling tools & then think about how the implementation would work.
@kamesh95 yes, so of course in order to build this Epic features, you need to carefully research how it's done in similar software but also research related features in Gauzy itself.
The thing is: Gauzy is more integrated software compared to most of the appointment schedule software in the market. I.e. in Gauzy, such a feature should be well integrated with other features (calendars, days off, tasks, projects, clients, etc).
Let's consider existed software features: 1) it usually provides some public page, where it is possible to schedule meetings (appointment) with some person using a calendar of her/his availability with some timezone matching etc. 2) Next, if someone booked such a meeting (possibly also paid for it!), the host and participant will get an email reminder (which also adds the event to his calendar), etc.
In Gauzy, it's just one of the features we need, because all employees of some company get access to Gauzy, some company clients also get access, we have teams who can have own calendars, employees may indicate days off (holidays, we have that separate feature) and so on. I.e. it's more complex because not only we need a public page where prospects/clients can book employee(s) or team time, but also we need an "internal" system to book time between employees, share calendars/availability, etc.
So we can say that most of the software in the market which "dedicated" to schedule appointments has features that are "necessary" in Gauzy, but they are not "sufficient". We need more features that will allow employees to see other employees' availability and book a time if needed ("Transparency" feature of Gauzy).
But of course, we should start with some side of that and iteratively add more features to it. The public page which allows booking meeting for a specific employee(s) or organization is a great start and yes, we can use organization public page for such appointments requests like @rmagon suggested above.
@rmagon @evereq Makes sense to me. So I will add a public page to shared module where we display scheduled appointments for Employees as well as Teams level with a tab for each of them. Also user can schedule meetings there, so we have internal appointments booking in http://localhost:4200/#/pages/employees/appointments while the public user bookings in the shared module. Also, I am indeed exploring out the existing tools out there and following the above feature list one by one to add in our appointment scheduling page.
@kamesh95 That's great!
@rmagon @evereq For the recurring appointments, I have a few thoughts:
If we go with 2.1 or 2.2, we can easily integrate days off feature as well to see if the next appointment date falls on a day when the employee is available. Also, do we need to allow the user to change the schedule for one of the events in future from his recurrence appointments? If yes, then we will have to store it as a normal appointment and skip that date in our recurrence appointment. Let me know your thoughts.
@rmagon what is your opinion, how we should store recurring appointments?
Meanwhile, you @kamesh95 can still continue working on the feature to get parameters from the user about such recurring appointments (e.g. frequency, hours, etc).
Also, I would say recurring appointments have a lower priority compared to making one time appointments completely working. Ideally, we want to have a pages for all employees where it's possible to book 1:1 appointments as soon as possible and add more functionality after that.
More relevant information:
Users can create other types, e.g. “3 hours” or “Install VS Code on your PC” event types with some custom description but specific length (in minutes, hours, or even days I think). Later we will need to support multiple employees who share the same booking page (e.g. http://localhost:4200/#/share/employees/GUID (replace GUID with randomly generated UUID) or teams page http://localhost:4200/#/share/team/backend-team or even organization page http://localhost:4200/#/share/organization/myorg etc.
Next, the user is presented with a calendar where they can select free slots from the employee availability dates. For this, we will need the time of data, holidays, existing appointments, and employee daily availability time to show or block slots accordingly.
After selecting the time slot, the user is presented with a form consisting of fields: Name, Email, Meeting agenda and link, Emails of attendees, Additional details or description, Buffer and break time for meetings. The buffer and break times are included in the appointment timings selected.
After the form submission, the user is presented with the option of sending an email invite with event details to all the attendees including the employee with whom the meeting is booked.
We need to be able to have a menu where the employees can mark their availability for the meetings so that the same schedules are presented to a public user at the time of bookings.
Once the appointment is finalized, the employees should be able to see their bookings somewhere in gauzy. Is this part of a separate story or do we need this to be developed as a part of appointment scheduling only? It should be a calendar in the appointment scheduling (so it is a feature of this Epic), but also it should be later displayed in the “Schedule” page under Employees and even in the global organization (or team) calendars, etc.
The end-user who is booking meetings, does he/she be presented with a list of his/her booking events? If yes, then the end-user will have to be signed up with gauzy so that we can keep track of their bookings. Or we can also generate a unique link after the appointment booking, this link will have to be kept with the user or we can also email this link to the user. It will display details of the booking event. We can implement this at much later stages, for now it can be just some email/calendar info where it’s easy to “Cancel” event (e.g. have a link to cancel it).
Note: if it’s a registered employee who registers meeting with another employee, such a meeting should be displayed on his own appointment calendar too! I.e multiple employees of the same organization in Gauzy should be able to create 1:1 meetings with this feature and BOTH sides should see them in calendars etc.
Yes, we need, but mostly that needed for the case when both users are employees in some org in Gauzy. If one of them is an unknown person, in such case she/he can cancel the meeting using some Link and also probably we can build a public page which will allow such person to edit meeting (e.g. time) using a link with some secure token (such links can be sent to the user when he creates appointment)
@evereq @rmagon I think almost all the points mentioned above have been covered now. What are the next steps?
@kamesh95 can you record some video that demo all that is done in this Epic so far (Loom)? So we analyze it and decide on the next steps?
@evereq @rmagon This is the link of the video https://www.loom.com/share/1ad5ade0a26d44be93438459182f00e4
Some things that are yet to be covered:
@kamesh95 ok, so can you work for now on 1 (Appointment edit page).
For 2, I think when we book a meeting for current employees when we add other employees in the form, we should verify if other employees are available and if they are not, we should display some kind of message/notification about that or something like that. Alternative (a bit more complex), would be to also display information about each employee in terms of his available time in the same date as this:
We will create more tasks related to this Epic soon
@kamesh95 I reviewed current functionality, it's all great, but we need more improvements to be done. Please first read again this ticket description https://github.com/ever-co/gauzy/issues/1124#issue-610891917 and overview section and I suggest reading again ALL comments because it feels like we missing multiple features which you can start building if you will re-read all that info.
Here is a list of things I notice (after testing and reading again all info above):
Did we integrate an appointment schedule with the Time Off feature? E.g. if some employee requested time off, such time should be marked automatically as "Not available" in the Schedule and such interval should NOT be available for appointment scheduling
How to get to the "Shared" (public) page where it's possible to book an appointment for a given Employee? I don't think we have anywhere in UI any button which will redirect to such a page? Think on the Appointments page http://localhost:4200/pages/employees/appointments, we can add to the right in the row where we have now titled "Appointments" button called "Appointment Booking Page" and if I click on such button, we redirect to "Book an Appointment" page (with URL like /share/employee/guid, I saw it in the video in)
We need to improve the page called "Book an Appointment" so that if no GUID given in the URL, we allow selecting Employee for whom it will be possible to book an appointment from the list of available Employees (basically instead of display Employee name/image, we should display selector). Why we need that? Because in 2 above, we want to support the user to click the "Appointment Booking Page" button, even if NO employee selected in the site header ("All Employees" selected). So in such a case, we don't know for whom a user wants to create an appointment and we need to explicitly ask. The same will be useful also if we share such an Appointment booking page with our clients and we want to allow the client to select which employee he wants to book an appointment with (e.g. client want to review our employees and select the best fit). In such a case, we again will share a common page where it should be possible to select Employee and book appointments with her/him.
We should add the ability to create Embed to put appointment booking Widget into any website
We should support customizations of the appointment booking page (theme, colors, logo, any many more things)
One of the most important features of appointment booking page is support for multiple timezones (we should auto-detect timezone of end-user, but still allow her/him to select manually timezone)
We should add new Email Types which should send notifications/calendar events to both sides (i.e who booked appointment and employees)
What about the Team Appointments page? We need to have a page where the whole Team can see appointments scheduled with them etc
We need to add Paid appointments feature (let's not integrate payment gateway, it's a separate story with payments, but we need to be able to set price for appointment, currency, etc).
I would say priority of this is: 2, 3, 6, 7, 1, 4, 5, 8, 9.
I probably missed LOTs of things which we still need to be done, but it feels like above is already a good start for you :) We did a LOT of features in this Epic, however honestly, it feels like we just started ;)
@evereq With point 7 Email Types, can you elaborate a bit more? Like Event types, I should create a new module Email types? And after appointment booking, user can select the email type or something to send alert for appointment?
@kamesh95 see https://github.com/ever-co/gauzy/issues/1688, it describes a bit about Email Templates, etc. However, I think let's leave that 7) for the end as we have now another dev who should take care of different email templates, could be he can also handle yours :) So focus on all other tasks for now if you can.
Features
We need the following features:
Overview
We want to allow contacts/leads/clients/customers/partners to schedule appointments via the Gauzy Platform with one or more Employees or Teams (can be mixed, but it’s important is that scheduling happens with some Employees or Teams, not Users!)
We should also integrate this feature with the “Days Off” feature where employees can select days when they are not available (in case, it should not be possible to book a meeting for such a date!)
Essentially, when Employee login to Gauzy on some page she/he should see calendar (or list) with appointments booked / free time and other “events” (not a part of appointments, but the feature which related).
Next, for each employee or team, there is a public page where it’s possible to book a meeting with her/him or with the whole team. It can be booked by another employee(s) or by someone who has a contact record already (e.g. Leads or Clients or Customers) or by someone who did not register in Gauzy (e.g. someone who just visited a public page and booked an appointment there).
Same way, it should be possible to create a separate public page (link) where other people can book an appointment with selected employees/teams (in this case, we are talking about some employees and/or teams who decided to accept bookings for meetings. For example, Employee A and Employee B may decide to make such a page to allow the prospect to talk with both of them.
We need also to think about how to integrate this feature with Time Tracking features, with Tasks feature etc