Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }