timeconditions: office hours, holidays, override codes, weekly grid
/api/time-conditions (company time zone by default, ranges validated,
unique override digit, never pointing at itself) with a live status
("open/closed/holiday now", same logic as the dialplan, shared), and
POST /:id/override, which writes PostgreSQL then AstDB SP/TCOVR.
/api/holidays CRUD plus import-us-federal (observed dates, computed in
code, skips days already listed). services/astdb.ts resyncs AstDB on
every AMI connect (PostgreSQL wins); services/toggles.ts applies
SpToggle TCOVR from *31N/*32N/*33N.
Generator: sp-tc-{id} per 03 §6.10 (override, holidays within the next
year, ranges rendered a minute short because GotoIfTime's end is
inclusive), sp-tc-override with a no-service fallback, admin-only
*3[123]X in sp-featurecodes, destApp time_condition. The date changing
in the company time zone triggers a forced apply so holidays roll over.
Golden cases holidays and ivr-business-hours.
Office hours page: click-and-drag half-hour grid plus an exact range
list, destinations, holiday destination, override key, status chip with
Force open / Force closed / Automatic; Holidays tab with the US federal
import. e2e m6-t4 found two bugs (pointer capture release throwing,
drawer overflow) and checks routing, AstDB, *321/*331 from an admin
phone, refusal for others, and the import reaching the dialplan.
Task: M6-T4
This commit is contained in:
1 parent
15624f7b77
commit
108547046c
57 files changed
+3221
-29
No files matched your search
@@ -19,6 +19,8 @@ export function loadCase(name: string): Snapshot {
|
||||
routes?: Partial<Snapshot['routes'][number]>[];
|
||||
ringGroups?: Partial<Snapshot['ringGroups'][number]>[];
|
||||
ivrs?: Partial<Snapshot['ivrs'][number]>[];
|
||||
timeConditions?: Partial<Snapshot['timeConditions'][number]>[];
|
||||
holidays?: Snapshot['holidays'];
|
||||
};
|
||||
const settings = Object.fromEntries(
|
||||
(Object.keys(SettingsSchemas) as SettingKey[])
|
||||
@@ -37,6 +39,19 @@ export function loadCase(name: string): Snapshot {
|
||||
id: d.id!,
|
||||
number: d.number!,
|
||||
})),
|
||||
timeConditions: (raw.timeConditions ?? []).map((t, i) => ({
|
||||
name: `Hours ${i + 1}`,
|
||||
timezone: 'America/Chicago',
|
||||
openRanges: [],
|
||||
useHolidays: true,
|
||||
overrideDigit: null,
|
||||
openDestination: { type: 'hangup' as const },
|
||||
closedDestination: { type: 'hangup' as const },
|
||||
holidayDestination: null,
|
||||
...t,
|
||||
id: t.id!,
|
||||
})),
|
||||
holidays: raw.holidays ?? [],
|
||||
ivrs: (raw.ivrs ?? []).map((r, i) => ({
|
||||
name: `Menu ${i + 1}`,
|
||||
greeting: 'custom/greeting',
|
||||
|
||||
Reference in new issue
Block a user