public override decimal CalculateManagementFee(Debtor debtor)
        {
            decimal monthlyManagementFee;

            if (debtor.DisposableIncome < FirstThreshold) {
                monthlyManagementFee = MinimumFee;
            }
            else {
                if (debtor.DisposableIncome < SecondThreshold) {
                    monthlyManagementFee = UnderSecondThresholdFee;
                }
                else {
                    monthlyManagementFee = debtor.DisposableIncome * OverSecondThresholdPercent / 100;
                }
            }

            if (monthlyManagementFee < MinimumFee) {
                monthlyManagementFee = MinimumFee;
            }

            if (monthlyManagementFee > MaximumFee) {
                monthlyManagementFee = MaximumFee;
            }

            return monthlyManagementFee;
        }
예제 #2
0
        public void DebtManagementPlan_Debtor3CompanyB_IsCalculatedCorrectly()
        {
            var debtor =
                new Debtor
                    {
                        Name = "Miss T. Un-terre",
                        Income = 500m,
                        Expenditure = 400m,
                        Company = Company.CompanyB,
                        Debts = new[]
                                        {
                                            new Debt {AmountOwed = 100m},
                                            new Debt {AmountOwed = 2400m},
                                            new Debt {AmountOwed = 5000m}
                                        }
                    };

            var dmp = new DebtManagementPlan(debtor);

            Assert.That(dmp.MonthlyManagementFee, Is.EqualTo(30.0m));
            Assert.That(dmp.CreditorRepayments, Has.Count.EqualTo(3));
        }
예제 #3
0
        public void DebtManagementPlan_Debtor1CompanyA_IsCalculatedCorrectly()
        {
            var debtor =
                new Debtor
                    {
                        Name = "John Nogan",
                        Income = 980m,
                        Expenditure = 670m,
                        Company = Company.CompanyA,
                        Debts = new[]
                                        {
                                            new Debt {AmountOwed = 3000m},
                                            new Debt {AmountOwed = 12000m},
                                            new Debt {AmountOwed = 100m},
                                            new Debt {AmountOwed = 4000m}
                                        }
                    };

            var dmp = new DebtManagementPlan(debtor);

            Assert.That(dmp.MonthlyManagementFee, Is.EqualTo(46.5m));
            Assert.That(dmp.CreditorRepayments, Has.Count.EqualTo(4));
        }
예제 #4
0
        public void DebtManagementPlan_Debtor2CompanyC_IsCalculatedCorrectly()
        {
            var debtor =
                new Debtor
                    {
                        Name = "Paul A’rdé",
                        Income = 1560m,
                        Expenditure = 1399m,
                        Company = Company.CompanyC,
                        Debts = new[]
                                        {
                                            new Debt {AmountOwed = 300m},
                                            new Debt {AmountOwed = 2400m},
                                            new Debt {AmountOwed = 10000m},
                                            new Debt {AmountOwed = 2000m},
                                            new Debt {AmountOwed = 919m}
                                        }
                    };

            var dmp = new DebtManagementPlan(debtor);

            Assert.That(dmp.MonthlyManagementFee, Is.EqualTo(100.0m));
            Assert.That(dmp.CreditorRepayments, Has.Count.EqualTo(5));
        }
 public override decimal CalculateManagementFee(Debtor debtor)
 {
     return debtor.DisposableIncome * FeePercent / 100;
 }
예제 #6
0
        public void DebtManagementPlan_GivenADebtorWithATotalAmountOwedOfZero_DoesNotThrowAnException()
        {
            var debtor =
                new Debtor
                    {
                        Name = "Rick Rolling",
                        Income = 2000m,
                        Expenditure = 1200m,
                        Company = Company.CompanyA,
                        Debts =
                            new[]
                                {
                                    new Debt {AmountOwed = 0m}
                                }
                    };

            var dmp = new DebtManagementPlan(debtor);
        }
예제 #7
0
 void SetContactSource(SQLCache cache, Debtor debtor)
 {
     cmbContactName.ItemsSource = cache != null ? new ContactCacheFilter(cache, 1, debtor._Account) : null;
 }
예제 #8
0
 public abstract decimal CalculateManagementFee(Debtor debtor);
예제 #9
0
        public void Reverse()
        {
            Debtor debtorResult = debtorBuss.Reverse(debtorTest.ReverseControl1());

            Assert.AreEqual(debtorResult, debtorTest.ReverseResult1());
        }
예제 #10
0
 public AddWindowViewModel(Debtor debtor)
 {
     CurrentDebtor = debtor;
 }
