public async Task <ReportQueryResult> Handle(EvacueeReportQuery query)
        {
            var evacueeQuery = new ReportQuery
            {
                FileId        = query.FileId,
                TaskNumber    = query.TaskNumber,
                EvacuatedFrom = query.EvacuatedFrom,
                EvacuatedTo   = query.EvacuatedTo,
            };

            var results  = (await reportRepository.QueryEvacuee(evacueeQuery)).Items;
            var evacuees = mapper.Map <IEnumerable <Evacuee> >(results, opt => opt.Items["IncludePersonalInfo"] = query.IncludePersonalInfo.ToString());

            var communities = await metadataRepository.GetCommunities();

            evacueeQuery.EvacuatedFrom = communities.Where(c => c.Code == evacueeQuery.EvacuatedFrom).SingleOrDefault()?.Name;
            evacueeQuery.EvacuatedTo   = communities.Where(c => c.Code == evacueeQuery.EvacuatedTo).SingleOrDefault()?.Name;

            var csv = evacuees.ToCSV(evacueeQuery);

            var content     = Encoding.UTF8.GetBytes(csv);
            var contentType = "text/csv";

            return(new ReportQueryResult
            {
                Content = content,
                ContentType = contentType
            });
        }
        private async Task <GenerateReferralsResponse> GenerateSingleReferralDocument(GenerateReferralsRequest request)
        {
            var referrals    = mapper.Map <IEnumerable <PrintReferral> >(request.Supports.Where(s => s.SupportDelivery is Shared.Contracts.Events.Referral), opts => opts.Items.Add("evacuationFile", request.File)).ToArray();
            var summaryItems = mapper.Map <IEnumerable <PrintSummary> >(request.Supports, opts => opts.Items.Add("evacuationFile", request.File)).ToArray();
            var printingUser = new PrintRequestingUser {
                Id = request.PrintingMember.Id, FirstName = request.PrintingMember.FirstName, LastName = request.PrintingMember.LastName
            };

            var communities = (await metadataRepository.GetCommunities()).ToDictionary(c => c.Code, c => c.Name);

            foreach (var referral in referrals)
            {
                referral.VolunteerFirstName = printingUser.FirstName;
                referral.VolunteerLastName  = printingUser.LastName;
                referral.DisplayWatermark   = request.AddWatermark;
                referral.HostCommunity      = communities.GetValueOrDefault(referral.HostCommunity);
                if (!string.IsNullOrEmpty(referral.Supplier?.Community))
                {
                    referral.Supplier.City = communities.GetValueOrDefault(referral.Supplier.Community);
                }
            }

            var title         = $"supports-{request.File.Id}-{DateTime.UtcNow.ToPST().ToString("yyyyMMddhhmmss")}";
            var referralsHtml = await ReferralHtmlGenerator.CreateSingleHtmlDocument(printingUser, referrals, summaryItems, request.AddSummary, request.AddWatermark, title);

            return(new GenerateReferralsResponse
            {
                Content = Encoding.UTF8.GetBytes(referralsHtml)
            });
        }
Beispiel #3
0
        public async Task <CommunitiesQueryResponse> Handle(CommunitiesQuery req)
        {
            var communities = mapper.Map <IEnumerable <Shared.Contracts.Metadata.Community> >(await metadataRepository.GetCommunities());

            if (!string.IsNullOrEmpty(req.CountryCode))
            {
                communities = communities.Where(c => c.CountryCode == req.CountryCode);
            }
            if (!string.IsNullOrEmpty(req.StateProvinceCode))
            {
                communities = communities.Where(c => c.StateProvinceCode == req.StateProvinceCode);
            }

            if (req.Types != null && req.Types.Any())
            {
                var types = req.Types.Select(t => t.ToString()).ToArray();
                communities = communities.Where(c => types.Any(t => t == c.Type.ToString()));
            }

            return(new CommunitiesQueryResponse {
                Items = communities
            });
        }
Beispiel #4
0
        public async Task <PrintRequestQueryResult> Handle(PrintRequestQuery query)
        {
            if (string.IsNullOrEmpty(query.PrintRequestId))
            {
                throw new ArgumentNullException(nameof(query.PrintRequestId));
            }
            if (string.IsNullOrEmpty(query.RequestingUserId))
            {
                throw new ArgumentNullException(nameof(query.RequestingUserId));
            }

            //get the print request
            var printRequest = (await printingRepository.Query(new QueryPrintRequests {
                ById = query.PrintRequestId
            })).Cast <ReferralPrintRequest>().SingleOrDefault();

            if (printRequest == null)
            {
                throw new NotFoundException("print request not found", query.PrintRequestId);
            }

            //get requesting user
            if (printRequest.RequestingUserId != query.RequestingUserId)
            {
                throw new BusinessLogicException($"User {query.RequestingUserId} cannot query print for another user ({printRequest.RequestingUserId})");
            }
            var requestingUser = (await teamRepository.GetMembers(userId: printRequest.RequestingUserId, includeStatuses: activeOnlyStatus)).Cast <Resources.Teams.TeamMember>().SingleOrDefault();

            if (requestingUser == null)
            {
                throw new NotFoundException($"User {printRequest.RequestingUserId} not found", printRequest.RequestingUserId);
            }

            //load the file
            var file = mapper.Map <EvacuationFile>((await caseRepository.QueryCase(new Resources.Cases.EvacuationFilesQuery {
                FileId = printRequest.FileId
            })).Items.Cast <Resources.Cases.Evacuations.EvacuationFile>().SingleOrDefault());

            if (file == null)
            {
                throw new NotFoundException($"Evacuation file {printRequest.FileId} not found", printRequest.Id);
            }
            await evacuationFileLoader.Load(file);

            //Find referrals to print
            var referrals = mapper.Map <IEnumerable <PrintReferral> >(file.Supports.Where(s => printRequest.SupportIds.Contains(s.Id)), opts => opts.Items.Add("evacuationFile", file)).ToArray();

            if (referrals.Length != printRequest.SupportIds.Count())
            {
                throw new BusinessLogicException($"Print request {printRequest.Id} has {printRequest.SupportIds.Count()} linked supports, but evacuation file {printRequest.FileId} doesn't have all of them");
            }

            //replace community codes with readable name
            var communities = await metadataRepository.GetCommunities();

            foreach (var referral in referrals)
            {
                referral.HostCommunity = communities.Where(c => c.Code == referral.HostCommunity).SingleOrDefault()?.Name;
            }

            var isProduction = env.IsProduction();

            //convert referrals to html
            var printedReferrals = await supportsService.GetReferralHtmlPagesAsync(new SupportsToPrint()
            {
                Referrals      = referrals,
                AddSummary     = printRequest.IncludeSummary,
                AddWatermark   = !isProduction,
                RequestingUser = new PrintRequestingUser {
                    Id = requestingUser.Id, FirstName = requestingUser.FirstName, LastName = requestingUser.LastName
                }
            });

            //convert to pdf
            var content = await pdfGenerator.Generate(printedReferrals);

            var contentType = "application/pdf";

            await printingRepository.Manage(new MarkPrintRequestAsComplete { PrintRequestId = printRequest.Id });

            return(new PrintRequestQueryResult
            {
                Content = content,
                ContentType = contentType,
                PrintedOn = DateTime.UtcNow
            });
        }