データベースルールにowner_typeとis_canceledを追加し、is_businessを廃止。Expenseモデルと関連するマイグレーションを実施。明細編集UIをowner_type選択に更新し、取り消し済みの経費を一覧から除外。作業ログをdiary.mdに追記。

This commit is contained in:
president
2025-12-21 11:56:38 +09:00
parent 02d8cd6a30
commit d301ddcbfb
7 changed files with 100 additions and 48 deletions

View File

@@ -30,7 +30,11 @@ def csv_upload(request):
def expense_list(request):
expenses = Expense.objects.select_related('store', 'expense_category').order_by('-use_date', '-id')[:200]
expenses = (
Expense.objects.filter(is_canceled=False)
.select_related('store', 'expense_category')
.order_by('-use_date', '-id')[:200]
)
stores = Store.objects.filter(is_active=True).order_by('name')
categories = ExpenseCategory.objects.filter(is_active=True).order_by('name')
return render(
@@ -57,11 +61,14 @@ def expense_update(request, expense_id: int):
return JsonResponse({'status': 'error', 'message': 'JSONはオブジェクトで送信してください。'}, status=400)
expense = get_object_or_404(Expense, pk=expense_id)
fields = {}
for key in ('store_id', 'expense_category_id', 'is_business', 'note'):
for key in ('store_id', 'expense_category_id', 'owner_type', 'note'):
if key in payload:
value = payload[key]
if value in ('', None):
fields[key] = None
if key == 'owner_type':
fields[key] = 'pending'
else:
fields[key] = None
else:
fields[key] = value
if 'store_id' in fields and fields['store_id'] is not None:
@@ -78,9 +85,11 @@ def expense_update(request, expense_id: int):
return JsonResponse(
{'status': 'error', 'message': 'expense_category_idが不正です。'}, status=400
)
if 'is_business' in fields and fields['is_business'] is not None:
if not isinstance(fields['is_business'], bool):
return JsonResponse({'status': 'error', 'message': 'is_businessの型が不正です。'}, status=400)
if 'owner_type' in fields and fields['owner_type'] is not None:
if not isinstance(fields['owner_type'], str):
return JsonResponse({'status': 'error', 'message': 'owner_typeの型が不正です。'}, status=400)
if fields['owner_type'] not in {'company', 'personal', 'pending'}:
return JsonResponse({'status': 'error', 'message': 'owner_typeが不正です。'}, status=400)
if 'note' in fields and fields['note'] is not None:
if not isinstance(fields['note'], str):
return JsonResponse({'status': 'error', 'message': 'noteの型が不正です。'}, status=400)