diff --git a/src/mr/mr0600.cpp b/src/mr/mr0600.cpp index bf7727edf..e7f0a0446 100644 --- a/src/mr/mr0600.cpp +++ b/src/mr/mr0600.cpp @@ -57,26 +57,30 @@ class TCampass_app : public TSkeleton_application { protected: TToken_string tables; + TString DSN, usr, psw; const TString getFam(TString codArt) const {TString app; app << codArt[3] << codArt[4] << codArt[5]; return app; } // Restituisce la famiglia di un prodotto CODART[3,5] const TString getGroup(TString codTab) const {TString app; app << codTab[1] << codTab[2] << codTab[3]; return app; } // Restituisce la famiglia di un prodotto CODART[3,5] const TString toEscape(TString val) const; // Prende una stringa e sistema i caratteri di escape const TString zeroFill(TString val) const; // Riempe di 0 se non ci sono 6 caratteri + bool setParameters(TString dsn, TString utente, TString password); + bool checkParameters(const TString& DSN, const TString& usr, const TString& psw) { TODBC_recordset connTest(""); return connTest.connect(DSN, usr, psw) ? setParameters(DSN, usr, psw) : false; } //***************************************************************** // Funzioni per segnalare a Compass il trasferimento delle tabelle - TString startExport(const TString& DSN, const TString& usr, const TString& psw, TString prefixTables) const; - void endExport(const TString& DSN, const TString& usr, const TString& psw, TString id) const; + TString startExport(TString prefixTables) const; + void endExport(TString id) const; //***************************************************************** bool emptyTables(const TString& DSN, const TString& usr, const TString& psw) const; TString esporta(const TString& DSN, const TString& usr, const TString& psw) const; // Funzioni di esportazione - bool a01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; - bool o01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; - bool o02a(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const; - bool o02c(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const; - bool o03a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; - bool p01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; - bool p01b(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; - bool p02a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const; + bool a01a(const TString id) const; + bool o01a(const TString id) const; + bool o01e(const TString id) const; + bool o02a(const TString CodNum, const TString id) const; + bool o02c(const TString CodNum, const TString id) const; + bool o03a(const TString id) const; + bool p01a(const TString id) const; + bool p01b(const TString id) const; + bool p02a(const TString id) const; //bool o01b(const TString& DSN) const; Messa in pausa public: @@ -111,7 +115,20 @@ const TString TCampass_app::zeroFill(TString val) const return app; } -TString TCampass_app::startExport(const TString& DSN, const TString& usr, const TString& psw, TString prefixTables) const +bool TCampass_app::setParameters(TString dsn, TString utente, TString password) +{ + // Salvo i parametri + ini_set_string(CONFIG_DITTA, "Campo_MSSQL_Export", "DSN", dsn); + ini_set_string(CONFIG_DITTA, "Campo_MSSQL_Export", "User", utente); + ini_set_string(CONFIG_DITTA, "Campo_MSSQL_Export", "Password", password); + DSN = dsn; + usr = utente; + psw = password; + return true; +} + + +TString TCampass_app::startExport(TString prefixTables) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -129,7 +146,7 @@ TString TCampass_app::startExport(const TString& DSN, const TString& usr, const return idrunimp.as_string(); } -void TCampass_app::endExport(const TString& DSN, const TString& usr, const TString& psw, TString id) const +void TCampass_app::endExport(TString id) const { TODBC_recordset sqlset("", true); sqlset.connect(DSN, usr, psw); @@ -172,66 +189,72 @@ TString TCampass_app::esporta(const TString& DSN, const TString& usr, const TStr // O01B, quasi finito di implementarla, è stata messa in pausa //if(!o01b(DSN)) return false; - /* - // INIZIO A01 - //TString a01; a01 << startExport(DSN, "A01"); - - // A01A, quasi finito di implementarla, è stata messa in pausa - //if(!a01a(DSN, a01)) return false; // A01A - - //endExport(DSN, a01); - */ - - // Lo so potevo mettere DSN, usr e psw nella classe senza passarli sempre ma me ne sono reso conto dopo + TODBC_recordset sqlset(""); if (!sqlset.connect(DSN, usr, psw)) return "Connessione fallita!"; - // INIZIO O01 - TString o01; o01 << startExport(DSN, usr, psw, "O01"); + // INIZIO A01 + TString a01; a01 << startExport("A01"); - if(!o01a(DSN, usr, psw, o01)) errors << "ERRORE TABELLA: O01A\n"; // O01A + if(!a01a(a01)) errors << "ERRORE TABELLA: A01A\n"; // O01A - endExport(DSN, usr, psw, o01); + endExport(a01); - // INIZIO O02 - TString o02; o02 << startExport(DSN, usr, psw, "O02"); - if(!o02a("ORC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02A\n"; // O02A ORC - if(!o02a("PRC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02A\n"; // O02A PRC - if(!o02c("ORC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02C\n"; // O02C ORC - if(!o02c("PRC", DSN, usr, psw, o02)) errors << "ERRORE TABELLA: O02C\n"; // O02C PRC - endExport(DSN, usr, psw, o02); + // INIZIO O01 + TString o01; o01 << startExport("O01"); + + if(!o01a(o01)) errors << "ERRORE TABELLA: O01A\n"; // O01A + if(!o01e(o01)) errors << "ERRORE TABELLA: O01E\n"; // O01E + + endExport(o01); + + + // INIZIO O02 + TString o02; o02 << startExport("O02"); + + if(!o02a("ORC", o02)) errors << "ERRORE TABELLA: O02A\n"; // O02A ORC + if(!o02a("PRC", o02)) errors << "ERRORE TABELLA: O02A\n"; // O02A PRC + if(!o02c("ORC", o02)) errors << "ERRORE TABELLA: O02C\n"; // O02C ORC + if(!o02c("PRC", o02)) errors << "ERRORE TABELLA: O02C\n"; // O02C PRC + + endExport(o02); // INIZIO O03 - TString o03; o03 << startExport(DSN, usr, psw, "O03"); + TString o03; o03 << startExport("O03"); - if(!o03a(DSN, usr, psw, o03)) errors << "ERRORE TABELLA: O03A\n"; // O03A + if(!o03a(o03)) errors << "ERRORE TABELLA: O03A\n"; // O03A - endExport(DSN, usr, psw, o03); + endExport(o03); + + // INIZIO p01 - TString p01; p01 << startExport(DSN, usr, psw, "P01"); + TString p01; p01 << startExport("P01"); - if(!p01a(DSN, usr, psw, p01)) errors << "ERRORE TABELLA: P01A\n"; // P01A - if(!p01b(DSN, usr, psw, p01)) errors << "ERRORE TABELLA: P01B\n"; // P01B + if(!p01a(p01)) errors << "ERRORE TABELLA: P01A\n"; // P01A + if(!p01b(p01)) errors << "ERRORE TABELLA: P01B\n"; // P01B - endExport(DSN, usr, psw, p01); + endExport(p01); + + // INIZIO p02 - TString p02; p02 << startExport(DSN, usr, psw, "P02"); + TString p02; p02 << startExport("P02"); - if(!p02a(DSN, usr, psw, p02)) errors << "ERRORE TABELLA: P02A\n"; // P02A + if(!p02a(p02)) errors << "ERRORE TABELLA: P02A\n"; // P02A + + endExport(p02); - endExport(DSN, usr, psw, p02); return errors; } // Non sono molto sicuro del suo funzionamento -bool TCampass_app::a01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const +bool TCampass_app::a01a(const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -240,7 +263,7 @@ bool TCampass_app::a01a(const TString& DSN, const TString& usr, const TString& p TRelation rilprod(LF_RILPROD),rdoc(LF_RIGHEDOC); int items; TString msg("Esportazione tabella "); msg << "A01A"; - TCursor curRilprod(&rilprod, "CODNUM = \"ORC\""); + TCursor curRilprod(&rilprod, "CODNUM = \"ORC\" && QTA >= 0"); items = curRilprod.items(); TProgress_monitor p(items, msg); @@ -282,8 +305,8 @@ bool TCampass_app::a01a(const TString& DSN, const TString& usr, const TString& p TRectype rowRDoc = curRdoc.curr(); // Dichiaro la stringa TString sqlQuery; - sqlQuery << "INSERT INTO A01A ( IKRUNIMP, FAZI, CPRD, NMOV, CMAC, QPFPRO, FSALDO ) \ - VALUES('" << id << "','U','" << zeroFill(rowRDoc.get("NDOC")) << "." << rowRDoc.get("NRIGA") << "','1','" << rowRilprod.get("LINEA") << "','" << rowRilprod.get("QTA") << "','"; + sqlQuery << "INSERT INTO A01A ( IKRUNIMP, FAZI, CStr, CPRD, NMOV, CMAC, QPFPRO, FSALDO ) \ + VALUES('" << id << "','U','DBS','" << zeroFill(rowRDoc.get("NDOC")) << "." << rowRDoc.get("NRIGA") << "','1','" << rowRilprod.get("LINEA") << "','" << rowRilprod.get("QTA") << "','"; sqlQuery << (rowRilprod.get("CHIUSO") == "X" ? "1" : "0"); sqlQuery << "');"; if(sqlset.exec(sqlQuery) != 1) return false; @@ -292,7 +315,8 @@ bool TCampass_app::a01a(const TString& DSN, const TString& usr, const TString& p } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const + +bool TCampass_app::o01a(const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -369,7 +393,60 @@ bool TCampass_app::o01a(const TString& DSN, const TString& usr, const TString& p } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o02a(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const + +bool TCampass_app::o01e(const TString id) const +{ + TODBC_recordset sqlset("", true); + // Controllo la connessione + if (!sqlset.connect(DSN, usr, psw)) + return false; + TRelation doc(LF_DOC),rdoc(LF_RIGHEDOC); + int items; + TString msg("Esportazione tabella "); msg << "O01E"; + // Creo il filtro per la chiave del cursore, da quel che ho capito le chiavi sono più veloci di un filtro (come è possibile?) + TRectype filtroRDoc(rdoc.curr()); filtroRDoc.put("CODNUM", "ORP1"); + TCursor curRDoc(&rdoc, "", 1, &filtroRDoc, &filtroRDoc); + items = curRDoc.items(); + TProgress_monitor p(items, msg); + // Adesso inserisco tutta la bella roba + for (curRDoc = 0; curRDoc.pos() < items && !p.is_cancelled(); ++curRDoc) + { + TRectype rowRDoc = curRDoc.curr(); + + // Vado a prendere la riga di riferimento + TRectype filtroFiltro(rdoc.curr()); + if(rowRDoc.get("DACODNUM") == "ORC") + { + filtroFiltro.put("CODNUM", rowRDoc.get("DACODNUM")); + filtroFiltro.put("ANNO", rowRDoc.get("DAANNO")); + filtroFiltro.put("PROVV", rowRDoc.get("DAPROVV")); + filtroFiltro.put("NDOC", rowRDoc.get("DANDOC")); + filtroFiltro.put("NRIGA", rowRDoc.get("DAIDRIGA")); + TCursor curFiltro(&rdoc, "RIGAEVASA != \"X\"", 1, &filtroFiltro, &filtroFiltro); + for (curFiltro = 0; curFiltro.pos() < curFiltro.items() && !p.is_cancelled(); ++curFiltro) + { + TRectype rowFiltro(curFiltro.curr()); + // Dichiaro la stringa + TString sqlQuery; + TString codagg; codagg << rowFiltro.get("CODAGG1"); + // Inserisco IIKRUNIMP, FAZI, CStr, CPRD, CART + sqlQuery << "INSERT INTO O01E ( IKRUNIMP, CPRD, CPARAM, CPARVAL ) \ + VALUES('" << id << "','" << zeroFill(rowRDoc.get("NDOC")) << "." << rowRDoc.get("NRIGA") << "','TONING','" << codagg.sub(0,5) << "');"; + sqlQuery << "INSERT INTO O01E ( IKRUNIMP, CPRD, CPARAM, CPARVAL ) \ + VALUES('" << id << "','" << zeroFill(rowRDoc.get("NDOC")) << "." << rowRDoc.get("NRIGA") << "','CALING','" << codagg.sub(6) << "');"; + codagg = rowFiltro.get("CODAGG2"); + sqlQuery << "INSERT INTO O01E ( IKRUNIMP, CPRD, CPARAM, CPARVAL ) \ + VALUES('" << id << "','" << zeroFill(rowRDoc.get("NDOC")) << "." << rowRDoc.get("NRIGA") << "','TONUSC','" << codagg.sub(0,5) << "');"; + sqlQuery << "INSERT INTO O01E ( IKRUNIMP, CPRD, CPARAM, CPARVAL ) \ + VALUES('" << id << "','" << zeroFill(rowRDoc.get("NDOC")) << "." << rowRDoc.get("NRIGA") << "','CALUSC','" << codagg.sub(6) << "');"; + if(sqlset.exec(sqlQuery) != 1) + return false; + } + } + } + return sqlset.commit() == -1 ? false : true; +} +bool TCampass_app::o02a(const TString CodNum, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -422,7 +499,7 @@ bool TCampass_app::o02a(const TString CodNum, const TString& DSN, const TString& } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o02c(const TString CodNum, const TString& DSN, const TString& usr, const TString& psw, const TString id) const +bool TCampass_app::o02c(const TString CodNum, const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -473,7 +550,7 @@ bool TCampass_app::o02c(const TString CodNum, const TString& DSN, const TString& } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::o03a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const +bool TCampass_app::o03a(const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -507,7 +584,7 @@ bool TCampass_app::o03a(const TString& DSN, const TString& usr, const TString& p } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::p01a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const +bool TCampass_app::p01a(const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -610,18 +687,24 @@ bool TCampass_app::p01a(const TString& DSN, const TString& usr, const TString& p } return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::p01b(const TString& DSN, const TString& usr, const TString& psw, const TString id) const +bool TCampass_app::p01b(const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione if (!sqlset.connect(DSN, usr, psw)) return false; - TRelation anamag(LF_ANAMAG); - int items; + TRelation anamag(LF_ANAMAG), tab(LF_TAB); + int items, itemsTab; TString msg("Esportazione tabella "); msg << "P01B"; - TCursor curAna(&anamag, "USER3 != \"\""); + // Anamag + TCursor curAna(&anamag); items = curAna.items(); + // Tab + + TProgress_monitor p(items, msg); + + // Adesso inserisco tutta la bella roba for (curAna = 0; curAna.pos() < items && !p.is_cancelled(); ++curAna) { @@ -632,19 +715,43 @@ bool TCampass_app::p01b(const TString& DSN, const TString& usr, const TString& p // Prendo la riga di TAB TRectype rowAna = curAna.curr(); - + // Dichiaro la stringa TString sqlQuery; - // Inserisco Tutto - sqlQuery << "INSERT INTO P01B ( IKRUNIMP, CStr, CART, CPARAM, CPARVAL ) \ - VALUES('" << id << "','DBS','" << rowAna.get("CODART") << "','MISREA','" << rowAna.get("USER3") << "x"<< rowAna.get("USER4") << "');"; - if(sqlset.exec(sqlQuery) != 1) + if(rowAna.get("USER3") != "") + { + // Inserisco Tutto + sqlQuery << "INSERT INTO P01B ( IKRUNIMP, CStr, CART, CPARAM, CPARVAL ) \ + VALUES('" << id << "','DBS','" << toEscape(rowAna.get("CODART")) << "','MISREA','" << rowAna.get("USER3") << "x"<< rowAna.get("USER4") << "');"; + } + + TString anamagCod(rowAna.get("CODART")), filtroCodTab; + filtroCodTab << "3" << anamagCod.sub(6,12); + // Tab ******************************************************************************************************************************************************* + // Filtri + TRectype filtroTab(tab.curr()); + filtroTab.put("COD","GCA"); + filtroTab.put("CODTAB",filtroCodTab); + // Cursore + TCursor curTab(&tab, "", 1, &filtroTab, &filtroTab); + // Items + itemsTab = curTab.items(); + if (itemsTab > 0) + bool yeah = true; + for (curTab = 0; curTab.pos() < itemsTab && !p.is_cancelled(); ++curTab) + { + TRectype rowTab = curTab.curr(); + sqlQuery << "INSERT INTO P01B ( IKRUNIMP, CStr, CART, CPARAM, CPARVAL ) \ + VALUES('" << id << "','DBS','" << toEscape(rowAna.get("CODART")) << "','FORING','" << rowTab.get("S0") << "');"; + } + if(sqlQuery != "" && sqlset.exec(sqlQuery) != 1) return false; } + return sqlset.commit() == -1 ? false : true; } -bool TCampass_app::p02a(const TString& DSN, const TString& usr, const TString& psw, const TString id) const +bool TCampass_app::p02a(const TString id) const { TODBC_recordset sqlset("", true); // Controllo la connessione @@ -685,67 +792,24 @@ bool TCampass_app::p02a(const TString& DSN, const TString& usr, const TString& p void TCampass_app::main_loop() { TCampass_msk m; - bool batch = false; - int mins = 1; - - if (argc() > 2) + while (m.run() == K_ENTER) { - const TFixed_string a(argv(2)); - - batch = toupper(a[1]) == 'M'; - mins = atoi(a.right(1)); - if (mins <1) - mins = 1; - } - - if (batch) - { - const WINDOW task =TASK_WIN; - WINDOW tray = xvt_trayicon_create(task, 10212, name()); // Washing machine - - if (tray != NULL_WIN) - xvt_vobj_set_visible(task, FALSE); - xvt_timer_create(m.win(), mins * 60 * 1000L); - while (m.run() == K_ENTER) + const TString& DSN = m.get(F_DSN); + const TString& usr = m.get(F_USR); + const TString& psw = m.get(F_PWD); + if(checkParameters(DSN, usr, psw)) { - const TString& DSN = m.get(F_DSN); - const TString& usr = m.get(F_USR); - const TString& psw = m.get(F_PWD); - // Non ho la più pallida idea di cosa siano ste robe - xvt_vobj_set_visible(task, TRUE); - TString errors; errors << esporta(DSN, usr, psw); - if(errors == "") - { - message_box("Esportazione effettuata correttamente!"); - // Salvo i parametri - ini_set_string(CONFIG_DITTA, "Campo_Compass", "DSN", DSN); - ini_set_string(CONFIG_DITTA, "Campo_Compass", "User", usr); - ini_set_string(CONFIG_DITTA, "Campo_Compass", "Password", psw); - } - else message_box(errors); - xvt_vobj_set_visible(task, FALSE); - } - xvt_trayicon_destroy(tray); - } - else - { - while (m.run() == K_ENTER) - { - const TString& DSN = m.get(F_DSN); - const TString& usr = m.get(F_USR); - const TString& psw = m.get(F_PWD); // Chiamo la funzione globale esporta TString errors; errors << esporta(DSN, usr, psw); if(errors == "") { message_box("Esportazione effettuata correttamente!"); // Salvo i parametri - ini_set_string(CONFIG_DITTA, "Campo_Compass", "DSN", DSN); - ini_set_string(CONFIG_DITTA, "Campo_Compass", "User", usr); - ini_set_string(CONFIG_DITTA, "Campo_Compass", "Password", psw); } else message_box(errors); } + else + message_box("Fallita connessione"); } }