private void btnResolved_Click(object sender, EventArgs e)
 {
     if (TicklerslistView.SelectedItems.Count != 1)
     {
         Models.Messenger.Show("Please select a reminder to resolve.", caption);
         return;
     }
     try {
         int             remID       = (int)TicklerslistView.SelectedItems[0].Tag;
         Models.Reminder rem         = Models.ReminderManager.GetReminder(remID);
         bool            wasResolved = rem.Resolve();
         if (wasResolved)
         {
             LogReminderResolved(rem);
             // Refresh list
             FillListView();
         }
     }
     catch (SqlException) {
         Models.Messenger.ShowDbMsg();
     }
 }
        private void PayInstallmentsButton_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            ViewModels.InstallmentViewModel oViewModel = InstallmentPerLoanGridControl.SelectedItem as ViewModels.InstallmentViewModel;

            if (oViewModel != null)
            {
                DAL.UnitOfWork oUnitOfWork = null;

                try
                {
                    oUnitOfWork = new DAL.UnitOfWork();

                    Models.Installment oInstallment = oUnitOfWork.InstallmentRepository
                                                      .GetById(oViewModel.Id);

                    var varList = oUnitOfWork.InstallmentRepository
                                  .Get()
                                  .Where(current => current.LoanId == oInstallment.LoanId)
                                  .Where(current => current.IsPayed == false)
                                  .Where(current => current.InstallmentDate < oInstallment.InstallmentDate)
                                  .OrderBy(current => current.InstallmentDate)
                                  .ToList();

                    if (varList.Count != 0)
                    {
                        Infrastructure.MessageBox.Show
                        (
                            caption: Infrastructure.MessageBox.Caption.Error,
                            text: string.Format("ابتدا بایست قسط تاریخ {0} پرداخت شود.", varList.Select(current => current.InstallmentDate).FirstOrDefault().ToPersianDate())
                        );

                        return;
                    }

                    oInstallment.IsPayed     = true;
                    oInstallment.PaymentDate = System.DateTime.Now;

                    oUnitOfWork.InstallmentRepository.Update(oInstallment);

                    Models.Member oMember = oUnitOfWork.MemberRepository
                                            .GetById(oInstallment.Loan.Member.Id);

                    oMember.Balance -= oInstallment.PaymentAmount;

                    oUnitOfWork.MemberRepository.Update(oMember);

                    Models.Fund oFund = oUnitOfWork.FundRepository
                                        .GetById(Utility.CurrentFund.Id);

                    oFund.Balance += oInstallment.PaymentAmount;

                    oUnitOfWork.FundRepository.Update(oFund);

                    Utility.CurrentFund = oFund;

                    Models.Transaction oTransaction = new Models.Transaction();

                    oTransaction.Amount          = oInstallment.PaymentAmount;
                    oTransaction.Balance         = oFund.Balance;
                    oTransaction.Date            = System.DateTime.Now;
                    oTransaction.Description     = string.Format("پرداخت قسط به مبلغ {0} ریال از {1}", oInstallment.PaymentAmount, oInstallment.Loan.Member.FullName);
                    oTransaction.TransactionType = Models.TransactionType.Installment;
                    oTransaction.MemberId        = oInstallment.Loan.Member.Id;
                    oTransaction.FundId          = oFund.Id;
                    oTransaction.InstallmentId   = oInstallment.Id;

                    oUnitOfWork.TransactionRepository.Insert(oTransaction);

                    Models.Reminder oReminder = oUnitOfWork.RemainderRepository
                                                .Get()
                                                .Where(current => current.InstallmentId == oInstallment.Id)
                                                .FirstOrDefault();

                    if (oReminder != null)
                    {
                        oUnitOfWork.RemainderRepository.Delete(oReminder);
                    }

                    oUnitOfWork.Save();

                    Models.Loan oLoan = oUnitOfWork.LoanRepository
                                        .Get()
                                        .Where(current => current.Id == oInstallment.LoanId)
                                        .Where(current => current.Installments.All(installment => installment.IsPayed == true))
                                        .FirstOrDefault();

                    if (oLoan != null)
                    {
                        oLoan.IsPayed  = true;
                        oLoan.IsActive = false;

                        oUnitOfWork.LoanRepository.Update(oLoan);

                        oUnitOfWork.Save();
                    }

                    Utility.MainWindow.RefreshUserInterface();
                    (Utility.MainWindow.SthPanel.Children[0] as MainPanelContentUserControl).MiniPersianSchedulerReminder.RefreshMonth();
                    (Utility.MainWindow.SthPanel.Children[0] as MainPanelContentUserControl).RefreshSchedulerListBox();
                }
                catch (System.Exception ex)
                {
                    Infrastructure.MessageBox.Show(ex.Message);;
                }
                finally
                {
                    if (oUnitOfWork != null)
                    {
                        oUnitOfWork.Dispose();
                        oUnitOfWork = null;
                    }
                }

                RefreshInstallmentGridControl();
            }
        }
        private void ODeleteLoanBackgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            DAL.UnitOfWork oUnitOfWork = null;

            try
            {
                oUnitOfWork = new DAL.UnitOfWork();

                Models.Fund oFund = oUnitOfWork.FundRepository
                                    .GetById(Utility.CurrentFund.Id);

                var varList = oUnitOfWork.InstallmentRepository
                              .Get()
                              .Where(current => current.LoanId == Utility.CurrentLoan.Id)
                              .ToList();


                if (varList.Count != 0)
                {
                    foreach (Models.Installment oInstallment in varList)
                    {
                        Models.Transaction oTransaction = oUnitOfWork.TransactionRepository
                                                          .Get()
                                                          .Where(current => current.InstallmentId == oInstallment.Id)
                                                          .FirstOrDefault();

                        Models.Member oMember = oUnitOfWork.MemberRepository
                                                .GetById((System.Guid)oTransaction.MemberId);

                        if (oInstallment.IsPayed == true)
                        {
                            oMember.Balance += oInstallment.PaymentAmount;

                            oUnitOfWork.MemberRepository.Update(oMember);
                        }

                        if (oTransaction != null)
                        {
                            oUnitOfWork.TransactionRepository.Delete(oTransaction);
                        }

                        Models.Reminder oReminder = oUnitOfWork.RemainderRepository
                                                    .Get()
                                                    .Where(current => current.InstallmentId == oInstallment.Id)
                                                    .FirstOrDefault();

                        if (oReminder != null)
                        {
                            oUnitOfWork.RemainderRepository.Delete(oReminder);
                        }

                        if (oFund != null)
                        {
                            oFund.Balance -= oInstallment.PaymentAmount;
                        }

                        oUnitOfWork.Save();
                    }

                    oUnitOfWork.FundRepository.Update(oFund);

                    oUnitOfWork.Save();

                    Utility.CurrentFund = oFund;
                }

                Models.Loan oLoan = oUnitOfWork.LoanRepository
                                    .GetById(Utility.CurrentLoan.Id);


                if (oLoan != null)
                {
                    Models.Transaction oTransaction = oUnitOfWork.TransactionRepository
                                                      .Get()
                                                      .Where(current => current.LoanId == oLoan.Id)
                                                      .FirstOrDefault();


                    Models.Member oMember = oUnitOfWork.MemberRepository
                                            .GetById(Utility.CurrentLoan.Member.Id);

                    oUnitOfWork.LoanRepository.Delete(oLoan);

                    if (oTransaction != null)
                    {
                        oUnitOfWork.TransactionRepository.Delete(oTransaction);
                    }

                    oUnitOfWork.Save();

                    oFund.Balance   += oLoan.LoanAmount;
                    oMember.Balance -= oLoan.LoanAmount;

                    oUnitOfWork.FundRepository.Update(oFund);
                    oUnitOfWork.MemberRepository.Update(oMember);
                }

                oUnitOfWork.Save();

                Utility.CurrentFund = oFund;
                Utility.CurrentLoan = null;
            }
            catch (System.Exception ex)
            {
                Infrastructure.MessageBox.Show(ex.Message);
            }
            finally
            {
                if (oUnitOfWork != null)
                {
                    oUnitOfWork.Dispose();
                    oUnitOfWork = null;
                }
            }
        }
        private void OBackgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            DAL.UnitOfWork oUnitOfWork = null;

            try
            {
                oUnitOfWork = new DAL.UnitOfWork();

                var varList = oUnitOfWork.InstallmentRepository
                              .Get()
                              .Where(current => current.LoanId == Utility.CurrentLoan.Id)
                              .Where(current => current.IsPayed == false)
                              .OrderBy(current => current.InstallmentDate)
                              .ToList();


                if (varList.Count != 0)
                {
                    int count   = varList.Count;
                    int counter = 0;

                    foreach (Models.Installment oInstallment in varList)
                    {
                        int progressBarPercent = System.Convert.ToInt32(((double)(counter + 1) / varList.Count) * 100);

                        oInstallment.IsPayed     = true;
                        oInstallment.PaymentDate = System.DateTime.Now;

                        oUnitOfWork.InstallmentRepository.Update(oInstallment);

                        Models.Member oMember = oUnitOfWork.MemberRepository
                                                .GetById(oInstallment.Loan.Member.Id);

                        oMember.Balance -= oInstallment.PaymentAmount;

                        oUnitOfWork.MemberRepository.Update(oMember);

                        Models.Fund oFund = oUnitOfWork.FundRepository
                                            .GetById(Utility.CurrentFund.Id);

                        oFund.Balance += oInstallment.PaymentAmount;

                        oUnitOfWork.FundRepository.Update(oFund);

                        Utility.CurrentFund = oFund;

                        Models.Transaction oTransaction = new Models.Transaction();

                        oTransaction.Amount          = oInstallment.PaymentAmount;
                        oTransaction.Balance         = oFund.Balance;
                        oTransaction.Date            = System.DateTime.Now;
                        oTransaction.Description     = string.Format("پرداخت قسط به مبلغ {0} ریال از {1}", oInstallment.PaymentAmount, oInstallment.Loan.Member.FullName);
                        oTransaction.TransactionType = Models.TransactionType.Installment;
                        oTransaction.MemberId        = oInstallment.Loan.Member.Id;
                        oTransaction.FundId          = oFund.Id;
                        oTransaction.InstallmentId   = oInstallment.Id;

                        oUnitOfWork.TransactionRepository.Insert(oTransaction);

                        Models.Reminder oReminder = oUnitOfWork.RemainderRepository
                                                    .Get()
                                                    .Where(current => current.InstallmentId == oInstallment.Id)
                                                    .FirstOrDefault();

                        if (oReminder != null)
                        {
                            oUnitOfWork.RemainderRepository.Delete(oReminder);
                        }

                        oUnitOfWork.Save();

                        Models.Loan oLoan = oUnitOfWork.LoanRepository
                                            .Get()
                                            .Where(current => current.Id == oInstallment.LoanId)
                                            .Where(current => current.Installments.All(installment => installment.IsPayed == true))
                                            .FirstOrDefault();

                        if (oLoan != null)
                        {
                            oLoan.IsPayed  = true;
                            oLoan.IsActive = false;

                            oUnitOfWork.LoanRepository.Update(oLoan);

                            oUnitOfWork.Save();
                        }

                        (sender as System.ComponentModel.BackgroundWorker).ReportProgress(progressBarPercent);

                        counter++;
                    }
                }

                oUnitOfWork.Save();
            }
            catch (System.Exception ex)
            {
                Infrastructure.MessageBox.Show(ex.Message);
            }
            finally
            {
                if (oUnitOfWork != null)
                {
                    oUnitOfWork.Dispose();
                    oUnitOfWork = null;
                }
            }
        }
