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; }
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)); }
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)); }
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; }
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); }
void SetContactSource(SQLCache cache, Debtor debtor) { cmbContactName.ItemsSource = cache != null ? new ContactCacheFilter(cache, 1, debtor._Account) : null; }
public abstract decimal CalculateManagementFee(Debtor debtor);
public void Reverse() { Debtor debtorResult = debtorBuss.Reverse(debtorTest.ReverseControl1()); Assert.AreEqual(debtorResult, debtorTest.ReverseResult1()); }
public AddWindowViewModel(Debtor debtor) { CurrentDebtor = debtor; }
public static Debtor CreateDebtor(long ID) { Debtor debtor = new Debtor(); debtor.Id = ID; return debtor; }
public bool SaveDebtor(Debtor newItem) { return(debtorDAL.Save(newItem)); }
/// <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()); }
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(); }
public Address GetDebtorAddress(Debtor item) { return(debtorDAL.GetDebtorAddress(item)); }
public Debtor GetDebtor(Debtor item) { return((Debtor)debtorDAL.GetItem <Debtor>(item)); }
public bool DeleteDebtor(Debtor item) { return(debtorDAL.Delete(item)); }
public DebtorWindowViewModel(Debtor debtor) { CurrentDebtor = debtor; debits = CurrentDebtor.Debits; }
public ViewDebtorViewModel(Debtors debtBook, String debtorName, INavigationService n) { _debtBook = debtBook; _selectedDebtor = _debtBook.getDebtor(debtorName); _nav = n; }
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; } } }
public AddDebtorViewModel(Debtor newDebtor) { CurrentDebtor = newDebtor; }
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)); }
public AddDebtorViewModel(DebtBookViewModel debtBookViewModel) { _debtBookViewModel = debtBookViewModel; _addDebtor = new Debtor("", 0); }
public void AddToDebtors(Debtor debtor) { base.AddObject("Debtors", debtor); }
public DebtorViewModel(Debtor debtor) { CurrentDebtor = debtor; }