- Import Province

This commit is contained in:
2025-12-22 15:41:57 +01:00
parent 50c0562c3e
commit 8e4daf5f2e
4 changed files with 112 additions and 7 deletions

View File

@ -27,6 +27,8 @@
<RadzenUpload class="btn-5 d-none d-sm-inline-block" Change=@onUploadComuni ChooseText="Importa comuni da excel" /> <RadzenUpload class="btn-5 d-none d-sm-inline-block" Change=@onUploadComuni ChooseText="Importa comuni da excel" />
<RadzenUpload class="btn-5 d-none d-sm-inline-block" Change=@onUploadProvince ChooseText="Importa province da excel" />
<a href="/management/Clienti/Modifica" class="btn btn-primary btn-5 d-none d-sm-inline-block"> <a href="/management/Clienti/Modifica" class="btn btn-primary btn-5 d-none d-sm-inline-block">
Nuovo cliente Nuovo cliente
</a> </a>
@ -145,4 +147,25 @@
await _dialogService.Alert("Si è verificato un errore durante l'importazione del file.", "Errore"); await _dialogService.Alert("Si è verificato un errore durante l'importazione del file.", "Errore");
} }
} }
private async Task onUploadProvince(UploadChangeEventArgs args)
{
var file = args.Files.FirstOrDefault();
if (file == null ||
!file.Name.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase))
{
await _dialogService.Alert("Sono supportati solo file Excel .xlsx", "Errore");
return;
}
try
{
// await using var uploadStream = file.OpenReadStream(10_000_000);
await _dialogService.OpenAsync<Province_Import>("Importazione province", new Dictionary<string, object>() { { "args", args } });
}
catch (Exception ex)
{
var er = ex.Message;
await _dialogService.Alert("Si è verificato un errore durante l'importazione del file.", "Errore");
}
}
} }

View File

