Patch level :2.1 28

Files correlati     :or1.exe
Ricompilazione Demo : [ ]
Commento            :
Corretta stampa ordini per numero: nel caso di ordine con piu' righe di differenti tipiriga (ad
es. merce), stampava solo le righe del primo tiporiga (merce, nell'esempio) trovato nella tabella
dei tipiriga. Correzione estesa a tutti i tipi riga.


git-svn-id: svn://10.65.10.50/trunk@11988 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2004-04-22 15:04:25 +00:00
parent f02c8b44f0
commit 912337c3e7

View File

@ -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;
}
add_tiporiga(cond, 'D');
cond << ")";
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...