using DocuMed.PWA.Shared.Dialogs; using Microsoft.JSInterop; namespace DocuMed.PWA.Pages; public class MedicalHistoryTemplateActionPageViewModel : BaseViewModel { private readonly NavigationManager _navigationManager; private readonly ISnackbar _snackbar; private readonly IRestWrapper _restWrapper; private readonly IUserUtility _userUtility; private readonly IDialogService? _dialogService; private readonly IJSRuntime? _jsRuntime; private readonly Guid _templateId; public MudCarousel? Carousel { get; set; } public bool MedicalHistorySubmitted { get; set; } public int CurrentStep { get; set; } = 0; public string StepCounter { get; set; } = "1 / 5"; public bool IsEditing { get; set; } = false; public bool DisableBackButton { get; set; } = true; public List PiQuestions { get; set; } = new(); public List PdhQuestions { get; set; } = new(); public List PshQuestions { get; set; } = new(); public List FhQuestions { get; set; } = new(); public List DhQuestions { get; set; } = new(); public List AhQuestions { get; set; } = new(); public List GaQuestions { get; set; } = new(); public List RosQuestions { get; set; } = new(); public SectionSDto? SelectedSelection { get; set; } public MedicalHistoryTemplateActionPageViewModel( NavigationManager navigationManager, ISnackbar snackbar, IRestWrapper restWrapper, IUserUtility userUtility) { _navigationManager = navigationManager; _snackbar = snackbar; _restWrapper = restWrapper; _userUtility = userUtility; } public MedicalHistoryTemplateActionPageViewModel( NavigationManager navigationManager, ISnackbar snackbar, IRestWrapper restWrapper, IUserUtility userUtility, IDialogService dialogService, IJSRuntime jsRuntime, Guid templateId) { _navigationManager = navigationManager; _snackbar = snackbar; _restWrapper = restWrapper; _userUtility = userUtility; _dialogService = dialogService; _jsRuntime = jsRuntime; _templateId = templateId; IsEditing = true; } public override async Task InitializeAsync() { if (_templateId != Guid.Empty && IsEditing) { try { IsProcessing = true; var token = await _userUtility.GetBearerTokenAsync(); var dto = await _restWrapper.CrudDtoApiRest(Address.MedicalHistoryTemplateController) .ReadOne(_templateId, token); PageDto.ApplicationUserId = dto.ApplicationUserId; PageDto.ChiefComplaint = dto.ChiefComplaint; PageDto.SectionId = dto.SectionId; PageDto.Id = dto.Id; SelectedSelection = dto.Section; PiQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.PresentIllness)); PdhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.PastDiseasesHistory)); PshQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.PastSurgeryHistory)); FhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.FamilyHistory)); DhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.DrugHistory)); AhQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.AddictionHistory)); GaQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.GeneralAppearance)); RosQuestions.AddRange(dto.Questions.Where(q => q.Part == MedicalHistoryPart.ReviewOfSystem)); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); } finally { IsProcessing = false; } } await base.InitializeAsync(); } public async Task DeleteMedicalHistoryTemplateAsync() { if (_dialogService == null) return; var options = new DialogOptions { CloseOnEscapeKey = true }; var parameters = new DialogParameters(); parameters.Add(x => x.ContentText, "آیا از حذف پیش نویس شرح حال اطمینان دارید ?"); var dialogReference = await _dialogService.ShowAsync("حذف پیش نویس", parameters, options); var result = await dialogReference.Result; if (!result.Canceled) { try { IsProcessing = true; var token = await _userUtility.GetBearerTokenAsync(); await _restWrapper.CrudDtoApiRest(Address.MedicalHistoryTemplateController) .Delete(PageDto.Id, token); _snackbar.Add("حذف پیش نویس با موفقیت انجام شد", Severity.Success); if (_jsRuntime != null) await _jsRuntime.InvokeVoidAsync("history.back"); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); } finally { IsProcessing = false; } } } public async Task CompleteStepClicked() { ++CurrentStep; StepCounter = $"{CurrentStep + 1} / 5"; if (CurrentStep == 5) { if (IsEditing) await EditTemplateAsync(); else await SubmitTemplateAsync(); MedicalHistorySubmitted = true; } Carousel?.MoveTo(CurrentStep); DisableBackButton = false; } public async Task SubmitTemplateAsync() { try { IsProcessing = true; if (SelectedSelection == null) throw new Exception("لطفا بخش مورد نظر را انتخاب نمایید"); PageDto.SectionId = SelectedSelection.Id; var token = await _userUtility.GetBearerTokenAsync(); PageDto.SectionId = SelectedSelection.Id; PageDto.Questions.AddRange(PiQuestions); PageDto.Questions.AddRange(PdhQuestions); PageDto.Questions.AddRange(PshQuestions); PageDto.Questions.AddRange(FhQuestions); PageDto.Questions.AddRange(DhQuestions); PageDto.Questions.AddRange(AhQuestions); PageDto.Questions.AddRange(GaQuestions); PageDto.Questions.AddRange(RosQuestions); await _restWrapper.CrudDtoApiRest(Address.MedicalHistoryTemplateController) .Create(PageDto, token); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); } finally { IsProcessing = false; } } public async Task EditTemplateAsync() { try { IsProcessing = true; if (SelectedSelection == null) throw new Exception("لطفا بخش مورد نظر را انتخاب نمایید"); PageDto.SectionId = SelectedSelection.Id; var token = await _userUtility.GetBearerTokenAsync(); PageDto.SectionId = SelectedSelection.Id; PageDto.Questions.AddRange(PiQuestions); PageDto.Questions.AddRange(PdhQuestions); PageDto.Questions.AddRange(PshQuestions); PageDto.Questions.AddRange(FhQuestions); PageDto.Questions.AddRange(DhQuestions); PageDto.Questions.AddRange(AhQuestions); PageDto.Questions.AddRange(GaQuestions); PageDto.Questions.AddRange(RosQuestions); await _restWrapper.CrudDtoApiRest(Address.MedicalHistoryTemplateController) .Update(PageDto, token); } catch (ApiException ex) { var exe = await ex.GetContentAsAsync(); _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error); } catch (Exception e) { _snackbar.Add(e.Message, Severity.Error); } finally { IsProcessing = false; } } public void RollBackStepClicked() { if (CurrentStep == 0) return; Carousel?.MoveTo(--CurrentStep); StepCounter = $"{CurrentStep + 1} / 5"; if (CurrentStep == 0) DisableBackButton = true; } public void SubmitCreateTemplateAsync() { _navigationManager.NavigateTo("HomePage"); } }