views.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  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, permission_required
  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 CategoryView(APIView):
  31. permission_classes = [isLogin, ]
  32. def get(self, request):
  33. rows = CommodityLevel.objects.filter(level=CommodityLevel.ONE, enable=True)
  34. data1 = [{'id': item.id, 'value': item.name} for item in rows]
  35. rows2 = CommodityLevel.objects.filter(level=CommodityLevel.TWO, enable=True)
  36. category = [{'id': item.id, 'value': item.name} for item in rows2]
  37. result = {
  38. 'level':data1,
  39. 'category':category,
  40. }
  41. return response_ok(result)
  42. class CategoryWXView(APIView):
  43. # permission_classes = [isLogin, ]
  44. def get(self, request):
  45. rows = CommodityLevel.objects.filter(enable=True, home_show=True)
  46. data = [{'id': item.id, 'value': item.name,'picture':''} for item in rows]
  47. return response_ok(data)
  48. class AreaTreeView(APIView):
  49. permission_classes = [isLogin, ]
  50. # @cache_response()
  51. def get(self, request):
  52. area_data = []
  53. provinces = Area.objects.filter(level=Area.PROVINCE, province_id__isnull=True).values('id', 'name')
  54. for province in provinces:
  55. province_item = {
  56. 'name': province['name'],
  57. 'value': province['id'],
  58. 'field': 'province',
  59. 'children': [],
  60. }
  61. citys = Area.objects.filter(level=Area.CITY, province_id=province['id'], city_id__isnull=True).values('id', 'name')
  62. for city in citys:
  63. city_item = {
  64. 'name': city['name'],
  65. 'value': city['id'],
  66. 'field': 'city',
  67. 'children': [],
  68. }
  69. province_item['children'].append(city_item)
  70. countys = Area.objects.filter(level=Area.COUNTY, province_id=province['id'], city_id=city['id']).values('id', 'name')
  71. for county in countys:
  72. county_item = {
  73. 'name': county['name'],
  74. 'value': county['id'],
  75. 'field': 'county',
  76. }
  77. city_item['children'].append(county_item)
  78. area_data.append(province_item)
  79. return response_ok(area_data)
  80. class SchoolTreeView(APIView):
  81. permission_classes = [isLogin, ]
  82. # @cache_response()
  83. def get(self, request):
  84. source_data = []
  85. schools = School.objects.filter(enable=True)
  86. schools = schools.values('id', 'name')
  87. for school in schools:
  88. school_item = {
  89. 'title': school['name'],
  90. 'id': school['id'],
  91. 'field': 'school',
  92. 'children': [],
  93. }
  94. grades = Grade.objects.filter(school_id=school['id'], count__gte=1)
  95. grades = grades.values('id', 'name')
  96. for grade in grades:
  97. grade_item = {
  98. 'title': grade['name'],
  99. 'id': grade['id'],
  100. 'field': 'grade',
  101. 'children': [],
  102. }
  103. school_item['children'].append(grade_item)
  104. clas = Classes.objects.filter(grade_id=grade['id'], enable=True)
  105. clas = clas.values('id', 'name')
  106. for cla in clas:
  107. class_item = {
  108. 'title': cla['name'],
  109. 'id': cla['id'],
  110. 'field': 'classes',
  111. }
  112. grade_item['children'].append(class_item)
  113. source_data.append(school_item)
  114. return response_ok(source_data)
  115. class CategoryTreeView(APIView):
  116. # permission_classes = [isLogin, ]
  117. # @cache_response()
  118. def get(self, request):
  119. area_data = []
  120. provinces = CommodityLevel.objects.filter(level=CommodityLevel.ONE, category_id__isnull=True, enable=True).values('id', 'name')
  121. for province in provinces:
  122. province_item = {
  123. 'name': province['name'],
  124. 'value': province['id'],
  125. 'field': 'level',
  126. 'children': [],
  127. }
  128. citys = CommodityLevel.objects.filter(level=CommodityLevel.TWO, category_id=province['id'], enable=True).values('id', 'name')
  129. for city in citys:
  130. city_item = {
  131. 'name': city['name'],
  132. 'value': city['id'],
  133. 'field': 'category',
  134. 'children': [],
  135. }
  136. province_item['children'].append(city_item)
  137. countys = CommodityLevel.objects.filter(level=CommodityLevel.THREE, category_id=city['id'], enable=True).values('id', 'name')
  138. for county in countys:
  139. county_item = {
  140. 'name': county['name'],
  141. 'value': county['id'],
  142. 'field': 'subject',
  143. }
  144. city_item['children'].append(county_item)
  145. area_data.append(province_item)
  146. return response_ok(area_data)
  147. class ConfigViewSet(CustomModelViewSet):
  148. permission_classes = [isLogin, ]
  149. queryset = Config.objects.filter()
  150. serializer_class = ConfigSerializer
  151. def list(self, request, *args, **kwargs):
  152. queryset = self.filter_queryset(self.get_queryset())
  153. serializer = self.get_serializer(queryset, many=True)
  154. return response_ok(serializer.data)
  155. def create(self, request, *args, **kwargs):
  156. try:
  157. data = json.loads(request.POST.get('data'))
  158. pay_picture = request.FILES.get('pay_picture')
  159. keys = ['leave_lead_time', ]
  160. with transaction.atomic():
  161. for item in data:
  162. config = Config.objects.filter(property=item['key']).first()
  163. if item['value']:
  164. if item['key'] not in keys:
  165. raise CustomError(u'综合设置属性[%s]不存在' % item['key'])
  166. else:
  167. item['value'] = item['value'].strip()
  168. if config:
  169. config.value = item['value']
  170. config.save()
  171. else:
  172. Config.objects.create(property=item['key'], value=item['value'])
  173. if pay_picture:
  174. upload = Upload.objects._addnew(pay_picture)
  175. if upload:
  176. Config.objects.filter(property='pay_picture').delete()
  177. Config.objects.create(property='pay_picture', value=upload.get_picture())
  178. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'修改系统配置', data)
  179. except CustomError as e:
  180. return response_error(e.get_error_msg())
  181. except Exception as e:
  182. return response_error(str(e))
  183. return response_ok()
  184. class SchoolViewSet(CustomModelViewSet):
  185. permission_classes = [isLogin, ]
  186. queryset = School.objects.filter()
  187. serializer_class = SchoolSerializer
  188. @permission_required('option.browse_school')
  189. def filter_queryset(self, queryset):
  190. queryset = queryset.filter(id__in=self.request.user.get_manager_school())
  191. f = SchoolFilter(self.request.GET, queryset=queryset)
  192. return f.qs
  193. @permission_required('option.add_school')
  194. def perform_create(self, serializer):
  195. super(SchoolViewSet, self).perform_create(serializer)
  196. instance = serializer.instance
  197. validated_data = serializer.validated_data
  198. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  199. u'添加学校[%s],id=%d' % (instance.name, instance.id), validated_data)
  200. @permission_required('option.add_school')
  201. def perform_update(self, serializer):
  202. super(SchoolViewSet, self).perform_update(serializer)
  203. instance = serializer.instance
  204. validated_data = serializer.validated_data
  205. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  206. u'修改学校[%s],id=%d' % (instance.name, instance.id), validated_data)
  207. @permission_required('option.add_school')
  208. def destroy(self, request, *args, **kwargs):
  209. instance = self.get_object()
  210. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  211. u'删除学校[%s],id=%d' % (instance.name, instance.id))
  212. super(SchoolViewSet, self).perform_destroy(instance)
  213. return response_ok()
  214. @action(methods=['get'], detail=False)
  215. def get_school_dict(self, request):
  216. schools = School.objects.filter(agent_id__in=self.request.user.get_manager_range(), enable=True).values('id',
  217. 'name')
  218. schools = [{'value': school['id'], 'label': school['name']} for school in schools]
  219. return response_ok(schools)
  220. class GradeViewSet(CustomModelViewSet):
  221. permission_classes = [isLogin, ]
  222. queryset = Grade.objects.filter()
  223. serializer_class = GradeSerializer
  224. @permission_required('option.browse_school')
  225. def filter_queryset(self, queryset):
  226. queryset = queryset.filter(school_id__in=self.request.user.get_manager_school())
  227. f = GradeFilter(self.request.GET, queryset=queryset)
  228. return f.qs
  229. @permission_required('option.add_school')
  230. def perform_create(self, serializer):
  231. super(GradeViewSet, self).perform_create(serializer)
  232. instance = serializer.instance
  233. validated_data = serializer.validated_data
  234. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  235. u'添加年级[%s],id=%d' % (instance.name, instance.id), validated_data)
  236. @permission_required('option.add_school')
  237. def perform_update(self, serializer):
  238. super(GradeViewSet, self).perform_update(serializer)
  239. instance = serializer.instance
  240. validated_data = serializer.validated_data
  241. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  242. u'修改年级[%s],id=%d' % (instance.name, instance.id), validated_data)
  243. @permission_required('option.add_school')
  244. def destroy(self, request, *args, **kwargs):
  245. instance = self.get_object()
  246. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  247. u'删除年级[%s],id=%d' % (instance.name, instance.id))
  248. super(GradeViewSet, self).perform_destroy(instance)
  249. return response_ok()
  250. class StudentViewSet(CustomModelViewSet):
  251. permission_classes = [isLogin, ]
  252. queryset = Student.objects.filter()
  253. serializer_class = StudentSerializer
  254. def filter_queryset(self, queryset):
  255. queryset = queryset.filter()
  256. if self.request.user.type == User.CUSTOMER:
  257. queryset = queryset.filter(create_user=self.request.user, enable=True)
  258. else:
  259. queryset = queryset.filter(school_id__in=self.request.user.get_manager_school())
  260. f = StudentFilter(self.request.GET, queryset=queryset)
  261. return f.qs
  262. def perform_create(self, serializer):
  263. super(StudentViewSet, self).perform_create(serializer)
  264. instance = serializer.instance
  265. validated_data = serializer.validated_data
  266. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  267. u'添加学生信息[%s],id=%d' % (instance.name, instance.id), validated_data)
  268. def perform_update(self, serializer):
  269. super(StudentViewSet, self).perform_update(serializer)
  270. instance = serializer.instance
  271. validated_data = serializer.validated_data
  272. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  273. u'修改学生信息[%s],id=%d' % (instance.name, instance.id), validated_data)
  274. def destroy(self, request, *args, **kwargs):
  275. try:
  276. with transaction.atomic():
  277. instance = self.get_object()
  278. instance.enable = False
  279. instance.save()
  280. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  281. u'删除学生信息[%s],id=%d' % (instance.name, instance.id))
  282. return response_ok()
  283. except CustomError as e:
  284. return response_error(e.get_error_msg())
  285. except Exception as e:
  286. return response_error(str(e))
  287. class CategoryViewSet(CustomModelViewSet):
  288. permission_classes = [isLogin, ]
  289. queryset = CommodityLevel.objects.filter()
  290. serializer_class = CommodityLevelSerializer
  291. @permission_required('option.browse_commodiey_level')
  292. def filter_queryset(self, queryset):
  293. queryset = queryset.filter()
  294. f = CommodityLevelFilter(self.request.GET, queryset=queryset)
  295. return f.qs
  296. @permission_required('option.browse_commodiey_level')
  297. def perform_create(self, serializer):
  298. super(CategoryViewSet, self).perform_create(serializer)
  299. instance = serializer.instance
  300. validated_data = serializer.validated_data
  301. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  302. u'添加商品分类[%s],id=%d' % (instance.name, instance.id), validated_data)
  303. @permission_required('option.browse_commodiey_level')
  304. def perform_update(self, serializer):
  305. super(CategoryViewSet, self).perform_update(serializer)
  306. instance = serializer.instance
  307. validated_data = serializer.validated_data
  308. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  309. u'修改商品分类[%s],id=%d' % (instance.name, instance.id), validated_data)