570 lines
22 KiB
Python
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)
|
|
|