diff --git a/Controllers/LinesController.cs b/Controllers/LinesController.cs index ce0d9bf..af982ec 100644 --- a/Controllers/LinesController.cs +++ b/Controllers/LinesController.cs @@ -646,6 +646,11 @@ namespace line_gestao_api.Controllers // ========================= await ImportControleRecebidosFromWorkbook(wb); + // ========================= + // ✅ IMPORTA RESUMO + // ========================= + await ImportResumoFromWorkbook(wb); + await tx.CommitAsync(); return Ok(new ImportResultDto { Imported = imported }); } @@ -1474,6 +1479,398 @@ namespace line_gestao_api.Controllers } } + // ========================================================== + // ✅ IMPORTAÇÃO DA ABA RESUMO + // ========================================================== + private async Task ImportResumoFromWorkbook(XLWorkbook wb) + { + var ws = wb.Worksheets.FirstOrDefault(w => NormalizeHeader(w.Name) == NormalizeHeader("RESUMO")); + if (ws == null) return; + + await _db.ResumoMacrophonyPlans.ExecuteDeleteAsync(); + await _db.ResumoMacrophonyTotals.ExecuteDeleteAsync(); + await _db.ResumoVivoLineResumos.ExecuteDeleteAsync(); + await _db.ResumoVivoLineTotals.ExecuteDeleteAsync(); + await _db.ResumoClienteEspeciais.ExecuteDeleteAsync(); + await _db.ResumoPlanoContratoResumos.ExecuteDeleteAsync(); + await _db.ResumoPlanoContratoTotals.ExecuteDeleteAsync(); + await _db.ResumoLineTotais.ExecuteDeleteAsync(); + await _db.ResumoReservaLines.ExecuteDeleteAsync(); + await _db.ResumoReservaTotals.ExecuteDeleteAsync(); + + var now = DateTime.UtcNow; + + await ImportResumoTabela1(ws, now); + await ImportResumoTabela2(ws, now); + await ImportResumoTabela3(ws, now); + await ImportResumoTabela4(ws, now); + await ImportResumoTabela5(ws, now); + await ImportResumoTabela6(ws, now); + } + + private async Task ImportResumoTabela1(IXLWorksheet ws, DateTime now) + { + const int headerRow = 5; + const int totalRow = 72; + var lastRow = Math.Min(totalRow - 1, ws.LastRowUsed()?.RowNumber() ?? totalRow - 1); + + var map = BuildHeaderMap(ws.Row(headerRow)); + var colPlano = GetCol(map, "PLANO CONTRATO"); + var colGb = GetCol(map, "GB"); + var colValorIndividual = GetColAny(map, "VALOR INDIVIDUAL C/ SVAs", "VALOR INDIVIDUAL C/ SVAS", "VALOR INDIVIDUAL"); + var colFranquiaGb = GetColAny(map, "FRANQUIA GB", "FRAQUIA GB"); + var colTotalLinhas = GetColAny(map, "TOTAL DE LINHAS", "TOTAL LINHAS"); + var colValorTotal = GetCol(map, "VALOR TOTAL"); + + var buffer = new List(200); + + for (int r = headerRow + 1; r <= lastRow; r++) + { + var plano = GetCellString(ws, r, colPlano); + var gb = GetCellString(ws, r, colGb); + var valorInd = GetCellString(ws, r, colValorIndividual); + var franquia = GetCellString(ws, r, colFranquiaGb); + var totalLinhas = GetCellString(ws, r, colTotalLinhas); + var valorTotal = GetCellString(ws, r, colValorTotal); + + if (string.IsNullOrWhiteSpace(plano) + && string.IsNullOrWhiteSpace(gb) + && string.IsNullOrWhiteSpace(valorInd) + && string.IsNullOrWhiteSpace(franquia) + && string.IsNullOrWhiteSpace(totalLinhas) + && string.IsNullOrWhiteSpace(valorTotal)) + { + continue; + } + + var vivoTravelCell = ws.Cell(r, 8).GetString(); + var vivoTravel = !string.IsNullOrWhiteSpace(vivoTravelCell) + && vivoTravelCell.Contains("VIVO TRAVEL", StringComparison.OrdinalIgnoreCase); + + buffer.Add(new ResumoMacrophonyPlan + { + PlanoContrato = string.IsNullOrWhiteSpace(plano) ? null : plano.Trim(), + Gb = TryDecimal(gb), + ValorIndividualComSvas = TryDecimal(valorInd), + FranquiaGb = TryDecimal(franquia), + TotalLinhas = TryNullableInt(totalLinhas), + ValorTotal = TryDecimal(valorTotal), + VivoTravel = vivoTravel, + CreatedAt = now, + UpdatedAt = now + }); + } + + if (buffer.Count > 0) + { + await _db.ResumoMacrophonyPlans.AddRangeAsync(buffer); + await _db.SaveChangesAsync(); + } + + var total = new ResumoMacrophonyTotal + { + FranquiaGbTotal = TryDecimal(GetCellString(ws, totalRow, colFranquiaGb)), + TotalLinhasTotal = TryNullableInt(GetCellString(ws, totalRow, colTotalLinhas)), + ValorTotal = TryDecimal(GetCellString(ws, totalRow, colValorTotal)), + CreatedAt = now, + UpdatedAt = now + }; + + await _db.ResumoMacrophonyTotals.AddAsync(total); + await _db.SaveChangesAsync(); + } + + private async Task ImportResumoTabela2(IXLWorksheet ws, DateTime now) + { + const int headerRow = 5; + const int totalRow = 219; + var lastRow = Math.Min(totalRow - 1, ws.LastRowUsed()?.RowNumber() ?? totalRow - 1); + + var map = BuildHeaderMap(ws.Row(headerRow)); + var colSkil = GetCol(map, "SKIL"); + var colCliente = GetCol(map, "CLIENTE"); + var colQtdLinhas = GetColAny(map, "QTD DE LINHAS", "QTD. DE LINHAS", "QTD LINHAS"); + var colFranquiaTotal = GetColAny(map, "FRANQUIA TOTAL", "FRAQUIA TOTAL"); + var colValorContratoVivo = GetColAny(map, "VALOR CONTRATO VIVO", "VALOR DO CONTRATO VIVO"); + var colFranquiaLine = GetColAny(map, "FRANQUIA LINE", "FRAQUIA LINE"); + var colValorContratoLine = GetColAny(map, "VALOR CONTRATO LINE", "VALOR DO CONTRATO LINE"); + var colLucro = GetCol(map, "LUCRO"); + + var buffer = new List(400); + + for (int r = headerRow + 1; r <= lastRow; r++) + { + var skil = GetCellString(ws, r, colSkil); + var cliente = GetCellString(ws, r, colCliente); + var qtdLinhas = GetCellString(ws, r, colQtdLinhas); + var franquiaTotal = GetCellString(ws, r, colFranquiaTotal); + var valorContratoVivo = GetCellString(ws, r, colValorContratoVivo); + var franquiaLine = GetCellString(ws, r, colFranquiaLine); + var valorContratoLine = GetCellString(ws, r, colValorContratoLine); + var lucro = GetCellString(ws, r, colLucro); + + if (string.IsNullOrWhiteSpace(skil) + && string.IsNullOrWhiteSpace(cliente) + && string.IsNullOrWhiteSpace(qtdLinhas) + && string.IsNullOrWhiteSpace(franquiaTotal) + && string.IsNullOrWhiteSpace(valorContratoVivo) + && string.IsNullOrWhiteSpace(franquiaLine) + && string.IsNullOrWhiteSpace(valorContratoLine) + && string.IsNullOrWhiteSpace(lucro)) + { + continue; + } + + buffer.Add(new ResumoVivoLineResumo + { + Skil = string.IsNullOrWhiteSpace(skil) ? null : skil.Trim(), + Cliente = string.IsNullOrWhiteSpace(cliente) ? null : cliente.Trim(), + QtdLinhas = TryNullableInt(qtdLinhas), + FranquiaTotal = TryDecimal(franquiaTotal), + ValorContratoVivo = TryDecimal(valorContratoVivo), + FranquiaLine = TryDecimal(franquiaLine), + ValorContratoLine = TryDecimal(valorContratoLine), + Lucro = TryDecimal(lucro), + CreatedAt = now, + UpdatedAt = now + }); + } + + if (buffer.Count > 0) + { + await _db.ResumoVivoLineResumos.AddRangeAsync(buffer); + await _db.SaveChangesAsync(); + } + + var total = new ResumoVivoLineTotal + { + QtdLinhasTotal = TryNullableInt(GetCellString(ws, totalRow, colQtdLinhas)), + FranquiaTotal = TryDecimal(GetCellString(ws, totalRow, colFranquiaTotal)), + ValorContratoVivo = TryDecimal(GetCellString(ws, totalRow, colValorContratoVivo)), + FranquiaLine = TryDecimal(GetCellString(ws, totalRow, colFranquiaLine)), + ValorContratoLine = TryDecimal(GetCellString(ws, totalRow, colValorContratoLine)), + Lucro = TryDecimal(GetCellString(ws, totalRow, colLucro)), + CreatedAt = now, + UpdatedAt = now + }; + + await _db.ResumoVivoLineTotals.AddAsync(total); + await _db.SaveChangesAsync(); + } + + private async Task ImportResumoTabela3(IXLWorksheet ws, DateTime now) + { + const int headerStartRow = 223; + const int headerEndRow = 225; + const int valuesRow = 227; + + var headerColumns = new Dictionary(); + for (int row = headerStartRow; row <= headerEndRow; row++) + { + var rowData = ws.Row(row); + var lastCol = rowData.LastCellUsed()?.Address.ColumnNumber ?? 1; + for (int col = 1; col <= lastCol; col++) + { + var name = rowData.Cell(col).GetString(); + if (string.IsNullOrWhiteSpace(name)) continue; + if (!headerColumns.ContainsKey(col)) + { + headerColumns[col] = name.Trim(); + } + } + } + + if (headerColumns.Count == 0) + { + return; + } + + var buffer = new List(headerColumns.Count); + foreach (var entry in headerColumns) + { + var valueStr = ws.Cell(valuesRow, entry.Key).GetString(); + buffer.Add(new ResumoClienteEspecial + { + Nome = entry.Value, + Valor = TryDecimal(valueStr), + CreatedAt = now, + UpdatedAt = now + }); + } + + await _db.ResumoClienteEspeciais.AddRangeAsync(buffer); + await _db.SaveChangesAsync(); + } + + private async Task ImportResumoTabela4(IXLWorksheet ws, DateTime now) + { + const int headerRow = 74; + const int totalRow = 81; + var lastRow = Math.Min(totalRow - 1, ws.LastRowUsed()?.RowNumber() ?? totalRow - 1); + + var map = BuildHeaderMap(ws.Row(headerRow)); + var colPlano = GetCol(map, "PLANO CONTRATO"); + var colGb = GetCol(map, "GB"); + var colValorIndividual = GetColAny(map, "VALOR INDIVIDUAL C/ SVAs", "VALOR INDIVIDUAL C/ SVAS", "VALOR INDIVIDUAL"); + var colFranquiaGb = GetColAny(map, "FRANQUIA GB", "FRAQUIA GB"); + var colTotalLinhas = GetColAny(map, "TOTAL DE LINHAS", "TOTAL LINHAS"); + var colValorTotal = GetCol(map, "VALOR TOTAL"); + + var buffer = new List(200); + + for (int r = headerRow + 1; r <= lastRow; r++) + { + var plano = GetCellString(ws, r, colPlano); + var gb = GetCellString(ws, r, colGb); + var valorInd = GetCellString(ws, r, colValorIndividual); + var franquia = GetCellString(ws, r, colFranquiaGb); + var totalLinhas = GetCellString(ws, r, colTotalLinhas); + var valorTotal = GetCellString(ws, r, colValorTotal); + + if (string.IsNullOrWhiteSpace(plano) + && string.IsNullOrWhiteSpace(gb) + && string.IsNullOrWhiteSpace(valorInd) + && string.IsNullOrWhiteSpace(franquia) + && string.IsNullOrWhiteSpace(totalLinhas) + && string.IsNullOrWhiteSpace(valorTotal)) + { + continue; + } + + buffer.Add(new ResumoPlanoContratoResumo + { + PlanoContrato = string.IsNullOrWhiteSpace(plano) ? null : plano.Trim(), + Gb = TryDecimal(gb), + ValorIndividualComSvas = TryDecimal(valorInd), + FranquiaGb = TryDecimal(franquia), + TotalLinhas = TryNullableInt(totalLinhas), + ValorTotal = TryDecimal(valorTotal), + CreatedAt = now, + UpdatedAt = now + }); + } + + if (buffer.Count > 0) + { + await _db.ResumoPlanoContratoResumos.AddRangeAsync(buffer); + await _db.SaveChangesAsync(); + } + + var total = new ResumoPlanoContratoTotal + { + ValorTotal = TryDecimal(ws.Cell(totalRow, 7).GetString()), + CreatedAt = now, + UpdatedAt = now + }; + + await _db.ResumoPlanoContratoTotals.AddAsync(total); + await _db.SaveChangesAsync(); + } + + private async Task ImportResumoTabela5(IXLWorksheet ws, DateTime now) + { + const int headerRow = 83; + var map = BuildHeaderMap(ws.Row(headerRow)); + var colValorTotalLine = GetColAny(map, "VALOR TOTAL LINE", "VALOR TOTAL LINE R$", "VALOR TOTAL LINE R$"); + var colLucroTotalLine = GetColAny(map, "LUCRO TOTAL LINE", "LUCRO TOTAL LINE R$", "LUCRO TOTAL LINE R$"); + var colQtdLinhas = GetColAny(map, "QTD. LINHAS", "QTD LINHAS", "QTD. DE LINHAS"); + + var buffer = new List(3); + for (int r = headerRow + 1; r <= headerRow + 3; r++) + { + var tipo = ws.Cell(r, 2).GetString(); + if (string.IsNullOrWhiteSpace(tipo)) + { + continue; + } + + buffer.Add(new ResumoLineTotais + { + Tipo = tipo.Trim(), + ValorTotalLine = TryDecimal(GetCellString(ws, r, colValorTotalLine)), + LucroTotalLine = TryDecimal(GetCellString(ws, r, colLucroTotalLine)), + QtdLinhas = TryNullableInt(GetCellString(ws, r, colQtdLinhas)), + CreatedAt = now, + UpdatedAt = now + }); + } + + if (buffer.Count > 0) + { + await _db.ResumoLineTotais.AddRangeAsync(buffer); + await _db.SaveChangesAsync(); + } + } + + private async Task ImportResumoTabela6(IXLWorksheet ws, DateTime now) + { + const int headerRow = 91; + const int totalRow = 139; + var lastRow = Math.Min(totalRow - 1, ws.LastRowUsed()?.RowNumber() ?? totalRow - 1); + + var map = BuildHeaderMap(ws.Row(headerRow)); + var colDdd = GetCol(map, "DDD"); + var colFranquiaGb = GetColAny(map, "FRANQUIA GB", "FRAQUIA GB"); + var colQtdLinhas = GetColAny(map, "QTD. DE LINHAS", "QTD DE LINHAS", "QTD. LINHAS"); + var colTotal = GetCol(map, "TOTAL"); + + var buffer = new List(200); + decimal? lastTotal = null; + + for (int r = headerRow + 1; r <= lastRow; r++) + { + var ddd = GetCellString(ws, r, colDdd); + var franquia = GetCellString(ws, r, colFranquiaGb); + var qtdLinhas = GetCellString(ws, r, colQtdLinhas); + var total = GetCellString(ws, r, colTotal); + + if (string.IsNullOrWhiteSpace(ddd) + && string.IsNullOrWhiteSpace(franquia) + && string.IsNullOrWhiteSpace(qtdLinhas) + && string.IsNullOrWhiteSpace(total)) + { + continue; + } + + var totalValue = TryDecimal(total); + if (!totalValue.HasValue && lastTotal.HasValue) + { + totalValue = lastTotal; + } + else if (totalValue.HasValue) + { + lastTotal = totalValue; + } + + buffer.Add(new ResumoReservaLine + { + Ddd = string.IsNullOrWhiteSpace(ddd) ? null : ddd.Trim(), + FranquiaGb = TryDecimal(franquia), + QtdLinhas = TryNullableInt(qtdLinhas), + Total = totalValue, + CreatedAt = now, + UpdatedAt = now + }); + } + + if (buffer.Count > 0) + { + await _db.ResumoReservaLines.AddRangeAsync(buffer); + await _db.SaveChangesAsync(); + } + + var totalEntity = new ResumoReservaTotal + { + QtdLinhasTotal = TryNullableInt(GetCellString(ws, totalRow, colQtdLinhas)), + Total = TryDecimal(GetCellString(ws, totalRow, colTotal)), + CreatedAt = now, + UpdatedAt = now + }; + + await _db.ResumoReservaTotals.AddAsync(totalEntity); + await _db.SaveChangesAsync(); + } + private async Task ImportControleRecebidosSheet(IXLWorksheet ws, int year) { var buffer = new List(500); diff --git a/Controllers/ResumoController.cs b/Controllers/ResumoController.cs new file mode 100644 index 0000000..51ef6d9 --- /dev/null +++ b/Controllers/ResumoController.cs @@ -0,0 +1,129 @@ +using line_gestao_api.Data; +using line_gestao_api.Dtos; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace line_gestao_api.Controllers; + +[ApiController] +[Route("api/resumo")] +[Authorize] +public class ResumoController : ControllerBase +{ + private readonly AppDbContext _db; + + public ResumoController(AppDbContext db) + { + _db = db; + } + + [HttpGet] + public async Task> GetResumo() + { + var response = new ResumoResponseDto + { + MacrophonyPlans = await _db.ResumoMacrophonyPlans.AsNoTracking() + .OrderBy(x => x.PlanoContrato) + .Select(x => new ResumoMacrophonyPlanDto + { + PlanoContrato = x.PlanoContrato, + Gb = x.Gb, + ValorIndividualComSvas = x.ValorIndividualComSvas, + FranquiaGb = x.FranquiaGb, + TotalLinhas = x.TotalLinhas, + ValorTotal = x.ValorTotal, + VivoTravel = x.VivoTravel + }) + .ToListAsync(), + MacrophonyTotals = await _db.ResumoMacrophonyTotals.AsNoTracking() + .Select(x => new ResumoMacrophonyTotalDto + { + FranquiaGbTotal = x.FranquiaGbTotal, + TotalLinhasTotal = x.TotalLinhasTotal, + ValorTotal = x.ValorTotal + }) + .FirstOrDefaultAsync(), + VivoLineResumos = await _db.ResumoVivoLineResumos.AsNoTracking() + .OrderBy(x => x.Cliente) + .Select(x => new ResumoVivoLineResumoDto + { + Skil = x.Skil, + Cliente = x.Cliente, + QtdLinhas = x.QtdLinhas, + FranquiaTotal = x.FranquiaTotal, + ValorContratoVivo = x.ValorContratoVivo, + FranquiaLine = x.FranquiaLine, + ValorContratoLine = x.ValorContratoLine, + Lucro = x.Lucro + }) + .ToListAsync(), + VivoLineTotals = await _db.ResumoVivoLineTotals.AsNoTracking() + .Select(x => new ResumoVivoLineTotalDto + { + QtdLinhasTotal = x.QtdLinhasTotal, + FranquiaTotal = x.FranquiaTotal, + ValorContratoVivo = x.ValorContratoVivo, + FranquiaLine = x.FranquiaLine, + ValorContratoLine = x.ValorContratoLine, + Lucro = x.Lucro + }) + .FirstOrDefaultAsync(), + ClienteEspeciais = await _db.ResumoClienteEspeciais.AsNoTracking() + .OrderBy(x => x.Nome) + .Select(x => new ResumoClienteEspecialDto + { + Nome = x.Nome, + Valor = x.Valor + }) + .ToListAsync(), + PlanoContratoResumos = await _db.ResumoPlanoContratoResumos.AsNoTracking() + .OrderBy(x => x.PlanoContrato) + .Select(x => new ResumoPlanoContratoResumoDto + { + PlanoContrato = x.PlanoContrato, + Gb = x.Gb, + ValorIndividualComSvas = x.ValorIndividualComSvas, + FranquiaGb = x.FranquiaGb, + TotalLinhas = x.TotalLinhas, + ValorTotal = x.ValorTotal + }) + .ToListAsync(), + PlanoContratoTotal = await _db.ResumoPlanoContratoTotals.AsNoTracking() + .Select(x => new ResumoPlanoContratoTotalDto + { + ValorTotal = x.ValorTotal + }) + .FirstOrDefaultAsync(), + LineTotais = await _db.ResumoLineTotais.AsNoTracking() + .OrderBy(x => x.Tipo) + .Select(x => new ResumoLineTotaisDto + { + Tipo = x.Tipo, + ValorTotalLine = x.ValorTotalLine, + LucroTotalLine = x.LucroTotalLine, + QtdLinhas = x.QtdLinhas + }) + .ToListAsync(), + ReservaLines = await _db.ResumoReservaLines.AsNoTracking() + .OrderBy(x => x.Ddd) + .Select(x => new ResumoReservaLineDto + { + Ddd = x.Ddd, + FranquiaGb = x.FranquiaGb, + QtdLinhas = x.QtdLinhas, + Total = x.Total + }) + .ToListAsync(), + ReservaTotal = await _db.ResumoReservaTotals.AsNoTracking() + .Select(x => new ResumoReservaTotalDto + { + QtdLinhasTotal = x.QtdLinhasTotal, + Total = x.Total + }) + .FirstOrDefaultAsync() + }; + + return Ok(response); + } +} diff --git a/Data/AppDbContext.cs b/Data/AppDbContext.cs index ddd837c..c3f9bee 100644 --- a/Data/AppDbContext.cs +++ b/Data/AppDbContext.cs @@ -44,6 +44,18 @@ public class AppDbContext : IdentityDbContext Notifications => Set(); + // ✅ tabela RESUMO + public DbSet ResumoMacrophonyPlans => Set(); + public DbSet ResumoMacrophonyTotals => Set(); + public DbSet ResumoVivoLineResumos => Set(); + public DbSet ResumoVivoLineTotals => Set(); + public DbSet ResumoClienteEspeciais => Set(); + public DbSet ResumoPlanoContratoResumos => Set(); + public DbSet ResumoPlanoContratoTotals => Set(); + public DbSet ResumoLineTotais => Set(); + public DbSet ResumoReservaLines => Set(); + public DbSet ResumoReservaTotals => Set(); + protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); @@ -212,6 +224,16 @@ public class AppDbContext : IdentityDbContext().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); + modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); modelBuilder.Entity().HasQueryFilter(x => _tenantProvider.TenantId != null && x.TenantId == _tenantProvider.TenantId); } diff --git a/Dtos/ResumoDtos.cs b/Dtos/ResumoDtos.cs new file mode 100644 index 0000000..3b735ed --- /dev/null +++ b/Dtos/ResumoDtos.cs @@ -0,0 +1,98 @@ +namespace line_gestao_api.Dtos; + +public sealed class ResumoResponseDto +{ + public List MacrophonyPlans { get; set; } = new(); + public ResumoMacrophonyTotalDto? MacrophonyTotals { get; set; } + public List VivoLineResumos { get; set; } = new(); + public ResumoVivoLineTotalDto? VivoLineTotals { get; set; } + public List ClienteEspeciais { get; set; } = new(); + public List PlanoContratoResumos { get; set; } = new(); + public ResumoPlanoContratoTotalDto? PlanoContratoTotal { get; set; } + public List LineTotais { get; set; } = new(); + public List ReservaLines { get; set; } = new(); + public ResumoReservaTotalDto? ReservaTotal { get; set; } +} + +public sealed class ResumoMacrophonyPlanDto +{ + public string? PlanoContrato { get; set; } + public decimal? Gb { get; set; } + public decimal? ValorIndividualComSvas { get; set; } + public decimal? FranquiaGb { get; set; } + public int? TotalLinhas { get; set; } + public decimal? ValorTotal { get; set; } + public bool VivoTravel { get; set; } +} + +public sealed class ResumoMacrophonyTotalDto +{ + public decimal? FranquiaGbTotal { get; set; } + public int? TotalLinhasTotal { get; set; } + public decimal? ValorTotal { get; set; } +} + +public sealed class ResumoVivoLineResumoDto +{ + public string? Skil { get; set; } + public string? Cliente { get; set; } + public int? QtdLinhas { get; set; } + public decimal? FranquiaTotal { get; set; } + public decimal? ValorContratoVivo { get; set; } + public decimal? FranquiaLine { get; set; } + public decimal? ValorContratoLine { get; set; } + public decimal? Lucro { get; set; } +} + +public sealed class ResumoVivoLineTotalDto +{ + public int? QtdLinhasTotal { get; set; } + public decimal? FranquiaTotal { get; set; } + public decimal? ValorContratoVivo { get; set; } + public decimal? FranquiaLine { get; set; } + public decimal? ValorContratoLine { get; set; } + public decimal? Lucro { get; set; } +} + +public sealed class ResumoClienteEspecialDto +{ + public string? Nome { get; set; } + public decimal? Valor { get; set; } +} + +public sealed class ResumoPlanoContratoResumoDto +{ + public string? PlanoContrato { get; set; } + public decimal? Gb { get; set; } + public decimal? ValorIndividualComSvas { get; set; } + public decimal? FranquiaGb { get; set; } + public int? TotalLinhas { get; set; } + public decimal? ValorTotal { get; set; } +} + +public sealed class ResumoPlanoContratoTotalDto +{ + public decimal? ValorTotal { get; set; } +} + +public sealed class ResumoLineTotaisDto +{ + public string? Tipo { get; set; } + public decimal? ValorTotalLine { get; set; } + public decimal? LucroTotalLine { get; set; } + public int? QtdLinhas { get; set; } +} + +public sealed class ResumoReservaLineDto +{ + public string? Ddd { get; set; } + public decimal? FranquiaGb { get; set; } + public int? QtdLinhas { get; set; } + public decimal? Total { get; set; } +} + +public sealed class ResumoReservaTotalDto +{ + public int? QtdLinhasTotal { get; set; } + public decimal? Total { get; set; } +} diff --git a/Models/ResumoClienteEspecial.cs b/Models/ResumoClienteEspecial.cs new file mode 100644 index 0000000..aa1d84c --- /dev/null +++ b/Models/ResumoClienteEspecial.cs @@ -0,0 +1,14 @@ +namespace line_gestao_api.Models; + +public class ResumoClienteEspecial : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public string? Nome { get; set; } + public decimal? Valor { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoLineTotais.cs b/Models/ResumoLineTotais.cs new file mode 100644 index 0000000..b152058 --- /dev/null +++ b/Models/ResumoLineTotais.cs @@ -0,0 +1,16 @@ +namespace line_gestao_api.Models; + +public class ResumoLineTotais : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public string? Tipo { get; set; } + public decimal? ValorTotalLine { get; set; } + public decimal? LucroTotalLine { get; set; } + public int? QtdLinhas { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoMacrophonyPlan.cs b/Models/ResumoMacrophonyPlan.cs new file mode 100644 index 0000000..3f13dff --- /dev/null +++ b/Models/ResumoMacrophonyPlan.cs @@ -0,0 +1,19 @@ +namespace line_gestao_api.Models; + +public class ResumoMacrophonyPlan : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public string? PlanoContrato { get; set; } + public decimal? Gb { get; set; } + public decimal? ValorIndividualComSvas { get; set; } + public decimal? FranquiaGb { get; set; } + public int? TotalLinhas { get; set; } + public decimal? ValorTotal { get; set; } + public bool VivoTravel { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoMacrophonyTotal.cs b/Models/ResumoMacrophonyTotal.cs new file mode 100644 index 0000000..b24ad3b --- /dev/null +++ b/Models/ResumoMacrophonyTotal.cs @@ -0,0 +1,15 @@ +namespace line_gestao_api.Models; + +public class ResumoMacrophonyTotal : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public decimal? FranquiaGbTotal { get; set; } + public int? TotalLinhasTotal { get; set; } + public decimal? ValorTotal { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoPlanoContratoResumo.cs b/Models/ResumoPlanoContratoResumo.cs new file mode 100644 index 0000000..6629b6c --- /dev/null +++ b/Models/ResumoPlanoContratoResumo.cs @@ -0,0 +1,18 @@ +namespace line_gestao_api.Models; + +public class ResumoPlanoContratoResumo : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public string? PlanoContrato { get; set; } + public decimal? Gb { get; set; } + public decimal? ValorIndividualComSvas { get; set; } + public decimal? FranquiaGb { get; set; } + public int? TotalLinhas { get; set; } + public decimal? ValorTotal { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoPlanoContratoTotal.cs b/Models/ResumoPlanoContratoTotal.cs new file mode 100644 index 0000000..fa88609 --- /dev/null +++ b/Models/ResumoPlanoContratoTotal.cs @@ -0,0 +1,13 @@ +namespace line_gestao_api.Models; + +public class ResumoPlanoContratoTotal : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public decimal? ValorTotal { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoReservaLine.cs b/Models/ResumoReservaLine.cs new file mode 100644 index 0000000..06e0c4b --- /dev/null +++ b/Models/ResumoReservaLine.cs @@ -0,0 +1,16 @@ +namespace line_gestao_api.Models; + +public class ResumoReservaLine : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public string? Ddd { get; set; } + public decimal? FranquiaGb { get; set; } + public int? QtdLinhas { get; set; } + public decimal? Total { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoReservaTotal.cs b/Models/ResumoReservaTotal.cs new file mode 100644 index 0000000..a093ea5 --- /dev/null +++ b/Models/ResumoReservaTotal.cs @@ -0,0 +1,14 @@ +namespace line_gestao_api.Models; + +public class ResumoReservaTotal : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public int? QtdLinhasTotal { get; set; } + public decimal? Total { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoVivoLineResumo.cs b/Models/ResumoVivoLineResumo.cs new file mode 100644 index 0000000..3d7f0fb --- /dev/null +++ b/Models/ResumoVivoLineResumo.cs @@ -0,0 +1,20 @@ +namespace line_gestao_api.Models; + +public class ResumoVivoLineResumo : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public string? Skil { get; set; } + public string? Cliente { get; set; } + public int? QtdLinhas { get; set; } + public decimal? FranquiaTotal { get; set; } + public decimal? ValorContratoVivo { get; set; } + public decimal? FranquiaLine { get; set; } + public decimal? ValorContratoLine { get; set; } + public decimal? Lucro { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} diff --git a/Models/ResumoVivoLineTotal.cs b/Models/ResumoVivoLineTotal.cs new file mode 100644 index 0000000..ec62bd4 --- /dev/null +++ b/Models/ResumoVivoLineTotal.cs @@ -0,0 +1,18 @@ +namespace line_gestao_api.Models; + +public class ResumoVivoLineTotal : ITenantEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + + public Guid TenantId { get; set; } + + public int? QtdLinhasTotal { get; set; } + public decimal? FranquiaTotal { get; set; } + public decimal? ValorContratoVivo { get; set; } + public decimal? FranquiaLine { get; set; } + public decimal? ValorContratoLine { get; set; } + public decimal? Lucro { get; set; } + + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +}