views.py 15 KB

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