From cd1066f20386ee31f686f35d104626b7c65792f2 Mon Sep 17 00:00:00 2001 From: Eduardo Lopes <155753879+eduardolopesx03@users.noreply.github.com> Date: Wed, 28 Jan 2026 09:32:05 -0300 Subject: [PATCH] Import multiple chip virgens tables --- Controllers/LinesController.cs | 88 ++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/Controllers/LinesController.cs b/Controllers/LinesController.cs index 028206f..464f1a9 100644 --- a/Controllers/LinesController.cs +++ b/Controllers/LinesController.cs @@ -1346,48 +1346,56 @@ namespace line_gestao_api.Controllers if (ws == null) return; - var headerRow = ws.RowsUsed().FirstOrDefault(r => r.CellsUsed().Any(c => NormalizeHeader(c.GetString()) == "ITEM")); - if (headerRow == null) return; - - var map = BuildHeaderMap(headerRow); - int colItem = GetCol(map, "ITEM"); - if (colItem == 0) return; - - var startRow = headerRow.RowNumber() + 1; - var lastRow = ws.LastRowUsed()?.RowNumber() ?? startRow; + var headers = ws.RowsUsed() + .Where(IsChipsVirgensHeader) + .OrderBy(r => r.RowNumber()) + .ToList(); + if (headers.Count == 0) return; await _db.ChipVirgemLines.ExecuteDeleteAsync(); var buffer = new List(500); + var lastRow = ws.LastRowUsed()?.RowNumber() ?? 1; - for (int r = startRow; r <= lastRow; r++) + for (int i = 0; i < headers.Count; i++) { - var itemStr = GetCellString(ws, r, colItem); - if (string.IsNullOrWhiteSpace(itemStr)) break; + var headerRow = headers[i]; + var map = BuildHeaderMap(headerRow); + int colItem = GetCol(map, "ITEM"); + if (colItem == 0) continue; - var numeroChip = NullIfEmptyDigits(GetCellByHeaderAny(ws, r, map, - "Nº DO CHIP", "N° DO CHIP", "NUMERO DO CHIP", "N DO CHIP", "NUM. DO CHIP")); - var observacoes = GetCellByHeaderAny(ws, r, map, "OBSERVAÇÕES", "OBSERVACOES", "OBS"); + var startRow = headerRow.RowNumber() + 1; + var endRow = i + 1 < headers.Count ? headers[i + 1].RowNumber() - 1 : lastRow; - var now = DateTime.UtcNow; - - var e = new ChipVirgemLine + for (int r = startRow; r <= endRow; r++) { - Id = Guid.NewGuid(), - Item = TryInt(itemStr), - NumeroDoChip = numeroChip, - Observacoes = string.IsNullOrWhiteSpace(observacoes) ? null : observacoes.Trim(), - CreatedAt = now, - UpdatedAt = now - }; + var itemStr = GetCellString(ws, r, colItem); + if (string.IsNullOrWhiteSpace(itemStr)) continue; - buffer.Add(e); + var numeroChip = NullIfEmptyDigits(GetCellByHeaderAny(ws, r, map, + "Nº DO CHIP", "N° DO CHIP", "NUMERO DO CHIP", "N DO CHIP", "NUM. DO CHIP")); + var observacoes = GetCellByHeaderAny(ws, r, map, "OBSERVAÇÕES", "OBSERVACOES", "OBS"); - if (buffer.Count >= 500) - { - await _db.ChipVirgemLines.AddRangeAsync(buffer); - await _db.SaveChangesAsync(); - buffer.Clear(); + var now = DateTime.UtcNow; + + var e = new ChipVirgemLine + { + Id = Guid.NewGuid(), + Item = TryInt(itemStr), + NumeroDoChip = numeroChip, + Observacoes = string.IsNullOrWhiteSpace(observacoes) ? null : observacoes.Trim(), + CreatedAt = now, + UpdatedAt = now + }; + + buffer.Add(e); + + if (buffer.Count >= 500) + { + await _db.ChipVirgemLines.AddRangeAsync(buffer); + await _db.SaveChangesAsync(); + buffer.Clear(); + } } } @@ -1590,6 +1598,24 @@ namespace line_gestao_api.Controllers return false; } + private static bool IsChipsVirgensHeader(IXLRow row) + { + var hasItem = false; + var hasNumeroChip = false; + + foreach (var cell in row.CellsUsed()) + { + var k = NormalizeHeader(cell.GetString()); + if (k == "ITEM") hasItem = true; + if (k == "NODOCHIP" || k == "NUMERODOCHIP" || k == "NDOCHIP" || k == "NUMDOCHIP") + { + hasNumeroChip = true; + } + } + + return hasItem && hasNumeroChip; + } + // ========================================================== // HELPERS (SEUS) // ==========================================================