870 lines
37 KiB
Python
870 lines
37 KiB
Python
from django.http import JsonResponse, Http404
|
|
from django.shortcuts import render, get_object_or_404
|
|
from django.template.loader import render_to_string
|
|
from django.urls import reverse
|
|
from django.contrib.auth.decorators import login_required
|
|
from rest_framework import status
|
|
from rest_framework.decorators import api_view, permission_classes
|
|
from rest_framework.pagination import PageNumberPagination
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
|
|
from application.rsc_mgnt.forms import *
|
|
from application.rsc_mgnt.models import *
|
|
from application.rsc_mgnt.serializers import ConsumableGoodsInboundSerializer, ConsumableGoodsOutboundSerializer, \
|
|
StoredValueCardUseRecordSerializer
|
|
from common.auth import custom_permission_required
|
|
from common.utils.page_helper import paginate_query_and_assign_numbers
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.view_consumablegoodscategory')
|
|
def cg_cat_list_view(request):
|
|
query_set = ConsumableGoodsCategory.objects.filter().order_by('-category_id')
|
|
category_name = request.GET.get('category_name', '')
|
|
|
|
if category_name:
|
|
query_set = query_set.filter(category_name__icontains=category_name)
|
|
|
|
items = paginate_query_and_assign_numbers(request=request, queryset=query_set, per_page=10)
|
|
query_params = '&category_name={}'.format(category_name)
|
|
template_name = "资源管理-消耗品类别管理-Excel上传模板.xlsx"
|
|
|
|
context = {
|
|
"model_config": 'rsc_mgnt.ConsumableGoodsCategory',
|
|
"items": items,
|
|
"breadcrumb_list": [
|
|
{"title": "首页", "name": "index"},
|
|
{"title": "资源管理", "name": "index"},
|
|
{"title": "消耗品类别管理", "name": "cg_cat_list"}
|
|
],
|
|
"filters": [
|
|
{"type": "text", "id": "category_name", "name": "category_name", "label": "类别名称",
|
|
"placeholder": "请输入类别名称"}
|
|
],
|
|
"excel_upload_config": {
|
|
"template_name": template_name,
|
|
"template_url": reverse("dl_excel_tpl", kwargs={'template_name': template_name}),
|
|
"parse_url": reverse("ep_common_parse"),
|
|
"save_url": reverse("save_excel_table_data"),
|
|
"fields_preview_config": {
|
|
"category_name": {"type": "text", "width": "180px"},
|
|
"description": {"type": "text", "width": "180px"},
|
|
}
|
|
},
|
|
"query_params": query_params,
|
|
"table_exclude_field_name": ['category_id'],
|
|
"form_action_url": 'cg_cat_list',
|
|
"modify_url": reverse("cg_cat_list_modify"),
|
|
"add_url": reverse("cg_cat_list_add"),
|
|
"delete_url": reverse("cg_cat_list_delete"),
|
|
"add_button": True,
|
|
"import_excel_button": True
|
|
}
|
|
|
|
return render(request, 'items_list.html', context)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.add_consumablegoodscategory')
|
|
def cg_cat_list_add(request):
|
|
if request.method == 'POST':
|
|
form = ConsumableGoodsCategoryForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "添加成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
form = ConsumableGoodsCategoryForm()
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.change_consumablegoodscategory')
|
|
def cg_cat_list_modify(request):
|
|
if request.method == 'POST':
|
|
if 'id' in request.POST:
|
|
instance = ConsumableGoodsCategory.objects.get(category_id=request.POST['id'])
|
|
form = ConsumableGoodsCategoryForm(request.POST, instance=instance)
|
|
else:
|
|
form = ConsumableGoodsCategoryForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "保存成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
if 'id' in request.GET:
|
|
try:
|
|
instance = ConsumableGoodsCategory.objects.get(category_id=request.GET['id'])
|
|
form = ConsumableGoodsCategoryForm(instance=instance)
|
|
except ConsumableGoodsCategory.DoesNotExist:
|
|
raise Http404("对象不存在")
|
|
else:
|
|
form = ConsumableGoodsCategoryForm()
|
|
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.delete_consumablegoodscategory')
|
|
def cg_cat_list_delete(request):
|
|
if request.method == 'GET':
|
|
target_id = request.GET.get('target_id')
|
|
ConsumableGoodsCategory.objects.filter(category_id=target_id).delete()
|
|
return JsonResponse({"message": "删除成功"})
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.view_consumablegoodsinventory')
|
|
def cg_inv_list_view(request):
|
|
query_set = ConsumableGoodsInventory.objects.filter().order_by('-inventory_id')
|
|
inventory_id = request.GET.get('inventory_id', '')
|
|
|
|
if inventory_id:
|
|
query_set = query_set.filter(inventory_id__icontains=inventory_id)
|
|
|
|
items = paginate_query_and_assign_numbers(request=request, queryset=query_set, per_page=10)
|
|
query_params = '&inventory_id={}'.format(inventory_id)
|
|
template_name = "资源管理-消耗品库存-Excel上传模板.xlsx"
|
|
|
|
context = {
|
|
"model_config": 'rsc_mgnt.ConsumableGoodsInventory',
|
|
"items": items,
|
|
"breadcrumb_list": [
|
|
{"title": "首页", "name": "index"},
|
|
{"title": "资源管理", "name": "index"},
|
|
{"title": "消耗品库存", "name": "cg_inv_list"}
|
|
],
|
|
"filters": [
|
|
{"type": "text", "id": "inventory_id", "name": "inventory_id", "label": "库存ID",
|
|
"placeholder": "请输入库存ID"}
|
|
],
|
|
"excel_upload_config": {
|
|
"template_name": template_name,
|
|
"template_url": reverse("dl_excel_tpl", kwargs={'template_name': template_name}),
|
|
"parse_url": reverse("ep_common_parse"),
|
|
"save_url": reverse("save_excel_table_data_inventory"),
|
|
"fields_preview_config": {
|
|
"item_name": {"type": "text", "width": "180px"},
|
|
"category": {"type": "text", "width": "180px"},
|
|
"specification": {"type": "text", "width": "180px"},
|
|
"unit": {"type": "text", "width": "180px"},
|
|
"current_inventory": {"type": "number", "width": "180px"},
|
|
"safety_stock": {"type": "number", "width": "180px"},
|
|
"replenishment_alert": {"type": "boolean", "width": "180px"},
|
|
"storage_location": {"type": "text", "width": "180px"},
|
|
}
|
|
},
|
|
"query_params": query_params,
|
|
"table_exclude_field_name": ['inventory_id'],
|
|
"form_action_url": 'cg_inv_list',
|
|
"modify_url": reverse("cg_inv_list_modify"),
|
|
"add_url": reverse("cg_inv_list_add"),
|
|
"delete_url": reverse("cg_inv_list_delete"),
|
|
}
|
|
|
|
return render(request, 'cg_list.html', context)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.add_consumablegoodsinventory')
|
|
def cg_inv_list_add(request):
|
|
if request.method == 'POST':
|
|
form = ConsumableGoodsInventoryForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "添加成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
form = ConsumableGoodsInventoryForm()
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.change_consumablegoodsinventory')
|
|
def cg_inv_list_modify(request):
|
|
if request.method == 'POST':
|
|
if 'id' in request.POST:
|
|
instance = ConsumableGoodsInventory.objects.get(inventory_id=request.POST['id'])
|
|
form = ConsumableGoodsInventoryForm(request.POST, instance=instance)
|
|
else:
|
|
form = ConsumableGoodsInventoryForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "保存成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
if 'id' in request.GET:
|
|
try:
|
|
instance = ConsumableGoodsInventory.objects.get(inventory_id=request.GET['id'])
|
|
form = ConsumableGoodsInventoryForm(instance=instance)
|
|
except ConsumableGoodsInventory.DoesNotExist:
|
|
raise Http404("对象不存在")
|
|
else:
|
|
form = ConsumableGoodsInventoryForm()
|
|
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.delete_consumablegoodsinventory')
|
|
def cg_inv_list_delete(request):
|
|
if request.method == 'GET':
|
|
target_id = request.GET.get('target_id')
|
|
ConsumableGoodsInventory.objects.filter(inventory_id=target_id).delete()
|
|
return JsonResponse({"message": "删除成功"})
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.view_consumablegoodsinventory')
|
|
def cmp_phone_reg_list_view(request):
|
|
query_set = CompanyMobilePhoneUsageRegistry.objects.filter().order_by('-record_id')
|
|
mobile_number = request.GET.get('mobile_number', '')
|
|
current_user = request.GET.get('current_user', '')
|
|
owner = request.GET.get('owner', '')
|
|
|
|
if mobile_number:
|
|
query_set = query_set.filter(mobile_number__icontains=mobile_number)
|
|
if current_user:
|
|
query_set = query_set.filter(current_user__icontains=current_user)
|
|
if owner:
|
|
query_set = query_set.filter(owner__icontains=owner)
|
|
|
|
items = paginate_query_and_assign_numbers(request=request, queryset=query_set, per_page=10)
|
|
query_params = '&mobile_number={}¤t_user={}&owner={}'.format(mobile_number, current_user, owner)
|
|
template_name = "资源管理-公司手机号使用登记-Excel上传模板.xlsx"
|
|
|
|
context = {
|
|
"model_config": 'rsc_mgnt.CompanyMobilePhoneUsageRegistry',
|
|
"items": items,
|
|
"breadcrumb_list": [
|
|
{"title": "首页", "name": "index"},
|
|
{"title": "资源管理", "name": "index"},
|
|
{"title": "公司手机号使用登记", "name": "cmp_phone_reg_list"}
|
|
],
|
|
"filters": [
|
|
{"type": "text", "id": "mobile_number", "name": "mobile_number", "label": "手机号",
|
|
"placeholder": "请输入手机号"},
|
|
{"type": "text", "id": "current_user", "name": "current_user", "label": "现使用人",
|
|
"placeholder": "请输入现使用人"},
|
|
{"type": "text", "id": "owner", "name": "owner", "label": "机主", "placeholder": "请输入机主"}
|
|
],
|
|
"excel_upload_config": {
|
|
"template_name": template_name,
|
|
"template_url": reverse("dl_excel_tpl", kwargs={'template_name': template_name}),
|
|
"parse_url": reverse("ep_common_parse"),
|
|
"save_url": reverse("save_excel_table_data"),
|
|
"fields_preview_config": {
|
|
"mobile_number": {"type": "text", "width": "180px"},
|
|
"owner": {"type": "text", "width": "180px"},
|
|
"current_user": {"type": "text", "width": "180px"},
|
|
"purpose": {"type": "text", "width": "180px"},
|
|
}
|
|
},
|
|
"query_params": query_params,
|
|
"table_exclude_field_name": ['record_id'],
|
|
"form_action_url": 'cmp_phone_reg_list',
|
|
"modify_url": reverse("cmp_phone_reg_list_modify"),
|
|
"add_url": reverse("cmp_phone_reg_list_add"),
|
|
"delete_url": reverse("cmp_phone_reg_list_delete"),
|
|
"add_button": True,
|
|
"import_excel_button": True
|
|
}
|
|
|
|
return render(request, 'items_list.html', context)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.add_companymobilephoneusageregistry')
|
|
def cmp_phone_reg_list_add(request):
|
|
if request.method == 'POST':
|
|
form = CompanyMobilePhoneUsageRegistryForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "添加成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
form = CompanyMobilePhoneUsageRegistryForm()
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.change_companymobilephoneusageregistry')
|
|
def cmp_phone_reg_list_modify(request):
|
|
if request.method == 'POST':
|
|
if 'id' in request.POST:
|
|
instance = CompanyMobilePhoneUsageRegistry.objects.get(record_id=request.POST['id'])
|
|
form = CompanyMobilePhoneUsageRegistryForm(request.POST, instance=instance)
|
|
else:
|
|
form = CompanyMobilePhoneUsageRegistryForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "保存成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
if 'id' in request.GET:
|
|
try:
|
|
instance = CompanyMobilePhoneUsageRegistry.objects.get(record_id=request.GET['id'])
|
|
form = CompanyMobilePhoneUsageRegistryForm(instance=instance)
|
|
except CompanyMobilePhoneUsageRegistry.DoesNotExist:
|
|
raise Http404("对象不存在")
|
|
else:
|
|
form = CompanyMobilePhoneUsageRegistryForm()
|
|
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.delete_companymobilephoneusageregistry')
|
|
def cmp_phone_reg_list_delete(request):
|
|
if request.method == 'GET':
|
|
target_id = request.GET.get('target_id')
|
|
CompanyMobilePhoneUsageRegistry.objects.filter(record_id=target_id).delete()
|
|
return JsonResponse({"message": "删除成功"})
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.view_businessvehicleusageregistry')
|
|
def bv_usage_list_view(request):
|
|
query_set = BusinessVehicleUsageRegistry.objects.filter().order_by('-record_id')
|
|
license_plate = request.GET.get('license_plate', '')
|
|
checkout_time = request.GET.get('checkout_time', '')
|
|
|
|
if license_plate:
|
|
query_set = query_set.filter(license_plate__icontains=license_plate)
|
|
if checkout_time:
|
|
query_set = query_set.filter(checkout_time__icontains=checkout_time)
|
|
|
|
items = paginate_query_and_assign_numbers(request=request, queryset=query_set, per_page=10)
|
|
query_params = '&license_plate={}&checkout_time={}'.format(license_plate, checkout_time)
|
|
template_name = "资源管理-商务车使用登记-Excel上传模板.xlsx"
|
|
|
|
context = {
|
|
"model_config": 'rsc_mgnt.BusinessVehicleUsageRegistry',
|
|
"items": items,
|
|
"breadcrumb_list": [
|
|
{"title": "首页", "name": "index"},
|
|
{"title": "资源管理", "name": "index"},
|
|
{"title": "商务车使用登记", "name": "bv_usage_list"}
|
|
],
|
|
"filters": [
|
|
{"type": "text", "id": "license_plate", "name": "license_plate", "label": "车牌",
|
|
"placeholder": "请输入车牌"},
|
|
{"type": "date", "id": "checkout_time", "name": "checkout_time", "label": "借用时间"}
|
|
],
|
|
"excel_upload_config": {
|
|
"template_name": template_name,
|
|
"template_url": reverse("dl_excel_tpl", kwargs={'template_name': template_name}),
|
|
"parse_url": reverse("ep_common_parse"),
|
|
"save_url": reverse("save_excel_table_data"),
|
|
"fields_preview_config": {
|
|
"license_plate": {"type": "text", "width": "180px"},
|
|
"checkout_time": {"type": "date", "width": "180px"},
|
|
"borrower": {"type": "text", "width": "180px"},
|
|
"accompanying_personnel": {"type": "text", "width": "180px"},
|
|
"reason": {"type": "text", "width": "180px"},
|
|
"destination": {"type": "text", "width": "180px"},
|
|
"days_of_use": {"type": "number", "width": "180px"},
|
|
"return_time": {"type": "date", "width": "180px"},
|
|
}
|
|
},
|
|
"query_params": query_params,
|
|
"table_exclude_field_name": ['record_id'],
|
|
"form_action_url": 'bv_usage_list',
|
|
"modify_url": reverse("bv_usage_list_modify"),
|
|
"add_url": reverse("bv_usage_list_add"),
|
|
"delete_url": reverse("bv_usage_list_delete"),
|
|
"add_button": True,
|
|
"import_excel_button": True
|
|
}
|
|
|
|
return render(request, 'items_list.html', context)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.add_businessvehicleusageregistry')
|
|
def bv_usage_list_add(request):
|
|
if request.method == 'POST':
|
|
form = BusinessVehicleUsageRegistryForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "添加成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
form = BusinessVehicleUsageRegistryForm()
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.change_businessvehicleusageregistry')
|
|
def bv_usage_list_modify(request):
|
|
if request.method == 'POST':
|
|
if 'id' in request.POST:
|
|
instance = BusinessVehicleUsageRegistry.objects.get(record_id=request.POST['id'])
|
|
form = BusinessVehicleUsageRegistryForm(request.POST, instance=instance)
|
|
else:
|
|
form = BusinessVehicleUsageRegistryForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "保存成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
if 'id' in request.GET:
|
|
try:
|
|
instance = BusinessVehicleUsageRegistry.objects.get(record_id=request.GET['id'])
|
|
form = BusinessVehicleUsageRegistryForm(instance=instance)
|
|
except BusinessVehicleUsageRegistry.DoesNotExist:
|
|
raise Http404("对象不存在")
|
|
else:
|
|
form = BusinessVehicleUsageRegistryForm()
|
|
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.delete_businessvehicleusageregistry')
|
|
def bv_usage_list_delete(request):
|
|
if request.method == 'GET':
|
|
target_id = request.GET.get('target_id')
|
|
BusinessVehicleUsageRegistry.objects.filter(record_id=target_id).delete()
|
|
return JsonResponse({"message": "删除成功"})
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.view_membershipaccountsregistry')
|
|
def mem_acc_list_view(request):
|
|
query_set = MembershipAccountsRegistry.objects.filter().order_by('-record_id')
|
|
platform_name = request.GET.get('platform_name', '')
|
|
status = request.GET.get('status', '')
|
|
|
|
if platform_name:
|
|
query_set = query_set.filter(platform_name__icontains=platform_name)
|
|
if status:
|
|
query_set = query_set.filter(status__icontains=status)
|
|
|
|
items = paginate_query_and_assign_numbers(request=request, queryset=query_set, per_page=10)
|
|
query_params = '&platform_name={}&status={}'.format(platform_name, status)
|
|
template_name = "资源管理-会员账号登记-Excel上传模板.xlsx"
|
|
|
|
context = {
|
|
"model_config": 'rsc_mgnt.MembershipAccountsRegistry',
|
|
"items": items,
|
|
"breadcrumb_list": [
|
|
{"title": "首页", "name": "index"},
|
|
{"title": "资源管理", "name": "index"},
|
|
{"title": "会员账号登记", "name": "mem_acc_list"}
|
|
],
|
|
"filters": [
|
|
{"type": "text", "id": "platform_name", "name": "platform_name", "label": "平台名称",
|
|
"placeholder": "请输入平台名称"},
|
|
{"type": "select", "id": "status", "name": "status", "label": "状态", "options": [
|
|
{"value": "有效", "display": "有效"}, {"value": "过期", "display": "过期"}
|
|
]}
|
|
],
|
|
"excel_upload_config": {
|
|
"template_name": template_name,
|
|
"template_url": reverse("dl_excel_tpl", kwargs={'template_name': template_name}),
|
|
"parse_url": reverse("ep_common_parse"),
|
|
"save_url": reverse("save_excel_table_data"),
|
|
"fields_preview_config": {
|
|
"platform_name": {"type": "text", "width": "180px"},
|
|
"purpose": {"type": "text", "width": "180px"},
|
|
"price": {"type": "number", "width": "180px"},
|
|
"manager": {"type": "text", "width": "180px"},
|
|
"account": {"type": "text", "width": "180px"},
|
|
"password": {"type": "password", "width": "180px"},
|
|
"effective_date": {"type": "date", "width": "180px"},
|
|
"expiration_date": {"type": "date", "width": "180px"},
|
|
"status": {"type": "text", "width": "180px"},
|
|
|
|
}
|
|
},
|
|
"query_params": query_params,
|
|
"table_exclude_field_name": ['record_id'],
|
|
"form_action_url": 'mem_acc_list',
|
|
"modify_url": reverse("mem_acc_list_modify"),
|
|
"add_url": reverse("mem_acc_list_add"),
|
|
"delete_url": reverse("mem_acc_list_delete"),
|
|
"add_button": True,
|
|
"import_excel_button": True
|
|
}
|
|
|
|
return render(request, 'items_list.html', context)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.add_membershipaccountsregistry')
|
|
def mem_acc_list_add(request):
|
|
if request.method == 'POST':
|
|
form = MembershipAccountsRegistryForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "添加成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
form = MembershipAccountsRegistryForm()
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.change_membershipaccountsregistry')
|
|
def mem_acc_list_modify(request):
|
|
if request.method == 'POST':
|
|
if 'id' in request.POST:
|
|
instance = MembershipAccountsRegistry.objects.get(record_id=request.POST['id'])
|
|
form = MembershipAccountsRegistryForm(request.POST, instance=instance)
|
|
else:
|
|
form = MembershipAccountsRegistryForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "保存成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
if 'id' in request.GET:
|
|
try:
|
|
instance = MembershipAccountsRegistry.objects.get(record_id=request.GET['id'])
|
|
form = MembershipAccountsRegistryForm(instance=instance)
|
|
except MembershipAccountsRegistry.DoesNotExist:
|
|
raise Http404("对象不存在")
|
|
else:
|
|
form = MembershipAccountsRegistryForm()
|
|
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.delete_membershipaccountsregistry')
|
|
def mem_acc_list_delete(request):
|
|
if request.method == 'GET':
|
|
target_id = request.GET.get('target_id')
|
|
MembershipAccountsRegistry.objects.filter(record_id=target_id).delete()
|
|
return JsonResponse({"message": "删除成功"})
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.view_storedvaluecardregistration')
|
|
def svc_reg_list_view(request):
|
|
query_set = StoredValueCardRegistration.objects.filter().order_by('-record_id')
|
|
merchant_name = request.GET.get('merchant_name', '')
|
|
|
|
if merchant_name:
|
|
query_set = query_set.filter(merchant_name__icontains=merchant_name)
|
|
|
|
items = paginate_query_and_assign_numbers(request=request, queryset=query_set, per_page=10)
|
|
query_params = '&merchant_name={}'.format(merchant_name)
|
|
template_name = "资源管理-储值卡登记-Excel上传模板.xlsx"
|
|
|
|
context = {
|
|
"model_config": 'rsc_mgnt.StoredValueCardRegistration',
|
|
"items": items,
|
|
"breadcrumb_list": [
|
|
{"title": "首页", "name": "index"},
|
|
{"title": "资源管理", "name": "index"},
|
|
{"title": "储值卡登记表", "name": "svc_reg_list"}
|
|
],
|
|
"filters": [
|
|
{"type": "text", "id": "merchant_name", "name": "merchant_name", "label": "商家名称",
|
|
"placeholder": "请输入商家名称"}
|
|
],
|
|
"excel_upload_config": {
|
|
"template_name": template_name,
|
|
"template_url": reverse("dl_excel_tpl", kwargs={'template_name': template_name}),
|
|
"parse_url": reverse("ep_common_parse"),
|
|
"save_url": reverse("save_excel_table_data_svc"),
|
|
"fields_preview_config": {
|
|
"merchant_name": {"type": "text", "width": "180px"},
|
|
"merchant_type": {"type": "text", "width": "180px"},
|
|
"balance": {"type": "number", "width": "180px"},
|
|
}
|
|
},
|
|
"query_params": query_params,
|
|
|
|
"form_action_url": 'svc_reg_list',
|
|
"table_exclude_field_name": ['record_id'],
|
|
"modify_url": reverse("svc_reg_list_modify"),
|
|
"add_url": reverse("svc_reg_list_add"),
|
|
"delete_url": reverse("svc_reg_list_delete"),
|
|
}
|
|
|
|
return render(request, 'svc_list.html', context)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.add_storedvaluecardregistration')
|
|
def svc_reg_list_add(request):
|
|
if request.method == 'POST':
|
|
form = StoredValueCardRegistrationForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "添加成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
form = StoredValueCardRegistrationForm()
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.change_storedvaluecardregistration')
|
|
def svc_reg_list_modify(request):
|
|
if request.method == 'POST':
|
|
if 'id' in request.POST:
|
|
instance = StoredValueCardRegistration.objects.get(record_id=request.POST['id'])
|
|
form = StoredValueCardRegistrationForm(request.POST, instance=instance)
|
|
else:
|
|
form = StoredValueCardRegistrationForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
form.save()
|
|
return JsonResponse({"message": "保存成功"})
|
|
else:
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html, "errors": form.errors}, status=400)
|
|
elif request.method == 'GET':
|
|
if 'id' in request.GET:
|
|
try:
|
|
instance = StoredValueCardRegistration.objects.get(record_id=request.GET['id'])
|
|
form = StoredValueCardRegistrationForm(instance=instance)
|
|
except StoredValueCardRegistration.DoesNotExist:
|
|
raise Http404("对象不存在")
|
|
else:
|
|
form = StoredValueCardRegistrationForm()
|
|
|
|
form_html = render_to_string('form_partial.html', {'form': form}, request)
|
|
return JsonResponse({"form_html": form_html})
|
|
else:
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
@login_required
|
|
@custom_permission_required('rsc_mgnt.delete_storedvaluecardregistration')
|
|
def svc_reg_list_delete(request):
|
|
if request.method == 'GET':
|
|
target_id = request.GET.get('target_id')
|
|
StoredValueCardRegistration.objects.filter(record_id=target_id).delete()
|
|
return JsonResponse({"message": "删除成功"})
|
|
return JsonResponse({"message": "无效的请求方法"}, status=405)
|
|
|
|
|
|
class StandardResultsSetPagination(PageNumberPagination):
|
|
page_size = 5
|
|
page_size_query_param = 'page_size'
|
|
max_page_size = 100
|
|
|
|
|
|
# 入库记录列表视图
|
|
@api_view(['GET'])
|
|
@permission_classes([IsAuthenticated])
|
|
def inbound_list(request):
|
|
inbounds = ConsumableGoodsInboundManagement.objects.all().order_by('inbound_id')
|
|
|
|
paginator = StandardResultsSetPagination()
|
|
paginated_inbounds = paginator.paginate_queryset(inbounds, request)
|
|
|
|
serializer = ConsumableGoodsInboundSerializer(paginated_inbounds, many=True)
|
|
return paginator.get_paginated_response(serializer.data)
|
|
|
|
|
|
# 添加入库记录视图
|
|
@api_view(['POST'])
|
|
@permission_classes([IsAuthenticated])
|
|
def add_inbound(request):
|
|
serializer = ConsumableGoodsInboundSerializer(data=request.data)
|
|
if serializer.is_valid():
|
|
inbound_record = serializer.save()
|
|
inventory = inbound_record.inventory
|
|
inventory.current_inventory += inbound_record.quantity
|
|
inventory.save()
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
# 编辑入库记录视图
|
|
@api_view(['PUT'])
|
|
@permission_classes([IsAuthenticated])
|
|
def edit_inbound(request, inbound_id):
|
|
inbound = get_object_or_404(ConsumableGoodsInboundManagement, pk=inbound_id)
|
|
serializer = ConsumableGoodsInboundSerializer(inbound, data=request.data, partial=True)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
return Response(serializer.data)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
# 删除入库记录视图
|
|
@api_view(['DELETE'])
|
|
@permission_classes([IsAuthenticated])
|
|
def delete_inbound(request, inbound_id):
|
|
inbound = get_object_or_404(ConsumableGoodsInboundManagement, pk=inbound_id)
|
|
inbound.delete()
|
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
|
|
|
|
|
# 出库记录列表视图
|
|
@api_view(['GET'])
|
|
@permission_classes([IsAuthenticated])
|
|
def outbound_list(request):
|
|
outbounds = ConsumableGoodsOutboundRecords.objects.all().order_by('outbound_id')
|
|
|
|
paginator = StandardResultsSetPagination()
|
|
paginated_outbounds = paginator.paginate_queryset(outbounds, request)
|
|
|
|
serializer = ConsumableGoodsOutboundSerializer(paginated_outbounds, many=True)
|
|
return paginator.get_paginated_response(serializer.data)
|
|
|
|
|
|
# 添加出库记录视图
|
|
@api_view(['POST'])
|
|
@permission_classes([IsAuthenticated])
|
|
def add_outbound(request):
|
|
serializer = ConsumableGoodsOutboundSerializer(data=request.data)
|
|
if serializer.is_valid():
|
|
outbound_record = serializer.save()
|
|
inventory = outbound_record.inventory
|
|
if inventory.current_inventory >= outbound_record.quantity_out:
|
|
inventory.current_inventory -= outbound_record.quantity_out
|
|
inventory.save()
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
else:
|
|
outbound_record.delete()
|
|
return Response({"detail": "库存不足,无法完成出库操作。"}, status=status.HTTP_400_BAD_REQUEST)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
# 编辑出库记录视图
|
|
@api_view(['PUT'])
|
|
@permission_classes([IsAuthenticated])
|
|
def edit_outbound(request, outbound_id):
|
|
outbound = get_object_or_404(ConsumableGoodsOutboundRecords, pk=outbound_id)
|
|
serializer = ConsumableGoodsOutboundSerializer(outbound, data=request.data, partial=True)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
return Response(serializer.data)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
# 删除出库记录视图
|
|
@api_view(['DELETE'])
|
|
@permission_classes([IsAuthenticated])
|
|
def delete_outbound(request, outbound_id):
|
|
outbound = get_object_or_404(ConsumableGoodsOutboundRecords, pk=outbound_id)
|
|
outbound.delete()
|
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
|
|
|
|
|
@api_view(['GET'])
|
|
@permission_classes([IsAuthenticated])
|
|
def stored_value_card_use_records(request, card_id):
|
|
try:
|
|
card = StoredValueCardRegistration.objects.get(pk=card_id)
|
|
except StoredValueCardRegistration.DoesNotExist:
|
|
return Response({"detail": "储值卡不存在"}, status=status.HTTP_404_NOT_FOUND)
|
|
|
|
use_records = StoredValueCardUseRecord.objects.filter(stored_value_card=card).order_by('-transaction_date')
|
|
paginator = StandardResultsSetPagination()
|
|
result_page = paginator.paginate_queryset(use_records, request)
|
|
serializer = StoredValueCardUseRecordSerializer(result_page, many=True)
|
|
return paginator.get_paginated_response(serializer.data)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([IsAuthenticated])
|
|
def add_stored_value_card_use_record(request):
|
|
# 提取传入数据
|
|
data = request.data.copy()
|
|
|
|
try:
|
|
card = StoredValueCardRegistration.objects.get(pk=data.get('stored_value_card'))
|
|
except StoredValueCardRegistration.DoesNotExist:
|
|
return Response({"detail": "储值卡不存在"}, status=status.HTTP_404_NOT_FOUND)
|
|
|
|
# 计算 current_balance
|
|
transaction_amount = float(data.get('transaction_amount'))
|
|
if data.get('transaction_type') == '充值':
|
|
current_balance = float(card.balance) + float(transaction_amount)
|
|
else: # 消费
|
|
current_balance = float(card.balance) - float(transaction_amount)
|
|
|
|
data['current_balance'] = current_balance
|
|
data['created_at'] = timezone.now().isoformat()
|
|
data['updated_at'] = timezone.now().isoformat()
|
|
|
|
# 序列化并验证数据
|
|
serializer = StoredValueCardUseRecordSerializer(data=data)
|
|
if serializer.is_valid():
|
|
record = serializer.save()
|
|
|
|
# 更新储值卡登记表的余额
|
|
if record.transaction_type == '充值':
|
|
card.balance += record.transaction_amount
|
|
else: # 消费
|
|
card.balance -= record.transaction_amount
|
|
|
|
card.save()
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|