| @@ -2,6 +2,8 @@ | ||
| 2 | 2 |  | 
| 3 | 3 | from __future__ import division | 
| 4 | 4 |  | 
| 5 | +from datetime import datetime | |
| 6 | + | |
| 5 | 7 | from django.conf import settings | 
| 6 | 8 | from django_logit import logit | 
| 7 | 9 | from django_response import response | 
| @@ -21,21 +23,27 @@ def lensman_list(request, administrator): | ||
| 21 | 23 |      query = request.POST.get('query', '') | 
| 22 | 24 |      lensman_status = request.POST.get('lensman_status', '') | 
| 23 | 25 |      end_date = tc.to_date(request.POST.get('end_date', '')) | 
| 24 | -    integral_end_date = tc.to_date(request.POST.get('integral_end_date', '')) | |
| 26 | +    integral_end_date_start = request.POST.get('integral_end_date_start', '') | |
| 27 | +    integral_end_date_end = request.POST.get('integral_end_date_end', '') | |
| 25 | 28 |  | 
| 26 | 29 |      logs = LensmanInfo.objects.filter(status=True).order_by('-pk') | 
| 27 | 30 |  | 
| 28 | 31 | if query: | 
| 29 | - logs = logs.filter(Q(name__icontains=query) | Q(phone__icontains=query)) | |
| 30 | - | |
| 32 | + logs = logs.filter(Q(name__icontains=query) | | |
| 33 | + Q(phone__icontains=query)) | |
| 34 | + | |
| 31 | 35 | if lensman_status: | 
| 32 | - logs = logs.filter(lensman_status=lensman_status) | |
| 33 | - | |
| 36 | + logs = logs.filter(lensman_status=lensman_status) | |
| 37 | + | |
| 34 | 38 | if end_date: | 
| 35 | - logs = logs.filter(end_date__lte=end_date) | |
| 36 | - | |
| 37 | - if integral_end_date: | |
| 38 | - logs = logs.filter(integral_end_date__lte=integral_end_date) | |
| 39 | + logs = logs.filter(end_date__lte=end_date) | |
| 40 | + | |
| 41 | + if integral_end_date_start and integral_end_date_end: | |
| 42 | + ftime = datetime.strptime( | |
| 43 | + integral_end_date_start + ' 00:00:00', '%Y%m%d %H:%M:%S') | |
| 44 | + ttime = datetime.strptime( | |
| 45 | + integral_end_date_end + ' 23:59:59', '%Y%m%d %H:%M:%S') | |
| 46 | + logs = logs.filter(integral_end_date__range=[ftime, ttime]) | |
| 39 | 47 |  | 
| 40 | 48 | count = logs.count() | 
| 41 | 49 | logs, left = pagination(logs, page, num) | 
| @@ -56,10 +64,10 @@ def lensman_audit(request, administrator): | ||
| 56 | 64 |      end_date = tc.to_date(request.POST.get('end_date', '')) | 
| 57 | 65 |  | 
| 58 | 66 | try: | 
| 59 | - lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True) | |
| 67 | + lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True) | |
| 60 | 68 | except LensmanInfo.DoesNotExist: | 
| 61 | - return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 62 | - | |
| 69 | + return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 70 | + | |
| 63 | 71 | lensman.lensman_status = LensmanInfo.ACTIVATED | 
| 64 | 72 | lensman.start_date = start_date | 
| 65 | 73 | lensman.end_date = end_date | 
| @@ -75,17 +83,18 @@ def lensman_update(request, administrator): | ||
| 75 | 83 |      lensman_id = request.POST.get('lensman_id', '') | 
| 76 | 84 |      start_date = tc.to_date(request.POST.get('start_date', '')) | 
| 77 | 85 |      end_date = tc.to_date(request.POST.get('end_date', '')) | 
| 78 | -    integral_start_date = tc.to_date(request.POST.get('integral_start_date', '')) | |
| 86 | + integral_start_date = tc.to_date( | |
| 87 | +        request.POST.get('integral_start_date', '')) | |
| 79 | 88 |      integral_end_date = tc.to_date(request.POST.get('integral_end_date', '')) | 
| 80 | 89 |      name = request.POST.get('name', '') | 
| 81 | 90 |      phone = request.POST.get('phone', '') | 
| 82 | 91 |      remark = request.POST.get('remark', '') | 
| 83 | - | |
| 92 | + | |
| 84 | 93 | try: | 
| 85 | - lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True) | |
| 94 | + lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True) | |
| 86 | 95 | except LensmanInfo.DoesNotExist: | 
| 87 | - return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 88 | - | |
| 96 | + return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 97 | + | |
| 89 | 98 | lensman.start_date = start_date | 
| 90 | 99 | lensman.end_date = end_date | 
| 91 | 100 | lensman.integral_start_date = integral_start_date | 
| @@ -102,19 +111,19 @@ def lensman_update(request, administrator): | ||
| 102 | 111 | @logit | 
| 103 | 112 | @check_admin | 
| 104 | 113 | def lensman_integral_list(request, administrator): | 
| 105 | -  user_id = request.POST.get('user_id', '') | |
| 114 | +    user_id = request.POST.get('user_id', '') | |
| 115 | + | |
| 116 | + try: | |
| 117 | + lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 118 | + except LensmanInfo.DoesNotExist: | |
| 119 | + return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 106 | 120 |  | 
| 107 | - try: | |
| 108 | - lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 109 | - except LensmanInfo.DoesNotExist: | |
| 110 | - return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 111 | - | |
| 112 | - integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(user_id=user_id, status=True) | |
| 121 | + integrals = LensmanIntegralIncomeExpensesInfo.objects.filter( | |
| 122 | + user_id=user_id, status=True) | |
| 113 | 123 |  | 
| 114 | - integrals = [integral.admindata for integral in integrals] | |
| 115 | - | |
| 124 | + integrals = [integral.admindata for integral in integrals] | |
| 116 | 125 |  | 
| 117 | - return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals) | |
| 126 | + return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals) | |
| 118 | 127 |  | 
| 119 | 128 |  | 
| 120 | 129 | @logit | 
| @@ -125,20 +134,19 @@ def lensman_integral_update(request): | ||
| 125 | 134 |      brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID | 
| 126 | 135 |  | 
| 127 | 136 | try: | 
| 128 | - lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 137 | + lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 129 | 138 | except LensmanInfo.DoesNotExist: | 
| 130 | - return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 131 | - | |
| 139 | + return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 140 | + | |
| 132 | 141 | lensman.integral += integral | 
| 133 | 142 | lensman.save() | 
| 134 | - | |
| 143 | + | |
| 135 | 144 | LensmanIntegralIncomeExpensesInfo.objects.create( | 
| 136 | - brand_id=brand_id, | |
| 137 | - user_id=user_id, | |
| 138 | - integral=integral, | |
| 139 | - remark=remark, | |
| 140 | - expired_at=lensman.integral_end_date, | |
| 145 | + brand_id=brand_id, | |
| 146 | + user_id=user_id, | |
| 147 | + integral=integral, | |
| 148 | + remark=remark, | |
| 149 | + expired_at=lensman.integral_end_date, | |
| 141 | 150 | ) | 
| 142 | 151 |  | 
| 143 | 152 | return response(200, 'Lensman Integral Update Success', u'摄影师积分更新成功') | 
| 144 | - | 
| @@ -16,17 +16,28 @@ class TenancyShotInfo(BaseModelMixin): | ||
| 16 | 16 | (1, u'已租'), | 
| 17 | 17 | ) | 
| 18 | 18 |  | 
| 19 | - admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True) | |
| 20 | - shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True, unique=True) | |
| 21 | - model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'型号唯一标识', db_index=True) | |
| 22 | - model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称') | |
| 23 | - sn = models.CharField(_(u'sn'), max_length=32, blank=True, null=True, help_text=u'序列号', db_index=True) | |
| 24 | - front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态') | |
| 25 | - rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态') | |
| 26 | - lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态') | |
| 27 | - tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态') | |
| 28 | - appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态') | |
| 29 | - tenancy_status = models.IntegerField(_(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态') | |
| 19 | + admin_id = models.CharField(_(u'admin_id'), max_length=32, | |
| 20 | + blank=True, null=True, help_text=u'经手人唯一标识', db_index=True) | |
| 21 | + shot_id = ShortUUIDField(_(u'shot_id'), max_length=32, blank=True, | |
| 22 | + null=True, help_text=u'镜头唯一标识', db_index=True, unique=True) | |
| 23 | + model_id = models.CharField(_(u'model_id'), max_length=32, | |
| 24 | + blank=True, null=True, help_text=u'型号唯一标识', db_index=True) | |
| 25 | + model_name = models.CharField( | |
| 26 | + _(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称') | |
| 27 | + sn = models.CharField(_(u'sn'), max_length=32, blank=True, | |
| 28 | + null=True, help_text=u'序列号', db_index=True) | |
| 29 | + front_cap_status = models.BooleanField( | |
| 30 | + _(u'front_cap_status'), default=False, help_text=u'前盖状态') | |
| 31 | + rear_cap_status = models.BooleanField( | |
| 32 | + _(u'rear_cap_status'), default=False, help_text=u'后盖状态') | |
| 33 | + lens_hood_status = models.BooleanField( | |
| 34 | + _(u'lens_hood_status'), default=False, help_text=u'遮光罩状态') | |
| 35 | + tripod_ring_status = models.BooleanField( | |
| 36 | + _(u'tripod_ring_status'), default=False, help_text=u'脚架环状态') | |
| 37 | + appearance_performance_status = models.BooleanField( | |
| 38 | + _(u'appearance_performance_status'), default=False, help_text=u'外观性能状态') | |
| 39 | + tenancy_status = models.IntegerField( | |
| 40 | + _(u'tenancy_status'), choices=TENANCY_STATUS, default=0, help_text=u'租借状态') | |
| 30 | 41 |  | 
| 31 | 42 | class Meta: | 
| 32 | 43 | verbose_name = _(u'租赁镜头信息') | 
| @@ -70,53 +81,84 @@ class TenancyShotRequestInfo(BaseModelMixin): | ||
| 70 | 81 | (2, u'未通过'), | 
| 71 | 82 | ) | 
| 72 | 83 |  | 
| 73 | - request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True, null=True, help_text=u'申请唯一标识', db_index=True, unique=True) | |
| 74 | - admin_id = models.CharField(_(u'admin_id'), max_length=32, blank=True, null=True, help_text=u'经手人唯一标识', db_index=True) | |
| 84 | + request_id = ShortUUIDField(_(u'request_id'), max_length=32, blank=True, | |
| 85 | + null=True, help_text=u'申请唯一标识', db_index=True, unique=True) | |
| 86 | + admin_id = models.CharField(_(u'admin_id'), max_length=32, | |
| 87 | + blank=True, null=True, help_text=u'经手人唯一标识', db_index=True) | |
| 75 | 88 |  | 
| 76 | - request_number = models.CharField(_(u'request_number'), max_length=32, blank=True, null=True, help_text=u'线下借单编号', db_index=True) | |
| 89 | + request_number = models.CharField( | |
| 90 | + _(u'request_number'), max_length=32, blank=True, null=True, help_text=u'线下借单编号', db_index=True) | |
| 77 | 91 |  | 
| 78 | - shot_id = models.CharField(_(u'shot_id'), max_length=32, blank=True, null=True, help_text=u'镜头唯一标识', db_index=True) | |
| 79 | - model_id = models.CharField(_(u'model_id'), max_length=32, blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True) | |
| 92 | + shot_id = models.CharField(_(u'shot_id'), max_length=32, | |
| 93 | + blank=True, null=True, help_text=u'镜头唯一标识', db_index=True) | |
| 94 | + model_id = models.CharField(_(u'model_id'), max_length=32, | |
| 95 | + blank=True, null=True, help_text=u'镜头型号唯一标识', db_index=True) | |
| 80 | 96 |  | 
| 81 | - user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) | |
| 97 | + user_id = models.CharField(_(u'user_id'), max_length=32, | |
| 98 | + blank=True, null=True, help_text=u'用户唯一标识', db_index=True) | |
| 82 | 99 |  | 
| 83 | 100 | # 镜头配件信息 | 
| 84 | - front_cap_status = models.BooleanField(_(u'front_cap_status'), default=False, help_text=u'前盖状态') | |
| 85 | - rear_cap_status = models.BooleanField(_(u'rear_cap_status'), default=False, help_text=u'后盖状态') | |
| 86 | - lens_hood_status = models.BooleanField(_(u'lens_hood_status'), default=False, help_text=u'遮光罩状态') | |
| 87 | - tripod_ring_status = models.BooleanField(_(u'tripod_ring_status'), default=False, help_text=u'脚架环状态') | |
| 88 | - appearance_performance_status = models.BooleanField(_(u'appearance_performance_status'), default=False, help_text=u'外观性能状态') | |
| 101 | + front_cap_status = models.BooleanField( | |
| 102 | + _(u'front_cap_status'), default=False, help_text=u'前盖状态') | |
| 103 | + rear_cap_status = models.BooleanField( | |
| 104 | + _(u'rear_cap_status'), default=False, help_text=u'后盖状态') | |
| 105 | + lens_hood_status = models.BooleanField( | |
| 106 | + _(u'lens_hood_status'), default=False, help_text=u'遮光罩状态') | |
| 107 | + tripod_ring_status = models.BooleanField( | |
| 108 | + _(u'tripod_ring_status'), default=False, help_text=u'脚架环状态') | |
| 109 | + appearance_performance_status = models.BooleanField( | |
| 110 | + _(u'appearance_performance_status'), default=False, help_text=u'外观性能状态') | |
| 89 | 111 |  | 
| 90 | 112 | # 身份证信息 | 
| 91 | - identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号') | |
| 92 | - identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名') | |
| 113 | + identity_card_number = models.CharField( | |
| 114 | + _(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号') | |
| 115 | + identity_card_name = models.CharField( | |
| 116 | + _(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名') | |
| 93 | 117 |  | 
| 94 | 118 | # 邮寄信息 | 
| 95 | - name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'用户姓名') | |
| 96 | - phone = models.CharField(_(u'phone'), max_length=11, blank=True, null=True, help_text=u'用户电话') | |
| 97 | - location = models.CharField(_(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址') | |
| 98 | - postcode = models.CharField(_(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码') | |
| 119 | + name = models.CharField(_(u'name'), max_length=255, | |
| 120 | + blank=True, null=True, help_text=u'用户姓名') | |
| 121 | + phone = models.CharField(_(u'phone'), max_length=11, | |
| 122 | + blank=True, null=True, help_text=u'用户电话') | |
| 123 | + location = models.CharField( | |
| 124 | + _(u'location'), max_length=255, blank=True, null=True, help_text=u'用户地址') | |
| 125 | + postcode = models.CharField( | |
| 126 | + _(u'postcode'), max_length=255, blank=True, null=True, help_text=u'用户邮政编码') | |
| 99 | 127 |  | 
| 100 | 128 | # 租赁信息 | 
| 101 | - purpose = models.CharField(_(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途') | |
| 102 | - return_date = models.DateField(_(u'return_date'), blank=True, null=True, help_text=u'预定归还日期') | |
| 129 | + purpose = models.CharField( | |
| 130 | + _(u'purpose'), max_length=255, blank=True, null=True, help_text=u'用途') | |
| 131 | + return_date = models.DateField( | |
| 132 | + _(u'return_date'), blank=True, null=True, help_text=u'预定归还日期') | |
| 103 | 133 |  | 
| 104 | 134 | # 公司 =》 用户 | 
| 105 | - express_name = models.CharField(_(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司') | |
| 106 | - express_com = models.CharField(_(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码') | |
| 107 | - tracking_number = models.CharField(_(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号') | |
| 108 | -    tracking_info = JSONField(_(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息') | |
| 109 | - tracking_signed = models.BooleanField(_(u'tracking_signed'), default=False, help_text=u'快递是否已签收') | |
| 110 | - tracking_signed_images = JSONField(_(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表') | |
| 135 | + express_name = models.CharField( | |
| 136 | + _(u'express_name'), max_length=255, blank=True, null=True, help_text=u'快递公司') | |
| 137 | + express_com = models.CharField( | |
| 138 | + _(u'express_com'), max_length=255, blank=True, null=True, help_text=u'快递编码') | |
| 139 | + tracking_number = models.CharField( | |
| 140 | + _(u'tracking_number'), max_length=255, blank=True, null=True, help_text=u'快递单号') | |
| 141 | + tracking_info = JSONField( | |
| 142 | +        _(u'tracking_info'), blank=True, null=True, default={}, help_text=u'快递信息') | |
| 143 | + tracking_signed = models.BooleanField( | |
| 144 | + _(u'tracking_signed'), default=False, help_text=u'快递是否已签收') | |
| 145 | + tracking_signed_images = JSONField( | |
| 146 | + _(u'tracking_signed_images'), blank=True, null=True, default=[], help_text=u'快递签收图片列表') | |
| 111 | 147 |  | 
| 112 | 148 | # 用户 =》 公司 | 
| 113 | - back_express_name = models.CharField(_(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司') | |
| 114 | - back_express_com = models.CharField(_(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码') | |
| 115 | - back_tracking_number = models.CharField(_(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号') | |
| 116 | -    back_tracking_info = JSONField(_(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息') | |
| 117 | - back_tracking_signed = models.BooleanField(_(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收') | |
| 118 | - | |
| 119 | - audit_status = models.IntegerField(_(u'audit_status'), choices=AUDIT_STATUS, default=0, help_text=u'审批状态', db_index=True) | |
| 149 | + back_express_name = models.CharField( | |
| 150 | + _(u'back_express_name'), max_length=255, blank=True, null=True, help_text=u'寄回快递公司') | |
| 151 | + back_express_com = models.CharField( | |
| 152 | + _(u'back_express_com'), max_length=255, blank=True, null=True, help_text=u'寄回快递编码') | |
| 153 | + back_tracking_number = models.CharField( | |
| 154 | + _(u'back_tracking_number'), max_length=255, blank=True, null=True, help_text=u'寄回快递单号') | |
| 155 | + back_tracking_info = JSONField( | |
| 156 | +        _(u'back_tracking_info'), blank=True, null=True, default={}, help_text=u'寄回快递信息') | |
| 157 | + back_tracking_signed = models.BooleanField( | |
| 158 | + _(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收') | |
| 159 | + | |
| 160 | + audit_status = models.IntegerField( | |
| 161 | + _(u'audit_status'), choices=AUDIT_STATUS, default=0, help_text=u'审批状态', db_index=True) | |
| 120 | 162 | # REQUEST_STATUS = ( | 
| 121 | 163 | # (0, u'寄出'), | 
| 122 | 164 | # (1, u'寄出已签收'), | 
| @@ -124,10 +166,13 @@ class TenancyShotRequestInfo(BaseModelMixin): | ||
| 124 | 166 | # (3, u'寄回已签收并检查无损坏'), | 
| 125 | 167 | # ) | 
| 126 | 168 | # request_status = models.IntegerField(_(u'request_status'), choices=REQUEST_STATUS, default=0, help_text=u'租借申请状态') | 
| 127 | - request_status = models.CharField(_(u'request_status'), max_length=16, default='', help_text=u'租借申请状态') | |
| 128 | -    request_status_at = JSONField(_(u'request_status_at'), blank=True, null=True, default={}, help_text=u'租借申请状态变更时间') | |
| 169 | + request_status = models.CharField( | |
| 170 | + _(u'request_status'), max_length=16, default='', help_text=u'租借申请状态') | |
| 171 | + request_status_at = JSONField( | |
| 172 | +        _(u'request_status_at'), blank=True, null=True, default={}, help_text=u'租借申请状态变更时间') | |
| 129 | 173 |  | 
| 130 | - remark = models.CharField(_(u'remark'), max_length=256, default='', help_text=u'备注') | |
| 174 | + remark = models.CharField( | |
| 175 | + _(u'remark'), max_length=256, default='', help_text=u'备注') | |
| 131 | 176 |  | 
| 132 | 177 | class Meta: | 
| 133 | 178 | verbose_name = _(u'租赁镜头申请信息') | 
| @@ -185,7 +230,7 @@ class TenancyShotRequestInfo(BaseModelMixin): | ||
| 185 | 230 | 'back_tracking_signed': self.back_tracking_signed, | 
| 186 | 231 | 'audit_status': self.audit_status, | 
| 187 | 232 | 'request_status': self.request_status, | 
| 188 | -            'request_status_at': {k: tc.local_date_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%dT%H:%M:%S.%fZ')) for k, v in self.request_status_at.items()}, | |
| 233 | +            'request_status_at': {k: tc.local_date_string(utc_dt=tc.string_to_utc_datetime(v, format='%Y-%m-%d %H:%M:%S')) for k, v in self.request_status_at.items()}, | |
| 189 | 234 | 'created_at': tc.local_date_string(utc_dt=self.created_at), | 
| 190 | 235 | 'remark': self.remark, | 
| 191 | 236 | } | 
| @@ -198,7 +243,8 @@ class TenancyShotRequestInfo(BaseModelMixin): | ||
| 198 | 243 | admin = None | 
| 199 | 244 |  | 
| 200 | 245 | try: | 
| 201 | - shot = TenancyShotInfo.objects.get(shot_id=self.shot_id, status=True) | |
| 246 | + shot = TenancyShotInfo.objects.get( | |
| 247 | + shot_id=self.shot_id, status=True) | |
| 202 | 248 | except TenancyShotInfo.DoesNotExist: | 
| 203 | 249 | shot = None | 
| 204 | 250 |  |