Ejemplo n.º 1
0
        /// <summary>
        /// Выбрать контрагента (например получателя) из списка доступных для обмена или 
        /// указать вручную - например: указав ящик конктагента
        /// </summary>
        /// <returns></returns>
        private MessageRecipient ChooseExternalRecipient(List<string> selectedContactList)
        {
            var fromList = new UserInput.Option("1", "Из списка контрагентов", true, true);
            var manuallyEntry = new UserInput.Option("2", "Ввести вручную", false, true);

            var chooseOption = UserInput.ChooseOption("Выбрать получателя", new[]
                                                                    {
                                                                        fromList,
                                                                        manuallyEntry
                                                                    });
            string organizationId;
            string boxAddress;
            if (chooseOption == fromList)
            {
                ContactSearchResult contactSearchResult;
                var contactList = new List<ContactSearchItem>();
                var from = 0;
                const int pageSize = 20;
                do
                {
                    contactSearchResult = _context.ServiceClient.SearchContacts(
                        new ContactSearchOptions
                            {
                                OrganizationId = _context.CurrentOrganizationId,
                                ContactStatus = ContactStatus.Active,
                                From = from,
                                Max = pageSize
                            });
                    contactList.AddRange(contactSearchResult.Items);
                    contactList.RemoveAll(c => selectedContactList.Any(value => value.Equals(c.BoxAddress)));
                    from += pageSize;
                }
                while (contactSearchResult.TotalCount > from);
                var contragentOption = UserInput.ChooseOption
                    ("Выберите получателя",
                        contactList.Select(
                            (c, i) =>
                                new UserInput.Option((i + 1).ToString(CultureInfo.InvariantCulture), c.ContragentName,
                                    i == 0, c)));
                var contactSearchItem = ((ContactSearchItem)contragentOption.Data);
                organizationId = contactSearchItem.ContragentId.ToString(CultureInfo.InvariantCulture);
                boxAddress = contactSearchItem.BoxAddress;
            }
            else
            {
                var address = UserInput.ReadParameter("Введите адрес получателя");
                if (selectedContactList.Any(value => value.Equals(address)))
                {
                    UserInput.Error("Получатель с таким адресом уже указан");
                    return null;
                }

                if (address.Equals(_context.CurrentBox))
                {
                    UserInput.Error("Отправитель не может быть указан в качестве получателя");
                    return null;
                }

                var organization = _context.ServiceClient.GetOrganizationBy(_context.CurrentBox,
                    OrganizationByCriteria.ByBoxAddress,
                    new OrganizationByCriteriaValues { BoxAddress = address });

                if (organization == null)
                {
                    UserInput.Error("Неправильно указан адресат");
                    return null;
                }
                UserInput.Success(string.Format("Выбрана организация: {0}", organization.Name));
                organizationId = organization.OrganizationId;
                boxAddress = organization.BoxAddress;
            }

            var messageRecipient = new MessageRecipient { OrganizationBoxId = boxAddress };

            if (UserInput.ChooseYesNo("Указать подразделение"))
            {
                var selectedDepartment = ChooseOrganizationStructureElement(organizationId);
                if (selectedDepartment != null)
                    messageRecipient.DepartmentId = selectedDepartment.Id;
            }

            return messageRecipient;
        }
Ejemplo n.º 2
0
        private User ChooseUser(string departmentId)
        {
            var fromList = new UserInput.Option("1", "Из списка сотрудников", true, true);
            var manuallyEntry = new UserInput.Option("2", "Ввести вручную", false, true);

            var chooseOption = UserInput.ChooseOption(
                "Выбрать пользователя",
                new[]
                    {
                        fromList,
                        manuallyEntry
                    });

            if (chooseOption != fromList)
                return new User
                    {
                        Login = UserInput.ReadParameter("Укажите логин пользователя")
                    };

            var userList = _context.ServiceClient.GetDepartmentEmployees(_context.CurrentBox, departmentId);
            if (userList.Length == 0)
            {
                UserInput.Warning("У подразделения нет сотрудников");
                return null;
            }
            var userOption = UserInput.ChooseOption(
                "Выберите сотрудника",
                userList.Select((u, i) => new UserInput.Option(
                                                (i + 1).ToString(CultureInfo.InvariantCulture),
                    string.Format("{0} {1} {2}", u.LastName, u.FirstName, u.MiddleName),
                                                i == 0,
                                                u)));
            return (User)userOption.Data;
        }
