XH_Digital_Management/application/org_mgnt/views.py

544 lines
21 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.utils.timezone import now
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.org_mgnt.forms import (
CompanyEntityForm,
PrimaryDepartmentForm,
SecondaryDepartmentForm
)
from application.org_mgnt.models import (
PrimaryDepartment,
SecondaryDepartment,
CompanyEntity,
CompanyBankAccount, EntityChangeRecord
)
from application.org_mgnt.serializers import (
EntityChangeRecordSerializer,
CompanyBankAccountSerializer
)
from common.auth import custom_permission_required
from common.utils.page_helper import paginate_query_and_assign_numbers
class StandardResultsSetPagination(PageNumberPagination):
page_size = 5
page_size_query_param = 'page_size'
max_page_size = 100
@custom_permission_required('org_mgnt.view_companyentity')
def eir_list_view(request):
"""
基础数据-组织管理-公司主体信息登记-列表页
"""
# 声明查询集
query_set = CompanyEntity.objects.filter().order_by('-entity_id')
# 获取查询参数
company_name = request.GET.get('company_name', '')
business_status = request.GET.get('business_status', '')
taxpayer_identification_number = request.GET.get('taxpayer_identification_number', '')
# 根据提供的参数进行筛选
if company_name:
query_set = query_set.filter(company_name__icontains=company_name)
if business_status:
query_set = query_set.filter(business_status=business_status)
if taxpayer_identification_number:
query_set = query_set.filter(taxpayer_identification_number__icontains=taxpayer_identification_number)
# 对查询结果进行分页每页10条记录
items = paginate_query_and_assign_numbers(
request=request,
queryset=query_set,
per_page=10
)
# 构建上下文查询参数字符串
query_params = '&company_name={}&business_status={}&taxpayer_identification_number={}'.format(
company_name, business_status, taxpayer_identification_number
)
# Excel上传模板
template_name = "组织管理-公司主体信息登记-Excel上传模板.xlsx"
# 构建上下文
context = {
"model_config": 'org_mgnt.CompanyEntity',
"items": items,
"breadcrumb_list": [
{"title": "首页", "name": "index"},
{"title": "组织管理", "name": "index"},
{"title": "公司主体信息登记表", "name": "eir_list"}
],
"filters": [
{"type": "text", "id": "company_name", "name": "company_name", "label": "公司名称",
"placeholder": "请输入公司名称"},
{"type": "select", "id": "business_status", "name": "business_status", "label": "公司经营状态",
"options": [{"value": "存续", "display": "存续"}, {"value": "注销", "display": "注销"}]},
{"type": "text", "id": "taxpayer_identification_number", "name": "taxpayer_identification_number",
"label": "纳税人识别号", "placeholder": "请输入纳税人识别号"}
],
"table_exclude_field_name": ['entity_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,
"form_action_url": 'eir_list',
"modify_url": reverse("eir_list_modify"),
"add_url": reverse("eir_list_add"),
"delete_url": reverse("eir_list_delete"),
}
return render(request, 'ce_list.html', context)
@custom_permission_required('org_mgnt.add_companyentity')
def eir_list_add(request):
"""
基础数据-组织管理-公司主体信息登记-添加页
"""
if request.method == 'POST':
form = CompanyEntityForm(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 = CompanyEntityForm()
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('org_mgnt.change_companyentity')
def eir_list_modify(request):
"""
基础数据-组织管理-公司主体信息登记-修改页
"""
if request.method == 'POST':
if 'id' in request.POST:
instance = CompanyEntity.objects.get(entity_id=request.POST['id'])
form = CompanyEntityForm(request.POST, instance=instance)
else:
form = CompanyEntityForm(request.POST)
if form.is_valid():
if 'id' in request.POST:
original_instance = CompanyEntity.objects.get(entity_id=request.POST['id'])
original_data = {field.name: getattr(original_instance, field.name) for field in
original_instance._meta.fields}
updated_instance = form.save(commit=False)
updated_data = {field.name: getattr(updated_instance, field.name) for field in
updated_instance._meta.fields}
if 'id' in request.POST:
changes = {field: (original_data[field], updated_data[field]) for field in original_data if
original_data[field] != updated_data[field]}
for field, (original_value, updated_value) in changes.items():
EntityChangeRecord.objects.create(
company_entity=instance,
change_date=now(),
change_type=f"修改 {field}",
content_before_change=str(original_value),
content_after_change=str(updated_value),
change_reason=request.POST.get('change_reason', '未提供变更原因'),
change_executed_by=request.user.username
)
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 = CompanyEntity.objects.get(entity_id=request.GET['id'])
form = CompanyEntityForm(instance=instance)
except CompanyEntity.DoesNotExist:
raise Http404("对象不存在")
else:
form = CompanyEntityForm()
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('org_mgnt.delete_companyentity')
def eir_list_delete(request):
"""
基础数据-组织管理-公司主体信息登记-删除
"""
target_id = request.POST.get('id')
if target_id:
CompanyEntity.objects.filter(entity_id=target_id).delete()
return JsonResponse({"message": "删除成功"})
else:
return JsonResponse({"message": "请求参数错误"}, status=400)
@api_view(['GET'])
@custom_permission_required('org_mgnt.view_entitychangerecord')
def change_record_list(request, entity_id):
"""
基础数据-组织管理-公司主体信息登记-变更记录
"""
entity = get_object_or_404(CompanyEntity, pk=entity_id)
change_records = entity.change_records.all().order_by('record_id')
paginator = StandardResultsSetPagination()
paginated_change_records = paginator.paginate_queryset(change_records, request)
serializer = EntityChangeRecordSerializer(paginated_change_records, many=True)
return paginator.get_paginated_response(serializer.data)
@api_view(['GET'])
@custom_permission_required('org_mgnt.view_companybankaccount')
def bank_account_list(request, entity_id):
"""
基础数据-组织管理-公司主体信息登记-银行账户
"""
entity = get_object_or_404(CompanyEntity, pk=entity_id)
bank_accounts = entity.bank_accounts.all().order_by('account_id')
paginator = StandardResultsSetPagination()
paginated_bank_accounts = paginator.paginate_queryset(bank_accounts, request)
serializer = CompanyBankAccountSerializer(paginated_bank_accounts, many=True)
response = paginator.get_paginated_response(serializer.data)
response_data = response.data
response_data['next_page'] = paginator.page.next_page_number() if paginator.page.has_next() else None
response_data['previous_page'] = paginator.page.previous_page_number() if paginator.page.has_previous() else None
return Response(response_data)
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def get_bank_account_details(request, account_id):
"""
基础数据-组织管理-公司主体信息登记-银行账户-详情
"""
bank_account = get_object_or_404(CompanyBankAccount, pk=account_id)
serializer = CompanyBankAccountSerializer(bank_account)
return Response(serializer.data)
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def add_bank_account(request, entity_id):
"""
基础数据-组织管理-公司主体信息登记-银行账户-新增
"""
entity = get_object_or_404(CompanyEntity, pk=entity_id)
serializer = CompanyBankAccountSerializer(data=request.data)
if serializer.is_valid():
serializer.save(company_entity=entity)
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 update_bank_account(request, account_id):
"""
基础数据-组织管理-公司主体信息登记-银行账户-修改
"""
bank_account = get_object_or_404(CompanyBankAccount, pk=account_id)
serializer = CompanyBankAccountSerializer(bank_account, 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_bank_account(request, account_id):
"""
基础数据-组织管理-公司主体信息登记-银行账户-删除
"""
bank_account = get_object_or_404(CompanyBankAccount, pk=account_id)
bank_account.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
@custom_permission_required('org_mgnt.view_primarydepartment')
def pd_list_view(request):
"""
基础数据-组织管理-一级部门表-列表
"""
# 声明查询集
query_set = PrimaryDepartment.objects.filter().order_by('-primary_department_id')
# 获取查询参数
department_name = request.GET.get('department_name', '')
# 根据提供的参数进行筛选
if department_name:
query_set = query_set.filter(department_name__icontains=department_name)
# 对查询结果进行分页每页10条记录
items = paginate_query_and_assign_numbers(
request=request,
queryset=query_set,
per_page=10
)
# 构建上下文查询参数字符串
query_params = '&department_name={}'.format(department_name)
# Excel上传模板
template_name = "组织管理-一级部门-Excel上传模板.xlsx"
# 构建上下文
context = {
"model_config": 'org_mgnt.PrimaryDepartment',
"items": items,
"breadcrumb_list": [
{"title": "首页", "name": "index"},
{"title": "组织管理", "name": "index"},
{"title": "一级部门表", "name": "pd_list"}
],
"filters": [
{"type": "text", "id": "department_name", "name": "department_name", "label": "一级部门名称",
"placeholder": "请输入一级部门名称"}
],
"table_exclude_field_name": ['primary_department_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,
"form_action_url": reverse('pd_list'),
"modify_url": reverse("pd_list_modify"),
"add_url": reverse("pd_list_add"),
"delete_url": reverse("pd_list_delete"),
"add_button": True
}
return render(request, 'items_list.html', context)
@custom_permission_required('org_mgnt.add_primarydepartment')
def pd_list_add(request):
"""
基础数据-组织管理-一级部门表-添加
"""
if request.method == 'POST':
form = PrimaryDepartmentForm(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 = PrimaryDepartmentForm()
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('org_mgnt.change_primarydepartment')
def pd_list_modify(request):
"""
基础数据-组织管理-一级部门表-修改
"""
if request.method == 'POST':
if 'id' in request.POST:
instance = PrimaryDepartment.objects.get(primary_department_id=request.POST['id'])
form = PrimaryDepartmentForm(request.POST, instance=instance)
else:
form = PrimaryDepartmentForm(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 = PrimaryDepartment.objects.get(primary_department_id=request.GET['id'])
form = PrimaryDepartmentForm(instance=instance)
except PrimaryDepartment.DoesNotExist:
raise Http404("对象不存在")
else:
form = PrimaryDepartmentForm()
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('org_mgnt.delete_primarydepartment')
def pd_list_delete(request):
"""
基础数据-组织管理-一级部门表-删除
"""
primary_department_id = request.POST.get('id')
if primary_department_id:
PrimaryDepartment.objects.filter(primary_department_id=primary_department_id).delete()
return JsonResponse({"message": "删除成功"})
else:
return JsonResponse({"message": "请求参数错误"}, status=400)
@custom_permission_required('org_mgnt.view_secondarydepartment')
def sd_list_view(request):
"""
基础数据-组织管理-二级部门表-查看
"""
# 声明查询集
query_set = SecondaryDepartment.objects.filter().order_by('-secondary_department_id')
# 获取查询参数
secondary_department_name = request.GET.get('secondary_department_name', '')
# 根据提供的参数进行筛选
if secondary_department_name:
query_set = query_set.filter(secondary_department_name__icontains=secondary_department_name)
# 对查询结果进行分页每页10条记录
items = paginate_query_and_assign_numbers(
request=request,
queryset=query_set,
per_page=10
)
# 构建上下文查询参数字符串
query_params = '&secondary_department_name={}'.format(secondary_department_name)
# Excel上传模板
template_name = "组织管理-二级部门-Excel上传模板.xlsx"
# 构建上下文
context = {
"model_config": 'org_mgnt.SecondaryDepartment',
"items": items,
"breadcrumb_list": [
{"title": "首页", "name": "index"},
{"title": "组织管理", "name": "index"},
{"title": "二级部门表", "name": "sd_list"}
],
"filters": [
{"type": "text", "id": "secondary_department_name", "name": "secondary_department_name",
"label": "二级部门名称", "placeholder": "请输入二级部门名称"}
],
"table_exclude_field_name": ['secondary_department_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,
"form_action_url": reverse('sd_list'),
"modify_url": reverse("sd_list_modify"),
"add_url": reverse("sd_list_add"),
"delete_url": reverse("sd_list_delete"),
"add_button": True
}
return render(request, 'items_list.html', context)
@custom_permission_required('org_mgnt.add_secondarydepartment')
def sd_list_add(request):
"""
基础数据-组织管理-二级部门表-添加
"""
if request.method == 'POST':
form = SecondaryDepartmentForm(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 = SecondaryDepartmentForm()
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('org_mgnt.change_secondarydepartment')
def sd_list_modify(request):
"""
基础数据-组织管理-二级部门表-修改
"""
if request.method == 'POST':
if 'id' in request.POST:
instance = SecondaryDepartment.objects.get(secondary_department_id=request.POST['id'])
form = SecondaryDepartmentForm(request.POST, instance=instance)
else:
form = SecondaryDepartmentForm(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 = SecondaryDepartment.objects.get(secondary_department_id=request.GET['id'])
form = SecondaryDepartmentForm(instance=instance)
except SecondaryDepartment.DoesNotExist:
raise Http404("对象不存在")
else:
form = SecondaryDepartmentForm()
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('org_mgnt.delete_secondarydepartment')
def sd_list_delete(request):
"""
基础数据-组织管理-二级部门表-删除
"""
secondary_department_id = request.GET.get('id')
if secondary_department_id:
SecondaryDepartment.objects.filter(secondary_department_id=secondary_department_id).delete()
return JsonResponse({"message": "删除成功"})
else:
return JsonResponse({"message": "请求参数错误"}, status=400)