Compare commits

...

8 Commits

284 changed files with 992 additions and 687 deletions

View File

@@ -0,0 +1,23 @@
using System.Reflection;
using System.Runtime.Loader;
namespace HerramientaCASA
{
public class AssemnlyLoadwkhtmltox : AssemblyLoadContext
{
public IntPtr LoadUnmanagedLibrary(string absolutePath)
{
return LoadUnmanagedDll(absolutePath);
}
protected override IntPtr LoadUnmanagedDll(string unmanagedDllPath)
{
return LoadUnmanagedDllFromPath(unmanagedDllPath);
}
protected override Assembly Load(AssemblyName assemblyName)
{
return null;
}
}
}

View File

@@ -18,8 +18,8 @@
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script> crossorigin="anonymous"></script>
<script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script> <script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
<script src="_framework/blazor.web.js"></script>
<script src="Scripts/Util.js"></script> <script src="Scripts/Util.js"></script>
<script src="_framework/blazor.web.js"></script>
</body> </body>
</html> </html>

View File

@@ -6,6 +6,8 @@
@inject NavigationManager Navigation @inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState userState
@inject IJSRuntime JS
<head> <head>
@@ -106,32 +108,55 @@
@code { @code {
protected override async Task OnInitializedAsync() // protected override async Task OnInitializedAsync()
// {
// // Redirigir al home si no hay token y la ruta no es pública
// if (userState.idUser == 0)
// {
// Navigation.NavigateTo("/", true);
// }
// }
string? urlAnterior = "";
bool urlVaida = true;
string rutaActual = "";
protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
var obtenerDatoAdmin = await ProtectedLocalStore.GetAsync<bool>("EsAdmin"); if (firstRender)
var obtenerDatoId = await ProtectedLocalStore.GetAsync<int>("idUsuario"); {
// Redirigir al home si no hay token y la ruta no es pública urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
if (obtenerDatoId.Value == 0 || !obtenerDatoAdmin.Value)
if (!string.IsNullOrEmpty(urlAnterior))
{
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
if (rutaActual != "Denegado")
{
if (!urlAnterior.Contains("cacoa.es"))
{
Navigation.NavigateTo("/Denegado", true);
}
}
}
else
{
Navigation.NavigateTo("/Denegado", true);
}
if (userState.idUser == 0)
{ {
Navigation.NavigateTo("/", true); Navigation.NavigateTo("/", true);
} }
StateHasChanged();
}
} }
// protected override void OnAfterRender(bool firstRender)
// {
// if (firstRender)
// {
// string? urlAnterior = HttpContextAccessor.HttpContext?.Request.Headers["Referer"].ToString();
// string rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
// if (rutaActual != "Denegado")
// {
// if (string.IsNullOrEmpty(urlAnterior) || urlAnterior.Contains("cacoa.es"))
// {
// Navigation.NavigateTo("/Denegado", true);
// }
// }
// }
// }
} }

View File

@@ -5,6 +5,7 @@
@inject UserState UserState @inject UserState UserState
@inject IHttpContextAccessor HttpContextAccessor @inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject IJSRuntime JS
<head> <head>
@@ -12,7 +13,7 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" />
<link href="Content/Site.css?v=0.9" rel="stylesheet" /> <link href="Content/Site.css?v=0.62" rel="stylesheet" />
<link href="Content/all.min.css" rel="stylesheet" /> <link href="Content/all.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<script src="Scripts/jquery.min.js"></script> <script src="Scripts/jquery.min.js"></script>
@@ -39,22 +40,43 @@
@code{ @code{
// protected override void OnAfterRender(bool firstRender)
// {
// if (firstRender)
// {
// string? urlAnterior = HttpContextAccessor.HttpContext?.Request.Headers["Referer"].ToString();
// string rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
// if (rutaActual != "Denegado") string? urlAnterior = "";
// {
// if (string.IsNullOrEmpty(urlAnterior) || urlAnterior.Contains("cacoa.es")) bool urlVaida = true;
// { string rutaActual = "";
// Navigation.NavigateTo("/Denegado", true);
// }
// } protected override async Task OnAfterRenderAsync(bool firstRender)
// } {
// } if (firstRender)
{
urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
if (!string.IsNullOrEmpty(urlAnterior))
{
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
if (rutaActual != "Denegado")
{
if (!urlAnterior.Contains("cacoa.es") )
{
Navigation.NavigateTo("/Denegado", true);
}
}
}
else
{
Navigation.NavigateTo("/Denegado", true);
}
StateHasChanged();
}
}
} }

View File

