| @@ -887,6 +887,7 @@ def member_activity_create(request, administrator): | ||
| 887 | 887 |      activity_state = int(request.POST.get('activity_state', 0)) | 
| 888 | 888 |      poster_kv_img_url = request.POST.get('poster_kv_img_url', '') | 
| 889 | 889 |      poster_content = request.POST.get('poster_content', '') | 
| 890 | +    contribution_content_placeholder = request.POST.get('contribution_content_placeholder', '') | |
| 890 | 891 |  | 
| 891 | 892 | act = MemberActivityInfo.objects.create( | 
| 892 | 893 | brand_id=administrator.brand_id, | 
| @@ -914,7 +915,7 @@ def member_activity_create(request, administrator): | ||
| 914 | 915 | activity_state=activity_state, | 
| 915 | 916 | poster_kv_img_url=poster_kv_img_url, | 
| 916 | 917 | poster_content=poster_content, | 
| 917 | - contribution_content_placeholder=contribution_content_placeholder | |
| 918 | + contribution_content_placeholder=contribution_content_placeholder, | |
| 918 | 919 | ) | 
| 919 | 920 |  | 
| 920 | 921 |      return response(200, 'MemberActivityInfo Create Success', u'会员活动创建成功', data={ | 
| @@ -964,8 +965,8 @@ def member_activity_register_list(request, administrator): | ||
| 964 | 965 | }) | 
| 965 | 966 |  | 
| 966 | 967 |  | 
| 967 | -@check_admin | |
| 968 | 968 | @logit | 
| 969 | +@check_admin | |
| 969 | 970 | def member_activity_contribute_list(request, administrator): | 
| 970 | 971 |      brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | 
| 971 | 972 |      activity_id = request.POST.get('activity_id', '') | 
| @@ -0,0 +1,87 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 3 | +from __future__ import division | |
| 4 | + | |
| 5 | +from django.conf import settings | |
| 6 | +from django_logit import logit | |
| 7 | +from django_response import response | |
| 8 | +from paginator import pagination | |
| 9 | + | |
| 10 | +from kodo.decorators import check_admin | |
| 11 | +from tenancy.models import TenancyShotInfo | |
| 12 | +from utils.error.errno_utils import TenancyStatusCode | |
| 13 | + | |
| 14 | + | |
| 15 | +@logit | |
| 16 | +@check_admin | |
| 17 | +def shot_list(request, administrator): | |
| 18 | +    page = request.POST.get('page', 1) | |
| 19 | +    num = request.POST.get('num', 20) | |
| 20 | + | |
| 21 | +    shots = TenancyShotInfo.objects.filter(status=True).order_by('-pk') | |
| 22 | + shots = [shot.data for shot in shots] | |
| 23 | + shots, left = pagination(shots, page, num) | |
| 24 | + | |
| 25 | +    return response(data={ | |
| 26 | + 'shots': shots, | |
| 27 | + 'left': left, | |
| 28 | + }) | |
| 29 | + | |
| 30 | + | |
| 31 | +@logit | |
| 32 | +@check_admin | |
| 33 | +def shot_detail(request, administrator): | |
| 34 | +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | |
| 35 | +    shot_id = request.POST.get('shot_id', '') | |
| 36 | + | |
| 37 | + try: | |
| 38 | + shot = TenancyShotInfo.objects.get(shot_id=shot_id, status=True) | |
| 39 | + except TenancyShotInfo.DoesNotExist: | |
| 40 | + return response(TenancyStatusCode.TENANCY_SHOT_NOT_FOUND) | |
| 41 | + | |
| 42 | +    return response(data={ | |
| 43 | + 'shot': shot.data, | |
| 44 | + }) | |
| 45 | + | |
| 46 | + | |
| 47 | +@logit | |
| 48 | +@check_admin | |
| 49 | +def shot_create(request, administrator): | |
| 50 | +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | |
| 51 | +    model_name = request.POST.get('model_name', '') | |
| 52 | +    sn = request.POST.get('sn', '') | |
| 53 | +    fittings_type = request.POST.get('fittings_type', 0) | |
| 54 | +    tenancy_status = request.POST.get('tenancy_status', 0) | |
| 55 | + | |
| 56 | + shot = TenancyShotInfo.objects.create( | |
| 57 | + model_name=model_name, | |
| 58 | + sn=sn, | |
| 59 | + fittings_type=fittings_type, | |
| 60 | + tenancy_status=tenancy_status, | |
| 61 | + ) | |
| 62 | + | |
| 63 | +    return response(data={ | |
| 64 | + 'shot': shot.data, | |
| 65 | + }) | |
| 66 | + | |
| 67 | + | |
| 68 | +@logit | |
| 69 | +@check_admin | |
| 70 | +def shot_update(request, administrator): | |
| 71 | +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | |
| 72 | +    shot_id = request.POST.get('shot_id', '') | |
| 73 | +    model_name = request.POST.get('model_name', '') | |
| 74 | +    sn = request.POST.get('sn', '') | |
| 75 | +    fittings_type = request.POST.get('fittings_type', 0) | |
| 76 | +    tenancy_status = request.POST.get('tenancy_status', 0) | |
| 77 | + | |
| 78 | +    shot, _ = TenancyShotInfo.objects.update_or_create(shot_id=shot_id, defaults={ | |
| 79 | + 'model_name': model_name, | |
| 80 | + 'sn': sn, | |
| 81 | + 'fittings_type': fittings_type, | |
| 82 | + 'tenancy_status': tenancy_status, | |
| 83 | + }) | |
| 84 | + | |
| 85 | +    return response(data={ | |
| 86 | + 'shot': shot.data, | |
| 87 | + }) | 
| @@ -0,0 +1,42 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 3 | +from __future__ import division | |
| 4 | + | |
| 5 | +from django.conf import settings | |
| 6 | +from django_logit import logit | |
| 7 | +from django_response import response | |
| 8 | +from paginator import pagination | |
| 9 | + | |
| 10 | +from tenancy.models import TenancyShotInfo | |
| 11 | +from utils.error.errno_utils import TenancyStatusCode | |
| 12 | + | |
| 13 | + | |
| 14 | +@logit | |
| 15 | +def shot_list(request): | |
| 16 | +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | |
| 17 | +    page = request.POST.get('page', 1) | |
| 18 | +    num = request.POST.get('num', 20) | |
| 19 | + | |
| 20 | +    shots = TenancyShotInfo.objects.filter(status=True).order_by('-pk') | |
| 21 | + shots = [shot.data for shot in shots] | |
| 22 | + shots, left = pagination(shots, page, num) | |
| 23 | + | |
| 24 | +    return response(data={ | |
| 25 | + 'shots': shots, | |
| 26 | + 'left': left, | |
| 27 | + }) | |
| 28 | + | |
| 29 | + | |
| 30 | +@logit | |
| 31 | +def shot_detail(request): | |
| 32 | +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | |
| 33 | +    shot_id = request.POST.get('shot_id', '') | |
| 34 | + | |
| 35 | + try: | |
| 36 | + shot = TenancyShotInfo.objects.get(shot_id=shot_id, status=True) | |
| 37 | + except TenancyShotInfo.DoesNotExist: | |
| 38 | + return response(TenancyStatusCode.TENANCY_SHOT_NOT_FOUND) | |
| 39 | + | |
| 40 | +    return response(data={ | |
| 41 | + 'shot': shot.data, | |
| 42 | + }) | 
| @@ -5,7 +5,7 @@ from django_file_upload import views as file_views | ||
| 5 | 5 |  | 
| 6 | 6 | from api import (admin_views, clerk_views, complement_views, distributor_views, encrypt_views, express_views, log_views, | 
| 7 | 7 | maintenance_point_views, maintenance_views, mch_views, member_views, model_views, operator_views, | 
| 8 | - refresh_views, sr_views, staff_views, wx_views, wxa_views) | |
| 8 | + refresh_views, sr_views, staff_views, tenancy_admin_views, tenancy_views, wx_views, wxa_views) | |
| 9 | 9 | from miniapp import qy_views | 
| 10 | 10 | from miniapp import views as mini_views | 
| 11 | 11 | from page import oauth_views, sale_views, screen_views | 
| @@ -307,15 +307,39 @@ urlpatterns += [ | ||
| 307 | 307 |  | 
| 308 | 308 | # 维修 | 
| 309 | 309 | urlpatterns += [ | 
| 310 | + # 小程序接口 | |
| 310 | 311 | url(r'^maintenance/add$', maintenance_views.maintenance_add, name='maintenance_add'), | 
| 311 | 312 | url(r'^maintenance/delete$', maintenance_views.maintenance_delete, name='maintenance_delete'), | 
| 312 | 313 | url(r'^maintenance/list$', maintenance_views.maintenance_list, name='maintenance_list'), | 
| 313 | 314 | url(r'^maintenance/detail$', maintenance_views.maintenance_detail, name='maintenance_detail'), | 
| 314 | 315 |  | 
| 316 | + # 后台管理接口 | |
| 315 | 317 | url(r'^admin/maintenance/update$', maintenance_views.maintenance_update, name='maintenance_update'), | 
| 316 | 318 | url(r'^admin/maintenance/list$', maintenance_views.maintenance_list, name='maintenance_list'), | 
| 317 | 319 | url(r'^admin/maintenance/close$', maintenance_views.maintenance_close, name='maintenance_close'), | 
| 318 | 320 |  | 
| 319 | 321 | url(r'^admin/maintenance/tracking/info$', maintenance_views.maintenance_tracking_info, name='maintenance_tracking_info'), | 
| 322 | + | |
| 323 | + # 快递信息回调接口 | |
| 320 | 324 | url(r'^maintenance/tracking/info/callback$', maintenance_views.maintenance_tracking_info_callback, name='maintenance_tracking_info_callback'), | 
| 321 | 325 | ] | 
| 326 | + | |
| 327 | +# 租赁 | |
| 328 | +urlpatterns += [ | |
| 329 | + # 小程序接口 | |
| 330 | + url(r'^tenancy/shot/list$', tenancy_views.shot_list, name='tenancy_shot_list'), | |
| 331 | + url(r'^tenancy/shot/detail$', tenancy_views.shot_detail, name='tenancy_shot_detail'), | |
| 332 | + | |
| 333 | + # 后台管理接口 | |
| 334 | + url(r'^admin/tenancy/shot/list$', tenancy_admin_views.shot_list, name='admin_tenancy_shot_list'), | |
| 335 | + url(r'^admin/tenancy/shot/detail$', tenancy_admin_views.shot_detail, name='admin_tenancy_shot_detail'), | |
| 336 | + url(r'^admin/tenancy/shot/create$', tenancy_admin_views.shot_create, name='admin_tenancy_shot_create'), | |
| 337 | + url(r'^admin/tenancy/shot/update$', tenancy_admin_views.shot_update, name='admin_tenancy_shot_update'), | |
| 338 | +] | |
| 339 | + | |
| 340 | +# 租赁申请 | |
| 341 | +urlpatterns += [ | |
| 342 | + # 小程序接口 | |
| 343 | + | |
| 344 | + # 后台管理接口 | |
| 345 | +] | 
| @@ -16,17 +16,17 @@ class PermissionStatusCode(BaseStatusCode): | ||
| 16 | 16 | class AdministratorStatusCode(BaseStatusCode): | 
| 17 | 17 | """ 操作员相关错误码 4002xx """ | 
| 18 | 18 | ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在') | 
| 19 | - ADMINISTRATOR_PERMISSION_DENIED = StatusCodeField(508002, 'Administrator Permission Denied', description=u'管理员权限不足') | |
| 19 | + ADMINISTRATOR_PERMISSION_DENIED = StatusCodeField(400202, 'Administrator Permission Denied', description=u'管理员权限不足') | |
| 20 | 20 |  | 
| 21 | - # 密码 | |
| 22 | - ADMINISTRATOR_PASSWORD_ERROR = StatusCodeField(400202, 'Administrator Password Error', description=u'管理员密码错误') | |
| 23 | 21 | # 手机号 | 
| 24 | 22 | ADMINISTRATOR_PHONE_ALREADY_EXISTS = StatusCodeField(400205, 'Administrator Phone Already Exists', description=u'管理员手机号已经存在') | 
| 23 | + # 密码 | |
| 24 | + ADMINISTRATOR_PASSWORD_ERROR = StatusCodeField(400210, 'Administrator Password Error', description=u'管理员密码错误') | |
| 25 | 25 | # 状态 | 
| 26 | 26 | ADMINISTRATOR_NOT_ACTIVATED = StatusCodeField(400215, 'Administrator Not Activated', description=u'管理员未激活') | 
| 27 | 27 | ADMINISTRATOR_HAS_DISABLED = StatusCodeField(400216, 'Administrator Has Disabled', description=u'管理员已禁用') | 
| 28 | 28 | ADMINISTRATOR_HAS_DELETED = StatusCodeField(400217, 'Administrator Has Deleted', description=u'管理员已删除') | 
| 29 | - # 管理员 | |
| 29 | + # 核销员 | |
| 30 | 30 | MAINTENANCE_NOT_FOUND = StatusCodeField(400251, 'Maintenance Not Found', description=u'核销员不存在') | 
| 31 | 31 |  | 
| 32 | 32 |  | 
| @@ -211,3 +211,8 @@ class MaintenanceStatusCode(BaseStatusCode): | ||
| 211 | 211 | """ 维修相关错误码 5080xx """ | 
| 212 | 212 | MAINTENACE_NOT_FOUND = StatusCodeField(508001, 'Maintenance Not Found', description=u'维修不存在') | 
| 213 | 213 | MAINTENACE_PERMISSION_DENIED = StatusCodeField(508002, 'Maintenance Permission Denied', description=u'维修权限不足') | 
| 214 | + | |
| 215 | + | |
| 216 | +class TenancyStatusCode(BaseStatusCode): | |
| 217 | + """ 租赁相关错误码 5090xx """ | |
| 218 | + TENANCY_SHOT_NOT_FOUND = StatusCodeField(509001, 'Tenancy Shot Not Found', description=u'租赁镜头不存在') |