diff --git a/src/actions.js b/src/actions.js index 107c223..edd2986 100644 --- a/src/actions.js +++ b/src/actions.js @@ -9,6 +9,7 @@ import { prettyPrint, processMessage, getMomentForMenu, + haveMenusChanged, } from './utils' import { getUsersInChannel, getTodaysMessages, addPost } from './slack' import { TEXTS } from './texts' @@ -36,6 +37,18 @@ export async function loadUsers() { } } +export async function loadMorningMenus(office) { + if (config.dev) { + return + } + + logger.devLog(`Making first menu load (${office.id})`) + + const menus = await getAllMenus(office) + + office.restaurants.forEach((restaurant, index) => restaurant.morningMenu = menus[index]) +} + export async function makeLastCall(office) { if (config.dev) { return @@ -51,12 +64,23 @@ export async function makeLastCall(office) { const message = `${office.getText(TEXTS.LAST_CALL)}\n${menus}` + const changedMenus = haveMenusChanged(office.restaurants, menus) + + const changedMenusMessage = `Pozor! Evidujeme zmeny v menu (oproti ${office.firstMenuLoad.hour}:${office.firstMenuLoad.minute}) v nasledujucich restauraciach: ${changedMenus.map(r => r.name).join(', ')}` + for (let user of users) { if (!messages.some(({ user: userId }) => userId === user.user_id)) { addPost( user.channel_id, message, ) + } else { + if (changedMenus.length) { + addPost( + user.channel_id, + changedMenusMessage + ) + } } } } diff --git a/src/offices.js b/src/offices.js index b39eb66..86f816c 100644 --- a/src/offices.js +++ b/src/offices.js @@ -26,6 +26,11 @@ const officesData = [ hour: 9, minute: 15, }, + firstMenuLoad: { + hour: 6, + minute: 0, + }, + morningMenu: null, lang: LANG.SK, help: '', }, @@ -43,6 +48,10 @@ const officesData = [ hour: 9, minute: 30, }, + firstMenuLoad: { + hour: 6, + minute: 0, + }, lang: LANG.SK, help: '', }, diff --git a/src/server.js b/src/server.js index e6b65e6..ff28f9a 100644 --- a/src/server.js +++ b/src/server.js @@ -3,7 +3,7 @@ import moment from 'moment-timezone' import { slack, logger } from './resources' import { startExpress } from './routes' -import { loadUsers, messageReceived, processTodaysOrders, endOfOrders, makeLastCall } from './actions' +import { loadUsers, messageReceived, processTodaysOrders, endOfOrders, makeLastCall, loadMorningMenus } from './actions' import offices from './offices' let wasDST = null @@ -30,10 +30,10 @@ function reschedule() { jobs = [ getJob({ hour: 8, minute: 30 }, loadUsers), offices.map(office => [ - office.lastCall && getJob(office.lastCall, makeLastCall.bind(null, office)), - office.restaurants.map( - restaurant => restaurant.endOfOrders && - getJob(restaurant.endOfOrders, endOfOrders.bind(null, office, restaurant)), + office.firstMenuLoad && getJob(office.firstMenuLoad, loadMorningMenus.bind(null, office)), + office.lastCall && getJob(office.lastCall, makeLastCall.bind(null, office)), // TODO: send warnings if menus changes from 6:00 menus + office.restaurants.filter(r => !!r.endOfOrders).map( + restaurant => getJob(restaurant.endOfOrders, endOfOrders.bind(null, office, restaurant)), ), ]), ].flat(Infinity).filter(Boolean) diff --git a/src/utils.js b/src/utils.js index f0448c8..240f8d8 100644 --- a/src/utils.js +++ b/src/utils.js @@ -284,3 +284,15 @@ export async function getAllMenus(office) { return menus.filter(Boolean).join('\n\n') } + +export function haveMenusChanged(restaurants, currentMenus) { + const changedRestaurantMenus = [] + + restaurants.forEach((restaurant, index) => { + if (restaurant.morningMenu !== currentMenus[index]) { + changedRestaurantMenus.push(restaurant) + } + }) + + return changedRestaurantMenus +} \ No newline at end of file