@@ -6,6 +6,8 @@
@inject NavigationManager Navigation @inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState userState
@inject IJSRuntime JS
<head> <head>
@@ -13,7 +15,7 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" />
<link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" /> <link href="_content/Blazor.Bootstrap/Blazor.Bootstrap.bundle.scp.css" rel="stylesheet" />
<link href="Content/Site.css?v=0.56" rel="stylesheet" /> <link href="Content/Site.css?v=0.64" rel="stylesheet" />
<link href="Content/all.min.css" rel="stylesheet" /> <link href="Content/all.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<script src="Scripts/jquery.min.js"></script> <script src="Scripts/jquery.min.js"></script>
@@ -111,15 +113,54 @@
@code { @code {
private bool MostrarExtra => Navigation.Uri.Contains("PanelControl", StringComparison.OrdinalIgnoreCase); private bool MostrarExtra => Navigation.Uri.Contains("PanelControl", StringComparison.OrdinalIgnoreCase);
protected override async Task OnInitializedAsync()
string? urlAnterior = "";
bool urlVaida = true;
string rutaActual = "";
protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
var obtenerDatoAdmin = await ProtectedLocalStore.GetAsync<bool>("EsAdmin"); if (firstRender)
var obtenerDatoId = await ProtectedLocalStore.GetAsync<int>("idUsuario"); {
// Redirigir al home si no hay token y la ruta no es pública urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
if (obtenerDatoId.Value == 0 || obtenerDatoAdmin.Value)
if (!string.IsNullOrEmpty(urlAnterior))
{
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
if (rutaActual != "Denegado")
{
if (!urlAnterior.Contains("cacoa.es"))
{
Navigation.NavigateTo("/Denegado", true);
}
}
}
else
{
Navigation.NavigateTo("/Denegado", true);
}
if (userState.idUser == 0 )
{ {
Navigation.NavigateTo("/", true); Navigation.NavigateTo("/", true);
} }
StateHasChanged();
}
}
protected override async Task OnInitializedAsync()
{
// Redirigir al home si no hay token y la ruta no es pública
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -6,8 +6,9 @@
@msTextoEncabezado @msTextoEncabezado
</p> </p>
<div class="d-flex flex-column mt-3"> <div class="mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoCASA.NombreSimulacion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoCASA.NombreSimulacion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label> <label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div> </div>
@@ -148,7 +149,7 @@
</div> </div>
</div> </div>
<div class="col-10 mx-auto d-flex justify-content-center" style="align-items: flex-end; margin-top:150px;"> <div class="col-10 mx-auto d-flex justify-content-center" style="@estiloTrabajos">
<div class="col-md-10 row "> <div class="col-md-10 row ">
<div class="TituloTablaImprimir"> <div class="TituloTablaImprimir">
<b>Trabajo profesional</b> <b>Trabajo profesional</b>
@@ -207,15 +208,20 @@
</div> </div>
</div> </div>
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto" >
@* TABLA COSTES ASOCIADOS A LOS SEVICIOS DE ARQUITECTURA *@ @* TABLA COSTES ASOCIADOS A LOS SEVICIOS DE ARQUITECTURA *@
<div class="col-8 mx-auto mb-4"> <div class="col-8 mx-auto" style=" margin-top:70px;">
<div class="TituloTablaImprimir"> <div class="TituloTablaImprimir">
<b>Costes Asociados a los Servicios de Arquitectura</b>
</div> </div>
<table class="tablaAlter" style="width:100%"> <div class="TituloTablaImprimir" style=" margin-top:70px;">
<p>
<b>Costes Asociados a los Servicios de Arquitectura</b>
</p>
</div>
<table class="tablaAlter" style="width:100%;">
<tbody style="font-size:9pt;"> <tbody style="font-size:9pt;">
<tr> <tr>
<td class="TotalesTabla" > COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL: </td> <td class="TotalesTabla" > COSTES DE PRODUCCIÓN DEL TRABAJO PROFESIONAL: </td>
@@ -323,6 +329,7 @@
public tsHerramientasCACOA bd; public tsHerramientasCACOA bd;
public string estiloTrabajos = "";
MarkupString msTextoEncabezado => (MarkupString)textoEncabezado; MarkupString msTextoEncabezado => (MarkupString)textoEncabezado;
@@ -338,6 +345,7 @@
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
totalUsos = objetoCASA.TrabajoProfesional.Usos.Count; totalUsos = objetoCASA.TrabajoProfesional.Usos.Count;
estiloTrabajos = objetoCASA.TrabajoProfesional.Usos.Count != 0 ? "align-items: flex-end; margin-top:50px;" : "align-items: flex-end; margin-top:150px;";
textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFCASA")).ValorAlfabeticoLargo; textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFCASA")).ValorAlfabeticoLargo;

View File

