Before Photos
After Photos
Sign Off
@using SeaHavenIndustries.Components.Layout @using SeaHavenIndustries.Data.IRepository; @inject ISettingsRepository _service; @inject IWorkOrderRepository _serviceworkorder; @using Microsoft.JSInterop @using SeaHavenIndustries.ViewModel @using System.Text.Json @using global::Data.SeaHavenIndustries @inject IJSRuntime JSRuntime @inject NavigationManager Navigation @code { private bool isLoading = true; private int step = 0; private ModalDialog? ModalDialog { get; set; } [Parameter] public int? id { get; set; } private WorkOrder model = new(); private List? templates { get; set; } private IEnumerable? users { get; set; } private IEnumerable? userslist { get; set; } private IEnumerable? category { get; set; } private IEnumerable? categorylist { get; set; } private IEnumerable? locations { get; set; } private IEnumerable? locationslist { get; set; } private IEnumerable? contacts { get; set; } private IEnumerable? contactslist { get; set; } private List files = new List(); List? workordercontacts = new List(); List? workordercategories = new List(); protected override async Task OnParametersSetAsync() { if (id != 0) { var result = await _service.ViewTemplate(id.Value); if (result != null) { model = result; workordercategories = result.WorkOrderCategories .Select(s => s.CategoryId) .Where(value => value.HasValue) .Select(value => value.Value) .ToList(); workordercontacts = result.WorkOrderContacts .Select(s => s.ContactId) .Where(value => value.HasValue) .Select(value => value.Value) .ToList(); } } users = await _service.GetUsers(); userslist = users; locations = await _service.GetLocations(); locationslist = locations; category = await _service.GetAllCategories(); categorylist = category; contacts = await _service.GetContacts(); contactslist = contacts; } protected override void OnAfterRender(bool firstRender) { // execute conditionally for loading data, otherwise this will load // every time the page refreshes if (firstRender) { // Do work to load page data and set properties } } protected void LoadcontactData(LoadDataArgs args) { var query = contactslist; if (!string.IsNullOrEmpty(args.Filter)) { query = query.Where(c => (c.FirstName + " " + c.LastName).ToLower().Contains(args.Filter.ToLower())); } if (query != null) { contacts = query.ToList(); } InvokeAsync(StateHasChanged); } protected void LoadUserData(LoadDataArgs args) { var query = userslist; if (!string.IsNullOrEmpty(args.Filter)) { query = query.Where(c => c.FirstName.ToLower().Contains(args.Filter.ToLower())).ToList(); } if (query != null) { users = query.ToList(); } InvokeAsync(StateHasChanged); } protected void LoadLocationData(LoadDataArgs args) { var query = locationslist; if (!string.IsNullOrEmpty(args.Filter)) { query = query.Where(c => c.Name.ToLower().Contains(args.Filter.ToLower())); } if (query != null) { locations = query.ToList(); } InvokeAsync(StateHasChanged); } protected void LoadcategoryData(LoadDataArgs args) { var query = categorylist; if (!string.IsNullOrEmpty(args.Filter)) { query = query.Where(c => c.Name.ToLower().Contains(args.Filter.ToLower())); } if (query != null) { category = query.ToList(); } InvokeAsync(StateHasChanged); } private string signaturePreview = string.Empty; private string signatureData = string.Empty; private IJSObjectReference signaturePad; protected async Task SaveSignature() { signatureData = await signaturePad.InvokeAsync("toDataURL"); UpdateSignaturePreview(); } private void UpdateSignaturePreview() { var base64Index = signatureData.IndexOf("base64,", StringComparison.OrdinalIgnoreCase); if (base64Index != -1) { // Skip "base64," to get the actual base64-encoded string var base64String = signatureData.Substring(base64Index + 7); signaturePreview = $"data:image/png;base64,{base64String}"; } else { Console.WriteLine("Invalid signatureData format"); } } [JSInvokable] public static Task UpdateSignatureData(string signatureData) { return Task.CompletedTask; } protected async Task SaveData() { try { model.SignOffSignature = await signaturePad.InvokeAsync("toDataURL"); } catch { } model.istemplate = true; model.WorkOrderContacts = null; model.WorkOrderContacts = model.WorkOrderContacts == null ? new List() : model.WorkOrderContacts; foreach (var itm in workordercontacts) { model.WorkOrderContacts.Add(new WorkOrderContacts { ContactId = itm }); } model.WorkOrderCategories = null; model.WorkOrderCategories = model.WorkOrderCategories == null ? new List() : model.WorkOrderCategories; foreach (var itm in workordercategories) { model.WorkOrderCategories.Add(new WorkOrderCategories { CategoryId = itm }); } var res = await _serviceworkorder.Addworkorder(model, files); if (res == "success") { await ShowSweetAlert("Sucessfully Saved Data", "success"); // model = new WorkOrder(); } else { await ShowSweetAlert(res, "error"); } } private int eid = 0; protected async Task Edit(int id) { if (id != 0) { eid = id; step = 1; var result = await _service.ViewTemplate(id); if (result != null) { model = result; } workordercategories = result.WorkOrderCategories .Select(s => s.CategoryId) .Where(value => value.HasValue) .Select(value => value.Value) .ToList(); workordercontacts = result.WorkOrderContacts .Select(s => s.ContactId) .Where(value => value.HasValue) .Select(value => value.Value) .ToList(); } await InvokeAsync(StateHasChanged); } protected async Task View(int id) { if (id != 0) { step = 2; var result = await _service.ViewTemplate(id); if (result != null) { model = result; } workordercategories = result.WorkOrderCategories .Select(s => s.CategoryId) .Where(value => value.HasValue) .Select(value => value.Value) .ToList(); workordercontacts = result.WorkOrderContacts .Select(s => s.ContactId) .Where(value => value.HasValue) .Select(value => value.Value) .ToList(); } await InvokeAsync(StateHasChanged); } protected async void OpenPopup() { ModalDialog.Open(); await JSRuntime.InvokeVoidAsync("initializedsignature1"); var canvasElement = await JSRuntime.InvokeAsync("document.querySelector", "#signatureCanvas1"); await canvasElement.InvokeVoidAsync("setAttribute", "data-signature-pad", "new SignaturePad()"); signaturePad = canvasElement; await signaturePad.InvokeVoidAsync("addEventListener", "change", DotNetObjectReference.Create(this)); } protected void ClosePopup() { ModalDialog.Close(); } private async Task HandleFileUpload(InputFileChangeEventArgs e) { var imageFile = e.File; files.Add(new FileUploadViewModel { file = imageFile, Name = "attachment1" }); } private async Task HandleFileUpload1(InputFileChangeEventArgs e) { var imageFile = e.File; files.Add(new FileUploadViewModel { file = imageFile, Name = "attachment2" }); } private async Task HandleFileUpload2(InputFileChangeEventArgs e) { var imageFile = e.File; files.Add(new FileUploadViewModel { file = imageFile, Name = "attachment3" }); } private async Task HandleFileUpload3(InputFileChangeEventArgs e) { var imageFile = e.File; files.Add(new FileUploadViewModel { file = imageFile, Name = "attachment4" }); } private async Task ShowSweetAlert(string title, string icon) { // Display a SweetAlert dialog await JSRuntime.InvokeVoidAsync("Swal.fire", new { toast = true, showConfirmButton = false, timer = 3000, title = title, icon = icon, position = "top-end" }); await JSRuntime.InvokeVoidAsync("closemodal"); } private async Task Delete(int val) { var result = await JSRuntime.InvokeAsync("Swal.fire", new { title = "Are you sure?", text = "You won't be able to revert this!", type = "warning", showCancelButton = true, customClass = new { confirmButton = "btn btn-success m-1", cancelButton = "btn btn-danger m-1" }, buttonsStyling = false, confirmButtonText = "Yes, delete it!" }); if (result.TryGetProperty("isConfirmed", out var isConfirmedProperty) && isConfirmedProperty.GetBoolean()) { // Call your delete API here var response = await _service.DeleteTemplate(val); if (response == "success") { await JSRuntime.InvokeVoidAsync("Swal.fire", new { icon = "success", title = "Deleted!", text = "Data has been deleted.", type = "info", showCancelButton = false, customClass = new { confirmButton = "btn btn-success", cancelButton = "btn btn-danger" }, buttonsStyling = false, confirmButtonText = "Ok" }); templates = await _service.GetTemplates(); // await JSRuntime.InvokeVoidAsync("location.reload"); } else { await JSRuntime.InvokeVoidAsync("Swal.fire", new { title = "Not Deleted!", text = "Unsuccessful! Cannot delete this.", type = "danger" }); } } } private void Changestep(int val) { step = val; if (val == 1) { model = new WorkOrder(); } } }