Esempio n. 1
0
        /// <summary>
        /// Запросить TZ в Equation
        /// </summary>
        /// <param name="account">Счет, для которого получаем выписку</param>
        /// <param name="alfamos">сессия, которая будет закрыта</param>
        /// <returns></returns>
        public List <Operation> GetOperations(Account account, Process alfamos, Unit unit)
        {
            List <Operation> exportedOperations = new List <Operation>();

            #region направляем в EQ запрос на создание выписки
            DateTime queryDateTime = DateTime.Now;
            EUCL.ClearScreen();
            send("TZ", 21, 17);
            enter();
            send(account.Number, 3, 29);
            enter();
            EUCL.SendStr("@4"); //F4
            EUCL.Wait();
            enter();


            #endregion

            #region ждем готового файла
            if (!Directory.Exists(_fileExportPath))
            {
                throw new Exception($@"У пользователя отсутствует директория экспорта на {_fileExportPath}");
            }
            for (int i = 0; i < WAIT_TIME; i++)
            {
                bool done = false;
                foreach (string fileName in Directory.GetFiles(_fileExportPath, "*.DBF"))
                {
                    FileInfo file = new FileInfo(fileName);
                    if (file.CreationTime > queryDateTime)
                    {
                        ExcelWorker excel = new ExcelWorker(file);
                        exportedOperations.AddRange(excel.ReadForOperations());
                        done = true;
                        break;
                    }
                }
                if (done)
                {
                    break;
                }
                Thread.Sleep(5000);
            }
            #endregion

            #region Поиск недостающих операций
            for (int i = 0; i < exportedOperations.Count; i++)
            {
                if (string.IsNullOrWhiteSpace(exportedOperations[i].Number) || exportedOperations[i].OperationDate.Year < 1950)
                {
                    DateTime LastFullDate; // дата последней операции  полными данными
                    if (i != 0)
                    {
                        LastFullDate = exportedOperations[i - 1].OperationDate;
                    }
                    else
                    {
                        LastFullDate = account.OpenedDate < unit.DateStart ? unit.DateStart : account.OpenedDate;
                    }

                    DateTime NextFullDate = unit.DateEnd; // дата следующей заполненной опреации
                    for (int j = i; j < exportedOperations.Count; j++)
                    {
                        if (!string.IsNullOrEmpty(exportedOperations[j].Number))
                        {
                            NextFullDate = exportedOperations[j].OperationDate > unit.DateEnd ? unit.DateEnd : exportedOperations[j].OperationDate;
                            break;
                        }
                        if (j == exportedOperations.Count - 1)
                        {
                            if (account.ClosedDate < unit.DateEnd && account.ClosedDate > unit.DateStart)
                            {
                                NextFullDate = account.ClosedDate;
                            }
                            else
                            {
                                NextFullDate = unit.DateEnd;
                            }
                        }
                    }

                    EUCL.ClearScreen();
                    send("TT", 21, 17);
                    enter();
                    send(account.Number, 3, 29);
                    send(LastFullDate.ToString("ddMMyy"), 14, 29);
                    send(NextFullDate.ToString("ddMMyy"), 16, 29);
                    enter();
                    enter();
                    #region поиск операций
                    do
                    {
                        EUCL.SendStr("1111111111");
                        EUCL.SendStr("@v");
                        EUCL.Wait();
                        EUCL.SendStr("1111111111");
                    } while (EUCL.ReadScreen(21, 79, 1).Equals("+"));
                    enter();
                    while (EUCL.ReadScreen(1, 32, 17).Equals("Просмотр проводки"))
                    {
                        string currentOperationNumber = EUCL.ReadScreen(8, 29, 45).Replace(" ", string.Empty);
                        if (string.IsNullOrWhiteSpace(currentOperationNumber) || !exportedOperations.Any(operation => operation.Number.Equals(currentOperationNumber)) &&
                            !exportedOperations[i].IsEdited)
                        {
                            Operation newOperation = new Operation
                            {
                                Number             = currentOperationNumber,
                                OperationDate      = DateTime.Parse(EUCL.ReadScreen(3, 40, 11)),
                                PayerAccountNumber = EUCL.ReadScreen(9, 15, 24).Replace(".", string.Empty),
                                RecieverAccount    = EUCL.ReadScreen(12, 15, 24).Replace(".", string.Empty),
                                PayerName          = $"{EUCL.ReadScreen(9, 44, 35).Replace("  ", string.Empty)}{EUCL.ReadScreen(10, 44, 35).Replace("  ", string.Empty)}{EUCL.ReadScreen(11, 44, 35).Replace("  ", string.Empty)}",
                                RecieverName       = $"{EUCL.ReadScreen(12, 44, 35).Replace("  ", string.Empty)}{EUCL.ReadScreen(13, 44, 35).Replace("  ", string.Empty)}{EUCL.ReadScreen(14, 44, 35).Replace("  ", string.Empty)}",
                                Comment            = $"{EUCL.ReadScreen(18, 10, 70).Replace("  ", string.Empty)}{EUCL.ReadScreen(19, 10, 70).Replace("  ", string.Empty)}",
                                DebetSum           = EUCL.ReadScreen(15, 15, 20).Replace(" ", string.Empty),
                                IsEdited           = true
                            };
                            if (newOperation.RecieverAccount.Equals("40911810904000000138") ||
                                newOperation.Comment.IndexOf("перевод между счетами") > -1)
                            {
                                newOperation.RecieverBankBIK  = newOperation.PayerBankBIK = "044525593";
                                newOperation.RecieverBankName = newOperation.PayerBankName = "АО \"Альфа-Банк\"";
                            }
                            exportedOperations[i] = newOperation;
                            break;
                        }
                        enter();
                        enter();
                    }
                    #endregion
                }
            }
            #endregion

            alfamos.CloseMainWindow();
            alfamos.WaitForExit(10000);
            return(exportedOperations);
        }