@@ -12,10 +12,12 @@
<div class="d-flex flex-column mt-3"> <div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoURBAN.NombreSimulacion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoURBAN.NombreSimulacion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label> <label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div> </div>
@* COSTE HORA DE LOS TRABAJOS *@
<div class="col-8 mx-auto" style="align-items: flex-end;"> <div class="col-8 mx-auto" style="align-items: flex-end;">
<div class="TituloTablaImprimir"> <div class="TituloTablaImprimir">
<b>Coste hora de los trabajos realizados por el despacho profesional</b> <b>Coste hora de los trabajos realizados por el despacho profesional</b>
@@ -59,6 +61,7 @@
</div> </div>
</div> </div>
@* COSTE HORA EXTERNALIZACION *@
<div class="col-8 mx-auto" style="margin-top:50px;"> <div class="col-8 mx-auto" style="margin-top:50px;">
<div class="TituloTablaImprimir" > <div class="TituloTablaImprimir" >
@@ -97,8 +100,10 @@
@* TRABAJAO PROFESIONAL *@ @* TRABAJAO PROFESIONAL *@
<div class="@separacionTabla"> <div class="@separacionTabla">
<div class="col-12 d-flex justify-content-center" style="gap:20px;"> <div class="col-8 mx-auto" style="margin-top:50px;">
<div class="formatoCampos pt-2" style="font-size:9pt;">
<div class="table-responsive espacioTablas">
@* <div class="formatoCampos pt-2" style="font-size:9pt;">
<label class="tituloLbl">Tipo de Documento:</label> <label class="tituloLbl">Tipo de Documento:</label>
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0) @if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{ {
@@ -119,10 +124,47 @@
{ {
<label>No Seleccionado</label> <label>No Seleccionado</label>
} }
</div> *@
<table class="mb-0" style="width:100%;">
<thead>
<tr>
<th >Tipo de Documento:</th>
<th>Documento:</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-end">
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoURBAN.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoURBAN.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
<td class="text-end">
@if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@objetoURBAN.Enumerados.ProyectosPorTipo(objetoURBAN.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoURBAN.TrabajoProfesional.idTipoProyecto).Descripcion</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
@* TABLAS DE DATOS MINIMOS Y OPCIONALES *@ @* TABLAS DE DATOS MINIMOS Y OPCIONALES *@
<div class="col-11 mx-auto" style="margin-top:200px;"> <div class="col-11 mx-auto" style="margin-top:50px;">
@* TABLA DE DATOS MINIMOS *@ @* TABLA DE DATOS MINIMOS *@
<div class="TituloTablaImprimir" style="margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:50px;">
@@ -158,7 +200,10 @@
@* TABLA DE DATOS OPCIONALES *@ @* TABLA DE DATOS OPCIONALES *@
<div class="TituloTablaImprimir" style="margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:80px;">
</div>
<div class="TituloTablaImprimir" style="margin-top:80px;">
<b>Documentación Opcional:</b> <b>Documentación Opcional:</b>
</div> </div>
<div class="table-responsive espacioTablas"> <div class="table-responsive espacioTablas">
@@ -299,7 +344,10 @@
@* INNOVACIÓN INSTRUMENTOS*@ @* INNOVACIÓN INSTRUMENTOS*@
<div class="col-11 mx-auto mb-5"> <div class="col-11 mx-auto mb-5">
<div> <div>
<div class="mt-3 mb-3 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div> <div class="TituloTablaImprimir" style="margin-top:80px;">
</div>
<div class="mb-3 TituloTablaImprimir" style="margin-top:80px;"><b>Innovacion de los instrumentos</b></div>
<p style="font-size:9pt;" class="col-6"> <p style="font-size:9pt;" class="col-6">
<label>@objetoURBAN.TrabajoProfesional.valorInstrumentos %</label> <label>@objetoURBAN.TrabajoProfesional.valorInstrumentos %</label>
</p> </p>
@@ -324,7 +372,7 @@
</div> </div>
} }
<div style="font-size:9pt;" class="fw-bold"> <div style="font-size:9pt;" class="fw-bold mt-2">
<label>HORAS TRABAJO PROFESIONAL URBANISMO: <span>@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</span></label> <label>HORAS TRABAJO PROFESIONAL URBANISMO: <span>@objetoURBAN.TrabajoProfesional.horasTrabProfesional.MilesYDecimales() h</span></label>
</div> </div>
</div> </div>
@@ -336,7 +384,7 @@
<div class="col-11 mx-auto mb-5" > <div class="col-11 mx-auto mb-5" >
<div class="row justify-content-center align-content-center align-items-center"> <div class="row justify-content-center align-content-center align-items-center">
<div class="col-9 mb-5 "> <div class="col-9 mb-5 mb-0" style="width:100%;">
<div class="TituloTablaImprimir" > <div class="TituloTablaImprimir" >
<b>Trabajo profesional</b> <b>Trabajo profesional</b>
</div> </div>

View File

@@ -1,27 +1,29 @@
 
