|
# -*- coding: utf-8 -*-
from __future__ import division
from django.conf import settings
from django.db import transaction
from django.shortcuts import render
from django_logit import logit
from django_response import response
from paginator import pagination
from account.models import FranchiserInfo, SaleclerkInfo, UserInfo
from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo
from mch.models import ModelInfo
from product.models import ProductCodeSubmitLogInfo, ProductInfo, ProductModelInfo
from utils.error.errno_utils import ProductModelStatusCode, ProductStatusCode, SaleclerkStatusCode
def clerk_sale_oauth(request):
unionid = request.GET.get('unionid', '')
models = ProductModelInfo.objects.filter(status=True)
models = [model.data for model in models]
try:
clerk = SaleclerkInfo.objects.get(unionid=unionid)
except SaleclerkInfo.DoesNotExist:
clerk = None
return render(request, 'page/clerk_sale.html', {
'domain': settings.DOMAIN,
'models': models,
'clerk_info': clerk and clerk.data,
})
@logit
def clerk_sale_submit_api(request):
user_id = request.POST.get('user_id', '')
iv = request.POST.get('iv', '')
encryptedData = request.POST.get('encryptedData', '')
lat = request.POST.get('lat', '')
lon = request.POST.get('lon', '')
ModelID = request.POST.get('ModelID', '')
serialNo = request.POST.get('SerialNo', '')
verifyResult = request.POST.get('verifyResult', '')
consumer_name = request.POST.get('consumer_name', '')
consumer_phone = request.POST.get('consumer_phone', '')
file_path = request.POST.get('file_path', '')
try:
user = UserInfo.objects.get(user_id=user_id, status=True)
except UserInfo.DoesNotExist:
return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
try:
clerk = SaleclerkInfo.objects.get(unionid=user.unionid, status=True)
except SaleclerkInfo.DoesNotExist:
return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
# 店员提交记录
SaleclerkSubmitLogInfo.objects.create(
franchiser_id=clerk.franchiser_id,
clerk_id=clerk.clerk_id,
code=serialNo,
consumer_name=consumer_name,
consumer_phone=consumer_phone,
lat=lat,
lon=lon,
image=file_path,
test_user=clerk.test_user,
)
try:
sci = SaleclerkIntegralIncomeExpensesInfo.objects.get(code=serialNo, status=True)
except SaleclerkIntegralIncomeExpensesInfo.DoesNotExist:
sci = None
if sci:
try:
clerk = SaleclerkInfo.objects.get(clerk_id=sci.clerk_id, status=True)
except SaleclerkInfo.DoesNotExist:
clerk = None
return response(SaleclerkStatusCode.DUPLICATE_SUBMIT, data={
'franchiser_name': clerk.franchiser_name,
'clerk_name': clerk.clerk_name,
} if clerk else {})
# 店员积分
try:
model = ModelInfo.objects.get(ModelID=ModelID)
except ModelInfo.DoesNotExist:
return response(ProductModelStatusCode.MODEL_NOT_FOUND)
integral = model.integral
clerk.integral += integral
clerk.total_integral += integral
clerk.save()
# 店员积分记录
SaleclerkIntegralIncomeExpensesInfo.objects.create(
franchiser_id=clerk.franchiser_id,
clerk_id=clerk.clerk_id,
type=SaleclerkIntegralIncomeExpensesInfo.INCOME,
model_id=model.model_id,
model_name=model.model_name,
code=serialNo,
consumer_name=consumer_name,
consumer_phone=consumer_phone,
lat=lat,
lon=lon,
image=file_path,
integral=integral,
left_integral=clerk.total_integral,
test_user=clerk.test_user,
)
return response(200, data={
'integral': integral,
'total_integral': clerk.integral,
})
@logit
def clerk_integral_list_api(request):
user_id = request.POST.get('user_id', '')
page = int(request.POST.get('page', 1))
num = int(request.POST.get('num', settings.GROUP_NUM_PER_PAGE))
try:
user = UserInfo.objects.get(user_id=user_id, status=True)
except UserInfo.DoesNotExist:
return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
try:
clerk = SaleclerkInfo.objects.get(unionid=user.unionid, status=True)
except SaleclerkInfo.DoesNotExist:
return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
integrals = SaleclerkIntegralIncomeExpensesInfo.objects.filter(clerk_id=clerk.clerk_id).order_by('-pk')
integrals, left = pagination(integrals, page, num)
integrals = [integral.data for integral in integrals]
return response(200, data={
'integrals': integrals,
'total_integral': clerk.integral,
})
@logit
@transaction.atomic
def clerk_sale_submit_api_bak(request):
""" 店员信息提交 """
step = int(request.POST.get('step', 1))
clerk_id = request.POST.get('clerk_id', '')
model_id = request.POST.get('model_id', '')
mount = request.POST.get('mount', 'NO')
code = request.POST.get('code', '')
name = request.POST.get('name', '')
sex = int(request.POST.get('sex', 1))
age = int(request.POST.get('age', 1))
phone = request.POST.get('phone', '')
# 店员是否存在
try:
clerk = SaleclerkInfo.objects.select_for_update().get(clerk_id=clerk_id)
except SaleclerkInfo.DoesNotExist:
return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
# 店员是否激活
if clerk.user_status != SaleclerkInfo.ACTIVATED:
return response(SaleclerkStatusCode.CLERK_NOT_ACTIVATED)
# 型号是否存在
try:
model = ProductModelInfo.objects.get(model_id=model_id)
except ProductModelInfo.DoesNotExist:
return response(ProductModelStatusCode.MODEL_NOT_FOUND)
# 记录销售提交记录
ProductCodeSubmitLogInfo.objects.create(
model_id=model.model_id,
model_name=model.model_name,
mount=mount,
code=code,
franchiser_id=clerk.franchiser_id,
clerk_id=clerk.clerk_id,
consumer_name=name,
consumer_sex=sex,
consumer_age=age,
consumer_phone=phone,
)
# 产品是否存在
try:
product = ProductInfo.objects.select_for_update().get(model_id=model_id, mount=mount, code=code)
except ProductInfo.DoesNotExist:
return response(ProductStatusCode.PRODUCT_NOT_FOUND)
# 产品是否使用
if step == 1 and product.code_status:
return response(ProductStatusCode.PRODUCT_HAS_USED)
if step == 2 and not product.code_status:
return response(ProductStatusCode.PRODUCT_NOT_USED)
# 产品使用
product.code_status = True
product.integral_status = True
product.franchiser_id = clerk.franchiser_id
product.clerk_id = clerk.clerk_id
if 'name' in request.POST:
product.consumer_name = name
if 'sex' in request.POST:
product.consumer_sex = sex
if 'age' in request.POST:
product.consumer_age = age
if 'phone' in request.POST:
product.consumer_phone = phone
product.save()
# 店员积分
clerk.integral += product.integral
clerk.save()
# 店员积分记录
SaleclerkIntegralIncomeExpensesInfo.objects.create(
franchiser_id=clerk.franchiser_id,
clerk_id=clerk.clerk_id,
type=SaleclerkIntegralIncomeExpensesInfo.INCOME,
code=code,
integral=product.integral,
left_integral=clerk.integral,
test_user=clerk.test_user,
)
return response(200, 'Submit Success', u'提交成功', {})
|