protected void HighlightDocuments() { totalIncome = totalExpense = 0; TreeIter iter; if (!documents.GetIterFirst(out iter)) { return; } var defaultIncomeCategory = CategoryRepository.DefaultIncomeCategory(uow); progressBar.Fraction = 0; progressBar.Text = "Идет обработка файла выгрузки..."; double progressStep = 1.0 / rowsCount; do { //Шевелим прогрессбаром. I'd like to move it, move it. if (progressBar.Fraction + progressStep > 1) { progressBar.Fraction = 1; } else { progressBar.Fraction += progressStep; } while (Application.EventsPending()) { Application.RunIteration(); } var doc = (documents.GetValue(iter, (int)Columns.TransferDocumentCol) as TransferDocument); //Сначала пробуем найти нашу организацию. Она должна фигурировать либо как получатель либо как плательщик. var organization = OrganizationRepository.GetOrganizationByInn(uow, doc.PayerInn); if (organization == null) { //Нам платят organization = OrganizationRepository.GetOrganizationByInn(uow, doc.RecipientInn); if (organization == null) { organization = OrganizationRepository.GetOrganizationByAccountNumber(uow, doc.RecipientCheckingAccount); if (organization == null) { progressBar.Fraction = 0; progressBar.Text = "Ошибка обработки выгрузки!"; throw new Exception("Не удалось обнаружить нашу организацию ни по ИНН, ни по номеру счета. Заполните организацию, или проверьте корректность ИНН."); } } //Проверяем наш счет if (!organization.Accounts.Any(acc => acc.Number == doc.RecipientCheckingAccount)) { documents.SetValue(iter, (int)Columns.RecipientAccountColorCol, NeedToAdd); } //Ищем плательщика var payerCounterparty = CounterpartyRepository.GetCounterpartyByINN(uow, doc.PayerInn); if (payerCounterparty == null) { payerCounterparty = CounterpartyRepository.GetCounterpartyByAccount(uow, doc.PayerAccount); } if (payerCounterparty == null) { documents.SetValue(iter, (int)Columns.PayerNameColorCol, NeedToAdd); documents.SetValue(iter, (int)Columns.PayerAccountColorCol, NeedToAdd); } else if (!payerCounterparty.Accounts.Any(acc => acc.Number == doc.PayerCheckingAccount)) { documents.SetValue(iter, (int)Columns.PayerAccountColorCol, NeedToAdd); } documents.SetValue(iter, (int)Columns.CategoryComboModel, incomeCategories); documents.SetValue(iter, (int)Columns.CategoryName, defaultIncomeCategory.Name); documents.SetValue(iter, (int)Columns.CategoryObject, defaultIncomeCategory); totalIncome += doc.Total; } else { //Мы платим //Проверяем наш счет if (!organization.Accounts.Any(acc => acc.Number == doc.PayerCheckingAccount)) { documents.SetValue(iter, (int)Columns.PayerAccountColorCol, NeedToAdd); } //Ищем получателя var recipientCounterparty = CounterpartyRepository.GetCounterpartyByINN(uow, doc.RecipientInn); if (recipientCounterparty == null) { //Возможно это сотрудник var employee = EmployeeRepository.GetEmployeeByINNAndAccount(uow, doc.RecipientInn, doc.RecipientCheckingAccount); if (employee == null) { documents.SetValue(iter, (int)Columns.RecipientNameColorCol, NeedToAdd); documents.SetValue(iter, (int)Columns.RecipientAccountColorCol, NeedToAdd); } } else if (!recipientCounterparty.Accounts.Any(acc => acc.Number == doc.RecipientCheckingAccount)) { documents.SetValue(iter, (int)Columns.RecipientAccountColorCol, NeedToAdd); } documents.SetValue(iter, (int)Columns.CategoryComboModel, expenseCategories); if (recipientCounterparty != null && recipientCounterparty.DefaultExpenseCategory != null) { documents.SetValue(iter, (int)Columns.CategoryName, recipientCounterparty.DefaultExpenseCategory.Name); documents.SetValue(iter, (int)Columns.CategoryObject, recipientCounterparty.DefaultExpenseCategory); } totalExpense += doc.Total; } //Проверяем банки var payerBank = BankRepository.GetBankByBik(uow, doc.PayerBik); if (payerBank == null && !String.IsNullOrEmpty(doc.PayerBik)) { documents.SetValue(iter, (int)Columns.PayerBankColorCol, NeedToAdd); } var recipientBank = BankRepository.GetBankByBik(uow, doc.RecipientBik); if (recipientBank == null && !String.IsNullOrEmpty(doc.PayerBik)) { documents.SetValue(iter, (int)Columns.RecipientBankColorCol, NeedToAdd); } } while (documents.IterNext(ref iter)); progressBar.Text = "Обработка файла выгрузки завершена"; }