<div id="LicitacionesCASAImprimir" class="d-flex flex-column align-items-center pagePrincipal"> <div id="LicitacionesCASAImprimir" class="d-flex flex-column align-items-center pagePrincipal">
<div class="col-12 mx-auto mb-5"> <div class="col-12 mx-auto">
@* ENCABEZADO DE LA PAGINA *@ @* ENCABEZADO DE LA PAGINA *@
<div class="EncabezadoImprimir"> @* A esta se le pone un margin bottom diferente para que cuando los usos esten vacios que entre en una sola página *@
<div class="EncabezadoImprimir" style="margin-bottom: 80px !important;">
<p> <p>
@msTextoEncabezado @msTextoEncabezado
</p> </p>
<div class="d-flex flex-column mt-3"> <div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitaciones.Descripcion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitaciones.Descripcion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label> <label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div> </div>
@* TABLA USOS TIPOLOGIAS *@ @* TABLA USOS TIPOLOGIAS *@
<div class="col-11 mx-auto mb-5" style="align-items: flex-end;"> <div class="col-11 mx-auto mb-4" style="align-items: flex-end;">
<div class="TituloTablaImprimir"> <div class="TituloTablaImprimir">
<b>Usos/Tipologías</b> <b>Usos/Tipologías</b>
</div> </div>
<div class="table-responsive"> <div class="table-responsive espacioTablas">
<table class="TablaImprimir mb-0 espacioTablas" style="width:100%;"> <table class="TablaImprimir mb-0" style="width:100%;">
<thead> <thead>
<tr> <tr>
<th width="15%">Superficie (m²)</th> <th width="15%">Superficie (m²)</th>
@@ -53,7 +55,7 @@
<tfoot> <tfoot>
<tr> <tr>
<td colspan="4" class="text-start fw-bold colorC TotalesTabla"> <td colspan="4" class="text-start fw-bold colorC TotalesTabla">
<div style="height:28px; align-content:center;"> <div style="height:20px; align-content:center;">
Total superficie: <span> @objetoLicitaciones.Usos.Sum(x => x.superficie).MilesYDecimales() m²</span> Total superficie: <span> @objetoLicitaciones.Usos.Sum(x => x.superficie).MilesYDecimales() m²</span>
</div> </div>
</td> </td>
@@ -84,8 +86,8 @@
{ {
<tr> <tr>
<td>@fase.Denominacion</td> <td>@fase.Denominacion</td>
<td class="text-end"> <td >
<div> <div class="centrarChecksImprimir text-end">
<span style="margin-right:5px;">@fase.Porcentaje</span> <span style="margin-right:5px;">@fase.Porcentaje</span>
@if (fase.Seleccionado) @if (fase.Seleccionado)
{ {
@@ -138,7 +140,7 @@
</div> </div>
@* TABLA COSTES DE PRODUCCION *@ @* TABLA COSTES DE PRODUCCION *@
<div class="col-8 mx-auto" style="align-items: flex-end; margin-top:800px;"> <div class="col-8 mx-auto" style="align-items: flex-end; margin-top:35px;">
<div class="TituloTablaImprimir" > <div class="TituloTablaImprimir" >
<b>Costes de producción</b> <b>Costes de producción</b>
</div> </div>
@@ -196,7 +198,8 @@
</div> </div>
<div class="FooterImprimir"> @* A esta se le pone un margin top diferente para que cuando los usos esten vacios que entre en una sola página *@
<div class="FooterImprimir" style="margin-top: 55px !important;">
<p> <p>
@mspie1 @mspie1
</p> </p>

View File

@@ -11,12 +11,16 @@
<div class="d-flex flex-column mt-3"> <div class="d-flex flex-column mt-3">
<label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitacionUrban.NombreSimulacion</span></label> <label>Simulación: <span class="NombreSimulacionImprimir">@objetoLicitacionUrban.NombreSimulacion</span></label>
<br />
<label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label> <label>Fecha de creación: <span class="NombreSimulacionImprimir">@DateTime.Now</span></label>
</div> </div>
</div> </div>
<div class="col-12 d-flex justify-content-center" style="gap:20px;"> <div class="col-8 mx-auto" style="margin-top:50px;">
<div class="formatoCampos pt-2" style="font-size:9pt;">
<div class="table-responsive espacioTablas">
@* <div class="formatoCampos pt-2" style="font-size:9pt;">
<label class="tituloLbl">Tipo de Documento:</label> <label class="tituloLbl">Tipo de Documento:</label>
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0) @if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{ {
@@ -37,6 +41,43 @@
{ {
<label>No Seleccionado</label> <label>No Seleccionado</label>
} }
</div> *@
<table class="mb-0" style="width:100%;">
<thead>
<tr>
<th>Tipo de Documento:</th>
<th>Documento:</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-end">
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@CultureInfo.CurrentCulture.TextInfo.ToTitleCase(@objetoLicitacionUrban.Enumerados.TiposDeDocumentos.First(x => x.idEnumeracion == objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).Descripcion.ToLower())</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
<td class="text-end">
@if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{
<label>@objetoLicitacionUrban.Enumerados.ProyectosPorTipo(objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion).First(x => x.idtipoproyectos == objetoLicitacionUrban.TrabajoProfesional.idTipoProyecto).Descripcion</label>
}
else
{
<label>No Seleccionado</label>
}
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
@* TABLAS DE DATOS MINIMOS Y OPCIONALES *@ @* TABLAS DE DATOS MINIMOS Y OPCIONALES *@
@@ -75,7 +116,10 @@
@* TABLA DE DATOS OPCIONALES *@ @* TABLA DE DATOS OPCIONALES *@
<div class="TituloTablaImprimir" style=" margin-top:50px;"> <div class="TituloTablaImprimir" style="margin-top:10px;">
</div>
<div class="TituloTablaImprimir">
<b>Documentación Opcional:</b> <b>Documentación Opcional:</b>
</div> </div>
<div class="table-responsive espacioTablas"> <div class="table-responsive espacioTablas">
@@ -155,8 +199,9 @@
</div> </div>
</div> </div>
</div> </div>
@* FASES *@ @* FASES *@
<div class="col-8 mx-auto" style="margin-top:250px;"> <div class="col-8 mx-auto" style="margin-top:150px;">
<div class="TituloTablaImprimir" style=" margin-top:50px;"> <div class="TituloTablaImprimir" style=" margin-top:50px;">
<b>Fases:</b> <b>Fases:</b>
@@ -205,7 +250,7 @@
</div> </div>
@* INNOVACIÓN INSTRUMENTOS*@ @* INNOVACIÓN INSTRUMENTOS*@
<div class="col-11 mx-auto "> <div class="col-11 mx-auto" style="margin-top:150px;">
<div> <div>
<div class="mt-3 mb-3 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div> <div class="mt-3 mb-3 TituloTablaImprimir"><b>Innovacion de los instrumentos</b></div>
<p style="font-size:9pt;" class="col-6"> <p style="font-size:9pt;" class="col-6">
@@ -241,7 +286,10 @@
<div class="col-8 mx-auto mt-4"> <div class="col-8 mx-auto mt-4">
@* Solvencia tecnica *@ @* Solvencia tecnica *@
<div class="TituloTablaImprimir">
<div class="TituloTablaImprimir" style="margin-top:50px;">
</div>
<div class="TituloTablaImprimir" style="margin-top:50px;">
<b>Solvencia técnica:</b> <b>Solvencia técnica:</b>
</div> </div>
@@ -374,6 +422,7 @@
public tsHerramientasCACOA bd; public tsHerramientasCACOA bd;
string espacioTabla = "margin-bottom:400px;"; string espacioTabla = "margin-bottom:400px;";
string espacioDocumentos = "";
MarkupString msTextoEncabezado => (MarkupString)textoEncabezado; MarkupString msTextoEncabezado => (MarkupString)textoEncabezado;
@@ -394,6 +443,15 @@
espacioTabla = ""; espacioTabla = "";
} }
if (objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion != 0)
{
espacioDocumentos = "margin-top:50px;";
}
else
{
espacioDocumentos = "margin-top:50px;";
}
textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFURBANLIC")).ValorAlfabeticoLargo; textoEncabezado = bd.enumeraciones.First(x => x.Codigo.Contains("PDFURBANLIC")).ValorAlfabeticoLargo;
pie1 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE1")).ValorAlfabeticoLargo; pie1 = bd.enumeraciones.First(x => x.Codigo.Contains(".PDFPIE1")).ValorAlfabeticoLargo;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -29,4 +29,5 @@
</div> </div>
@code { @code {
} }

View File

@@ -7,6 +7,7 @@
@inject IHttpContextAccessor HttpContextAccessor @inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject UserState UserState @inject UserState UserState
@inject IJSRuntime JS
<div class="fondo"> <div class="fondo">
@@ -56,18 +57,23 @@
private string mensajeError = ""; private string mensajeError = "";
private bool recuerda = false; private bool recuerda = false;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
await ProtectedLocalStore.SetAsync("idUsuario", 0); await ProtectedLocalStore.SetAsync("idUsuario", 0);
await ProtectedLocalStore.SetAsync("EsAdmin", false); await ProtectedLocalStore.SetAsync("EsAdmin", false);
// Limpiar almacenamiento local o sesión si se está utilizando // Limpiar almacenamiento local o sesión si se está utilizando
// if (HttpContextAccessor?.HttpContext?.Session != null) if (HttpContextAccessor?.HttpContext?.Session != null)
// { {
// HttpContextAccessor.HttpContext.Session.Clear(); HttpContextAccessor.HttpContext.Session.Clear();
// } }
var rec = await ProtectedLocalStore.GetAsync<bool>("rec"); var rec = await ProtectedLocalStore.GetAsync<bool>("rec");
if(rec.Value==true){ if(rec.Value==true){
@@ -91,6 +97,9 @@
await ProtectedLocalStore.SetAsync("idUsuario", -1); await ProtectedLocalStore.SetAsync("idUsuario", -1);
await ProtectedLocalStore.SetAsync("EsAdmin", true); await ProtectedLocalStore.SetAsync("EsAdmin", true);
UserState.idUser = -1;
UserState.PuedeAcceder =true;
Navigation.NavigateTo("/PanelControlConf", forceLoad: true); Navigation.NavigateTo("/PanelControlConf", forceLoad: true);
} }
else else
@@ -107,6 +116,9 @@
await ProtectedLocalStore.SetAsync("idUsuario", usuario.idUsuario); await ProtectedLocalStore.SetAsync("idUsuario", usuario.idUsuario);
await ProtectedLocalStore.SetAsync("EsAdmin", false); await ProtectedLocalStore.SetAsync("EsAdmin", false);
UserState.idUser = usuario.idUsuario;
UserState.PuedeAcceder =true;
if (recuerda) if (recuerda)
{ {

View File

@@ -13,10 +13,25 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Remove="wwwroot\chrome-win\**" />
<Content Remove="wwwroot\chrome-win\**" />
<EmbeddedResource Remove="wwwroot\chrome-win\**" />
<None Remove="wwwroot\chrome-win\**" />
</ItemGroup>
<ItemGroup>
<Content Include="DinkToPdf\libs\win-x64\libwkhtmltox.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Blazor.Bootstrap" Version="3.3.1" /> <PackageReference Include="Blazor.Bootstrap" Version="3.3.1" />
<PackageReference Include="ClosedXML" Version="0.105.0" /> <PackageReference Include="ClosedXML" Version="0.105.0" />
<PackageReference Include="PuppeteerSharp" Version="20.2.2" /> <PackageReference Include="DinkToPdf" Version="1.0.8" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -28,4 +43,10 @@
<ProjectReference Include="..\bdHerramientaCACOA\bdHerramientaCACOA.csproj" /> <ProjectReference Include="..\bdHerramientaCACOA\bdHerramientaCACOA.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Update="wwwroot\Content\Site.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project> </Project>

View File

@@ -5,6 +5,7 @@
private readonly object _lock = new object(); private readonly object _lock = new object();
private int _idUser; private int _idUser;
private bool _esAdmin; private bool _esAdmin;
private bool _puedeAcceder;
public int idUser public int idUser
{ {
get get
@@ -41,5 +42,24 @@
} }
} }
public bool PuedeAcceder
{
get
{
lock (_lock)
{
return _puedeAcceder;
}
}
set
{
lock (_lock)
{
_puedeAcceder = value;
}
}
}
} }
} }

