diff --git a/ve/velib02.cpp b/ve/velib02.cpp index f2c921180..d2a909446 100755 --- a/ve/velib02.cpp +++ b/ve/velib02.cpp @@ -58,10 +58,13 @@ void TDocumentoEsteso::compile_summary() const int items = rows(); _summary_table.destroy(); + _summary_array.destroy(); _imposte = 0.0; _importi_netti = 0.0; const bool val = in_valuta(); - // Scorre tutte le righe e compila la tabellina _summary_table + // Scorre tutte le righe e compila la tabellina _summary_table, per codice iva, + // nonche' il galactic_array _summary_array dove le informazioni sono registrate per singola riga + // cio' ad usi generici: porco diavolo! for (int i = 1; i <= items; i++) { TRectype& r = row(i); @@ -89,23 +92,32 @@ void TDocumentoEsteso::compile_summary() iva.ceil(val ? _parm.imp_val : _parm.imp_lit); // imposta calcolata // Aggiorna o aggiunge l'elemento se non esiste - TRiepilogo_Iva riepilogo_tmp; + TRiepilogo_Iva riepilogo_tmp,row_riep; const bool exists = _summary_table.is_key(codiva); TRiepilogo_Iva& riepilogo = (exists ? (TRiepilogo_Iva&)_summary_table[codiva] : riepilogo_tmp); // Aggiorna anche il totale importi netti ed il totale imposte _importi_netti += imponibile; _imposte += iva; riepilogo.imp() += imponibile; riepilogo.iva() += iva; + row_riep.imp() = imponibile; row_riep.iva() = iva; riepilogo.ali() = aliquota; riepilogo.cod() = codiva; + row_riep.ali() = aliquota; row_riep.cod() = codiva; TString16 tipo(_iva->get("S1")); - if (tipo == "VE") riepilogo.tipo() = 2; - else if (tipo == "ES") riepilogo.tipo() = 4; - else if (tipo == "NI") riepilogo.tipo() = 8; - else if (tipo == "NS") riepilogo.tipo() = 16; - else riepilogo.tipo() = 1; // Regime IVA normale + int tipo_i = 1;// Regime IVA normale + if (tipo == "VE") tipo = 2; + else if (tipo == "ES") tipo = 4; + else if (tipo == "NI") tipo = 8; + else if (tipo == "NS") tipo= 16; + riepilogo.tipo() = tipo_i; + row_riep.tipo() = tipo_i; if (riepilogo.tipo() != 1) // Se non e' regime normale salva anche la descrizione - riepilogo.des() = _iva->get("S0"); + { + TString s(_iva->get("S0")); + riepilogo.des() = s; + row_riep.des() = s; + } _summary_table.add(codiva,riepilogo,exists); + _summary_array.add(row_riep,nriga); } // Inizializza l'array di ordine for (i = 0; i<32;i++) @@ -187,7 +199,7 @@ void TDocumentoEsteso::scadenze_recalc() const bool valuta = in_valuta(); if (valuta) { - real change(cambio()); + const real change(cambio()); real val1 = totimponibili * change; real val2 = totimposte * change; real val3 = totspese * change; diff --git a/ve/velib02.h b/ve/velib02.h index 35bd7fbc3..c9872e48c 100755 --- a/ve/velib02.h +++ b/ve/velib02.h @@ -88,7 +88,8 @@ class TDocumentoEsteso : public TDocumento int _sum_filter; // Filtro corrente della riga TRiepilogo_Iva in corso di stampa (-1 se non ha ancora calcolato la tabella) TString_array _order_array; // Array di TToken_string contenenti i codici IVA soddisfacenti ad ogni tipo di filtro TAssoc_array _summary_table; // Array dove vengono memorizzate le imposte per aliquota - TRiepilogo_Iva _sum_current; // Riga corrente del riepilogo + TArray _summary_array; // Array dove vengono memorizzate le imposte/imponibili per riga + TRiepilogo_Iva _sum_current; // Riga corrente del riepilogo // membri per il calcolo del riepilogo scadenze TString_array _scadenze_array;// Array che contiene le scadenze ("|") @@ -102,10 +103,12 @@ public: void compile_summary(); // Aggiorna la tabella riepilogativa void summary_filter(byte selector); // filtra la tabellina secondo il filtro corrente se non e' gia' stato fatto void summary_set_next(); // seleziona il prossimo elemento del filtro - TRiepilogo_Iva& sum_current() { return _sum_current; } // ritorna la riga corrente del filtro corrente + const TRiepilogo_Iva& sum_current() { return _sum_current; } // ritorna la riga corrente del filtro corrente const char * summary_get(const TString& w); // ritorna l'informazione richiesta estratta dall'elemento corrente int summary_items() { return _summary_table.items();} // ritorna il numero di righe in totale della tabellina - TAssoc_array& summary() { return _summary_table; } + const TAssoc_array& summary() { return _summary_table; } + const TArray& summary_array() { return _summary_array;} + // Funzioni per il ricalcolo delle scadenze void scadenze_recalc(); // resetta e ricalcola le scadenze