wfm-mobile-core
Version:
WFM Mobile Core
146 lines (145 loc) • 6.52 kB
JavaScript
;
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generationOfGraphData = void 0;
var Shifts_1 = require("../actions/Shifts");
var User_1 = require("../actions/User");
var EStatus_1 = require("../enums/EStatus");
var createMonth_1 = require("./createMonth");
var getNumberFirstDay_1 = require("./getNumberFirstDay");
var getNumberMonth_1 = require("./getNumberMonth");
// Функция приводящая данные к виду необходимому для рендера
function generationOfGraphData(startDate, endDate) {
var schedules = filterSchedule(Shifts_1.ShiftsApi.schedules, startDate);
var shifts = filterShifts(Shifts_1.ShiftsApi.shifts, Shifts_1.ShiftsApi.workedShifts, startDate);
var shiftsExchange = filterShiftsExchange(Shifts_1.ShiftsApi.shiftsInExchange, startDate);
var totalArray = createMonth_1.createMonth(startDate, endDate);
var numberFirstDayInMonth = getNumberFirstDay_1.getNumberFirstDay(startDate);
totalArray === null || totalArray === void 0 ? void 0 : totalArray.forEach(function (item, id) {
if (item.active) {
var num = id + 2 - numberFirstDayInMonth;
if (shifts[num])
item.shifts = shifts[num];
if (schedules[num])
item.schedule = schedules[num];
if (shiftsExchange[num])
item.shiftExchange = shiftsExchange[num];
}
});
User_1.UserApi.totalArrayByRender = totalArray;
return;
}
exports.generationOfGraphData = generationOfGraphData;
// Получение номера дня
var getNumberDayInMonth = function (date) {
var d = new Date(date);
return d.getDate();
};
// Получение диапазона дней
var getRange = function (timeData, startDate) {
var d = new Date(startDate);
var lastDayOfThisMonth = getNumberDayInMonth(new Date(d.getFullYear(), d.getMonth() + 1, 0));
var lastMonth = getNumberMonth_1.getNumberMonth(d.toISOString()) > getNumberMonth_1.getNumberMonth(timeData.startDateTime);
var nextMonth = getNumberMonth_1.getNumberMonth(d.toISOString()) < getNumberMonth_1.getNumberMonth(timeData.endDateTime);
var firstDay = lastMonth ? 1 : getNumberDayInMonth(timeData.startDateTime);
var lastDay = nextMonth ? lastDayOfThisMonth : getNumberDayInMonth(timeData.endDateTime);
var result = [];
for (var i = firstDay; i <= lastDay; i++) {
result.push(i);
}
return result;
};
// Обработка графика смен для рендера
var filterShifts = function (shifts, workedShifts, startDate) {
var d = new Date();
var filteredShifts = {};
var nextMonth = getNumberMonth_1.getNumberMonth(d.toISOString()) < getNumberMonth_1.getNumberMonth(startDate);
var lastMonth = getNumberMonth_1.getNumberMonth(d.toISOString()) > getNumberMonth_1.getNumberMonth(startDate);
var hasDayPassed = function (i) {
if (lastMonth) {
return true;
}
else if (nextMonth) {
return false;
}
else {
return i < getNumberDayInMonth(new Date());
}
};
// eslint-disable-next-line array-callback-return
var workShifts = shifts.filter(function (shift) { return shift.employeePositionId !== null; });
workShifts.map(function (item) {
var numberDay = getNumberDayInMonth(item.dateTimeInterval.startDateTime);
if (!hasDayPassed(numberDay) && item) {
if (filteredShifts[numberDay]) {
filteredShifts[numberDay] = __spreadArray(__spreadArray([], __read(filteredShifts[numberDay])), [item]);
}
else {
filteredShifts[numberDay] = [item];
}
}
});
workedShifts === null || workedShifts === void 0 ? void 0 : workedShifts.map(function (item) {
var numberDay = getNumberDayInMonth(item.dateTimeInterval.startDateTime);
if (hasDayPassed(numberDay) && item.employeePositionId !== null && item) {
if (filteredShifts[numberDay]) {
filteredShifts[numberDay] = __spreadArray(__spreadArray([], __read(filteredShifts[numberDay])), [item]);
}
else {
filteredShifts[numberDay] = [item];
}
}
});
return filteredShifts;
};
// Обработка графика смен c биржи для рендера
var filterShiftsExchange = function (shifts, startDate) {
var filteredShiftsExchange = []; // todo: fix type
shifts === null || shifts === void 0 ? void 0 : shifts.forEach(function (shift) {
var numberDay = getNumberDayInMonth(shift.dateTimeInterval.startDateTime);
if (!filteredShiftsExchange[numberDay])
filteredShiftsExchange[numberDay] = [];
filteredShiftsExchange[numberDay].push(Object.assign({}, shift));
});
return filteredShiftsExchange;
};
// Обработка графика отсутствия для рендеда
var filterSchedule = function (schedules, startDate) {
var filterSchedules = {};
schedules === null || schedules === void 0 ? void 0 : schedules.forEach(function (item) {
if (item.status === EStatus_1.EStatus.APPROVED || item.status === EStatus_1.EStatus.NOT_APPROVED) {
// eslint-disable-next-line array-callback-return
// if (item.type === ETypesOfEvents.DAY_OFF) return;
var rangeNumbers = getRange(item.dateTimeInterval, startDate);
if (rangeNumbers.length === 1) {
filterSchedules[getNumberDayInMonth(item.dateTimeInterval.startDateTime)] = item;
}
else {
rangeNumbers.forEach(function (num) {
filterSchedules[num] = item;
});
}
}
});
return filterSchedules;
};