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.
102 lines
6.6 KiB
102 lines
6.6 KiB
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)
|
|
|