from django.db import transaction

from api.models.data.expenses import Expense, ExpenseCategory
from api.serializers.data.expenses import ExpenseSerializer, ExpenseCategorySerializer
from api.views.data.base import DataRootViewSet

class ExpenseCategoryViewSet(DataRootViewSet):
    soft_delete_enabled = False
    permission_module = 'expense_categories'
    queryset = ExpenseCategory.objects.all().order_by("-id")
    serializer_class = ExpenseCategorySerializer
    search_fields = ["name"]


class ExpenseViewSet(DataRootViewSet):
    permission_module = 'expenses'
    queryset = Expense.objects.all().order_by("-expense_date", "-id")
    serializer_class = ExpenseSerializer
    search_fields = ["description", "receipt"]

    @transaction.atomic
    def perform_create(self, serializer):
        serializer.save()

    @transaction.atomic
    def perform_update(self, serializer):
        serializer.save()

    @transaction.atomic
    def perform_destroy(self, instance):
        instance.delete()