예제 #11
0
 public static Debtor CreateDebtor(long ID)
 {
     Debtor debtor = new Debtor();
     debtor.Id = ID;
     return debtor;
 }
예제 #12
0
 public bool SaveDebtor(Debtor newItem)
 {
     return(debtorDAL.Save(newItem));
 }
예제 #13
0
        /// <summary>
        /// Получает массив сообщений по должникам при помощи фильтров:
        /// интервал публикации сообщения (дата-начало, дата-конец),
        /// а также фильтр по типу опубликуемого арбитражным управляющим сообщения.
        /// </summary>
        /// <param name="start">Дата-начало фильтра по дате публикации сообщения.</param>
        /// <param name="end">Дата-конец фильтра по дате публикации сообщения.</param>
        /// <param name="messageTypes">Объект типа сообщения суда, которое необходимо вытащить.</param>
        /// <returns>Массив сообщений по должникам с учетом фильтров по дате публикации и типу сообщения.</returns>
        public static DebtorMessage[] GetMessages(DateTime start, DateTime end, DebtorMessageType[] messageTypes)
        {
            if (isLoading)
            {
                throw new InvalidOperationException("Already Loading");
            }
            ProgressChanged?.Invoke(new ExportStage()
            {
                Name = "Подготовка"
            });
            isLoading = true;
            if (end < start)
            {
                throw new NegativeIntervalLengthException("Дата конца поиска не может быть раньше даты начала!");
            }
            if ((end - start).Days > 30)
            {
                throw new TooLongIntervalLengthException("Максимальная длина интервала - 30 дней!");
            }

            StartDate = start;
            EndDate   = end;
            List <DebtorMessage> resultList = new();

            sessionCookie = GetCookie();
            foreach (DebtorMessageType curMessageType in messageTypes)
            {
                ProgressChanged?.Invoke(new ExportStage()
                {
                    Name = $"Обрабатывается сообщение \"{curMessageType.Name}\" (номер: {curMessageType.Id})"
                });
                MessageId = curMessageType.Id;
                List <DebtorMessage> messages = new();
                //теперь нам нужно пробежать по всем страницам результатов поиска
                ushort curPage = 0;
                do
                {
                    PageId = curPage;
                    cancellationToken.ThrowIfCancellationRequested();
                    //вызываем показ выбранной страницы (curPage)
                    string pageContent = GetMessagesPage();
                    Thread.Sleep(rand.Next(300, 1001));
                    //если замечаем, что на странице есть надпись о том, что результатов нет,
                    //то значит что мы дошли до конца
                    bool isSearchFailed = pageContent.Contains(
                        NotFoundString);
                    if (isSearchFailed)
                    {
                        //если дошли до конца, То просто ждем случайно
                        //определенный промежуток времени и заканчиваем
                        //цикл обхода
                        Thread.Sleep(rand.Next(500, 5000));
                        //Если поиск не дал результатов
                        break;
                    }

                    HtmlDocument doc = new();
                    doc.LoadHtml(pageContent);
                    HtmlNode           messagesTable = doc.DocumentNode.SelectSingleNode("//*[@id=\"ctl00_cphBody_gvMessages\"]");
                    HtmlNodeCollection rows          = messagesTable.SelectNodes("tr");
                    foreach (HtmlNode row in rows)
                    {
                        HtmlNodeCollection columns = row.SelectNodes("td");
                        if (columns == null || columns.Count != 5)
                        {
                            continue;
                        }
                        string datePublished  = columns[0].InnerText.Trim('\r', '\n', '\t');
                        string messageType    = columns[1].InnerText.Trim('\r', '\n', '\t');
                        string messageLink    = columns[1].SelectSingleNode("a").GetAttributeValue("href", string.Empty);
                        string messageGuid    = messagePageHrefRegex.Match(messageLink).Groups[1].Value;
                        string debtorFullName = columns[2].InnerText.Trim('\r', '\n', '\t');
                        string address        = columns[3].InnerText.Trim('\r', '\n', '\t');
                        string authorFullName = columns[4].InnerText.Trim('\r', '\n', '\t');

                        if (messageType != "Сообщение о судебном акте")
                        {
                            continue;
                        }

                        DebtorMessage buffer = new()
                        {
                            Address       = address,
                            DatePublished = DateTime.ParseExact(datePublished, "dd.MM.yyyy HH:mm:ss", CultureInfo.CurrentCulture),
                            Debtor        = new Debtor()
                            {
                                FullName = debtorFullName
                            },
                            Owner = new ArbitrManager()
                            {
                                FullName = authorFullName
                            },
                            Type = curMessageType,
                            Guid = messageGuid
                        };
                        messages.Add(buffer);
                    }
                    ProgressChanged?.Invoke(new ExportStage()
                    {
                        Name = $"Обход страниц с сообщениями (Прочитано страниц с сообщениями: {curPage + 1})",
                        Done = curPage
                    });
                    curPage++;
                } while (true);

                //переводим получившийся список в массив
                resultList.AddRange(messages.ToArray());
            }

            isLoading = false;
            //возвращаем результат
            return(resultList.ToArray());
        }
