Esempio n. 1
0
        public void Run(IWorker worker)
        {
            worker.OperationName = "Подготовка данных";
            worker.ReportProgress(0, "Получение контрагентов");
            counterparties       = CounterpartyRepository.GetCounterpartiesWithInnAndAnyContact(uow);
            worker.OperationName = "Выгрузка имён и контактных данных";
            worker.StepsCount    = Steps;
            Result = new ExportCounterpariesData(uow);
            int i = 0;

            while (!worker.IsCancelled && i < Steps)
            {
                worker.ReportProgress(i, "Контрагент");
                Result.AddCounterparty(counterparties[i]);
                i++;
            }
        }
Esempio n. 2
0
        protected void FillDocuments()
        {
            uow = UnitOfWorkFactory.CreateWithoutRoot();
            TreeIter iter;

            progressBar.Fraction = 0;
            progressBar.Text     = "Загружаем выгрузку из банк-клиента... Операция 2/2";
            double progressStep = 1.0 / rowsCount;

            if (!documents.GetIterFirst(out iter))
            {
                return;
            }
            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();
                }

                //Проверяем галочку.
                if (!(bool)documents.GetValue(iter, (int)Columns.CheckCol))
                {
                    continue;
                }
                //Получаем документ
                var doc          = (TransferDocument)documents.GetValue(iter, (int)Columns.TransferDocumentCol);
                var organization = OrganizationRepository.GetOrganizationByInn(uow, doc.RecipientInn);
                //Мы платим
                if (organization == null)
                {
                    if (!AccountExpenseRepository.AccountExpenseExists(uow, doc.Date.Year, Int32.Parse(doc.Number), doc.PayerCheckingAccount))
                    {
                        organization = OrganizationRepository.GetOrganizationByInn(uow, doc.PayerInn);
                        var expenseUoW = UnitOfWorkFactory.CreateWithNewRoot <AccountExpense> ();
                        expenseUoW.Root.Number      = Int32.Parse(doc.Number);
                        expenseUoW.Root.Date        = doc.Date;
                        expenseUoW.Root.Total       = doc.Total;
                        expenseUoW.Root.Description = doc.PaymentPurpose;
                        expenseUoW.Root.MoneyOperation.PaymentType = PaymentType.cashless;
                        expenseUoW.Root.Organization        = organization;
                        expenseUoW.Root.OrganizationAccount = organization.Accounts.First(acc => acc.Number == doc.PayerCheckingAccount);
                        expenseUoW.Root.Counterparty        = CounterpartyRepository.GetCounterpartyByINN(expenseUoW, doc.RecipientInn);
                        if (expenseUoW.Root.Counterparty == null)
                        {
                            expenseUoW.Root.Employee        = EmployeeRepository.GetEmployeeByINNAndAccount(expenseUoW, doc.RecipientInn, doc.RecipientCheckingAccount);
                            expenseUoW.Root.EmployeeAccount = expenseUoW.Root.Employee.Accounts.First(acc => acc.Number == doc.RecipientCheckingAccount);
                        }
                        else
                        {
                            expenseUoW.Root.CounterpartyAccount = expenseUoW.Root.Counterparty.Accounts.First(acc => acc.Number == doc.RecipientCheckingAccount);
                        }
                        expenseUoW.Root.Category = (ExpenseCategory)documents.GetValue(iter, (int)Columns.CategoryObject);
                        expenseUoW.Save();
                    }
                }
                //Нам платят
                else
                {
                    if (!AccountIncomeRepository.AccountIncomeExists(uow, doc.Date.Year, Int32.Parse(doc.Number), doc.PayerInn, doc.PayerCheckingAccount))
                    {
                        var incomeUoW = UnitOfWorkFactory.CreateWithNewRoot <AccountIncome> ();
                        incomeUoW.Root.Number      = Int32.Parse(doc.Number);
                        incomeUoW.Root.Date        = doc.Date;
                        incomeUoW.Root.Total       = doc.Total;
                        incomeUoW.Root.Description = doc.PaymentPurpose;
                        incomeUoW.Root.MoneyOperation.PaymentType = PaymentType.cashless;
                        var counterparty = CounterpartyRepository.GetCounterpartyByINN(incomeUoW, doc.PayerInn);
                        if (counterparty == null)
                        {
                            counterparty = CounterpartyRepository.GetCounterpartyByAccount(incomeUoW, doc.PayerAccount);
                        }

                        incomeUoW.Root.Counterparty        = counterparty;
                        incomeUoW.Root.CounterpartyAccount = incomeUoW.Root.Counterparty.Accounts.First(acc => acc.Number == doc.PayerCheckingAccount);
                        incomeUoW.Root.Organization        = organization;
                        incomeUoW.Root.OrganizationAccount = organization.Accounts.First(acc => acc.Number == doc.RecipientCheckingAccount);
                        incomeUoW.Root.Category            = (IncomeCategory)documents.GetValue(iter, (int)Columns.CategoryObject);
                        incomeUoW.Save();
                    }
                }
            } while (documents.IterNext(ref iter));
            progressBar.Text = "Загрузка завершена успешно";
        }
