diff --git a/or/or1100.cpp b/or/or1100.cpp index af2d47d4b..e093a652f 100755 --- a/or/or1100.cpp +++ b/or/or1100.cpp @@ -63,6 +63,7 @@ protected: bool document_row_filter(const TRectype& row) const; static bool document_filter(const TRelation* rel); + void add_tiporiga(TString& cond, const char tipo); virtual bool create(); virtual bool destroy(); @@ -163,8 +164,15 @@ bool TStampa_ordini::create() TTable tri ("%TRI"); for (err = tri.first(); err == NOERR; err = tri.next()) { + const TString& tiporiga = tri.get("S7"); + TToken_string* tok = (TToken_string*)_tipi_riga.objptr(tiporiga); + if (tok == NULL) + { + tok = new TToken_string; + _tipi_riga.add(tiporiga, tok); + } const TString& ss = tri.get("CODTAB"); - _tipi_riga.add(tri.get("S7"), ss); + tok->add(ss); } return TSkeleton_application::create(); @@ -288,6 +296,23 @@ void TStampa_ordini::show_body_field_for_number(short id, bool on, int from, int } } +void TStampa_ordini::add_tiporiga(TString& cond, const char tipo) +{ + TString s; + const char strtipo[2] = {tipo, '\0'}; + TToken_string* codici = (TToken_string*)_tipi_riga.objptr(strtipo); + if (codici != NULL) + { + FOR_EACH_TOKEN((*codici), tok) + { + s.format("(%d->TIPORIGA==\"%s\")", LF_RIGHEDOC, tok); + if (cond.not_empty()) + cond << "||"; + cond << s; + } + } +} + void TStampa_ordini::filter_for_number() { CHECK(_frm, "Form non valido"); @@ -398,40 +423,26 @@ void TStampa_ordini::filter_for_number() TString cond; // Aggiunge filtro sui tipi di riga - s.format("((%d->TIPORIGA==\"%s\")", LF_RIGHEDOC, (const char*)(TString&)_tipi_riga["M"]); - cond << s; + // E' abbastanza utile avere tutti i tipi riga merce + // Carica i tipi riga dalla tabella TRI + add_tiporiga(cond, 'M'); if (_pr_spese) - { - s.format("||(%d->TIPORIGA==\"%s\")", LF_RIGHEDOC,(const char*)(TString&)_tipi_riga["S"]); - cond << s; - } + add_tiporiga(cond, 'S'); if (_pr_prest) - { - s.format("||(%d->TIPORIGA==\"%s\")", LF_RIGHEDOC,(const char*)(TString&)_tipi_riga["P"]); - cond << s; - } - + add_tiporiga(cond, 'P'); + if (_pr_sconti) - { - s.format("||(%d->TIPORIGA==\"%s\")", LF_RIGHEDOC,(const char*)(TString&)_tipi_riga["C"]); - cond << s; - } + add_tiporiga(cond, 'C'); if (_pr_omaggi) - { - s.format("||(%d->TIPORIGA==\"%s\")", LF_RIGHEDOC,(const char*)(TString&)_tipi_riga["O"]); - cond << s; - } - + add_tiporiga(cond, 'O'); + if (_pr_descr) - { - s.format("||(%d->TIPORIGA==\"%s\")", LF_RIGHEDOC,(const char*)(TString&)_tipi_riga["D"]); - cond << s; - } - - cond << ")"; + add_tiporiga(cond, 'D'); + + cond.insert("("); cond << ")"; // TBI: stampa righe di sconto testata od esenzione. Siccome non sono righe fisiche // credo sara' necessario implementarle con un messaggio nella validate...