UNPKG

@open-tender/store

Version:

A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API

116 lines (115 loc) 4.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processShift = exports.makeShifts = exports.calcBreakSeconds = exports.makePunchMessage = exports.punchTypes = void 0; var tslib_1 = require("tslib"); var utils_1 = require("@open-tender/utils"); var date_fns_1 = require("date-fns"); exports.punchTypes = { PUNCH_IN: 'PUNCH_IN', BREAK_IN: 'BREAK_IN', BREAK_OUT: 'BREAK_OUT', PUNCH_OUT: 'PUNCH_OUT' }; var makePunchMessage = function (employee, punch_type) { var first_name = employee.first_name; switch (punch_type) { case exports.punchTypes.PUNCH_IN: return "Hi, ".concat(first_name); case exports.punchTypes.BREAK_OUT: return "Enjoy your break, ".concat(first_name, "!"); case exports.punchTypes.BREAK_IN: return "Welcome back, ".concat(first_name, "!"); case exports.punchTypes.PUNCH_OUT: return "See you next time, ".concat(first_name, "!"); default: return 'Invalid punch type'; } }; exports.makePunchMessage = makePunchMessage; var calcBreakSeconds = function (breaks) { var chunks = []; var breaksCopy = tslib_1.__spreadArray([], breaks, true); while (breaksCopy.length > 0) { chunks.push(breaksCopy.splice(0, 2)); } return chunks.reduce(function (t, _a) { var breakIn = _a[0], breakOut = _a[1]; return breakIn && breakOut ? t + (0, date_fns_1.differenceInSeconds)(breakOut.date, breakIn.date) : 0; }, 0); }; exports.calcBreakSeconds = calcBreakSeconds; var makeShifts = function (employee, tz) { var departments = employee.departments, punches = employee.punches; if (!punches) return null; var chunks = []; punches.forEach(function (punch) { var department = departments.find(function (i) { return i.id === punch.department_id; }); if (!punch.created_at) return; var date = (0, utils_1.isoToDate)(punch.created_at, tz); var newPunch = tslib_1.__assign(tslib_1.__assign({}, punch), { department: department, date: date }); var lastChunk = chunks[chunks.length - 1]; if (!lastChunk || newPunch.punch_type === exports.punchTypes.PUNCH_IN) { chunks.push([newPunch]); } else { lastChunk.push(newPunch); } }); return chunks.map(function (chunk) { var _a; var allBreaks = chunk.filter(function (i) { return [exports.punchTypes.BREAK_IN, exports.punchTypes.BREAK_OUT].includes(i.punch_type); }); var lastBreakOut = (Math.floor(allBreaks.length) / 2) * 2; var breaks = allBreaks.slice(0, lastBreakOut); var breakOut = allBreaks.length - breaks.length === 1 ? allBreaks[allBreaks.length - 1] : null; var punchIn = chunk.find(function (i) { return i.punch_type === exports.punchTypes.PUNCH_IN; }); var punchOut = chunk.find(function (i) { return i.punch_type === exports.punchTypes.PUNCH_OUT; }); var outDate = punchOut ? punchOut.date : breakOut ? breakOut.date : (0, utils_1.currentLocalDate)(tz); var totalSeconds = punchIn ? (0, date_fns_1.differenceInSeconds)(outDate, punchIn.date) : 0; var breakSeconds = (0, exports.calcBreakSeconds)(breaks); var netSeconds = totalSeconds - breakSeconds; var department = punchIn ? ((_a = punchIn.department) === null || _a === void 0 ? void 0 : _a.name) || 'n/a' : 'n/a'; return { department: department, punchIn: punchIn, punchOut: punchOut, breaks: breaks, breakOut: breakOut, totalSeconds: totalSeconds, breakSeconds: breakSeconds, netSeconds: netSeconds }; }); }; exports.makeShifts = makeShifts; var makeShiftTime = function (seconds) { var hours = Math.floor(seconds / 3600); var minutes = ((seconds % 3600) / 60).toFixed(0).padStart(2, '0'); return "".concat(hours, ":").concat(minutes); }; var processShift = function (shift) { var department = shift.department, punchIn = shift.punchIn, punchOut = shift.punchOut, breakOut = shift.breakOut, netSeconds = shift.netSeconds, breakSeconds = shift.breakSeconds; var inTime = punchIn ? (0, utils_1.formatDate)(punchIn.date, 'h:mma', true) : 'n/a'; var outTime = punchOut ? (0, utils_1.formatDate)(punchOut.date, 'h:mma', true) : breakOut ? 'On Break' : 'On Clock'; var onClock = makeShiftTime(netSeconds); var onBreak = makeShiftTime(breakSeconds); return [department, inTime, outTime, onClock, onBreak]; }; exports.processShift = processShift;