views.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. # coding=utf-8
  2. import traceback
  3. import json
  4. from django.db.models import Q, Sum
  5. from django.db.models import ProtectedError
  6. from django.views.decorators.csrf import csrf_exempt
  7. from django.db import transaction, IntegrityError
  8. from django.conf import settings
  9. from apps.base import Formater
  10. from apps.finance.filters import FinanceCategoryFilter, FinancePurposeFilter, FinanceIncomeFilter
  11. from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome
  12. from apps.finance.serializers import FinanceCategorySerializer, FinancePurposeSerializer, FinanceIncomeSerializer
  13. from apps.account.decorators import token_required, permission_required
  14. from apps.foundation.models import BizLog
  15. from libs.http import JSONResponse, JSONError, DataGridJSONResponse
  16. from libs import utils
  17. from apps.exceptions import CustomError
  18. @csrf_exempt
  19. @permission_required('finance.view_finance_category')
  20. def finance_category_list(request):
  21. f = FinanceCategoryFilter(request.GET, queryset=FinanceCategory.objects.filter())
  22. rows, total = utils.get_page_data(request, f.qs)
  23. serializer = FinanceCategorySerializer(rows, many=True)
  24. return DataGridJSONResponse(serializer.data, total)\
  25. @csrf_exempt
  26. @token_required
  27. def finance_category_dict(request):
  28. result = {
  29. 'category': FinanceCategorySerializer(FinanceCategory.objects.filter(enabled=True), many=True).data,
  30. 'purpose': FinancePurposeSerializer(FinancePurpose.objects.filter(enabled=True), many=True).data,
  31. }
  32. return JSONResponse(result)
  33. @csrf_exempt
  34. @permission_required('finance.add_finance_category')
  35. def finance_category_save(request):
  36. id = request.GET.get('id')
  37. data = json.loads(request.body)
  38. try:
  39. with transaction.atomic():
  40. serializer = FinanceCategorySerializer.factory(request.user, data, id)
  41. serializer.validSave()
  42. except CustomError, e:
  43. return JSONError(e.get_error_msg())
  44. except Exception, e:
  45. traceback.print_exc()
  46. return JSONError(u'保存失败!')
  47. return JSONResponse({})
  48. @csrf_exempt
  49. @permission_required('finance.delete_finance_category')
  50. def finance_category_delete(request):
  51. id = request.GET.get('id')
  52. try:
  53. with transaction.atomic():
  54. instance = FinanceCategory.getById(id)
  55. BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除财务收支类别[%s],id=%d" % (instance.name, instance.id))
  56. instance.delete()
  57. except CustomError, e:
  58. return JSONError(e.get_error_msg())
  59. except ProtectedError:
  60. return JSONError(u'该财务收支类别已被使用,禁止删除!')
  61. except IntegrityError:
  62. return JSONError(u'该财务收支类别已被使用,禁止删除!')
  63. except Exception, e:
  64. traceback.print_exc()
  65. return JSONError(u'删除失败!')
  66. return JSONResponse({})
  67. @csrf_exempt
  68. @permission_required('finance.view_finance_category')
  69. def finance_purpose_list(request):
  70. f = FinancePurposeFilter(request.GET, queryset=FinancePurpose.objects.filter())
  71. rows, total = utils.get_page_data(request, f.qs)
  72. serializer = FinancePurposeSerializer(rows, many=True)
  73. return DataGridJSONResponse(serializer.data, total)
  74. @csrf_exempt
  75. @permission_required('finance.add_finance_category')
  76. def finance_purpose_save(request):
  77. id = request.GET.get('id')
  78. data = json.loads(request.body)
  79. try:
  80. with transaction.atomic():
  81. serializer = FinancePurposeSerializer.factory(request.user, data, id)
  82. serializer.validSave()
  83. except CustomError, e:
  84. return JSONError(e.get_error_msg())
  85. except Exception, e:
  86. traceback.print_exc()
  87. return JSONError(u'保存失败!')
  88. return JSONResponse({})
  89. @csrf_exempt
  90. @permission_required('finance.delete_finance_category')
  91. def finance_purpose_delete(request):
  92. id = request.GET.get('id')
  93. try:
  94. with transaction.atomic():
  95. instance = FinancePurpose.getById(id)
  96. BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除财务收支用途[%s],id=%d" % (instance.name, instance.id))
  97. instance.delete()
  98. except CustomError, e:
  99. return JSONError(e.get_error_msg())
  100. except ProtectedError:
  101. return JSONError(u'该财务收支用途已被使用,禁止删除!')
  102. except IntegrityError:
  103. return JSONError(u'该财务收支用途已被使用,禁止删除!')
  104. except Exception, e:
  105. traceback.print_exc()
  106. return JSONError(u'删除失败!')
  107. return JSONResponse({})
  108. @csrf_exempt
  109. @permission_required('finance.view_finance_income')
  110. def finance_income_list(request):
  111. department_ids = request.user.getSubDepartmentIds()
  112. user_ids = request.user.getSubEmployeeIds()
  113. # f = FinanceIncomeFilter(request.GET, queryset=dbFinanceIncome.objects.filter())
  114. rows = dbFinanceIncome.objects.filter(Q(create_user_id__in=user_ids) | Q(department_id__in=department_ids) | Q(create_user=request.user))
  115. f = FinanceIncomeFilter(request.GET, queryset=rows)
  116. total_row = f.qs.aggregate(sum_amount=Sum('amount'))
  117. more = {
  118. 'sum_amount': Formater.formatAmountShow(total_row['sum_amount']),
  119. }
  120. rows, total = utils.get_page_data(request, f.qs)
  121. serializer = FinanceIncomeSerializer(rows, many=True)
  122. return DataGridJSONResponse(serializer.data, total, more)
  123. @csrf_exempt
  124. @permission_required('finance.add_finance_income')
  125. def finance_income_save(request):
  126. id = request.GET.get('id')
  127. data = json.loads(request.body)
  128. try:
  129. with transaction.atomic():
  130. serializer = FinanceIncomeSerializer.factory(request.user, data, id)
  131. if serializer.instance and serializer.instance.check_status == settings.PASS:
  132. raise CustomError(u'该收支单已审核,禁止修改!')
  133. serializer.validSave()
  134. BizLog.objects.addnew(request.user, BizLog.DELETE, u"编辑收支单[%s],id=%d" % (serializer.instance.no, serializer.instance.id), data)
  135. except CustomError, e:
  136. return JSONError(e.get_error_msg())
  137. except Exception, e:
  138. traceback.print_exc()
  139. return JSONError(u'保存失败!')
  140. return JSONResponse({})
  141. @csrf_exempt
  142. @permission_required('finance.check_finance_income')
  143. def finance_income_check(request):
  144. id = request.GET.get('id')
  145. check_status = request.GET.get('check_status')
  146. try:
  147. with transaction.atomic():
  148. instance = dbFinanceIncome.getById(id)
  149. instance.check_status = check_status
  150. instance.save()
  151. BizLog.objects.addnew(request.user, BizLog.DELETE, u"审核收支单[%s],id=%d" % (instance.no, instance.id), check_status)
  152. except CustomError, e:
  153. return JSONError(e.get_error_msg())
  154. except Exception, e:
  155. traceback.print_exc()
  156. return JSONError(u'保存失败!')
  157. return JSONResponse({})