示例#1
0
        private void SetItemBayar(GridControl grid, int rowIndex, int colIndex, BeliProduk beli, double nominal = 0, string keterangan = "")
        {
            ItemPembayaranHutangProduk itemBayar;

            if (_isNewData)
            {
                itemBayar = new ItemPembayaranHutangProduk();
            }
            else
            {
                itemBayar = _listOfItemPembayaranHutang[rowIndex - 1];

                if (itemBayar.entity_state == EntityState.Unchanged)
                {
                    itemBayar.entity_state = EntityState.Modified;
                }
            }

            itemBayar.beli_produk_id = beli.beli_produk_id;
            itemBayar.BeliProduk     = beli;
            itemBayar.nominal        = nominal;
            itemBayar.keterangan     = keterangan;

            _listOfItemPembayaranHutang[rowIndex - 1] = itemBayar;
        }
示例#2
0
        public BeliProduk GetByID(string id)
        {
            BeliProduk obj = null;

            try
            {
                _sql = SQL_TEMPLATE.Replace("{WHERE}", "WHERE t_beli_produk.beli_produk_id = @id");
                _sql = _sql.Replace("{ORDER BY}", "");
                _sql = _sql.Replace("{OFFSET}", "");

                obj = MappingRecordToObject(_sql, new { id }).SingleOrDefault();

                if (obj != null)
                {
                    // load item beli
                    obj.item_beli = GetItemBeli(obj.beli_produk_id);
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(obj);
        }
        private double GetTotalNota(BeliProduk obj)
        {
            var total = obj.item_beli.Where(f => f.Produk != null && f.entity_state != EntityState.Deleted)
                        .Sum(f => (f.jumlah - f.jumlah_retur) * (f.harga - (f.diskon / 100 * f.harga)));

            return(Math.Round(total, MidpointRounding.AwayFromZero));
        }
示例#4
0
        public int Update(BeliProduk obj)
        {
            var result = 0;

            if (_isUseWebAPI)
            {
                foreach (var item in obj.item_beli.Where(f => f.entity_state == EntityState.Added))
                {
                    item.item_beli_produk_id = Guid.NewGuid().ToString();
                }

                _unitOfWork = new UnitOfWork(_isUseWebAPI, _baseUrl, _log);
                result      = _unitOfWork.BeliProdukRepository.Update(obj);
            }
            else
            {
                using (IDapperContext context = new DapperContext())
                {
                    _unitOfWork = new UnitOfWork(context, _log);
                    result      = _unitOfWork.BeliProdukRepository.Update(obj);
                }
            }

            return(result);
        }
示例#5
0
        public int Save(BeliProduk obj)
        {
            var result = 0;

            if (_isUseWebAPI)
            {
                obj.beli_produk_id = Guid.NewGuid().ToString();

                foreach (var item in obj.item_beli)
                {
                    item.item_beli_produk_id = Guid.NewGuid().ToString();
                }

                _unitOfWork = new UnitOfWork(_isUseWebAPI, _baseUrl, _log);
                result      = _unitOfWork.BeliProdukRepository.Save(obj);
            }
            else
            {
                using (IDapperContext context = new DapperContext())
                {
                    _unitOfWork = new UnitOfWork(context, _log);
                    result      = _unitOfWork.BeliProdukRepository.Save(obj);
                }
            }

            return(result);
        }
        private double GetTotalNota(BeliProduk obj)
        {
            var total = obj.item_beli.Where(f => f.Produk != null && f.entity_state != EntityState.Deleted)
                        .Sum(f => (f.jumlah - f.jumlah_retur) * (f.harga - (f.diskon / 100 * f.harga)));

            total = (int)total;
            return(total);
        }
        private double GetTotalNota(BeliProduk obj)
        {
            var total = obj.item_beli.Where(f => f.Produk != null && f.entity_state != EntityState.Deleted)
                        .Sum(f => f.jumlah * f.harga);

            total = Math.Ceiling(total);
            return(total);
        }
        public int Save(BeliProduk obj)
        {
            var result = 0;

            try
            {
                _context.BeginTransaction();

                var transaction = _context.transaction;

                obj.beli_produk_id = _context.GetGUID();
                obj.total_nota     = GetTotalNota(obj);

                // insert header
                _context.db.Insert <BeliProduk>(obj, transaction);

                // insert detail
                foreach (var item in obj.item_beli.Where(f => f.Produk != null))
                {
                    if (item.produk_id.Length > 0)
                    {
                        item.item_beli_produk_id = _context.GetGUID();
                        item.beli_produk_id      = obj.beli_produk_id;
                        item.pengguna_id         = obj.pengguna_id;

                        _context.db.Insert <ItemBeliProduk>(item, transaction);

                        // update entity state
                        item.entity_state = EntityState.Unchanged;
                    }
                }

                // jika pembelian tunai, langsung insert ke pembayaran hutang
                if (obj.tanggal_tempo.IsNull())
                {
                    result = SavePembayaranHutang(obj);
                    if (result > 0)
                    {
                        obj.total_pelunasan = obj.grand_total;
                    }
                }

                _context.Commit();

                LogicalThreadContext.Properties["NewValue"] = obj.ToJson();
                _log.Info("Tambah data");

                result = 1;
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(result);
        }
        /// <summary>
        /// Method khusus untuk menyimpan pembayaran hutang pembelian tunai
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        private int SavePembayaranHutang(BeliProduk obj)
        {
            PembayaranHutangProduk            pembayaranHutang;
            ItemPembayaranHutangProduk        itemPembayaranHutang;
            IPembayaranHutangProdukRepository pembayaranHutangRepo = new PembayaranHutangProdukRepository(_context, _log);

            var result = 0;

            // set detail
            itemPembayaranHutang = pembayaranHutangRepo.GetByBeliID(obj.beli_produk_id);
            if (itemPembayaranHutang != null) // sudah ada pelunasan
            {
                itemPembayaranHutang.nominal    = obj.grand_total;
                itemPembayaranHutang.BeliProduk = new BeliProduk {
                    beli_produk_id = itemPembayaranHutang.beli_produk_id
                };
                itemPembayaranHutang.entity_state = EntityState.Modified;

                // set header by detail
                pembayaranHutang          = itemPembayaranHutang.PembayaranHutangProduk;
                pembayaranHutang.is_tunai = obj.is_tunai;

                // set item pembayaran
                pembayaranHutang.item_pembayaran_hutang.Add(itemPembayaranHutang);

                result = pembayaranHutangRepo.Update(pembayaranHutang, true);
            }
            else // belum ada pelunasan hutang
            {
                pembayaranHutang = new PembayaranHutangProduk();

                // set header
                pembayaranHutang.supplier_id = obj.supplier_id;
                pembayaranHutang.pengguna_id = obj.pengguna_id;
                pembayaranHutang.tanggal     = obj.tanggal;
                pembayaranHutang.keterangan  = "Pembelian tunai produk";
                pembayaranHutang.is_tunai    = obj.is_tunai;

                // set item
                itemPembayaranHutang = new ItemPembayaranHutangProduk();
                itemPembayaranHutang.beli_produk_id = obj.beli_produk_id;
                itemPembayaranHutang.BeliProduk     = obj;
                itemPembayaranHutang.nominal        = obj.grand_total; // GetTotalNotaSetelahDiskonDanPPN(obj);
                itemPembayaranHutang.keterangan     = string.Empty;

                // set item pembayaran
                pembayaranHutang.item_pembayaran_hutang.Add(itemPembayaranHutang);

                // simpan item pembayaran
                result = pembayaranHutangRepo.Save(pembayaranHutang, true);
            }

            return(result);
        }
示例#10
0
        public int Save(BeliProduk obj)
        {
            var result = 0;

            using (IDapperContext context = new DapperContext())
            {
                IUnitOfWork uow = new UnitOfWork(context, _log);
                result = uow.BeliProdukRepository.Save(obj);
            }

            return(result);
        }
示例#11
0
        public BeliProduk GetByID(string id)
        {
            BeliProduk obj = null;

            using (IDapperContext context = new DapperContext())
            {
                IUnitOfWork uow = new UnitOfWork(context, _log);
                obj = uow.BeliProdukRepository.GetByID(id);
            }

            return(obj);
        }
        public FrmEntryPembelianProduk(string header, BeliProduk beli, IBeliProdukBll bll)
            : base()
        {
            InitializeComponent();
            ColorManagerHelper.SetTheme(this, this);

            base.SetHeader(header);
            base.SetButtonSelesaiToBatal();
            this._bll            = bll;
            this._beli           = beli;
            this._supplier       = beli.Supplier;
            this._log            = MainProgram.log;
            this._pengguna       = MainProgram.pengguna;
            this._profil         = MainProgram.profil;
            this._pengaturanUmum = MainProgram.pengaturanUmum;

            txtNota.Text             = this._beli.nota;
            dtpTanggal.Value         = (DateTime)this._beli.tanggal;
            dtpTanggalTempo.Value    = dtpTanggal.Value;
            chkCetakNotaBeli.Checked = this._pengaturanUmum.is_auto_print;

            if (!this._beli.tanggal_tempo.IsNull())
            {
                rdoKredit.Checked     = true;
                dtpTanggalTempo.Value = (DateTime)this._beli.tanggal_tempo;
            }

            txtSupplier.Text   = this._supplier.nama_supplier;
            txtKeterangan.Text = this._beli.keterangan;

            txtDiskon.Text = this._beli.diskon.ToString();
            txtPPN.Text    = this._beli.ppn.ToString();

            // simpan data lama
            _listOfItemBeliOld.Clear();
            foreach (var item in this._beli.item_beli)
            {
                _listOfItemBeliOld.Add(new ItemBeliProduk
                {
                    item_beli_produk_id = item.item_beli_produk_id,
                    jumlah = item.jumlah,
                    harga  = item.harga
                });
            }

            _listOfItemBeli = this._beli.item_beli;
            _listOfItemBeli.Add(new ItemBeliProduk()); // add dummy objek

            InitGridControl(gridControl);

            RefreshTotal();
        }
        public FrmEntryReturPembelianProduk(string header, ReturBeliProduk retur, IReturBeliProdukBll bll)
            : base()
        {
            InitializeComponent();
            ColorManagerHelper.SetTheme(this, this);

            base.SetHeader(header);
            base.SetButtonSelesaiToBatal();
            this._bll      = bll;
            this._retur    = retur;
            this._supplier = retur.Supplier;
            this._beli     = retur.BeliProduk;
            this._log      = MainProgram.log;
            this._pengguna = MainProgram.pengguna;

            txtNota.Text    = this._retur.nota;
            txtNota.Enabled = false;

            dtpTanggal.Value   = (DateTime)this._retur.tanggal;
            txtSupplier.Text   = this._supplier.nama_supplier;
            txtKeterangan.Text = this._retur.keterangan;

            if (this._beli != null)
            {
                txtNotaBeli.Text    = this._beli.nota;
                txtNotaBeli.Enabled = false;

                LoadItemBeli(this._beli);
            }

            // simpan data lama
            _listOfItemReturOld.Clear();
            foreach (var item in this._retur.item_retur)
            {
                _listOfItemReturOld.Add(new ItemReturBeliProduk
                {
                    item_retur_beli_produk_id = item.item_retur_beli_produk_id,
                    jumlah_retur = item.jumlah_retur,
                    harga        = item.harga
                });
            }

            _listOfItemRetur = this._retur.item_retur;
            _listOfItemRetur.Add(new ItemReturBeliProduk()); // add dummy objek

            InitGridControl(gridControl);

            RefreshTotal();
        }
示例#14
0
        public int Delete(BeliProduk obj)
        {
            var result = 0;

            try
            {
                result = _context.db.Delete <BeliProduk>(obj) ? 1 : 0;
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(result);
        }
示例#15
0
        public void DeleteTest()
        {
            var obj = new BeliProduk
            {
                beli_produk_id = "9fdd5459-f9cb-4361-bce7-7edd32f4eb13"
            };

            var result = _bll.Delete(obj);

            Assert.IsTrue(result != 0);

            var deletedObj = _bll.GetByID(obj.beli_produk_id);

            Assert.IsNull(deletedObj);
        }
示例#16
0
        public FrmLookupHistoriPembayaran(string header, BeliProduk beli, IList <ItemPembayaranHutangProduk> listOfHistoriPembayaran)
            : this(header)
        {
            this.groupBox1.Text = " [ Informasi Pembelian ] ";
            this.label3.Text    = "Supplier";
            this._listOfHistoriPembayaranHutang = listOfHistoriPembayaran;
            this._paymentType = PaymentHistoryType.PembayaranHutang;

            txtTanggal.Text            = DateTimeHelper.DateToString(beli.tanggal);
            txtNota.Text               = beli.nota;
            txtCustomerOrSupplier.Text = beli.Supplier.nama_supplier;
            txtTotal.Text              = NumberHelper.NumberToString(SumGrid(listOfHistoriPembayaran));

            InitGridList();
        }
示例#17
0
        public int Save(BeliProduk obj, ref ValidationError validationError)
        {
            var validatorResults = _validator.Validate(obj);

            if (!validatorResults.IsValid)
            {
                foreach (var failure in validatorResults.Errors)
                {
                    validationError.Message      = failure.ErrorMessage;
                    validationError.PropertyName = failure.PropertyName;
                    return(0);
                }
            }

            return(Save(obj));
        }
        /// <summary>
        /// Method untuk menghapus pembayaran hutang jika terjadi perubahan status nota dari tunai ke kredit
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        private int HapusPembayaranHutang(BeliProduk obj)
        {
            PembayaranHutangProduk            pembayaranHutang;
            ItemPembayaranHutangProduk        itemPembayaranHutang;
            IPembayaranHutangProdukRepository pembayaranHutangRepo = new PembayaranHutangProdukRepository(_context, _log);

            var result = 0;

            // set detail
            itemPembayaranHutang = pembayaranHutangRepo.GetByBeliID(obj.beli_produk_id);
            if (itemPembayaranHutang != null)
            {
                pembayaranHutang = itemPembayaranHutang.PembayaranHutangProduk;
                result           = pembayaranHutangRepo.Delete(pembayaranHutang);
            }

            return(result);
        }
        public int Delete(BeliProduk obj)
        {
            var result = 0;

            try
            {
                var api      = "delete";
                var response = RestSharpHelper <OpenRetailWebApiPostResponse> .PostRequest(_apiUrl, api, obj);

                result = Convert.ToInt32(response.Results);
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(result);
        }
示例#20
0
        public int Delete(BeliProduk obj)
        {
            var result = 0;

            if (_isUseWebAPI)
            {
                _unitOfWork = new UnitOfWork(_isUseWebAPI, _baseUrl, _log);
                result      = _unitOfWork.BeliProdukRepository.Delete(obj);
            }
            else
            {
                using (IDapperContext context = new DapperContext())
                {
                    _unitOfWork = new UnitOfWork(context, _log);
                    result      = _unitOfWork.BeliProdukRepository.Delete(obj);
                }
            }

            return(result);
        }
示例#21
0
        public BeliProduk GetByID(string id)
        {
            BeliProduk obj = null;

            if (_isUseWebAPI)
            {
                _unitOfWork = new UnitOfWork(_isUseWebAPI, _baseUrl, _log);
                obj         = _unitOfWork.BeliProdukRepository.GetByID(id);
            }
            else
            {
                using (IDapperContext context = new DapperContext())
                {
                    _unitOfWork = new UnitOfWork(context, _log);
                    obj         = _unitOfWork.BeliProdukRepository.GetByID(id);
                }
            }

            return(obj);
        }
        public BeliProduk GetByID(string id)
        {
            BeliProduk obj = null;

            try
            {
                var api      = string.Format("get_by_id?id={0}", id);
                var response = RestSharpHelper <OpenRetailWebApiGetResponse <BeliProduk> > .GetRequest(_apiUrl, api).Data;

                if (response.Results.Count > 0)
                {
                    obj = response.Results[0];
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(obj);
        }
        public int Delete(BeliProduk obj)
        {
            var result = 0;

            try
            {
                result = _context.db.Delete <BeliProduk>(obj) ? 1 : 0;

                if (result > 0)
                {
                    LogicalThreadContext.Properties["OldValue"] = obj.ToJson();
                    _log.Info("Hapus data");
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(result);
        }
        public int Update(BeliProduk obj)
        {
            var result = 0;

            try
            {
                obj.tanggal = obj.tanggal.ToUtc();

                var api      = "update";
                var response = RestSharpHelper <OpenRetailWebApiPostResponse> .PostRequest(_apiUrl, api, obj);

                result = Convert.ToInt32(response.Results);

                if (result > 0)
                {
                    obj.total_nota = GetTotalNota(obj);

                    // jika terjadi perubahan status nota dari tunai ke kredit
                    if (obj.tanggal_tempo_old.IsNull() && !obj.tanggal_tempo.IsNull())
                    {
                        obj.total_pelunasan = 0;
                    }
                    else if (obj.tanggal_tempo.IsNull()) // jika penjualan tunai, langsung update ke pembayaran piutang
                    {
                        obj.total_pelunasan = obj.grand_total;
                    }

                    foreach (var item in obj.item_beli.Where(f => f.Produk != null))
                    {
                        item.entity_state = EntityState.Unchanged;
                    }
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(result);
        }
        public void Ok(object sender, object data)
        {
            if (data is ItemBeliProduk) // pencarian produk baku
            {
                var itemBeli = (ItemBeliProduk)data;
                var produk   = itemBeli.Produk;

                if (!IsExist(produk.produk_id))
                {
                    SetItemProduk(this.gridControl, _rowIndex, itemBeli, itemBeli.jumlah - itemBeli.jumlah_retur, itemBeli.harga);
                    this.gridControl.Refresh();
                    RefreshTotal();

                    GridListControlHelper.SetCurrentCell(this.gridControl, _rowIndex, _colIndex + 1);

                    RefreshTotal();
                }
                else
                {
                    MsgHelper.MsgWarning("Data produk sudah diinputkan");
                    GridListControlHelper.SelectCellText(this.gridControl, _rowIndex, _colIndex);
                }
            }
            else if (data is Supplier) // pencarian Customer
            {
                this._supplier   = (Supplier)data;
                txtSupplier.Text = this._supplier.nama_supplier;
                KeyPressHelper.NextFocus();
            }
            else if (data is BeliProduk) // pencarian data jual
            {
                IBeliProdukBll bll = new BeliProdukBll(_log);

                this._beli           = (BeliProduk)data;
                this._beli.item_beli = bll.GetItemBeli(this._beli.beli_produk_id).ToList();
                txtNotaBeli.Text     = this._beli.nota;

                KeyPressHelper.NextFocus();
            }
        }
        private void txtNotaBeli_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (KeyPressHelper.IsEnter(e))
            {
                if (this._supplier == null || txtSupplier.Text.Length == 0)
                {
                    MsgHelper.MsgWarning("Maaf isian data belum lengkap !");
                    txtSupplier.Focus();

                    return;
                }

                var nota = ((TextBox)sender).Text;

                IBeliProdukBll bll        = new BeliProdukBll(_log);
                var            listOfBeli = bll.GetNotaSupplier(this._supplier.supplier_id, nota);

                if (listOfBeli.Count == 0)
                {
                    MsgHelper.MsgWarning("Data nota beli tidak ditemukan");
                    txtNotaBeli.Focus();
                    txtNotaBeli.SelectAll();
                }
                else if (listOfBeli.Count == 1)
                {
                    _beli           = listOfBeli[0];
                    _beli.item_beli = bll.GetItemBeli(_beli.beli_produk_id).ToList();

                    txtNotaBeli.Text = _beli.nota;
                    KeyPressHelper.NextFocus();
                }
                else // data lebih dari satu
                {
                    var frmLookup = new FrmLookupNota("Data Nota Pembelian", listOfBeli);
                    frmLookup.Listener = this;
                    frmLookup.ShowDialog();
                }
            }
        }
        public int Save(BeliProduk obj)
        {
            var result = 0;

            try
            {
                obj.tanggal = obj.tanggal.ToUtc();

                var api      = "save";
                var response = RestSharpHelper <OpenRetailWebApiPostResponse> .PostRequest(_apiUrl, api, obj);

                result = Convert.ToInt32(response.Results);

                if (result > 0)
                {
                    obj.total_nota = GetTotalNota(obj);

                    // jika pembelian tunai, langsung insert ke pembayaran hutang
                    if (obj.tanggal_tempo.IsNull())
                    {
                        obj.total_pelunasan = obj.grand_total;
                    }

                    foreach (var item in obj.item_beli.Where(f => f.Produk != null))
                    {
                        item.entity_state = EntityState.Unchanged;
                    }
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(result);
        }
        protected override void Simpan()
        {
            if (this._supplier == null || txtSupplier.Text.Length == 0)
            {
                MsgHelper.MsgWarning("'Supplier' tidak boleh kosong !");
                txtSupplier.Focus();

                return;
            }

            var total = SumGrid(this._listOfItemBeli);

            if (!(total > 0))
            {
                MsgHelper.MsgWarning("Anda belum melengkapi inputan data produk !");
                return;
            }

            if (rdoKredit.Checked)
            {
                if (!DateTimeHelper.IsValidRangeTanggal(dtpTanggal.Value, dtpTanggalTempo.Value))
                {
                    MsgHelper.MsgNotValidRangeTanggal();
                    return;
                }
            }

            if (!MsgHelper.MsgKonfirmasi("Apakah proses ingin dilanjutkan ?"))
            {
                return;
            }

            if (_isNewData)
            {
                _beli = new BeliProduk();
            }

            _beli.pengguna_id   = this._pengguna.pengguna_id;
            _beli.Pengguna      = this._pengguna;
            _beli.supplier_id   = this._supplier.supplier_id;
            _beli.Supplier      = this._supplier;
            _beli.nota          = txtNota.Text;
            _beli.tanggal       = dtpTanggal.Value;
            _beli.tanggal_tempo = DateTimeHelper.GetNullDateTime();
            _beli.is_tunai      = rdoTunai.Checked;

            if (rdoKredit.Checked) // pembelian kredit
            {
                _beli.tanggal_tempo = dtpTanggalTempo.Value;
            }

            _beli.ppn        = NumberHelper.StringToDouble(txtPPN.Text);
            _beli.diskon     = NumberHelper.StringToDouble(txtDiskon.Text);
            _beli.keterangan = txtKeterangan.Text;

            _beli.item_beli = this._listOfItemBeli.Where(f => f.Produk != null).ToList();
            foreach (var item in _beli.item_beli)
            {
                if (!(item.harga > 0))
                {
                    item.harga = item.Produk.harga_beli;
                }
            }

            if (!_isNewData) // update
            {
                _beli.item_beli_deleted = _listOfItemBeliDeleted;
            }

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

            using (new StCursor(Cursors.WaitCursor, new TimeSpan(0, 0, 0, 0)))
            {
                if (_isNewData)
                {
                    result = _bll.Save(_beli, ref validationError);
                }
                else
                {
                    result = _bll.Update(_beli, ref validationError);
                }

                if (result > 0)
                {
                    try
                    {
                        if (chkCetakNotaBeli.Checked)
                        {
                            CetakNota(_beli.beli_produk_id);
                        }
                    }
                    catch
                    {
                    }

                    Listener.Ok(this, _isNewData, _beli);

                    _supplier = null;
                    _listOfItemBeli.Clear();
                    _listOfItemBeliDeleted.Clear();

                    this.Close();
                }
                else
                {
                    if (validationError.Message.NullToString().Length > 0)
                    {
                        MsgHelper.MsgWarning(validationError.Message);
                        base.SetFocusObject(validationError.PropertyName, this);
                    }
                    else
                    {
                        MsgHelper.MsgUpdateError();
                    }
                }
            }
        }
        private void LoadItemBeli(BeliProduk beliProduk)
        {
            IBeliProdukBll bll = new BeliProdukBll(_log);

            _beli.item_beli = bll.GetItemBeli(_beli.beli_produk_id).ToList();
        }
        public int Update(BeliProduk obj)
        {
            var result = 0;

            try
            {
                _context.BeginTransaction();

                var transaction = _context.transaction;

                obj.total_nota = GetTotalNota(obj);

                // update header
                result = _context.db.Update <BeliProduk>(obj, transaction) ? 1 : 0;

                // delete detail
                foreach (var item in obj.item_beli_deleted)
                {
                    result = _context.db.Delete <ItemBeliProduk>(item, transaction) ? 1 : 0;
                }

                // insert/update detail
                foreach (var item in obj.item_beli.Where(f => f.Produk != null))
                {
                    item.beli_produk_id = obj.beli_produk_id;
                    item.pengguna_id    = obj.pengguna_id;

                    if (item.entity_state == EntityState.Added)
                    {
                        item.item_beli_produk_id = _context.GetGUID();

                        _context.db.Insert <ItemBeliProduk>(item, transaction);

                        result = 1;
                    }
                    else if (item.entity_state == EntityState.Modified)
                    {
                        result = _context.db.Update <ItemBeliProduk>(item, transaction) ? 1 : 0;
                    }

                    // update entity state
                    item.entity_state = EntityState.Unchanged;
                }

                // jika terjadi perubahan status nota dari tunai ke kredit
                if (obj.tanggal_tempo_old.IsNull() && !obj.tanggal_tempo.IsNull())
                {
                    result = HapusPembayaranHutang(obj);
                    if (result > 0)
                    {
                        obj.total_pelunasan = 0;
                    }
                }
                else if (obj.tanggal_tempo.IsNull()) // jika pembelian tunai, langsung update ke pembayaran hutang
                {
                    result = SavePembayaranHutang(obj);
                    if (result > 0)
                    {
                        obj.total_pelunasan = obj.grand_total;
                    }
                }

                _context.Commit();

                LogicalThreadContext.Properties["NewValue"] = obj.ToJson();
                _log.Info("Update data");

                result = 1;
            }
            catch (Exception ex)
            {
                _log.Error("Error:", ex);
            }

            return(result);
        }