Вытащил солюшен на уровень выше, чтобы прощё было дотнетить
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is failing
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	continuous-integration/drone/push Build is failing
				
			This commit is contained in:
		
							
								
								
									
										261
									
								
								BlazorWebAssemblyVisaApiClient/Pages/Application.razor
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										261
									
								
								BlazorWebAssemblyVisaApiClient/Pages/Application.razor
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,261 @@ | ||||
| @page "/applications/{ApplicationId}" | ||||
| @using System.Net | ||||
| @using BlazorWebAssemblyVisaApiClient.Common.Exceptions | ||||
| @using BlazorWebAssemblyVisaApiClient.Components | ||||
| @using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers | ||||
| @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider | ||||
| @using BlazorWebAssemblyVisaApiClient.Validation.Applicants.Models | ||||
| @using BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Models | ||||
| @using VisaApiClient | ||||
| @inherits BlazorWebAssemblyVisaApiClient.Components.Base.VisaClientComponentBase | ||||
|  | ||||
| <PageTitle>Application</PageTitle> | ||||
|  | ||||
| <table class="table table-bordered table-hover table-sm"> | ||||
|     <tbody> | ||||
|     <tr> | ||||
|         <td > | ||||
|             Applicant's fullname:<br/> | ||||
|             <em>@NameToString(application.Applicant.Name)</em> | ||||
|         </td> | ||||
|         <td colspan="2"> | ||||
|             Date of birth:<br/> | ||||
|             <em>@application.Applicant.BirthDate.ToString("d")</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Country and city of birth:<br/> | ||||
|             <em>@application.Applicant.CountryOfBirth, @application.Applicant.CityOfBirth</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="2"> | ||||
|             Citizenship:<br/> | ||||
|             <em>@application.Applicant.Citizenship</em> | ||||
|         </td> | ||||
|         <td> | ||||
|             Citizenship by birth:<br/> | ||||
|             <em>@application.Applicant.CitizenshipByBirth</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td > | ||||
|             Gender:<br/> | ||||
|             <em>@application.Applicant.Gender.GetDisplayName()</em> | ||||
|         </td> | ||||
|         <td colspan="2"> | ||||
|             Marital status:<br/> | ||||
|             <em>@(((MaritalStatusModel)application.Applicant.MaritalStatus).GetDisplayName())</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td > | ||||
|             Father's fullname:<br/> | ||||
|             <em>@NameToString(application.Applicant.FatherName)</em> | ||||
|         </td> | ||||
|         <td colspan="2"> | ||||
|             Mother's fullname:<br/> | ||||
|             <em>@NameToString(application.Applicant.MotherName)</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td > | ||||
|             Passport number:<br/> | ||||
|             <em>@application.Applicant.Passport.Number</em> | ||||
|         </td> | ||||
|         <td > | ||||
|             Issue date:<br/> | ||||
|             <em>@application.Applicant.Passport.IssueDate.ToString("d")</em> | ||||
|         </td> | ||||
|         <td > | ||||
|             Expiration date:<br/> | ||||
|             <em>@application.Applicant.Passport.ExpirationDate.ToString("d")</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Passport issuer:<br/> | ||||
|             <em>@application.Applicant.Passport.Issuer</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Re-entry permission (for non-residents):<br/> | ||||
|             @if (application.Applicant.IsNonResident) | ||||
|             { | ||||
|                 <em>@(application.ReentryPermit is null ? "None" : $"{application.ReentryPermit.Number}, expires at {application.ReentryPermit.ExpirationDate:d}")</em> | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 <em>Not non-resident</em> | ||||
|             } | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Job title:<br/> | ||||
|             <em>@application.Applicant.JobTitle</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Place of work, address, hirer's phone number:<br/> | ||||
|             <em> | ||||
|                 @((MarkupString)$"{application.Applicant.PlaceOfWork.Name}<br>Address: {AddressToString(application.Applicant.PlaceOfWork.Address)}<br>Phone num: {application.Applicant.PlaceOfWork.PhoneNum}") | ||||
|             </em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td > | ||||
|             Destination Country:<br/> | ||||
|             <em>@application.DestinationCountry</em> | ||||
|         </td> | ||||
|         <td > | ||||
|             Visa category:<br/> | ||||
|             <em>@(((VisaCategoryModel)application.VisaCategory).GetDisplayName())</em> | ||||
|         </td> | ||||
|         <td > | ||||
|             Visa:<br/> | ||||
|             <em>@(application.ForGroup ? "For group" : "Individual")</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td > | ||||
|             Requested number of entries:<br/> | ||||
|             <em>@application.RequestedNumberOfEntries.GetDisplayName()</em> | ||||
|         </td> | ||||
|         <td colspan="2"> | ||||
|             Valid for:<br/> | ||||
|             <em>@($"{application.ValidDaysRequested} days")</em> | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Past visas:<br/> | ||||
|             @if (application.PastVisas.Any()) | ||||
|             { | ||||
|                 foreach (var visa in application.PastVisas) | ||||
|                 { | ||||
|                     <em>@($"{visa.Name} issued at {visa.IssueDate:d} and was valid until {visa.ExpirationDate:d}")</em> | ||||
|                     <br/> | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 <em>None</em> | ||||
|             } | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Permission to destination Country, if transit:<br/> | ||||
|             @if (application.VisaCategory is VisaCategory.Transit) | ||||
|             { | ||||
|                 <em>@(application.PermissionToDestCountry is null ? "None" : $"Expires at {application.PermissionToDestCountry.ExpirationDate}, issued by: {application.PermissionToDestCountry.Issuer}")</em> | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 <em>Non-transit</em> | ||||
|             } | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td colspan="3"> | ||||
|             Past visits:<br/> | ||||
|             @if (application.PastVisas.Any()) | ||||
|             { | ||||
|                 foreach (var visit in application.PastVisits) | ||||
|                 { | ||||
|                     <em>@($"Visit to {visit.DestinationCountry}, entered at {visit.StartDate:d} and lasts until {visit.EndDate:d}")</em> | ||||
|                     <br/> | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 <em>None</em> | ||||
|             } | ||||
|         </td> | ||||
|     </tr> | ||||
|     </tbody> | ||||
| </table> | ||||
| @if (currentRole == Constants.ApprovingAuthorityRole) | ||||
| { | ||||
|     <button class="btn-outline-primary" @onclick="Approve">Approve</button> | ||||
|     <button class="btn-outline-danger" @onclick="Reject">Reject</button> | ||||
|     <Status @ref="status"/> | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     private VisaApplicationModel application = new(); | ||||
|     private string currentRole = null!; | ||||
|     private Status status = null!; | ||||
|  | ||||
|     [Parameter] public string ApplicationId { get; set; } = null!; | ||||
|  | ||||
|     [Inject] private IUserDataProvider UserDataProvider { get; set; } = null!; | ||||
|  | ||||
|     [Inject] private NavigationManager Nav { get; set; } = null!; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             var applicationId = Guid.Parse(ApplicationId); | ||||
|             currentRole = UserDataProvider.CurrentRole ?? throw new NotLoggedInException(); | ||||
|  | ||||
|                 application = currentRole switch | ||||
|                 { | ||||
|                     Constants.ApplicantRole => await Client.GetApplicationForApplicantAsync(applicationId), | ||||
|                     Constants.ApprovingAuthorityRole => await Client.GetApplicationForAuthorityAsync(applicationId), | ||||
|                     _ => throw new NotLoggedInException() | ||||
|                 }; | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|  | ||||
|             if (e is ApiException<ProblemDetails> { Result.Status: (int)HttpStatusCode.Conflict }) | ||||
|             { | ||||
|                 Nav.NavigateTo("/applications"); | ||||
|             } | ||||
|             ErrorHandler.Handle(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private static string NameToString(NameModel name) | ||||
|         => $"{name.FirstName} {name.Surname} {name.Patronymic}".TrimEnd(); | ||||
|  | ||||
|     private static string AddressToString(AddressModel address) | ||||
|         => $"{address.Country}, {address.City}, {address.Street} {address.Building}"; | ||||
|  | ||||
|     private async void Approve() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             status.SetMessage("Wait..."); | ||||
|             await Client.SetStatusFromAuthorityAsync(application.Id, AuthorityRequestStatuses.Approved); | ||||
|             Nav.NavigateTo("/applications"); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             status.SetError("Error occured."); | ||||
|             ErrorHandler.Handle(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async void Reject() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             status.SetMessage("Wait..."); | ||||
|             await Client.SetStatusFromAuthorityAsync(application.Id, AuthorityRequestStatuses.Rejected); | ||||
|             Nav.NavigateTo("/applications"); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             status.SetError("Error occured."); | ||||
|             ErrorHandler.Handle(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user