예제 #14
0
        private void FillDataFromPeolpeOnPanelToProduct()
        {
            foreach (PersonOnPanel personOnPanel in peopleOnPanelCorrection)
            {
                Person person = personOnPanel.Person;
                if (personOnPanel.CheckBoxIsDebtor.Checked)
                {
                    Debtor debtor = product.GetDebtor(person);
                    if (debtor != null)
                    {
                        if (personOnPanel.TextBoxDebt.Text != "" && double.TryParse(personOnPanel.TextBoxDebt.Text, out double currentDebt))
                        {
                            debtor.Debt        = currentDebt;
                            debtor.Factor_Type = Debtor.FactorType.WithoutFactor;
                        }
                        else
                        {
                            if (personOnPanel.TextBoxFactor.Text != "" && double.TryParse(personOnPanel.TextBoxFactor.Text, out double currentFactor))
                            {
                                if (currentFactor == debtor.Person.DebtFactor)
                                {
                                    debtor.Factor_Type = Debtor.FactorType.Standart;
                                }
                                else
                                {
                                    debtor.Factor_Type = Debtor.FactorType.SpecialForProduct;
                                    debtor.Factor      = currentFactor;
                                }
                            }
                            else
                            {
                                debtor.Factor_Type = Debtor.FactorType.Standart;
                            }
                        }
                    }
                    else
                    {
                        if (personOnPanel.TextBoxDebt.Text != "" && double.TryParse(personOnPanel.TextBoxDebt.Text, out double currentDebt))
                        {
                            debtor = new Debtor(person, Debtor.FactorType.WithoutFactor, currentDebt);
                        }
                        else
                        {
                            if (personOnPanel.TextBoxFactor.Text != "" && double.TryParse(personOnPanel.TextBoxFactor.Text, out double currentFactor))
                            {
                                if (currentFactor == person.DebtFactor)
                                {
                                    int anyNumber = 0;
                                    debtor = new Debtor(person, Debtor.FactorType.Standart, anyNumber);
                                }
                                else
                                {
                                    debtor = new Debtor(person, Debtor.FactorType.SpecialForProduct, currentFactor);
                                }
                            }
                            else
                            {
                                int anyNumber = 0;
                                debtor = new Debtor(person, Debtor.FactorType.Standart, anyNumber);
                            }
                        }

                        product.Debtors.Add(debtor);//TODO maybe do method insert dy index inner list. this is for number order.
                    }
                }
                else
                {
                    if (product.IsPersonInDebtors(person))
                    {
                        product.RemoveDebtor(person);
                    }
                }

                if (personOnPanel.TextBoxPayment.Text != "" && double.TryParse(personOnPanel.TextBoxPayment.Text, out double currentPayment))
                {
                    Payer payer = product.GetPayer(person);

                    if (payer != null)
                    {
                        payer.Payment = currentPayment;
                    }
                    else
                    {
                        //payer = new Payer(person, currentPayment);
                        product.AddPayer(person, currentPayment);
                    }
                }
                else
                {
                    if (product.IsPersonInPayers(person))
                    {
                        product.RemovePayer(person);
                    }
                }
            }

            product.RecountDebtorsData();
        }
예제 #15
0
 public Address GetDebtorAddress(Debtor item)
 {
     return(debtorDAL.GetDebtorAddress(item));
 }
예제 #16
0
 public Debtor GetDebtor(Debtor item)
 {
     return((Debtor)debtorDAL.GetItem <Debtor>(item));
 }
예제 #17
0
 public bool DeleteDebtor(Debtor item)
 {
     return(debtorDAL.Delete(item));
 }
 public DebtorWindowViewModel(Debtor debtor)
 {
     CurrentDebtor = debtor;
     debits        = CurrentDebtor.Debits;
 }
예제 #19
0
 public ViewDebtorViewModel(Debtors debtBook, String debtorName, INavigationService n)
 {
     _debtBook       = debtBook;
     _selectedDebtor = _debtBook.getDebtor(debtorName);
     _nav            = n;
 }
