diff --git a/BackgroundBuilder.csproj b/BackgroundBuilder.csproj index a438ff2..04bfbc3 100644 --- a/BackgroundBuilder.csproj +++ b/BackgroundBuilder.csproj @@ -15,6 +15,7 @@ + diff --git a/Services/ImageService.cs b/Services/ImageService.cs index 0274814..50bee1e 100644 --- a/Services/ImageService.cs +++ b/Services/ImageService.cs @@ -11,7 +11,7 @@ namespace BackgroundBuilder.Services { // no longer injected — use a private constant - private static readonly Thickness OverlayOffset = new(10, 58, 10, 58); + private static readonly Thickness OverlayOffset = new(10, 53, 10, 53); public async Task LoadAsync(string path) { @@ -88,8 +88,8 @@ namespace BackgroundBuilder.Services x = width - scaledWidth - offset.Right; y = height - scaledHeight - offset.Bottom; - gridWidth = scaledWidth + offset.Right; - gridHeight = scaledHeight + offset.Bottom; + gridWidth = scaledWidth; + gridHeight = scaledHeight; } else { @@ -162,16 +162,23 @@ namespace BackgroundBuilder.Services /// private static void SaveBitmap(RenderTargetBitmap bitmap, string path) { - var directory = Path.GetDirectoryName(path); - if (!Directory.Exists(directory)) + try { - Directory.CreateDirectory(directory!); - } + var directory = Path.GetDirectoryName(path); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory!); + } - using var fs = new FileStream(path, FileMode.Create, FileAccess.Write); - var encoder = new PngBitmapEncoder(); - encoder.Frames.Add(BitmapFrame.Create(bitmap)); - encoder.Save(fs); + using var fs = new FileStream(path, FileMode.Create, FileAccess.Write); + var encoder = new PngBitmapEncoder(); + encoder.Frames.Add(BitmapFrame.Create(bitmap)); + encoder.Save(fs); + } + catch (Exception ex) + { + MessageBox.Show($"Erro ao salvar a imagem:\n{ex.Message}\n\nCaminho: {path}"); + } } } } diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs index 9893804..a58aac5 100644 --- a/ViewModels/MainWindowViewModel.cs +++ b/ViewModels/MainWindowViewModel.cs @@ -15,6 +15,7 @@ using BackgroundBuilder.Models; using BackgroundBuilder.Repositories; using BackgroundBuilder.Services; using BackgroundBuilder.Utils; +using ClosedXML.Excel; using Microsoft.Win32; namespace BackgroundBuilder.ViewModels @@ -29,8 +30,8 @@ namespace BackgroundBuilder.ViewModels public ObservableCollection Comando { get; } = []; public ObservableCollection Aniversarios { get; } = []; - public ObservableCollection ContatosSemCMDFirstHalf { get; } = new(); - public ObservableCollection ContatosSemCMDSecondHalf { get; } = new(); + public ObservableCollection ContatosSemCMDFirstHalf { get; } = []; + public ObservableCollection ContatosSemCMDSecondHalf { get; } = []; private Contato? _selectedContato; @@ -60,6 +61,7 @@ namespace BackgroundBuilder.ViewModels public ICommand RefreshCommand { get; } public RelayCommand UpdateCommand { get; } public RelayCommand ExportImageCommand { get; } + public RelayCommand ImportExcelCommand { get; } public MainWindowViewModel( IContatoRepository repo, @@ -78,6 +80,7 @@ namespace BackgroundBuilder.ViewModels RefreshCommand = new RelayCommand(async _ => await LoadRawAsync()); UpdateCommand = new RelayCommand(async _ => await UpdateAsync(), _ => SelectedContatos != null); ExportImageCommand = new RelayCommand(async _ => await RenderImageAsync(), _ => BackgroundImage != null && OverlayElement != null); + ImportExcelCommand = new RelayCommand(async _ => await ImportExcelAsync()); } public void RefreshTaskbarInfo() @@ -161,7 +164,7 @@ namespace BackgroundBuilder.ViewModels && OverlayElement is FrameworkElement overlay && BackgroundImage is BitmapImage bg) { - await _imageService.SaveAsync(overlay, bg, dlg.FileName, dlg.FileName.Replace(".", "_1.")); + await _imageService.SaveAsync(overlay, bg, dlg.FileName, dlg.FileName.Replace(".png", "_1.png")); } } @@ -239,5 +242,52 @@ namespace BackgroundBuilder.ViewModels ContatosSemCMDSecondHalf.Add(list[i]); } } + + private async Task ImportExcelAsync() + { + var openFileDialog = new OpenFileDialog + { + Filter = "Excel Files|*.xlsx;*.xls" + }; + if (openFileDialog.ShowDialog() != true) + return; + + var filePath = openFileDialog.FileName; + var ramais = new List(); + + using (var workbook = new XLWorkbook(filePath)) + { + var ws = workbook.Worksheets.First(); + var table = ws.Cell("B2").CurrentRegion; + + foreach (var row in table.Rows().Skip(1)) // Skip header + { + var contato = new Contato + { + Ramal = row.Cell(3).GetString(), + Nome = row.Cell(1).GetString(), + Email = row.Cell(2).GetString(), + Area = row.Cell(4).GetString(), + IsComando = false + }; + ramais.Add(contato); + } + + table = ws.Cell("G2").CurrentRegion; + + foreach (var row in table.Rows().Skip(1)) // Skip header + { + ramais.Find(x => x.Nome == row.Cell(1).GetString()).Aniversario = row.Cell(2).GetDateTime(); + } + + } + + foreach (var contato in ramais) + { + await _repo.InsertUpdateAsync(contato); + } + + await LoadRawAsync(); // Refresh UI + } } } \ No newline at end of file diff --git a/Views/MainWindow.xaml b/Views/MainWindow.xaml index 419ed06..07d295b 100644 --- a/Views/MainWindow.xaml +++ b/Views/MainWindow.xaml @@ -135,6 +135,7 @@ + +