示例#5
0
        private void OBackgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            DAL.UnitOfWork oUnitOfWork = null;

            oUnitOfWork = new DAL.UnitOfWork();

            Models.Member oMember = oUnitOfWork.MemberRepository
                .GetById(Utility.CurrentMember.Id);

            Models.Fund oFund = oUnitOfWork.FundRepository
                .GetById(Utility.CurrentFund.Id);

            Models.Loan oLoan = new Models.Loan();

            this.Dispatcher.Invoke(() =>
            {
                oLoan.LoanAmount = LoanAmountTextBox.Text.StringToMoney();
                oLoan.IsActive = true;
                oLoan.IsPayed = false;
                oLoan.MemberId = Utility.CurrentMember.Id;
                oLoan.InstallmentsCount = System.Convert.ToInt32(InstallmentsCountTextBox.Text.Trim());
                oLoan.RefundAmount = LoanAmountTextBox.Text.StringToMoney();
                oLoan.StartDate = LoanDateTimeDatePicker.SelectedDateTime;
                oLoan.EndDate = LoanDateTimeDatePicker.SelectedDateTime;
                oLoan.Description = DescriptionTextBox.Text.Trim();
            });

            oUnitOfWork.LoanRepository.Insert(oLoan);

            oFund.Balance -= oLoan.LoanAmount;

            oUnitOfWork.FundRepository.Update(oFund);

            oUnitOfWork.Save();

            Utility.CurrentFund = oFund;

            Models.Transaction oTransaction = new Models.Transaction();

            oTransaction.Amount = oLoan.LoanAmount;
            oTransaction.Balance = oFund.Balance;
            oTransaction.Date = System.DateTime.Now;
            oTransaction.Description = string.Format("پرداخت وام به مبلغ {0} ریال به {1}", oLoan.LoanAmount, Utility.CurrentMember.FullName);
            oTransaction.FundId = Utility.CurrentFund.Id;
            oTransaction.TransactionType = Models.TransactionType.Loan;
            oTransaction.MemberId = Utility.CurrentMember.Id;
            oTransaction.LoanId = oLoan.Id;

            oUnitOfWork.TransactionRepository.Insert(oTransaction);

            int percent = 0;

            this.Dispatcher.Invoke(() =>
            {
                percent = (CalculatePercentCheckBox.IsChecked == true) ? Utility.CurrentFund.Percent : 0;
            });

            ViewModels.CreateLoanViewModel oCreateLoanViewModel = CalculateLoanParameters(oLoan.LoanAmount, oLoan.InstallmentsCount, percent);

            for (int index = 0; index < oLoan.InstallmentsCount; index++)
            {
                int progressBarPercent = System.Convert.ToInt32(((double)(index + 1) / oLoan.InstallmentsCount) * 100);

                Models.Installment oInstallment = new Models.Installment();

                oInstallment.PaymentAmount = oCreateLoanViewModel.Installments.ElementAt(index);
                oInstallment.IsPayed = false;
                oInstallment.InstallmentDate = oLoan.StartDate.AddMonths(index + 1);
                oInstallment.PaymentDate = null;
                oInstallment.LoanId = oLoan.Id;

                oUnitOfWork.InstallmentRepository.Insert(oInstallment);

                Models.Reminder oReminder = new Models.Reminder();

                FarsiLibrary.Utils.PersianDate oPersianDate = new FarsiLibrary.Utils.PersianDate(oInstallment.InstallmentDate);

                oReminder.DateTime = oInstallment.InstallmentDate;
                oReminder.PersianDate.Year = oPersianDate.Year;
                oReminder.PersianDate.Month = oPersianDate.Month;
                oReminder.PersianDate.Day = oPersianDate.Day;
                oReminder.EventType = Models.Event.Installment;
                oReminder.Description = string.Format("قسط {0} وام {1} به مبلغ {2}",
                    FarsiLibrary.Utils.ToWords.ToString(index + 1), Utility.CurrentMember.FullName, oInstallment.PaymentAmount.ToRialStringFormat());
                oReminder.InstallmentId = oInstallment.Id;
                oReminder.FundId = Utility.CurrentFund.Id;

                oUnitOfWork.RemainderRepository.Insert(oReminder);

                if (index == oLoan.InstallmentsCount - 1)
                {
                    oLoan.EndDate = oInstallment.InstallmentDate;
                    oLoan.RefundAmount = oCreateLoanViewModel.RefundAmount;
                    oUnitOfWork.LoanRepository.Update(oLoan);
                }

                oUnitOfWork.Save();

                (sender as System.ComponentModel.BackgroundWorker).ReportProgress(progressBarPercent);

            }

            Utility.CurrentLoan = oLoan;

            oMember.Balance += oLoan.LoanAmount;

            oUnitOfWork.MemberRepository.Update(oMember);

            oUnitOfWork.Save();
        }
