|
# -*- coding: utf-8 -*-
from __future__ import division
from django.db import transaction
from django_logit import logit
from django_response import response
from paginator import pagination
from TimeConvert import TimeConvert as tc
from api.tenancy_views import tenancy_tracking_info_subscribe
from kodo.decorators import check_admin
from tenancy.models import TenancyShotInfo, TenancyShotRequestInfo
from utils.error.errno_utils import TenancyStatusCode
@logit
@check_admin
def shot_list(request, administrator):
page = request.POST.get('page', 1)
num = request.POST.get('num', 20)
shots = TenancyShotInfo.objects.filter(status=True).order_by('-pk')
shots = [shot.data for shot in shots]
shots, left = pagination(shots, page, num)
return response(data={
'shots': shots,
'left': left,
})
@logit
@check_admin
def shot_detail(request, administrator):
shot_id = request.POST.get('shot_id', '')
try:
shot = TenancyShotInfo.objects.get(shot_id=shot_id, status=True)
except TenancyShotInfo.DoesNotExist:
return response(TenancyStatusCode.TENANCY_SHOT_NOT_FOUND)
return response(data={
'shot': shot.data,
})
@logit
@check_admin
def shot_create(request, administrator):
model_name = request.POST.get('model_name', '')
sn = request.POST.get('sn', '')
fittings_type = request.POST.get('fittings_type', 0)
tenancy_status = request.POST.get('tenancy_status', 0)
shot = TenancyShotInfo.objects.create(
model_name=model_name,
sn=sn,
fittings_type=fittings_type,
tenancy_status=tenancy_status,
)
return response(data={
'shot': shot.data,
})
@logit
@check_admin
def shot_update(request, administrator):
shot_id = request.POST.get('shot_id', '')
model_name = request.POST.get('model_name', '')
sn = request.POST.get('sn', '')
fittings_type = request.POST.get('fittings_type', 0)
tenancy_status = request.POST.get('tenancy_status', 0)
shot, _ = TenancyShotInfo.objects.update_or_create(shot_id=shot_id, defaults={
'model_name': model_name,
'sn': sn,
'fittings_type': fittings_type,
'tenancy_status': tenancy_status,
})
return response(data={
'shot': shot.data,
})
@logit
@check_admin
def shot_request_list(request, administrator):
page = request.POST.get('page', 1)
num = request.POST.get('num', 20)
reqs = TenancyShotRequestInfo.objects.filter(status=True).order_by('-pk')
reqs = [req.data for req in reqs]
reqs, left = pagination(reqs, page, num)
return response(data={
'reqs': reqs,
'left': left,
})
@logit
@check_admin
def shot_request_detail(request, administrator):
req_id = request.POST.get('req_id') or request.POST.get('request_id')
try:
req = TenancyShotRequestInfo.objects.get(request_id=req_id, status=True)
except TenancyShotRequestInfo.DoesNotExist:
return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
return response(data={
'req': req.data,
})
@logit
@check_admin
@transaction.atomic
def shot_request_update(request, administrator):
req_id = request.POST.get('req_id') or request.POST.get('request_id')
shot_id = request.POST.get('shot_id', '')
name = request.POST.get('name', '')
phone = request.POST.get('phone', '')
postcode = request.POST.get('postcode', '')
location = request.POST.get('location', '')
purpose = request.POST.get('purpose', '')
return_date = request.POST.get('return_date', '')
request_status = request.POST.get('request_status', '')
tracking_number = request.POST.get('tracking_number', '')
back_tracking_number = request.POST.get('back_tracking_number', '')
try:
req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
except TenancyShotRequestInfo.DoesNotExist:
return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
old_tracking_number = req.tracking_number
old_back_tracking_number = req.back_tracking_number
if shot_id:
req.shot_id = shot_id
if name:
req.name = name
if phone:
req.phone = phone
if postcode:
req.postcode = postcode
if location:
req.location = location
if purpose:
req.purpose = purpose
if return_date:
req.return_date = tc.to_date(return_date)
if request_status:
req.request_status = request_status
if tracking_number:
req.tracking_number = tracking_number
if back_tracking_number:
req.back_tracking_number = back_tracking_number
req.save()
if tracking_number and tracking_number != old_tracking_number:
tenancy_tracking_info_subscribe(req, 'tracking')
if back_tracking_number and back_tracking_number != old_back_tracking_number:
tenancy_tracking_info_subscribe(req, 'back_tracking')
return response(data={
'req': req.data,
})
@logit
@check_admin
@transaction.atomic
def shot_request_audit(request, administrator):
req_id = request.POST.get('req_id') or request.POST.get('request_id')
audit_status = request.POST.get('audit_status', 0)
try:
req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
except TenancyShotRequestInfo.DoesNotExist:
return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
req.audit_status = audit_status
req.save()
return response(data={
'req': req.data,
})
@logit
@check_admin
@transaction.atomic
def shot_request_send(request, administrator):
req_id = request.POST.get('req_id') or request.POST.get('request_id')
tracking_number = request.POST.get('tracking_number', '')
try:
req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
except TenancyShotRequestInfo.DoesNotExist:
return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
req.tracking_number = tracking_number
req.save()
return response(data={
'req': req.data,
})
@logit
@check_admin
@transaction.atomic
def shot_request_signed(request, administrator):
req_id = request.POST.get('req_id') or request.POST.get('request_id')
try:
req = TenancyShotRequestInfo.objects.select_for_update().get(request_id=req_id, status=True)
except TenancyShotRequestInfo.DoesNotExist:
return response(TenancyStatusCode.TENANCY_SHOT_REQUEST_NOT_FOUND)
req.request_status = '寄回已签收并检查无损坏'
req.save()
return response(data={
'req': req.data,
})
|