Add Pro fiducial monograph lookup
This commit is contained in:
1 parent
342935d99d
commit
7b642afe2d
6 files changed
+417
-3
No files matched your search
@@ -3,6 +3,7 @@
|
||||
@inject PreciseLocationService LocationService
|
||||
@inject CadastralCatalogService CatalogService
|
||||
@inject OfficialCadastreService OfficialCadastreService
|
||||
@inject FiducialPointService FiducialPointService
|
||||
@inject LocationSearchService LocationSearchService
|
||||
@inject NetworkLocationService NetworkLocationService
|
||||
@inject AzureMapsService AzureMapsService
|
||||
@@ -46,6 +47,7 @@
|
||||
<button @onclick='() => SelectTab("map")'>@L("menu.map")</button>
|
||||
<button @onclick='() => SelectTab("search")'>@L("menu.search")</button>
|
||||
<button @onclick='() => SelectTab("cadastre")'>@L("menu.cadastre")</button>
|
||||
<button @onclick='() => SelectTab("fiducials")'>Punti fiduciali</button>
|
||||
<button @onclick='() => SelectTab("data")'>@L("menu.data")</button>
|
||||
<button @onclick='() => SelectTab("projects")'>@L("menu.projects")</button>
|
||||
<button @onclick='() => SelectTab("save")'>@L("menu.export")</button>
|
||||
@@ -201,6 +203,84 @@
|
||||
<MenuHelp Topic="cadastre" />
|
||||
</section>
|
||||
}
|
||||
else if (ActiveTab == "fiducials")
|
||||
{
|
||||
<section class="panel-content">
|
||||
@if (!CanUse(AppFeatures.FiducialPoints))
|
||||
{
|
||||
<div class="service-note protected-service">
|
||||
<strong>Funzione LME Pro</strong>
|
||||
<p>La ricerca dei Punti Fiduciali e delle monografie ufficiali è disponibile con abbonamento Pro o chiave manuale valida.</p>
|
||||
<button class="primary-command" @onclick='() => SelectTab("settings")'>Apri abbonamento Pro</button>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<label>
|
||||
Provincia
|
||||
<select value="@SelectedFiducialProvinceCode" @onchange="OnFiducialProvinceChanged" disabled="@FiducialBusy">
|
||||
<option value="">Seleziona provincia</option>
|
||||
@foreach (var province in FiducialProvinces)
|
||||
{
|
||||
<option value="@province.Code">@province.Name</option>
|
||||
}
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
Comune catastale
|
||||
<select value="@SelectedFiducialMunicipalityCode" @onchange="OnFiducialMunicipalityChanged" disabled="@(FiducialMunicipalities.Count == 0 || FiducialBusy)">
|
||||
<option value="">Seleziona comune</option>
|
||||
@foreach (var municipality in FiducialMunicipalities)
|
||||
{
|
||||
<option value="@municipality.Code">@municipality.Name (@municipality.Code)</option>
|
||||
}
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
Foglio
|
||||
<select @bind="SelectedFiducialSheet" disabled="@(FiducialSheets.Count == 0 || FiducialBusy)">
|
||||
<option value="">Seleziona foglio</option>
|
||||
@foreach (var sheet in FiducialSheets)
|
||||
{
|
||||
<option value="@sheet.Code">@sheet.Name</option>
|
||||
}
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<button class="primary-command" @onclick="SearchFiducials" disabled="@(string.IsNullOrWhiteSpace(SelectedFiducialSheet) || FiducialBusy)">
|
||||
@(FiducialBusy ? "Ricerca..." : "Cerca Punti Fiduciali")
|
||||
</button>
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(FiducialMessage))
|
||||
{
|
||||
<div class="catalog-progress"><span>@FiducialMessage</span></div>
|
||||
}
|
||||
|
||||
@if (FiducialPoints.Count > 0)
|
||||
{
|
||||
<section class="panel-section">
|
||||
<h2>Punti trovati (@FiducialPoints.Count)</h2>
|
||||
<div class="fiducial-list">
|
||||
@foreach (var point in FiducialPoints)
|
||||
{
|
||||
<article class="fiducial-item">
|
||||
<strong>@point.Identifier</strong>
|
||||
<button class="secondary-command" @onclick="() => DownloadFiducialMonograph(point)">Scarica PDF monografia</button>
|
||||
</article>
|
||||
}
|
||||
</div>
|
||||
</section>
|
||||
}
|
||||
|
||||
<div class="service-note">
|
||||
<strong>Fonte ufficiale Agenzia delle Entrate</strong>
|
||||
<p>L'elenco e i PDF arrivano dal servizio pubblico delle monografie. Il layer sulla mappa sarà abilitato soltanto quando sono disponibili coordinate geografiche trasformate e verificabili.</p>
|
||||
</div>
|
||||
}
|
||||
</section>
|
||||
}
|
||||
else if (ActiveTab == "data")
|
||||
{
|
||||
<section class="panel-content">
|
||||
@@ -745,6 +825,11 @@
|
||||
private string MonthlyPrice { get; set; } = string.Empty;
|
||||
private string YearlyPrice { get; set; } = string.Empty;
|
||||
private bool BillingBusy { get; set; }
|
||||
private bool FiducialBusy { get; set; }
|
||||
private string SelectedFiducialProvinceCode { get; set; } = string.Empty;
|
||||
private string SelectedFiducialMunicipalityCode { get; set; } = string.Empty;
|
||||
private string SelectedFiducialSheet { get; set; } = string.Empty;
|
||||
private string FiducialMessage { get; set; } = string.Empty;
|
||||
private string Status { get; set; } = "online";
|
||||
private string SelectedBaseLayer { get; set; } = "satellite";
|
||||
private string GoogleMapsApiKey { get; set; } = string.Empty;
|
||||
@@ -821,6 +906,10 @@
|
||||
private IReadOnlyList<MunicipalityOption> Municipalities { get; set; } = [];
|
||||
private IReadOnlyList<string> Sheets { get; set; } = [];
|
||||
private IReadOnlyList<ParcelOption> Parcels { get; set; } = [];
|
||||
private IReadOnlyList<FiducialAreaOption> FiducialProvinces { get; set; } = [];
|
||||
private IReadOnlyList<FiducialAreaOption> FiducialMunicipalities { get; set; } = [];
|
||||
private IReadOnlyList<FiducialAreaOption> FiducialSheets { get; set; } = [];
|
||||
private IReadOnlyList<FiducialPointEntry> FiducialPoints { get; set; } = [];
|
||||
private IReadOnlyList<MapProjectSummary> Projects { get; set; } = [];
|
||||
private IReadOnlyList<MapProjectVersion> ProjectVersions { get; set; } = [];
|
||||
private MapProjectSummary? SelectedProject => Projects.FirstOrDefault(item => item.Id == SelectedProjectId);
|
||||
@@ -834,6 +923,7 @@
|
||||
private string PanelTitle => ActiveTab switch
|
||||
{
|
||||
"cadastre" => "Ricerca catastale",
|
||||
"fiducials" => "Punti fiduciali",
|
||||
"data" => "Dati e disegni",
|
||||
"projects" => "Archivio progetti",
|
||||
"save" => "Salvataggio ed esportazione",
|
||||
@@ -845,6 +935,7 @@
|
||||
private string PanelEyebrow => ActiveTab switch
|
||||
{
|
||||
"cadastre" => "Regione, Comune, Foglio, Particella",
|
||||
"fiducials" => "Monografie ufficiali AdE",
|
||||
"data" => "File GIS, misure e POI",
|
||||
"projects" => "Salva, apri e visualizza i tuoi lavori",
|
||||
"save" => "Esporta file GIS",
|
||||
@@ -1056,6 +1147,10 @@
|
||||
{
|
||||
await RefreshProjectsAsync();
|
||||
}
|
||||
if (tab == "fiducials" && CanUse(AppFeatures.FiducialPoints) && FiducialProvinces.Count == 0)
|
||||
{
|
||||
await LoadFiducialProvincesAsync();
|
||||
}
|
||||
await Task.Delay(30);
|
||||
await JS.InvokeVoidAsync("lmeMap.resize");
|
||||
if (LayerPanelOpen)
|
||||
@@ -1135,6 +1230,132 @@
|
||||
: await CatalogService.GetMunicipalitiesAsync(SelectedRegionFile);
|
||||
}
|
||||
|
||||
private async Task LoadFiducialProvincesAsync()
|
||||
{
|
||||
FiducialBusy = true;
|
||||
FiducialMessage = "Carico l'elenco delle province...";
|
||||
try
|
||||
{
|
||||
FiducialProvinces = await FiducialPointService.GetProvincesAsync();
|
||||
FiducialMessage = string.Empty;
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
FiducialMessage = $"Servizio monografie non disponibile: {error.GetBaseException().Message}";
|
||||
}
|
||||
finally
|
||||
{
|
||||
FiducialBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnFiducialProvinceChanged(ChangeEventArgs args)
|
||||
{
|
||||
SelectedFiducialProvinceCode = args.Value?.ToString() ?? string.Empty;
|
||||
SelectedFiducialMunicipalityCode = string.Empty;
|
||||
SelectedFiducialSheet = string.Empty;
|
||||
FiducialMunicipalities = [];
|
||||
FiducialSheets = [];
|
||||
FiducialPoints = [];
|
||||
if (string.IsNullOrWhiteSpace(SelectedFiducialProvinceCode))
|
||||
{
|
||||
FiducialMessage = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
FiducialBusy = true;
|
||||
FiducialMessage = "Carico i Comuni catastali...";
|
||||
try
|
||||
{
|
||||
FiducialMunicipalities = await FiducialPointService.GetMunicipalitiesAsync(SelectedFiducialProvinceCode);
|
||||
FiducialMessage = string.Empty;
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
FiducialMessage = $"Comuni non disponibili: {error.GetBaseException().Message}";
|
||||
}
|
||||
finally
|
||||
{
|
||||
FiducialBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnFiducialMunicipalityChanged(ChangeEventArgs args)
|
||||
{
|
||||
SelectedFiducialMunicipalityCode = args.Value?.ToString() ?? string.Empty;
|
||||
SelectedFiducialSheet = string.Empty;
|
||||
FiducialSheets = [];
|
||||
FiducialPoints = [];
|
||||
if (string.IsNullOrWhiteSpace(SelectedFiducialMunicipalityCode))
|
||||
{
|
||||
FiducialMessage = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
FiducialBusy = true;
|
||||
FiducialMessage = "Carico i fogli disponibili...";
|
||||
try
|
||||
{
|
||||
FiducialSheets = await FiducialPointService.GetSheetsAsync(
|
||||
SelectedFiducialProvinceCode,
|
||||
SelectedFiducialMunicipalityCode);
|
||||
FiducialMessage = string.Empty;
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
FiducialMessage = $"Fogli non disponibili: {error.GetBaseException().Message}";
|
||||
}
|
||||
finally
|
||||
{
|
||||
FiducialBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task SearchFiducials()
|
||||
{
|
||||
var province = FiducialProvinces.FirstOrDefault(item => item.Code == SelectedFiducialProvinceCode);
|
||||
var municipality = FiducialMunicipalities.FirstOrDefault(item => item.Code == SelectedFiducialMunicipalityCode);
|
||||
if (province is null || municipality is null || string.IsNullOrWhiteSpace(SelectedFiducialSheet))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FiducialBusy = true;
|
||||
FiducialPoints = [];
|
||||
FiducialMessage = "Interrogo il servizio ufficiale delle monografie...";
|
||||
try
|
||||
{
|
||||
FiducialPoints = await FiducialPointService.GetFiducialsAsync(
|
||||
province.Name,
|
||||
municipality.Name,
|
||||
municipality.Code,
|
||||
SelectedFiducialSheet);
|
||||
FiducialMessage = FiducialPoints.Count == 0
|
||||
? "Nessun Punto Fiduciale pubblicato per il foglio selezionato."
|
||||
: $"Trovati {FiducialPoints.Count} Punti Fiduciali.";
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
FiducialMessage = $"Ricerca PF non riuscita: {error.GetBaseException().Message}";
|
||||
}
|
||||
finally
|
||||
{
|
||||
FiducialBusy = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task DownloadFiducialMonograph(FiducialPointEntry point)
|
||||
{
|
||||
try
|
||||
{
|
||||
await Launcher.Default.OpenAsync(new Uri(point.MonographUrl));
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
FiducialMessage = $"Impossibile aprire la monografia: {error.GetBaseException().Message}";
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnMunicipalityChanged(ChangeEventArgs args)
|
||||
{
|
||||
SelectedMunicipalityCode = args.Value?.ToString() ?? string.Empty;
|
||||
|
||||
Reference in new issue
Block a user