-
Notifications
You must be signed in to change notification settings - Fork 0
/
commentaire.cpp
402 lines (303 loc) · 16.7 KB
/
commentaire.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
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
#include "commentaire.h"
#include "ui_commentaire.h"
Commentaire::Commentaire(QWidget *parent,
int iC, int iP,
Produit *produit,
Data *d) :
QWidget(parent),
ui(new Ui::Commentaire),
PageInterface(parent, iC, iP)
{
ui->setupUi(this);
currentProduit = produit;
database = d;
signalAndSlot();
//on doit remplacer dans ce path les "/" par des "\" => "\\" caractére d'échapement
//c'est qt qui les mets dans ce sens avec la méthode appicationDirPath()
pathSyst = updatePath(QApplication::applicationDirPath()+database->getPathSyst());
pathBA = updatePath(QApplication::applicationDirPath()+database->getPathBA());
}
QString Commentaire::updatePath(QString path){
QString result = path;
for(int i=0 ; i <result.size();i++){//on doit remplacer dans ce path les "/" par des "\" => "\\" caractére d'échapement
if(result.at(i) == '/'){//c'est qt qui les mets dans ce sens avec la méthode appicationDirPath()
result.replace(i,1,"\\");
}
}
return result;
}
void Commentaire::signalAndSlot(){
QObject::connect(ui->precBouton, SIGNAL(clicked()), this, SLOT(goPrec()));
QObject::connect(ui->suivBouton,SIGNAL(clicked()),this,SLOT(goNext()));//on déclenche le thread lors du click sur le bouton pour générer les fichiers
QObject::connect(this,SIGNAL(changeIndex(int)), this->parent(),
SLOT(changeIndex(int)));
QObject::connect(this,SIGNAL(changeIndex(int)), this->parent(),
SLOT(changeIndex(int)));
}
void Commentaire::goPrec(){
emit changeIndex(this->indexPrecedant);
}
void Commentaire::goNext(){
QString qteString = ui->qteEdit->text();
QRegExp rx("[1-9]\\d{0,3}");
QValidator *validator = new QRegExpValidator(rx, 0);
int pos = 0;
if(validator->validate(qteString,pos) != 2){
QMessageBox::warning(this,"Erreur de saisie","Veuillez saisir un nombre entre 1 et 999");
return;
}
else{
currentProduit->setQte(ui->qteEdit->text().toInt());
if(generateReplaceVBS())
zipXlsx();
else
return;
}
}
QString Commentaire::generateFillNomenclatureFG(){
QString s = "";
int decalage = 5;//décalage dans les excel (premiere ligne ou on va écrire, ligne 5)
for(int i =0; i < currentProduit->getListeComposantFG().size();i++){
Composant c = currentProduit->getListeComposantFG().value(i);
s += "objXLWs6.Cells("+QString::number(i+decalage)+",1).Value = \""+c.getName()+"\"\n";
s += "objXLWs6.Cells("+QString::number(i+decalage)+",2).Value = \""+c.getRef()+"\"\n" ;
s += "objXLWs6.Cells("+QString::number(i+decalage)+",3).Value = \""+QString::number(
c.getQte().toInt()*currentProduit->getQte())+"\"\n" ;
s += "objXLWs6.Cells("+QString::number(i+decalage)+",4).Value = \""+
QString::number(c.getPrixU())+"\"\n" ;
s += "objXLWs6.Cells("+QString::number(i+decalage)+",5).Value = \""+
QString::number(c.getPrixU()*
(c.getQte().toInt())*
currentProduit->getQte())
+"\"\n" ;
}
return s;
}
QString Commentaire::generateFillNomenclatureAffaire(){
QString s1 = "";
int decalage = 5;//décalage dans les excel (premiere ligne ou on va écrire, ligne 5)
for(int i =0; i < currentProduit->getListeComposantAffaire().size();i++){
Composant c1 = currentProduit->getListeComposantAffaire().value(i);
s1 += "objXLWs7.Cells("+QString::number(i+decalage)+",1).Value = \""+c1.getName()+"\"\n";
s1 += "objXLWs7.Cells("+QString::number(i+decalage)+",2).Value = \""+c1.getFournisseur()+"\"\n" ;
s1 += "objXLWs7.Cells("+QString::number(i+decalage)+",3).Value = \""+c1.getRef()+"\"\n" ;
s1 += "objXLWs7.Cells("+QString::number(i+decalage)+",4).Value = \""+QString::number(
c1.getQte().toInt()*currentProduit->getQte())+"\"\n" ;
s1 += "objXLWs7.Cells("+QString::number(i+decalage)+",5).Value = \""+
QString::number(c1.getPrixU())+"\"\n" ;
s1 += "objXLWs7.Cells("+QString::number(i+decalage)+",6).Value = \""+
QString::number(c1.getPrixU()*(c1.getQte().toInt())*
currentProduit->getQte())
+"\"\n" ;
}
return s1;
}
QString Commentaire::generateFillBordereau(){
QString s1 = "";
int decalage = 5;//décalage dans les excel (premiere ligne ou on va écrire, ligne 5)
for(int i =0; i < currentProduit->getListCodets().size();i++){
Codet c = currentProduit->getListCodets().value(i);
s1 += "objXLWs8.Cells("+QString::number(i+decalage)+",1).Value = \""+c.getName()+"\"\n";
s1 += "objXLWs8.Cells("+QString::number(i+decalage)+",2).Value = \""+c.getCodeArticle()+"\"\n" ;
s1 += "objXLWs8.Cells("+QString::number(i+decalage)+",3).Value = \""+QString::number(
c.getQte().toInt()*currentProduit->getQte())+"\"\n" ;
s1 += "objXLWs8.Cells("+QString::number(i+decalage)+",4).Value = \""+
QString::number(c.getPrixVenteU())+"\"\n" ;
s1 += "objXLWs8.Cells("+QString::number(i+decalage)+",5).Value = \""+
QString::number(c.getPrixVenteU()*(c.getQte().toInt())*
currentProduit->getQte())
+"\"\n" ;
}
return s1;
}
bool Commentaire::generateReplaceVBS(){
QString filename = pathSyst+"replace.vbs";
cmdDos("del \""+filename+"\"");
QFile file(filename);
//on a besoin de caster ces valeurs pour qu'elles correspondent au excel qui ne prend pas les doubles, mais les int.
int prixNomAff = static_cast<int>(currentProduit->getPrixTotNomAffaire());
int prixNomFG = static_cast<int>(currentProduit->getPrixTotNomFG());
int prixVenteMarcheCast = static_cast<int>(currentProduit->getPrixVenteMarche());
QString prixVenteMarche = (currentProduit->getCurrentMarche().getName() == "") ? // si on a un marché, on met dans la variable le prix de vente du marché,
//si on ne l'a pas, on met la chaine de caractére " "
" ":
QString::number(prixVenteMarcheCast) ;
//Et oui! QT a besoin de doubles avec des points pour faire ses opérations, mais excel, lui a besoin de virgules! C'est magnifique!!!^ ^
QString fraisDSS = QString::number(database->getListFrais().value(0).getPourcentage()).
replace(".",",");
QString fraisFin = QString::number(database->getListFrais().value(1).getPourcentage()).
replace(".",",");
QString fraisDir = QString::number(database->getListFrais().value(2).getPourcentage()).
replace(".",",");
QString fraisGen = QString::number(database->getListFrais().value(3).getPourcentage()).
replace(".",",");
QString coutHCdp = QString::number(database->getListMdo().value(0).getCoutH()).
replace(".",",");
QString coutHTech = QString::number(database->getListMdo().value(1).getCoutH()).
replace(".",",");
QString coutHOuv = QString::number(database->getListMdo().value(2).getCoutH()).
replace(".",",");
if (file.open(QIODevice::ReadWrite)) {
QTextStream stream(&file);
stream << "strFilename=WScript.Arguments.Item(0)\n"<<
"strFilename1=WScript.Arguments.Item(1)\n"<<
/******************SHEET2**********************/
"Const FromValue0 = \"nomProduit\"\n"<<
"Const ToValue0 = \""+currentProduit->getName()+"\"\n"<<
"Const FromValue = \"qteProduit\"\n"<<
"Const ToValue = \""+QString::number(currentProduit->getQte())+"\"\n"<<
"Const FromValue1 = \"mdoTech\"\n"<<
"Const ToValue1 = \""+QString::number(currentProduit->getNbHTech()*currentProduit->getQte())
.replace(".",",")+ "\"\n"<<
//et oui, excel ne comprends pas les "." pour les chiffres, donc on est obligé de lui passer en string...
"Const FromValue2 = \"mdoCdp\"\n"<<
"Const ToValue2 = \""+QString::number(currentProduit->getNbHCdp()*currentProduit->getQte())
.replace(".",",")+ "\"\n"<<
"Const FromValue3 = \"mdoOuv\"\n"<<
"Const ToValue3 = \""+QString::number(currentProduit->getNbHOuv()*currentProduit->getQte())
.replace(".",",")+ "\"\n"<<
"Const FromValue31 = \"codeProduit\"\n"<<
"Const ToValue31 = \""+currentProduit->getTag()+"_"
+currentProduit->readCode()
+ "\"\n"<<
/******************SHEET3**********************/
"Const FromValue5 = \"fournitureAffaire\"\n"<<
"Const ToValue5 = "+QString::number(prixNomAff*currentProduit->getQte())+ "\n"<<
"Const FromValue6 = \"fournitureFG\"\n"<<
"Const ToValue6 = "+QString::number(prixNomFG*currentProduit->getQte())+ "\n"<<
"Const FromValue7 = \"prixVente\"\n"<<
"Const ToValue7 = \""+QString::number(prixVenteMarche.toDouble(0)
*currentProduit->getQte())+"\"\n"<<
/******************SHEET4**********************/
"Const FromValue8 = \"fraisDSS\"\n"<<
"Const ToValue8 = \""+fraisDSS+ "\"\n"<<
"Const FromValue9 = \"fraisFin\"\n"<<
"Const ToValue9 = \""+fraisFin+ "\"\n"<<
"Const FromValue10 = \"fraisDir\"\n"<<
"Const ToValue10 = \""+fraisDir+"\"\n"<<
"Const FromValue100 = \"fraisGeneraux\"\n"<<
"Const ToValue100 = \""+fraisGen+"\"\n"<<
"Const FromValue101 = \"coutHCdp\"\n"<<
"Const ToValue101 = \""+coutHCdp+ "\"\n"<<
"Const FromValue102 = \"coutHTech\"\n"<<
"Const ToValue102 = \""+coutHTech+ "\"\n"<<
"Const FromValue103 = \"coutHOuv\"\n"<<
"Const ToValue103 = \""+coutHOuv+"\"\n"<<
/******************SHEET5**********************/
"Const FromValue11 = \"vProd\"\n"<<
"Const ToValue11 = \""+currentProduit->getVersionProduitXML()+ "\"\n"<<
"Const FromValue12 = \"vNom\"\n"<<
"Const ToValue12 = \""+currentProduit->getVersionNomenclatureXML()+ "\"\n"<<
"Const FromValue13 = \"vOp\"\n"<<
"Const ToValue13 = \""+currentProduit->getVersionOperationXML()+"\"\n"<<
"Const FromValue14 = \"vMarch\"\n"<<
"Const ToValue14 = \""+currentProduit->getVersionMarcheXML()+ "\"\n"<<
"Const FromValue15 = \"vConf\"\n"<<
"Const ToValue15 = \""+database->getVersionConfXML()+"\"\n"<<
/******************SHEET8**********************/
"Const FromValue16 = \"nomMarche\"\n"<<
"Const ToValue16 = \""+currentProduit->getCurrentMarche().getName()+ "\"\n"<<
/******************REPLACE**********************/
"Dim objXLApp, objXLWb\n"<<
"Set objXLApp = CreateObject(\"Excel.Application\")\n"<<
"objXLApp.Visible = False\n"<<
"Set objXLWb = objXLApp.Workbooks.Open(strFilename)\n"<<
"Dim objXLWs2 : Set objXLWs2 = objXLWb.Worksheets(2)\n"<<
"objXLWs2.Cells.Replace FromValue0, ToValue0\n"<<
"objXLWs2.Cells.Replace FromValue, ToValue\n"<<
"objXLWs2.Cells.Replace FromValue1, ToValue1\n"<<
"objXLWs2.Cells.Replace FromValue2, ToValue2\n"<<
"objXLWs2.Cells.Replace FromValue3, ToValue3\n"<<
"objXLWs2.Cells.Replace FromValue31, ToValue31\n"<<
"Dim objXLWs3 : Set objXLWs3 = objXLWb.Worksheets(3)\n"<<
"objXLWs3.Cells.Replace FromValue5, ToValue5\n"<<
"objXLWs3.Cells.Replace FromValue6, ToValue6\n"<<
"objXLWs3.Cells.Replace FromValue7, ToValue7\n"<<
"Dim objXLWs4 : Set objXLWs4 = objXLWb.Worksheets(4)\n"<<
"objXLWs4.Cells.Replace FromValue8, ToValue8\n"<<
"objXLWs4.Cells.Replace FromValue9, ToValue9\n"<<
"objXLWs4.Cells.Replace FromValue10, ToValue10\n"<<
"objXLWs4.Cells.Replace FromValue100, ToValue100\n"<<
"objXLWs4.Cells.Replace FromValue101, ToValue101\n"<<
"objXLWs4.Cells.Replace FromValue102, ToValue102\n"<<
"objXLWs4.Cells.Replace FromValue103, ToValue103\n"<<
"Dim objXLWs5 : Set objXLWs5 = objXLWb.Worksheets(5)\n"<<
"objXLWs5.Cells.Replace FromValue11, ToValue11\n"<<
"objXLWs5.Cells.Replace FromValue12, ToValue12\n"<<
"objXLWs5.Cells.Replace FromValue13, ToValue13\n"<<
"objXLWs5.Cells.Replace FromValue14, ToValue14\n"<<
"objXLWs5.Cells.Replace FromValue15, ToValue15\n"<<
"Dim objXLWs6 : Set objXLWs6 = objXLWb.Worksheets(6)\n"<<
generateFillNomenclatureFG()<<
"Dim objXLWs7 : Set objXLWs7 = objXLWb.Worksheets(7)\n"<<
generateFillNomenclatureAffaire()<<
"Dim objXLW8 : Set objXLWs8 = objXLWb.Worksheets(8)\n"<<
generateFillBordereau()<<
"objXLWs8.Cells.Replace FromValue16, ToValue16\n"<<
"objXLApp.DisplayAlerts = False\n"<<
"objXLWb.SaveAs strFilename1, 51\n"<<
"objXLApp.Quit"
<< endl;
}
if(!file.exists()){
QMessageBox::critical(this,"Erreur génération replace.vbs",
"Impossible de générer replace.vbs");
return false;
}
return true;
}
void Commentaire::zipXlsx(){
QString fileName = "";
while(fileName == ""){//on boucle dans le cas ou l'utilisateur
QString excelFilter = "Fichier Excel (*.xlsx)";
//sert à récupérer le path et le nom du fichier d'ou on veut sauver l'excel généré.
fileName = QFileDialog::getSaveFileName(this,
"Choisir le nom du fichier","",
excelFilter,&excelFilter);
fileName.truncate(fileName.indexOf(".xlsx"));//on ne garde que le nom du fichier sans l'extension
//car qt ici rajoute a la fin .xlsx, si l'utilisateur
//entre "fichier.xlsx", on va se retrouver avec un fichier au nom "fichier.xlsx.xlsx"
if(fileName == ""){//si l'utilisateur tente de quitter.
int ret = QMessageBox::warning(
this,"Attention","Ne pas générer les fichiers?",
QMessageBox::Cancel | QMessageBox::Yes);
if(ret == QMessageBox::Yes){
return;
}
}
}
fileName +=".xlsx";
for(int i=0 ; i <fileName.size();i++){//on doit remplacer dans ce path les "/" par des "\" => "\\" caractére d'échapement
if(fileName.at(i) == '/'){//c'est qt qui les mets dans ce sens avec la méthode appicationDirPath()
fileName.replace(i,1,"\\");
}
}
editFile(pathBA+"BA.xlsx",fileName);
if(QFile::exists(fileName)){
int ret = QMessageBox::information(
this,"Excel Généré!","Votre BA a bien été généré! Voulez-vous l'ouvrir?",
QMessageBox::No | QMessageBox::Yes);
if(ret == QMessageBox::Yes){
QDesktopServices::openUrl(QUrl::fromLocalFile(fileName));
}
emit changeIndex(0);
}
else{
QMessageBox::critical(
this,"Excel non Généré!",
"Votre BA n'a pas été généré. Consulter le fichier SYSTEM\\replace.vbs");
}
}
void Commentaire::cmdDos(QString commande){
system(qPrintable(commande));
}
void Commentaire::editFile(QString fileSrc, QString fileDest){
QString vbsFile = pathSyst+"replace.vbs";
QString cmd = "cscript";
cmdDos(cmd+" \""+vbsFile+"\" \""+fileSrc+"\" \""+fileDest+"\"");//Litéralement: >cscript replace.vbs BA.xlsx Nomentree.xlsx
//avec bien sur les chemins adéquat. D'ailleurs, on a besoin des guillemets pour les chemins avecs des espaces!
}
Commentaire::~Commentaire()
{
delete ui;
}