示例#6
0
        private async Task ExecuteOnceAsync(CancellationToken token)
        {
            var taskFactory = new TaskFactory(TaskScheduler.Current);

            // Cached since this will be referenced quite frequently in this method
            var referenceTime = DateTime.Now;

            // Determine which tasks will never run again and remove them from the database
            var removeList = _scheduledTasks.Where(x => x.Value.WillNeverRunAgain).ToList();

            // We must ensure that our database is updated -- to remove tasks that will never run again
            using (DevryDbContext context = new DevryDbContext())
            {
                foreach (var pair in removeList)
                {
                    Models.Reminder reminder = await context.Reminders.FindAsync(pair.Key);

                    if (reminder == null)
                    {
                        _logger.LogWarning($"Unable to locate reminder with Id: {pair.Key}");
                        continue;
                    }
                    else
                    {
                        _logger.LogInformation($"Reminder: '{reminder.Name}' with Id '{reminder.Id}' is being cleaned up. --Determined to never run again");
                        context.Reminders.Remove(reminder);
                        _scheduledTasks.Remove(pair.Key);
                    }
                }

                // Save changes (if applicable)
                await context.SaveChangesAsync();
            }

            var tasksThatShouldRun = _scheduledTasks.Values.Where(x => x.ShouldRun(referenceTime));

            foreach (var task in tasksThatShouldRun)
            {
                task.Increment();

                await taskFactory.StartNew(
                    async() =>
                {
                    try
                    {
                        await task.Task.ExecuteAsync(token);
                    }
                    catch (Exception ex)
                    {
                        var args = new UnobservedTaskExceptionEventArgs(ex as AggregateException ?? new AggregateException(ex));
                        UnobservedException?.Invoke(this, args);

                        if (!args.Observed)
                        {
                            throw;
                        }
                    }
                },
                    token);
            }
        }