Esempio n. 3
0
        protected void FillCounterparties()
        {
            uow = UnitOfWorkFactory.CreateWithoutRoot();
            TreeIter iter;

            progressBar.Fraction = 0;
            progressBar.Text     = "Идет исправление/создание недостающих объектов... Операция 1/2";
            double progressStep = 1.0 / rowsCount;

            if (!documents.GetIterFirst(out iter))
            {
                return;
            }
//			try {
            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();
                }

                //Проверяем галочку.
                if (!(bool)documents.GetValue(iter, (int)Columns.CheckCol))
                {
                    continue;
                }

                //Получаем документ
                var doc = (TransferDocument)documents.GetValue(iter, (int)Columns.TransferDocumentCol);

                //Обрабатываем банк плательщика.
                if ((documents.GetValue(iter, (int)Columns.PayerBankColorCol) as string) == NeedToAdd)
                {
                    var buow = UnitOfWorkFactory.CreateWithNewRoot <Bank> ();
                    buow.Root.Bik  = doc.PayerBik;
                    buow.Root.Name = doc.PayerBank;
                    var corAcc = new CorAccount {
                        CorAccountNumber = doc.PayerCorrespondentAccount
                    };
                    buow.Root.CorAccounts.Add(corAcc);
                    buow.Root.DefaultCorAccount = corAcc;
                    buow.Save();
                    documents.SetValue(iter, (int)Columns.PayerBankColorCol, OddRowColor);
                    DeselectSameBanks(doc.PayerBik);
                }

                //Обрабатываем плательщика
                if ((documents.GetValue(iter, (int)Columns.PayerNameColorCol) as string) == NeedToAdd)
                {
                    var cuow = UnitOfWorkFactory.CreateWithNewRoot <Counterparty> ();
                    cuow.Root.Name            = doc.PayerName;
                    cuow.Root.FullName        = doc.PayerName;
                    cuow.Root.INN             = doc.PayerInn;
                    cuow.Root.KPP             = doc.PayerKpp;
                    cuow.Root.PaymentMethod   = PaymentType.cashless;
                    cuow.Root.TypeOfOwnership = TryGetOrganizationType(doc.PayerName);
                    if (cuow.Root.TypeOfOwnership != null)
                    {
                        cuow.Root.PersonType = PersonType.legal;
                    }
                    else
                    {
                        if (MessageDialogHelper.RunQuestionDialog(
                                String.Format("Не удалось определить тип контрагента. Контрагент \"{0}\" является юридическим лицом?", doc.PayerName)))
                        {
                            cuow.Root.PersonType = PersonType.legal;
                        }
                        else
                        {
                            cuow.Root.PersonType = PersonType.natural;
                        }
                    }
                    cuow.Root.ObservableAccounts.Add(new Account()
                    {
                        Number = doc.PayerCheckingAccount,
                        InBank = BankRepository.GetBankByBik(uow, doc.PayerBik)
                    });
                    cuow.Save();
                    documents.SetValue(iter, (int)Columns.PayerNameColorCol, OddRowColor);
                    documents.SetValue(iter, (int)Columns.PayerAccountColorCol, EvenRowColor);
                    DeselectSameOrganizations(doc.PayerInn, doc.PayerName);
                }
                else if ((documents.GetValue(iter, (int)Columns.PayerAccountColorCol) as string) == NeedToAdd)
                {
                    var cuow = UnitOfWorkFactory.CreateForRoot <Counterparty> (
                        CounterpartyRepository.GetCounterpartyByINN(uow, doc.PayerInn).Id);
                    if (!cuow.Root.Accounts.Any(acc => acc.Number == doc.PayerCheckingAccount))
                    {
                        cuow.Root.Accounts.Add(new Account()
                        {
                            Number = doc.PayerCheckingAccount,
                            InBank = BankRepository.GetBankByBik(uow, doc.PayerBik)
                        });
                        cuow.Save();
                    }
                    documents.SetValue(iter, (int)Columns.PayerAccountColorCol, EvenRowColor);
                }

                //Обрабатываем банк получателя.
                if ((documents.GetValue(iter, (int)Columns.RecipientBankColorCol) as string) == NeedToAdd)
                {
                    var buow = UnitOfWorkFactory.CreateWithNewRoot <Bank> ();
                    buow.Root.Bik  = doc.RecipientBik;
                    buow.Root.Name = doc.RecipientBank;
                    var corAcc = new CorAccount {
                        CorAccountNumber = doc.RecipientCorrespondentAccount
                    };
                    buow.Root.CorAccounts.Add(corAcc);
                    buow.Root.DefaultCorAccount = corAcc;
                    buow.Save();
                    documents.SetValue(iter, (int)Columns.RecipientBankColorCol, EvenRowColor);
                    DeselectSameBanks(doc.RecipientBik);
                }

                //Обрабатываем получателя
                if ((documents.GetValue(iter, (int)Columns.RecipientNameColorCol) as string) == NeedToAdd)
                {
                    var cuow = UnitOfWorkFactory.CreateWithNewRoot <Counterparty> ();
                    cuow.Root.Name            = doc.RecipientName;
                    cuow.Root.FullName        = doc.RecipientName;
                    cuow.Root.INN             = doc.RecipientInn;
                    cuow.Root.KPP             = doc.RecipientKpp;
                    cuow.Root.PaymentMethod   = PaymentType.cashless;
                    cuow.Root.TypeOfOwnership = TryGetOrganizationType(doc.RecipientName);
                    if (cuow.Root.TypeOfOwnership != null)
                    {
                        cuow.Root.PersonType = PersonType.legal;
                    }
                    else
                    {
                        if (MessageDialogHelper.RunQuestionDialog(
                                String.Format("Не удалось определить тип контрагента. Контрагент \"{0}\" является юридическим лицом?", doc.RecipientName)))
                        {
                            cuow.Root.PersonType = PersonType.legal;
                        }
                        else
                        {
                            cuow.Root.PersonType = PersonType.natural;
                        }
                    }
                    cuow.Root.ObservableAccounts.Add(new Account()
                    {
                        Number = doc.RecipientCheckingAccount,
                        InBank = BankRepository.GetBankByBik(uow, doc.RecipientBik)
                    });
                    cuow.Save();
                    documents.SetValue(iter, (int)Columns.RecipientNameColorCol, EvenRowColor);
                    documents.SetValue(iter, (int)Columns.RecipientAccountColorCol, OddRowColor);
                    DeselectSameOrganizations(doc.RecipientInn, doc.RecipientName);
                }
                else if ((documents.GetValue(iter, (int)Columns.RecipientAccountColorCol) as string) == NeedToAdd)
                {
                    var cuow = UnitOfWorkFactory.CreateForRoot <Counterparty> (
                        CounterpartyRepository.GetCounterpartyByINN(uow, doc.RecipientInn).Id);
                    if (!cuow.Root.Accounts.Any(acc => acc.Number == doc.RecipientCheckingAccount))
                    {
                        cuow.Root.Accounts.Add(new Account()
                        {
                            Number = doc.RecipientCheckingAccount,
                            InBank = BankRepository.GetBankByBik(uow, doc.RecipientBik)
                        });
                        cuow.Save();
                    }
                    documents.SetValue(iter, (int)Columns.RecipientAccountColorCol, OddRowColor);
                }
            } while (documents.IterNext(ref iter));
//			} catch (Exception ex) {
//				progressBar.Text = "Произошла ошибка!";
//				progressBar.Fraction = 0;
//				throw ex;
//			}
            progressBar.Text = "Исправление/создание недостающих объектов завершено";
        }
Esempio n. 4
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 = "Обработка файла выгрузки завершена";
        }