mirror of
https://github.com/henry4682/linebot_finance.git
synced 2026-05-16 04:41:52 +00:00
1. change column name
This commit is contained in:
@@ -112,7 +112,7 @@ def parse_multiline_expense(text: str) -> dict | None:
|
|||||||
field_map = {
|
field_map = {
|
||||||
"品項": "item_name",
|
"品項": "item_name",
|
||||||
"類別": "category",
|
"類別": "category",
|
||||||
"金額": "amount",
|
"金額": "total_amount",
|
||||||
"店家": "seller_name",
|
"店家": "seller_name",
|
||||||
"備註": "note",
|
"備註": "note",
|
||||||
}
|
}
|
||||||
@@ -124,11 +124,11 @@ def parse_multiline_expense(text: str) -> dict | None:
|
|||||||
fields[field] = value
|
fields[field] = value
|
||||||
break
|
break
|
||||||
|
|
||||||
if not all(k in fields for k in ["item_name", "category", "amount"]):
|
if not all(k in fields for k in ["item_name", "category", "total_amount"]):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
fields["amount"] = float(re.sub(r"[^\d.]", "", fields["amount"]))
|
fields["total_amount"] = float(re.sub(r"[^\d.]", "", fields["total_amount"]))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ def save_expense(line_user_id: str, fields: dict) -> str:
|
|||||||
db.add(Expense(
|
db.add(Expense(
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
category_id=subcategory_id or category_id,
|
category_id=subcategory_id or category_id,
|
||||||
amount=fields["amount"],
|
amount=fields["total_amount"],
|
||||||
note=fields.get("note"),
|
note=fields.get("note"),
|
||||||
seller_name=fields.get("seller_name"),
|
seller_name=fields.get("seller_name"),
|
||||||
item_name=fields["item_name"],
|
item_name=fields["item_name"],
|
||||||
@@ -156,7 +156,7 @@ def save_expense(line_user_id: str, fields: dict) -> str:
|
|||||||
f"✅ 已記錄!\n"
|
f"✅ 已記錄!\n"
|
||||||
f"品項:{fields['item_name']}\n"
|
f"品項:{fields['item_name']}\n"
|
||||||
f"類別:{fields['category']}\n"
|
f"類別:{fields['category']}\n"
|
||||||
f"金額:${fields['amount']:.0f}\n"
|
f"金額:${fields['total_amount']:.0f}\n"
|
||||||
)
|
)
|
||||||
if fields.get("seller_name"):
|
if fields.get("seller_name"):
|
||||||
reply += f"店家:{fields['seller_name']}\n"
|
reply += f"店家:{fields['seller_name']}\n"
|
||||||
@@ -192,7 +192,7 @@ def delete_expense(line_user_id: str, target: str) -> str:
|
|||||||
row = rows[idx]
|
row = rows[idx]
|
||||||
db.delete(row)
|
db.delete(row)
|
||||||
db.commit()
|
db.commit()
|
||||||
return f"✅ 已刪除:{row.item_name} ${float(row.amount):.0f}"
|
return f"✅ 已刪除:{row.item_name} ${float(row.total_amount):.0f}"
|
||||||
|
|
||||||
matched = [r for r in rows if r.item_name == target]
|
matched = [r for r in rows if r.item_name == target]
|
||||||
if not matched:
|
if not matched:
|
||||||
@@ -200,7 +200,7 @@ def delete_expense(line_user_id: str, target: str) -> str:
|
|||||||
row = matched[-1]
|
row = matched[-1]
|
||||||
db.delete(row)
|
db.delete(row)
|
||||||
db.commit()
|
db.commit()
|
||||||
return f"✅ 已刪除:{row.item_name} ${float(row.amount):.0f}"
|
return f"✅ 已刪除:{row.item_name} ${float(row.total_amount):.0f}"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
db.rollback()
|
db.rollback()
|
||||||
print("❌ 刪除失敗:", e)
|
print("❌ 刪除失敗:", e)
|
||||||
@@ -221,7 +221,7 @@ def query_today(line_user_id: str) -> str:
|
|||||||
if not rows:
|
if not rows:
|
||||||
return "今天還沒有記錄 📭"
|
return "今天還沒有記錄 📭"
|
||||||
|
|
||||||
total = sum(float(r.amount) for r in rows)
|
total = sum(float(r.total_amount) for r in rows)
|
||||||
lines = [
|
lines = [
|
||||||
f"{i+1}. {r.item_name} ${float(r.amount):.0f}" + (f"({r.note})" if r.note else "")
|
f"{i+1}. {r.item_name} ${float(r.amount):.0f}" + (f"({r.note})" if r.note else "")
|
||||||
for i, r in enumerate(rows)
|
for i, r in enumerate(rows)
|
||||||
@@ -243,7 +243,7 @@ def query_month(line_user_id: str) -> str:
|
|||||||
sql = text("""
|
sql = text("""
|
||||||
SELECT
|
SELECT
|
||||||
COALESCE(m.display_name, e.item_name) AS display_name,
|
COALESCE(m.display_name, e.item_name) AS display_name,
|
||||||
SUM(e.amount) as total_amount
|
SUM(e.total_amount) as total_amount
|
||||||
FROM expenses e
|
FROM expenses e
|
||||||
LEFT JOIN merchant_mapping m ON e.seller_name LIKE '%%' || m.pattern || '%%'
|
LEFT JOIN merchant_mapping m ON e.seller_name LIKE '%%' || m.pattern || '%%'
|
||||||
WHERE e.user_id = :user_id
|
WHERE e.user_id = :user_id
|
||||||
@@ -258,7 +258,7 @@ def query_month(line_user_id: str) -> str:
|
|||||||
if not rows:
|
if not rows:
|
||||||
return "本月還沒有記錄 📭"
|
return "本月還沒有記錄 📭"
|
||||||
|
|
||||||
total = sum(float(r.amount) for r in rows)
|
total = sum(float(r.total_amount) for r in rows)
|
||||||
summary = {}
|
summary = {}
|
||||||
for row in rows:
|
for row in rows:
|
||||||
name = row.display_name
|
name = row.display_name
|
||||||
|
|||||||
Reference in New Issue
Block a user