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.views.decorators.http import require_http_methods 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 @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") }, "query_params": query_params, "table_exclude_field_name": ['category_id'], "form_action_url": reverse('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) @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) @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) @require_http_methods(["POST"]) @custom_permission_required('rsc_mgnt.delete_consumablegoodscategory') def cg_cat_list_delete(request): """ 基础数据-资源管理-消耗品类别管理-删除 """ target_id = request.POST.get('id') if target_id: ConsumableGoodsCategory.objects.filter(category_id=target_id).delete() return JsonResponse({"message": "删除成功"}) else: return JsonResponse({"message": "请求参数错误"}, status=400) @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") }, "query_params": query_params, "table_exclude_field_name": ['inventory_id'], "form_action_url": reverse('cg_inv_list'), "modify_url": reverse("cg_inv_list_modify"), "add_url": reverse("cg_inv_list_add"), "delete_url": reverse("cg_inv_list_delete"), "add_button": True, "import_excel_button": True } return render(request, 'cg_list_inherit.html', context) @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) @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) @require_http_methods(["POST"]) @custom_permission_required('rsc_mgnt.delete_consumablegoodsinventory') def cg_inv_list_delete(request): """ 基础数据-资源管理-消耗品库存管理-删除 """ target_id = request.POST.get('id') if target_id: ConsumableGoodsInventory.objects.filter(inventory_id=target_id).delete() return JsonResponse({"message": "删除成功"}) else: return JsonResponse({"message": "请求参数错误"}, status=400) @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") }, "query_params": query_params, "table_exclude_field_name": ['record_id'], "form_action_url": reverse('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) @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) @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) @require_http_methods(["POST"]) @custom_permission_required('rsc_mgnt.delete_companymobilephoneusageregistry') def cmp_phone_reg_list_delete(request): """ 基础数据-资源管理-公司手机号使用登记-删除 """ target_id = request.POST.get('id') if target_id: CompanyMobilePhoneUsageRegistry.objects.filter(record_id=target_id).delete() return JsonResponse({"message": "删除成功"}) else: return JsonResponse({"message": "请求参数错误"}, status=400) @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") }, "query_params": query_params, "table_exclude_field_name": ['record_id'], "form_action_url": reverse('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) @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) @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) @require_http_methods(["POST"]) @custom_permission_required('rsc_mgnt.delete_businessvehicleusageregistry') def bv_usage_list_delete(request): """ 基础数据-资源管理-商务车使用登记-删除 """ target_id = request.POST.get('id') if target_id: BusinessVehicleUsageRegistry.objects.filter(record_id=target_id).delete() return JsonResponse({"message": "删除成功"}) else: return JsonResponse({"message": "请求参数错误"}, status=400) @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") }, "query_params": query_params, "table_exclude_field_name": ['record_id'], "form_action_url": reverse('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) @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) @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) @require_http_methods(["POST"]) @custom_permission_required('rsc_mgnt.delete_membershipaccountsregistry') def mem_acc_list_delete(request): """ 基础数据-资源管理-会员账号登记-删除 """ target_id = request.POST.get('id') if target_id: MembershipAccountsRegistry.objects.filter(record_id=target_id).delete() return JsonResponse({"message": "删除成功"}) else: return JsonResponse({"message": "请求参数错误"}, status=400) @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") }, "query_params": query_params, "form_action_url": reverse('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"), "add_button": True, "import_excel_button": True } return render(request, 'svc_list_inherit.html', context) @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) @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) @require_http_methods(["POST"]) @custom_permission_required('rsc_mgnt.delete_storedvaluecardregistration') def svc_reg_list_delete(request): """ 基础数据-资源管理-储值卡登记表-删除 """ target_id = request.POST.get('id') if target_id: StoredValueCardRegistration.objects.filter(record_id=target_id).delete() return JsonResponse({"message": "删除成功"}) else: return JsonResponse({"message": "请求参数错误"}, status=400) 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)