예제 #20
0
        private void BtnBSave_Click(object sender, EventArgs e)
        {
            //throw new NotImplementedException();
            if (MessageBox.Show("ต้องการ บันทึกช้อมูล ", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.OK)
            {
                setBilling();
                String re = xC.accDB.bllDB.insertBilling(bll, xC.userId);
                int    chk = 0, chkD = 0;
                if (int.TryParse(re, out chk))
                {
                    txtBllId.Value = re;
                    foreach (Row rowB in grfBill.Rows)
                    {
                        if (rowB[colBitmId] == null)
                        {
                            continue;
                        }
                        BillingDetail blld = new BillingDetail();
                        blld.billing_id              = re;
                        blld.billing_detail_id       = "";
                        blld.expenses_draw_detail_id = rowB[colBexpnddId] != null ? rowB[colBexpnddId].ToString() : "";
                        blld.item_id       = rowB[colBitmId].ToString();
                        blld.item_name_t   = rowB[colBItmNameT].ToString();
                        blld.amount_draw   = rowB[colBExpn] != null ? rowB[colBExpn].ToString() : "0";
                        blld.active        = "";
                        blld.remark        = "";
                        blld.date_create   = "";
                        blld.date_modi     = "";
                        blld.date_cancel   = "";
                        blld.user_create   = "";
                        blld.user_modi     = "";
                        blld.user_cancel   = "";
                        blld.amount_income = rowB[colBimcome] != null ? rowB[colBimcome].ToString() : "0";
                        String re1 = "";
                        re1 = xC.accDB.blldDB.insertBillingDetail(blld, xC.userId);
                        if (int.TryParse(re1, out chk))
                        {
                            chkD++;

                            Debtor dtr = new Debtor();
                            dtr.debtor_id = "";
                            dtr.cus_id    = cus.cust_id;
                            if (!blld.amount_income.Equals("0"))
                            {
                                dtr.amount = blld.amount_income;
                            }
                            else if (!blld.amount_draw.Equals("0"))
                            {
                                dtr.amount = blld.amount_draw;
                            }
                            else
                            {
                                dtr.amount = "0";
                            }

                            dtr.billing_detail_id = re1;
                            dtr.payment_detail_id = "";
                            dtr.job_id            = jim.job_import_id;
                            dtr.remark            = "";
                            dtr.status_debtor     = "1";
                            dtr.comp_id           = cop.comp_id;
                            xC.accDB.dtrDB.insertDebtor(dtr, xC.userId);
                        }
                    }
                    if (chkD == (grfBill.Rows.Count - 1))
                    {
                        txtBllCode.Value = bll.billing_code;
                        Row row = grfCover.Rows.Add();
                        row[colVBllDoc] = bll.billing_code;
                        row[colVJobNo]  = bll.job_code;
                        row[colVAmt]    = bll.amount;
                        row[colVbllId]  = txtBllId.Value;

                        btnBSave.Image = Resources.accept_database24;
                    }
                }
                else
                {
                    btnBSave.Image = Resources.accept_database24;
                }
            }
        }
예제 #21
0
 public AddDebtorViewModel(Debtor newDebtor)
 {
     CurrentDebtor = newDebtor;
 }
예제 #22
0
        public void DebtManagementPlan_Debtor4CompanyC_IsCalculatedCorrectly()
        {
            var debtor =
                new Debtor
                    {
                        Name = "David Simmer",
                        Income = 2000m,
                        Expenditure = 1000m,
                        Company = Company.CompanyC,
                        Debts = new[]
                                        {
                                            new Debt {AmountOwed = 100m},
                                            new Debt {AmountOwed = 200m},
                                            new Debt {AmountOwed = 600m},
                                            new Debt {AmountOwed = 2000m},
                                            new Debt {AmountOwed = 7370m}
                                        }
                    };

            var dmp = new DebtManagementPlan(debtor);

            Assert.That(dmp.MonthlyManagementFee, Is.EqualTo(100.0m));
            Assert.That(dmp.CreditorRepayments, Has.Count.EqualTo(5));
        }
예제 #23
0
 public AddDebtorViewModel(DebtBookViewModel debtBookViewModel)
 {
     _debtBookViewModel = debtBookViewModel;
     _addDebtor         = new Debtor("", 0);
 }
예제 #24
0
 public void AddToDebtors(Debtor debtor)
 {
     base.AddObject("Debtors", debtor);
 }
예제 #25
0
 public DebtorViewModel(Debtor debtor)
 {
     CurrentDebtor = debtor;
 }