月次レポート機能の改善として、開始日・終了日によるフィルタリング機能を追加し、店舗区分および経費区分の選択肢を実装。経費区分と店舗マスタの管理画面を新規作成し、関連するマイグレーションを追加。CSV取込画面における経費区分の表示を改善。作業ログをdiary.mdに追記。
This commit is contained in:
@@ -51,12 +51,30 @@ class MonthlyReportResult:
|
||||
unclassified_counts: dict
|
||||
|
||||
|
||||
def build_monthly_report(start_date: date, end_date: date) -> MonthlyReportResult:
|
||||
queryset = Expense.objects.filter(
|
||||
is_canceled=False,
|
||||
use_date__gte=start_date,
|
||||
use_date__lt=end_date,
|
||||
)
|
||||
def build_monthly_report(
|
||||
start_date: date | None,
|
||||
end_date: date | None,
|
||||
store_id: int | None = None,
|
||||
store_is_null: bool = False,
|
||||
expense_category_id: int | None = None,
|
||||
expense_category_is_null: bool = False,
|
||||
description_query: str | None = None,
|
||||
) -> MonthlyReportResult:
|
||||
queryset = Expense.objects.filter(is_canceled=False)
|
||||
if start_date is not None:
|
||||
queryset = queryset.filter(use_date__gte=start_date)
|
||||
if end_date is not None:
|
||||
queryset = queryset.filter(use_date__lt=end_date)
|
||||
if store_is_null:
|
||||
queryset = queryset.filter(store__isnull=True)
|
||||
elif store_id is not None:
|
||||
queryset = queryset.filter(store_id=store_id)
|
||||
if expense_category_is_null:
|
||||
queryset = queryset.filter(expense_category__isnull=True)
|
||||
elif expense_category_id is not None:
|
||||
queryset = queryset.filter(expense_category_id=expense_category_id)
|
||||
if description_query:
|
||||
queryset = queryset.filter(description__icontains=description_query)
|
||||
detail_queryset = (
|
||||
queryset.select_related('store', 'expense_category')
|
||||
.order_by('use_date', 'id')
|
||||
@@ -67,6 +85,7 @@ def build_monthly_report(start_date: date, end_date: date) -> MonthlyReportResul
|
||||
for expense in detail_queryset:
|
||||
detail = {
|
||||
'use_date': expense.use_date,
|
||||
'expense_category_name': expense.expense_category.name if expense.expense_category else None,
|
||||
'description': expense.description,
|
||||
'amount': expense.amount,
|
||||
'note': expense.note,
|
||||
@@ -103,7 +122,7 @@ def build_monthly_report(start_date: date, end_date: date) -> MonthlyReportResul
|
||||
'total': queryset.count(),
|
||||
}
|
||||
return MonthlyReportResult(
|
||||
target_month=start_date,
|
||||
target_month=start_date or date.today(),
|
||||
total_amount=total_amount,
|
||||
store_totals=store_totals,
|
||||
category_totals=category_totals,
|
||||
|
||||
Reference in New Issue
Block a user