@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?
}
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 = @"
|
Costes Asociados a los Servicios de Arquitectura - CASA
|
",
FooterTemplate = @"
Página de
"
});
await JSA.InvokeVoidAsync("mostrarPdf", Convert.ToBase64String(pdfBytes));
}
}