views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # coding=utf-8
  2. from django.conf import settings
  3. from django.db import transaction
  4. from rest_framework.views import APIView
  5. from rest_framework.decorators import action
  6. from utils.custom_modelviewset import CustomModelViewSet
  7. from apps.log.models import BizLog
  8. from apps.tenant.models import Tenant
  9. from .serializers import TenantSerializer
  10. from utils.exceptions import CustomError
  11. from utils import response_ok, response_error
  12. from apps.tenant.employee.models import Employee
  13. from utils.permission import isLogin,IsTenantUser
  14. from apps.WeChatResponse import WechatAppletPay
  15. from apps.tenant.config.models import Config
  16. from apps.base import Formater
  17. from apps.tenant.models import Pay
  18. class SearchTenantView(APIView):
  19. permission_classes = [isLogin, ]
  20. def get(self, request, *args, **kwargs):
  21. company_no = request.GET.get('company_no')
  22. tenant = Tenant.objects.filter(company_no=company_no, status=settings.PASS).first()
  23. if tenant and tenant != request.user.employee.tenant:
  24. data = {
  25. 'company_no':tenant.company_no,
  26. 'company_name':tenant.company_name,
  27. }
  28. return response_ok(data)
  29. else:
  30. return response_ok()
  31. class GetTenantView(APIView):
  32. permission_classes = [isLogin]
  33. def get(self, request, *args, **kwargs):
  34. emplayee = Employee.objects.filter(user=request.user).first()
  35. if emplayee:
  36. data = {
  37. 'tenant_id':emplayee.tenant.id,
  38. 'company_no':emplayee.tenant.company_no,
  39. 'company_name':emplayee.tenant.company_name,
  40. 'position':emplayee.position,
  41. 'wxapp_img':emplayee.tenant.wxapp_img,
  42. 'user_type_text':emplayee.get_type_display(),
  43. 'edition_text':emplayee.tenant.get_edition_display(),
  44. }
  45. return response_ok(data)
  46. else:
  47. return response_ok()
  48. class WechatAppPayView(APIView):
  49. # TODO
  50. permission_classes = [IsTenantUser]
  51. def post(self, request):
  52. openid = request.POST.get('openid')
  53. pay_edition = request.POST.get('pay_edition') # edition_1_1_year
  54. try:
  55. amount = Config.getIntValue(pay_edition)
  56. if amount:
  57. amount = Formater.formatAmount(amount)
  58. editions = pay_edition.split('_')
  59. edition_year = '{},{}'.format(editions[1], editions[2], )
  60. else:
  61. raise CustomError('续费金额错误')
  62. with transaction.atomic():
  63. pay = Pay.wechatAppPay(request.user, request.user.employee.tenant.id, amount, edition_year)
  64. wechatpay = WechatAppletPay()
  65. data = wechatpay.weChatUnifiedOrder(openid, pay.pay_no, Formater.formatAmountShow(amount))
  66. BizLog.objects.addnew(request.user.employee.tenant, self.request.user, BizLog.INSERT, u'小程序续期申请 no=%s' % pay.pay_no)
  67. return response_ok(data)
  68. except CustomError as e:
  69. return response_error(e.get_error_msg())
  70. except Exception as e:
  71. import traceback
  72. traceback.print_exc()
  73. return response_error(str(e))
  74. class TenantViewSet(CustomModelViewSet):
  75. permission_classes = [isLogin, ]
  76. queryset = Tenant.objects.all()
  77. serializer_class = TenantSerializer
  78. def perform_create(self, serializer):
  79. super(TenantViewSet, self).perform_create(serializer)
  80. instance = serializer.instance
  81. validated_data = serializer.validated_data
  82. BizLog.objects.addnew(instance, self.request.user, BizLog.INSERT, u'申请企业[%s] id=%d' % (instance.company_name, instance.id), validated_data)
  83. @action(methods=['get'], detail=True)
  84. def bind_company(self, request, pk):
  85. # 绑定企业,pk 企业编号
  86. try:
  87. is_validity = Tenant.check_validity(pk)
  88. if not is_validity:
  89. raise CustomError('该企业认证已过期,请联系管理员续费!')
  90. user = self.request.user
  91. if user.type == Employee.SUPER:
  92. raise CustomError('您是企业超级管理员,不能绑定其他企业!')
  93. with transaction.atomic():
  94. user = self.request.user
  95. user.type = Employee.REPAIR
  96. user.save()
  97. tenant = Tenant.getByNo(pk)
  98. Employee.objects.filter(user=user).update(tenant=tenant, type=Employee.REPAIR,position='报修人')
  99. except CustomError as e:
  100. return response_error(e.get_error_msg())
  101. except Exception as e:
  102. return response_error(str(e))
  103. return response_ok('绑定成功!')