@ -40,11 +40,11 @@
var codiciAgente = rows.Select(r => new { CodiceAgente = r.Agente, Nome = r.DescrizioneAgente, Capoarea = r.CapoArea }).Distinct().ToList(); var codiciAgente = rows.Select(r => new { CodiceAgente = r.Agente, Nome = r.DescrizioneAgente, Capoarea = r.CapoArea }).Distinct().ToList();
var codiciCapoarea = rows.Select(r => new { CodiceCapoarea = r.CapoArea, Nome = r.DescrizioneCapoArea }).Distinct().ToList(); var codiciCapoarea = rows.Select(r => new { CodiceCapoarea = r.CapoArea, Nome = r.DescrizioneCapoArea }).Distinct().ToList();
foreach (var fileCapoarea in codiciCapoarea) foreach (var fileCapoarea in codiciCapoarea)
{ {
var capoarea = await _managerService.UtenteService.RicercaPer(x => x.CodiceAgente == fileCapoarea.CodiceCapoarea, solaLettura: false); var capoarea = await _managerService.UtenteService.RicercaPer(x => x.CodiceAgente == fileCapoarea.CodiceCapoarea, solaLettura: false);
capoarea = await mapCapoArea(capoarea ?? new Utente(), fileCapoarea.CodiceCapoarea, fileCapoarea.Nome); capoarea = await mapCapoArea(capoarea ?? new Utente(), fileCapoarea.CodiceCapoarea, fileCapoarea.Nome);
await _managerService.UtenteService.Salva(capoarea, idClaim); await _managerService.UtenteService.Salva(capoarea, idClaim);
} }
@ -59,11 +59,11 @@
agente = await mapAgente(agente ?? new Utente(), fileAgente.CodiceAgente, fileAgente.Nome, capoarea?.Id); agente = await mapAgente(agente ?? new Utente(), fileAgente.CodiceAgente, fileAgente.Nome, capoarea?.Id);
await _managerService.UtenteService.Salva(agente, idClaim); await _managerService.UtenteService.Salva(agente, idClaim);
} }
var ragioniSociali = rows.Select(r => new { Rid = r.CodCli, RagioneSociale = r.RagSocCliente }).Distinct().ToList(); var ragioniSociali = rows.Select(r => new { Rid = r.CodCli, RagioneSociale = r.RagSocCliente }).Distinct().ToList();
clientiTotali = ragioniSociali.Count; clientiTotali = ragioniSociali.Count;
counterLabel = " di " + clientiTotali; counterLabel = " di " + clientiTotali;
foreach (var cliente in ragioniSociali) foreach (var cliente in ragioniSociali)
{ {
var righeCliente = rows.Where(r => r.CodCli == cliente.Rid).ToList(); var righeCliente = rows.Where(r => r.CodCli == cliente.Rid).ToList();
@ -93,7 +93,7 @@
model.Rid = firstRow.CodCli; model.Rid = firstRow.CodCli;
model.RagioneSociale = firstRow.RagSocCliente; model.RagioneSociale = firstRow.RagSocCliente;
model.PartitaIva = firstRow.PartitaIva; model.PartitaIva = firstRow.PartitaIva;
// TODO: TipologiaCliente da inserire (pesco a db) model.TipologiaGestionale = firstRow.Tipologia;
model.Destinazioni ??= new(); model.Destinazioni ??= new();
foreach (var destinazioneRiga in rows) foreach (var destinazioneRiga in rows)
@ -109,8 +109,6 @@
private async Task<Destinazione> mapDestinazione(Destinazione model, Guid clienteId, ClienteExcelViewModel row, Guid? agenteId) private async Task<Destinazione> mapDestinazione(Destinazione model, Guid clienteId, ClienteExcelViewModel row, Guid? agenteId)
{ {
// TODO: Comune da inserire (pesco a db)
model.Rid = row.CodDes; model.Rid = row.CodDes;
model.RagioneSociale = row.RagSocDestinazione; model.RagioneSociale = row.RagSocDestinazione;
model.PartitaIva = row.PartitaIva; model.PartitaIva = row.PartitaIva;

View File

@ -0,0 +1,69 @@
@using ClosedXML.Excel
@using Microsoft.EntityFrameworkCore
@using StandManager.Model
@attribute [Authorize]
@rendermode InteractiveServer
@inject AuthenticationStateProvider auth
<RadzenStack Gap="1rem" class="rz-m-12">
<RadzenProgressBar Value="@counter" Max="@provinceTotali" Unit="@counterLabel" AriaLabel="" />
</RadzenStack>
@code {
[CascadingParameter] private Dialog _dialog { get; set; }
[Parameter] public UploadChangeEventArgs args { get; set; }
private int provinceTotali { get; set; } = 0;
private int counter { get; set; } = 0;
private string counterLabel { get; set; } = string.Empty;
protected override async Task OnInitializedAsync()
{
base.OnInitializedAsync();
var file = args.Files.FirstOrDefault();
await using var uploadStream = file.OpenReadStream(10_000_000);
var idClaim = await MembershipUtils.GetUserId(auth);
await using var ms = new MemoryStream();
await uploadStream.CopyToAsync(ms);
ms.Position = 0;
using var workbook = new XLWorkbook(ms);
var ws = workbook.Worksheet(1);
var usedRange = ws.RangeUsed();
var rows = new List<ProvinciaIstatExcelViewModel>(usedRange.RowCount() - 1);
foreach (var row in usedRange.RowsUsed().Skip(1))
rows.Add(new ProvinciaIstatExcelViewModel(row));
var province = rows.ToList();
provinceTotali = province.Count;
counterLabel = " di " + provinceTotali;
foreach (var provincia in province)
{
var provinciaDb = await _managerService.ProvinciaIstatService.RicercaPer(
x => x.Sigla == provincia.Sigla && x.Eliminato == false,
solaLettura: false) ?? new ProvinciaIstat();
provinciaDb = await mapProvincia(provinciaDb, provincia);
await _managerService.ProvinciaIstatService.Salva(provinciaDb, idClaim);
counter += 1;
StateHasChanged();
}
ms.Close();
_dialogService.Close();
}
private async Task<ProvinciaIstat> mapProvincia(ProvinciaIstat model, ProvinciaIstatExcelViewModel row)
{
model.Sigla = row.Sigla;
model.Provincia = row.Provincia;
return model;
}
}

View File

@ -0,0 +1,15 @@
using ClosedXML.Excel;
namespace StandManager.Model;
public class ProvinciaIstatExcelViewModel
{
public ProvinciaIstatExcelViewModel(IXLRangeRow row)
{
Sigla = row.Cell(1).GetString();
Provincia = row.Cell(2).GetString();
}
public string Sigla { get; set; }
public string Provincia { get; set; }
}