Ejemplo n.º 1
0
        public EmailTemplate Apply(CreateReportResponse response, Uri baseUri)
        {
            var baseUrl = baseUri.ToString();

            if (baseUrl.EndsWith("/", StringComparison.OrdinalIgnoreCase))
            {
                baseUrl = baseUrl.TrimEnd('/');
            }

            string reportUrl;

            if (response.Fields.ContainsKey("id"))
            {
                // https://host/instance/report/resource.do?target=read&id=id&reportType=resource_request
                reportUrl = baseUrl + "/report/resource.do?target=read&reportType=resource_request&id=" + response.Fields["id"];
            }
            else
            {
                // that is not good
                reportUrl = baseUrl;
            }

            Apply(reportUrl, "Report.Url");
            Apply(response, "Response.");
            return(this);
        }
Ejemplo n.º 2
0
            public async Task <CreateResponse> Handle(CreateCommand request, CancellationToken cancellationToken)
            {
                if (request == null)
                {
                    throw new ArgumentNullException(nameof(request));
                }

                var loggingState = new Dictionary <string, object>
                {
                    { "ExpenseAuthorization.Request", request.Request },
                    { "ExpenseAuthorization.FileCount", request.Files.Count },
                };

                // ensure we log the request details, especially if an error occurs
                using (_logger.BeginScope(loggingState))
                {
                    try
                    {
                        _logger.LogDebug("Creating report in E-Team");
                        CreateReportResponse response = await _eteamService.CreateReportAsync(request.Request);

                        _logger.LogDebug("Sending email to notify of new request submission");
                        await _emailService.SendEmailAsync(request.Request, response, request.Files);

                        return(new CreateResponse(response.Fields["id"]));
                    }
                    catch (Exception e)
                    {
                        _logger.LogError(e, "Failed to create expense authorization");
                        return(new CreateResponse(e));
                    }
                }
            }
Ejemplo n.º 3
0
        public void ThrowsSoapFaultWhenFault()
        {
            string xml = EmbeddedResource.Get <CreateReportResponseTests>("SoapFaultResponse.txt");
            CreateReportResponse sut = new CreateReportResponse();

            var soapFaultException = Assert.Throws <SoapFaultException>(() => sut.LoadFromXml(xml));

            Assert.NotNull(soapFaultException.SoapFault);
        }
Ejemplo n.º 4
0
        public void ParseResponse()
        {
            string xml = EmbeddedResource.Get <CreateReportResponseTests>("CreateResponse.txt");
            CreateReportResponse sut = new CreateReportResponse();

            sut.LoadFromXml(xml);

            Assert.Equal("Control4222019144914-embcTraining-159742987459901082006", sut.Fields["reportId"]);
            Assert.Equal("Control4222019144914-embcTraining-159742987459901082006", sut.Fields["id"]);
            Assert.Equal("resource_request", sut.Fields["reportType"]);
        }
Ejemplo n.º 5
0
        public void can_apply_create_report_response_to_template()
        {
            string id = _fixture.Create <string>();

            var createReportResponse = new CreateReportResponse();

            createReportResponse.Fields.Add("id", id);

            var url = _fixture.Create <Uri>();

            _sut.Apply(createReportResponse, url);
            var actual = _sut.Content;

            Assert.Contains(url.ToString(), actual);
        }
Ejemplo n.º 6
0
        public async Task <CreateReportResponse> CreateReportAsync(ExpenseAuthorizationRequest expenseAuthorizationRequest)
        {
            if (expenseAuthorizationRequest == null)
            {
                throw new ArgumentNullException(nameof(expenseAuthorizationRequest));
            }

            // login and get session cookie
            await LoginAsync(_options.Value);

            CreateReportResponse ret;
            // get the defaults, we could cache this in the future
            var resourceCategories = await GetLookupAsync(LookupType.ResourceCategory);

            var statuses = await GetLookupAsync(LookupType.StatusResource);

            var priorities = await GetLookupAsync(LookupType.PriorityResource);

            string resourceCategory = resourceCategories.FirstOrDefault(_ => _.Value == DefaultResourceCategory)?.Value;
            string currentStatus    = statuses.FirstOrDefault(_ => _.Value == DefaultCurrentStatus)?.Id;
            string priority         = priorities.FirstOrDefault(_ => _.Value == DefaultPriority)?.Id;

            var items = _mapper.Map(expenseAuthorizationRequest, priority, resourceCategory, currentStatus);

            var    request     = new CreaterReportRequest(items);
            string soapRequest = request.CreateSoapRequest();

            try
            {
                CreateReportResponse response1 = new CreateReportResponse();

                var soapResponse = await _client.CreateReportAsync(soapRequest);

                response1.LoadFromXml(soapResponse);

                ret = response1;
            }
            catch (ApiException exception)
            {
                throw new SoapFaultException(exception);
            }

            CreateReportResponse response = ret;

            return(response);
        }
Ejemplo n.º 7
0
        public async Task SendEmailAsync(
            ExpenseAuthorizationRequest request,
            CreateReportResponse response,
            IList <IFormFile> attachments)
        {
            ETeamSettings eteamSettings = _eteamOptions.Value;

            // create and apply data to the email template
            string content = new EmailTemplate()
                             .Apply(request)
                             .Apply(response, eteamSettings.Url)
                             .Content;

            _logger.LogDebug("Getting the email to recipient list base on request");
            var to = _recipientService.GetToRecipients(request);

            _logger.LogDebug("Email will be sent to {@EmailTo}", to);

            // Request from R. Wainwright, subject line of the email should
            // be [Region abbreviation + PREOC] – [A new EAF has been submitted to ETEAMS]
            // however, it is difficult to know the region abbreviation

            string subject = "A new EAF has been submitted to ETEAMS";

            if (!string.IsNullOrEmpty(eteamSettings.Environment))
            {
                subject = $"[{eteamSettings.Environment}] {subject}";
            }

            var message = new Message(to, subject, content, attachments);

            message.AddCc(_recipientService.GetCcRecipients(request));
            message.AddBcc(_recipientService.GetBccRecipients(request));

            await _sender.SendEmailAsync(message);
        }