From 8e4daf5f2e93c44761b25c326019de7512ffed98 Mon Sep 17 00:00:00 2001 From: Davide Sandrelli Date: Mon, 22 Dec 2025 15:41:57 +0100 Subject: [PATCH] - Import Province --- .../Components/Pages/Management/Clienti.razor | 23 +++++++ .../Pages/Management/Clienti_Import.razor | 12 ++-- .../Pages/Management/Province_Import.razor | 69 +++++++++++++++++++ .../Model/ProvinciaIstatExcelViewModel.cs | 15 ++++ 4 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 StandManager/Components/Pages/Management/Province_Import.razor create mode 100644 StandManager/Model/ProvinciaIstatExcelViewModel.cs diff --git a/StandManager/Components/Pages/Management/Clienti.razor b/StandManager/Components/Pages/Management/Clienti.razor index 307b931..1060124 100644 --- a/StandManager/Components/Pages/Management/Clienti.razor +++ b/StandManager/Components/Pages/Management/Clienti.razor @@ -27,6 +27,8 @@ + + Nuovo cliente @@ -145,4 +147,25 @@ 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("Importazione province", new Dictionary() { { "args", args } }); + } + catch (Exception ex) + { + var er = ex.Message; + await _dialogService.Alert("Si è verificato un errore durante l'importazione del file.", "Errore"); + } + } } diff --git a/StandManager/Components/Pages/Management/Clienti_Import.razor b/StandManager/Components/Pages/Management/Clienti_Import.razor index f3af828..5a4e61e 100644 --- a/StandManager/Components/Pages/Management/Clienti_Import.razor +++ b/StandManager/Components/Pages/Management/Clienti_Import.razor @@ -40,11 +40,11 @@ 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(); - + foreach (var fileCapoarea in codiciCapoarea) { var capoarea = await _managerService.UtenteService.RicercaPer(x => x.CodiceAgente == fileCapoarea.CodiceCapoarea, solaLettura: false); - + capoarea = await mapCapoArea(capoarea ?? new Utente(), fileCapoarea.CodiceCapoarea, fileCapoarea.Nome); await _managerService.UtenteService.Salva(capoarea, idClaim); } @@ -59,11 +59,11 @@ agente = await mapAgente(agente ?? new Utente(), fileAgente.CodiceAgente, fileAgente.Nome, capoarea?.Id); await _managerService.UtenteService.Salva(agente, idClaim); } - + var ragioniSociali = rows.Select(r => new { Rid = r.CodCli, RagioneSociale = r.RagSocCliente }).Distinct().ToList(); clientiTotali = ragioniSociali.Count; counterLabel = " di " + clientiTotali; - + foreach (var cliente in ragioniSociali) { var righeCliente = rows.Where(r => r.CodCli == cliente.Rid).ToList(); @@ -93,7 +93,7 @@ model.Rid = firstRow.CodCli; model.RagioneSociale = firstRow.RagSocCliente; model.PartitaIva = firstRow.PartitaIva; - // TODO: TipologiaCliente da inserire (pesco a db) + model.TipologiaGestionale = firstRow.Tipologia; model.Destinazioni ??= new(); foreach (var destinazioneRiga in rows) @@ -109,8 +109,6 @@ private async Task mapDestinazione(Destinazione model, Guid clienteId, ClienteExcelViewModel row, Guid? agenteId) { - - // TODO: Comune da inserire (pesco a db) model.Rid = row.CodDes; model.RagioneSociale = row.RagSocDestinazione; model.PartitaIva = row.PartitaIva; diff --git a/StandManager/Components/Pages/Management/Province_Import.razor b/StandManager/Components/Pages/Management/Province_Import.razor new file mode 100644 index 0000000..01cc4d2 --- /dev/null +++ b/StandManager/Components/Pages/Management/Province_Import.razor @@ -0,0 +1,69 @@ +@using ClosedXML.Excel +@using Microsoft.EntityFrameworkCore +@using StandManager.Model +@attribute [Authorize] + +@rendermode InteractiveServer + +@inject AuthenticationStateProvider auth + + + + + +@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(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 mapProvincia(ProvinciaIstat model, ProvinciaIstatExcelViewModel row) + { + model.Sigla = row.Sigla; + model.Provincia = row.Provincia; + + return model; + } +} diff --git a/StandManager/Model/ProvinciaIstatExcelViewModel.cs b/StandManager/Model/ProvinciaIstatExcelViewModel.cs new file mode 100644 index 0000000..a9fc16b --- /dev/null +++ b/StandManager/Model/ProvinciaIstatExcelViewModel.cs @@ -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; } + +}