diff --git a/BD_empresa.csproj b/BD_empresa.csproj
index c01d888..02265c2 100644
--- a/BD_empresa.csproj
+++ b/BD_empresa.csproj
@@ -6,8 +6,19 @@
enable
enable
true
+ marca.ico
+
+
+
+
+
+
+ PreserveNewest
+
+
+
@@ -15,4 +26,8 @@
+
+
+
+
diff --git a/Data/AccessService.cs b/Data/AccessService.cs
index 42af733..17fa4b9 100644
--- a/Data/AccessService.cs
+++ b/Data/AccessService.cs
@@ -11,74 +11,34 @@ namespace BD_empresa.Data
{
private readonly string _connectionString = connectionString;
- public async Task> SearchClientesAsync(string query)
+ public async Task> GetAllClientesAsync()
{
return await Task.Run(() =>
{
- var clientes = new List();
+ var unidades = new List();
using (var connection = new OleDbConnection(_connectionString))
{
connection.Open();
- string sql = @"SELECT Gestao, Cliente, Unidade, CNPJ_CPF, Codigo_Instalacao, Razao_Social FROM Dados_cadastrais WHERE CNPJ_CPF LIKE ? OR Codigo_Instalacao LIKE ? OR Razao_Social LIKE ? OR Cliente LIKE ?";
+ string sql = "SELECT Cod_Smart_cliente, Cod_Smart_unidade, Gestao, Cliente, Unidade, CNPJ_CPF, Codigo_Instalacao, Razao_Social, Caminho_NFs FROM Dados_cadastrais";
using var cmd = new OleDbCommand(sql, connection);
- string likeQuery = $"%{query}%";
- cmd.Parameters.AddWithValue("?", likeQuery);
- cmd.Parameters.AddWithValue("?", likeQuery);
- cmd.Parameters.AddWithValue("?", likeQuery);
- cmd.Parameters.AddWithValue("?", likeQuery);
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
- clientes.Add(new ClienteSmart
+ unidades.Add(new UnidadeSmart
{
+ Cod_Smart_cliente = long.Parse(reader["Cod_Smart_cliente"].ToString() ?? "0"),
+ Cod_Smart_unidade = long.Parse(reader["Cod_Smart_unidade"].ToString() ?? "0"),
Gestao = reader["Gestao"].ToString(),
Cliente = reader["Cliente"].ToString(),
Unidade = reader["Unidade"].ToString(),
CNPJ_CPF = reader["CNPJ_CPF"].ToString(),
Codigo_Instalacao = reader["Codigo_Instalacao"].ToString(),
- Razao_Social = reader["Razao_Social"].ToString()
+ Razao_Social = reader["Razao_Social"].ToString(),
+ Caminho_NFs = reader["Caminho_NFs"].ToString()
});
}
}
- // Unifica clientes por CNPJ, retorna no máximo 3
- return clientes
- .GroupBy(c => c.CNPJ_CPF)
- .Select(g => g.First())
- .Take(3)
- .ToList();
- });
- }
-
- public async Task> GetAllClientesAsync()
- {
- return await Task.Run(() =>
- {
- var clientes = new List();
- using (var connection = new OleDbConnection(_connectionString))
- {
- connection.Open();
- string sql = "SELECT Gestao, Cliente, Unidade, CNPJ_CPF, Codigo_Instalacao, Razao_Social FROM Dados_cadastrais";
- using var cmd = new OleDbCommand(sql, connection);
- using var reader = cmd.ExecuteReader();
- while (reader.Read())
- {
- clientes.Add(new ClienteSmart
- {
- Gestao = reader["Gestao"].ToString(),
- Cliente = reader["Cliente"].ToString(),
- Unidade = reader["Unidade"].ToString(),
- CNPJ_CPF = reader["CNPJ_CPF"].ToString(),
- Codigo_Instalacao = reader["Codigo_Instalacao"].ToString(),
- Razao_Social = reader["Razao_Social"].ToString()
- });
- }
- }
- // Unifica clientes por CNPJ
- return clientes
- .GroupBy(c => c.CNPJ_CPF)
- .Select(g => g.First())
- .Take(3)
- .ToList();
+ return unidades;
});
}
}
diff --git a/Data/IClienteRepository.cs b/Data/IClienteRepository.cs
index ef6ce08..f1ad28e 100644
--- a/Data/IClienteRepository.cs
+++ b/Data/IClienteRepository.cs
@@ -5,7 +5,6 @@ namespace BD_empresa.Data
{
public interface IClienteRepository
{
- Task> SearchClientesAsync(string query);
- Task> GetAllClientesAsync();
+ Task> GetAllClientesAsync();
}
}
diff --git a/Data/ClienteSmart.cs b/Data/UnidadeSmart.cs
similarity index 74%
rename from Data/ClienteSmart.cs
rename to Data/UnidadeSmart.cs
index 4245916..3473597 100644
--- a/Data/ClienteSmart.cs
+++ b/Data/UnidadeSmart.cs
@@ -2,14 +2,17 @@ using System.ComponentModel;
namespace BD_empresa.Data
{
- public class ClienteSmart : INotifyPropertyChanged
+ public class UnidadeSmart : INotifyPropertyChanged
{
+ public long Cod_Smart_cliente { get; set; }
+ public long Cod_Smart_unidade { get; set; }
public string? Gestao { get; set; }
public string? Cliente { get; set; }
public string? Unidade { get; set; }
public string? CNPJ_CPF { get; set; }
public string? Codigo_Instalacao { get; set; }
public string? Razao_Social { get; set; }
+ public string? Caminho_NFs { get; set; }
public event PropertyChangedEventHandler? PropertyChanged;
protected void OnPropertyChanged(string propertyName)
diff --git a/MainWindow.xaml b/MainWindow.xaml
index d3f8fd7..1a80f99 100644
--- a/MainWindow.xaml
+++ b/MainWindow.xaml
@@ -5,36 +5,57 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BD_empresa"
mc:Ignorable="d"
- Title="MainWindow" Height="450" Width="800">
+ Title="Pesquisar Unidades" Height="650" Width="800">
+
-
-
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
+
+
+
+
+
-
-
-
-
+
+
@@ -43,5 +64,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 4dc51c3..d5363e7 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -24,5 +24,34 @@ namespace BD_empresa
var accessService = new Data.AccessService($"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessDbPath};Jet OLEDB:Database Password=gds21");
DataContext = new ViewModels.MainWindowViewModel(accessService);
}
+
+ private void UnidadeListView_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
+ {
+ if (sender is ListViewItem listViewItem && listViewItem.Content is Data.UnidadeSmart unidade && !string.IsNullOrWhiteSpace(unidade.Caminho_NFs))
+ {
+ try
+ {
+ System.Diagnostics.Process.Start("explorer.exe", unidade.Caminho_NFs);
+ }
+ catch (System.Exception ex)
+ {
+ MessageBox.Show($"Não foi possível abrir a pasta: {ex.Message}", "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+ }
+ }
+ private void UnidadeListView_EnterKeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.Key == Key.Enter && sender is ListViewItem listViewItem && listViewItem.Content is Data.UnidadeSmart unidade && !string.IsNullOrWhiteSpace(unidade.Caminho_NFs))
+ {
+ try
+ {
+ System.Diagnostics.Process.Start("explorer.exe", unidade.Caminho_NFs);
+ }
+ catch (System.Exception ex)
+ {
+ MessageBox.Show($"Não foi possível abrir a pasta: {ex.Message}", "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+ }
+ }
}
}
\ No newline at end of file
diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs
index af123fb..3708b47 100644
--- a/ViewModels/MainWindowViewModel.cs
+++ b/ViewModels/MainWindowViewModel.cs
@@ -11,22 +11,55 @@ namespace BD_empresa.ViewModels
public class MainWindowViewModel : INotifyPropertyChanged
{
private readonly IClienteRepository _clienteRepository;
- private string? _searchText;
+ private string? _searchEmpresaText;
+ private string? _searchUnidadeText;
private bool _isLoading;
private string? _errorMessage;
+ private UnidadeSmart? _selectedCliente;
+ private List _allUnidades = [];
- public ObservableCollection Clientes { get; } = [];
+ public ObservableCollection Clientes { get; } = [];
+ public ObservableCollection UnidadesSelecionadas { get; } = [];
- public string? SearchText
+ public string? SearchEmpresaText
{
- get => _searchText;
+ get => _searchEmpresaText;
set
{
- if (_searchText != value)
+ if (_searchEmpresaText != value)
{
- _searchText = value;
+ _searchEmpresaText = value;
OnPropertyChanged();
- _ = SearchAsync();
+ FiltrarClientes();
+ AtualizarUnidadesSelecionadas();
+ }
+ }
+ }
+
+ public string? SearchUnidadeText
+ {
+ get => _searchUnidadeText;
+ set
+ {
+ if (_searchUnidadeText != value)
+ {
+ _searchUnidadeText = value;
+ OnPropertyChanged();
+ AtualizarUnidadesSelecionadas();
+ }
+ }
+ }
+
+ public UnidadeSmart? SelectedCliente
+ {
+ get => _selectedCliente;
+ set
+ {
+ if (_selectedCliente != value)
+ {
+ _selectedCliente = value;
+ OnPropertyChanged();
+ AtualizarUnidadesSelecionadas();
}
}
}
@@ -52,32 +85,55 @@ namespace BD_empresa.ViewModels
_ = RefreshAsync();
}
- public async Task SearchAsync()
+ private void FiltrarClientes()
{
- if (string.IsNullOrWhiteSpace(SearchText))
- {
- await RefreshAsync();
- return;
- }
- IsLoading = true;
+ Clientes.Clear();
ErrorMessage = null;
- try
+ var _search = SearchEmpresaText;
+ if (string.IsNullOrWhiteSpace(_search))
{
- var results = await _clienteRepository.SearchClientesAsync(SearchText);
- Clientes.Clear();
- foreach (var cliente in results)
- Clientes.Add(cliente);
- if (Clientes.Count == 0)
- ErrorMessage = "Nenhum resultado encontrado.";
+ _search = string.Empty;
}
- catch (Exception ex)
+ var filtrados = _allUnidades
+ .Where(c => (c.CNPJ_CPF?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false)
+ || (c.Codigo_Instalacao?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false)
+ || (c.Razao_Social?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false)
+ || (c.Unidade?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false)
+ || (c.Cliente?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false))
+ .GroupBy(c => c.Cod_Smart_cliente)
+ .Select(g => g.First())
+ .ToList();
+ foreach (var cliente in filtrados)
+ Clientes.Add(cliente);
+ if (Clientes.Count == 0)
+ ErrorMessage = "Nenhum resultado encontrado.";
+ else
+ SelectedCliente = Clientes.First();
+ }
+
+ private void AtualizarUnidadesSelecionadas()
+ {
+ UnidadesSelecionadas.Clear();
+ ErrorMessage = null;
+ var _search = SearchUnidadeText;
+ if (string.IsNullOrWhiteSpace(_search))
{
- ErrorMessage = $"Erro: {ex.Message}";
+ _search = "";
}
- finally
+ var cliente = SelectedCliente;
+ if (Clientes.Count > 0)
{
- IsLoading = false;
+ cliente ??= Clientes.First();;
+ var unidades = _allUnidades.Where(c => c.Cod_Smart_cliente == cliente.Cod_Smart_cliente)
+ .Where(c => (c.CNPJ_CPF?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false)
+ || (c.Codigo_Instalacao?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false)
+ || (c.Unidade?.Contains(_search, StringComparison.OrdinalIgnoreCase) ?? false))
+ .ToList();
+ foreach (var unidade in unidades)
+ UnidadesSelecionadas.Add(unidade);
}
+ if (UnidadesSelecionadas.Count == 0)
+ ErrorMessage = "Nenhum resultado encontrado.";
}
public async Task RefreshAsync()
@@ -87,9 +143,9 @@ namespace BD_empresa.ViewModels
try
{
var results = await _clienteRepository.GetAllClientesAsync();
- Clientes.Clear();
- foreach (var cliente in results)
- Clientes.Add(cliente);
+ _allUnidades = [.. results.OrderBy(u => u.Gestao).ThenBy(c => c.Cliente).ThenBy(g => g.Unidade)];
+ FiltrarClientes();
+ AtualizarUnidadesSelecionadas();
}
catch (Exception ex)
{
diff --git a/marca.ico b/marca.ico
new file mode 100644
index 0000000..5a4ed60
Binary files /dev/null and b/marca.ico differ
diff --git a/marca.png b/marca.png
new file mode 100644
index 0000000..c7cf940
Binary files /dev/null and b/marca.png differ