XH_Digital_Management/application/rsc_mgnt/views.py

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_url": reverse("download_template", kwargs={'template_name': template_name}),
"parse_url": reverse("common_excel_parse"),
"save_url": reverse("save_excel_table_data"),
"fields_preview_config": {
"category_id": {"type": "text", "width": "180px"},
"category_name": {"type": "text", "width": "180px"},
"description": {"type": "text", "width": "180px"},
"actions": {"type": "actions", "width": "100px"}
}
},
"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"),
}
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_url": reverse("download_template", kwargs={'template_name': template_name}),
"parse_url": reverse("common_excel_parse"),
"save_url": reverse("save_excel_table_data"),
"fields_preview_config": {
"inventory_id": {"type": "text", "width": "180px"},
"item": {"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"},
"actions": {"type": "actions", "width": "100px"}
}
},
"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={}&current_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_url": reverse("download_template", kwargs={'template_name': template_name}),
"parse_url": reverse("common_excel_parse"),
"save_url": reverse("save_excel_table_data"),
"fields_preview_config": {
"record_id": {"type": "text", "width": "180px"},
"mobile_number": {"type": "text", "width": "180px"},
"owner": {"type": "text", "width": "180px"},
"current_user": {"type": "text", "width": "180px"},
"purpose": {"type": "text", "width": "180px"},
"actions": {"type": "actions", "width": "100px"}
}
},
"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"),
}
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_url": reverse("download_template", kwargs={'template_name': template_name}),
"parse_url": reverse("common_excel_parse"),
"save_url": reverse("save_excel_table_data"),
"fields_preview_config": {
"record_id": {"type": "text", "width": "180px"},
"license_plate": {"type": "text", "width": "180px"},
"checkout_time": {"type": "datetime", "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": "datetime", "width": "180px"},
"actions": {"type": "actions", "width": "100px"}
}
},
"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"),
}
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_url": reverse("download_template", kwargs={'template_name': template_name}),
"parse_url": reverse("common_excel_parse"),
"save_url": reverse("save_excel_table_data"),
"fields_preview_config": {
"record_id": {"type": "text", "width": "180px"},
"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": "select", "width": "180px", "options": [
{"value": "有效", "display": "有效"}, {"value": "过期", "display": "过期"}
]},
"actions": {"type": "actions", "width": "100px"}
}
},
"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"),
}
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_url": reverse("download_template", kwargs={'template_name': template_name}),
"parse_url": reverse("common_excel_parse"),
"save_url": reverse("save_excel_table_data"),
"fields_preview_config": {
"record_id": {"type": "text", "width": "180px"},
"merchant_name": {"type": "text", "width": "180px"},
"merchant_type": {"type": "text", "width": "180px"},
"balance": {"type": "number", "width": "180px"},
"usage_records": {"type": "textarea", "width": "180px"},
"actions": {"type": "actions", "width": "100px"}
}
},
"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)