Пример #1
0
        private BPStokModel AddStok(StokItem stokItem)
        {
            //  null check
            if (stokItem == null)
            {
                throw new ArgumentNullException(nameof(stokItem));
            }

            var result = new BPStokModel
            {
                BPStokID    = stokItem.ReffID + stokItem.BrgID,
                ReffID      = stokItem.ReffID,
                StokControl = stokItem.BPStokID,
                Tgl         = stokItem.Tgl,
                Jam         = stokItem.Jam,
                BrgID       = stokItem.BrgID,
                BrgName     = stokItem.BrgName,
                QtyIn       = stokItem.QtyIn,
                NilaiHpp    = stokItem.NilaiHpp,
                QtySisa     = stokItem.QtyOut,
            };

            var listDetil = new List <BPStokDetilModel>
            {
                new BPStokDetilModel
                {
                    BPStokID      = result.BPStokID,
                    BPStokDetilID = result.BPStokID + "-001",
                    NoUrut        = 1,
                    ReffID        = stokItem.ReffID,
                    Tgl           = stokItem.Tgl,
                    Jam           = stokItem.Jam,
                    QtyIn         = stokItem.QtyIn,
                    NilaiHpp      = stokItem.NilaiHpp,
                    QtyOut        = 0,
                    HargaJual     = 0,
                }
            };

            result.ListDetil = listDetil;
            result.QtySisa   = result.QtyIn - listDetil.Sum(x => x.QtyOut);

            //  hapus data lama
            _bpStokDetilDal.Delete(result.BPStokID);
            _bpStokDal.Delete(result.BPStokID);

            //  insert data baru
            _bpStokDal.Insert(result);
            foreach (var item in listDetil)
            {
                _bpStokDetilDal.Insert(item);
            }

            return(result);
        }
Пример #2
0
        public IEnumerable <BPStokModel> Generate(RepackModel repack)
        {
            List <BPStokModel> result = null;

            if (repack == null)
            {
                throw new ArgumentNullException(nameof(repack));
            }

            //  ambil data data material untuk dikurangi stok-nya
            var stokMaterial = new StokItem
            {
                ReffID    = repack.RepackID,
                Tgl       = repack.Tgl,
                Jam       = repack.Jam,
                BrgID     = repack.BrgIDMaterial,
                BrgName   = repack.BrgNameMaterial,
                QtyIn     = 0,
                NilaiHpp  = 0,
                QtyOut    = repack.QtyMaterial,
                HargaJual = 0,
                BPStokID  = repack.BPStokID,
            };
            var bpStokMaterial = RemoveStok(stokMaterial);

            //  insert data hasil untuk ditambahkan stoknya
            var stokHasil = new StokItem
            {
                ReffID    = repack.RepackID,
                Tgl       = repack.Tgl,
                Jam       = repack.Jam,
                BrgID     = repack.BrgIDHasil,
                BrgName   = repack.BrgNameHasil,
                QtyIn     = repack.QtyHasil,
                NilaiHpp  = repack.HppHasil,
                QtyOut    = 0,
                HargaJual = 0,
                BPStokID  = repack.SlotControl,
            };
            var bpStokHasil = AddStok(stokHasil);

            //  update stok info
            _brgStokHargaBL.UpdateStok(repack.BrgIDMaterial);
            _brgStokHargaBL.UpdateStok(repack.BrgIDHasil);

            return(result);
        }
Пример #3
0
        public IEnumerable <BPStokModel> Generate(ReceiptModel receipt)
        {
            if (receipt == null)
            {
                throw new ArgumentNullException(nameof(receipt));
            }
            if (receipt.ListBrg == null)
            {
                throw new ArgumentNullException(nameof(receipt.ListBrg));
            }

            List <BPStokModel> result = null;

            // generate yang plus dulu
            foreach (var item in receipt.ListBrg.Where(x => x.Qty > 0))
            {
                var stokItem = new StokItem
                {
                    ReffID    = receipt.ReceiptID,
                    Tgl       = receipt.Tgl,
                    Jam       = receipt.Jam,
                    BrgID     = item.BrgID,
                    BrgName   = item.BrgName,
                    QtyIn     = item.Qty,
                    NilaiHpp  = item.Harga - item.Diskon - item.TaxRupiah,
                    QtyOut    = 0,
                    HargaJual = 0,
                    BPStokID  = "",
                };
                var genResult = AddStok(stokItem);
                if (result == null)
                {
                    result = new List <BPStokModel>();
                }
                result.Add(genResult);
            }

            //  update stok info
            foreach (var item in receipt.ListBrg)
            {
                _brgStokHargaBL.UpdateStok(item.BrgID);
            }
            return(result);
        }
Пример #4
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);
        }
