-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpagamentovenda.cpp
151 lines (134 loc) · 6.44 KB
/
pagamentovenda.cpp
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
#include "pagamentovenda.h"
pagamentoVenda::pagamentoVenda(QList<QList<QVariant>> listaProdutos, venda *ptrVenda, QString total, QString cliente, QString data, QWidget *parent)
: pagamento(total, cliente, data, parent)
{
janelaVenda = ptrVenda;
rowDataList = listaProdutos;
}
void pagamentoVenda::terminarPagamento(){
QDateTime dataIngles = portugues.toDateTime(dataGlobal, "dd-MM-yyyy hh:mm:ss");
// inserir a venda
// adicionar ao banco de dados
if(!db.open()){
qDebug() << "erro ao abrir banco de dados. botao aceitar venda.";
}
QSqlQuery query;
QString troco = ui->Lbl_Troco->text();
QString recebido = ui->Ledit_Recebido->text();
QString forma_pagamento = ui->CBox_FormaPagamento->currentText();
QString taxa = ui->Ledit_Taxa->text();
QString valor_final = ui->Lbl_TotalTaxa->text();
QString desconto = ui->Ledit_Desconto->text();
// validar line edits
// desconto
bool conversionOkDesconto;
// tentar converter para float e ser menor ou igual ao valor final
qDebug() << "validar valor desconto";
qDebug() << desconto;
bool menorQueTotal = portugues.toFloat(desconto, &conversionOkDesconto) <= portugues.toFloat(totalGlobal);
qDebug() << conversionOkDesconto;
if (!menorQueTotal){
conversionOkDesconto = false;
}
if(forma_pagamento == "Prazo" && clienteGlobal.isEmpty()){
QMessageBox::warning(this,"Erro", "Especifique um cliente para vender à prazo!");
return;
};
qDebug() << conversionOkDesconto;
if (!conversionOkDesconto){
// algo deu errado na conversao, desconto nao validado
// inserir mensagem de erro e impedir insersao de venda
QMessageBox::warning(this, "Erro", "Por favor, insira um desconto válido.");
return;
}
// recebido
qDebug() << "validar valor recebido";
qDebug() << recebido;
bool conversionOkRecebido;
// testar se o recebido consegue ser convertido em float e se é maior ou igual ao valor final
bool maiorQueTotal = portugues.toFloat(recebido, &conversionOkRecebido) >= portugues.toFloat(valor_final);
qDebug() << conversionOkRecebido;
if (!maiorQueTotal){
// caso não seja maior ou igual que o total avalie como erro.
conversionOkRecebido = false;
}
qDebug() << conversionOkRecebido;
if (!conversionOkRecebido){
// algo deu errado na conversao, recebido nao validado
// inserir mensagem de erro e impedir insersao de venda
QMessageBox::warning(this, "Erro", "Por favor, insira um valor recebido válido.");
return;
}
// taxa
qDebug() << "validar taxa";
qDebug() << recebido;
bool conversionOkTaxa;
// testar se a taxa consegue ser converido em float
portugues.toFloat(taxa, &conversionOkTaxa);
qDebug() << conversionOkTaxa;
if (!conversionOkTaxa){
// algo deu errado na conversao, troco nao validado
// inserir mensagem de erro e impedir insersao de venda
QMessageBox::warning(this, "Erro", "Por favor, insira uma taxa válida.");
return;
}
if(forma_pagamento == "Prazo"){
query.prepare("INSERT INTO vendas2 (cliente, total, data_hora, forma_pagamento, valor_recebido, troco, taxa, valor_final, desconto, esta_pago) VALUES (:valor1, :valor2, :valor3, :valor4, :valor5, :valor6, :valor7, :valor8, :valor9, 0)");
}else{
query.prepare("INSERT INTO vendas2 (cliente, total, data_hora, forma_pagamento, valor_recebido, troco, taxa, valor_final, desconto, esta_pago) VALUES (:valor1, :valor2, :valor3, :valor4, :valor5, :valor6, :valor7, :valor8, :valor9, 1)");
}
// query.prepare("INSERT INTO vendas2 (cliente, total, data_hora, forma_pagamento, valor_recebido, troco, taxa, valor_final, desconto) VALUES (:valor1, :valor2, :valor3, :valor4, :valor5, :valor6, :valor7, :valor8, :valor9)");
query.bindValue(":valor1", clienteGlobal);
// precisa converter para notacao usa para inserir no banco de dados
query.bindValue(":valor2", QString::number(portugues.toFloat(totalGlobal)));
// inserir a data do dateedit
query.bindValue(":valor3", dataIngles.toString("yyyy-MM-dd hh:mm:ss"));
//
query.bindValue(":valor4", forma_pagamento);
// precisa converter para notacao usa para inserir no banco de dados
query.bindValue(":valor5", QString::number(portugues.toFloat(recebido), 'f', 2));
query.bindValue(":valor6", QString::number(portugues.toFloat(troco), 'f', 2));
query.bindValue(":valor7", QString::number(portugues.toFloat(taxa), 'f', 2));
query.bindValue(":valor8", QString::number(portugues.toFloat(valor_final), 'f', 2));
query.bindValue(":valor9", QString::number(portugues.toFloat(desconto), 'f', 2));
QString idVenda;
if (query.exec()) {
idVenda = query.lastInsertId().toString();
qDebug() << "Inserção bem-sucedida!";
} else {
qDebug() << "Erro na inserção: ";
}
// inserir os produtos da venda
// adicionar ao banco de dados
for (const QList<QVariant> &rowdata : rowDataList) {
query.prepare("INSERT INTO produtos_vendidos (id_produto, quantidade, preco_vendido, id_venda) VALUES (:valor1, :valor2, :valor3, :valor4)");
query.bindValue(":valor1", rowdata[0]);
// precisa converter para notacao usa para inserir no banco de dados
query.bindValue(":valor2", QString::number(portugues.toFloat(rowdata[1].toString())));
query.bindValue(":valor3", QString::number(portugues.toFloat(rowdata[3].toString()), 'f', 2));
query.bindValue(":valor4", idVenda);
if (query.exec()) {
qDebug() << "Inserção prod_vendidos bem-sucedida!";
} else {
qDebug() << "Erro na inserção prod_vendidos: ";
}
query.prepare("UPDATE produtos SET quantidade = quantidade - :valor2 WHERE id = :valor1");
query.bindValue(":valor1", rowdata[0]);
// precisa converter para notacao usa para inserir no banco de dados
query.bindValue(":valor2", QString::number(portugues.toFloat(rowdata[1].toString())));
if (query.exec()) {
qDebug() << "update quantidade bem-sucedida!";
} else {
qDebug() << "Erro na update quantidade: ";
}
}
if(ui->CheckImprimirCNF->isChecked()){
Vendas::imprimirReciboVenda(idVenda);
}
db.close();
janelaVenda->janelaVenda->atualizarTabelas();
janelaVenda->janelaPrincipal->atualizarTableview();
// fechar as janelas
this->close();
janelaVenda->close();
}