Files
jyls_django/finance/views.py
Administrator b891d2369b gagreg
2025-12-24 13:51:20 +08:00

570 lines
22 KiB
Python

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
import json
import ast
from User.models import User,Approval
import datetime
from .models import Invoice,Income,Accounts,Payment,Reimbursement,BonusChange
from utility.utility import flies
from django.contrib.sessions.backends.db import SessionStore
from django.db.models import Count, Q
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
class UserRegister(APIView):
def post(self, request, *args, **kwargs):
"""
财务登记
:param request:
:param args:
:param kwargs:
:return:
"""
username = request.data.get('username')
card = request.data.get('card')
Dateofjoining = request.data.get('Dateofjoining')
position = request.data.get('position')
salary = request.data.get('salary')
personincharge = request.data.get('personincharge')
if not all([username, card, Dateofjoining, position, salary]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Dateofjoinings = datetime.datetime.strptime(Dateofjoining, "%Y-%m-%d")
user = User.objects.get(username=username)
user.card = card
user.salary = salary
user.username = username
user.Dateofjoining = Dateofjoinings
user.position = position
user.state="待确认"
today = datetime.datetime.now()
formatted_date = today.strftime("%Y-%m-%d")
Approval.objects.create(
title=username+"入职财务登记",
content=username+""+Dateofjoining+"办理入职,身份证:"+card+",岗位:"+position+"薪资:"+salary,
times=formatted_date,
personincharge=personincharge,
state='审核中',
type="入职财务登记",
user_id=user.id
)
user.save(update_fields=['card', 'salary', 'username', 'Dateofjoining', 'position'])
return Response({'message': '登记成功', 'code': 0}, status=status.HTTP_200_OK)
class issueAnInvoice(APIView):
def post(self, request, *args, **kwargs):
"""
财务开票
:param request:
:param args:
:param kwargs:
:return:
"""
token = request.META.get('token')
ContractNo = request.data.get('ContractNo')
personincharge = request.data.get('personincharge')
amount = request.data.get('amount')
type = request.data.get('type')
unit = request.data.get('unit')
number = request.data.get('number')
address_telephone = request.data.get('address_telephone')
bank = request.data.get('bank')
username = request.data.get('username')
if not all([token, ContractNo, personincharge, amount, type, unit, number, address_telephone, bank,username]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
today = datetime.datetime.now()
formatted_date = today.strftime("%Y-%m-%d")
invoice = Invoice.objects.create(
ContractNo=ContractNo,
personincharge=personincharge,
amount=amount,
type=type,
unit=unit,
number=number,
address_telephone=address_telephone,
bank=bank,
state="审核中",
username=username,
times=formatted_date,
)
Approval.objects.create(
title=username+"申请开票",
content=""+formatted_date+"的时候审核开发票",
times=formatted_date,
personincharge=personincharge,
state="审核中",
type="开票",
user_id = invoice.id
)
return Response({'message': '提交成功', 'code': 0}, status=status.HTTP_200_OK)
class issueAnInvoiceDetail(APIView):
def post(self, request, *args, **kwargs):
"""
开票记录详情
"""
page = request.data.get('page')
per_page = request.data.get('per_page')
times = request.data.get('times')
end_time = request.data.get('end_time')
unit = request.data.get('unit')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
if times and end_time:
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if unit:
Q_obj &= Q(unit__icontains=unit)
invos = Invoice.objects.filter(Q_obj)
total = len(invos)
paginator = Paginator(invos, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
itme = {
'id': info.id,
"ContractNo": info.ContractNo,
"personincharge": info.personincharge,
"amount": info.amount,
"type": info.type,
"unit": info.unit,
"number": info.number,
"address_telephone": info.address_telephone,
"bank": info.bank,
"state": info.state,
"username": info.username,
"times": info.times,
}
data.append(itme)
return Response({'message': '展示成功',"total":total,'data':data, 'code': 0}, status=status.HTTP_200_OK)
class confirm(APIView):
def post(self, request, *args, **kwargs):
"""
收入确认
:param request:
:param args:
:param kwargs:
:return:
"""
times = request.data.get('times')
ContractNo = request.data.get('ContractNo')
CustomerID = request.data.get('CustomerID')
amount = request.data.get('amount')
allocate = request.data.get('allocate')
token = request.META.get('token')
personincharge = request.data.get('personincharge')
user = User.objects.get(token=token)
if not all([times, ContractNo, CustomerID, amount, allocate]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
from datetime import datetime
now = datetime.now()
# 格式化日期为字符串,格式为 YYYY-MM-DD
date_string = now.strftime("%Y-%m-%d")
income = Income.objects.create(
times=times,
ContractNo=ContractNo,
CustomerID=CustomerID,
amount=amount,
allocate=allocate,
submit=user.username,
submit_tiem=date_string,
state="审核中"
)
Approval.objects.create(
title=user.username + "提交收入确认",
content=user.username + "" + times + "提交了收入确认,合同编号:" + ContractNo + ",客户名称:" + CustomerID + "收入金额:" + amount,
times=date_string,
personincharge=personincharge,
state='审核中',
type="收入确认",
user_id=income.id
)
return Response({'message': '插入成功' ,'code': 0}, status=status.HTTP_200_OK)
class confirmdisplay(APIView):
def post(self, request, *args, **kwargs):
"""
收入确认展示
"""
page = request.data.get('page')
per_page = request.data.get('per_page')
times = request.data.get('times')
end_time = request.data.get('end_time')
CustomerID = request.data.get('CustomerID')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
if times and end_time:
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if CustomerID:
Q_obj &= Q(CustomerID__icontains=CustomerID)
income = Income.objects.filter(Q_obj)
total = len(income)
paginator = Paginator(income, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
itme = {
'id': info.id,
"times": info.times,
"ContractNo": info.ContractNo,
"CustomerID": info.CustomerID,
"amount": info.amount,
"allocate": info.allocate,
"state": info.state,
}
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)
class loan(APIView):
def post(self, request, *args, **kwargs):
"""
调账申请
:param request:
:param args:
:param kwargs:
:return:
"""
times = request.data.get('times')
ContractNo = request.data.get('ContractNo')
CustomerID = request.data.get('CustomerID')
amount = request.data.get('amount')
situation = request.data.get('situation')
personincharge = request.data.get('personincharge')
token = request.META.get('token')
if not all([times, ContractNo, amount, situation,CustomerID,personincharge]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
from datetime import datetime
now = datetime.now()
# 格式化日期为字符串,格式为 YYYY-MM-DD
date_string = now.strftime("%Y-%m-%d")
user = User.objects.get(token=token)
acc = Accounts.objects.create(
times=times,
ContractNo=ContractNo,
CustomerID=CustomerID,
amount=amount,
situation=situation,
submit=user.username,
submit_tiem=date_string,
state="审核中"
)
Approval.objects.create(
title=user.username + "提交调账申请",
content=user.username + "" + times + "提交了调账申请,合同编号:" + ContractNo + ",客户名称:" + CustomerID + "收入金额:" + amount,
times=date_string,
personincharge=personincharge,
state='审核中',
type="调账申请",
user_id=acc.id
)
return Response({'message': '插入成功' ,'code': 0}, status=status.HTTP_200_OK)
class loandisplay(APIView):
def post(self, request, *args, **kwargs):
page = request.data.get('page')
per_page = request.data.get('per_page')
times = request.data.get('times')
end_time = request.data.get('end_time')
CustomerID = request.data.get('CustomerID')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
if times and end_time:
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if CustomerID:
Q_obj &= Q(CustomerID__icontains=CustomerID)
acc = Accounts.objects.filter(Q_obj)
total = len(acc)
paginator = Paginator(acc, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
itme = {
'id': info.id,
"times": info.times,
"ContractNo": info.ContractNo,
"CustomerID": info.CustomerID,
"amount": info.amount,
"situation": info.situation,
"state": info.state,
}
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)
class PaymentRequest(APIView):
def post(self, request, *args, **kwargs):
"""
付款申请
:param request:
:param args:
:param kwargs:
:return:
"""
reason = request.data.get('reason')
amount = request.data.get('amount')
times = request.data.get('times')
payee = request.data.get('payee')
bankcard = request.data.get('bankcard')
BankName = request.data.get('BankName')
applicant= request.data.get('applicant')
personincharge = request.data.get('personincharge')
if not all([times, payee, bankcard, BankName, personincharge,reason,amount]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
from datetime import datetime
now = datetime.now()
# 格式化日期为字符串,格式为 YYYY-MM-DD
date_string = now.strftime("%Y-%m-%d")
pay = Payment.objects.create(
reason=reason,
amount=amount,
times=times,
payee=payee,
bankcard=bankcard,
BankName=BankName,
applicant=applicant,
submit_tiem=date_string,
state="审核中"
)
Approval.objects.create(
title=applicant + "提交付款申请",
content=applicant + "" + times + "提交了付款申请,付款理由:" + reason + ",付款金额:" + amount + ",付款日期:" + times+",收款人:"+payee+",银行卡:"+bankcard+",开户行:"+BankName,
times=date_string,
personincharge=personincharge,
state='审核中',
type="付款申请",
user_id=pay.id
)
return Response({'message': '插入成功' ,'code': 0}, status=status.HTTP_200_OK)
class PaymentDisplay(APIView):
def post(self, request, *args, **kwargs):
page = request.data.get('page')
per_page = request.data.get('per_page')
times = request.data.get('times')
end_time = request.data.get('end_time')
payee = request.data.get('payee')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
if times and end_time:
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if payee:
Q_obj &= Q(payee__icontains=payee)
pay = Payment.objects.filter(Q_obj)
total = len(pay)
paginator = Paginator(pay, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
itme = {
'id': info.id,
"times": info.times,
"payee": info.payee,
"reason": info.reason,
"amount": info.amount,
"bankcard": info.bankcard,
"BankName": info.BankName,
"applicant": info.applicant,
"state": info.state,
}
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)
class reimbursement(APIView):
def post(self, request, *args, **kwargs):
"""
报销
:param request:
:param args:
:param kwargs:
:return:
"""
person = request.data.get('person')
times = request.data.get('times')
reason = request.data.get('reason')
amount = request.data.get('amount')
FeeDescription = request.data.get('FeeDescription')
personincharge = request.data.get('personincharge')
if not all([person,times, reason, amount, FeeDescription, personincharge]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
from datetime import datetime
now = datetime.now()
reim = Reimbursement.objects.create(
person=person,
times=times,
reason=reason,
amount=amount,
FeeDescription=FeeDescription,
submit_tiem=now.strftime("%Y-%m-%d"),
state="审核中"
)
Approval.objects.create(
title=person + "报销申请",
content=person + "" + times + "提交了报销申请,报销理由:" + reason + ",付款金额:" + amount + ",付款日期:" + times + ",费用说明:" + FeeDescription,
times=times,
personincharge=personincharge,
state='审核中',
type="报销申请",
user_id=reim.id
)
return Response({'message': '插入成功', 'code': 0}, status=status.HTTP_200_OK)
class reimbursementdetail(APIView):
def post(self, request, *args, **kwargs):
page = request.data.get('page')
per_page = request.data.get('per_page')
times = request.data.get('times')
end_time = request.data.get('end_time')
person = request.data.get('person')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
if times and end_time:
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if person:
Q_obj &= Q(person__icontains=person)
rei = Reimbursement.objects.filter(Q_obj)
total = len(rei)
paginator = Paginator(rei, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
itme = {
"id": info.id,
"times": info.times,
"person": info.person,
"reason": info.reason,
"amount": info.amount,
"FeeDescription": info.FeeDescription,
"state": info.state,
}
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)
class Change(APIView):
def post(self, request, *args, **kwargs):
"""
工资/奖金变更
:param request:
:param args:
:param kwargs:
:return:
"""
username = request.data.get('username')
type = request.data.get('type')
Instructions = request.data.get('Instructions')
personincharge = request.data.get('personincharge')
if not all([username, type, Instructions]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
from datetime import datetime
now = datetime.now()
bonus = BonusChange.objects.create(
username=username,
type=type,
Instructions=Instructions,
times=now.strftime("%Y-%m-%d"),
state="审核中"
)
Approval.objects.create(
title=username + "工资/奖金变更",
content=username + "" + now.strftime('%Y-%m-%d"') + "提交了工资/奖金变更,类型:" + type + ",调整说明:" + Instructions,
times=now.strftime("%Y-%m-%d"),
personincharge=personincharge,
state='审核中',
type="工资/奖金变更",
user_id=bonus.id
)
return Response({'message': '插入成功', 'code': 0}, status=status.HTTP_200_OK)
class ChangeDetail(APIView):
def post(self, request, *args, **kwargs):
page = request.data.get('page')
per_page = request.data.get('per_page')
times = request.data.get('times')
end_time = request.data.get('end_time')
username = request.data.get('username')
if not all([page, per_page]):
return Response({'status': 'error', 'message': '缺少参数', 'code': 1}, status=status.HTTP_400_BAD_REQUEST)
Q_obj = Q()
if times and end_time:
Q_obj &= Q(times__gte=times) & Q(times__lte=end_time)
if username:
Q_obj &= Q(username__icontains=username)
bon = BonusChange.objects.filter(Q_obj)
total = len(bon)
paginator = Paginator(bon, per_page)
try:
user_agents_page = paginator.page(page)
except PageNotAnInteger:
user_agents_page = paginator.page(1)
except EmptyPage:
user_agents_page = paginator.page(paginator.num_pages)
data = []
for info in user_agents_page.object_list:
itme = {
"id": info.id,
"times": info.times,
"type": info.type,
"Instructions": info.Instructions,
"username": info.username,
}
data.append(itme)
return Response({'message': '展示成功', "total": total, 'data': data, 'code': 0}, status=status.HTTP_200_OK)