You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
7.5 KiB
143 lines
7.5 KiB
from sqlalchemy import or_
|
|
|
|
from utils.PageHepler import db_page
|
|
from utils.apiDoc import *
|
|
from utils.configOperatingTypeHelper import GetApproveTypeApproving, GetApproveTypeApproved, GetApproveTypeOverrule
|
|
import pandas as pd
|
|
|
|
|
|
@approve.route('/add')
|
|
class ApproveAdd(Resource):
|
|
@staticmethod
|
|
def post():
|
|
approve_people = verify_jwt_username(request.headers.get('X-Token'))
|
|
remark = request.json['remark']
|
|
approve_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
approve_status = ReagtApproveStatus.query.filter_by(StatusCode=GetApproveTypeApproving()).first().StatusId
|
|
for item in request.json['approveList']:
|
|
data = Dict2Obj(item)
|
|
reagent_approve = ReagtApprove(ApproveName=data.Name,
|
|
Specification=data.Specification,
|
|
Maker=data.Maker if 'Maker' in item.keys() else "",
|
|
Number=data.InputNumber,
|
|
ApprovePeople=approve_people,
|
|
ApproveTime=approve_time,
|
|
Unit=data.Unit,
|
|
ApproveStatus=approve_status,
|
|
Remark=remark)
|
|
db.session.add(reagent_approve)
|
|
db.session.commit()
|
|
return SuccessResponse(ResultCode.SUCCESS, None, None)
|
|
|
|
|
|
@approve.route('/list')
|
|
class ApproveList(Resource):
|
|
@staticmethod
|
|
def get():
|
|
approve_status = ReagtApproveStatus.query.filter_by(StatusCode=request.args.get('status')).first().StatusId
|
|
approve_filter = db.session.query(ReagtApprove.ApproveName,
|
|
ReagtApprove.ApproveId,
|
|
ReagtApprove.ApproveTime,
|
|
ReagtApprove.Maker,
|
|
ReagtApprove.Specification,
|
|
ReagtApprove.Number,
|
|
ReagtApprove.Unit,
|
|
ReagtApprove.ApproveTime,
|
|
ReagtApprove.ApprovePeople,
|
|
ReagtApproveStatus.StatusCode,
|
|
ReagtApprove.Verifier,
|
|
ReagtApprove.VerifyTime) \
|
|
.join(ReagtApproveStatus, ReagtApproveStatus.StatusId == ReagtApprove.ApproveStatus).filter(
|
|
ReagtApprove.ApproveStatus == approve_status)
|
|
data_list = db_page(approve_filter, ReagtApprove.ApproveTime, request.args, 6)
|
|
if request.args.get('pageSize') is not None:
|
|
data_list = db_page(approve_filter, ReagtApprove.ApproveTime, request.args,
|
|
int(request.args.get('pageSize')))
|
|
return SuccessResponse(ResultCode.SUCCESS, {'totalNumber': approve_filter.count(),
|
|
'list': data_list}, None)
|
|
|
|
|
|
@approve.route('/agree')
|
|
class ApproveAgree(Resource):
|
|
@staticmethod
|
|
def post():
|
|
people = verify_jwt_username(request.headers.get('X-Token'))
|
|
approve_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
Name, Specification, Maker, Number, Unit, ApprovePeople, Checker, Purchase, Leader, ApproveTime = [], [], [], [], [], \
|
|
[], [], [], [], []
|
|
approve_status = ReagtApproveStatus.query.filter_by(StatusCode=GetApproveTypeApproved()).first().StatusId
|
|
for item in request.json['approveList']:
|
|
data = Dict2Obj(item)
|
|
approve_entity = ReagtApprove.query.filter_by(ApproveId=data.ApproveId).first()
|
|
Name.append(approve_entity.ApproveName)
|
|
ApprovePeople.append(approve_entity.ApprovePeople)
|
|
Specification.append(approve_entity.Specification)
|
|
Maker.append(approve_entity.Maker)
|
|
ApproveTime.append(approve_entity.ApproveTime)
|
|
Number.append(approve_entity.Number)
|
|
Unit.append(approve_entity.Unit)
|
|
Purchase.append('')
|
|
Leader.append('')
|
|
Checker.append('')
|
|
approve_entity.ApproveStatus = approve_status
|
|
approve_entity.Verifier = people
|
|
approve_entity.VerifyTime = approve_time
|
|
db.session.commit()
|
|
dit = {'耗材名': Name, '耗材规格': Specification, '生产厂家': Maker, '欲购数量': Number, '耗材单位': Unit,
|
|
'申请人': ApprovePeople, '申请时间': ApproveTime, '审核人': Checker, '采购人': Purchase, '分管领导': Leader}
|
|
writer = pd.ExcelWriter('./file/'+approve_time.replace(':', '-')+'.xlsx')
|
|
df = pd.DataFrame(dit)
|
|
# columns参数用于指定生成的excel中列的顺序
|
|
df.to_excel(writer, columns=['耗材名', '耗材规格', '生产厂家', '欲购数量', '耗材单位', '申请人', '申请时间', '审核人', '采购人', '分管领导'], index=False, encoding='utf-8',
|
|
sheet_name='欲购耗材清单')
|
|
writer.save()
|
|
return SuccessResponse(ResultCode.SUCCESS, approve_time.replace(':', '-'), None)
|
|
|
|
|
|
@approve.route('/delete')
|
|
class ApproveDelete(Resource):
|
|
@staticmethod
|
|
def get():
|
|
db.session.delete(ReagtApprove.query.filter_by(ApproveId=request.args.get('ApproveId')).first())
|
|
db.session.commit()
|
|
return SuccessResponse(ResultCode.SUCCESS, None, None)
|
|
|
|
|
|
@approve.route('/overrule')
|
|
class ApproveOverrule(Resource):
|
|
@staticmethod
|
|
def get():
|
|
approve_status = ReagtApproveStatus.query.filter_by(StatusCode=GetApproveTypeOverrule()).first().StatusId
|
|
approve_entity = ReagtApprove.query.filter_by(ApproveId=request.args.get('ApproveId')).first()
|
|
approve_entity.ApproveStatus = approve_status
|
|
db.session.commit()
|
|
return SuccessResponse(ResultCode.SUCCESS, None, None)
|
|
|
|
|
|
@approve.route('/time')
|
|
class ApproveTime(Resource):
|
|
@staticmethod
|
|
def get():
|
|
approve_filter = db.session.query(ReagtApprove.VerifyTime).group_by(ReagtApprove.VerifyTime).distinct()
|
|
result_data = db_page(approve_filter, ReagtApprove.VerifyTime, request.args, 6)
|
|
return SuccessResponse(ResultCode.SUCCESS, {'totalNumber': approve_filter.count(),
|
|
'list': result_data}, None)
|
|
|
|
|
|
@approve.route('/submitList')
|
|
class SubmitList(Resource):
|
|
@staticmethod
|
|
def get():
|
|
inventoryListFilter = db.session.query(ReagtReagent.Name, ReagtReagent.Specification). \
|
|
filter(ReagtReagent.Using == True). \
|
|
group_by(ReagtReagent.Name, ReagtReagent.Specification).distinct()
|
|
if request.args.get('query') is not None and request.args.get('query') != '':
|
|
inventoryListFilter = db.session.query(ReagtReagent.Name, ReagtReagent.Specification). \
|
|
group_by(ReagtReagent.Name, ReagtReagent.Specification). \
|
|
filter(ReagtReagent.Using == True). \
|
|
filter(or_(ReagtReagent.Name.contains(request.args.get('query')), ReagtReagent.Specification
|
|
.contains(request.args.get('query')),
|
|
ReagtReagent.PinYinCode.contains(request.args.get('query')))).distinct()
|
|
result_data = db_page(inventoryListFilter, ReagtReagent.Name, request.args, 10)
|
|
return SuccessResponse(ResultCode.SUCCESS, {'totalNumber': inventoryListFilter.count(),
|
|
'list': result_data}, None)
|
|
|