Excel export
This commit is contained in:
		| @@ -61,4 +61,6 @@ public class ApplicantModel | ||||
|     /// <inheritdoc cref="Applicant.IsNonResident" /> | ||||
|     [Required] | ||||
|     public bool IsNonResident { get; set; } | ||||
|  | ||||
|     public override string ToString() => Name.ToString(); | ||||
| } | ||||
|   | ||||
| @@ -16,4 +16,6 @@ public class NameModel | ||||
|  | ||||
|     [MaxLength(ConfigurationConstraints.NameLength)] | ||||
|     public string? Patronymic { get; set; } | ||||
|  | ||||
|     public override string ToString() => $"{FirstName} {Surname} {Patronymic}".TrimEnd(); | ||||
| } | ||||
|   | ||||
| @@ -23,5 +23,9 @@ public interface IVisaApplicationRequestsHandler | ||||
|     /// Sets application status to closed | ||||
|     Task HandleCloseRequestAsync(Guid applicationId, CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Sets application status to approved or rejected | ||||
|     Task SetApplicationStatusFromAuthorityAsync(Guid applicationId, AuthorityRequestStatuses status, CancellationToken cancellationToken); | ||||
|  | ||||
|     /// Returns stream with file with formatted application data to download | ||||
|     Task<Stream> ApplicationToStreamAsync(Guid applicationId, CancellationToken cancellationToken); | ||||
| } | ||||
|   | ||||
| @@ -17,7 +17,8 @@ public class VisaApplicationRequestsHandler( | ||||
|     IUnitOfWork unitOfWork, | ||||
|     IMapper mapper, | ||||
|     IDateTimeProvider dateTimeProvider, | ||||
|     IUserIdProvider userIdProvider) : IVisaApplicationRequestsHandler | ||||
|     IUserIdProvider userIdProvider, | ||||
|     IEntityWriter entityWriter) : IVisaApplicationRequestsHandler | ||||
| { | ||||
|     async Task<List<VisaApplicationPreview>> IVisaApplicationRequestsHandler.GetPendingAsync(CancellationToken cancellationToken) | ||||
|     { | ||||
| @@ -34,7 +35,8 @@ public class VisaApplicationRequestsHandler( | ||||
|         return mapper.Map<List<VisaApplicationPreview>>(visaApplications); | ||||
|     } | ||||
|  | ||||
|     async Task<VisaApplicationModel> IVisaApplicationRequestsHandler.GetApplicationForApplicantAsync(Guid id, CancellationToken cancellationToken) | ||||
|     /// <summary> <inheritdoc cref="IVisaApplicationRequestsHandler.GetApplicationForApplicantAsync"/> </summary> | ||||
|     public async Task<VisaApplicationModel> GetApplicationForApplicantAsync(Guid id, CancellationToken cancellationToken) | ||||
|     { | ||||
|         var applicant = await applicants.FindByUserIdAsync(userIdProvider.GetUserId(), cancellationToken); | ||||
|         var application = await applications.GetByApplicantAndApplicationIdAsync(applicant.Id, id, cancellationToken); | ||||
| @@ -104,4 +106,10 @@ public class VisaApplicationRequestsHandler( | ||||
|  | ||||
|         await unitOfWork.SaveAsync(cancellationToken); | ||||
|     } | ||||
|  | ||||
|     async Task<Stream> IVisaApplicationRequestsHandler.ApplicationToStreamAsync(Guid applicationId, CancellationToken cancellationToken) | ||||
|     { | ||||
|         var application = await GetApplicationForApplicantAsync(applicationId, cancellationToken); | ||||
|         return await entityWriter.WriteEntityToStream(application, cancellationToken); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| using System.ComponentModel.DataAnnotations; | ||||
| using System.Text; | ||||
| using ApplicationLayer.Services.Applicants.Models; | ||||
| using Domains.VisaApplicationDomain; | ||||
|  | ||||
| @@ -33,8 +34,7 @@ public class VisaApplicationModel | ||||
|     /// <inheritdoc cref="VisaApplication.PermissionToDestCountry" /> | ||||
|     public PermissionToDestCountryModel? PermissionToDestCountry { get; set; } | ||||
|  | ||||
|     [Required] | ||||
|     public List<PastVisitModel> PastVisits { get; set; } = null!; | ||||
|     [Required] public List<PastVisitModel> PastVisits { get; set; } = null!; | ||||
|  | ||||
|     /// <inheritdoc cref="VisaApplication.VisaCategory" /> | ||||
|     [Required] | ||||
| @@ -55,4 +55,35 @@ public class VisaApplicationModel | ||||
|     /// <inheritdoc cref="VisaApplication.ValidDaysRequested" /> | ||||
|     [Required] | ||||
|     public int ValidDaysRequested { get; set; } | ||||
|  | ||||
|     public string ForGroupToString() => ForGroup ? "For group" : "Individual"; | ||||
|  | ||||
|     public string PastVisasToString() | ||||
|     { | ||||
|         var stringBuilder = new StringBuilder(); | ||||
|         foreach (var visa in PastVisas) | ||||
|         { | ||||
|             stringBuilder.AppendLine($"{visa.Name} issued at {visa.IssueDate.ToShortDateString()} and valid for {visa.ExpirationDate.ToShortDateString()}"); | ||||
|         } | ||||
|  | ||||
|         return stringBuilder.ToString(); | ||||
|     } | ||||
|  | ||||
|     public string PastVisitsToString() | ||||
|     { | ||||
|         var stringBuilder = new StringBuilder(); | ||||
|         foreach (var visit in PastVisits) | ||||
|         { | ||||
|             stringBuilder.AppendLine($"Visit to {visit.DestinationCountry} started at {visit.StartDate.ToShortDateString()} and ends {visit.EndDate.ToShortDateString()}"); | ||||
|         } | ||||
|  | ||||
|         return stringBuilder.ToString(); | ||||
|     } | ||||
|  | ||||
|     public string PermissionToDestCountryToString() | ||||
|     { | ||||
|         return VisaCategory is VisaCategory.Transit | ||||
|             ? $"Issued by{PermissionToDestCountry!.Issuer}, expires at {PermissionToDestCountry.ExpirationDate.ToShortDateString()}" | ||||
|             : "Non-transit"; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,7 @@ | ||||
| namespace ApplicationLayer.Services.VisaApplications.NeededServices | ||||
| { | ||||
|     public interface IEntityWriter | ||||
|     { | ||||
|         Task<Stream> WriteEntityToStream(object entity, CancellationToken cancellationToken); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user