@page "/applications/new" @using System.Net @using AutoMapper @using BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Models @using BlazorWebAssemblyVisaApiClient.Components.FormComponents.Applicants @using VisaApiClient @using BlazorWebAssemblyVisaApiClient.Components @using BlazorWebAssemblyVisaApiClient.Components.FormComponents.VisaApplications @using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.DateTimeProvider @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider @using BlazorWebAssemblyVisaApiClient.Validation @using FluentValidation @using Newtonsoft.Json.Linq @inherits BlazorWebAssemblyVisaApiClient.Components.Base.VisaClientComponentBase New Application

New application

Visa@(Constants.RequiredFieldMarkup)









Past visas
@if (requestModel.PastVisas.Count > 0) { @foreach (var visa in requestModel.PastVisas) { }
NameIssue dateExpiration date
@visa.Name @visa.IssueDate.ToString("d.MM.yyyy") @visa.ExpirationDate.ToString("d.MM.yyyy")
}





Past visits
@if (requestModel.PastVisits.Count > 0) { @foreach (var visit in requestModel.PastVisits) { }
Destination CountryStart dateEnd date
@visit.DestinationCountry @visit.StartDate.ToString("d.MM.yyyy") @visit.EndDate.ToString("d.MM.yyyy")
}





@if (requestModel.VisaCategory is VisaCategory.Transit) { requestModel.PermissionToDestCountry ??= NewPermissionToDestCountry();
Permission to destination Country@(Constants.RequiredFieldMarkup)
} else { requestModel.PermissionToDestCountry = null; } @if (isNonResident) { requestModel.ReentryPermit = NewReentryPermit();
Re-entry permission@(Constants.RequiredFieldMarkup)
}
@code { //todo past visas and visits private VisaApplicationCreateRequestModel requestModel = new(); private Status status = null!; private Status pastVisaStatus = null!; private Status pastVisitStatus = null!; private bool isNonResident; private string formattedNow = null!; private PastVisaModel editableVisa = null!; private PastVisitModel editableVisit = null!; [Inject] IDateTimeProvider DateTimeProvider { get; set; } = null!; [Inject] IUserDataProvider UserDataProvider { get; set; } = null!; [Inject] IValidator VisaApplicationCreateRequestValidator { get; set; } = null!; [Inject] IValidator PastVisaModelValidator { get; set; } = null!; [Inject] IValidator PastVisitModelValidator { get; set; } = null!; [Inject] IMapper Mapper { get; set; } = null!; protected override async Task OnInitializedAsync() { editableVisa = NewPastVisa(); editableVisit = NewPastVisit(); requestModel.PermissionToDestCountry = NewPermissionToDestCountry(); formattedNow = DateTimeProvider.FormattedNow(); try { isNonResident = (await UserDataProvider.GetApplicant()).IsNonResident; } catch (Exception e) { ErrorHandler.Handle(e); } } private async Task TryCreate() { var validationResult = await VisaApplicationCreateRequestValidator.ValidateAsync(requestModel); if (!validationResult.IsValid) { var errorsString = validationResult.ToErrorsString(); status.SetError(errorsString); } status.SetMessage("Wait..."); var request = Mapper.Map(requestModel); try { await Client.CreateApplicationAsync(request); status.SetSuccess("Application created successfully."); } catch (ApiException e) { if (e.StatusCode == (int)HttpStatusCode.BadRequest && e.Result.AdditionalProperties.TryGetValue("errors", out var errors)) { try { var errorsList = ((JArray)errors).ToObject>(); status.SetError(string.Join("
", errorsList!)); } catch (Exception inner) { ErrorHandler.Handle(inner); status.SetError("Error occured"); } } else { ErrorHandler.Handle(e); } } catch (Exception e) { ErrorHandler.Handle(e); } } private PastVisaModel NewPastVisa() { return new() { ExpirationDate = DateTimeProvider.Now(), IssueDate = DateTimeProvider.Now() }; } private ReentryPermitModel NewReentryPermit() { return new() { ExpirationDate = DateTimeProvider.Now() }; } private PermissionToDestCountryModel NewPermissionToDestCountry() { return new() { ExpirationDate = DateTimeProvider.Now() }; } private PastVisitModel NewPastVisit() { return new() { StartDate = DateTimeProvider.Now(), EndDate = DateTimeProvider.Now() }; } private void AddPastVisa() { if (requestModel.PastVisas.Count >= ConfigurationConstraints.MaxPastVisas) { pastVisaStatus.SetError($"{ConfigurationConstraints.MaxPastVisas} past visas is maximum"); return; } var validationResult = PastVisaModelValidator.Validate(editableVisa); if (!validationResult.IsValid) { pastVisaStatus.SetError(validationResult.ToErrorsString()); return; } requestModel.PastVisas.Add(editableVisa); editableVisa = NewPastVisa(); pastVisaStatus.SetSuccess("Added successfully"); } private void RemovePastVisa(PastVisaModel visa) { requestModel.PastVisas.Remove(visa); } private void AddPastVisit() { if (requestModel.PastVisits.Count >= ConfigurationConstraints.MaxPastVisits) { pastVisitStatus.SetError($"{ConfigurationConstraints.MaxPastVisits} past visits is maximum"); return; } var validationResult = PastVisitModelValidator.Validate(editableVisit); if (!validationResult.IsValid) { pastVisitStatus.SetError(validationResult.ToErrorsString()); return; } requestModel.PastVisits.Add(editableVisit); editableVisit = NewPastVisit(); pastVisitStatus.SetSuccess("Added successfully"); } private void RemovePastVisit(PastVisitModel visit) { requestModel.PastVisits.Remove(visit); } }