Exemple #1
0
        public Task <PembayaranPembelian> CreatePembayaran(int pembelianId, PembayaranPembelian pembayaran, bool forced)
        {
            var trans = dbContext.Database.BeginTransaction();

            try
            {
                var pembelian = dbContext.Pembelian.Where(x => x.Id == pembelianId)
                                .Include(x => x.Items)
                                .Include(x => x.OrderPembelian)
                                .Include(x => x.PembayaranPembelian).AsNoTracking().FirstOrDefault();

                if (pembelian == null)
                {
                    throw new SystemException("Pembelian Tidak Ditemukan");
                }

                var    totalInvoice = pembelian.Total - pembelian.TotalDiscount;
                double totalBayar   = 0;
                if (pembelian.PembayaranPembelian != null)
                {
                    totalBayar = pembelian.PembayaranPembelian.Sum(x => x.PayValue);
                }

                var sisa = totalInvoice - totalBayar - pembayaran.PayValue;

                if (sisa < 0 && !forced)
                {
                    throw new SystemException("Pembayaran Anda Melebihi Tagihan Invoice !");
                }

                var status = sisa > 0 ? PaymentStatus.Panjar:  PaymentStatus.Lunas;
                pembelian.Status = status;
                pembelian.OrderPembelian.Status = OrderStatus.Selesai;
                dbContext.PembayaranPembelian.Add(pembayaran);
                var result = dbContext.SaveChanges();

                if (result <= 0)
                {
                    throw new SystemException("Pembayaran Gagal !");
                }

                trans.Commit();
                return(Task.FromResult(pembayaran));
            }
            catch (Exception ex)
            {
                trans.Rollback();
                _logger.LogError(ex.Message);
                throw new SystemException(ex.Message);
            }
        }
Exemple #2
0
        public Task <bool> UpdatePembayaran(PembayaranPembelian model)
        {
            try
            {
                var pembelian = dbContext.Pembelian.Where(x => x.Id == model.Pembelian.Id)
                                .Include(x => x.Items)
                                .Include(x => x.OrderPembelian)
                                .Include(x => x.PembayaranPembelian).FirstOrDefault();

                if (pembelian == null || !pembelian.PembayaranPembelian.Any())
                {
                    throw new SystemException("Data Pembelian atau Pembayaran Tidak Ditemukan");
                }


                var totalInvoice = pembelian.Total - pembelian.TotalDiscount;
                var totalWithoutCurrentPayment = pembelian.PembayaranPembelian.Where(x => x.Id != model.Id).Sum(x => x.PayValue);

                if (totalWithoutCurrentPayment + model.PayValue > totalInvoice)
                {
                    throw new SystemException("Maaf, Nilai Bayar Terlalu Besar !");
                }

                var oldPembayaran = pembelian.PembayaranPembelian.Where(x => x.Id == model.Id).FirstOrDefault();
                if (oldPembayaran == null)
                {
                    throw new SystemException("Pembayaran Tidak Ditemukan");
                }

                if (totalWithoutCurrentPayment + model.PayValue < totalInvoice)
                {
                    pembelian.OrderPembelian.Status = OrderStatus.Diproses;
                    pembelian.Status = PaymentStatus.Panjar;
                }
                else
                {
                    pembelian.OrderPembelian.Status = OrderStatus.Selesai;
                    pembelian.Status = PaymentStatus.Lunas;
                }

                dbContext.Entry(oldPembayaran).CurrentValues.SetValues(model);
                dbContext.SaveChanges();
                return(Task.FromResult(true));
            }
            catch (Exception ex)
            {
                throw new SystemException(ex.Message);
            }
        }