PipefyAddCompanies/Core/Services/PlanilhaService.cs

68 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using OfficeOpenXml;
using PipefyAddCompanies.Core.Models;
namespace PipefyAddCompanies.Core.Services
{
public static class PlanilhaService
{
public static List<Empresa> LerPlanilha(string caminhoArquivo)
{
var empresas = new List<Empresa>();
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage(new FileInfo(caminhoArquivo)))
{
// Verifique se há ao menos uma planilha
if (package.Workbook.Worksheets.Count == 0)
{
throw new InvalidOperationException("O arquivo Excel não contém nenhuma planilha.");
}
var worksheet = package.Workbook.Worksheets[0]; // Acessa a primeira planilha
var totalRows = worksheet.Dimension?.Rows ?? 0;
for (int row = 3; row <= totalRows; row++) // Começando de 2 para pular o cabeçalho
{
var empresa = new Empresa
(
nome: worksheet.Cells[row, 2].Text,
prospectanteEmail: worksheet.Cells[row, 3].Text,
cidade: worksheet.Cells[row, 4].Text,
estado: worksheet.Cells[row, 5].Text,
ramoAtividade: worksheet.Cells[row, 6].Text,
comentarios: worksheet.Cells[row, 7].Text,
telefoneEmpresa: worksheet.Cells[row, 8].Text,
responsavelEnergia: worksheet.Cells[row, 9].Text,
areaResponsavel: worksheet.Cells[row, 10].Text,
telefoneResponsavel: worksheet.Cells[row, 11].Text,
celularResponsavel: worksheet.Cells[row, 12].Text,
emailResponsavel: worksheet.Cells[row, 13].Text,
email2: worksheet.Cells[row, 14].Text,
ambiente: worksheet.Cells[row, 15].Text,
distribuidora: worksheet.Cells[row, 16].Text
);
// Condicional para preencher o ValorFatura somente se Distribuidora estiver preenchida
var valorFatura = worksheet.Cells[row, 17].Text;
if (!string.IsNullOrEmpty(empresa.Distribuidora) && decimal.TryParse(valorFatura, out var fatura))
{
empresa.ValorFatura = fatura;
}
// Aplicar validação de nome para remover caracteres especiais
empresa.ValidarNome();
// Adicionar empresa à lista se as condições forem atendidas
empresas.Add(empresa);
}
}
return empresas.Where(x => !string.IsNullOrEmpty(x.Nome) && x.Nome != "SMART ENERGIA").ToList();
}
}
}