Exemplo n.º 1
0
        public async Task <IActionResult> Execute(string subject, string orderId)
        {
            if (string.IsNullOrWhiteSpace(subject))
            {
                throw new ArgumentNullException(nameof(subject));
            }

            if (string.IsNullOrWhiteSpace(orderId))
            {
                throw new ArgumentNullException(nameof(orderId));
            }

            var validationResult = await _validator.Validate(subject, orderId);

            if (!validationResult.IsValid)
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, validationResult.Message);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            var label = await _upsClient.GetLabel(new GetLabelParameter
            {
                Credentials = new UpsCredentials
                {
                    LicenseNumber = _settingsProvider.GetUpsLicenseNumber(),
                    Password      = _settingsProvider.GetUpsPassword(),
                    UserName      = _settingsProvider.GetUpsUsername()
                },
                TrackingNumber = _settingsProvider.IsTstMode() ? "1Z12345E8791315509" : validationResult.Order.TrackingNumber
            });

            if (label.LabelResults == null || label.LabelResults.LabelImage == null)
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, ErrorDescriptions.TheLabelCannotBeRetrieved);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            if (!string.Equals(label.LabelResults.LabelImage.LabelImageFormat.Code, "gif", StringComparison.CurrentCultureIgnoreCase) &&
                !string.Equals(label.LabelResults.LabelImage.LabelImageFormat.Code, "pdf", StringComparison.CurrentCultureIgnoreCase))
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, ErrorDescriptions.TheLabelFormatIsNotSupported);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            var contentType = "application/pdf";

            if (string.Equals(label.LabelResults.LabelImage.LabelImageFormat.Code, "gif", StringComparison.CurrentCultureIgnoreCase))
            {
                contentType = "application/gif";
            }

            var b64      = label.LabelResults.LabelImage.GraphicImage;
            var response = new FileContentResult(Convert.FromBase64String(b64), contentType)
            {
                FileDownloadName = $"{validationResult.Order.Id}.{label.LabelResults.LabelImage.LabelImageFormat.Code}"
            };

            return(response);
        }