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.
119 lines
6.1 KiB
119 lines
6.1 KiB
from sqlalchemy import or_, func
|
|
from utils.apiDoc import *
|
|
from utils.configOperatingTypeHelper import *
|
|
|
|
entity_filter = db.session.query(ReagtLog.ReagentName,
|
|
ReagtLog.ReagentSpecification,
|
|
ReagtLog.OperatingType,
|
|
ReagtLog.ReagentNumber,
|
|
ReagtLog.OperatingTime,
|
|
ReagtLog.OperateMinNumber,
|
|
ReagtLog.ReagentPosition,
|
|
ReagtLog.PinYinCode,
|
|
ReagtLog.ProductionBatch,
|
|
ReagtLog.Expiration,
|
|
ReagtLog.Code,
|
|
ReagtLog.BarCode,
|
|
ReagtLog.OperatingPeople,
|
|
ReagtLog.SupplierName,
|
|
ReagtLog.Remark,
|
|
ReagtReagent.Unit,
|
|
ReagtReagent.UnitPrice,
|
|
ReagtReagent.Maker,
|
|
ReagtReagent.SmallestUnit). \
|
|
join(ReagtReagent, ReagtReagent.ReagentId == ReagtLog.ReagentId, isouter=True)
|
|
|
|
|
|
def list_diff_two_query(query, query2, start_date, end_start):
|
|
return entity_filter. \
|
|
filter(query). \
|
|
filter(query2). \
|
|
filter(ReagtLog.OperatingTime >= start_date). \
|
|
filter(ReagtLog.OperatingTime <= end_start)
|
|
|
|
|
|
def list_diff(query, start_date, end_start):
|
|
return entity_filter. \
|
|
filter(query). \
|
|
filter(ReagtLog.OperatingTime >= start_date). \
|
|
filter(ReagtLog.OperatingTime <= end_start)
|
|
|
|
|
|
def export_diff(data):
|
|
start_date = data.get('startDate') if data.get('startDate') is not None else (datetime.now() -
|
|
timedelta(days=10))
|
|
end_data = data.get('endDate') if data.get('endDate') is not None else datetime.now()
|
|
if data.get('query') is not None:
|
|
reagentLogFilter = list_diff_two_query(or_(ReagtLog.Code.contains(data['query']),
|
|
ReagtLog.OperatingPeople.contains(
|
|
(data['query'])),
|
|
ReagtLog.Remark.contains(data['query']),
|
|
ReagtLog.ReagentName.contains(data['query']),
|
|
ReagtLog.ReagentPosition.contains(
|
|
data['query']),
|
|
ReagtLog.ReagentSpecification.contains(
|
|
data['query']))
|
|
, ReagtLog.OperatingType == data['index'],
|
|
start_date, end_data)
|
|
else:
|
|
reagentLogFilter = list_diff(ReagtLog.OperatingType == data['index'], start_date, end_data)
|
|
return reagentLogFilter
|
|
|
|
|
|
def get_complete_number(reagent_log, reagent, excel_cell):
|
|
big_number = 0
|
|
small_number = 0
|
|
for log in reagent_log:
|
|
log.ReagentNumber = 0 if log.ReagentNumber is None else log.ReagentNumber
|
|
log.OperateMinNumber = 0 if log.OperateMinNumber is None else log.OperateMinNumber
|
|
if log.OperatingType == GetOperatingTypeInStock():
|
|
big_number += log.ReagentNumber
|
|
small_number += log.OperateMinNumber
|
|
elif (log.OperatingType == GetOperatingTypeOutStock() or log.OperatingType == GetOperatingTypeBad() or
|
|
log.OperatingType == GetOperatingTypeScrap()):
|
|
big_number -= log.ReagentNumber
|
|
small_number -= log.OperateMinNumber
|
|
elif log.OperatingType == GetOperatingTypeUpdate():
|
|
big_number = log.ReagentNumber
|
|
small_number = log.OperateMinNumber
|
|
elif log.OperatingType == GetOperatingTypeDelete():
|
|
big_number = 0
|
|
small_number = 0
|
|
excel_cell.append(str(big_number))
|
|
excel_cell.append(reagent.Unit)
|
|
if reagent.Ratio == 1:
|
|
excel_cell.append('')
|
|
excel_cell.append('')
|
|
excel_cell.append(str(big_number) + reagent.Unit + str(small_number) + reagent.SmallestUnit)
|
|
else:
|
|
excel_cell.append(str(small_number))
|
|
excel_cell.append(reagent.SmallestUnit)
|
|
excel_cell.append(str(big_number) + reagent.Unit + str(small_number) + reagent.SmallestUnit)
|
|
|
|
|
|
def get_complete_current_type_number(start_date, reagent, excel_cell, operate_type1, operate_type2=''):
|
|
reagent_log_current_out_stock = db.session.query(func.sum(ReagtLog.ReagentNumber).label('ReagentNumber'),
|
|
func.sum(ReagtLog.OperateMinNumber).label('OperateMinNumber')) \
|
|
.filter(ReagtLog.OperatingTime > start_date) \
|
|
.filter(ReagtLog.ReagentId == reagent.ReagentId)
|
|
if operate_type2 != '':
|
|
reagent_log_current_out_stock.filter(or_(ReagtLog.OperatingType == operate_type1,
|
|
ReagtLog.OperatingType == operate_type2))
|
|
else:
|
|
reagent_log_current_out_stock.filter(ReagtLog.OperatingType == operate_type1)
|
|
reagent_log_current_out_stock = reagent_log_current_out_stock.group_by(ReagtLog.ReagentNumber,
|
|
ReagtLog.OperateMinNumber).all()
|
|
if len(reagent_log_current_out_stock) == 0:
|
|
excel_cell.append('0')
|
|
excel_cell.append(reagent.Unit)
|
|
excel_cell.append('0')
|
|
excel_cell.append(reagent.SmallestUnit)
|
|
excel_cell.append('0' + reagent.Unit +
|
|
'0' + reagent.SmallestUnit)
|
|
else:
|
|
excel_cell.append(str(reagent_log_current_out_stock[0][0]))
|
|
excel_cell.append(reagent.Unit)
|
|
excel_cell.append(str(reagent_log_current_out_stock[0][1]))
|
|
excel_cell.append(reagent.SmallestUnit)
|
|
excel_cell.append(str(reagent_log_current_out_stock[0][0]) + reagent.Unit +
|
|
str(reagent_log_current_out_stock[0][1]) + reagent.SmallestUnit)
|
|
|