public void DeleteTest()
        {
            using (var trans = TransHelper.NewScope())
            {
                //  arrange
                var expected = LunasKasBonDetilDataFactory();
                _bpPiutangDetilDal.Insert(expected);

                //  act
                _bpPiutangDetilDal.Delete("A1");

                //  assert
            }
        }
Esempio n. 2
0
        public LunasKasBonModel Save(LunasKasBonModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var kasBon = _kasBonDal.GetData(model.KasBonID);

            if (kasBon == null)
            {
                throw new ArgumentException("PiutangID invalid");
            }

            //  validate pihak kedua
            var pihakKedua = _pihakKeduaDal.GetData(model.PihakKeduaID);

            if (pihakKedua == null)
            {
                throw new ArgumentException("PihakKeduaID invalid");
            }
            else
            {
                model.PihakKeduaName = pihakKedua.PihakKeduaName;
            }

            if (kasBon.PihakKeduaID != model.PihakKeduaID)
            {
                throw new ArgumentException("PihakKeduaID tidak sama dengan data KasBon");
            }

            if (model.ListLunas == null)
            {
                throw new ArgumentException("Detil Pelunasan masih kosong");
            }

            //  update nilai total lunas
            model.NilaiTotLunas = model.ListLunas.Sum(x => x.NilaiLunas);

            if (model.NilaiSisaPiutang < model.NilaiTotLunas)
            {
                throw new ArgumentException("Nilai Pelunasan KasBon terlalu banyak");
            }

            foreach (var item in model.ListLunas)
            {
                var jenisLunas = _jenisLunasDal.GetData(item.JenisLunasID);
                if (jenisLunas == null)
                {
                    throw new ArgumentException("JenisLunasID invalid : " + item.JenisLunasID);
                }

                if (item.NilaiLunas <= 0)
                {
                    throw new ArgumentException("Pelunasan tidak boleh minus atau nol");
                }

                //  jika PelunasanID muncul, cek apakah NoPenjualan valid
                if (item.PenjualanID.Trim() != "")
                {
                    var penjualan = _penjualanDal.GetData(item.PenjualanID);
                    if (penjualan == null)
                    {
                        throw new ArgumentException("Penjualan ID invalid");
                    }

                    //  nomor referensi penjualan hanya boleh untuk jenis lunas biaya
                    var jenisBiaya = _jenisBiayaDal.GetData(jenisLunas.JenisBiayaID);
                    if (jenisBiaya == null)
                    {
                        throw new ArgumentException("Penjualan hanya diisi jika Biaya");
                    }
                }
            }

            using (var trans = TransHelper.NewScope())
            {
                //  generate id (jika baru)
                if (model.LunasKasBonID.Trim() == "")
                {
                    model.LunasKasBonID = GenNewID();
                }

                //  update id di detil;
                var noUrut = 1;
                foreach (var item in model.ListLunas)
                {
                    item.LunasKasBonID      = model.LunasKasBonID;
                    item.LunasKasBonDetilID = model.LunasKasBonID + '-' + noUrut.ToString().PadLeft(2, '0');
                    noUrut++;
                }

                //  hapus data lama
                _lunasKasBonDal.Delete(model.LunasKasBonID);
                _lunasKasBonDetilDal.Delete(model.LunasKasBonID);

                //  simpan data baru
                _lunasKasBonDal.Insert(model);
                foreach (var item in model.ListLunas)
                {
                    _lunasKasBonDetilDal.Insert(item);
                }

                //  commit changes
                trans.Complete();
            }
            return(model);
        }