public Task <bool> UpdatePembayaran(PembayaranPenjualan model) { try { var penjualan = dbContext.Penjualan.Where(x => x.Id == model.Penjualan.Id) .Include(x => x.Items) .Include(x => x.PembayaranPenjualan).FirstOrDefault(); if (penjualan == null || !penjualan.PembayaranPenjualan.Any()) { throw new SystemException("Data Penjualan atau Pembayaran Tidak Ditemukan"); } var totalInvoice = penjualan.Total - penjualan.TotalDiscount; var totalWithoutCurrentPayment = penjualan.PembayaranPenjualan.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 = penjualan.PembayaranPenjualan.Where(x => x.Id == model.Id).FirstOrDefault(); if (oldPembayaran == null) { throw new SystemException("Pembayaran Tidak Ditemukan"); } dbContext.Entry(oldPembayaran).CurrentValues.SetValues(model); if (totalWithoutCurrentPayment + model.PayValue < totalInvoice) { if (penjualan.OrderPenjualan != null) { penjualan.OrderPenjualan.Status = OrderStatus.Diproses; } model.Penjualan.Status = PaymentStatus.Panjar; penjualan.Status = PaymentStatus.Panjar; } else { if (penjualan.OrderPenjualan != null) { penjualan.OrderPenjualan.Status = OrderStatus.Selesai; } model.Penjualan.Status = PaymentStatus.Lunas; penjualan.Status = PaymentStatus.Lunas; } var result = dbContext.SaveChangesAsync().Result; return(Task.FromResult(true)); } catch (Exception ex) { throw new SystemException(ex.Message); } }
public Task <PembayaranPenjualan> CreatePembayaran(int penjualanId, PembayaranPenjualan pembayaran, bool forced) { if (pembayaran.Id > 0) { throw new SystemException("Data Sudah Disimpan !"); } var trans = dbContext.Database.BeginTransaction(); try { var penjualan = dbContext .Penjualan.Where(x => x.Id == penjualanId) .Include(x => x.PembayaranPenjualan) .Include(x => x.Items).SingleOrDefault(); if (penjualan == null) { throw new SystemException("Penjualan Tidak Ditemukan !"); } var totalInvoice = penjualan.Total - penjualan.TotalDiscount; double totalBayar = 0; if (pembayaran != null) { totalBayar = penjualan.PembayaranPenjualan.Sum(x => x.PayValue); } var sisa = totalInvoice - totalBayar - pembayaran.PayValue; if (sisa < 0 && !forced) { throw new SystemException($"Pembayaran Melebihi Tagihan Invoice ! sisa {sisa}"); } dbContext.Entry(pembayaran.Penjualan).State = EntityState.Unchanged; dbContext.PembayaranPenjualan.Add(pembayaran); var status = sisa > 0 ? PaymentStatus.Panjar : PaymentStatus.Lunas; penjualan.Status = status; dbContext.SaveChanges(); trans.Commit(); return(Task.FromResult(pembayaran)); } catch (Exception ex) { trans.Rollback(); _logger.LogError(ex.Message); throw new SystemException(ex.Message); } }