Example #1
0
        private void ReduceQty(int totalQty, TInvt invt, List <TInvtD> invtds)
        {
            foreach (var invtd in invtds)
            {
                var canQty = invtd.Qty - invtd.AllotQty - invtd.LockedQty;

                if (totalQty > 0 && canQty > 0)
                {
                    if (invtd.Qty >= totalQty)
                    {
                        if (invt != null)
                        {
                            invt.Qty -= totalQty;
                        }
                        invtd.Qty -= totalQty;
                        break;
                    }
                    else
                    {
                        if (invt != null)
                        {
                            invt.Qty = 0;
                        }
                        totalQty -= invtd.Qty;
                        invtd.Qty = 0;
                    }
                }
            }
        }
        private List <TInvtD> ReduceQtyAndAllotQty(int totalQty, TInvt invt, List <TInvtD> invtDs)
        {
            var newInvtDs = new List <TInvtD>();

            foreach (var invtd in invtDs)
            {
                var newInvtD = new TInvtD
                {
                    Id       = invtd.Id,
                    HId      = invtd.HId,
                    SkuId    = invtd.SkuId,
                    Sku      = invtd.Sku,
                    Barcode  = invtd.Barcode,
                    Qty      = 0,
                    AllotQty = 0,
                    ZoneId   = invtd.ZoneId,
                    ZoneCode = invtd.ZoneCode,
                    BinId    = invtd.BinId,
                    BinCode  = invtd.BinCode,
                };

                if (totalQty > 0)
                {
                    if (totalQty <= invtd.AllotQty) //有其他出库单分配数
                    {
                        invtd.AllotQty -= totalQty;
                        invtd.Qty      -= totalQty;

                        invt.AllotQty -= totalQty;
                        invt.Qty      -= totalQty;

                        newInvtD.Qty = totalQty;

                        newInvtDs.Add(newInvtD);

                        break;
                    }
                    else
                    {
                        //循环扣减
                        totalQty -= invtd.AllotQty;

                        invtd.Qty     -= invt.AllotQty;
                        invtd.AllotQty = 0;
                        invt.Qty      -= invt.AllotQty;
                        invt.AllotQty  = 0;

                        newInvtD.Qty = invtd.AllotQty;
                        newInvtDs.Add(newInvtD);
                    }
                }
            }

            return(newInvtDs);
        }
Example #3
0
        private TInvt Do2(int whId, int custId, string rcvCode, TInInboundD t)
        {
            //这是新增的情况
            var h = new TInvt
            {
                WhId        = whId,
                SkuId       = t.SkuId,
                Sku         = t.Sku,
                Barcode     = t.Barcode,
                CreatedBy   = DefaultUser.UserName,
                IsDeleted   = false,
                Qty         = t.Qty,
                CreatedTime = DateTime.UtcNow
            };
            var bin = GetDefalutBin(whId);
            var d2  = new TInvtD
            {
                HId         = h.Id,
                WhId        = whId,
                SkuId       = t.SkuId,
                Sku         = t.Sku,
                Barcode     = t.Barcode,
                ZoneId      = bin.Item1,
                ZoneCode    = bin.Item2,
                BinId       = bin.Item3,
                BinCode     = bin.Item4,
                CreatedBy   = "rick.li",
                IsDeleted   = 0,
                Qty         = t.Qty,
                CreatedTime = DateTime.UtcNow
            };

            var log = new TInvtChangeLog
            {
                OrderId     = t.HId,
                OrderType   = Enum.GetName(typeof(EnumOrderType), EnumOrderType.RCV),
                OrderCode   = rcvCode,
                WhId        = whId,
                InvtDId     = d2.Id,
                CustId      = custId,
                SkuId       = t.SkuId,
                Barcode     = t.Barcode,
                BinId       = d2.BinId,
                ZoneId      = d2.ZoneId,
                Qty         = t.Qty,
                CreatedBy   = DefaultUser.UserName,
                CreatedTime = DateTime.UtcNow,
            };

            d2.TInvtChangeLog = log;
            h.DetailList.Add(d2);
            h.Qty = d2.Qty;
            return(h);
        }
 //只减少分配占用数
 private void ReduceAllotQty(int totalQty, TInvt invt, List <TInvtD> invts)
 {
     foreach (var invtd in invts)
     {
         if (totalQty > 0)
         {
             if (invtd.Qty >= totalQty)
             {
                 invtd.AllotQty -= totalQty;
                 break;
             }
             else
             {
                 totalQty      -= invtd.Qty;
                 invtd.AllotQty = 0;
             }
         }
     }
 }
Example #5
0
        //收货
        public void Rcv(int whId, int custId, string rcvCode, TInInboundD[] ts)
        {
            var id = ts.Select(x => x.HId).FirstOrDefault();
            var rs = new List <TInvt>();

            // 首先查询有没有库存记录,有就更新TInvt和TInvtD;
            // 没有就新增
            foreach (var t in ts)
            {
                var r = new TInvt();
                var h = wmsinventory.TInvts.Where(x => x.WhId == whId && x.SkuId == t.SkuId).FirstOrDefault();
                if (h != null)
                {
                    r = Do1(h, whId, custId, rcvCode, t);
                }
                else
                {
                    r = Do2(whId, custId, rcvCode, t);
                    rs.Add(r);
                }
            }
            wmsinventory.TInvts.AddRange(rs);
            wmsinventory.SaveChanges();
        }