113 lines
4.6 KiB
Python
113 lines
4.6 KiB
Python
import sys
|
|
sys.path.insert(0, '/app')
|
|
|
|
from app.core.database import get_connection
|
|
|
|
print("=" * 80)
|
|
print("【実際に API が使用している SQL クエリを再現】")
|
|
print("=" * 80)
|
|
|
|
from_date = "2025-06-01"
|
|
to_date = "2025-06-30"
|
|
account_id = 501
|
|
include_history = False
|
|
|
|
with get_connection() as conn:
|
|
with conn.cursor() as cur:
|
|
# フィールド存在チェック
|
|
cur.execute("""
|
|
SELECT column_name FROM information_schema.columns
|
|
WHERE table_name = 'journal_entries'
|
|
AND column_name IN ('is_latest', 'revision_count', 'original_entry_id')
|
|
""")
|
|
existing_fields = {row['column_name'] for row in cur.fetchall()}
|
|
print(f"\n📋 DB フィールド: {existing_fields}")
|
|
|
|
if 'revision_count' in existing_fields and 'is_latest' in existing_fields:
|
|
if include_history:
|
|
sql = """
|
|
SELECT
|
|
je.journal_entry_id,
|
|
je.entry_date,
|
|
je.description,
|
|
je.fiscal_year,
|
|
je.revision_count,
|
|
je.is_latest,
|
|
je.original_entry_id,
|
|
COALESCE(SUM(jl.debit), 0) as debit_total,
|
|
COALESCE(SUM(jl.credit), 0) as credit_total,
|
|
STRING_AGG(DISTINCT CASE WHEN jl.tax_rate IS NOT NULL THEN jl.tax_rate::text END, ', ') as tax_rates
|
|
FROM journal_entries je
|
|
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
|
WHERE je.is_deleted = false
|
|
"""
|
|
else:
|
|
sql = """
|
|
SELECT
|
|
je.journal_entry_id,
|
|
je.entry_date,
|
|
je.description,
|
|
je.fiscal_year,
|
|
je.revision_count,
|
|
je.is_latest,
|
|
je.original_entry_id,
|
|
COALESCE(SUM(jl.debit), 0) as debit_total,
|
|
COALESCE(SUM(jl.credit), 0) as credit_total,
|
|
STRING_AGG(DISTINCT CASE WHEN jl.tax_rate IS NOT NULL THEN jl.tax_rate::text END, ', ') as tax_rates
|
|
FROM journal_entries je
|
|
LEFT JOIN journal_lines jl ON je.journal_entry_id = jl.journal_entry_id
|
|
WHERE je.is_deleted = false
|
|
AND je.is_latest = true
|
|
"""
|
|
params = []
|
|
|
|
# 期間フ
|
|
sql += " AND je.entry_date >= %s"
|
|
params.append(from_date)
|
|
|
|
sql += " AND je.entry_date <= %s"
|
|
params.append(to_date)
|
|
|
|
# account_id フィルター
|
|
if account_id:
|
|
sql += """ AND je.journal_entry_id IN (
|
|
SELECT DISTINCT journal_entry_id
|
|
FROM journal_lines
|
|
WHERE account_id = %s
|
|
)"""
|
|
params.append(account_id)
|
|
|
|
sql += " GROUP BY je.journal_entry_id, je.entry_date, je.description, je.fiscal_year, je.revision_count, je.is_latest, je.original_entry_id"
|
|
sql += " ORDER BY je.entry_date DESC, je.journal_entry_id DESC"
|
|
|
|
print(f"\n【SQL】")
|
|
print(sql)
|
|
print(f"\n【パラメータ】{params}")
|
|
|
|
cur.execute(sql, params)
|
|
rows = cur.fetchall()
|
|
|
|
print(f"\n【結果】{len(rows)} 件")
|
|
for i, row in enumerate(rows, 1):
|
|
print(f"\n{i}. ID {row['journal_entry_id']}")
|
|
print(f" 日付: {row['entry_date']}")
|
|
print(f" 摘要: {row['description']}")
|
|
print(f" 借方: {row['debit_total']}, 貸方: {row['credit_total']}")
|
|
|
|
# account_id 501 のレコードを持つ仕訳を確認
|
|
print("\n" + "=" * 80)
|
|
print("【仕訳に含まれる科目の内訳】")
|
|
if rows:
|
|
for row in rows[:1]: # 最初のレコードが 501 を含むか
|
|
print(f"\n仕訳 ID {row['journal_entry_id']} の行科目:")
|
|
cur.execute("""
|
|
SELECT account_id, account_name, debit, credit
|
|
FROM journal_lines jl
|
|
JOIN accounts a ON jl.account_id = a.account_id
|
|
WHERE jl.journal_entry_id = %s
|
|
""", [row['journal_entry_id']])
|
|
for line in cur.fetchall():
|
|
print(f" • {line['account_id']} {line['account_name']}: 借方 {line['debit']}, 貸方 {line['credit']}")
|
|
|
|
print("\n" + "=" * 80)
|