private void checkDue() { try { using (var ctx = new finalContext()) { var lon = from lo in ctx.FPaymentInfo where lo.PaymentDate <= DateTime.Today.Date && (lo.PaymentStatus == "Pending" || lo.PaymentStatus == "On Hold") select lo; foreach (var item in lon) { var ctr = ctx.FPaymentInfo.Where(x => (x.PaymentDate <= DateTime.Today.Date && x.LoanID == item.LoanID) && (x.PaymentStatus == "Due" || x.PaymentStatus == "Returned" || x.PaymentStatus == "Due/Pending" || x.PaymentStatus == "Deposited")).Count(); if (ctr == 0) { item.PaymentStatus = "Due"; } else { item.PaymentStatus = "Due/Pending"; } } var dep = from d in ctx.FPaymentInfo where d.PaymentStatus == "Due" select d; foreach (var item in dep) { var ctr = ctx.FPaymentInfo.Where(x => x.LoanID == item.LoanID && x.PaymentStatus == "Deposited").Count(); if (ctr != 0) { item.PaymentStatus = "Due/Pending"; } } var lons = from lo in ctx.Loans where lo.Status == "Released" && lo.Service.Department == "Financing" select lo; foreach (var item in lons) { var ctr1 = ctx.FPaymentInfo.Where(x => x.LoanID == item.LoanID && x.PaymentStatus == "Cleared").Count(); var ctr2 = ctx.FPaymentInfo.Where(x => x.LoanID == item.LoanID).Count(); if (ctr1 == ctr2) { item.Status = "Paid"; PaidLoan pl = new PaidLoan { LoanID = item.LoanID, DateFinished = DateTime.Today.Date }; ctx.PaidLoans.Add(pl); } } //MICRO var mLoans = from m in ctx.MPaymentInfoes where m.DueDate < DateTime.Today.Date && m.PaymentStatus == "Pending" select m; DateTime dt; DateTime dt2; int Interval = 0; DateInterval dInt = DateInterval.Day; foreach (var itm in mLoans) { dt = itm.DueDate; itm.PaymentStatus = "Unpaid"; itm.TotalPayment = 0; var ser = ctx.Services.Find(itm.Loan.ServiceID); var iAmt = itm.TotalAmount; //var ln = ctx.Loans.Find(itm.LoanID); double cRem = itm.RemainingLoanBalance; /*var rc = ctx.MPaymentInfoes.Where(x => x.LoanID == itm.LoanID && x.PaymentStatus == "Paid").Count(); if (rc > 0) { var re = from x in ctx.MPaymentInfoes where x.LoanID == itm.LoanID && x.PaymentStatus == "Paid" select x; foreach (var item in re) { cRem = cRem - itm.TotalPayment; } }*/ double ciRate = ser.LatePaymentPenalty / 100; double ctRate = itm.TotalAmount * ciRate; double ctBalance = itm.TotalAmount; //System.Windows.MessageBox.Show(ciRate.ToString()); //System.Windows.MessageBox.Show(ctRate.ToString()); int n = itm.PaymentNumber; while (dt < DateTime.Today.Date) { String value = itm.Loan.Mode; if (value == "Semi-Monthly") { Interval = 15; dInt = DateInterval.Day; } else if (value == "Weekly") { Interval = 7; dInt = DateInterval.Day; } else if (value == "Daily") { Interval = 1; dInt = DateInterval.Day; } dt = DateAndTime.DateAdd(dInt, Interval, dt); bool isHoliday = true; while (isHoliday == true || dt.Date.DayOfWeek.ToString() == "Saturday" || dt.Date.DayOfWeek.ToString() == "Sunday") { if (dt.Date.DayOfWeek.ToString() == "Saturday") { dt = DateAndTime.DateAdd(DateInterval.Day, 2, dt); } else if (dt.Date.DayOfWeek.ToString() == "Sunday") { dt = DateAndTime.DateAdd(DateInterval.Day, 1, dt); } var myC = ctx.Holidays.Where(x => x.Date.Month == dt.Date.Month && x.Date.Day == dt.Date.Day && x.isYearly == true).Count(); if (myC > 0) { dt = DateAndTime.DateAdd(DateInterval.Day, 1, dt); isHoliday = true; } else { myC = ctx.Holidays.Where(x => x.Date.Month == dt.Date.Month && x.Date.Day == dt.Date.Day && x.Date.Year == dt.Date.Year && x.isYearly == !true).Count(); if (myC > 0) { dt = DateAndTime.DateAdd(DateInterval.Day, 1, dt); isHoliday = true; } else { isHoliday = false; } } } String str = ""; double tRate = ctRate; str = tRate.ToString("N2"); tRate = Convert.ToDouble(str); //System.Windows.MessageBox.Show(tRate.ToString()); double tBalance = ctBalance + tRate; str = tBalance.ToString("N2"); tBalance = Convert.ToDouble(str); double tAmount = itm.Amount + tBalance; str = tAmount.ToString("N2"); tAmount = Convert.ToDouble(str); ctBalance = tAmount; ctRate = ctBalance * ciRate; double tRem = cRem + tRate; str = tRem.ToString("N2"); tRem = Convert.ToDouble(str); cRem = tRem; dt2 = DateAndTime.DateAdd(dInt, Interval, dt); String st = "Unpaid"; if (dt2 > DateTime.Today.Date) st = "Pending"; MPaymentInfo mpi = null; if (tAmount <= tRem) { mpi = new MPaymentInfo { PaymentNumber = n + 1, Amount = itm.Amount, TotalBalance = tBalance, BalanceInterest = tRate, DueDate = dt, ExcessBalance = 0, LoanID = itm.LoanID, PaymentStatus = st, TotalAmount = tAmount, RemainingLoanBalance = tRem, PreviousBalance = iAmt }; ctx.MPaymentInfoes.Add(mpi); } else { if (itm.PaymentStatus == "Unpaid") { double tPaid = 0; var m1 = from m in ctx.MPaymentInfoes where m.LoanID == itm.LoanID && m.PaymentStatus == "Paid" select m; foreach (var i in m1) { tPaid = tPaid + i.TotalPayment; } var c = ctx.PassedToCollectors.Where(x => x.LoanID == itm.LoanID).Count(); if (c < 1) { using (var ctx2 = new finalContext()) { PassedToCollector pc = new PassedToCollector { DatePassed = DateTime.Today.Date, LoanID = itm.LoanID, RemainingBalance = tRem, TotalPassedBalance = tRem, TotalPaidBeforePassing = tPaid }; var l1 = ctx2.Loans.Find(itm.LoanID); l1.Status = "Under Collection"; ctx2.PassedToCollectors.Add(pc); ctx2.SaveChanges(); } } } } iAmt = tAmount; n++; } } ctx.SaveChanges(); } } catch (Exception ex) { System.Windows.MessageBox.Show("Runtime Error: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } }
private void btnPass_Click(object sender, RoutedEventArgs e) { if (cID == 0) { MessageBox.Show("Please assign a collector for this loan", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } MessageBoxResult mr = MessageBox.Show("Are you sure you want to process this transaction? This cannot be undone", "Question", MessageBoxButton.YesNo, MessageBoxImage.Question); if (mr == MessageBoxResult.Yes) { using (var ctx = new finalContext()) { var lon = ctx.Loans.Find(n); lon.Status = "Under Collection";//active int num = ctx.ClosedAccounts.Where(x => x.LoanID == n).Count(); var rmn = from rm in ctx.FPaymentInfo where rm.LoanID == n && rm.PaymentStatus == "Cleared" select rm; double r = 0; foreach (var item in rmn) { r = r + item.Amount; } double remain = lon.ReleasedLoan.TotalLoan - r; PassedToCollector pc = new PassedToCollector { LoanID = n, DatePassed = DateTime.Today.Date, RemainingBalance = remain, TotalPassedBalance = remain, TotalPaidBeforePassing = r }; ctx.PassedToCollectors.Add(pc); lon.CollectortID = cID; AuditTrail at = new AuditTrail { EmployeeID = UserID, DateAndTime = DateTime.Now, Action = "Voided Closed Account for Loan " + lon.LoanID }; ctx.AuditTrails.Add(at); ctx.SaveChanges(); MessageBox.Show("Transaction has been successfully processed", "Information", MessageBoxButton.OK, MessageBoxImage.Information); return; } } }