| @@ -3,7 +3,7 @@ | ||
| 3 | 3 | from django.contrib import admin | 
| 4 | 4 | from django_admin import ChangeOnlyModelAdmin, ReadOnlyModelAdmin | 
| 5 | 5 |  | 
| 6 | -from account.models import UserInfo, UserIntegralIncomeExpensesInfo, LensmanInfo | |
| 6 | +from account.models import LensmanInfo, UserInfo, UserIntegralIncomeExpensesInfo | |
| 7 | 7 | from mch.models import ConsumeInfoSubmitLogInfo | 
| 8 | 8 |  | 
| 9 | 9 |  | 
| @@ -24,6 +24,7 @@ class LensmanInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin): | ||
| 24 | 24 |      list_filter = ('lensman_status', 'status') | 
| 25 | 25 |      search_fields = ('user_id', 'name', 'phone') | 
| 26 | 26 |  | 
| 27 | + | |
| 27 | 28 | class UserIntegralIncomeExpensesInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin): | 
| 28 | 29 |      list_display = ('user_id', 'brand_id', 'brand_name', 'model_id', 'model_name', 'code', 'integral_from', 'integral', 'final_integral', 'remark', 'updated_at', 'created_at') | 
| 29 | 30 |      list_filter = ('integral_from', 'status') | 
| @@ -1,12 +1,13 @@ | ||
| 1 | 1 | # -*- coding: utf-8 -*- | 
| 2 | 2 |  | 
| 3 | +import datetime | |
| 4 | + | |
| 3 | 5 | from django.conf import settings | 
| 4 | 6 | from django.db import models | 
| 5 | 7 | from django.utils.translation import ugettext_lazy as _ | 
| 6 | 8 | from django_models_ext import BaseModelMixin, SexModelMixin | 
| 7 | 9 | from shortuuidfield import ShortUUIDField | 
| 8 | 10 | from TimeConvert import TimeConvert as tc | 
| 9 | -import datetime | |
| 10 | 11 |  | 
| 11 | 12 | from kodo.basemodels import LensmanTypeBoolMixin | 
| 12 | 13 | from mch.models import ConsumeInfoSubmitLogInfo, MaintenancemanInfo, SaleclerkInfo | 
| @@ -271,7 +272,7 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): | ||
| 271 | 272 | 'identity_card_name': self.identity_card_name, | 
| 272 | 273 |  | 
| 273 | 274 | 'tenancy_shot_permission': self.tenancy_shot_permission, | 
| 274 | - #摄影师 | |
| 275 | + # 摄影师 | |
| 275 | 276 | 'is_lensman': bool(self.lensmaninfo), | 
| 276 | 277 | 'lensman_info': self.lensmaninfo, | 
| 277 | 278 | } | 
| @@ -376,7 +377,6 @@ class LensmanInfo(BaseModelMixin): | ||
| 376 | 377 | (DISABLED, u'已禁用'), | 
| 377 | 378 | ) | 
| 378 | 379 |  | 
| 379 | - | |
| 380 | 380 | lensman_id = ShortUUIDField(_(u'lensman_id'), max_length=32, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True, unique=True) | 
| 381 | 381 |  | 
| 382 | 382 | user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) | 
| @@ -408,7 +408,7 @@ class LensmanInfo(BaseModelMixin): | ||
| 408 | 408 |  | 
| 409 | 409 | def __unicode__(self): | 
| 410 | 410 | return '%d' % self.pk | 
| 411 | - | |
| 411 | + | |
| 412 | 412 | @property | 
| 413 | 413 | def is_expired(self): | 
| 414 | 414 | now_time = datetime.datetime.now() | 
| @@ -448,6 +448,7 @@ class LensmanInfo(BaseModelMixin): | ||
| 448 | 448 | 'created_at': tc.local_string(utc_dt=self.created_at), | 
| 449 | 449 | } | 
| 450 | 450 |  | 
| 451 | + | |
| 451 | 452 | class UserIntegralIncomeExpensesInfo(BaseModelMixin): | 
| 452 | 453 | PRODUCT = 0 | 
| 453 | 454 | SHARE = 1 | 
| @@ -500,7 +501,7 @@ class UserIntegralIncomeExpensesInfo(BaseModelMixin): | ||
| 500 | 501 | 'expired_at': self.expired_at if self.expired_at else '', | 
| 501 | 502 | 'created_at': tc.local_string(utc_dt=self.created_at), | 
| 502 | 503 | } | 
| 503 | - | |
| 504 | + | |
| 504 | 505 | @property | 
| 505 | 506 | def lensman_userdata(self): | 
| 506 | 507 | act = MemberActivityInfo.objects.get(activity_id=self.activity_id) | 
| @@ -513,7 +514,7 @@ class UserIntegralIncomeExpensesInfo(BaseModelMixin): | ||
| 513 | 514 | 'expired_at': self.expired_at if self.expired_at else '', | 
| 514 | 515 | 'created_at': tc.local_string(utc_dt=self.created_at), | 
| 515 | 516 | } | 
| 516 | - | |
| 517 | + | |
| 517 | 518 |  | 
| 518 | 519 | class LensmanIntegralIncomeExpensesInfo(BaseModelMixin): | 
| 519 | 520 | user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) | 
| @@ -549,14 +550,14 @@ class LensmanIntegralIncomeExpensesInfo(BaseModelMixin): | ||
| 549 | 550 | 'expired_at': self.expired_at if self.expired_at else '', | 
| 550 | 551 | 'created_at': tc.local_string(utc_dt=self.created_at), | 
| 551 | 552 | } | 
| 552 | - | |
| 553 | + | |
| 553 | 554 | @property | 
| 554 | 555 | def userdata(self): | 
| 555 | 556 | if self.activity_id: | 
| 556 | 557 | act = MemberActivityInfo.objects.get(activity_id=self.activity_id) | 
| 557 | 558 | else: | 
| 558 | 559 | act = None | 
| 559 | - | |
| 560 | + | |
| 560 | 561 |          return { | 
| 561 | 562 | 'integral': self.integral, | 
| 562 | 563 | 'remark': self.remark, | 
| @@ -564,4 +565,4 @@ class LensmanIntegralIncomeExpensesInfo(BaseModelMixin): | ||
| 564 | 565 | 'activity_id': self.activity_id, | 
| 565 | 566 | 'expired_at': self.expired_at if self.expired_at else '', | 
| 566 | 567 | 'created_at': tc.local_string(utc_dt=self.created_at), | 
| 567 | - } | |
| 568 | + } | 
| @@ -1027,7 +1027,6 @@ def member_activity_contribute_welfare_unlock(request, administrator): | ||
| 1027 | 1027 | except MemberActivityInfo.DoesNotExist: | 
| 1028 | 1028 | return (MemberActivityStatusCode.ACTIVITY_NOT_FOUND) | 
| 1029 | 1029 |  | 
| 1030 | - | |
| 1031 | 1030 |      data = { | 
| 1032 | 1031 |          "thing1": { | 
| 1033 | 1032 | "value": act.title[:20], | 
| @@ -1045,7 +1044,7 @@ def member_activity_contribute_welfare_unlock(request, administrator): | ||
| 1045 | 1044 |  | 
| 1046 | 1045 |      res = sendwxasubscribemessage(openid=user.openid_miniapp, template_id=settings.TEMPLATE_ID_UNLOCKING_WELFARE, data=data, miniprogram_state=None, lang=None, page='/pages/member/activity/activity?unlocking_id={}'.format(unlocking_info.unlocking_id)) | 
| 1047 | 1046 |      # sendtemplatemessage(openid=user.openid, template_id=settings.TEMPLATE_ID_UNLOCKING_WELFARE, data=data, miniappid=appid, minipagepath='/pages/member/activity/activity?unlocking_id={}'.format(unlocking_info.unlocking_id)) | 
| 1048 | - | |
| 1047 | + | |
| 1049 | 1048 | unlocking_info.send_template_message_res = json.dumps(res) | 
| 1050 | 1049 | unlocking_info.save() | 
| 1051 | 1050 |  | 
| @@ -2,16 +2,15 @@ | ||
| 2 | 2 |  | 
| 3 | 3 | from __future__ import division | 
| 4 | 4 |  | 
| 5 | -from paginator import pagination | |
| 6 | - | |
| 7 | 5 | from django.db import transaction | 
| 8 | 6 | from django.db.models import Q | 
| 9 | 7 | from django_logit import logit | 
| 10 | 8 | from django_response import response | 
| 9 | +from paginator import pagination | |
| 11 | 10 | from TimeConvert import TimeConvert as tc | 
| 12 | 11 |  | 
| 13 | -from kodo.decorators import check_admin | |
| 14 | 12 | from account.models import UserInfo | 
| 13 | +from kodo.decorators import check_admin | |
| 15 | 14 | from mch.models import AdministratorInfo, ConsumeShotUnbindingInfo | 
| 16 | 15 |  | 
| 17 | 16 |  | 
| @@ -23,11 +23,11 @@ def get_signed_contribtion_contract_file_api(request, administrator): | ||
| 23 | 23 | BusinessType = 'FLOW' | 
| 24 | 24 | BusinessIds = [contract.flow_id] | 
| 25 | 25 | FileType = 'PDF' | 
| 26 | - UrlTtl = '86400' # 过期时间 | |
| 26 | + UrlTtl = '86400' # 过期时间 | |
| 27 | 27 |  | 
| 28 | 28 | # TODO: 获取合同文件 https://qian.tencent.com/developers/companyApis/templatesAndFiles/DescribeFileUrls | 
| 29 | 29 | FileUrls = [] | 
| 30 | 30 |  | 
| 31 | 31 |      return response(200, data={ | 
| 32 | 32 | 'file_url': FileUrls[0].Url | 
| 33 | - }) | |
| 33 | + }) | 
| @@ -1,12 +1,14 @@ | ||
| 1 | 1 | # -*- coding: utf-8 -*- | 
| 2 | 2 |  | 
| 3 | 3 | from django.conf.urls import include, url | 
| 4 | -from api.lensman import contract_admin_views, contract_mp_views, activity_admin_views | |
| 4 | + | |
| 5 | +from api.lensman import activity_admin_views, contract_admin_views, contract_mp_views | |
| 6 | + | |
| 5 | 7 |  | 
| 6 | 8 | urlpatterns = [ | 
| 7 | 9 | url(r'^mp/lensman/contribution/contract/get$', contract_mp_views.get_contribtion_contract_api, name='get_contribtion_contract_api'), | 
| 8 | 10 | url(r'^mp/lensman/contribution/contract/status/get$', contract_mp_views.get_contribtion_contract_status_api, name='get_contribtion_contract_status_api'), | 
| 9 | - | |
| 11 | + | |
| 10 | 12 | url(r'^mp/ess/callback$', contract_mp_views.ess_callback, name='ess_callback'), | 
| 11 | 13 | ] | 
| 12 | 14 |  | 
| @@ -5,9 +5,9 @@ from __future__ import division | ||
| 5 | 5 | from datetime import datetime | 
| 6 | 6 |  | 
| 7 | 7 | from django.conf import settings | 
| 8 | +from django.db.models import Q | |
| 8 | 9 | from django_logit import logit | 
| 9 | 10 | from django_response import response | 
| 10 | -from django.db.models import Q | |
| 11 | 11 | from paginator import pagination | 
| 12 | 12 | from TimeConvert import TimeConvert as tc | 
| 13 | 13 |  | 
| @@ -29,8 +29,7 @@ def lensman_list(request, administrator): | ||
| 29 | 29 |      logs = LensmanInfo.objects.filter(status=True).order_by('-pk') | 
| 30 | 30 |  | 
| 31 | 31 | if query: | 
| 32 | - logs = logs.filter(Q(name__icontains=query) | | |
| 33 | - Q(phone__icontains=query)) | |
| 32 | + logs = logs.filter(Q(name__icontains=query) | Q(phone__icontains=query)) | |
| 34 | 33 |  | 
| 35 | 34 | if lensman_status: | 
| 36 | 35 | logs = logs.filter(lensman_status=lensman_status) | 
| @@ -8,6 +8,7 @@ from django_response import response | ||
| 8 | 8 |  | 
| 9 | 9 | from account.models import LensmanInfo, LensmanIntegralIncomeExpensesInfo | 
| 10 | 10 |  | 
| 11 | + | |
| 11 | 12 | @logit | 
| 12 | 13 | def lensman_register(request): | 
| 13 | 14 |      user_id = request.POST.get('user_id', '') | 
| @@ -27,29 +28,28 @@ def lensman_register(request): | ||
| 27 | 28 |  | 
| 28 | 29 | @logit | 
| 29 | 30 | def lensman_detail(request): | 
| 30 | -  user_id = request.POST.get('user_id', '') | |
| 31 | +    user_id = request.POST.get('user_id', '') | |
| 31 | 32 |  | 
| 32 | - try: | |
| 33 | - lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 34 | - except LensmanInfo.DoesNotExist: | |
| 35 | - return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 33 | + try: | |
| 34 | + lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 35 | + except LensmanInfo.DoesNotExist: | |
| 36 | + return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 36 | 37 |  | 
| 37 | - return response(200, 'Get Lensman Detail Success', u'获取摄影师信息成功', data=lensman.data) | |
| 38 | + return response(200, 'Get Lensman Detail Success', u'获取摄影师信息成功', data=lensman.data) | |
| 38 | 39 |  | 
| 39 | 40 |  | 
| 40 | 41 | @logit | 
| 41 | 42 | def lensman_integral_list(request): | 
| 42 | -  user_id = request.POST.get('user_id', '') | |
| 43 | -  brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID | |
| 43 | +    user_id = request.POST.get('user_id', '') | |
| 44 | +    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID | |
| 45 | + | |
| 46 | + try: | |
| 47 | + lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 48 | + except LensmanInfo.DoesNotExist: | |
| 49 | + return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 44 | 50 |  | 
| 45 | - try: | |
| 46 | - lensman = LensmanInfo.objects.get(user_id=user_id, status=True) | |
| 47 | - except LensmanInfo.DoesNotExist: | |
| 48 | - return response(200, 'Lensman Not Found', u'摄影师不存在') | |
| 49 | - | |
| 50 | -  integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(user_id=user_id, status=True).order_by('-pk') | |
| 51 | +    integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(user_id=user_id, status=True).order_by('-pk') | |
| 51 | 52 |  | 
| 52 | - integrals = [integral.userdata for integral in integrals] | |
| 53 | - | |
| 53 | + integrals = [integral.userdata for integral in integrals] | |
| 54 | 54 |  | 
| 55 | - return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals) | |
| 55 | + return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals) | 
| @@ -17,9 +17,9 @@ from TimeConvert import TimeConvert as tc | ||
| 17 | 17 | from account.models import UserInfo | 
| 18 | 18 | from coupon.models import CouponInfo, UserCouponInfo | 
| 19 | 19 | from integral.models import SaleclerkSubmitLogInfo | 
| 20 | -from logs.models import AdministratorLoginLogInfo, MchInfoEncryptLogInfo, ComplementCodeLogInfo | |
| 21 | -from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, | |
| 22 | - LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, ConsumeShotUnbindingInfo) | |
| 20 | +from logs.models import AdministratorLoginLogInfo, ComplementCodeLogInfo, MchInfoEncryptLogInfo | |
| 21 | +from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, ConsumeShotUnbindingInfo, | |
| 22 | + DistributorInfo, LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo) | |
| 23 | 23 | from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo | 
| 24 | 24 | from utils.error.errno_utils import (AdministratorStatusCode, OperatorStatusCode, ProductBrandStatusCode, | 
| 25 | 25 | ProductModelStatusCode, UserStatusCode) | 
| @@ -28,16 +28,17 @@ def distributor_list(request): | ||
| 28 | 28 | 'left': left, | 
| 29 | 29 | }) | 
| 30 | 30 |  | 
| 31 | + | |
| 31 | 32 | @logit | 
| 32 | 33 | def salesman_detail(request): | 
| 33 | -  user_id = request.POST.get('user_id', '') | |
| 34 | +    user_id = request.POST.get('user_id', '') | |
| 34 | 35 |  | 
| 35 | - try: | |
| 36 | - salesman = SaleclerkInfo.objects.get(user_id=user_id, status=True) | |
| 37 | - except SaleclerkInfo.DoesNotExist: | |
| 38 | - return response(SaleclerkStatusCode.CLERK_NOT_FOUND) | |
| 36 | + try: | |
| 37 | + salesman = SaleclerkInfo.objects.get(user_id=user_id, status=True) | |
| 38 | + except SaleclerkInfo.DoesNotExist: | |
| 39 | + return response(SaleclerkStatusCode.CLERK_NOT_FOUND) | |
| 39 | 40 |  | 
| 40 | - return response(200, 'Get Salesman Detail Success', u'获取销售员信息成功', data=salesman.data) | |
| 41 | + return response(200, 'Get Salesman Detail Success', u'获取销售员信息成功', data=salesman.data) | |
| 41 | 42 |  | 
| 42 | 43 |  | 
| 43 | 44 | @logit | 
| @@ -72,4 +73,4 @@ def salesman_register(request): | ||
| 72 | 73 |  | 
| 73 | 74 | clerk, _ = SaleclerkInfo.objects.update_or_create(brand_id=brand_id, unionid=unionid, defaults=fields) | 
| 74 | 75 |  | 
| 75 | -    return response(200, 'Submit Success', u'提交成功', {}) | |
| 76 | +    return response(200, 'Submit Success', u'提交成功', {}) | 
| @@ -79,7 +79,6 @@ def shot_create(request, administrator): | ||
| 79 | 79 | if TenancyShotInfo.objects.filter(model_id=model_id, sn=sn).exists(): | 
| 80 | 80 | return response(TenancyStatusCode.TENANCY_SHOT_ALREADY_EXIST) | 
| 81 | 81 |  | 
| 82 | - | |
| 83 | 82 | shot = TenancyShotInfo.objects.create( | 
| 84 | 83 | model_id=model_id, | 
| 85 | 84 | model_name=model_name, | 
| @@ -256,6 +255,7 @@ def shot_request_update(request, administrator): | ||
| 256 | 255 | 'req': req.admindata, | 
| 257 | 256 | }) | 
| 258 | 257 |  | 
| 258 | + | |
| 259 | 259 | @logit | 
| 260 | 260 | @check_admin | 
| 261 | 261 | def shot_request_delete(request, administrator): | 
| @@ -3,10 +3,11 @@ | ||
| 3 | 3 | from django.conf.urls import include, url | 
| 4 | 4 | from django_file_upload import views as file_views | 
| 5 | 5 |  | 
| 6 | -from api import (admin_views, clerk_views, complement_views, distributor_views, encrypt_views, express_views, log_views, | |
| 7 | - maintenance_point_views, maintenance_views, mch_views, member_views, model_views, operator_views, | |
| 8 | - refresh_views, sr_views, staff_views, tenancy_admin_views, tenancy_views, tencentcloud_views, wx_views, | |
| 9 | - wxa_views, consumer_admin_view, salesman_mp_views, lensman_mp_views, lensman_admin_views) | |
| 6 | +from api import (admin_views, clerk_views, complement_views, consumer_admin_view, distributor_views, encrypt_views, | |
| 7 | + express_views, lensman_admin_views, lensman_mp_views, log_views, maintenance_point_views, | |
| 8 | + maintenance_views, mch_views, member_views, model_views, operator_views, refresh_views, | |
| 9 | + salesman_mp_views, sr_views, staff_views, tenancy_admin_views, tenancy_views, tencentcloud_views, | |
| 10 | + wx_views, wxa_views) | |
| 10 | 11 | from miniapp import qy_views | 
| 11 | 12 | from miniapp import views as mini_views | 
| 12 | 13 | from page import oauth_views, sale_views, screen_views | 
| @@ -277,7 +278,7 @@ urlpatterns += [ | ||
| 277 | 278 | url(r'^admin/complement/code/contacted$', admin_views.complement_code_contacted, name='complement_code_contacted'), | 
| 278 | 279 | ] | 
| 279 | 280 |  | 
| 280 | -#销售员 | |
| 281 | +# 销售员 | |
| 281 | 282 | urlpatterns += [ | 
| 282 | 283 | url(r'^mp/distributor/list$', salesman_mp_views.distributor_list, name='mp_distributor_list'), | 
| 283 | 284 | url(r'^mp/salesman/register$', salesman_mp_views.salesman_register, name='mp_salesman_register'), | 
| @@ -371,14 +372,14 @@ urlpatterns += [ | ||
| 371 | 372 |      url(r'', include(('member.urls', 'member'), namespace='member')), | 
| 372 | 373 | ] | 
| 373 | 374 |  | 
| 374 | -#摄影师模块 | |
| 375 | +# 摄影师模块 | |
| 375 | 376 | urlpatterns += [ | 
| 376 | - #小程序 | |
| 377 | + # 小程序 | |
| 377 | 378 | url(r'^mp/lensman/detail$', lensman_mp_views.lensman_detail, name='mp_lensman_detail'), | 
| 378 | 379 | url(r'^mp/lensman/register$', lensman_mp_views.lensman_register, name='mp_lensman_register'), | 
| 379 | 380 | url(r'^mp/lensman/integral/list$', lensman_mp_views.lensman_integral_list, name='mp_lensman_integral_list'), | 
| 380 | 381 |  | 
| 381 | - #管理后台 | |
| 382 | + # 管理后台 | |
| 382 | 383 | url(r'^admin/lensman/list$', lensman_admin_views.lensman_list, name='admin_lensman_list'), | 
| 383 | 384 | url(r'^admin/lensman/audit$', lensman_admin_views.lensman_audit, name='admin_lensman_audit'), | 
| 384 | 385 | url(r'^admin/lensman/update$', lensman_admin_views.lensman_update, name='admin_lensman_update'), | 
| @@ -387,4 +388,3 @@ urlpatterns += [ | ||
| 387 | 388 |  | 
| 388 | 389 |      url(r'', include(('api.lensman.lensman_urls', 'lensman'), namespace='lensman')), | 
| 389 | 390 | ] | 
| 390 | - | 
| @@ -69,7 +69,7 @@ class LensmanContributionContractInfo(BaseModelMixin): | ||
| 69 | 69 |  | 
| 70 | 70 | @property | 
| 71 | 71 | def contract_status(self): | 
| 72 | - if(self.tencent_approve_status == 3 and self.tencent_contract_status == 4): | |
| 72 | + if self.tencent_approve_status == 3 and self.tencent_contract_status == 4: | |
| 73 | 73 | return 1 | 
| 74 | 74 | else: | 
| 75 | 75 | return 0 | 
| @@ -1,3 +1,4 @@ | ||
| 1 | 1 | from django.test import TestCase | 
| 2 | 2 |  | 
| 3 | + | |
| 3 | 4 | # Create your tests here. | 
| @@ -1,3 +1,4 @@ | ||
| 1 | 1 | from django.shortcuts import render | 
| 2 | 2 |  | 
| 3 | + | |
| 3 | 4 | # Create your views here. | 
| @@ -1,3 +1,4 @@ | ||
| 1 | 1 | from django.contrib import admin | 
| 2 | 2 |  | 
| 3 | + | |
| 3 | 4 | # Register your models here. | 
| @@ -5,6 +5,7 @@ from django.utils.translation import ugettext_lazy as _ | ||
| 5 | 5 | from django_models_ext import BaseModelMixin | 
| 6 | 6 | from TimeConvert import TimeConvert as tc | 
| 7 | 7 |  | 
| 8 | + | |
| 8 | 9 | class LensmanContributionActivityIncomeExpensesInfo(BaseModelMixin): | 
| 9 | 10 | user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) | 
| 10 | 11 | lensman_id = models.CharField(_(u'lensman_id'), max_length=32, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True) | 
| @@ -20,7 +21,7 @@ class LensmanContributionActivityIncomeExpensesInfo(BaseModelMixin): | ||
| 20 | 21 |  | 
| 21 | 22 | def __unicode__(self): | 
| 22 | 23 | return '%d' % self.pk | 
| 23 | - | |
| 24 | + | |
| 24 | 25 | @property | 
| 25 | 26 | def data(self): | 
| 26 | 27 |          return { | 
| @@ -31,7 +32,7 @@ class LensmanContributionActivityIncomeExpensesInfo(BaseModelMixin): | ||
| 31 | 32 | 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'), | 
| 32 | 33 | 'updated_at': tc.local_string(utc_dt=self.updated_at, format='%Y-%m-%d %H:%M:%S') | 
| 33 | 34 | } | 
| 34 | - | |
| 35 | + | |
| 35 | 36 | @property | 
| 36 | 37 | def admindata(self): | 
| 37 | - return self.data | |
| 38 | + return self.data | 
| @@ -1,3 +1,4 @@ | ||
| 1 | 1 | from django.test import TestCase | 
| 2 | 2 |  | 
| 3 | + | |
| 3 | 4 | # Create your tests here. | 
| @@ -1,3 +1,4 @@ | ||
| 1 | 1 | from django.shortcuts import render | 
| 2 | 2 |  | 
| 3 | + | |
| 3 | 4 | # Create your views here. | 
| @@ -10,8 +10,8 @@ from pysnippets.strsnippets import strip | ||
| 10 | 10 |  | 
| 11 | 11 | from integral.models import SaleclerkSubmitLogInfo | 
| 12 | 12 | from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, CameraModelInfo, ConsumeInfoSubmitLogInfo, | 
| 13 | - DistributorInfo, LatestAppInfo, LatestAppScreenInfo, MaintenancemanInfo, ModelCameraBodyInfo, | |
| 14 | - ModelInfo, OperatorInfo, SaleclerkInfo, ConsumeShotUnbindingInfo) | |
| 13 | + ConsumeShotUnbindingInfo, DistributorInfo, LatestAppInfo, LatestAppScreenInfo, | |
| 14 | + MaintenancemanInfo, ModelCameraBodyInfo, ModelInfo, OperatorInfo, SaleclerkInfo) | |
| 15 | 15 | from utils.redis.rshot import update_member_shot_data | 
| 16 | 16 |  | 
| 17 | 17 |  | 
| @@ -9,8 +9,8 @@ from jsonfield import JSONField | ||
| 9 | 9 | from shortuuidfield import ShortUUIDField | 
| 10 | 10 | from TimeConvert import TimeConvert as tc | 
| 11 | 11 |  | 
| 12 | -from kodo.basemodels import BrandInfoMixin | |
| 13 | 12 | from coupon.models import CouponInfo | 
| 13 | +from kodo.basemodels import BrandInfoMixin | |
| 14 | 14 |  | 
| 15 | 15 |  | 
| 16 | 16 | class AdministratorInfo(BaseModelMixin): | 
| @@ -9,8 +9,8 @@ from django_response import response | ||
| 9 | 9 | from paginator import pagination | 
| 10 | 10 | from TimeConvert import TimeConvert as tc | 
| 11 | 11 |  | 
| 12 | -from member.models import MemberActivityInfo, MemberActivitySignupInfo, MemberActivityContributionInfo | |
| 13 | 12 | from kodo.decorators import check_admin | 
| 13 | +from member.models import MemberActivityContributionInfo, MemberActivityInfo, MemberActivitySignupInfo | |
| 14 | 14 | from utils.error.errno_utils import MemberActivityStatusCode | 
| 15 | 15 |  | 
| 16 | 16 |  | 
| @@ -255,11 +255,10 @@ def activity_signup_list(request, administrator): | ||
| 255 | 255 |  | 
| 256 | 256 | if is_signin: | 
| 257 | 257 | logs = logs.filter(is_signin=is_signin) | 
| 258 | - | |
| 258 | + | |
| 259 | 259 | if audit_status: | 
| 260 | 260 | logs = logs.filter(audit_status=audit_status) | 
| 261 | 261 |  | 
| 262 | - | |
| 263 | 262 | count = logs.count() | 
| 264 | 263 | logs, left = pagination(logs, page, num) | 
| 265 | 264 | logs = [log.admindata for log in logs] | 
| @@ -7,8 +7,9 @@ from django_query import get_query_value | ||
| 7 | 7 | from django_response import response | 
| 8 | 8 | from paginator import pagination | 
| 9 | 9 |  | 
| 10 | -from account.models import UserInfo, LensmanInfo | |
| 11 | -from member.models import MemberActivityContributionInfo, MemberActivityInfo, MemberActivitySignupInfo, MemberActivityDataInfo | |
| 10 | +from account.models import LensmanInfo, UserInfo | |
| 11 | +from member.models import (MemberActivityContributionInfo, MemberActivityDataInfo, MemberActivityInfo, | |
| 12 | + MemberActivitySignupInfo) | |
| 12 | 13 | from utils.error.errno_utils import MemberActivityContributionStatusCode, MemberActivityStatusCode, UserStatusCode | 
| 13 | 14 |  | 
| 14 | 15 |  | 
| @@ -38,6 +39,7 @@ def activity_list(request): | ||
| 38 | 39 | 'activitys': activitys, | 
| 39 | 40 | }) | 
| 40 | 41 |  | 
| 42 | + | |
| 41 | 43 | @logit | 
| 42 | 44 | def activity_list_v2(request): | 
| 43 | 45 |      brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID | 
| @@ -51,6 +53,7 @@ def activity_list_v2(request): | ||
| 51 | 53 | 'activitys': activitys, | 
| 52 | 54 | }) | 
| 53 | 55 |  | 
| 56 | + | |
| 54 | 57 | @logit | 
| 55 | 58 | def activity_series_list(request): | 
| 56 | 59 |      brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID | 
| @@ -95,7 +98,7 @@ def activity_signup(request): | ||
| 95 | 98 | act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) | 
| 96 | 99 | except MemberActivityInfo.DoesNotExist: | 
| 97 | 100 | return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) | 
| 98 | - | |
| 101 | + | |
| 99 | 102 |      MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={ | 
| 100 | 103 | 'title': act.title, | 
| 101 | 104 | 'lensman_id': lensman_id, | 
| @@ -7,8 +7,8 @@ from django_admin import DeleteModelAdmin | ||
| 7 | 7 | from account.models import UserInfo | 
| 8 | 8 | from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo, | 
| 9 | 9 | MemberActivityContributionWelfareInfo, MemberActivityContributionWelfareUnlockingInfo, | 
| 10 | - MemberActivityGroupShareInfo, MemberActivityInfo, MemberActivitySigninInfo, | |
| 11 | - MemberActivitySignupInfo, RightInfo, ShotTypeInfo, MemberActivityDataInfo) | |
| 10 | + MemberActivityDataInfo, MemberActivityGroupShareInfo, MemberActivityInfo, | |
| 11 | + MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo, ShotTypeInfo) | |
| 12 | 12 | from pre.custom_message import sendwxasubscribemessage | 
| 13 | 13 | from utils.redis.rshot import update_member_shot_data | 
| 14 | 14 |  | 
| @@ -89,6 +89,7 @@ class MemberActivitySignupInfoAdmin(admin.ModelAdmin): | ||
| 89 | 89 | class MemberActivitySignupInfoAdmin(admin.ModelAdmin): | 
| 90 | 90 |      list_display = ('signup_id', 'user_id', 'activity_id', 'title', 'name', 'phone', 'status', 'created_at', 'updated_at') | 
| 91 | 91 |  | 
| 92 | + | |
| 92 | 93 | class MemberActivityDataInfoAdmin(admin.ModelAdmin): | 
| 93 | 94 |      list_display = ('data_id', 'user_id', 'activity_id', 'title', 'lensman_id', 'status', 'created_at', 'updated_at') | 
| 94 | 95 |  | 
| @@ -4,6 +4,7 @@ from django.conf.urls import url | ||
| 4 | 4 |  | 
| 5 | 5 | from member import activity_admin_views, lensman_activity_admin_views | 
| 6 | 6 |  | 
| 7 | + | |
| 7 | 8 | # activity | 
| 8 | 9 | urlpatterns = [ | 
| 9 | 10 | url(r'^member/activity/list$', activity_admin_views.activity_list, name='admin_member_activity_list'), # 获取会员活动列表 | 
| @@ -18,7 +19,7 @@ urlpatterns += [ | ||
| 18 | 19 | url(r'^member/activity/signup/audit$', lensman_activity_admin_views.activity_signup_audit, name='admin_member_activity_signup_audit'), | 
| 19 | 20 | ] | 
| 20 | 21 |  | 
| 21 | -#activity data | |
| 22 | +# activity data | |
| 22 | 23 | urlpatterns += [ | 
| 23 | 24 | url(r'^member/activity/data/list$', lensman_activity_admin_views.activity_data_list, name='admin_member_activity_data_list'), | 
| 24 | 25 | url(r'^member/activity/integral/add$', lensman_activity_admin_views.activity_integral_add, name='admin_member_activity_integral_add'), | 
| @@ -6,9 +6,9 @@ from django_logit import logit | ||
| 6 | 6 | from django_response import response | 
| 7 | 7 | from paginator import pagination | 
| 8 | 8 |  | 
| 9 | -from account.models import LensmanIntegralIncomeExpensesInfo, UserInfo, LensmanInfo | |
| 10 | -from member.models import MemberActivitySignupInfo, MemberActivityDataInfo | |
| 9 | +from account.models import LensmanInfo, LensmanIntegralIncomeExpensesInfo, UserInfo | |
| 11 | 10 | from kodo.decorators import check_admin | 
| 11 | +from member.models import MemberActivityDataInfo, MemberActivitySignupInfo | |
| 12 | 12 | from utils.error.errno_utils import UserStatusCode | 
| 13 | 13 |  | 
| 14 | 14 |  | 
| @@ -37,13 +37,14 @@ def activity_data_list(request, administrator): | ||
| 37 | 37 | count = logs.count() | 
| 38 | 38 | logs, left = pagination(logs, page, num) | 
| 39 | 39 | logs = [log.admindata for log in logs] | 
| 40 | - | |
| 40 | + | |
| 41 | 41 |      return response(200, 'Get Member Activity Data List Success', u'获取会员活动数据列表成功', data={ | 
| 42 | 42 | 'logs': logs, | 
| 43 | 43 | 'count': count, | 
| 44 | 44 | 'left': left, | 
| 45 | 45 | }) | 
| 46 | 46 |  | 
| 47 | + | |
| 47 | 48 | @check_admin | 
| 48 | 49 | def activity_integral_add(request, administrator): | 
| 49 | 50 |      activity_id = request.POST.get('activity_id', '') | 
| @@ -1,14 +1,16 @@ | ||
| 1 | 1 | # -*- coding: utf-8 -*- | 
| 2 | 2 |  | 
| 3 | 3 | from django.conf import settings | 
| 4 | -from django_logit import logit | |
| 5 | 4 | from django.db.models import Q | 
| 5 | +from django_logit import logit | |
| 6 | 6 | from django_response import response | 
| 7 | 7 |  | 
| 8 | 8 | from account.models import LensmanInfo | 
| 9 | -from member.models import MemberActivityInfo, MemberActivityDataInfo, MemberActivitySignupInfo, MemberActivityContributionInfo | |
| 9 | +from member.models import (MemberActivityContributionInfo, MemberActivityDataInfo, MemberActivityInfo, | |
| 10 | + MemberActivitySignupInfo) | |
| 10 | 11 | from utils.error.errno_utils import MemberActivityStatusCode | 
| 11 | 12 |  | 
| 13 | + | |
| 12 | 14 | @logit | 
| 13 | 15 | def activity_data_submit(request): | 
| 14 | 16 |      user_id = request.POST.get('user_id', '') | 
| @@ -20,7 +22,7 @@ def activity_data_submit(request): | ||
| 20 | 22 | act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) | 
| 21 | 23 | except MemberActivityInfo.DoesNotExist: | 
| 22 | 24 | return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) | 
| 23 | - | |
| 25 | + | |
| 24 | 26 | try: | 
| 25 | 27 | lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True) | 
| 26 | 28 | except LensmanInfo.DoesNotExist: | 
| @@ -82,10 +84,8 @@ def activity_message_read(request): | ||
| 82 | 84 |  | 
| 83 | 85 | if signup_id: | 
| 84 | 86 | MemberActivitySignupInfo.objects.filter(user_id=user_id, signup_id=signup_id).update(is_read=True) | 
| 85 | - | |
| 87 | + | |
| 86 | 88 | if contribution_id: | 
| 87 | 89 | MemberActivityContributionInfo.objects.filter(user_id=user_id, contribution_id=contribution_id).update(is_read=True) | 
| 88 | 90 |  | 
| 89 | 91 | return response(200, 'Activity Message Has Read Success', '活动消息已读') | 
| 90 | - | |
| 91 | - | 
| @@ -507,7 +507,7 @@ class MemberActivityInfo(BaseModelMixin, BrandInfoMixin): | ||
| 507 | 507 | def is_contributed(self, user_id): | 
| 508 | 508 | # 是否投稿 | 
| 509 | 509 | return MemberActivityContributionInfo.objects.filter(user_id=user_id, activity_id=self.activity_id, status=True).exists() | 
| 510 | - | |
| 510 | + | |
| 511 | 511 | def is_signup_passed(self, user_id): | 
| 512 | 512 | return MemberActivitySignupInfo.objects.filter(user_id=user_id, activity_id=self.activity_id, audit_status=MemberActivitySignupInfo.PASSED, status=True).exists() | 
| 513 | 513 |  | 
| @@ -780,7 +780,6 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): | ||
| 780 | 780 | @property | 
| 781 | 781 | def final_avatar(self): | 
| 782 | 782 | return self.avatar and self.avatar.replace(settings.QINIU_FILE_URL_BEFORE, settings.QINIU_FILE_URL_AFTER).replace(settings.QINIU_FILE_URL_BEFORE2, settings.QINIU_FILE_URL_AFTER) | 
| 783 | - | |
| 784 | 783 |  | 
| 785 | 784 | @property | 
| 786 | 785 | def data(self): | 
| @@ -810,7 +809,8 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin): | ||
| 810 | 809 | 'is_signin': self.is_signin, | 
| 811 | 810 | 'audit_status': self.audit_status, | 
| 812 | 811 | } | 
| 813 | - | |
| 812 | + | |
| 813 | + | |
| 814 | 814 | class MemberActivityDataInfo(BaseModelMixin, BrandInfoMixin): | 
| 815 | 815 | data_id = ShortUUIDField(_(u'data_id'), max_length=32, blank=True, null=True, help_text=u'活动数据唯一标识', db_index=True, unique=True) | 
| 816 | 816 |  | 
| @@ -953,7 +953,6 @@ class MemberActivityContributionInfo(BaseModelMixin, BrandInfoMixin): | ||
| 953 | 953 |  | 
| 954 | 954 | is_read = models.BooleanField(_(u'is_read'), default=False, help_text=u'审核消息是否已读') | 
| 955 | 955 |  | 
| 956 | - | |
| 957 | 956 | class Meta: | 
| 958 | 957 | verbose_name = _(u'会员活动投稿信息') | 
| 959 | 958 | verbose_name_plural = _(u'会员活动投稿信息') | 
| @@ -1101,7 +1100,6 @@ class MemberActivityContributionWelfareUnlockingInfo(BaseModelMixin, BrandInfoMi | ||
| 1101 | 1100 |  | 
| 1102 | 1101 | send_template_message_res = JSONField(_(u'send_template_message_res'), blank=True, null=True, help_text=u'send_template_message_res') | 
| 1103 | 1102 |  | 
| 1104 | - | |
| 1105 | 1103 | class Meta: | 
| 1106 | 1104 | verbose_name = _(u'会员活动投稿福利解锁信息') | 
| 1107 | 1105 | verbose_name_plural = _(u'会员活动投稿福利解锁信息') | 
| @@ -4,6 +4,7 @@ from django.conf.urls import url | ||
| 4 | 4 |  | 
| 5 | 5 | from member import activity_mp_views, lensman_activity_mp_views | 
| 6 | 6 |  | 
| 7 | + | |
| 7 | 8 | # activity | 
| 8 | 9 | urlpatterns = [ | 
| 9 | 10 | url(r'^member/activity/home$', activity_mp_views.activity_home, name='mp_member_activity_home'), # 获取会员活动首页 | 
| @@ -37,8 +38,8 @@ urlpatterns += [ | ||
| 37 | 38 | url(r'^member/activity/contribute/detail/lastest$', activity_mp_views.activity_contribute_detail_lastest, name='member_activity_contribute_detail_lastest'), | 
| 38 | 39 | ] | 
| 39 | 40 |  | 
| 40 | -#activity message | |
| 41 | +# activity message | |
| 41 | 42 | urlpatterns += [ | 
| 42 | 43 | url(r'^member/activity/message$', lensman_activity_mp_views.activity_message, name='mp_member_activity_message'), | 
| 43 | 44 | url(r'^member/activity/message/read$', lensman_activity_mp_views.activity_message_read, name='mp_member_activity_message_read'), | 
| 44 | -] | |
| 45 | +] | 
| @@ -5,5 +5,6 @@ | ||
| 5 | 5 | # Ignoring error codes | 
| 6 | 6 | # -- E128 continuation line under-indented for visual indent | 
| 7 | 7 | # -- E501 line too long | 
| 8 | +# -- E731 do not assign a lambda expression, use a def | |
| 8 | 9 |  | 
| 9 | -pycodestyle --exclude=migrations --ignore=E128,E501 . | |
| 10 | +pycodestyle --exclude=migrations --ignore=E128,E501,E731 . |