private static void CreateInventory(IncomingFormEntity form, Database db, DbTransaction trans) { var goodsSerial = GoodsSerialRepository.Get(form.SerialId, db, trans); var barcodes = GoodsSerialRepository.GetBarcodes(form.SerialId, db, trans); var product = ProductRepository.Get(goodsSerial.ProductId); var inventory = new GoodsInventoryEntity { SerialId = goodsSerial.Id, BatchNo = goodsSerial.BatchNo, ProductId = goodsSerial.ProductId, StoreroomId = form.StoreroomId, ExpiredDate = goodsSerial.ExpiredDate.Value, HospitalId = goodsSerial.HospitalId, VendorId = goodsSerial.VendorId, OriginalCount = form.IncomingCount, SplitCount = 0, UsableCount = form.IncomingCount, //goodsSerial.NeedSplit ? 0 : form.IncomingCount, GrantedCount = 0, CreatedId = form.ConfirmedId, CreatedTime = form.ConfirmedTime }; inventory.ApplyCount = inventory.UsableCount * product.MiniPackageCount; GoodsInventoryRepository.Create(inventory, db, trans); AllocateBarcodes(barcodes, inventory, product, db, trans); }
private IList <string> GetBarcodesBySerial(string id, string productId) { var serials = FindSerialByProduct(id, productId); var barcodes = GoodsSerialRepository.GetBarcodes(serials.Select(item => item.ToSerial).ToList(), true); return(barcodes.Select(item => item.Barcode).OrderBy(item => item).ToList()); }
public static string PartPass(ReceiveFormEntity form, IList <string> barcodes, string userId) { var serialId = form.SerialId; var passedCount = SumPassed(form.Id); if (form.ReceivedCount == passedCount) { return(serialId); } if (form.ReceivedCount == passedCount + barcodes.Count) { Pass(form); return(serialId); } var goodsSerial = GoodsSerialRepository.Get(form.SerialId); var db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); using (var trans = conn.BeginTransaction()) { try { var formItem = new ReceiveFormItemEntity { Id = Guid.NewGuid().ToString(), ReceiveId = form.Id, ReceivedCount = barcodes.Count, ConfirmedId = userId, ConfirmedTime = DateTime.Now }; formItem.SerialId = CreateGoodsSerial(goodsSerial, formItem, barcodes, db, trans); CreateItem(formItem, db, trans); //TODO: need to add inspection form CreateIncomingForm(form, formItem, db, trans); trans.Commit(); serialId = formItem.SerialId; } catch { trans.Rollback(); throw; } } } return(serialId); }
private static void UpdateGoodsSerial(DispatchFormItemEntity form, Database db, DbTransaction trans) { GoodsSerialRepository.UpdateSerialInfo(new GoodsSerialEntity { Id = form.SerialId, LogisticsCode = form.LogisticsCode, LogisticsContent = form.LogisticsContent, UpdatedId = form.ConfirmedId, UpdatedTime = form.ConfirmedTime }, db, trans); }
private static string CreateGoodsSerial(GoodsSerialEntity parent, ReceiveFormItemEntity formItem, IList <string> barcodes, Database db, DbTransaction trans) { var goodsSerial = GoodsSerialRepository.CreateSub(parent, barcodes, formItem.ConfirmedId, db, trans); GoodsSerialFormRepository.Create(new GoodsSerialFormEntity { SerialId = goodsSerial.Id, FormId = formItem.Id, FormKind = FormKind.ReceiveItem, CreatedId = formItem.ConfirmedId, CreatedTime = formItem.ConfirmedTime, }, db, trans); return(goodsSerial.Id); }
private static string DispatchGoods(DispatchFormEntity form, DispatchFormItemEntity formItem, Database db, DbTransaction trans) { var orderDetail = OrderFormRepository.GetItem(form.OrderDetailId); var goodsSerial = new GoodsSerialEntity { ProductId = form.ProductId, DispatchedCount = formItem.Count, HospitalId = form.HospitalId, VendorId = form.VendorId, NeedAudit = orderDetail.NeedAudit, NeedCheck = orderDetail.NeedCheck, NeedSplit = orderDetail.NeedSplit, SplitCopies = orderDetail.SplitCopies, SplitUnit = orderDetail.SplitUnit, SplitCapacity = orderDetail.SplitCapacity, SplitPackageCount = orderDetail.SplitPackageCount, ValidDays = orderDetail.ValidDays, BatchNo = formItem.BatchNo, ExpiredDate = formItem.ExpiredDate, IsClosed = false, CreatedId = form.CreatedId, CreatedTime = DateTime.Now, UpdatedId = form.CreatedId, UpdatedTime = DateTime.Now }; GoodsSerialRepository.Create(goodsSerial, db, trans); GoodsSerialFormRepository.Create(new GoodsSerialFormEntity { SerialId = goodsSerial.Id, FormId = form.Id, FormKind = FormKind.DispatchItem, CreatedId = form.CreatedId, CreatedTime = DateTime.Now, }, new GoodsSerialFormEntity { SerialId = goodsSerial.Id, FormId = form.OrderDetailId, FormKind = FormKind.OrderDetail, CreatedId = form.CreatedId, CreatedTime = DateTime.Now, }, db, trans); return(goodsSerial.Id); }
public static string PartPass(ReceiveFormEntity form, IList <string> barcodes, string userId, Database db, DbTransaction trans) { var serialId = form.SerialId; var passedCount = SumPassed(form.Id); if (form.ReceivedCount == passedCount) { return(serialId); } if (form.ReceivedCount == passedCount + barcodes.Count) { Pass(form); return(serialId); } var goodsSerial = GoodsSerialRepository.Get(form.SerialId); var formItem = new ReceiveFormItemEntity { Id = Guid.NewGuid().ToString(), ReceiveId = form.Id, ReceivedCount = barcodes.Count, ConfirmedId = userId, ConfirmedTime = DateTime.Now }; formItem.SerialId = CreateGoodsSerial(goodsSerial, formItem, barcodes, db, trans); CreateItem(formItem, db, trans); //TODO: need to add inspection form CreateIncomingForm(form, formItem, db, trans); serialId = formItem.SerialId; return(serialId); }
public static IList <GoodsEntity> Split(GoodsEntity goods, GoodsSerialEntity goodsSerial, string userId) { var expiredDate = GetSplitExpiredDate(goodsSerial); var product = ProductRepository.Get(goods.ProductId); var hospitalProduct = HospitalProductRepository.GetOneProduct(goods.ProductId, goods.HospitalId); var list = new List <GoodsEntity>(); var db = DatabaseFactory.CreateDatabase(); using (var conn = db.CreateConnection()) { conn.Open(); using (var trans = conn.BeginTransaction()) { try { if (UpdateSplittingUser(goods.Id, userId, db, trans)) { var newSerial = NewGoodsSerial(goodsSerial, expiredDate, userId); var barcodes = GoodsSerialRepository.Create(newSerial, db, trans); var name = !string.IsNullOrEmpty(goods.Name) ? goods.Name : hospitalProduct.Alias; if (string.IsNullOrEmpty(name)) { name = product.Name; } if (string.IsNullOrEmpty(hospitalProduct.SplitCapacity)) { name += "(" + hospitalProduct.SplitCopies + "-{0})"; } else { name += "(" + hospitalProduct.MiniSplitNumber + "*" + hospitalProduct.SplitCapacity + hospitalProduct.SplitUnit + "," + hospitalProduct.SplitCopies + "-{0})"; } var index = 0; foreach (var barcode in barcodes) { index++; var newGoods = new GoodsEntity { Name = string.Format(name, index), Barcode = barcode, SerialId = newSerial.Id, ParentId = goods.Id, HospitalId = goods.HospitalId, VendorId = goods.VendorId, ProductId = goods.ProductId, BatchNo = goods.BatchNo, ExpiredDate = expiredDate, StoreroomId = goods.StoreroomId, PackageCapacity = goodsSerial.SplitCapacity, PackageCount = goodsSerial.SplitPackageCount, MeasuringUnit = goodsSerial.SplitUnit, Status = GoodsStatus.Usable, GrantedCount = 0, SplitUserId = userId, SplitDate = DateTime.Now, CreatedId = userId, CreatedTime = DateTime.Now, UpdatedId = userId, UpdatedTime = DateTime.Now }; Create(newGoods, db, trans); list.Add(newGoods); } AdjustInventory(goods, newSerial.Id, barcodes.Count, goodsSerial.SplitPackageCount, userId, db, trans); } trans.Commit(); } catch { trans.Rollback(); throw; } } } return(list); }