Чистка хвостов веб-формы: убраны web_registrations и строка «с сайта» в стате
- database.py: удалены таблица web_registrations, методы add_web_registration и next_web_registration_id, поле from_web из get_lead_stats (форму убрали). - bot.py: из статистики убрана строка «с сайта» (веб-заявки больше не пишутся). pytest 33 passed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1428,8 +1428,7 @@ class VKBotApplication:
|
|||||||
"🗂 Заявки (всего): {total}\n"
|
"🗂 Заявки (всего): {total}\n"
|
||||||
" • сегодня: {today}\n"
|
" • сегодня: {today}\n"
|
||||||
" • за 7 дней: {last7}\n"
|
" • за 7 дней: {last7}\n"
|
||||||
" • из бота: {from_bot}\n"
|
" • из бота: {from_bot}\n\n"
|
||||||
" • с сайта: {from_web}\n\n"
|
|
||||||
"📨 Согласны на рассылку: {mk_yes} из {total} ({mk_pct}%)\n\n"
|
"📨 Согласны на рассылку: {mk_yes} из {total} ({mk_pct}%)\n\n"
|
||||||
"🎮 По направлениям:\n{services}\n"
|
"🎮 По направлениям:\n{services}\n"
|
||||||
"💬 Диалоги:\n"
|
"💬 Диалоги:\n"
|
||||||
@@ -1437,7 +1436,7 @@ class VKBotApplication:
|
|||||||
" • сообщений от клиентов: {umsg}"
|
" • сообщений от клиентов: {umsg}"
|
||||||
).format(
|
).format(
|
||||||
total=total, today=ls["today"], last7=ls["last7"],
|
total=total, today=ls["today"], last7=ls["last7"],
|
||||||
from_bot=ls["from_bot"], from_web=ls["from_web"],
|
from_bot=ls["from_bot"],
|
||||||
mk_yes=ls["marketing_yes"], mk_pct=marketing_pct,
|
mk_yes=ls["marketing_yes"], mk_pct=marketing_pct,
|
||||||
services=service_lines, uniq=ds["unique_users"], umsg=ds["user_messages"]
|
services=service_lines, uniq=ds["unique_users"], umsg=ds["user_messages"]
|
||||||
)
|
)
|
||||||
|
|||||||
-51
@@ -174,21 +174,6 @@ class DatabaseManager:
|
|||||||
)
|
)
|
||||||
""")
|
""")
|
||||||
|
|
||||||
# Table for web registrations
|
|
||||||
cursor.execute("""
|
|
||||||
CREATE TABLE IF NOT EXISTS web_registrations (
|
|
||||||
id TEXT PRIMARY KEY,
|
|
||||||
name TEXT,
|
|
||||||
phone TEXT,
|
|
||||||
email TEXT,
|
|
||||||
vk_link TEXT,
|
|
||||||
agree_oferta INTEGER,
|
|
||||||
agree_policy INTEGER,
|
|
||||||
agree_newsletter INTEGER,
|
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)
|
|
||||||
""")
|
|
||||||
|
|
||||||
# Table for editable bot links (переопределяют дефолты из config/.env)
|
# Table for editable bot links (переопределяют дефолты из config/.env)
|
||||||
cursor.execute("""
|
cursor.execute("""
|
||||||
CREATE TABLE IF NOT EXISTS bot_links (
|
CREATE TABLE IF NOT EXISTS bot_links (
|
||||||
@@ -389,21 +374,6 @@ class DatabaseManager:
|
|||||||
)
|
)
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
def next_web_registration_id(self) -> str:
|
|
||||||
"""Следующий ID веб-заявки вида id_004 по МАКСИМАЛЬНОМУ существующему номеру.
|
|
||||||
|
|
||||||
Считаем по max(числовой суффикс), а не по COUNT: при удалении записей
|
|
||||||
COUNT+1 может совпасть с существующим id и нарушить PRIMARY KEY.
|
|
||||||
"""
|
|
||||||
with self._get_connection() as conn:
|
|
||||||
cursor = conn.cursor()
|
|
||||||
# substr(id, 4) отрезает префикс 'id_' и приводит к числу
|
|
||||||
cursor.execute(
|
|
||||||
"SELECT COALESCE(MAX(CAST(substr(id, 4) AS INTEGER)), 0) FROM web_registrations "
|
|
||||||
"WHERE id LIKE 'id\\_%' ESCAPE '\\'"
|
|
||||||
)
|
|
||||||
return f"id_{cursor.fetchone()[0] + 1:03d}"
|
|
||||||
|
|
||||||
def add_lead(self, user_id: int, source: str, name: str, phone: str,
|
def add_lead(self, user_id: int, source: str, name: str, phone: str,
|
||||||
service: Optional[str] = None, call_time: Optional[str] = None,
|
service: Optional[str] = None, call_time: Optional[str] = None,
|
||||||
promo: Optional[str] = None, marketing: bool = False):
|
promo: Optional[str] = None, marketing: bool = False):
|
||||||
@@ -438,7 +408,6 @@ class DatabaseManager:
|
|||||||
"today": scalar("SELECT COUNT(*) FROM leads WHERE date(created_at) = date('now', 'localtime')"),
|
"today": scalar("SELECT COUNT(*) FROM leads WHERE date(created_at) = date('now', 'localtime')"),
|
||||||
"last7": scalar("SELECT COUNT(*) FROM leads WHERE created_at >= datetime('now', '-7 days')"),
|
"last7": scalar("SELECT COUNT(*) FROM leads WHERE created_at >= datetime('now', '-7 days')"),
|
||||||
"from_bot": scalar("SELECT COUNT(*) FROM leads WHERE source = 'bot'"),
|
"from_bot": scalar("SELECT COUNT(*) FROM leads WHERE source = 'bot'"),
|
||||||
"from_web": scalar("SELECT COUNT(*) FROM leads WHERE source = 'web'"),
|
|
||||||
"marketing_yes": scalar("SELECT COUNT(*) FROM leads WHERE marketing = 1"),
|
"marketing_yes": scalar("SELECT COUNT(*) FROM leads WHERE marketing = 1"),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -672,23 +641,3 @@ class DatabaseManager:
|
|||||||
stats["by_position"] = cursor.fetchall()
|
stats["by_position"] = cursor.fetchall()
|
||||||
return stats
|
return stats
|
||||||
|
|
||||||
def add_web_registration(self, reg_id: str, data: dict):
|
|
||||||
"""Сохранить заявку с веб-формы в базу данных SQLite."""
|
|
||||||
with self._get_connection() as conn:
|
|
||||||
cursor = conn.cursor()
|
|
||||||
cursor.execute("""
|
|
||||||
INSERT INTO web_registrations (
|
|
||||||
id, name, phone, email, vk_link,
|
|
||||||
agree_oferta, agree_policy, agree_newsletter
|
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
||||||
""", (
|
|
||||||
reg_id,
|
|
||||||
data.get("name", "").strip(),
|
|
||||||
data.get("phone", "").strip(),
|
|
||||||
data.get("email", "").strip(),
|
|
||||||
data.get("vk", "").strip(),
|
|
||||||
1 if data.get("agreeOferta") else 0,
|
|
||||||
1 if data.get("agreePolicy") else 0,
|
|
||||||
1 if data.get("agreeNewsletter") else 0
|
|
||||||
))
|
|
||||||
conn.commit()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user