Exemplo n.º 1
0
        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 = "Обработка файла выгрузки завершена";
        }