@page "/HerramientaCASAS" @using HerramientaCASA.Model @using Microsoft.AspNetCore.WebUtilities @using System.Text.Json @using System.Text @using bdHerramientaCACOA.db @using Newtonsoft.Json @using PuppeteerSharp @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @inject ProtectedLocalStorage ProtectedLocalStore @inject IJSRuntime JSA @rendermode InteractiveServer @inject NavigationManager Navigation

@TextoSuperior

@if (!actualizado) {
Esta simulación utiliza valores desactualizados. ¿Quiere Realizar una copia actualizada?
}
@if (TituloBoton == "Guardar") {

Se va a guardar esta nueva simulación podrá acceder a ella para consultarla y editarla desde el apartado Mis Simulaciones

} else {

Se van a sobrescribir los datos de la simulación actual con los cambios realizados, esta opción no puede deshacerse.

¿Desea continuar?

}
Nombre de la simulación:
@* *@
@code { [Parameter] public string? idSimulador { get; set; } = ""; public string TextoSuperior = "Nueva simulación CASA de Edificación"; public string TituloBoton = "Guardar"; private Modal popupGuardar = default!; public bool actualizado = true; string nombreOriginal = ""; private string pdfUrl; public tsHerramientasCACOA bd; public bdHerramientaCACOA.CASA casa = new CASA(); List mensajes = new List(); private int idUser = 0; protected override async Task OnInitializedAsync() { try { var url = Navigation.ToAbsoluteUri(Navigation.Uri); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); if (QueryHelpers.ParseQuery(url.Query).TryGetValue("idSimulador", out var clValue)) { idSimulador = clValue; } if (string.IsNullOrEmpty(idSimulador)) { try { // if (!string.IsNullOrEmpty(idClonado)) // { // string idDesencriptado = tsUtilidades.crypt.FEncS(idClonado, // "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", // "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", // -875421649); // var byteFichero = bd.ficheros.Where(x => x.idFichero == int.Parse(idDesencriptado)).First().Fichero; // string CASAJson = System.Text.Encoding.UTF8.GetString(byteFichero); // var casaCopiada = System.Text.Json.JsonSerializer.Deserialize(CASAJson); // casa = new bdHerramientaCACOA.CASA(); // casa.RellenarCamposExtra(bd); // casa.DespachoProfesional = casaCopiada.DespachoProfesional; // } // else // { casa = new bdHerramientaCACOA.CASA(); casa.RellenarCamposExtra(bd); // } } catch (Exception ex) { var a = ex.Message; } } else { var fechaActVar = bd.enumeraciones.First(x => x.Codigo == "CW.FECHAULTMOD").Fecha1; string idDesencriptado = tsUtilidades.crypt.FEncS(idSimulador, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", -875421649); simulaciones simu = bd.simulaciones.Where(x => x.idSimulacion == int.Parse(idDesencriptado)).First(); int idFicheroJSON = simu.idFicheroJSON; idSimulador = idDesencriptado; var byteFichero = bd.ficheros.Where(x => x.idFichero == idFicheroJSON).First().Fichero; string CASAJson = System.Text.Encoding.UTF8.GetString(byteFichero); casa = System.Text.Json.JsonSerializer.Deserialize(CASAJson); if ((simu.FechaModificacion != null && simu.FechaModificacion < fechaActVar) || (simu.FechaModificacion == null && simu.FechaCreacion < fechaActVar)) { actualizado = false; } TextoSuperior = "Modificando simulación \"" + casa.NombreSimulacion + "\""; TituloBoton = "Modificar"; nombreOriginal = casa.NombreSimulacion; } var obtenerID = await ProtectedLocalStore.GetAsync("idUsuario"); idUser = obtenerID.Value; } catch (Exception ex) { Console.WriteLine($"Error durante la inicialización: {ex.Message}"); } } private void guardarCasa() { int idtipoSimulacion = bd.enumeraciones.First(x => x.Codigo == HerramientaCASA.UtilidadesCASA.obtenerTipoSimulacion(HerramientaCASA.UtilidadesCASA.TiposSimulaciones.CASA)).idEnumeracion; string jsonObjeto = Newtonsoft.Json.JsonConvert.SerializeObject(casa); if (string.IsNullOrEmpty(idSimulador)) { if (bd.simulaciones.Any(x => x.Descripcion == casa.NombreSimulacion && x.idTipoSimulacion == idtipoSimulacion)) { mensajes.Add(new ToastMessage { Type = ToastType.Danger, Message = $"Ya existe una simulación con el mismo nombre.", }); cerrarPopupGuardar(); } else { idSimulador = crearSimulacion(jsonObjeto).ToString(); } } else { var listadoSimulacionesExistentes = bd.simulaciones.Where(x => x.Descripcion != nombreOriginal && x.idTipoSimulacion == idtipoSimulacion).ToList(); if (listadoSimulacionesExistentes.Any(x => x.Descripcion == casa.NombreSimulacion)) { mensajes.Add(new ToastMessage { Type = ToastType.Danger, Message = $"Ya existe una simulación con el mismo nombre.", }); cerrarPopupGuardar(); } else { actualizarSimulacion(jsonObjeto); } } HerramientaCASA.UtilidadesCASA.guardarEstadisticas(bd, HerramientaCASA.UtilidadesCASA.TiposSimulaciones.CASA,jsonObjeto,int.Parse(idSimulador)); } private int crearSimulacion(string jsonObjeto) { int idSimulacionCreada = UtilidadesCASA.crearObjeto(bd, HerramientaCASA.UtilidadesCASA.TiposSimulaciones.CASA, jsonObjeto, casa.NombreSimulacion, "casa.json", idUser); string link = "/HerramientaCASAS?idSimulador=" + tsUtilidades.crypt.FEncS(idSimulacionCreada.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); mensajes.Add(new ToastMessage { Type = ToastType.Primary, Message = $"Simulación creada correctamente.", }); Navigation.NavigateTo(link, true); return idSimulacionCreada; } private void actualizarSimulacion(string jsonObjeto) { UtilidadesCASA.actualziarObjeto(bd, jsonObjeto, casa.NombreSimulacion, idSimulador); cerrarPopupGuardar(); mensajes.Add(new ToastMessage { Type = ToastType.Primary, Message = $"Simulación actualizada correctamente.", }); } private void clonarCASA() { casa.RellenarCamposExtra(bd); casa.CalcularFinales(); casa.CalcularHorasTPE(); casa.NombreSimulacion = casa.NombreSimulacion + " (Act:" + DateTime.Now + ")"; string jsonObjeto = Newtonsoft.Json.JsonConvert.SerializeObject(casa); var id = UtilidadesCASA.crearObjeto(bd, HerramientaCASA.UtilidadesCASA.TiposSimulaciones.CASA, jsonObjeto, casa.NombreSimulacion, "casa.json", idUser); var link = "/HerramientaCASAS?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); Navigation.NavigateTo(link, true); } public void RefreshState() { this.StateHasChanged(); } private async Task abrirPopupGuardar() { await popupGuardar.ShowAsync(); } private async Task cerrarPopupGuardar() { await popupGuardar.HideAsync(); } private async Task VerManual() { string urlManual = bd.enumeraciones.FirstOrDefault(x => x.Codigo.Contains("MANUAL.HERRAMIENTACASA")).ValorAlfabeticoLargo; await JSA.InvokeVoidAsync("abrirManual", urlManual); } private async Task imprimir() { var cssPath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "Content", "Site.css"); var cssContent = await File.ReadAllTextAsync(cssPath); var contenidoHtml = await JSA.InvokeAsync("obtenerPDFImprimir", "DespachoImprimir"); var fullHtml = $@" {contenidoHtml} "; var browserFetcher = new BrowserFetcher(); var revisionInfo = await browserFetcher.DownloadAsync(); var browser = await Puppeteer.LaunchAsync(new LaunchOptions { ExecutablePath = revisionInfo.GetExecutablePath(), Headless = true, Args = new[] { "--no-sandbox", "--disable-setuid-sandbox", "--ignore-certificate-errors" } }); using var page = await browser.NewPageAsync(); await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 800 }); await page.SetContentAsync(fullHtml); var pdfBytes = await page.PdfDataAsync(new PdfOptions { PrintBackground = true, Format = PuppeteerSharp.Media.PaperFormat.A4, MarginOptions = new PuppeteerSharp.Media.MarginOptions { Top = "18mm", Bottom = "0mm", }, DisplayHeaderFooter=true, HeaderTemplate = @"
Image Costes Asociados a los Servicios de Arquitectura - CASA
", FooterTemplate = @"
Página de
" }); await JSA.InvokeVoidAsync("mostrarPdf", Convert.ToBase64String(pdfBytes)); } }