diff --git a/docker/renumber-rooms.php b/docker/renumber-rooms.php new file mode 100644 index 000000000..012a1612a --- /dev/null +++ b/docker/renumber-rooms.php @@ -0,0 +1,55 @@ + [--apply]\n"); + exit(1); +} +$db = Db::getInstance(); +$rooms = $db->executeS('SELECT ri.`id`, ri.`room_num`, ri.`id_product`, pl.`name` + FROM `'._DB_PREFIX_.'htl_room_information` ri + LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON pl.`id_product` = ri.`id_product` AND pl.`id_lang` = '.(int)Configuration::get('PS_LANG_DEFAULT').' + ORDER BY ri.`id_hotel`, ri.`id_product`, ri.`room_num`, ri.`id`'); + +$tables = array(); +foreach ($db->executeS('SHOW TABLES') as $t) { + $tables[] = reset($t); +} +$withRoomNum = array(); +foreach (array('htl_booking_detail', 'htl_cart_booking_data') as $t) { + if (in_array(_DB_PREFIX_.$t, $tables, true) && $db->executeS('SHOW COLUMNS FROM `'._DB_PREFIX_.$t.'` LIKE \'room_num\'')) { + $withRoomNum[] = $t; + } +} + +$n = $start; +foreach ($rooms as $r) { + $new = (string)$n++; + printf("%-28s %-8s -> %s\n", $r['name'], $r['room_num'], $new); + if ($apply && $r['room_num'] !== $new) { + $db->update('htl_room_information', array('room_num' => pSQL($new), 'date_upd' => date('Y-m-d H:i:s')), '`id` = '.(int)$r['id']); + foreach ($withRoomNum as $t) { + $db->update($t, array('room_num' => pSQL($new)), '`id_room` = '.(int)$r['id']); + } + if (in_array(_DB_PREFIX_.'casposbridge_job', $tables, true)) { + // queued (not yet posted) nights follow the new table name + $db->execute('UPDATE `'._DB_PREFIX_.'casposbridge_job` j JOIN `'._DB_PREFIX_.'htl_booking_detail` bd ON bd.`id` = j.`id_htl_booking` + SET j.`table_name` = \''.pSQL($new).'\' WHERE bd.`id_room` = '.(int)$r['id'].' AND j.`status` IN (\'pending\', \'failed\')'); + } + } +} +echo $apply ? "Umbenannt.\n" : "Probelauf – mit --apply übernehmen.\n"; diff --git a/modules/casposbridge/README.md b/modules/casposbridge/README.md index 000621e94..617db3f40 100644 --- a/modules/casposbridge/README.md +++ b/modules/casposbridge/README.md @@ -29,7 +29,12 @@ Check-out ──> Gast zahlt an der Kasse wie gewohnt 1. In CASPOS: Zimmer als Tische im eigenen Tischbereich anlegen (Name = Zimmernummer), Artikel für Übernachtung/Frühstück/Kurtaxe anlegen, einen Kellner „Hotel“ mit Passwort anlegen, OrderApp-API aktivieren. -2. In QloApps: Zimmernummern (Hotel Reservation System → Zimmertypen → Zimmer) auf die Tischnamen setzen. +2. In QloApps: Zimmernummern (Hotel Reservation System → Zimmertypen → Zimmer) auf die Tischnummern setzen – + oder alle Zimmer fortlaufend umnummerieren (erst Probelauf, dann `--apply`; bestehende Buchungen werden mitgezogen): + + ```bash + docker compose -f docker-compose.yml -f docker-compose.server.yml exec -u www-data app php docker/renumber-rooms.php 101 + ``` 3. *Module → CASPOS Kassenanbindung → Konfigurieren*: IP und API-Port der Kasse (wie in der OrderApp), bei HTTPS den SHA1-Fingerabdruck, Kellner-Nummer und Passwort. 4. **Verbindung testen** – zeigt Tischbereiche und Artikel mit IDs. Meldet die Kasse „Gerät nicht