Our pure JavaScript Scheduler component


Post by carnaboldi »

Greetings! After several meetings with our client, we finally have a clear picture of the required implementation, so we plan to start development activities next week. Finally we’ll be able to test your product thoroughly.

A small, bullet-point fashion premise:
The objective is to let users schedule new tasks. Each task is composed of steps, with specific dependencies (eg. Step 2 should happen after step 1 is completed), dictated by the task to be scheduled
• The granularity of the scheduling is the single day: each step can start / end only at the beginning of a day
To complete each step of a task, resources of different types should be consumed, for a certain amount of time. For instance: in order to complete step 2, you’ll need: “10 hours of Resource A, 20 hours of Resource B, 15 hours of resource C”
Resources availability can vary every day, but is always known beforehand (at least for what concerns the scheduling period). For instance, if we have to schedule for the next 3 days, we know that we’ll have 50 hours of Resource A for the first day, 40 hours for the second day and 30 hours for the third day: same reasoning for the other resources.
• The daily allocation of the required resources for each task, depending on their availability and on the resource requirements of each task can be performed by our logic, but we should be able to use your scheduler to show the result to the user (both in term of steps duration / start date / end date and in term of resources consumption for each resource type, for each day), so that they can customize (through drag and drop) the start / end of each step of the task. After they have performed some custom changes, the resource allocation part of the chart should be updated to reflect them (we can implement the required calculations)

So, given our requirements, we thought that your example with scheduler pro at this link would be the best fit four our needs:

https://www.bryntum.com/examples/scheduler-pro/resourcehistogram/

Starting from the supplied scheduler pro example, we identified these differences, with respect to the solution that we want to achieve:
1) The task steps shown in the scheduler should not be related (on the rows) to the resources which are being used to complete them, as shown in the example pic: in our specific case, almost every task is completed by consuming different resources, and that would lead to the same step being shown on multiple rows (one for each resource which is being consumed for that task), which is quite unconvenient in our case. The amount of rows should just correspond to the maximum number of steps in parallel (depending on the task). Each row doesn’t represent anything (it’s not a resource)
2) The start date of each step of each task corresponds to the first day in which a resource required for that step has been allocated on that step
3) The end date of each step of each task corresponds to the last day in which a resource was allocated for that step (fulfilling the resource requirements for the step, and so completing it)
4) It should be possible to express the amount available for each resource on a daily basis: as stated before, for each resource, the amount available every day (before a new task is allocated) can vary (for external reasons or because of other tasks already allocated on same days, which use the same resources)

So, then end result should look like this: the allocation of a task, made of three steps (step1, step2, step 3), with certain dependencies, and through the usage of 3 different resources (res. A, res. B and res. C). Ignore the colored bars inside each step: that is just to show that each day, one or more resources are allocated for each step, depending on each step requirements and resource availability.

Image

First things first, we compared the data structures that we would be able to produce and that we would feed the scheduler with (so that we can achieve the desired result) vs the data structures that such example seems to be using, to check for differences. There are a couple of issues that we found, and we’re asking for your help to understand how to handle them.
-list of events: each event is a step, with a start date and a duration (this seems to be fine with respect to the structure and semantic of your events, the only issue is that in the scheduler, as stated, we don’t want each row to be linked to a specific resource, to avoid steps being shown multiple times, if allocated on more than one resource: the number of rows should just correspond to the maximum amount of steps in parallel, depending on step constraints, defined for the task)
-list of resources: as per your data structure, we would also represent a resource with an unique id and a name, but we should also be able to specify the amount available of each resource for each day, since that amount can vary (possibily even through an async callback that the scheduler can invoke every time it needs to know how many hours are available for a certain resource for a specific day)
-list of assignments: here there seem to lie the biggest difference: based on your data structure, an assignment is simply “a resource assigned to an event”. For our logic instead, an assignement is “a resource, assigned on a specific day, for a certain amount of hours, to a specific event”. The same resource can be assigned on the same day to different events, with different amount of hours for each one of them. About this: we have considered generating events dynamically so that each event represent the resource consumption of a certain type, for a specific amount of hours on a set date, in the context of a specific step of a certain task..but that would make us unable to generate the top part of the scheduler..with the "real" step events that compose the task being scheduled, so probably a different solution is required

