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) }); }
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 }); }
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 }); }