Savelyev_Vyacheslav

checkFieldValue

Aug 9th, 2024
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Возвращает массив дат, представляющих каждый день в диапазоне между двумя датами.
  3.  *
  4.  * @param {SimpleDateTime} startDay - Объект SimpleDateTime, представляющий начальную дату.
  5.  * @param {SimpleDateTime} endDay - Объект SimpleDateTime, представляющий конечную дату.
  6.  * @returns {Array} Массив чисел, представляющих каждый день в диапазоне.
  7.  */
  8. function getDaysBetween(startDay, endDay) {
  9.     var days = [];
  10.     // Клонируем текущую дату, чтобы избежать накопления изменений
  11.     var day = new SimpleDateTime(startDay.getValue());
  12.  
  13.     // Цикл по каждому дню до достижения endDay
  14.     while (day.getValue() <= endDay.getValue()) {
  15.         days.push(day.getValue());
  16.         // Переходим к следующему дню
  17.         day.addDays(1);
  18.     }
  19.  
  20.     return days;
  21. }
  22.  
  23. /**
  24.  * Проверяет, соответствовало ли значение поля в заданный момент времени указанному значению.
  25.  *
  26.  * @param {string} recordId - Идентификатор записи, для которой выполняется проверка.
  27.  * @param {string} requestDate - Дата в виде строки, на которую нужно проверить значение поля.
  28.  * @param {string} fieldName - Имя поля, значение которого нужно проверить.
  29.  * @param {string} fieldValue - Ожидаемое значение поля.
  30.  * @returns {boolean} Возвращает true, если значение поля совпадает с ожидаемым на момент времени, либо если записи не найдены.
  31.  */
  32. function checkFieldValue(recordId, requestDate, fieldName, fieldValue) {
  33.     /**
  34.      * Преобразует строку с датой в объект SimpleDateTime, используя несколько форматов.
  35.      *
  36.      * @param {string} dateStr - Строка с датой, которую нужно преобразовать.
  37.      * @returns {SimpleDateTime} Объект SimpleDateTime, соответствующий строке даты.
  38.      * @throws {Error} Бросает исключение, если ни один из форматов не подходит.
  39.      */
  40.     function parseDate(dateStr) {
  41.         var dateFormats = ['dd.MM.yyyy HH:mm:ss', 'yyyy-MM-dd HH:mm:ss', 'dd/MM/yyyy HH:mm:ss'];
  42.         for (var i = 0; i < dateFormats.length; i++) {
  43.             try {
  44.                 return new SimpleDateTime(dateStr, dateFormats[i]);
  45.             } catch (e) {
  46.                 // Пробуем следующий формат
  47.             }
  48.         }
  49.         throw new Error('Unsupported date format: ' + dateStr);
  50.     }
  51.  
  52.     // Преобразуем строку с датой запроса в объект SimpleDateTime
  53.     var requestDateTime = parseDate(requestDate);
  54.  
  55.     // Фильтр для журнала истории
  56.     var gr = new SimpleRecord('sys_history');
  57.     gr.addQuery('record_id', recordId);
  58.     gr.addQuery('field_name', fieldName);
  59.     gr.orderByDesc('sys_created_at');
  60.     gr.query();
  61.  
  62.     // Перебор записей истории
  63.     while (gr.next()) {
  64.         var historyDateTime = new SimpleDateTime(gr.getValue('sys_created_at'), 'yyyy-MM-dd HH:mm:ss');
  65.  
  66.         // Проверяем, если дата в истории меньше или равна дате запроса
  67.         if (historyDateTime.getValue() <= requestDateTime.getValue()) {
  68.             var currentValue = gr.getValue('new_value');
  69.             return (currentValue === fieldValue);
  70.         }
  71.     }
  72.  
  73.     // Если записи не найдены, возвращаем true по умолчанию
  74.     return true;
  75. }
  76.  
Advertisement
Add Comment
Please, Sign In to add comment