Could you provide us with some guidance to understand how to handle these differences between the data structures so that we’re able to achieve the desired result?

Thank you


Post by saki »

Based on the requirement

with specific dependencies (eg. Step 2 should happen after step 1 is completed)

I had an impression that Gantt would be the component to use, however, you post the link to the Scheduler Pro example. Please take a look at our Gantt examples, mainly https://bryntum.com/examples/gantt/resourceutilization/ and evaluate its usability for your requirements.

Re 1: The scheduler always links task to resource, or more resources, and so the task appears as many times in the timeline as many resources it is assigned to. In Gantt, this is not the case – we have hierarchical tasks (tree) and each can be assigned to as many resources as needed without multiple display.

Take a look please whether Gantt would do better because answers to the remaining questions depend on with which component you're going to proceed.


Post by carnaboldi »

Greetings Saki, thanks for the quick reply.

Let me answer to your question:

I had an impression that Gantt would be the component to use, however, you post the link to the Scheduler Pro example. Please take a look..

At the moment we only have the scheduler pro as a licensed Brynthum component. From what you wrote it seems like that the scheduler behavior could be adjusted (at least, to an extent) so that our needs can be met. Is this true? Is there any implicit constrain which would prevent us from achieving the desired behavior with the scheduler?

Apart from that, could you provide us the commercial quotation to include the gantt in our current plan (which at the moment includes only the scheduler pro component?). You can forward it to my registred mail address.

Thank you.


Post by saki »

I have also consulted your requirement with our team and indeed, Gantt would not help in this case. It seems that you need a time-phased assignment which we unfortunately do not yet support. It is likely that we will support it next year.

Here is the ticket: https://github.com/bryntum/support/issues/2090

It is also possible to prioritize the implementation; take a look at the options at https://www.bryntum.com/services/ If you decide to sponsor the feature, e-mail please to sales@bryntum.com


Post by carnaboldi »

Greetings Saki.

I'm pretty sure that we can achieve the upper part of the visualization (with respect to the supplied hand-drawn image) through your scheduler component: we'll have just to dynamically generate the resources (with respect to the supplied image, we would need 2 resources, the first to "hold" Step1 and Step3, and the second to "hold" Step2), and by supplying events where each event corresponds to a step, each one with a start date and a duration.

The real issue is to achieve the desired result in the lower part of the visualization (the resource histogram), which would need to be linked to different resources, and different events (each event in that context would not represent a whole step, but just the allocation of a certain amount of hours of a specific resource on a specific step).

Is it correct that the problem lies in this second part of the visualization, and not in the first?

If that is correct, there's really no workaround that you can think of (even requiring some work from our part) which we could use to achieve our requirements? Moreover: why do you say that not even your gantt would fit our needs? I briefly looked at the sample you linked, and it looks quite similar to what we need. Maybe the issue lies in the fact that the availability of resources can vary each day?

Thanks


Post by saki »

Actually, the problem lies in "partial assignment of resources on specific time segments of the task/event." The current logic is that we have an event/task that is fully assigned to a resource; 100% of resource and 100% of event/task time. We can assign task to more than one resource but still only the full duration of the task/event and 100% or resource.

For example, here https://bryntum.com/examples/scheduler-pro/resourceutilization/, you can assign Macy to Conference task but you cannot assign her to "just weekends of the Conference." That would only be possible after the above ticket will have been implemented.

Breaking the task to the individual segments and assign each of them to different resources would be a workaround but it's too clumsy (for users) and I wouldn't probably go this way.

Different availability of resource could be solved by resource calendars, such as here: https://bryntum.com/examples/scheduler-pro/resource-non-working-time/ but I don't think it's exactly what you are after. Try to drag 2nd meeting in the first row an hour to the right. The event is extended to the next shift when "George" will be available again, however, we cannot assign another resource to the meeting just for time George is off.

If I understand your needs correctly, then the solution lies in implementing of the feature described in the above ticket.


Post Reply