140 lines
5.3 KiB
Python
140 lines
5.3 KiB
Python
import psycopg
|
||
from datetime import datetime
|
||
|
||
# 連接到数据库
|
||
conn = psycopg.connect(
|
||
host="127.0.0.1",
|
||
port=5432,
|
||
dbname="njts_accounting",
|
||
user="postgres",
|
||
password="postgres"
|
||
)
|
||
|
||
try:
|
||
with conn:
|
||
with conn.cursor(row_factory=psycopg.rows.dict_row) as cur:
|
||
print("=" * 80)
|
||
print("【デバッグ: ID=431と432のis_latest値の確認】")
|
||
print("=" * 80)
|
||
|
||
# Check if is_latest column exists
|
||
cur.execute("""
|
||
SELECT COUNT(*) as cnt
|
||
FROM information_schema.columns
|
||
WHERE table_name = 'journal_entries' AND column_name = 'is_latest'
|
||
""")
|
||
col_exists = cur.fetchone()['cnt'] > 0
|
||
print(f"is_latest列が存在: {col_exists}")
|
||
print()
|
||
|
||
# Check the test entries
|
||
cur.execute("""
|
||
SELECT
|
||
journal_entry_id,
|
||
description,
|
||
is_latest,
|
||
is_deleted,
|
||
parent_entry_id,
|
||
original_entry_id
|
||
FROM journal_entries
|
||
WHERE journal_entry_id IN (431, 432)
|
||
ORDER BY journal_entry_id
|
||
""")
|
||
entries = cur.fetchall()
|
||
for e in entries:
|
||
print(f"ID={e['journal_entry_id']}: {e['description']}")
|
||
print(f" is_latest={e['is_latest']}, is_deleted={e['is_deleted']}")
|
||
print(f" parent_entry_id={e['parent_entry_id']}, original_entry_id={e['original_entry_id']}")
|
||
print()
|
||
|
||
print("=" * 80)
|
||
print("【デバッグ: 修正後のサービスロジックで701科目をクエリ】")
|
||
print("=" * 80)
|
||
|
||
# Get account id for 701
|
||
cur.execute("SELECT account_id FROM accounts WHERE account_code = '701'")
|
||
acc_result = cur.fetchone()
|
||
if acc_result:
|
||
account_id = acc_result['account_id']
|
||
|
||
# Execute the same query as the service with is_latest = true
|
||
cur.execute("""
|
||
SELECT
|
||
COALESCE(SUM(l.debit), 0) AS debit,
|
||
COALESCE(SUM(l.credit), 0) AS credit
|
||
FROM journal_lines l
|
||
JOIN journal_entries j
|
||
ON j.journal_entry_id = l.journal_entry_id
|
||
WHERE l.account_id = %s
|
||
AND j.entry_date BETWEEN '2025-01-01' AND '2025-12-31'
|
||
AND j.is_deleted = false
|
||
AND j.is_latest = true
|
||
""", (account_id,))
|
||
|
||
result = cur.fetchone()
|
||
print(f"701科目の試算表(is_latest=true):")
|
||
print(f" 借方: {result['debit']}")
|
||
print(f" 貸方: {result['credit']}")
|
||
print()
|
||
|
||
print("=" * 80)
|
||
print("【デバッグ: 701科目のすべての仕訳行を確認】")
|
||
print("=" * 80)
|
||
|
||
cur.execute("""
|
||
SELECT
|
||
j.journal_entry_id,
|
||
j.description,
|
||
j.is_latest,
|
||
j.is_deleted,
|
||
l.debit,
|
||
l.credit
|
||
FROM journal_lines l
|
||
JOIN journal_entries j ON j.journal_entry_id = l.journal_entry_id
|
||
JOIN accounts a ON a.account_id = l.account_id
|
||
WHERE a.account_code = '701'
|
||
AND j.is_deleted = false
|
||
ORDER BY j.journal_entry_id
|
||
""")
|
||
|
||
lines = cur.fetchall()
|
||
print(f"合計: {len(lines)}行")
|
||
print()
|
||
|
||
total_debit = 0
|
||
total_credit = 0
|
||
for line in lines:
|
||
status = "✓" if line['is_latest'] else "✗"
|
||
print(f"{status} ID={line['journal_entry_id']:4d}: {line['description']:30s} | 借={line['debit']:10.0f} 貸={line['credit']:10.0f} | is_latest={line['is_latest']}")
|
||
total_debit += line['debit']
|
||
total_credit += line['credit']
|
||
|
||
print()
|
||
print(f"【全行合計】借={total_debit:.0f}, 貸={total_credit:.0f}")
|
||
print()
|
||
|
||
# Count by is_latest
|
||
cur.execute("""
|
||
SELECT
|
||
j.is_latest,
|
||
COUNT(*) as count,
|
||
COALESCE(SUM(l.debit), 0) as total_debit,
|
||
COALESCE(SUM(l.credit), 0) as total_credit
|
||
FROM journal_lines l
|
||
JOIN journal_entries j ON j.journal_entry_id = l.journal_entry_id
|
||
JOIN accounts a ON a.account_id = l.account_id
|
||
WHERE a.account_code = '701'
|
||
AND j.is_deleted = false
|
||
GROUP BY j.is_latest
|
||
ORDER BY j.is_latest DESC
|
||
""")
|
||
|
||
stats = cur.fetchall()
|
||
print("【is_latestごとの集計】")
|
||
for stat in stats:
|
||
status = "最新" if stat['is_latest'] else "旧版"
|
||
print(f"{status}: {stat['count']}行 | 借={stat['total_debit']:.0f} 貸={stat['total_credit']:.0f}")
|
||
|
||
finally:
|
||
conn.close()
|