Beispiel #1
0
        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);
        }
Beispiel #8
0
        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);
        }