from pypinyin import lazy_pinyin, Style from utils.apiDoc import * from utils.configOperatingTypeHelper import GetOperatingTypeInStock from utils.listHelper import list2String from utils.logHelper import LogAdd def in_stock(data, batch_code, in_stock_time, token, request_json, remark=''): reagentId = 0 reagentBasis = ReagtReagent(Name=data.Name, Specification=data.Specification, Maker=data.Maker, CertificationCode=data.CertificationCode, UnitPrice=data.UnitPrice, SellingPrice=data.SellingPrice, MaxValue=data.MaxValue, MinValue=data.MinValue, TypeName=data.TypeName, Unit=data.Unit, Ratio=data.Ratio, SmallestUnit=data.SmallestUnit, PinYinCode=list2String( lazy_pinyin(data.Name + data.Specification, style=Style.FIRST_LETTER)), Using=True) dbReagentBasis = ReagtReagent.query.filter_by(Name=data.Name, Specification=data.Specification, Maker=data.Maker, CertificationCode=data.CertificationCode, UnitPrice=data.UnitPrice, SellingPrice=data.SellingPrice, TypeName=data.TypeName, Unit=data.Unit, Ratio=data.Ratio, SmallestUnit=data.SmallestUnit, ). \ first() if dbReagentBasis is None: group_reagent = ReagtReagent.query.filter_by(Name=reagentBasis.Name).first() if group_reagent is not None: reagentBasis.GroupName = group_reagent.GroupName reagentBasis.ReportItem = group_reagent.ReportItem db.session.add(reagentBasis) db.session.flush() reagentId = reagentBasis.ReagentId else: reagentId = dbReagentBasis.ReagentId dbReagentBasis.Using = True dbReagentBasis.MinValue = data.MinValue dbReagentBasis.MaxValue = data.MaxValue if ReagtPosition.query.filter_by(Position=data.Position).first() is None: reagentPosition = ReagtPosition(Position=data.Position, PositionCode=list2String(lazy_pinyin(data.Position, style=Style.FIRST_LETTER)), Using=True) db.session.add(reagentPosition) if ReagtMaker.query.filter_by(Name=data.Maker).first() is None: reagentMaker = ReagtMaker(Name=data.Maker, MakerCode=list2String(lazy_pinyin(data.Maker, style=Style.FIRST_LETTER)), Using=True) db.session.add(reagentMaker) if ReagtSupplier.query.filter_by(SupplierName=data.SupplierName).first() is None: reagentSupplier = ReagtSupplier(SupplierName=data.SupplierName, SupplierCode=list2String(lazy_pinyin(data.SupplierName, style=Style.FIRST_LETTER)), Using=True) db.session.add(reagentSupplier) inStock = ReagtStock(ReagentId=reagentId, Code=batch_code, ProductionBatch=data.ProductionBatch, PinYinCode=list2String( lazy_pinyin(data.Name + data.Specification, style=Style.FIRST_LETTER)), Position=data.Position, Number=data.Number, LastNumber=data.Number, InTime=in_stock_time, Expiration=data.Expiration, VerifyPeople=verify_jwt_username(token), SupplierName=data.SupplierName, Using=True, MinNumberUnit=data.Number*data.Ratio) db.session.add(inStock) if (ReagtEntry.query.filter_by(Position=data.Position, Specification=data.Specification, Maker=data.Maker, CertificationCode=data.CertificationCode, SupplierName=data.SupplierName, TypeName=data.TypeName, Name=data.Name, MaxValue=data.MaxValue, MinValue=data.MinValue, UnitPrice=data.UnitPrice, SellingPrice=data.SellingPrice, ProductionBatch=data.ProductionBatch, Unit=data.Unit, Ratio=data.Ratio, SmallestUnit=data.SmallestUnit ).first() is None): reagentEntry = ReagtEntry(Position=data.Position, Specification=data.Specification, Maker=data.Maker, CertificationCode=data.CertificationCode, SupplierName=data.SupplierName, TypeName=data.TypeName, Name=data.Name, Number=data.Number, MaxValue=data.MaxValue, MinValue=data.MinValue, UnitPrice=data.UnitPrice, SellingPrice=data.SellingPrice, PinYinCode=list2String( lazy_pinyin(data.Name + data.Specification, style=Style.FIRST_LETTER)), ProductionBatch=data.ProductionBatch, Unit=data.Unit, Using=True, Ratio=data.Ratio, SmallestUnit=data.SmallestUnit) db.session.add(reagentEntry) LogAdd(token, GetOperatingTypeInStock(), request_json, batch_code, data.Name, list2String(lazy_pinyin(data.Name + data.Specification, style=Style.FIRST_LETTER)), data.Number, data.Specification, data.Position, productionBatch=data.ProductionBatch, expiration=data.Expiration, supplierName=data.SupplierName, operateMinNumber=data.Number*data.Ratio, reagentId=reagentId) if ReagtReceipt.query.filter_by(ReceiptCode=F'{batch_code}').first() is None: receipt = ReagtReceipt(ReceiptCode=batch_code, Remark=remark, ReceiptTime=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), VerifyPeople=verify_jwt_username(token), Status=ReagtReceiptStatus.query.filter_by( ReceiptName='入库').with_entities(ReagtReceiptStatus.ReceiptId)) db.session.add(receipt)