Пример #5
0
        public void Generate(string brgID)
        {
            //  listing brg
            //  from adjustment plus
            var listStok = new List <StokItem>();
            var listAdj  = _stokAdj2Dal.ListDataBrg(brgID);

            if (listAdj != null)
            {
                Int32 i2 = 0;
                var   e1 = new StartProsesStokEventArgs
                {
                    ProsesName = "List Data Adjustment",
                    DataCount  = listAdj.Count()
                };
                OnStartProses(e1);

                foreach (var item in listAdj)
                {
                    i2++;
                    var header = _stokAdjDal.GetData(item.StokAdjustmentID);
                    if (header is null)
                    {
                        continue;
                    }

                    var e = new ProsesRegenStokEventArgs
                    {
                        Counter = i2,
                        Tgl     = header.TglTrs,
                        TrsID   = header.StokAdjustmentID
                    };
                    OnProsesRegenStok(e);
                    StokItem stok;
                    if (item.QtyAdjust > 0)
                    {
                        stok = new StokItem
                        {
                            ReffID    = item.StokAdjustmentID,
                            Tgl       = header.TglTrs,
                            Jam       = header.JamTrs,
                            BrgID     = item.BrgID,
                            BrgName   = item.BrgName,
                            QtyIn     = item.QtyAdjust,
                            NilaiHpp  = item.HppAdjust,
                            QtyOut    = 0,
                            HargaJual = 0,
                            BPStokID  = ""
                        }
                    }
                    ;
                    else
                    {
                        stok = new StokItem
                        {
                            ReffID    = item.StokAdjustmentID,
                            Tgl       = header.TglTrs,
                            Jam       = header.JamTrs,
                            BrgID     = item.BrgID,
                            BrgName   = item.BrgName,
                            QtyIn     = 0,
                            NilaiHpp  = 0,
                            QtyOut    = item.QtyAdjust * -1,
                            HargaJual = 0,
                            BPStokID  = "",
                        }
                    };
                    listStok.Add(stok);
                }
            }

            var listJual = _penjualan2Dal.ListDataBrg(brgID);

            if (listJual != null)
            {
                Int32 i2 = 0;
                var   e1 = new StartProsesStokEventArgs
                {
                    ProsesName = "List Data Penjualan",
                    DataCount  = listJual.Count()
                };
                OnStartProses(e1);
                foreach (var item in listJual)
                {
                    i2++;
                    var header = _penjualanDal.GetData(item.PenjualanID);
                    if (header is null)
                    {
                        continue;
                    }
                    var e = new ProsesRegenStokEventArgs
                    {
                        Counter = i2,
                        Tgl     = header.TglPenjualan,
                        TrsID   = header.PenjualanID
                    };
                    OnProsesRegenStok(e);
                    var stok = new StokItem
                    {
                        ReffID    = header.PenjualanID,
                        Tgl       = header.TglPenjualan,
                        Jam       = header.JamPenjualan,
                        BrgID     = item.BrgID,
                        BPStokID  = item.BPStokID,
                        BrgName   = item.BrgName,
                        QtyIn     = 0,
                        NilaiHpp  = 0,
                        QtyOut    = item.Qty,
                        HargaJual = item.Harga,
                    };
                    listStok.Add(stok);
                }
            }

            var listReceipt = _receiptDetilDal.ListData(brgID);

            if (listReceipt != null)
            {
                Int32 i2 = 0;
                var   e1 = new StartProsesStokEventArgs
                {
                    ProsesName = "List Data PenReceiptjualan",
                    DataCount  = listReceipt.Count()
                };
                OnStartProses(e1);
                foreach (var item in listReceipt)
                {
                    i2++;
                    var header = _receiptDal.GetData(item.ReceiptID);
                    if (header is null)
                    {
                        continue;
                    }
                    var e = new ProsesRegenStokEventArgs
                    {
                        Counter = i2,
                        Tgl     = header.Tgl,
                        TrsID   = header.ReceiptID
                    };
                    OnProsesRegenStok(e);
                    var stok = new StokItem
                    {
                        ReffID    = header.ReceiptID,
                        Tgl       = header.Tgl,
                        Jam       = header.Jam,
                        BrgID     = item.BrgID,
                        BrgName   = item.BrgName,
                        QtyIn     = item.Qty,
                        NilaiHpp  = item.Harga - item.Diskon - item.TaxRupiah,
                        QtyOut    = 0,
                        HargaJual = 0,
                        BPStokID  = "",
                    };
                    listStok.Add(stok);
                }
            }

            Int32 i3 = 0;
            var   e3 = new StartProsesStokEventArgs
            {
                ProsesName = "Re-generate stok",
                DataCount  = listStok.Count()
            };

            OnStartProses(e3);
            var listProsesAdd = listStok.Where(x => x.QtyIn > 0);

            foreach (var item in listProsesAdd.OrderBy(x => x.Tgl + x.Jam))
            {
                i3++;
                var e = new ProsesRegenStokEventArgs
                {
                    Counter = i3,
                    Tgl     = item.Tgl,
                    TrsID   = item.ReffID
                };
                OnProsesRegenStok(e);
                _ = AddStok(item);
            }

            var listProsesRemove = listStok.Where(x => x.QtyOut > 0);

            foreach (var item in listProsesRemove.OrderBy(x => x.Tgl + x.Jam))
            {
                i3++;
                var e = new ProsesRegenStokEventArgs
                {
                    Counter = i3,
                    Tgl     = item.Tgl,
                    TrsID   = item.ReffID
                };
                OnProsesRegenStok(e);
                _ = RemoveStok(item);
            }
        }
