Перейти к основному содержимому

mergeCalendars

Description

Объединяет несколько рабочих календарей в один

mergeCalendars: (calendars: Calendar[] | Calendar, calendar2?: Calendar) => void

Parameters

  • calendars - (required) Calendar[] | Calendar - либо массив объектов календарей, либо один объект календаря
  • calendar2 - (optional) Calendar - необязательный параметр, второй объект календаря

Example

const johnCalendarId = gantt.addCalendar({
worktime: {
hours: ["0:00-24:00"],
days: [0, 1, 1, 1, 1, 1, 0]
}
});
const mikeCalendarId = gantt.addCalendar({
worktime: {
hours: ["8:00-12:00", "13:00-17:00"],
days: [0, 1, 1, 1, 1, 1, 0]
}
});

// передаем массив календарей для объединения
const joinedCalendar = gantt.mergeCalendars([
gantt.getCalendar(mikeCalendarId),
gantt.getCalendar(johnCalendarId)
]);

Details

Вы также можете передать несколько объектов календарей как отдельные параметры в метод mergeCalendars:

// передаем календари как отдельные аргументы
const joinedCalendar = gantt.mergeCalendars(
gantt.getCalendar(mikeCalendarId),
gantt.getCalendar(johnCalendarId)
);

Как работает объединение календарей

При объединении календарей рабочие дни итогового календаря определяются на основе проверки, является ли каждый день рабочим во всех объединяемых календарях (используется логическая операция AND (&&)):

// календарь 1 + календарь 2 = объединенный календарь;

// Случай 1:
// рабочий день (1/true) + рабочий день (1/true) = рабочий день (1/true);

// Случай 2:
// рабочий день (1/true) + нерабочий день (0/false) = нерабочий день (0/false);

// Случай 3:
// нерабочий день (0/false) + нерабочий день (0/false) = нерабочий день (0/false);

Например, даны два календаря:

  • первый календарь имеет рабочие дни в понедельник и среду:
const calendar1Id = gantt.addCalendar({
id: "calendar1",
worktime: {
days: [ 0, 1, 0, 1, 0, 0, 0 ]
}
});
  • второй календарь имеет рабочие дни в понедельник, вторник и четверг:
const calendar2Id = gantt.addCalendar({
id: "calendar2",
worktime: {
days: [ 0, 1, 1, 0, 1, 0, 0 ]
}
});

Объединение этих календарей:

const joinedCalendar = gantt.mergeCalendars([
gantt.getCalendar(calendar1Id),
gantt.getCalendar(calendar2Id)
]);

даст календарь, в котором рабочим днем будет только понедельник:

// дни: [ 0, 1, 0, 1, 0, 0, 0 ]

// +

// дни: [ 0, 1, 1, 0, 1, 0, 0 ]

// =

// дни: [ 0, 1, 0, 0, 0, 0, 0 ]

Связанный пример: Gantt. Merge work calendars (via mergeCalendars() method)

заметка

Логика объединения не учитывает customWeeks.

Change log

  • добавлено в v7.0