phronCare/Transversal/Services/XLSXImportBase.cs
Leandro Hernan Rojas 369190695b
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 26m25s
Add Massive Import Products
2025-07-14 16:16:05 -03:00

49 lines
1.8 KiB
C#

using OfficeOpenXml;
using Domain.Dtos.Stock;
using Transversal.Interfaces;
namespace Transversal.Services
{
public class XLSXImportBase : IXLSXImportBase
{
public List<ProductImportPreviewDto> ReadProductImport(byte[] fileBytes)
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
var result = new List<ProductImportPreviewDto>();
using var stream = new MemoryStream(fileBytes);
using var package = new ExcelPackage(stream);
var worksheet = package.Workbook.Worksheets.FirstOrDefault();
if (worksheet == null)
throw new Exception("El archivo no contiene hojas válidas.");
int row = 2;
while (true)
{
var factoryCode = worksheet.Cells[row, 1].Text?.Trim();
if (string.IsNullOrWhiteSpace(factoryCode)) break; // fin del archivo
var item = new ProductImportPreviewDto
{
FactoryCode = factoryCode,
Name = worksheet.Cells[row, 2].Text?.Trim(),
Description = worksheet.Cells[row, 3].Text?.Trim(),
ProductType = int.TryParse(worksheet.Cells[row, 4].Text, out var pt) ? pt : 0,
TraceabilityType = int.TryParse(worksheet.Cells[row, 5].Text, out var tt) ? tt : 0,
DivisionCode = worksheet.Cells[row, 6].Text?.Trim(),
UnitCode = worksheet.Cells[row, 7].Text?.Trim(),
PlusProcess = worksheet.Cells[row, 8].Text.Trim().ToLower() == "sí" || worksheet.Cells[row, 8].Text.Trim().ToLower() == "si",
ExternalCode = worksheet.Cells[row, 9].Text?.Trim(),
};
result.Add(item);
row++;
}
return result;
}
}
}