feat: добавляет крайний срок обработки обращения (AppealDueDate) #4

Merged
gorbenko.pavel merged 1 commits from feature/appeal-due-date into main 2026-09-09 12:07:22 +00:00
+21 -2
View File
@@ -24,8 +24,26 @@ export interface IFeedbackSubmission {
suggestion: string; suggestion: string;
} }
// 5 рабочих дней от текущей даты, выходные (сб/вс) не считаются днём срока —
// используется как крайний срок обработки обращения (AppealDueDate).
function addBusinessDays(from: Date, days: number): Date {
const result = new Date(from);
let remaining = days;
while (remaining > 0) {
result.setDate(result.getDate() + 1);
const dayOfWeek = result.getDay(); // 0 = воскресенье, 6 = суббота
if (dayOfWeek !== 0 && dayOfWeek !== 6) {
remaining -= 1;
}
}
return result;
}
// Имена полей — internal name столбцов списка SharePoint (Company/Name/Position/ // Имена полей — internal name столбцов списка SharePoint (Company/Name/Position/
// Type/IssueDescription/SuggestionText/WantsFeedback), не отображаемые названия. // Type/IssueDescription/SuggestionText/WantsFeedback/AppealDueDate), не
// отображаемые названия.
async function buildFields(data: IFeedbackSubmission): Promise<Record<string, unknown>> { async function buildFields(data: IFeedbackSubmission): Promise<Record<string, unknown>> {
const typeLabel = data.kind === 'other' ? data.kindOther : KIND_LABELS[data.kind]; const typeLabel = data.kind === 'other' ? data.kindOther : KIND_LABELS[data.kind];
const name = data.isAnonymous ? '' : data.fullName; const name = data.isAnonymous ? '' : data.fullName;
@@ -38,7 +56,8 @@ async function buildFields(data: IFeedbackSubmission): Promise<Record<string, un
Type: typeLabel, Type: typeLabel,
IssueDescription: data.situation, IssueDescription: data.situation,
SuggestionText: data.suggestion, SuggestionText: data.suggestion,
WantsFeedback: data.wantsFeedback WantsFeedback: data.wantsFeedback,
AppealDueDate: addBusinessDays(new Date(), 5).toISOString()
}; };
// Состав полей зависит от вида обращения и анонимности, поэтому часть строк // Состав полей зависит от вида обращения и анонимности, поэтому часть строк