function callService(context) {
const globalStatusFlag = api.config.v1.getOrDefault('form.globalStatus.isOutage', 'false');
const maintenanceFlag = api.config.v1.getOrDefault('form.maintenance.isScheduled', 'false');
const maintenanceStartDate = api.config.v1.getOrDefault('form.maintenance.startDate', '');
const maintenanceEndDate = api.config.v1.getOrDefault('form.maintenance.endDate', '');
const scheduleRuleType = api.config.v1.getOrDefault('form.schedule.ruleType', 'ALWAYS_AVAILABLE');
const scheduleExactStartDateTime = api.config.v1.getOrDefault('form.schedule.exact.startDateTime', '');
const scheduleExactEndDateTime = api.config.v1.getOrDefault('form.schedule.exact.endDateTime', '');
const scheduleRecurringStartMonthDay = api.config.v1.getOrDefault('form.schedule.recurring.startMonthDay', '');
const scheduleRecurringEndMonthDay = api.config.v1.getOrDefault('form.schedule.recurring.endMonthDay', '');
const globalStatusTextContent = api.config.v1.getOrDefault('form.globalStatus.textContent', 'formUnavailabilityFailure-*');
const maintenanceTextContent = api.config.v1.getOrDefault('form.maintenance.textContent', 'formUnavailabilityMaintenance-*');
const scheduleTextContent = api.config.v1.getOrDefault('form.schedule.textContent', 'formUnavailabilityScheduled-*');
const now = new Date();
// Priorytet 1: Awaria
if (globalStatusFlag === 'true') {
Logger.info("Zablokowano dostęp do wniosku. " + "globalStatusFlag=" + globalStatusFlag);
throwBusinessError(globalStatusTextContent, "Wniosek niedostępny z powodu awarii");
}
// Priorytet 2: Przerwa techniczna
if (maintenanceFlag === 'true') {
const maintenanceStart = new Date(maintenanceStartDate);
const maintenanceEnd = new Date(maintenanceEndDate);
if (now >= maintenanceStart && now <= maintenanceEnd) {
Logger.info(
"Zablokowano dostęp do wniosku. " +
"maintenanceFlag=" + maintenanceFlag +
", maintenanceStartDate=" + maintenanceStartDate +
", maintenanceEndDate=" + maintenanceEndDate
);
throwBusinessError(maintenanceTextContent, "Wniosek niedostępny z powodu planowanej przerwy technicznej");
}
}
// Priorytet 3: Harmonogram
if (scheduleRuleType === "EXACT_DATE_TIME") {
const startDateTime = new Date(scheduleExactStartDateTime);
const endDateTime = new Date(scheduleExactEndDateTime);
if (now < startDateTime || now > endDateTime) {
Logger.info(
"Zablokowano dostęp do wniosku. " +
"scheduleRuleType=" + scheduleRuleType +
", startDateTime=" + scheduleExactStartDateTime +
", endDateTime=" + scheduleExactEndDateTime
);
throwBusinessError(scheduleTextContent, "Wniosek niedostępny poza skonfigurowanym okresem dostępności");
}
}
// Uwaga: brak obsługi dla zakresu dat przechodzącego przez nowy rok (np. grudzień 2026 - luty 2027)
else if (scheduleRuleType === "YEARLY_RECURRING") {
const currentYear = now.getFullYear();
const cycleStart = new Date(`${currentYear}-${scheduleRecurringStartMonthDay}T00:00:00`);
const cycleEnd = new Date(`${currentYear}-${scheduleRecurringEndMonthDay}T23:59:59`);
if (now < cycleStart || now > cycleEnd) {
Logger.info(
"Zablokowano dostęp do wniosku. " +
"scheduleRuleType=" + scheduleRuleType +
", recurringStartMonthDay=" + scheduleRecurringStartMonthDay +
", recurringEndMonthDay=" + scheduleRecurringEndMonthDay
);
throwBusinessError(scheduleTextContent, "Wniosek niedostępny poza cyklicznym okresem dostępności");
}
}
/**
* Wyrzucenie błędu biznesowego
*/
function throwBusinessError(textcontentName, errorDescription) {
const builder = context.getErrorPageDefinitionBuilder();
builder.bodyTextContent(textcontentName);
builder.msg(errorDescription);
context.throwBusinessException(builder);
}
}