# coding=utf-8 import traceback import json from django.db.models import ProtectedError from django.views.decorators.csrf import csrf_exempt from django.db import transaction, IntegrityError from apps.finance.filters import FinanceCategoryFilter, FinancePurposeFilter from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome from apps.finance.serializers import FinanceCategorySerializer, FinancePurposeSerializer from apps.account.decorators import token_required, permission_required from apps.foundation.models import BizLog from libs.http import JSONResponse, JSONError, DataGridJSONResponse from libs import utils from apps.exceptions import CustomError @csrf_exempt @permission_required('finance.view_finance_category') def finance_category_list(request): f = FinanceCategoryFilter(request.GET, queryset=FinanceCategory.objects.filter()) rows, total = utils.get_page_data(request, f.qs) serializer = FinanceCategorySerializer(rows, many=True) return DataGridJSONResponse(serializer.data, total)\ @csrf_exempt @token_required def finance_category_dict(request): result = { 'category': FinanceCategorySerializer(FinanceCategory.objects.filter(enabled=True), many=True).data } return JSONResponse(result) @csrf_exempt @permission_required('finance.add_finance_category') def finance_category_save(request): id = request.GET.get('id') data = json.loads(request.body) try: with transaction.atomic(): serializer = FinanceCategorySerializer.factory(request.user, data, id) serializer.validSave() except CustomError, e: return JSONError(e.get_error_msg()) except Exception, e: traceback.print_exc() return JSONError(u'保存失败!') return JSONResponse({}) @csrf_exempt @permission_required('finance.delete_finance_category') def finance_category_delete(request): id = request.GET.get('id') try: with transaction.atomic(): instance = FinanceCategory.getById(id) BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除财务收支类别[%s],id=%d" % (instance.name, instance.id)) instance.delete() except CustomError, e: return JSONError(e.get_error_msg()) except ProtectedError: return JSONError(u'该财务收支类别已被使用,禁止删除!') except IntegrityError: return JSONError(u'该财务收支类别已被使用,禁止删除!') except Exception, e: traceback.print_exc() return JSONError(u'删除失败!') return JSONResponse({}) @csrf_exempt @permission_required('finance.view_finance_category') def finance_purpose_list(request): f = FinancePurposeFilter(request.GET, queryset=FinancePurpose.objects.filter()) rows, total = utils.get_page_data(request, f.qs) serializer = FinancePurposeSerializer(rows, many=True) return DataGridJSONResponse(serializer.data, total) @csrf_exempt @permission_required('finance.add_finance_category') def finance_purpose_save(request): id = request.GET.get('id') data = json.loads(request.body) try: with transaction.atomic(): serializer = FinancePurposeSerializer.factory(request.user, data, id) serializer.validSave() except CustomError, e: return JSONError(e.get_error_msg()) except Exception, e: traceback.print_exc() return JSONError(u'保存失败!') return JSONResponse({}) @csrf_exempt @permission_required('finance.delete_finance_category') def finance_purpose_delete(request): id = request.GET.get('id') try: with transaction.atomic(): instance = FinancePurpose.getById(id) BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除财务收支用途[%s],id=%d" % (instance.name, instance.id)) instance.delete() except CustomError, e: return JSONError(e.get_error_msg()) except ProtectedError: return JSONError(u'该财务收支用途已被使用,禁止删除!') except IntegrityError: return JSONError(u'该财务收支用途已被使用,禁止删除!') except Exception, e: traceback.print_exc() return JSONError(u'删除失败!') return JSONResponse({})