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)