From 4b337a3b859fa3c0fcb6d4a74b844f7f80c59c3f Mon Sep 17 00:00:00 2001 From: HotelSync Date: Mon, 23 Mar 2026 23:35:24 +0300 Subject: [PATCH] feat: tech tasks page, priority in HK context menu, room status sync MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context menu (RoomContextMenu): - Dirty/Cleaning now show priority sub-form (срочно/высокий/средний/низкий) - New "Тех. задача" section with description text + priority grid Calendar (CalendarPage): - handleRoomUpdate: creates task for both 'dirty' AND 'cleaning' status - New handleMaintenanceTaskCreate for category=maintenance tasks - Passes priority from context menu to task creation Backend (housekeeping.ts): - task status → in_progress: room housekeeping_status = 'cleaning', broadcasts housekeeping_done with roomStatus='cleaning' so all connected Calendar clients update in real-time DB (migration 025): - category column on housekeeping_tasks (default 'housekeeping') - HousekeepingPage filters category=housekeeping - TechnicalPage filters category=maintenance New TechnicalPage (/technical): - List/filter/delete maintenance tasks - Status dropdown per task - Create modal with room/user/priority/date Sidebar: "Тех. задачи" nav item added Co-Authored-By: Claude Sonnet 4.6 --- backend/src/routes/housekeeping.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/backend/src/routes/housekeeping.ts b/backend/src/routes/housekeeping.ts index aa1c511..45327f3 100644 --- a/backend/src/routes/housekeeping.ts +++ b/backend/src/routes/housekeeping.ts @@ -123,6 +123,15 @@ const housekeeping: FastifyPluginAsync = async (fastify) => { if (!rows[0]) return reply.code(404).send({ error: 'Task not found' }) const task = rows[0] + // When task is marked in_progress → room becomes 'cleaning' + if (request.body.status === 'in_progress' && task.room_id) { + await db.query( + `UPDATE rooms SET housekeeping_status = 'cleaning' WHERE id = $1`, + [task.room_id], + ) + broadcast(slug, { type: 'housekeeping_done', taskId: task.id, roomId: task.room_id, roomStatus: 'cleaning' }) + } + // When task is marked done → update room housekeeping status if (request.body.status === 'done' && task.room_id) { const settings = await getHkSettings(hotelId).catch(() => null)