views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. }
  44. return response_ok(data)
  45. else:
  46. return response_ok()
  47. class WechatAppPayView(APIView):
  48. # TODO
  49. permission_classes = [IsTenantUser]
  50. def post(self, request):
  51. openid = request.POST.get('openid')
  52. pay_edition = request.POST.get('pay_edition') # edition_1_1_year
  53. try:
  54. amount = Config.getIntValue(pay_edition)
  55. if amount:
  56. amount = Formater.formatAmount(amount)
  57. editions = pay_edition.split('_')
  58. edition_year = '{},{}'.format(editions[1], editions[2], )
  59. else:
  60. raise CustomError('续费金额错误')
  61. with transaction.atomic():
  62. pay = Pay.wechatAppPay(request.user, request.user.employee.tenant.id, amount, edition_year)
  63. wechatpay = WechatAppletPay()
  64. data = wechatpay.weChatUnifiedOrder(openid, pay.pay_no, Formater.formatAmountShow(amount))
  65. BizLog.objects.addnew(request.user.employee.tenant, self.request.user, BizLog.INSERT, u'小程序续期申请 no=%s' % pay.pay_no)
  66. return response_ok(data)
  67. except CustomError as e:
  68. return response_error(e.get_error_msg())
  69. except Exception as e:
  70. import traceback
  71. traceback.print_exc()
  72. return response_error(str(e))
  73. class TenantViewSet(CustomModelViewSet):
  74. permission_classes = [isLogin, ]
  75. queryset = Tenant.objects.all()
  76. serializer_class = TenantSerializer
  77. def perform_create(self, serializer):
  78. super(TenantViewSet, self).perform_create(serializer)
  79. instance = serializer.instance
  80. validated_data = serializer.validated_data
  81. BizLog.objects.addnew(instance, self.request.user, BizLog.INSERT, u'申请企业[%s] id=%d' % (instance.company_name, instance.id), validated_data)
  82. @action(methods=['get'], detail=True)
  83. def bind_company(self, request, pk):
  84. # 绑定企业,pk 企业编号
  85. try:
  86. is_validity = Tenant.check_validity(pk)
  87. if not is_validity:
  88. raise CustomError('该企业认证已过期,请联系管理员续费!')
  89. user = self.request.user
  90. if user.type == Employee.SUPER:
  91. raise CustomError('您是企业超级管理员,不能绑定其他企业!')
  92. with transaction.atomic():
  93. user = self.request.user
  94. user.type = Employee.REPAIR
  95. user.save()
  96. tenant = Tenant.getByNo(pk)
  97. Employee.objects.filter(user=user).update(tenant=tenant, type=Employee.REPAIR,position='报修人')
  98. except CustomError as e:
  99. return response_error(e.get_error_msg())
  100. except Exception as e:
  101. return response_error(str(e))
  102. return response_ok('绑定成功!')