Reconfigure SQLite sync for new DB category names and deduplicate tariffs
This commit is contained in:
@@ -9,6 +9,15 @@ import sqlite3
|
|||||||
CSV_PATH = Path('/home/openclaw/.openclaw/workspace/skills/paradiz/references/prices.csv')
|
CSV_PATH = Path('/home/openclaw/.openclaw/workspace/skills/paradiz/references/prices.csv')
|
||||||
DB_PATH = Path('/home/openclaw/.openclaw/workspace/skills/paradiz/data/db/testDB.sqlite')
|
DB_PATH = Path('/home/openclaw/.openclaw/workspace/skills/paradiz/data/db/testDB.sqlite')
|
||||||
|
|
||||||
|
# Маппинг названий из прайса в фактические категории новой БД
|
||||||
|
ROOM_DB_MAP = {
|
||||||
|
'Домик Эконом': 'Домик',
|
||||||
|
'Стандарт': 'Стандарт',
|
||||||
|
'Двухкомнатный номер': 'Двухкомнатный Номер',
|
||||||
|
'Номер с кухней': 'Номер с кухней Стандарт',
|
||||||
|
'Номер Большой с кухней': 'Номер с кухней №33',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def mk_hash(*parts: str) -> str:
|
def mk_hash(*parts: str) -> str:
|
||||||
return hashlib.md5('|'.join(parts).encode('utf-8')).hexdigest()
|
return hashlib.md5('|'.join(parts).encode('utf-8')).hexdigest()
|
||||||
@@ -87,6 +96,7 @@ def main():
|
|||||||
}
|
}
|
||||||
|
|
||||||
synced = 0
|
synced = 0
|
||||||
|
used_categories = set()
|
||||||
for r in rows:
|
for r in rows:
|
||||||
room = (r.get('room') or '').strip()
|
room = (r.get('room') or '').strip()
|
||||||
if not room or room == 'Доп. человек':
|
if not room or room == 'Доп. человек':
|
||||||
@@ -101,12 +111,22 @@ def main():
|
|||||||
|
|
||||||
base_included = 4 if room in ('Двухкомнатный номер', 'Номер Большой с кухней') else 2
|
base_included = 4 if room in ('Двухкомнатный номер', 'Номер Большой с кухней') else 2
|
||||||
maxl = room_max.get(room, gmax)
|
maxl = room_max.get(room, gmax)
|
||||||
cat_id = ensure_category(cur, room, maxl)
|
|
||||||
|
db_room = ROOM_DB_MAP.get(room, room)
|
||||||
|
cat_id = ensure_category(cur, db_room, maxl)
|
||||||
|
used_categories.add(db_room)
|
||||||
|
|
||||||
|
# очищаем старые/дублирующиеся тарифы в том же диапазоне дат и вместимости
|
||||||
|
df = date_jd(cur, dfrom)
|
||||||
|
dt = date_jd(cur, dto)
|
||||||
|
cur.execute('''DELETE FROM hotel_room_categories_cost
|
||||||
|
WHERE category=? AND date_from=? AND date_to=? AND number BETWEEN ? AND ?''',
|
||||||
|
(cat_id, df, dt, gmin, gmax))
|
||||||
|
|
||||||
for n in range(gmin, gmax + 1):
|
for n in range(gmin, gmax + 1):
|
||||||
extra_guests = max(0, n - base_included)
|
extra_guests = max(0, n - base_included)
|
||||||
cost = base + extra_guests * extra
|
cost = base + extra_guests * extra
|
||||||
upsert_cost(cur, cat_id, room, n, cost, dfrom, dto)
|
upsert_cost(cur, cat_id, db_room, n, cost, dfrom, dto)
|
||||||
synced += 1
|
synced += 1
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
@@ -114,6 +134,7 @@ def main():
|
|||||||
|
|
||||||
print(f'backup: {backup_path}')
|
print(f'backup: {backup_path}')
|
||||||
print(f'synced cost rows: {synced}')
|
print(f'synced cost rows: {synced}')
|
||||||
|
print('mapped categories:', ', '.join(sorted(used_categories)))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
Reference in New Issue
Block a user