Example #1
0
        public void UpdateTest()
        {
            using (var trans = TransHelper.NewScope())
            {
                //  arrange
                var expected = BPStokDataFactory();

                //  act
                _bpStokDal.Update(expected);

                //  assert
            }
        }
Example #2
0
        private IEnumerable <BPStokModel> RemoveStok(StokItem stokItem)
        {
            List <BPStokModel> result = null;

            //  null check
            if (stokItem == null)
            {
                throw new ArgumentNullException(nameof(stokItem));
            }

            //  list semua buku stok barang ini yang masih ada sisa stok
            var listBPStok = ListData(stokItem.BrgID);

            if (listBPStok == null)
            {
                return(null);
            }
            //  jika pengurangan stok untuk kasus tertentu
            //  (sudah ditetepkan stok mana yg dikurangi)
            if (stokItem.BPStokID.Trim() != "")
            {
                listBPStok = listBPStok.Where(x => x.BPStokID == stokItem.BPStokID);
            }

            //  hapus detil utk 'trs ini' dulu
            //  (kasus simpan ulang)
            foreach (var item in listBPStok)
            {
                item.ListDetil = item.ListDetil.Where(x => x.ReffID != stokItem.ReffID).ToList();
            }

            //  proses pengurangan stok, biar mudah di-pluskan dulu
            var qtyPengurang = stokItem.QtyOut;

            // proses pengurangan
            foreach (var item in listBPStok)
            {
                decimal qtyOut = 0;
                if (item.QtySisa >= qtyPengurang)
                {
                    qtyOut = qtyPengurang;
                }
                else
                {
                    qtyOut = item.QtySisa;
                }

                //  kurangi pengurangnya
                qtyPengurang -= qtyOut;

                // var noUrut = item.ListDetil.Count() + 1;

                //  jika hargajual = 0,
                //  maka ambil harga beli-nya
                if (stokItem.HargaJual == 0)
                {
                    stokItem.HargaJual = item.NilaiHpp;
                }

                //  bikin detil baru
                var bpStokDetil = new BPStokDetilModel
                {
                    BPStokID  = item.BPStokID,
                    ReffID    = stokItem.ReffID,
                    Tgl       = stokItem.Tgl,
                    Jam       = stokItem.Jam,
                    QtyIn     = 0,
                    NilaiHpp  = 0,
                    QtyOut    = qtyOut,
                    HargaJual = stokItem.HargaJual,
                };
                item.ListDetil.Add(bpStokDetil);
                item.QtySisa = item.QtyIn - item.ListDetil.Sum(x => x.QtyOut);

                //  add ke result
                if (result == null)
                {
                    result = new List <BPStokModel>();
                }
                result.Add(item);

                //  generate ulang nomor urut-nya
                int noUrut = 1;
                foreach (var item2 in item.ListDetil.OrderBy(x => x.Tgl + x.Jam))
                {
                    item2.NoUrut        = noUrut;
                    item2.BPStokDetilID = item.BPStokID + '-' + noUrut.ToString().PadLeft(3, '0');
                    noUrut++;
                }

                //  update header
                _bpStokDal.Update(item);
                //  delete detil
                _bpStokDetilDal.Delete(item.BPStokID);
                //  insert baru
                foreach (var item2 in item.ListDetil)
                {
                    _bpStokDetilDal.Insert(item2);
                }

                if (qtyPengurang == 0)
                {
                    break;
                }
            }

            //  jika masih belum selesai pengurangan stok-nya,
            //  berarti stok ngga cukup. Throw error.
            if (qtyPengurang != 0)
            {
                var errMsg = string.Format("Stok tidak cukup : {0} - {1}", stokItem.BrgID, stokItem.BrgName);
                throw new ArgumentException(errMsg);
            }

            return(result);
        }