Ejemplo n.º 3
0
        private string ChooseContragentBox()
        {
            var fromList = new UserInput.Option("1", "Из списка контрагентов", true, true);
            var manuallyEntry = new UserInput.Option("2", "Ввести вручную", false, true);

            var chooseOption = UserInput.ChooseOption("Выбрать контрагента", new[]
                                                                    {
                                                                        fromList,
                                                                        manuallyEntry
                                                                    });
            string boxAddress;
            if (chooseOption == fromList)
            {
                ContactSearchResult contactSearchResult;
                var contactList = new List<ContactSearchItem>();
                var from = 0;
                const int pageSize = 20;
                do
                {
                    contactSearchResult = _context.ServiceClient.SearchContacts(
                        new ContactSearchOptions
                        {
                            OrganizationId = _context.CurrentOrganizationId,
                            ContactStatus = ContactStatus.Active,
                            From = from,
                            Max = pageSize
                        });
                    contactList.AddRange(contactSearchResult.Items);
                    from += pageSize;
                }
                while (contactSearchResult.TotalCount > from);
                var contragentOption = UserInput.ChooseOption
                    ("Выберите контрагента",
                        contactList.Select(
                            (c, i) =>
                                new UserInput.Option((i + 1).ToString(CultureInfo.InvariantCulture), c.ContragentName,
                                    i == 0, c)));
                var contactSearchItem = ((ContactSearchItem)contragentOption.Data);
                boxAddress = contactSearchItem.BoxAddress;
            }
            else
            {
                var address = UserInput.ReadParameter("Введите адрес контрагента");
                var organization = _context.ServiceClient.GetOrganizationBy(_context.CurrentBox,
                    OrganizationByCriteria.ByBoxAddress,
                    new OrganizationByCriteriaValues { BoxAddress = address });

                if (organization == null)
                {
                    UserInput.Error("Неправильно указан адресат");
                    return null;
                }
                UserInput.Success(string.Format("Выбрана организация: {0}", organization.Name));
                boxAddress = organization.BoxAddress;
            }

            return boxAddress;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Авторизоваться
        /// </summary>
        /// <param name="client"></param>
        private void Auth(Client client)
        {
            var byCertificate = new UserInput.Option("1", "По сертификату", true);
            var byPassword = new UserInput.Option("2", "По паролю", false);
            var register = new UserInput.Option("3", "Зарегистрироваться в сервисе", false);

            while (true)
            {
                var authOption = UserInput.ChooseOption("Выберите способ аутентификации", new[]
                                                                    {
                                                                        byCertificate,
                                                                        byPassword,
                                                                        register
                                                                    });

                if (authOption == byPassword)
                {
                    var login = UserInput.ReadParameter("имя пользователя");
                    var password = UserInput.ReadParameter("пароль");

                    try
                    {
                        if (client.Authenticate(login, password, _applicationId))
                        {
                            UserInput.Success("Аутентификация прошла успешно");
                            _context.Login = login;
                            return;
                        }
                        UserInput.Error("Неправильный логин или пароль");
                    }
                    catch (Exception ex)
                    {
                        UserInput.Error("Произошла неожиданная ошибка");
                        UserInput.Error(ex.ToString());
                    }
                }
                else if (authOption == byCertificate)
                {
                    try
                    {
                        // выбор сертификата по списку
                        ChooseCertificate();
                        if (client.AuthenticateWithCertificate(_context.Certificate.Thumbprint, _applicationId))
                        {
                            UserInput.Success("Аутентификация прошла успешно");
                            return;
                        }
                        UserInput.Error("Аутентификация не пройдена");
                    }
                    catch (Win32Exception win32Ex)
                    {
                        UserInput.Error("Произошла ошибка при попытке расшифровать токен");
                        UserInput.Error(win32Ex.ToString());
                    }
                    catch (Exception ex)
                    {
                        UserInput.Error("Произошла неожиданная ошибка");
                        UserInput.Error(ex.ToString());
                    }
                }
                else
                {
                    try
                    {
                        var registerResult = Register();

                        if (registerResult.Success)
                        {
                            client.Authenticate(registerResult.RegisterModel.Login,
                                registerResult.RegisterModel.Password, _applicationId);
                        }

                        return;
                    }
                    catch (Exception ex)
                    {
                        UserInput.Error("Произошла неожиданная ошибка");
                        UserInput.Error(ex.ToString());
                    }
                }
            }
        }
Ejemplo n.º 5
0
        private void TryParseDocumentContentFromFile()
        {
            var cancel = new UserInput.Option("9", "Отмена", false);

            var userChoice = UserInput.ChooseOption("Выберите тип документа", new[]
            {
                new UserInput.Option("1", "Титул продавца УПД", true),
                new UserInput.Option("2", "Титул покупателя УДП", false),
                new UserInput.Option("3", "Титул продавца УКД", false),
                new UserInput.Option("4", "Титул покупателя УКД", false),
                new UserInput.Option("5", "Титул продавца ДПТ", false),
                new UserInput.Option("6", "Титул покупателя ДПТ", false),
                new UserInput.Option("7", "Титул продавца ДПРР", false),
                new UserInput.Option("8", "Титул покупателя ДПРР", false),
                cancel
            });

            if (userChoice == cancel)
                return;

            var filePath = UserInput.ReadParameter("полный путь к файлу с документом, включая имя файла и расширение");

            if (!FileHelper.FileExists(filePath))
            {
                UserInput.Error("Файла по указанному пути не существует");
                return;
            }

            var content = FileHelper.GetFileContent(filePath);
            if (content.Length == 0)
            {
                UserInput.Error("Не удалось считать данные файла");
                return;
            }

            try
            {
                ParseDocumentContentFromFile(userChoice, content);
            }
            catch (Exception ex)
            {
                UserInput.Error("Произошла ошибка");
                UserInput.Error(ex.ToString());
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Отправить документы
        /// </summary>
        private void SendDocuments(FlowType flowType)
        {
            // нужен сертификат
            if (flowType != FlowType.SentUnsigned && _context.Certificate == null)
                ChooseCertificate();

            var externalRecipients = new List<MessageRecipient>();
            var internalRecipients = new List<InternalMessageRecipient>();
            do
            {
                if (flowType != FlowType.SentInternal)
                {
                    var recipient = ChooseExternalRecipient(externalRecipients.Select(r => r.OrganizationBoxId).ToList());
                    if (recipient != null)
                    {
                        externalRecipients.Add(recipient);
                        if (flowType == FlowType.SentUnsigned)
                            break;
                        if (!UserInput.ChooseYesNo("Добавить еще одного получателя?"))
                            break;
                    }
                }
                else
                {
                    var recipient = ChooseInternalRecipient();
                    if (recipient != null)
                    {
                        internalRecipients.Add(recipient);
                        break;
                    }
                }
            }
            while (true);

            Message message = null;
            UnsignedMessage unsignedMessage = null;
            ForwardMessage forwardMessage = null;
            InternalMessage internalMessage = null;
            switch (flowType)
            {
                case FlowType.SentSigned:
                    message = CreateMessage(externalRecipients);
                    break;
                case FlowType.SentUnsigned:
                    unsignedMessage = CreateUnsignedMessage(externalRecipients);
                    break;
                case FlowType.SentForward:
                    forwardMessage = CreateForwardMessage(externalRecipients);
                    break;
                case FlowType.SentInternal:
                    internalMessage = CreateInternalMessage(internalRecipients);
                    break;
            }

            if ((message != null && message.Documents.Length == 0)
                || (unsignedMessage != null && unsignedMessage.Documents.Length == 0)
                || (forwardMessage != null && forwardMessage.ForwardDocuments.Length == 0)
                || (internalMessage != null && internalMessage.Documents.Length == 0))
            {
                UserInput.Error("Документы для отправки не выбраны");
                return;
            }

            var sendMessageOption = new UserInput.Option("1", "Отправить сообщение", true);
            var saveToDraftOption = new UserInput.Option("2", "Сохранить как черновик", false);

            while (true)
            {
                var chosenOption = UserInput.ChooseOption("Выберите действие", new[]
                {
                    sendMessageOption,
                    saveToDraftOption
                });

                if (chosenOption == sendMessageOption)
                    break;

                if (chosenOption != saveToDraftOption)
                    continue;

                DraftMessage draftMessage = null;
                if (message != null)
                    draftMessage = ConvertToDraftMessage(message);
                else if (unsignedMessage != null)
                    draftMessage = ConvertToDraftMessage(unsignedMessage);
                else if (forwardMessage != null)
                    draftMessage = ConvertToDraftMessage(forwardMessage);
                else if (internalMessage != null)
                    draftMessage = ConvertToDraftMessage(internalMessage);

                try
                {
                    var draftMessageId = _context.ServiceClient.CreateDraftMessage(draftMessage);
                    UserInput.Success("Черновик сообщения сохранен, Id:{0}", draftMessageId);
                }
                catch (ServerException ex)
                {
                    if (ex.Code == ServiceErrorCode.InvalidFormatField)
                    {
                        UserInput.Error(ex.Message);
                    }
                    else
                    {
                        throw;
                    }
                }
                return;
            }

            try
            {
                SentMessage sentMessage = null;
                if (message != null)
                    sentMessage = _context.ServiceClient.SendMessage(message);
                else if (unsignedMessage != null)
                    sentMessage = _context.ServiceClient.SendUnsignedMessage(unsignedMessage);
                else if (forwardMessage != null)
                    sentMessage = _context.ServiceClient.SendForwardMessage(forwardMessage);
                else if (internalMessage != null)
                    sentMessage = _context.ServiceClient.SendInternalMessage(internalMessage);
                UserInput.Success("Сообщение отправлено Id:{0}", sentMessage.MessageId);
            }
            catch (ServerException ex)
            {
                if (ex.Code == ServiceErrorCode.ContragentIsNotAuthorized)
                {
                    UserInput.Error("Контрагент не авторизован");
                }
                else if (ex.Code == ServiceErrorCode.InvalidDestinationAddress)
                {
                    UserInput.Error("Неправильно указан адресат");
                }
                else if (ex.Code == ServiceErrorCode.NotFilledRequiredField)
                {
                    UserInput.Error("Не заполнено обязательно поле \"{0}\"", ex.Field);
                }
                else
                {
                    UserInput.Error("Ошибка отправки Code:{0} Field:{1} Message:{2}", ex.Code, ex.Field, ex.Message);
                    // TODO обработка других ошибок, отображение текста!
                }
            }
            // перехват ошибки уровня транспорта
            catch (Exception ex)
            {
                // TODO здесь надо сделать правильную обработку ошибки
                UserInput.Error(ex.ToString());
            }
        }
Ejemplo n.º 7
0
        private MessageRecipient ChooseExternalRecipient()
        {
            var fromList = new UserInput.Option("1", "Из списка контрагентов", true, true);
            var manuallyEntry = new UserInput.Option("2", "Ввести вручную", false, true);

            var chooseOption = UserInput.ChooseOption("Выбрать получателя", new[]
                                                                    {
                                                                        fromList,
                                                                        manuallyEntry,
                                                                    });
            var organizationId = (string)null;
            var boxAddress = (string)null;
            if (chooseOption == fromList)
            {
                var contactSearchResult = context.ServiceClient.SearchContacts(
                    new ContactSearchOptions
                        {
                            OrganizationId = context.CurrentOrganizationId,
                            ContactStatus = ContactStatus.Active,
                            From = 0,
                            Max = 20
                        });
                var contragentOption = UserInput.ChooseOption
                    ("Выберите получателя",
                    contactSearchResult.Items
                        .Select((c, i) =>
                            new UserInput.Option((i + 1).ToString(), c.ContragentName, i == 0, c)));
                var contactSearchItem = ((ContactSearchItem)contragentOption.Data);
                organizationId = contactSearchItem.ContragentId.ToString();
                boxAddress = contactSearchItem.BoxAddress;
            }
            else
            {
                var address = UserInput.ReadParameter("Введите адрес получателя");
                var organization = context.ServiceClient.GetOrganizationBy(context.CurrentBox,
                                                                           OrganizationByCriteria.ByBoxAddress,
                                                                           new OrganizationByCriteriaValues { BoxAddress = address });

                if (organization == null)
                {
                    UserInput.Error("Неправильно указан адресат");
                    return null;
                }
                UserInput.Success(String.Format("Выбрана организация: {0}",organization.Name));
                organizationId = organization.OrganizationId;
                boxAddress = organization.BoxAddress;
            }

            var messageRecipient = new MessageRecipient { OrganizationBoxId = boxAddress };

            if (UserInput.ChooseYesNo("Указать подразделение"))
            {
                var selectedDepartment = ChooseOrganizationStructureElement(organizationId);
                if (selectedDepartment != null)
                    messageRecipient.DepartmentId = selectedDepartment.Id;
            }

            return messageRecipient;
        }