BD_empresa/Data/AccessService.cs
Giuliano Paschoalino 22d308a397 Adiciona suporte a MVVM e integração com banco Access
- Atualizado `.gitignore` para ignorar `FodyWeavers.xsd` e `.history`.
- Adicionado suporte a MVVM com `MainWindowViewModel` e comandos.
- Criados conversores `BoolToVisibilityConverter` e `StringToVisibilityConverter`.
- Implementado `AccessService` para acesso ao banco de dados Access.
- Adicionado layout e lógica de interface no `MainWindow.xaml` e `.cs`.
- Incluída dependência `System.Data.OleDb` no projeto.
- Criados `ClienteSmart` e `IClienteRepository` para modelagem de dados.
2025-07-31 18:00:20 -03:00

86 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Threading.Tasks;
namespace BD_empresa.Data
{
public class AccessService(string connectionString) : IClienteRepository
{
private readonly string _connectionString = connectionString;
public async Task<List<ClienteSmart>> SearchClientesAsync(string query)
{
return await Task.Run(() =>
{
var clientes = new List<ClienteSmart>();
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 ?";
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
{
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, retorna no máximo 3
return clientes
.GroupBy(c => c.CNPJ_CPF)
.Select(g => g.First())
.Take(3)
.ToList();
});
}
public async Task<List<ClienteSmart>> GetAllClientesAsync()
{
return await Task.Run(() =>
{
var clientes = new List<ClienteSmart>();
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();
});
}
}
}