from rest_framework import viewsets

from accounts.permissions import HasPermission

from .models import Expense
from .serializers import ExpenseSerializer


class ExpenseViewSet(viewsets.ModelViewSet):
    """No destroy: expenses are financial records. Correct mistakes with
    an update instead of deleting the entry."""

    date_field = 'expense_date'
    query_filters = {'expense_type': 'expense_type'}
    queryset = Expense.objects.select_related('created_by').all()
    serializer_class = ExpenseSerializer
    permission_classes = [HasPermission('expenses.manage')]
    http_method_names = ['get', 'post', 'put', 'patch', 'head', 'options']
    ordering_fields = ('expense_date', 'amount', 'expense_type')
    search_fields = ('description', 'expense_type')

    def perform_create(self, serializer):
        serializer.save(created_by=self.request.user)
