public void UpdateTest()
        {
            var obj = _bll.GetByID("229d712c-a1c5-45e4-be20-2c07bff86406");

            obj.karyawan_id = "d3506b64-df74-4283-b17a-6c5dbb770e85";
            obj.kehadiran   = 20;
            obj.absen       = 5;
            obj.gaji_pokok  = 1500000;
            obj.lembur      = 1000;
            obj.bonus       = 150000;
            obj.potongan    = 50000;
            obj.keterangan  = "tesss lagi";

            var validationError = new ValidationError();

            var result = _bll.Update(obj, ref validationError);

            Console.WriteLine("Error : " + validationError.Message);

            Assert.IsTrue(result != 0);

            var updatedObj = _bll.GetByID(obj.gaji_karyawan_id);

            Assert.IsNotNull(updatedObj);
            Assert.AreEqual(obj.gaji_karyawan_id, updatedObj.gaji_karyawan_id);
            Assert.AreEqual(obj.karyawan_id, updatedObj.karyawan_id);
            Assert.AreEqual(obj.pengguna_id, updatedObj.pengguna_id);
            Assert.AreEqual(obj.tanggal, updatedObj.tanggal);
            Assert.AreEqual(obj.nota, updatedObj.nota);
            Assert.AreEqual(obj.bulan, updatedObj.bulan);
            Assert.AreEqual(obj.tahun, updatedObj.tahun);
            Assert.AreEqual(obj.kehadiran, updatedObj.kehadiran);
            Assert.AreEqual(obj.absen, updatedObj.absen);
            Assert.AreEqual(obj.gaji_pokok, updatedObj.gaji_pokok);
            Assert.AreEqual(obj.lembur, updatedObj.lembur);
            Assert.AreEqual(obj.bonus, updatedObj.bonus);
            Assert.AreEqual(obj.potongan, updatedObj.potongan);
            Assert.AreEqual(obj.jam, updatedObj.jam);
            Assert.AreEqual(obj.lainnya, updatedObj.lainnya);
            Assert.AreEqual(obj.keterangan, updatedObj.keterangan);
            Assert.AreEqual(obj.jumlah_hari, updatedObj.jumlah_hari);
            Assert.AreEqual(obj.tunjangan, updatedObj.tunjangan);
        }
        protected override void Simpan()
        {
            if (_isNewData)
            {
                _gaji = new GajiKaryawan();

                if (this._karyawan == null)
                {
                    MsgHelper.MsgWarning("Karyawan belum dipilih");
                    return;
                }

                _gaji.karyawan_id = _karyawan.karyawan_id;
                _gaji.Karyawan    = _karyawan;

                _gaji.bulan = DayMonthHelper.GetBulanAngka(cmbBulan.Text);
                _gaji.tahun = int.Parse(cmbTahun.Text);
            }

            _gaji.pengguna_id = this._pengguna.pengguna_id;
            _gaji.Pengguna    = this._pengguna;
            _gaji.nota        = txtNota.Text;

            _gaji.tanggal   = dtpTanggal.Value;
            _gaji.kehadiran = int.Parse(txtKehadiran.Text);
            _gaji.absen     = int.Parse(txtAbsen.Text);

            _gaji.jumlah_hari = int.Parse(txtJumlahHari.Text);
            _gaji.gaji_pokok  = NumberHelper.StringToDouble(txtGaji.Text);
            _gaji.tunjangan   = NumberHelper.StringToDouble(txtTunjangan.Text);
            _gaji.bonus       = NumberHelper.StringToDouble(txtBonus.Text);
            _gaji.jam         = int.Parse(txtJam.Text);
            _gaji.lembur      = NumberHelper.StringToDouble(txtLembur.Text);
            _gaji.potongan    = NumberHelper.StringToDouble(txtPotongan.Text);

            var result          = 0;
            var validationError = new ValidationError();

            if (_isNewData)
            {
                result = _bll.Save(_gaji, ref validationError);
            }
            else
            {
                result = _bll.Update(_gaji, ref validationError);
            }

            if (result > 0)
            {
                Listener.Ok(this, _isNewData, _gaji);

                if (_isNewData)
                {
                    cmbKaryawan.SelectedIndex = 0;
                    cmbKaryawan.Focus();

                    txtNota.Text = _bll.GetLastNota();
                }
                else
                {
                    this.Close();
                }
            }
            else
            {
                if (validationError.Message != null && validationError.Message.Length > 0)
                {
                    MsgHelper.MsgWarning(validationError.Message);
                    base.SetFocusObject(validationError.PropertyName, this);
                }
                else
                {
                    var pesan = string.Format("Maaf, Data yang Anda masukkan gagal disimpan !\nCek apakah data gaji '{0}' sudah diinputkan.", _gaji.Karyawan.nama_karyawan);
                    MsgHelper.MsgWarning(pesan);
                }
            }
        }