/// <summary>
        /// Конвертирует запрос в сущность справки
        /// </summary>
        /// <param name="request">Запрос</param>
        /// <returns>Сущность справки</returns>
        public static Reference Map(CreateReferenceRequest request)
        {
            var reference = new Reference
            {
                Number = request.Code,
                Status = Constants.ReferenceStatusNew,
                Code   = request.Code,
                Name   = Resources.Strings.ResourceManager.GetString("ReferenceCode" + request.Code),
                RegistrationChannel    = request.RegistrationChannel,
                CustomerCUID           = request.Customer.CUID,
                CustomerFIO            = request.Customer.FIO,
                CustomerPassportSerNum = request.Customer.PassportSerNum,
            };

            if (request.User != null)
            {
                reference.UserID              = request.User.ID;
                reference.UserFIO             = request.User.FIO;
                reference.UserDateTime        = request.User.LocalDateTime;
                reference.UserWorkstationIP   = request.User.Workstation.IP;
                reference.UserWorkstationName = request.User.Workstation.Name;
            }

            return(reference);
        }
        public async Task <IHttpActionResult> Create([FromBody] CreateReferenceRequest request)
        {
            if (request == null)
            {
                return(Error(HttpStatusCode.BadRequest, new[]
                {
                    new Error
                    {
                        Code = "1000",
                        InternalMessage = Resources.Strings.ErrorRequestRequired
                    }
                }));
            }

            var errors = Validate(request, CreateReferenceRequestValidator);

            if (errors != null)
            {
                return(errors);
            }

            var reference = CreateReferenceMapper.Map(request);

            var cancellationToken = new CancellationToken();

            reference = await _repository.Create(reference, cancellationToken);

            try
            {
                await _printServerBridge.Store(reference, request.Params, Request.GetCorrelationId().ToString("N"), cancellationToken);
            }
            catch (ReferenceServiceException ex)
            {
                reference.Status = Constants.ReferenceStatusPdfError;
                await _repository.Update(reference, cancellationToken);

                if (ex.Code == 102)
                {
                    return(Error(HttpStatusCode.InternalServerError, new[]
                    {
                        new Error
                        {
                            Code = ex.Code.ToString(),
                            UserMessage = "На данный момент автоматическое формирование справки невозможно.",
                            InternalMessage = ex.Message
                        }
                    }));
                }
                else
                {
                    return(Error(HttpStatusCode.InternalServerError, ex.ToErrors()));
                }
            }

            reference.Status = Constants.ReferenceStatusPdfOk;
            await _repository.Update(reference, cancellationToken);

            return(Created(request.Code, new CreateReferenceResponse
            {
                Number = reference.Number
            }));
        }