예제 #1
0
        private void lvSchedule_SubItemEndEditing(object sender, UserControl.SubItemEndEditingEventArgs e)
        {
            if (1 == e.SubItem)
            {
                _isEditable = true;
                if (string.IsNullOrEmpty(e.DisplayText))
                {
                    e.DisplayText = ((Installment)(e.Item.Tag)).ExpectedDate.ToString();
                }
                ((Installment)(e.Item.Tag)).ExpectedDate = DateTime.Parse(e.DisplayText);
            }
            else if (2 == e.SubItem)
            {
                _isEditable = true;
                if (string.IsNullOrEmpty(e.DisplayText))
                {
                    e.DisplayText = GetFormattedValue(((Installment)(e.Item.Tag)).InterestsRepayment.Value);
                }
                ((Installment)(e.Item.Tag)).InterestsRepayment = decimal.Parse(e.DisplayText);
            }
            else if (3 == e.SubItem)
            {
                _isEditable = true;
                if (string.IsNullOrEmpty(e.DisplayText))
                {
                    e.DisplayText = GetFormattedValue(((Installment)(e.Item.Tag)).CapitalRepayment.Value);
                }
                ((Installment)(e.Item.Tag)).CapitalRepayment = decimal.Parse(e.DisplayText);
            }

            Installments.Clear();
            UpdateAmount();
        }
예제 #2
0
 private void lvLoanShares_SubItemEndEditing(object sender, UserControl.SubItemEndEditingEventArgs e)
 {
     if (1 == e.SubItem)
     {
         OCurrency amount;
         OCurrency originalAmount = (OCurrency)e.Item.SubItems[e.SubItem].Tag;
         try
         {
             amount = decimal.Parse(e.DisplayText);
             amount = amount < 0 ?  originalAmount : amount;
             amount = amount > _total ? originalAmount : amount;
         }
         catch
         {
             amount = originalAmount;
         }
         e.DisplayText = amount.GetFormatedValue(_loan.UseCents);
         e.Item.SubItems[e.SubItem].Tag = amount;
         _UpdateSum();
     }
 }
예제 #3
0
        private void lvContracts_SubItemEndEditing(object sender, UserControl.SubItemEndEditingEventArgs e)
        {
            if (4 == e.SubItem && e.Item.Tag != null)
            {
                e.Item.SubItems[e.SubItem].Tag  = (OCurrency)decimal.Parse(e.DisplayText);
                e.Item.SubItems[e.SubItem].Text = e.DisplayText;
            }
            if (5 == e.SubItem && e.Item.Tag != null)
            {
                e.Item.SubItems[e.SubItem].Tag  = (OCurrency)decimal.Parse(e.DisplayText);
                e.Item.SubItems[e.SubItem].Text = e.DisplayText;
            }

            var loan = new Loan();

            if (4 == e.SubItem || 5 == e.SubItem || 9 == e.SubItem && e.Item.Tag != null)
            {
                loan = e.Item.Tag as Loan;
            }

            if (loan != null && loan.Id != 0)
            {
                Installment i           = loan.GetFirstUnpaidInstallment();
                bool        disableFees = false;
                var         result      = new KeyValuePair <Loan, RepaymentEvent>();

                OCurrency penalties = (OCurrency)e.Item.SubItems[4].Tag;
                OCurrency principal = result.Value == null ? i.PrincipalHasToPay : result.Value.Principal;
                OCurrency interest  = result.Value == null ? i.InterestHasToPay : result.Value.InterestPrepayment;
                OCurrency total;

                if (penalties != loan.CalculateDuePenaltiesForInstallment(i.Number, TimeProvider.Today))
                {
                    disableFees = true;
                }

                total = (OCurrency)e.Item.SubItems[5].Tag;
                if (e.SubItem == 5)
                {
                    if (total < 0)
                    {
                        throw new ArithmeticException("Total cannot be negative.");
                    }
                    if (total > penalties)
                    {
                        OCurrency remainder = total - penalties;
                        if (remainder > interest)
                        {
                            remainder -= interest;
                            principal  = remainder > principal ? principal : remainder;
                            remainder -= principal;
                            total      = principal + interest + penalties + remainder;
                        }
                        else
                        {
                            interest  = remainder;
                            principal = 0;
                        }
                    }
                    else
                    {
                        penalties = total;
                        principal = 0;
                        interest  = 0;
                    }
                }

                e.Item.SubItems[2].Text = principal.GetFormatedValue(loan.UseCents);
                e.Item.SubItems[2].Tag  = principal;
                e.Item.SubItems[3].Text = interest.GetFormatedValue(loan.UseCents);
                e.Item.SubItems[3].Tag  = interest;
                e.Item.SubItems[4].Text = penalties.GetFormatedValue(loan.UseCents);
                e.Item.SubItems[4].Tag  = penalties;
                e.Item.SubItems[5].Text = total.GetFormatedValue(loan.UseCents);
                e.Item.SubItems[5].Tag  = total;

                if (e.Item.SubItems.Count > 9)
                {
                    e.Item.SubItems[9].Tag = cbItem.SelectedItem;
                }

                if (5 == e.SubItem)
                {
                    e.DisplayText = total.GetFormatedValue(loan.UseCents);
                }

                if (9 == e.SubItem)
                {
                    e.DisplayText = cbItem.SelectedItem.ToString();
                }
                if (10 == e.SubItem)
                {
                    e.Item.SubItems[10].Text = e.DisplayText;
                }


                int paymentOption = cbItem.SelectedIndex + 1;

                KeyValuePair <Loan, RepaymentEvent> keyValuePair = CalculatePrincipalAndInterest(loan,
                                                                                                 total.Value,
                                                                                                 disableFees,
                                                                                                 penalties.Value,
                                                                                                 paymentOption);
                if (keyValuePair.Value != null)
                {
                    e.Item.SubItems[2].Text =
                        keyValuePair.Value.Principal.GetFormatedValue(loan.Product.UseCents);
                    e.Item.SubItems[2].Tag  = keyValuePair.Value.Principal;
                    e.Item.SubItems[3].Text =
                        keyValuePair.Value.Interests.GetFormatedValue(loan.Product.UseCents);
                    e.Item.SubItems[3].Tag  = keyValuePair.Value.Interests;
                    e.Item.SubItems[4].Text =
                        keyValuePair.Value.Penalties.GetFormatedValue(loan.Product.UseCents);
                    e.Item.SubItems[4].Tag = keyValuePair.Value.Penalties;
                }
            }
            UpdateTotal();
        }