-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConexaoProdutos.cs
More file actions
455 lines (399 loc) · 17.8 KB
/
Copy pathConexaoProdutos.cs
File metadata and controls
455 lines (399 loc) · 17.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
using MySql.Data.MySqlClient;
using Mysqlx.Crud;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static New1.FormRegistarVenda;
namespace New1
{
internal class ConexaoProdutos
{
//contar clientes na label do FormM
public static int ContarProdutos()
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
conn.Open();
MySqlCommand cmd = new MySqlCommand("SELECT COUNT(*) FROM produtos", conn);
return Convert.ToInt32(cmd.ExecuteScalar());
}
}
public static DataTable ObterTaxas()
{
DataTable tabela = new DataTable();
using (var conn = ConexaoDB.ObterConexao())
{
conn.Open();
string sql = "SELECT id, nome, valor FROM taxas ORDER BY nome ASC;";
MySqlCommand cmd = new MySqlCommand(sql, conn);
using (var adapter = new MySqlDataAdapter(cmd))
{
adapter.Fill(tabela);
}
}
return tabela;
}
// Método para carregar os produtos
public DataTable CarregarProdutos()
{
DataTable dt = new DataTable();
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
string query = @"
SELECT
p.id,
p.nome,
c.descricao AS categoria,
p.quantidade,
IFNULL(p.validade, '1900-01-01') AS validade,
p.cod_barras
FROM
produtos p
INNER JOIN
categorias c ON p.categoria = c.id
ORDER BY
p.id DESC;
";
MySqlDataAdapter da = new MySqlDataAdapter(query, conn);
da.Fill(dt);
}
// Formatação da validade
foreach (DataRow row in dt.Rows)
{
if (row["validade"] != DBNull.Value)
{
if (DateTime.TryParse(row["validade"].ToString(), out DateTime validade))
{
row["validade"] = validade;
}
else
{
row["validade"] = DateTime.MinValue;
}
}
else
{
row["validade"] = DateTime.MinValue;
}
}
}
catch (Exception ex)
{
throw new Exception("Erro ao carregar produtos: " + ex.Message);
}
return dt;
}
public DataTable CarregarPrecos()
{
DataTable tabela = new DataTable();
try
{
using (var conn = ConexaoDB.ObterConexao())
{
conn.Open();
string sql = @"
SELECT
p.id AS id_A,
p.nome AS nome_A,
p.pcusto AS pcusto_A,
p.margem1 AS margem1_A, p.margem2 AS margem2_A, p.margem3 AS margem3_A,
p.margem4 AS margem4_A, p.margem5 AS margem5_A,
p.pvp_iliquido1 AS pvp_iliquido1_A, p.pvp_iliquido2 AS pvp_iliquido2_A, p.pvp_iliquido3 AS pvp_iliquido3_A,
p.pvp_iliquido4 AS pvp_iliquido4_A, p.pvp_iliquido5 AS pvp_iliquido5_A,
p.pvp_liquido1 AS pvp_liquido1_A, p.pvp_liquido2 AS pvp_liquido2_A, p.pvp_liquido3 AS pvp_liquido3_A,
p.pvp_liquido4 AS pvp_liquido4_A, p.pvp_liquido5 AS pvp_liquido5_A,
p.valor_margem1 AS valor_margem1_A, p.valor_margem2 AS valor_margem2_A, p.valor_margem3 AS valor_margem3_A,
p.valor_margem4 AS valor_margem4_A, p.valor_margem5 AS valor_margem5_A,
t.nome AS taxa_nome_A
FROM produtos p
LEFT JOIN taxas t ON p.taxa_id = t.id
ORDER BY p.id ASC;";
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
using (MySqlDataReader reader = cmd.ExecuteReader())
{
tabela.Load(reader); // Alternativa ao Fill()
}
}
}
catch (Exception ex)
{
MessageBox.Show("Erro ao carregar preços: " + ex.Message);
}
return tabela;
}
//Obter dados de produtos para para tabela do formEstoque
public DataTable ObterEstoque()
{
DataTable dt = new DataTable();
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
string query = @"
SELECT
p.id,
p.nome,
p.validade,
p.categoria AS id_categoria,
c.descricao AS categoria,
p.quantidade,
p.cod_barras
FROM produtos p
INNER JOIN categorias c ON p.categoria = c.id
ORDER BY p.nome";
MySqlDataAdapter da = new MySqlDataAdapter(query, conn);
da.Fill(dt);
}
}
catch (Exception ex)
{
throw new Exception("Erro ao obter estoque: " + ex.Message);
}
return dt;
}
//serve para actualizar a quantidade de itens em estoque na bd
public void AtualizarQuantidadeEstoque(int idProduto, int novaQuantidade)
{
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
string query = "UPDATE produtos SET quantidade = @quantidade WHERE id = @id";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@quantidade", novaQuantidade);
cmd.Parameters.AddWithValue("@id", idProduto);
conn.Open();
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw new Exception("Erro ao atualizar quantidade: " + ex.Message);
}
}
//Se você tentar cadastrar um produto com um código de barras já existente, ele aumentará a quantidade do produto existente.
//Se for um novo código, ele cadastra normalmente.
public void AdicionarOuAtualizarProduto(string nome, int quantidade, string categoria, DateTime validade, string codBarras)
{
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
conn.Open();
string selectQuery = "SELECT id, quantidade FROM produtos WHERE cod_barras = @codBarras";
MySqlCommand selectCmd = new MySqlCommand(selectQuery, conn);
selectCmd.Parameters.AddWithValue("@codBarras", codBarras);
using (MySqlDataReader reader = selectCmd.ExecuteReader())
{
if (reader.Read())
{
// Atualiza quantidade
int produtoId = reader.GetInt32("id");
int quantidadeExistente = reader.GetInt32("quantidade");
int novaQuantidade = quantidadeExistente + quantidade;
reader.Close();
string updateQuery = @"UPDATE produtos
SET quantidade = @quantidade
WHERE id = @id";
MySqlCommand updateCmd = new MySqlCommand(updateQuery, conn);
updateCmd.Parameters.AddWithValue("@quantidade", novaQuantidade);
updateCmd.Parameters.AddWithValue("@id", produtoId);
updateCmd.ExecuteNonQuery();
}
else
{
reader.Close();
string insertQuery = @"
INSERT INTO produtos (nome, quantidade, categoria, validade, cod_barras)
VALUES (@nome, @quantidade, @categoria, @validade, @codBarras)";
MySqlCommand insertCmd = new MySqlCommand(insertQuery, conn);
insertCmd.Parameters.AddWithValue("@nome", nome);
//insertCmd.Parameters.AddWithValue("@preco", preco);
insertCmd.Parameters.AddWithValue("@quantidade", quantidade);
insertCmd.Parameters.AddWithValue("@categoria", categoria);
insertCmd.Parameters.AddWithValue("@validade", validade == DateTime.MinValue ? (object)DBNull.Value : validade);
insertCmd.Parameters.AddWithValue("@codBarras", codBarras);
insertCmd.ExecuteNonQuery();
}
}
}
}
catch (Exception ex)
{
throw new Exception("Erro ao cadastrar ou atualizar produto: " + ex.Message);
}
}
public DataTable ObterCategorias()
{
DataTable dt = new DataTable();
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
string query = "SELECT id, descricao FROM categorias ORDER BY descricao";
MySqlDataAdapter da = new MySqlDataAdapter(query, conn);
da.Fill(dt);
}
}
catch (Exception ex)
{
throw new Exception("Erro ao carregar categorias: " + ex.Message);
}
return dt;
}
// Método para editar um produto
public void EditarProduto(int id, string nome, string categoria, int quantidade, DateTime validade, string codBarras)
{
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
conn.Open();
string query = @"
UPDATE produtos
SET
nome = @nome,
categoria = @categoria,
quantidade = @quantidade,
validade = @validade,
cod_barras = @cod_barras
WHERE id = @id";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@nome", nome);
cmd.Parameters.AddWithValue("@categoria", categoria);
cmd.Parameters.AddWithValue("@quantidade", quantidade);
cmd.Parameters.AddWithValue("@validade", validade);
cmd.Parameters.AddWithValue("@cod_barras", codBarras);
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw new Exception("Erro ao editar produto: " + ex.Message);
}
}
// Método para excluir um produto
public void ExcluirProduto(int id)
{
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
conn.Open();
string query = "DELETE FROM produtos WHERE id = @id";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw new Exception("Erro ao excluir produto: " + ex.Message);
}
}
public static DataTable PesquisarProdutos(string filtro)
{
DataTable tabela = new DataTable();
using (var conn = ConexaoDB.ObterConexao())
{
conn.Open();
string sql = @"SELECT
p.id AS id_A,
p.nome AS nome_A,
p.pcusto AS pcusto_A,
p.margem1 AS margem1_A, p.margem2 AS margem2_A, p.margem3 AS margem3_A,
p.margem4 AS margem4_A, p.margem5 AS margem5_A,
p.pvp_iliquido1 AS pvp_iliquido1_A, p.pvp_iliquido2 AS pvp_iliquido2_A, p.pvp_iliquido3 AS pvp_iliquido3_A,
p.pvp_iliquido4 AS pvp_iliquido4_A, p.pvp_iliquido5 AS pvp_iliquido5_A,
p.pvp_liquido1 AS pvp_liquido1_A, p.pvp_liquido2 AS pvp_liquido2_A, p.pvp_liquido3 AS pvp_liquido3_A,
p.pvp_liquido4 AS pvp_liquido4_A, p.pvp_liquido5 AS pvp_liquido5_A,
p.valor_margem1 AS valor_margem1_A, p.valor_margem2 AS valor_margem2_A, p.valor_margem3 AS valor_margem3_A,
p.valor_margem4 AS valor_margem4_A, p.valor_margem5 AS valor_margem5_A,
t.nome AS taxa_nome_A
FROM produtos p
LEFT JOIN taxas t ON p.taxa_id = t.id
WHERE p.id = @filtro OR p.nome LIKE @filtro
ORDER BY p.id ASC;";
MySqlCommand cmd = new MySqlCommand(sql, conn);
filtro = filtro.Replace("'", "''"); // Corrige possíveis erros de SQL Injection
cmd.Parameters.AddWithValue("@filtro", "%" + filtro + "%");
using (var adapter = new MySqlDataAdapter(cmd))
{
adapter.Fill(tabela);
}
}
return tabela;
}
public void EditarPrecosProduto(int id, decimal pcusto, decimal[] margem, decimal[] pvpIliquido, decimal[] pvpLiquido, decimal[] valorMargem, int taxaId)
{
if (id <= 0)
{
MessageBox.Show("ID do produto inválido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
using (MySqlConnection conn = ConexaoDB.ObterConexao())
{
conn.Open();
string query = @"
UPDATE produtos
SET
pcusto = @pcusto,
margem1 = @margem1, margem2 = @margem2, margem3 = @margem3, margem4 = @margem4, margem5 = @margem5,
pvp_iliquido1 = @pvp_iliquido1, pvp_iliquido2 = @pvp_iliquido2, pvp_iliquido3 = @pvp_iliquido3, pvp_iliquido4 = @pvp_iliquido4, pvp_iliquido5 = @pvp_iliquido5,
pvp_liquido1 = @pvp_liquido1, pvp_liquido2 = @pvp_liquido2, pvp_liquido3 = @pvp_liquido3, pvp_liquido4 = @pvp_liquido4, pvp_liquido5 = @pvp_liquido5,
valor_margem1 = @valor_margem1, valor_margem2 = @valor_margem2, valor_margem3 = @valor_margem3, valor_margem4 = @valor_margem4, valor_margem5 = @valor_margem5,
taxa_id = @taxa_id
WHERE id = @id";
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@pcusto", pcusto);
cmd.Parameters.AddWithValue("@margem1", margem[0]);
cmd.Parameters.AddWithValue("@margem2", margem[1]);
cmd.Parameters.AddWithValue("@margem3", margem[2]);
cmd.Parameters.AddWithValue("@margem4", margem[3]);
cmd.Parameters.AddWithValue("@margem5", margem[4]);
cmd.Parameters.AddWithValue("@pvp_iliquido1", pvpIliquido[0]);
cmd.Parameters.AddWithValue("@pvp_iliquido2", pvpIliquido[1]);
cmd.Parameters.AddWithValue("@pvp_iliquido3", pvpIliquido[2]);
cmd.Parameters.AddWithValue("@pvp_iliquido4", pvpIliquido[3]);
cmd.Parameters.AddWithValue("@pvp_iliquido5", pvpIliquido[4]);
cmd.Parameters.AddWithValue("@pvp_liquido1", pvpLiquido[0]);
cmd.Parameters.AddWithValue("@pvp_liquido2", pvpLiquido[1]);
cmd.Parameters.AddWithValue("@pvp_liquido3", pvpLiquido[2]);
cmd.Parameters.AddWithValue("@pvp_liquido4", pvpLiquido[3]);
cmd.Parameters.AddWithValue("@pvp_liquido5", pvpLiquido[4]);
cmd.Parameters.AddWithValue("@valor_margem1", valorMargem[0]);
cmd.Parameters.AddWithValue("@valor_margem2", valorMargem[1]);
cmd.Parameters.AddWithValue("@valor_margem3", valorMargem[2]);
cmd.Parameters.AddWithValue("@valor_margem4", valorMargem[3]);
cmd.Parameters.AddWithValue("@valor_margem5", valorMargem[4]);
// Tratamento seguro para taxa_id (evita problemas caso seja nulo)
if (taxaId > 0)
{
cmd.Parameters.AddWithValue("@taxa_id", taxaId);
}
else
{
cmd.Parameters.AddWithValue("@taxa_id", DBNull.Value);
}
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
throw new Exception("Erro ao editar preços do produto: " + ex.Message);
}
}
}
}