Пример #6
0
        public IEnumerable <BPStokModel> Generate(PenjualanModel penjualan)
        {
            if (penjualan == null)
            {
                throw new ArgumentNullException(nameof(penjualan));
            }
            if (penjualan.ListBrg == null)
            {
                throw new ArgumentNullException(nameof(penjualan.ListBrg));
            }

            List <BPStokModel> result = null;

            // generate minus
            foreach (var item in penjualan.ListBrg)
            {
                var stokItem = new StokItem
                {
                    ReffID    = penjualan.PenjualanID,
                    Tgl       = penjualan.TglPenjualan,
                    Jam       = penjualan.JamPenjualan,
                    BrgID     = item.BrgID,
                    BPStokID  = item.BPStokID,
                    BrgName   = item.BrgName,
                    QtyIn     = 0,
                    NilaiHpp  = 0,
                    QtyOut    = item.Qty,
                    HargaJual = item.Harga,
                };
                var genResult = RemoveStok(stokItem);
                if (result == null)
                {
                    result = new List <BPStokModel>();
                }
                foreach (var item2 in genResult)
                {
                    result.Add(item2);
                }
            }

            if (result != null)
            {
                //  delete data lama
                foreach (var item in result)
                {
                    _bpStokDal.Delete(item.BPStokID);
                    _bpStokDetilDal.Delete(item.BPStokID);
                }

                //  insert data baru
                foreach (var item in result)
                {
                    _bpStokDal.Insert(item);
                    foreach (var item2 in item.ListDetil)
                    {
                        _bpStokDetilDal.Insert(item2);
                    }
                }
            }

            //  update stok info
            foreach (var item in penjualan.ListBrg)
            {
                _brgStokHargaBL.UpdateStok(item.BrgID);
            }

            return(result);
        }
Пример #7
0
        public IEnumerable <BPStokModel> Generate(StokAdjustmentModel adjustment)
        {
            if (adjustment == null)
            {
                throw new ArgumentNullException(nameof(adjustment));
            }
            if (adjustment.ListBrg == null)
            {
                throw new ArgumentNullException(nameof(adjustment.ListBrg));
            }

            List <BPStokModel> result = null;

            // generate yang plus dulu
            foreach (var item in adjustment.ListBrg.Where(x => x.QtyAdjust > 0))
            {
                var stokItem = new StokItem
                {
                    ReffID    = adjustment.StokAdjustmentID,
                    Tgl       = adjustment.TglTrs,
                    Jam       = adjustment.JamTrs,
                    BrgID     = item.BrgID,
                    BrgName   = item.BrgName,
                    QtyIn     = item.QtyAdjust,
                    NilaiHpp  = item.HppAdjust,
                    QtyOut    = 0,
                    HargaJual = 0,
                    BPStokID  = "",
                };
                var genResult = AddStok(stokItem);
                if (result == null)
                {
                    result = new List <BPStokModel>();
                }
                result.Add(genResult);
            }

            // generate yang minus kemudian
            foreach (var item in adjustment.ListBrg.Where(x => x.QtyAdjust < 0))
            {
                var stokItem = new StokItem
                {
                    ReffID    = adjustment.StokAdjustmentID,
                    Tgl       = adjustment.TglTrs,
                    Jam       = adjustment.JamTrs,
                    BrgID     = item.BrgID,
                    BrgName   = item.BrgName,
                    QtyIn     = 0,
                    NilaiHpp  = 0,
                    QtyOut    = item.QtyAdjust * -1,
                    HargaJual = 0,
                    BPStokID  = "",
                };
                var genResult = RemoveStok(stokItem);
                if (result == null)
                {
                    result = new List <BPStokModel>();
                }
                foreach (var item2 in genResult)
                {
                    result.Add(item2);
                }
            }

            //  update stok info
            foreach (var item in adjustment.ListBrg)
            {
                _brgStokHargaBL.UpdateStok(item.BrgID);
            }

            return(result);
        }