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

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)