views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. from utils.custom_modelviewset import CustomModelViewSet
  2. from django.db import transaction
  3. import json
  4. from rest_framework.decorators import action
  5. from .models import *
  6. from .serializers import *
  7. from .filters import *
  8. from rest_framework.views import APIView
  9. from apps.log.models import BizLog
  10. from utils import response_ok, response_error
  11. from utils.exceptions import CustomError
  12. from utils.permission import isLogin
  13. from apps.upload.models import Upload
  14. from django.contrib.auth import get_user_model
  15. User = get_user_model()
  16. class DictView(APIView):
  17. permission_classes = [isLogin, ]
  18. def get(self, request):
  19. rows = School.objects.filter(enable=True)
  20. ret = {
  21. 'school': [{'id': item.id, 'value': item.name} for item in rows]
  22. }
  23. return response_ok(ret)
  24. class SchoolView(APIView):
  25. permission_classes = [isLogin, ]
  26. def get(self, request):
  27. rows = School.objects.filter(enable=True, id__in=self.request.user.get_manager_school())
  28. data = [{'value': item.id, 'name': item.name} for item in rows]
  29. return response_ok(data)
  30. class SchoolTreeView(APIView):
  31. permission_classes = [isLogin, ]
  32. # @cache_response()
  33. def get(self, request):
  34. source_data = []
  35. schools = School.objects.filter(enable=True)
  36. schools = schools.values('id', 'name')
  37. for school in schools:
  38. school_item = {
  39. 'title': school['name'],
  40. 'id': school['id'],
  41. 'field': 'school',
  42. 'children': [],
  43. }
  44. grades = Grade.objects.filter(school_id=school['id'], count__gte=1)
  45. grades = grades.values('id', 'name')
  46. for grade in grades:
  47. grade_item = {
  48. 'title': grade['name'],
  49. 'id': grade['id'],
  50. 'field': 'grade',
  51. 'children': [],
  52. }
  53. school_item['children'].append(grade_item)
  54. clas = Classes.objects.filter(grade_id=grade['id'], enable=True)
  55. clas = clas.values('id', 'name')
  56. for cla in clas:
  57. class_item = {
  58. 'title': cla['name'],
  59. 'id': cla['id'],
  60. 'field': 'classes',
  61. }
  62. grade_item['children'].append(class_item)
  63. source_data.append(school_item)
  64. return response_ok(source_data)
  65. class AreaTreeView(APIView):
  66. permission_classes = [isLogin, ]
  67. # @cache_response()
  68. def get(self, request):
  69. area_data = []
  70. provinces = Area.objects.filter(level=Area.PROVINCE, province_id__isnull=True).values('id', 'name')
  71. for province in provinces:
  72. province_item = {
  73. 'name': province['name'],
  74. 'value': province['id'],
  75. 'field': 'province',
  76. 'children': [],
  77. }
  78. citys = Area.objects.filter(level=Area.CITY, province_id=province['id'], city_id__isnull=True).values('id', 'name')
  79. for city in citys:
  80. city_item = {
  81. 'name': city['name'],
  82. 'value': city['id'],
  83. 'field': 'city',
  84. 'children': [],
  85. }
  86. province_item['children'].append(city_item)
  87. countys = Area.objects.filter(level=Area.COUNTY, province_id=province['id'], city_id=city['id']).values('id', 'name')
  88. for county in countys:
  89. county_item = {
  90. 'name': county['name'],
  91. 'value': county['id'],
  92. 'field': 'county',
  93. }
  94. city_item['children'].append(county_item)
  95. area_data.append(province_item)
  96. return response_ok(area_data)
  97. class ConfigViewSet(CustomModelViewSet):
  98. permission_classes = [isLogin, ]
  99. queryset = Config.objects.filter()
  100. serializer_class = ConfigSerializer
  101. def list(self, request, *args, **kwargs):
  102. queryset = self.filter_queryset(self.get_queryset())
  103. serializer = self.get_serializer(queryset, many=True)
  104. return response_ok(serializer.data)
  105. def create(self, request, *args, **kwargs):
  106. try:
  107. data = json.loads(request.POST.get('data'))
  108. pay_picture = request.FILES.get('pay_picture')
  109. keys = ['leave_lead_time', ]
  110. with transaction.atomic():
  111. for item in data:
  112. config = Config.objects.filter(property=item['key']).first()
  113. if item['value']:
  114. if item['key'] not in keys:
  115. raise CustomError(u'综合设置属性[%s]不存在' % item['key'])
  116. else:
  117. item['value'] = item['value'].strip()
  118. if config:
  119. config.value = item['value']
  120. config.save()
  121. else:
  122. Config.objects.create(property=item['key'], value=item['value'])
  123. if pay_picture:
  124. upload = Upload.objects._addnew(pay_picture)
  125. if upload:
  126. Config.objects.filter(property='pay_picture').delete()
  127. Config.objects.create(property='pay_picture', value=upload.get_picture())
  128. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'修改系统配置', data)
  129. except CustomError as e:
  130. return response_error(e.get_error_msg())
  131. except Exception as e:
  132. return response_error(str(e))
  133. return response_ok()
  134. class SchoolViewSet(CustomModelViewSet):
  135. permission_classes = [isLogin, ]
  136. queryset = School.objects.filter()
  137. serializer_class = SchoolSerializer
  138. def filter_queryset(self, queryset):
  139. queryset = queryset.filter(id__in=self.request.user.get_manager_school())
  140. f = SchoolFilter(self.request.GET, queryset=queryset)
  141. return f.qs
  142. def perform_create(self, serializer):
  143. super(SchoolViewSet, self).perform_create(serializer)
  144. instance = serializer.instance
  145. validated_data = serializer.validated_data
  146. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  147. u'添加学校[%s],id=%d' % (instance.name, instance.id), validated_data)
  148. def perform_update(self, serializer):
  149. super(SchoolViewSet, self).perform_update(serializer)
  150. instance = serializer.instance
  151. validated_data = serializer.validated_data
  152. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  153. u'修改学校[%s],id=%d' % (instance.name, instance.id), validated_data)
  154. def destroy(self, request, *args, **kwargs):
  155. instance = self.get_object()
  156. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  157. u'删除学校[%s],id=%d' % (instance.name, instance.id))
  158. super(SchoolViewSet, self).perform_destroy(instance)
  159. return response_ok()
  160. @action(methods=['get'], detail=False)
  161. def get_school_dict(self, request):
  162. schools = School.objects.filter(agent_id__in=self.request.user.get_manager_range(), enable=True).values('id',
  163. 'name')
  164. schools = [{'value': school['id'], 'label': school['name']} for school in schools]
  165. return response_ok(schools)
  166. class GradeViewSet(CustomModelViewSet):
  167. permission_classes = [isLogin, ]
  168. queryset = Grade.objects.filter()
  169. serializer_class = GradeSerializer
  170. def filter_queryset(self, queryset):
  171. queryset = queryset.filter(school_id__in=self.request.user.get_manager_school())
  172. f = GradeFilter(self.request.GET, queryset=queryset)
  173. return f.qs
  174. def perform_create(self, serializer):
  175. super(GradeViewSet, self).perform_create(serializer)
  176. instance = serializer.instance
  177. validated_data = serializer.validated_data
  178. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  179. u'添加年级[%s],id=%d' % (instance.name, instance.id), validated_data)
  180. def perform_update(self, serializer):
  181. super(GradeViewSet, self).perform_update(serializer)
  182. instance = serializer.instance
  183. validated_data = serializer.validated_data
  184. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  185. u'修改年级[%s],id=%d' % (instance.name, instance.id), validated_data)
  186. def destroy(self, request, *args, **kwargs):
  187. instance = self.get_object()
  188. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  189. u'删除年级[%s],id=%d' % (instance.name, instance.id))
  190. super(GradeViewSet, self).perform_destroy(instance)
  191. return response_ok()
  192. class StudentViewSet(CustomModelViewSet):
  193. permission_classes = [isLogin, ]
  194. queryset = Student.objects.filter()
  195. serializer_class = StudentSerializer
  196. def filter_queryset(self, queryset):
  197. queryset = queryset.filter()
  198. if self.request.user.type == User.CUSTOMER:
  199. queryset = queryset.filter(create_user=self.request.user, enable=True)
  200. else:
  201. queryset = queryset.filter(school_id__in=self.request.user.get_manager_school())
  202. f = StudentFilter(self.request.GET, queryset=queryset)
  203. return f.qs
  204. def perform_create(self, serializer):
  205. super(StudentViewSet, self).perform_create(serializer)
  206. instance = serializer.instance
  207. validated_data = serializer.validated_data
  208. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  209. u'添加学生信息[%s],id=%d' % (instance.name, instance.id), validated_data)
  210. def perform_update(self, serializer):
  211. super(StudentViewSet, self).perform_update(serializer)
  212. instance = serializer.instance
  213. validated_data = serializer.validated_data
  214. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  215. u'修改学生信息[%s],id=%d' % (instance.name, instance.id), validated_data)
  216. def destroy(self, request, *args, **kwargs):
  217. try:
  218. with transaction.atomic():
  219. instance = self.get_object()
  220. instance.enable = False
  221. instance.save()
  222. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  223. u'删除学生信息[%s],id=%d' % (instance.name, instance.id))
  224. return response_ok()
  225. except CustomError as e:
  226. return response_error(e.get_error_msg())
  227. except Exception as e:
  228. return response_error(str(e))