-
-
-
-
-
- Nome
-
-
-
-
-
- Cognome
-
-
-
-
-
- Email
-
-
-
-
- Numero di Telefono
-
-
+
+
+
+ Nome
+
-
-
- Provincia
-
-
-
-
- CAP
-
-
-
-
- Comune
-
-
-
+
+ Cognome
+
-
-
- Ragione Sociale
-
-
-
-
-
- Partita Iva
-
-
-
-
-
- Tipologia Cliente
-
-
-
-
- Ha già avuto esperienza con DAC?
-
-
+
+ Email
+
-
-
- Destinazione
-
-
-
-
-
- Note
-
-
-
-
-
- Ruolo
-
-
-
- Giorno presenza
-
-
-
-
-
-
- Agente
-
-
-
- Capoarea
-
-
-
-
-
-
-
-
-
-
-
+
+ Numero di Telefono
+
-
+
+
+
+ Provincia
+
+
+
+ CAP
+
+
+
+ Comune
+
+
+
+
+
+
+ Ragione Sociale
+
+
+
+
+ Partita Iva
+
+
+
+
+ Tipologia Cliente
+
+
+
+
+ Ha già avuto esperienza con DAC?
+
+
+
+
+
+
+ Destinazione
+
+
+
+
+ Note
+
+
+
+
+ Ruolo
+
+
+
+ Giorno presenza
+
+
+
+
+
+
+ Capoarea
+
+
+ Capoarea da confermare
+
+
+
+
+ Agente
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -177,29 +160,11 @@
[SupplyParameterFromForm]
private IscrizioneEventoViewModel iscrizione { get; set; } = new();
- private IEnumerable
destinazioniList { get; set; }
- private IEnumerable> tipologiaList { get; set; }
- private IEnumerable esperienzaList { get; set; }
- private IEnumerable> ruoloList { get; set; }
- private List provList { get; set; }
- private List comuniList { get; set; }
private IEnumerable agenti { get; set; } = new List();
private IEnumerable capiarea { get; set; } = new List();
- private DateTime inizioEvento { get; set; }
- private DateTime fineEvento { get; set; }
-
- private bool isAdmin { get; set; } = false;
- private Guid capoareaId { get; set; } = Guid.Empty;
-
- private string pageTitle => iscrizione?.Id == Guid.Empty ? "Nuova iscrizione" : "Modifica iscrizione";
-
- private DialogOptions editNewDialogOption { get; set; } = new()
- {
- Resizable = false,
- Draggable = false,
- Width = "900px"
- };
+ private string pageTitle => $"Iscrizione {iscrizione?.RagioneSociale}";
+ private bool capoareaDaConfermare { get; set; } = false;
///
/// Creo tutte le drop necessarie per il form
@@ -208,54 +173,58 @@
///
protected override async Task OnInitializedAsync()
{
- var eUtils = new EnumUtils();
idClaim = await MembershipUtils.GetUserId(auth);
- var idRuolo = await MembershipUtils.GetRoleId(auth);
- var ruolo = await _managerService.RuoloService.RicercaPer(
- x => x.Id == idRuolo && x.Permessi.Any(y => y.Feature.Type == FeatureType.Capoarea || y.Feature.Type == FeatureType.AdminGlobal),
- includi: x => x.Include(y => y.Permessi).ThenInclude(z => z.Feature));
-
- isAdmin = ruolo?.Permessi.Where(x => x.Eliminato == false)?.Any(x => x.Feature.Type == FeatureType.AdminGlobal) ?? false;
- var a = ruolo?.Permessi.Where(x => x.Eliminato == false);
-
- if (IscrizioneId.GetValueOrDefault() != Guid.Empty)
- iscrizione = await _managerService.IscrizioneEventoService.RicercaPer(x => x.Id == IscrizioneId, includi: x => x.Include(x => x.Comune).Include(x => x.Provincia).Include(y => y.Cliente).Include(y => y.Evento).Include(y => y.InvitoEvento));
- else
- iscrizione = new IscrizioneEventoViewModel();
-
- destinazioniList = (await _managerService.DestinazioneService.RicercaQueryable(filtro: x => x.ClienteId == iscrizione.ClienteId.GetValueOrDefault())).Select(x => (DestinazioneViewModel)x).ToList();
- esperienzaList = new List() { "Si", "No" };
- tipologiaList = (await _managerService.TipologiaClienteService.RicercaQueryable(x => x.Eliminato == false, ordinamento: x => x.OrderBy(y => y.Nome))).Select(x => new LookupViewModel(x.Id, x.Nome)).ToList();
- ruoloList = eUtils.GetEnumList();
- provList = (await _managerService.ProvinciaIstatService.RicercaQueryable(x => x.Eliminato == false, ordinamento: x => x.OrderBy(y => y.Provincia))).Select(x => (ProvinciaViewModel)x).ToList();
- comuniList = (await _managerService.ComuneIstatService.RicercaQueryable(x => x.ProvinciaIstatId == iscrizione.ProvinciaId.GetValueOrDefault())).Select(x => (ComuneIstatViewModel)x).ToList();
-
- capoareaId = iscrizione.CapoareaId.GetValueOrDefault();
+
+ iscrizione = await _managerService.IscrizioneEventoService.RicercaPer(
+ x => x.Id == IscrizioneId,
+ includi: x => x
+ .Include(x => x.Comune)
+ .Include(x => x.Provincia)
+ .Include(y => y.Cliente)
+ .Include(y => y.Evento)
+ .Include(y => y.InvitoEvento));
+
capiarea = (await _managerService.UtenteService.RicercaQueryable(
- x => x.Eliminato == false && x.IsCapoarea, ordinamento: x => x.OrderBy(y => y.Cognome).ThenBy(z => z.Nome))).Select(x => (UtenteViewModel)x).ToList();
+ x => x.Eliminato == false && x.IsCapoarea,
+ ordinamento: x => x.OrderBy(y => y.Cognome).ThenBy(z => z.Nome)))
+ .Select(x => (UtenteViewModel)x).ToList();
- if (capoareaId != Guid.Empty)
- agenti = (await _managerService.UtenteService.RicercaQueryable(
- x => x.Eliminato == false && (isAdmin || x.CapoareaId == idClaim) && !x.IsCapoarea && x.CapoareaId == iscrizione.CapoareaId,
- includi: x => x.Include(y => y.Capoarea), ordinamento: x => x.OrderBy(y => y.Cognome).ThenBy(z => z.Nome))).Select(x => (UtenteViewModel)x).ToList();
+ if (iscrizione.ProvinciaId.HasValue && iscrizione.CapoareaId.GetValueOrDefault() == Guid.Empty)
+ {
+ capoareaDaConfermare = true;
+ var dbProv = await _managerService.ProvinciaIstatService.RicercaPer(x => x.Id == iscrizione.ProvinciaId);
+ iscrizione.CapoareaId = dbProv.CapoareaId;
+ }
- inizioEvento = iscrizione.Evento?.DataDa ?? DateTime.Now.AddDays(-7);
- fineEvento = iscrizione.Evento?.DataA ?? DateTime.Now.AddDays(7);
+ if (iscrizione.CapoareaId.GetValueOrDefault() != Guid.Empty)
+ {
+ agenti = (await _managerService.UtenteService.RicercaQueryable(x => x.CapoareaId == iscrizione.CapoareaId,
+ ordinamento:x => x.OrderBy(y => y.Cognome).ThenBy(z => z.Nome)))
+ .Select(x => (UtenteViewModel)x).ToList();
+ }
}
- ///
- /// Salva il cliente: recupera o crea il modello, applica i dati dalla UI,
- /// collega l’agente, crea una destinazione di default se è un nuovo cliente
- /// e poi salva usando l’ID dell’utente loggato, tornando alla lista clienti.
- ///
private async Task onIscrizioneSave()
{
- var model = await _managerService.IscrizioneEventoService.RicercaPer(x => x.Id == iscrizione.Id, solaLettura: false) ?? new IscrizioneEvento();
+ try
+ {
+ if (iscrizione.CapoareaId.GetValueOrDefault() == Guid.Empty || iscrizione.AgenteId.GetValueOrDefault() == Guid.Empty)
+ throw new Exception("Selezionare un capoarea e un agente");
+
+ var model = await _managerService.IscrizioneEventoService.RicercaPer(x => x.Id == iscrizione.Id, solaLettura: false);
+ if (model == null)
+ throw new Exception("Si è verificato un errore");
+
+ model.AgenteId = iscrizione.AgenteId;
+ model.CapoareaId = iscrizione.CapoareaId;
- model = iscrizione.Map(model);
-
- await _managerService.IscrizioneEventoService.Salva(model, idClaim);
- _navManager.NavigateTo("/management/Iscrizioni");
+ await _managerService.IscrizioneEventoService.Salva(model, idClaim);
+ _navManager.NavigateTo("/management/Iscrizioni");
+ }
+ catch (Exception ex)
+ {
+ await _dialogService.Alert(ex.Message, "Errore");
+ }
}
///
@@ -272,41 +241,15 @@
private async Task OnCapoareaChange(object value)
{
var capoId = Guid.Empty;
+ capoareaDaConfermare = false;
if (Guid.TryParse(value.ToString(), out capoId))
{
- capoareaId = capoId;
iscrizione.AgenteId = null;
- agenti = iscrizione.CapoareaId == idClaim || isAdmin
- ? (await _managerService.UtenteService.RicercaQueryable(
- x => x.Eliminato == false && (isAdmin || x.CapoareaId == idClaim) && !x.IsCapoarea && x.CapoareaId == capoareaId,
- includi: x => x.Include(y => y.Capoarea),
- ordinamento: x => x.OrderBy(y => y.Cognome).ThenBy(z => z.Nome)))
- .Select(x => (UtenteViewModel)x).ToList()
- : [await _managerService.UtenteService.RicercaPer(x => x.Id == iscrizione.AgenteId)];
+ agenti = (await _managerService.UtenteService.RicercaQueryable(x => x.CapoareaId == capoId,
+ ordinamento:x => x.OrderBy(y => y.Cognome).ThenBy(z => z.Nome)))
+ .Select(x => (UtenteViewModel)x).ToList();
}
}
-
- ///
- /// Aggiorna la drop dei comuni in base alla provincia
- ///
- private async Task onProvinciaChanged(object args)
- {
- Guid parsed;
- Guid.TryParse(args.ToString(), out parsed);
- var prov = await _managerService.ProvinciaIstatService.RicercaPer(x => x.Id == parsed);
-
- if (prov == null)
- {
- await _dialogService.Alert("La provincia indicata non è presente", "Errore", new ConfirmOptions() { OkButtonText = "Ok" });
- return;
- }
-
- iscrizione.ProvinciaId = prov.Id;
- iscrizione.ComuneId = null;
-
- comuniList = (await _managerService.ComuneIstatService.RicercaQueryable(x => x.Provincia == prov.Sigla))
- .Select(x => (ComuneIstatViewModel)x).ToList();
- }
}
diff --git a/StandManager/Components/Pages/Management/Utenti_Edit.razor b/StandManager/Components/Pages/Management/Utenti_Edit.razor
index cb33e5f..ff52710 100644
--- a/StandManager/Components/Pages/Management/Utenti_Edit.razor
+++ b/StandManager/Components/Pages/Management/Utenti_Edit.razor
@@ -74,14 +74,6 @@
Password
-
- @if (utente.IsCapoarea)
- {
-
- Provincia Associata
-
-
- }
@@ -115,7 +107,6 @@
private UtenteViewModel? utente { get; set; } = new();
private List capoareaList { get; set; } = new();
private List ruoli { get; set; } = new();
- private List> province { get; set; } = new();
private string pageTitle => utente?.Id == Guid.Empty ? "Nuovo utente" : "Modifica utente";
@@ -135,8 +126,6 @@
ruoli = (await _managerService.RuoloService.RicercaQueryable(x => x.Eliminato == false))
.Select(x => (RuoloViewModel)x).ToList();
- province = (await _managerService.ProvinciaIstatService.RicercaQueryable(x => x.Eliminato == false && (!x.UtentiList.Any() || x.UtentiList.Any(x => x.Id == utente.Id)))).Select(x => new LookupViewModel(x.Id, x.Provincia)).ToList();
-
var ruoliCapoarea = await _managerService.RuoloService.RicercaQueryable(
x => x.Permessi.Any(y => y.Feature.Type == FeatureType.AdminGlobal || y.Feature.Type == FeatureType.Capoarea),
includi: x => x.Include(y => y.Permessi).ThenInclude(z => z.Feature));
diff --git a/StandManager/Components/_Imports.razor b/StandManager/Components/_Imports.razor
index 11fce72..8acf6e7 100644
--- a/StandManager/Components/_Imports.razor
+++ b/StandManager/Components/_Imports.razor
@@ -20,5 +20,6 @@
@inject IManagerService _managerService
@inject DialogService _dialogService
+@inject NotificationService _notificationService
@inject NavigationManager _navManager
@inject AuthenticationStateProvider _auth
\ No newline at end of file
diff --git a/StandManager/Model/ClienteViewModel.cs b/StandManager/Model/ClienteViewModel.cs
index 7ad61f7..e4f9a90 100644
--- a/StandManager/Model/ClienteViewModel.cs
+++ b/StandManager/Model/ClienteViewModel.cs
@@ -92,21 +92,4 @@ public class ClienteViewModel
return model;
}
-}
-
-public class TipologiaClienteViewModel
-{
- public Guid Id { get; set; }
- public string Nome { get; set; }
-
- public static implicit operator TipologiaClienteViewModel(TipologiaCliente model)
- {
- return model == null
- ? null
- : new TipologiaClienteViewModel()
- {
- Id = model.Id,
- Nome = model.Nome
- };
- }
-}
+}
\ No newline at end of file
diff --git a/StandManager/Model/IscrizioneEventoViewModel.cs b/StandManager/Model/IscrizioneEventoViewModel.cs
index 0e94f45..9803d56 100644
--- a/StandManager/Model/IscrizioneEventoViewModel.cs
+++ b/StandManager/Model/IscrizioneEventoViewModel.cs
@@ -12,6 +12,7 @@ public class IscrizioneEventoViewModel
public InvitoEvento InvitoEvento { get; set; }
public ClienteViewModel Cliente { get; set; }
public Guid? ClienteId { get; set; }
+ public DestinazioneViewModel Destinazione { get; set; }
public Guid? DestinazioneId { get; set; }
/*[Range(1, int.MaxValue, ErrorMessage = "Inserire un numero di partecipanti valido")]*/
public int Partecipanti { get; set; }
@@ -40,6 +41,8 @@ public class IscrizioneEventoViewModel
public string RagioneSociale { get; set; }
[Required(ErrorMessage = "Il campo è obbigatorio")]
public string EsperienzaConDAC { get; set; }
+
+ public TipologiaClienteViewModel TipologiaCliente { get; set; }
[Required(ErrorMessage = "La tipologia è obbigatoria")]
public Guid? TipologiaClienteId { get; set; }
public RuoloTipo Ruolo { get; set; }
@@ -48,9 +51,20 @@ public class IscrizioneEventoViewModel
public string? PartitaIva { get; set; }
[Required(ErrorMessage = "E' necessario indicare la data di partecipazione")]
public DateTime? GiornoPresenza { get; set; }
+ public UtenteViewModel Agente { get; set; }
public Guid? AgenteId { get; set; }
+ public UtenteViewModel Capoarea { get; set; }
public Guid? CapoareaId { get; set; }
+ public string ProvinciaInfo => $"{Provincia?.Provincia ?? "--Non indicato"}";
+ public string ComuneInfo => $"{Comune?.Comune ?? "--Non indicato"}";
+ public string TipologiaClienteInfo => $"{TipologiaCliente?.Nome ?? "--Non indicato"}";
+ public string DestinazioneInfo => $"{Destinazione?.RagioneSociale ?? "--Non indicato"}";
+ public string RuoloInfo => $"{new EnumUtils().GetDescription(Ruolo)}";
+ public string GiornoPresenzaInfo => $"{GiornoPresenza.GetValueOrDefault():dd/MM/yyyy}";
+ public string AgenteInfo => $"{Agente?.Info ?? "--Non indicato"}";
+ public string CapoareaInfo => $"{Capoarea?.Info ?? "--Non indicato"}";
+
public IscrizioneEvento Map(IscrizioneEvento model)
{
model.Note = Note;
@@ -105,6 +119,9 @@ public class IscrizioneEventoViewModel
GiornoPresenza = model.GiornoPresenza,
CapoareaId = model.CapoareaId,
AgenteId = model.AgenteId,
+ TipologiaCliente = model.TipologiaCliente,
+ Agente = model.Agente,
+ Capoarea = model.Capoarea
};
}
}
\ No newline at end of file
diff --git a/StandManager/Model/TipologiaClienteViewModel.cs b/StandManager/Model/TipologiaClienteViewModel.cs
new file mode 100644
index 0000000..2c927e5
--- /dev/null
+++ b/StandManager/Model/TipologiaClienteViewModel.cs
@@ -0,0 +1,20 @@
+using StandManager.Domain.Entita;
+
+namespace StandManager.Model;
+
+public class TipologiaClienteViewModel
+{
+ public Guid Id { get; set; }
+ public string Nome { get; set; }
+
+ public static implicit operator TipologiaClienteViewModel(TipologiaCliente model)
+ {
+ return model == null
+ ? null
+ : new TipologiaClienteViewModel()
+ {
+ Id = model.Id,
+ Nome = model.Nome
+ };
+ }
+}
\ No newline at end of file
diff --git a/StandManager/Model/UtenteViewModel.cs b/StandManager/Model/UtenteViewModel.cs
index 143fa75..390d878 100644
--- a/StandManager/Model/UtenteViewModel.cs
+++ b/StandManager/Model/UtenteViewModel.cs
@@ -19,7 +19,6 @@ public class UtenteViewModel
public Guid? RuoloId { get; set; }
public Guid? CapoareaId { get; set; }
public bool IsCapoarea { get; set; }
- public Guid? ProvinciaId { get; set; }
public string Info => $"{Nome} {Cognome}";
public static implicit operator UtenteViewModel(Utente? model)
@@ -33,8 +32,7 @@ public class UtenteViewModel
Cognome = model.Cognome,
RuoloId = model.Ruolo?.Id,
CapoareaId = model.Capoarea?.Id,
- IsCapoarea = model.IsCapoarea,
- ProvinciaId = model.ProvinciaIstatId
+ IsCapoarea = model.IsCapoarea
};
}
@@ -44,7 +42,6 @@ public class UtenteViewModel
model.Cognome = Cognome;
model.Email = Email;
model.IsCapoarea = IsCapoarea;
- model.ProvinciaIstatId = ProvinciaId;
return model;
}
diff --git a/Writerside.iml b/Writerside.iml
new file mode 100644
index 0000000..9db9994
--- /dev/null
+++ b/Writerside.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/script.sql b/script.sql
index 3634a88..5bdddf5 100644
--- a/script.sql
+++ b/script.sql
@@ -1,51 +1,55 @@
BEGIN TRANSACTION;
-CREATE TABLE [MailQueue] (
- [Id] uniqueidentifier NOT NULL,
- [Subject] nvarchar(max) NOT NULL,
- [Body] nvarchar(max) NOT NULL,
- [ToList] nvarchar(max) NOT NULL,
- [Args] nvarchar(max) NULL,
- [From] int NOT NULL,
- [Sent] bit NOT NULL,
- [Error] nvarchar(max) NULL,
- [DataCreazione] datetime2 NOT NULL,
- [DataModifica] datetime2 NULL,
- [Eliminato] bit NOT NULL,
- [IdUtenteCreazione] uniqueidentifier NULL,
- [IdUtenteModifica] uniqueidentifier NULL,
- CONSTRAINT [PK_MailQueue] PRIMARY KEY ([Id]),
- CONSTRAINT [FK_MailQueue_Utente_IdUtenteCreazione] FOREIGN KEY ([IdUtenteCreazione]) REFERENCES [Utente] ([Id]),
- CONSTRAINT [FK_MailQueue_Utente_IdUtenteModifica] FOREIGN KEY ([IdUtenteModifica]) REFERENCES [Utente] ([Id])
-);
-
-CREATE INDEX [IX_MailQueue_IdUtenteCreazione] ON [MailQueue] ([IdUtenteCreazione]);
-
-CREATE INDEX [IX_MailQueue_IdUtenteModifica] ON [MailQueue] ([IdUtenteModifica]);
+DROP TABLE [IscrizioneEventoPerMail];
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
-VALUES (N'20260109133732_MailQueue', N'9.0.11');
+VALUES (N'20260122105724_Rimozione_IscrizioneEventoPerMail', N'9.0.11');
-CREATE TABLE [IscrizioneEventoPerMail] (
- [Id] uniqueidentifier NOT NULL,
- [Mail] nvarchar(max) NOT NULL,
- [Processata] bit NOT NULL,
- [Inviata] bit NOT NULL,
- [DataCreazione] datetime2 NOT NULL,
- [DataModifica] datetime2 NULL,
- [Eliminato] bit NOT NULL,
- [IdUtenteCreazione] uniqueidentifier NULL,
- [IdUtenteModifica] uniqueidentifier NULL,
- CONSTRAINT [PK_IscrizioneEventoPerMail] PRIMARY KEY ([Id]),
- CONSTRAINT [FK_IscrizioneEventoPerMail_Utente_IdUtenteCreazione] FOREIGN KEY ([IdUtenteCreazione]) REFERENCES [Utente] ([Id]),
- CONSTRAINT [FK_IscrizioneEventoPerMail_Utente_IdUtenteModifica] FOREIGN KEY ([IdUtenteModifica]) REFERENCES [Utente] ([Id])
-);
+ALTER TABLE [Utente] ADD [ProvinciaIstatId] uniqueidentifier NULL;
-CREATE INDEX [IX_IscrizioneEventoPerMail_IdUtenteCreazione] ON [IscrizioneEventoPerMail] ([IdUtenteCreazione]);
+ALTER TABLE [IscrizioneEvento] ADD [AgenteId] uniqueidentifier NULL;
-CREATE INDEX [IX_IscrizioneEventoPerMail_IdUtenteModifica] ON [IscrizioneEventoPerMail] ([IdUtenteModifica]);
+ALTER TABLE [IscrizioneEvento] ADD [CapoareaId] uniqueidentifier NULL;
+
+CREATE INDEX [IX_Utente_ProvinciaIstatId] ON [Utente] ([ProvinciaIstatId]);
+
+CREATE INDEX [IX_IscrizioneEvento_AgenteId] ON [IscrizioneEvento] ([AgenteId]);
+
+CREATE INDEX [IX_IscrizioneEvento_CapoareaId] ON [IscrizioneEvento] ([CapoareaId]);
+
+ALTER TABLE [IscrizioneEvento] ADD CONSTRAINT [FK_IscrizioneEvento_Utente_AgenteId] FOREIGN KEY ([AgenteId]) REFERENCES [Utente] ([Id]);
+
+ALTER TABLE [IscrizioneEvento] ADD CONSTRAINT [FK_IscrizioneEvento_Utente_CapoareaId] FOREIGN KEY ([CapoareaId]) REFERENCES [Utente] ([Id]);
+
+ALTER TABLE [Utente] ADD CONSTRAINT [FK_Utente_Province_ProvinciaIstatId] FOREIGN KEY ([ProvinciaIstatId]) REFERENCES [Province] ([Id]);
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
-VALUES (N'20260120130758_IscrizioneEventoPerMail', N'9.0.11');
+VALUES (N'20260204162205_CapiareaAgentiInIscrizioneEvento', N'9.0.11');
+
+ALTER TABLE [Province] ADD [CapoareaDaVerificare] bit NOT NULL DEFAULT CAST(0 AS bit);
+
+INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
+VALUES (N'20260205095709_CapoareaDaVerificareInProvincia', N'9.0.11');
+
+ALTER TABLE [Utente] DROP CONSTRAINT [FK_Utente_Province_ProvinciaIstatId];
+
+DROP INDEX [IX_Utente_ProvinciaIstatId] ON [Utente];
+
+DECLARE @var sysname;
+SELECT @var = [d].[name]
+FROM [sys].[default_constraints] [d]
+INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id]
+WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Utente]') AND [c].[name] = N'ProvinciaIstatId');
+IF @var IS NOT NULL EXEC(N'ALTER TABLE [Utente] DROP CONSTRAINT [' + @var + '];');
+ALTER TABLE [Utente] DROP COLUMN [ProvinciaIstatId];
+
+ALTER TABLE [Province] ADD [CapoareaId] uniqueidentifier NULL;
+
+CREATE INDEX [IX_Province_CapoareaId] ON [Province] ([CapoareaId]);
+
+ALTER TABLE [Province] ADD CONSTRAINT [FK_Province_Utente_CapoareaId] FOREIGN KEY ([CapoareaId]) REFERENCES [Utente] ([Id]);
+
+INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
+VALUES (N'20260206070903_CapoareaSuProvIstat', N'9.0.11');
COMMIT;
GO