View File

@@ -1,11 +1,27 @@
using bdHerramientaCACOA.dbcontext; using bdHerramientaCACOA.dbcontext;
using DinkToPdf;
using DinkToPdf.Contracts;
using HerramientaCASA;
using HerramientaCASA.Components; using HerramientaCASA.Components;
using HerramientaCASA.Model; using HerramientaCASA.Model;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
using System.Globalization; using System.Globalization;
using System.Runtime.InteropServices;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
var context = new AssemnlyLoadwkhtmltox();
// ruta a la dll nativa
context.LoadUnmanagedLibrary(
Path.Combine(Directory.GetCurrentDirectory(), "DinkToPdf", "libs", "win-x64", "libwkhtmltox.dll")
);
builder.Services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
builder.Services.AddScoped<ServicioPDF>();
// Add services to the container. // Add services to the container.
builder.Services.AddRazorComponents() builder.Services.AddRazorComponents()
.AddInteractiveServerComponents(); .AddInteractiveServerComponents();

View File

@@ -0,0 +1,132 @@
using DinkToPdf;
using DinkToPdf.Contracts;
using System.Text;
namespace HerramientaCASA
{
public class ServicioPDF
{
private readonly IConverter _converter;
public ServicioPDF(IConverter converter)
{
_converter = converter;
}
public byte[] GenerarPdf(string html)
{
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
PaperSize = PaperKind.A4,
Orientation = Orientation.Portrait,
Margins= new MarginSettings
{
Top = 11.8,
Left = 0,
Right = 0,
Bottom = 10
},
},
Objects = {
new ObjectSettings() {
HtmlContent = html,
HeaderSettings = new HeaderSettings
{
HtmUrl = Path.Combine(Environment.CurrentDirectory, "wwwroot", "Imprimir", "HeaderImprimir.html")
}
}
}
};
return _converter.Convert(doc);
}
// /// <summary>
// /// Convierte HTML a PDF (bytes) usando HtmlRenderer.PdfSharpCore, inyectando site.css.
// /// </summary>
// /// <param name="htmlBody">
// /// Contenido HTML del body (o el documento completo). Si pasas solo el body, se envolverá automáticamente.
// /// </param>
// /// <param name="siteCssPath">Ruta al archivo site.css en el servidor (p. ej. "wwwroot/css/site.css").</param>
// /// <param name="baseUri">
// /// (Opcional) Base para resolver rutas relativas.
// /// Se inserta como &lt;base href="..."&gt; en &lt;head&gt;.
// /// </param>
// /// <param name="pageSize">Tamaño de página (A4 por defecto).</param>
// /// <param name="margin">Margen en puntos (40 por defecto).</param>
// public byte[] HtmlToPdfWithSiteCss(
// string htmlBody,
// string siteCssPath,
// string? baseUri = null,
// PdfSharpCore.PageSize pageSize = PdfSharpCore.PageSize.A4,
// int margin = 40
// )
// {
// if (string.IsNullOrWhiteSpace(htmlBody))
// throw new ArgumentException("El HTML no puede estar vacío.", nameof(htmlBody));
// if (string.IsNullOrWhiteSpace(siteCssPath) || !File.Exists(siteCssPath))
// throw new FileNotFoundException("No se encontró el archivo CSS indicado.", siteCssPath);
// // Evitar problemas de codificación (tildes, ñ)
// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
// // Lee el CSS local
// var css = File.ReadAllText(siteCssPath);
// // HTML mínimo
// bool isFullHtml = htmlBody.Contains("<html", StringComparison.OrdinalIgnoreCase);
// string headExtras = $"<meta charset='utf-8'><style>{css}</style>";
// if (!string.IsNullOrWhiteSpace(baseUri))
// headExtras = $"<base href=\"{baseUri}\">{headExtras}";
// string fullHtml = isFullHtml
// ? InjectIntoHead(htmlBody, headExtras)
// : $"<!doctype html><html><head>{headExtras}</head><body>{htmlBody}</body></html>";
// var cfg = new PdfGenerateConfig
// {
// PageSize = (PdfSharp.PageSize)pageSize,
// MarginLeft = margin,
// MarginRight = margin,
// MarginTop = margin,
// MarginBottom = margin
// };
// using var doc = PdfGenerator.GeneratePdf(fullHtml, cfg);
// using var ms = new MemoryStream();
// doc.Save(ms);
// return ms.ToArray();
// // Inserta contenido en <head> (si existe); si no, lo crea.
// static string InjectIntoHead(string html, string toInject)
// {
// int headOpen = html.IndexOf("<head", StringComparison.OrdinalIgnoreCase);
// if (headOpen >= 0)
// {
// int headClose = html.IndexOf('>', headOpen);
// if (headClose > headOpen)
// {
// return html.Insert(headClose + 1, toInject);
// }
// }
// // No hay <head>, lo creamos
// int htmlOpen = html.IndexOf("<html", StringComparison.OrdinalIgnoreCase);
// if (htmlOpen >= 0)
// {
// int htmlTagEnd = html.IndexOf('>', htmlOpen);
// if (htmlTagEnd > htmlOpen)
// {
// return html.Insert(htmlTagEnd + 1, $"<head>{toInject}</head>");
// }
// }
// // Documento raro: envolvemos completo
// return $"<!doctype html><html><head>{toInject}</head><body>{html}</body></html>";
// }
// }
//}
}
}

