Premium support for our pure JavaScript UI components


Post by paul.mather »

Hello,
We have multiple projects, each with its own schedule using the Bryntum Gantt client-side component in the browser.

We currently use the Bryntum Scheduler Pro ResourceUtilization report on the client side to show resource utilisation across multiple projects and resources. We also have a Node.js API implementation using Scheduler Pro to generate the same resource utilisation report outside the browser UI.

Is this combination of Gantt data + Scheduler Pro resource utilisation compatible/recommended?

The concern is that Gantt and Scheduler Pro appear to have differences in their ProjectModel / scheduling model. For example, Gantt supports these scheduling modes:

  • Normal

  • FixedDuration

  • FixedEffort

  • FixedUnits

Whereas Scheduler Pro appears to support only:

  • Normal

  • FixedDuration

At the moment, when preparing Gantt task data for Scheduler Pro resource utilisation, we map the scheduling mode like this:

  • Normal + effortDriven => FixedDuration

  • Normal => Normal

  • FixedEffort => FixedDuration

  • FixedUnits => FixedDuration

  • FixedDuration => FixedDuration

Is this mapping correct, or is there a recommended mapping/conversion when using Gantt task data in Scheduler Pro resource utilisation?

If Gantt project data is not fully compatible with Scheduler Pro’s resource utilisation model, would you recommend instead using the Gantt ResourceUtilization UI component on the frontend and the Gantt Node.js library/server-side engine for our API reporting?

In short, we want the browser report and the server-side report to calculate resource utilisation consistently from the same Gantt project data. What is the recommended Bryntum architecture for this?

Many thanks
Paul


Post by alex.l »

Hi Paul,

The best way to solve this is to import Gantt's ProjectModel and use it for all your components (for SchedulerPro and ResourceUtilization too). In this case all the behaviour will be consistent.

All the best,
Alex Lazarev

How to ask for help? Please read our Support Policy


Post by paul.mather »

Thanks for the reply Alex, we'll take a look. I do have a related question. In the same scenario to show resource utilisation across multiple projects, how do we handle Projects that have different values for hours per day, days per week and days per month as seen here: https://bryntum.com/products/gantt/docs/#Gantt/widget/projecteditor/ProjectEditorAdvancedTab


Post by alex.l »

Hi Paul,

I am not sure I got the question. Different projects may have different settings. You can create as many ProjectModel instances as you need and load any data you need. projectModel might be changed at runtime, see "Choose project" on the toolbar https://bryntum.com/products/gantt/examples/advanced/

Please explain a use case a bit, I would give a better reply then.

All the best,
Alex Lazarev

How to ask for help? Please read our Support Policy


Post by paul.mather »

Hi Alex,
Our scenario is around resource demand, the user selects 1 or more resources to then view the assignments / demand from all of the project records they are assigned to. The challenge we have is that you can only pass in a global value for the schedulerPro for hours per day, days per week and days per month but if 10 projects are included, as an example, they might all have different values for hours per day etc. Similar to the Resource utlization example but with Project A and Project B having different settings for hours per day and days per week with tasks having different units for Effort (1H, 1D, 1W, 1M) etc. How does it interpret hoursperday, daysPerWeek, when the project model on that component only supports 1 value for this?
https://bryntum.com/products/gantt/examples/resourceutilization/


Post by alex.l »

Hi Paul,

All these values might be changed at runtime but let me make sure you understood the goal of these fields.
hoursPerDay, daysPerWeek, daysPerMonth are not manage working days in calendar. All these values are used to know how to convert Duration values. So, when you set duration 1d, it might mean 8h or 12h or 24h, so these fields manage covertation.
From docs: https://bryntum.com/products/gantt/docs/api/Gantt/model/ProjectModel#field-daysPerWeek

Please note: the value does not define the amount of working time per week for that purpose one should use calendars.

The value is used when converting the duration from one unit to another. So when user enters a duration of, for example, 2 weeks the system understands that it actually means 14 days (which is then converted to hours) and schedules accordingly.

Actual working hours managed by Calendars.

You can set these values at runtime or create few ProjectModel instances. These values might be set within your loaded data, see JSON in this demo https://bryntum.com/products/gantt/examples/advanced/.

