-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerarvales.cpp
143 lines (132 loc) · 5.56 KB
/
generarvales.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
#include "generarvales.h"
#include "ui_generarvales.h"
GenerarVales::GenerarVales(QWidget *parent)
: QDialog(parent)
, ui(new Ui::GenerarVales)
{
ui->setupUi(this);
tiendas = conf->getNombreConexiones();
qDebug() << tiendas;
QString master = conf->getConexionMaster();
qDebug() << master;
ui->dateEdit->setDate(QDate::currentDate());
}
GenerarVales::~GenerarVales()
{
delete ui;
}
void GenerarVales::on_pushButtonGenerar_clicked()
{
//Comprobar fecha correcta
ui->label->setText("Comprobando la fecha");
ui->progressBar->setValue(5);
QDate fecha = ui->dateEdit->date();
QDate fechaActual = QDate::currentDate();
if (fecha >= fechaActual) {
qDebug() << "la fecha es posterior a hoy";
return;
}
if (fecha.month() == QDate::currentDate().month()) {
qDebug() << "No se pueden generar los vales de un mes en curso";
return;
}
if (base.existeDatoEnTabla(QSqlDatabase::database(conf->getConexionLocal()),
"vales",
"fechaEmision",
fecha.toString("yyyy-MM-01"))) {
qDebug() << "Ya exiten vales para esa fecha";
return;
}
qDebug() << fechaI;
//Marcar como caducados los vales no usados
bool caducar = base.caducarVales(conf->getConexionLocal());
for (int i = 0; i < tiendas.length(); i++) {
caducar = base.caducarVales(tiendas.at(1));
}
//Vaciar tabla temporal de compras de clientes
ui->label->setText("Vaciando datos antiguos");
ui->progressBar->setValue(10);
base.vaciarTabla("comprasClienteTMP", QSqlDatabase::database(conf->getConexionLocal()));
//Cargar datos del master
ui->label->setText("Cargando datos locales");
ui->progressBar->setValue(15);
QSqlQuery compras = base.ventasClientes(conf->getConexionLocal(), fecha, fecha);
compras.first();
QSqlQuery consulta(QSqlDatabase::database(conf->getConexionLocal()));
for (int i = 0; i < compras.numRowsAffected(); i++) {
consulta.prepare("INSERT INTO comprasClienteTMP VALUES (NULL, ? , ? , ?)");
consulta.bindValue(0, compras.record().value(0).toString());
consulta.bindValue(1, compras.record().value(1).toString());
consulta.bindValue(2, fecha.toString("yyyy-MM-01"));
if (!consulta.exec()) {
qDebug() << consulta.lastError();
}
qDebug() << compras.record().value(0) << " = " << compras.record().value(1);
compras.next();
}
//Cargar datos remotos
ui->label->setText("Cargando datos remotos");
ui->progressBar->setValue(20);
for (int i = 0; i < tiendas.length(); i++) {
QSqlQuery compras = base.ventasClientes(tiendas.at(i), fecha, fecha);
compras.first();
qDebug() << compras.lastError();
//QSqlQuery consulta(QSqlDatabase::database(conf->getConexionLocal()));
for (int i = 0; i < compras.numRowsAffected(); i++) {
consulta.prepare("INSERT INTO comprasClienteTMP VALUES (NULL, ? , ? , ?)");
consulta.bindValue(0, compras.record().value(0).toString());
consulta.bindValue(1, compras.record().value(1).toString());
consulta.bindValue(2, fecha.toString("yyyy-MM-01"));
if (!consulta.exec()) {
qDebug() << consulta.lastError();
}
qDebug() << compras.record().value(0) << " = " << compras.record().value(1);
compras.next();
}
ui->progressBar->setValue(ui->progressBar->value() + 30 + (20 * (i + 1)));
}
//Generar vales locales
ui->label->setText("Generando los vales");
QSqlQuery comprasTotal("SELECT * , sum(cantidad) FROM comprasClienteTMP GROUP BY idCliente",
QSqlDatabase::database(conf->getConexionLocal()));
comprasTotal.first();
QSqlQuery vales(QSqlDatabase::database(conf->getConexionLocal()));
for (int i = 0; i < comprasTotal.numRowsAffected(); i++) {
vales.prepare("INSERT INTO vales VALUES (NULL, ? , ? , 1 , ? , NULL)");
vales.bindValue(0, comprasTotal.record().value(1));
vales.bindValue(1,
comprasTotal.record().value(4).toDouble()
* descuentoCliente(comprasTotal.record().value(1).toInt()) / 100);
vales.bindValue(2, comprasTotal.record().value(3));
if (!vales.exec()) {
qDebug() << vales.lastError();
}
comprasTotal.next();
}
//Generar vales remotos
for (int i = 0; i < tiendas.length(); i++) {
comprasTotal.first();
QSqlQuery valesRemotos(QSqlDatabase::database(tiendas.at(i)));
for (int i = 0; i < comprasTotal.numRowsAffected(); i++) {
valesRemotos.prepare("INSERT INTO vales VALUES (NULL, ? , ? , 1 , ? , NULL)");
valesRemotos.bindValue(0, comprasTotal.record().value(1));
valesRemotos.bindValue(1,
comprasTotal.record().value(4).toDouble()
* descuentoCliente(comprasTotal.record().value(1).toInt())
/ 100);
valesRemotos.bindValue(2, comprasTotal.record().value(3));
if (!valesRemotos.exec()) {
qDebug() << vales.lastError();
}
comprasTotal.next();
}
}
ui->label->setText("Finalizado");
ui->progressBar->setValue(100);
}
double GenerarVales::descuentoCliente(int idCliente)
{
double descuento = base.descuentoCliente(QString::number(idCliente));
qDebug() << idCliente << " " << descuento;
return descuento;
}