View File

@@ -7,7 +7,7 @@
}, },
"ConnectionStrings": { "ConnectionStrings": {
//"WriteConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;", //"WriteConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;",
//"ReadOnlyConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;", //"ReadOnlyConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;"
"WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;", "WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;",
"ReadOnlyConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;" "ReadOnlyConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;"
}, },

View File

@@ -4,6 +4,15 @@ body {
padding-bottom: 0px; padding-bottom: 0px;
} }
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
color: white;
text-align: center;
}
.logoCacoa { .logoCacoa {
border-radius: 10px !important; border-radius: 10px !important;
} }
@@ -821,7 +830,7 @@ div.content {
.TablaImprimir table { .TablaImprimir table {
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
font-size: 9pt; font-size: 984pt;
} }
.TablaImprimir thead tr th { .TablaImprimir thead tr th {
@@ -886,3 +895,9 @@ div.content {
.espacioTablas { .espacioTablas {
margin: 20px; margin: 20px;
} }
.centrarChecksImprimir {
align-items: center;
justify-content: flex-end;
display: flex;
}

File diff suppressed because one or more lines are too long

View File

@@ -25,3 +25,20 @@ window.descargarExcel = function (fileName, base64Data) {
link.download = fileName; link.download = fileName;
link.click(); link.click();
}; };
window.descargarPdf = function (fileName, base64Data) {
const link = document.createElement('a');
link.href = 'data:application/pdf;base64,' + base64Data;
link.download = fileName;
link.click();
};
window.verRutaReferrer = function () {
try {
return window.parent.location.href;
} catch (e) {
return document.referrer;
}
};

View File

@@ -1,8 +0,0 @@
<assembly
xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<assemblyIdentity
name='142.0.7435.0'
version='142.0.7435.0'
type='win32'/>
<file name='chrome_elf.dll'/>
</assembly>

View File

@@ -1 +0,0 @@
krome

View File

@@ -1,6 +0,0 @@
{
"manifest_version": 2,
"name": "Iwa Key Distribution",
"version": "2025.7.24.0",
"is_preloaded": true
}

View File

@@ -1,8 +0,0 @@
{
"name": "MEI Preload",
"icons": {},
"version": "1.0.7.1652906823",
"manifest_version": 2,
"update_url": "https://clients2.google.com/service/update2/crx",
"description": "Contains preloaded data for Media Engagement"
}

View File

@@ -1,6 +0,0 @@
{
"manifest_version": 2,
"name": "Privacy Sandbox Attestations",
"version": "2025.7.18.0",
"pre_installed": true
}

View File

@@ -1,262 +0,0 @@
https://2k.comhttps://33across.comhttps://360yield.comhttps://3lift.comhttps://ad-score.com
https://ad.gthttps://adentifi.comhttps://adform.nethttps://adingo.jphttps://admatrix.jphttps://admixer.nethttps://adnami.iohttps://adnxs.comhttps://adsafeprotected.comhttps://adsrvr.orghttps://adthrive.comhttps://advividnetwork.comNhttps://aggregation-service-site-dot-clz200258-datateam-italy.ew.r.appspot.comhttps://anonymised.iohttps://aphub.aihttps://appier.nethttps://avads.nethttps://ayads.iohttps://bidswitch.nethttps://bidtheatre.nethttps://bing.comhttps://blendee.comhttps://bounceexchange.comhttps://bypass.jphttps://casalemedia.comhttps://cdn-net.comhttps://clickonometrics.plhttps://connected-stories.comhttps://crcldu.comhttps://creativecdn.comhttps://criteo.comhttps://ctnsnet.comhttps://daum.nethttps://display.iohttps://dotdashmeredith.comhttps://dotomi.comhttps://doubleclick.nethttps://dynalyst.jphttps://edkt.iohttps://ezoic.comhttps://fanbyte.comhttps://flashtalking.comhttps://fout.jphttps://fwmrm.nethttps://gama.globohttps://ghtinc.comhttps://gmossp-sp.jphttps://google-analytics.comhttps://gsspat.jphttps://gumgum.comhttps://html-load.comhttps://im-apps.nethttps://impact-ad.jphttps://indexww.comhttps://inmobi.comhttps://innovid.comhttps://jivox.comhttps://kakao.comhttps://kidoz.nethttps://ladsp.comhttps://lucead.comhttps://mail.ruhttps://media.nethttps://mediaintelligence.dehttps://mediamath.comhttps://mediavine.comhttps://microad.jphttps://naver.comhttps://nhnace.comhttps://nodals.iohttps://onetag-sys.comhttps://openx.nethttps://optable.cohttps://outbrain.comhttps://pixfuture.com+https://privacy-sandbox-demos-ad-server.dev'https://privacy-sandbox-demos-dsp-a.dev'https://privacy-sandbox-demos-dsp-b.dev'https://privacy-sandbox-demos-dsp-x.dev'https://privacy-sandbox-demos-dsp-y.dev%https://privacy-sandbox-demos-dsp.dev*https://privacy-sandbox-demos-services.dev'https://privacy-sandbox-demos-ssp-a.dev'https://privacy-sandbox-demos-ssp-b.dev'https://privacy-sandbox-demos-ssp-x.dev'https://privacy-sandbox-demos-ssp-y.dev%https://privacy-sandbox-demos-ssp.dev https://privacy-sandbox-test.com0https://privacy-sandcastle-dev-ad-server.web.app-https://privacy-sandcastle-dev-dsp-a1.web.app-https://privacy-sandcastle-dev-dsp-b1.web.app,https://privacy-sandcastle-dev-dsp-x.web.app,https://privacy-sandcastle-dev-dsp-y.web.app*https://privacy-sandcastle-dev-dsp.web.app/https://privacy-sandcastle-dev-services.web.app,https://privacy-sandcastle-dev-ssp-a.web.app,https://privacy-sandcastle-dev-ssp-b.web.app,https://privacy-sandcastle-dev-ssp-x.web.app,https://privacy-sandcastle-dev-ssp-y.web.app*https://privacy-sandcastle-dev-ssp.web.apphttps://pub.networkhttps://pubmatic.comhttps://pubtm.comhttps://quantserve.comhttps://relevant-digital.comhttps://sascdn.comhttps://shinystat.comhttps://shop.byhttps://singular.nethttps://sportradarserving.comhttps://t13.iohttps://teads.tvhttps://thepopradar.comhttps://theryn.iohttps://tncid.apphttps://toponad.comhttps://tpmark.nethttps://tribalfusion.comhttps://triptease.iohttps://uinterbox.comhttps://uol.com.br
https://vg.nohttps://vpadn.comhttps://washingtonpost.comhttps://yahoo.co.jphttps://yahoo.comhttps://yandex.ruhttps://yelp.com
https://stackadapt.com

https://yieldlab.net
%
https://googlesyndication.com

https://worldhistory.org

https://sitescout.com

https://docomo.ne.jp

https://tamedia.com.tw

https://connatix.com

https://quora.com

https://presage.io

https://onet.pl
%
https://creative-serving.com

https://dreammail.jp

https://bluems.com

https://storygize.net
#
https://amazon-adsystem.com

https://undertone.com

https://finn.no

https://ad-stir.com
#
https://youronlinechoices.eu

https://disqus.com
&
https://adtrafficquality.google

https://tya-dev.com
&
https://googleadservices.com

https://akpytela.cz
!
https://ebayadservices.com

https://linkedin.com

https://postrelease.com

https://shinobi.jp

https://tiktok.com

https://torneos.gg

https://primecaster.net

https://payment.goog

https://ebis.ne.jp

https://iobeya.com

https://ingereck.net
"
https://kompaspublishing.nl

https://r2b2.io

https://dailymail.co.uk

https://pinterest.com

https://verve.com

https://fandom.com

https://trkkn.com

https://azubiyo.de

https://jkforum.net

https://lwadm.com
%
https://audienceproject.com

https://facebook.com

https://trip.com
"
https://rubiconproject.com

https://apex-football.com

https://adswizz.com
#
https://adsmeasurement.com

https://a-mo.net

https://tangooserver.com

https://retargetly.com

https://elle.com

https://yieldmo.com

https://momento.dev
"
https://appsflyersdk.com

https://gokwik.co

https://snapchat.com
7
/https://shared-storage-demo-publisher-b.web.app

https://tailtarget.com

https://alketech.eu

https://aniview.com

https://demand.supply

https://doubleverify.com
!
https://weborama-tech.ru
%
https://wepowerconnections.com

https://beaconmax.com

https://nexxen.tech

https://permutive.app

https://admission.net
1
(https://paa-reporting-advertising.amazon
(
https://smadexprivacysandbox.com

https://eloan.co.jp

https://cpx.to

https://atirun.com

https://adscale.de

https://semafor.com
6
/https://ptb-msmt-static-5jyy5ulagq-uc.a.run.app

https://i-mobile.co.jp

https://atomex.net

https://sephora.com
#
https://explorefledge.com

https://weborama.fr

https://aqfer.com

https://taboola.com

https://elnacional.cat

https://coupang.com
<
4https://shared-storage-demo-content-producer.web.app
!
https://dailymotion.com

https://gunosy.com

https://xsoda.net

https://getyourguide.com

https://get3rdspace.com

https://boost-web.com
"
https://rocksolidrustic.com

https://grxchange.gr
"
https://d-edgeconnect.media

https://samplicio.us
!
https://audience360.com.au

https://getcapi.co

https://logly.co.jp

https://kargo.com

https://appconsent.io

https://open-bid.com

https://insyta.com

https://adroll.com

https://moshimo.com

https://convertunits.com

https://appsflyer.com

https://vidazoo.com

https://validate.audio

https://globo.com

https://seedtag.com
7
/https://shared-storage-demo-publisher-a.web.app

https://metro.co.uk

https://usemax.de

https://deepintent.com

https://cazamba.com

https://superfine.org
"
https://authorizedvault.com
"
https://media6degrees.com

https://socdm.com

https://euleriancdn.net

https://wp.pl

https://acxiom.com

Some files were not shown because too many files have changed in this diff Show More