All the best,
Alex Lazarev

How to ask for help? Please read our Support Policy


Post by paul.mather »

Hey Alex,
Thank you for reply - I've got a scenario below that might explain it better (hopefully! :-)).

ProjectA has a 4 hours per day calendar set, hoursPerDay for the project is set to 4.
ProjectA has 1 task with a duration of 1 day and 1 day for effort.

ProjectB has a 8 hours per day calendar set, hoursPerDay for the project is set to 8.
ProjectB has 1 task with a duration of 1 day and 1 day for effort.

All looks correct in the individual Gantt tables for ProjectA and ProjectB, but when we generate a resourceUtilization report (that reports across projects) using the Gantt engine with hoursPerDay set to 8. The task for ProjectA spans over 2 days (4 hours a day) instead of the correct 1 day value.

{
            "resource": 1,
            "tickId": 5,
            "userId": "1111111111111111",
            "costRate": 0,
            "units": 150,
            "effort": 43200000,
            "maxEffort": 28800000,
            "isOverallocated": true,
            "isUnderallocated": false,
            "dayOfWeek": "Thursday",
            "startDate": "2026-04-30T00:00:00.000Z",
            "endDate": "2026-05-01T00:00:00.000Z",
            "isWorking": true,
            "assignmentIntervals": [
                {
                    "recordId": 5,
                    "taskId": 39,
                    "name": "ProjectA task",
                    "recordName": "test2",
                    "effort": 14400000,
                    "units": 100
                },
                {
                    "recordId": 1,
                    "taskId": 40,
                    "name": "ProjectB task",
                    "recordName": "test1",
                    "effort": 28800000,
                    "units": 100
                }
            ]
        },
        {
            "resource": 1,
            "tickId": 6,
            "userId": "1111111111111111",
            "costRate": 0,
            "units": 100,
            "effort": 14400000,
            "maxEffort": 28800000,
            "isOverallocated": false,
            "isUnderallocated": true,
            "dayOfWeek": "Friday",
            "startDate": "2026-05-01T00:00:00.000Z",
            "endDate": "2026-05-02T00:00:00.000Z",
            "isWorking": true,
            "assignmentIntervals": [
                {
                    "recordId": 5,
                    "taskId": 39,
                    "name": "ProjectA task",
                    "recordName": "test2",
                    "effort": 14400000,
                    "units": 100
                }
            ]
        },

When generating a resourceUtilization report that spans over multiple projects (each with different values for hoursPerDay, daysPerWeek, daysPerMonth) using the gantt engine. How do we factor in different definitions for "day", "week", "month" in each project?


Post by alex.l »

Hi,

Thank you for explanation! What is your expectation here? How should it know what did you mean as 1 day for every project if you aggregate it into single project? I believe you will need to add some duration casting adaptor in this case to cast data into single measurement system before use them together.

All the best,
Alex Lazarev

How to ask for help? Please read our Support Policy


Post by paul.mather »

Hi Alex, thanks for your answer. The adaptor to cast data into a single measurement system works but we have identified other issues with our approach. The direction field at the project level causes a similar issue. We are also not sure if these (or other) project level settings impact scheduling using our approach:

  • autoScheduleManualTasksOnSecondPass

  • dependenciesCalendar

  • skipNonWorkingTimeInDurationWhenSchedulingManually

  • skipNonWorkingTimeWhenSchedulingManually

  • startedTaskScheduling

  • autoSetConstraints

  • adjustDurationToDST

A similar question was posted here on your GitHub:
https://github.com/bryntum/support/issues/4013

Based on this. It looks like what we are doing is not supported? Would another possible solution be to run each projects data through the Gantt scheduling engine individually to get resource utilization per project. Then aggregate that data into 1 dataset?


Post by alex.l »

Hi Paul,

We do not have any built-in solution for this case. Project has own settings on project level. ResurceUtilization supports work with 1 project, multi-project is not supported now. You could discuss this as a Sponsored Feature using Contact us form here https://bryntum.com/services/ if it fits to you.

All the best,
Alex Lazarev

How to ask for help? Please read our Support Policy


Post Reply