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); } }
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); } }