Aggiunta classe TCodicenumerazione e cambiata la

classe RiepilogoIVA in TRiepilogoIVA.
Impostati i parametri di default in TDcoumentoEsteso.


git-svn-id: svn://10.65.10.50/trunk@3417 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1996-08-21 10:24:21 +00:00
parent 484b8e471c
commit fb9ea98854
2 changed files with 121 additions and 22 deletions

View File

@ -1,18 +1,57 @@
#include "velib02.h"
////////////////
// Riepilogo IVA
////////////////
Riepilogo_Iva& Riepilogo_Iva::operator=(Riepilogo_Iva& a)
/////////////////////////////////////////////////////////////
// TCodice_numerazione
/////////////////////////////////////////////////////////////
TCodice_numerazione::TCodice_numerazione(const char* codnum)
: TRectype(LF_TABCOM), _status(NOERR)
{
settab("NUM");
if (codnum && *codnum)
_status = read(codnum);
}
TCodice_numerazione::TCodice_numerazione(const TRectype& rec)
: TRectype(rec), _status(NOERR)
{ }
TCodice_numerazione::~TCodice_numerazione()
{
}
const TString& TCodice_numerazione::complete_num(long num)
{
TString codnum;
codnum.format("%ld");
codnum << prefisso();
codnum << num;
codnum << postfisso();
return codnum;
}
int TCodice_numerazione::read(const char* codnum)
{
TTable t("%NUM");
put("CODTAB", codnum);
int err = TRectype::read(t);
if (err != NOERR)
yesnofatal_box("Codice numerazione errato: %s", codnum);
return err;
}
/////////////////////////////////////////////////////////////
// TRiepilogo IVA
/////////////////////////////////////////////////////////////
TRiepilogo_Iva& TRiepilogo_Iva::operator=(TRiepilogo_Iva& a)
{
_imp = a.imp(); _iva = a.iva(); _ali = a.ali();
_cod = a.cod(); _tipo = a.tipo(); _des = a.des();
return *this;
}
//////////////////
/////////////////////////////////////////////////////////////
//TDocumentoEsteso
//////////////////
/////////////////////////////////////////////////////////////
void TDocumentoEsteso::compile_summary()
{
_sum_filter = 0;
@ -50,9 +89,9 @@ void TDocumentoEsteso::compile_summary()
iva.ceil(val ? _parm.imp_val : _parm.imp_lit); // imposta calcolata
// Aggiorna o aggiunge l'elemento se non esiste
Riepilogo_Iva riepilogo_tmp;
TRiepilogo_Iva riepilogo_tmp;
const bool exists = _summary_table.is_key(codiva);
Riepilogo_Iva& riepilogo = (exists ? (Riepilogo_Iva&)_summary_table[codiva] : riepilogo_tmp);
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;
@ -86,7 +125,7 @@ void TDocumentoEsteso::summary_filter(byte selector)
// Procedimento:
// Memorizza in un TString_array tante TToken_string quanti sono i filtri possibili
// (al massimo 31 [1+2+4+8+16]). Ogni TToken_string contiene i codici IVA
// delle righe di Riepilogo_Iva che soddisfano la condizione di filtro
// delle righe di TRiepilogo_Iva che soddisfano la condizione di filtro
_sum_selected = TRUE;
_sum_filter = selector;
TToken_string& codici = _order_array.row(_sum_filter-1);
@ -96,12 +135,12 @@ void TDocumentoEsteso::summary_filter(byte selector)
// Scorre sequenzialmente la tabella _summary_table e compone la TToken_string coni codici IVA
const int items = _summary_table.items();
Riepilogo_Iva* curr = (Riepilogo_Iva *) _summary_table.first_item();
TRiepilogo_Iva* curr = (TRiepilogo_Iva *) _summary_table.first_item();
for (int i = 0; i < items && curr != NULL; i++)
{
if (curr->tipo() & _sum_filter) // se fa parte del filtro selezionato schiaffa il codice nella TToken_string
codici.add(curr->cod());
curr = (Riepilogo_Iva*) _summary_table.succ_item();
curr = (TRiepilogo_Iva*) _summary_table.succ_item();
}
codici.restart();
summary_set_next(); // setta l'elemento corrente
@ -117,7 +156,7 @@ void TDocumentoEsteso::summary_set_next()
if (codiva.not_empty() && _summary_table.is_key(codiva))
{
// Estrae da _summary_table i dati relativio al codice corrispondente.
Riepilogo_Iva& riep= (Riepilogo_Iva&) _summary_table[codiva];
TRiepilogo_Iva& riep= (TRiepilogo_Iva&) _summary_table[codiva];
_sum_current = riep;
}
else
@ -221,12 +260,12 @@ real TDocumentoEsteso::tot_imponibili(byte selector)
real number = 0.0;
const int items = _summary_table.items();
Riepilogo_Iva* curr = (Riepilogo_Iva *) _summary_table.first_item();
TRiepilogo_Iva* curr = (TRiepilogo_Iva *) _summary_table.first_item();
for (int i = 0; i < items && curr != NULL; i++)
{
if (curr->tipo() & selector) // se fa parte del filtro selezionato schiaffa il codice nella TToken_string
number += curr->imp();
curr = (Riepilogo_Iva*) _summary_table.succ_item();
curr = (TRiepilogo_Iva*) _summary_table.succ_item();
}
return number;
}
@ -262,6 +301,21 @@ TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, TCliFor *cli)
{
_iva = new TTable("%IVA");
if (cli != NULL) _condv = new TCond_vendita(*cli);
else
{
TCliFor cf;
TString16 tipocf,ocfpi;
long codcf;
tipocf = get("TIPOCF");
codcf = get_long("CODCF");
ocfpi = get("OCFPI");
cf.load(tipocf[0],codcf,ocfpi);
_condv = new TCond_vendita(cf);
}
// Inizializza i parametri di default
_parm.pri_lit = 0; _parm.pri_val = 3;
_parm.qta_lit = 3; _parm.qta_val = 3;
_parm.imp_lit = 0; _parm.imp_val = 3;
}
TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, dec_parm & parm, TCliFor *cli)
@ -270,6 +324,23 @@ TDocumentoEsteso::TDocumentoEsteso(const TRectype& rec, dec_parm & parm, TCliFor
_parm = parm;
_iva = new TTable("%IVA");
if (cli != NULL) _condv = new TCond_vendita(*cli);
else
{
TCliFor cf;
TString16 tipocf,ocfpi;
long codcf;
tipocf = get("TIPOCF");
codcf = get_long("CODCF");
ocfpi = get("OCFPI");
cf.load(tipocf[0],codcf,ocfpi);
_condv = new TCond_vendita(cf);
}
}
TDocumentoEsteso::TDocumentoEsteso()
: TDocumento(), _condv(NULL), _sum_filter(-1), _sum_selected(FALSE), _scadenze_current(-1)
{
_iva = new TTable("%IVA");
}
TDocumentoEsteso::~TDocumentoEsteso()

View File

@ -17,11 +17,38 @@ struct dec_parm {
// add other groups here
};
class TCodice_numerazione : public TRectype
{
int _status;
protected:
int read(const char * cod);
public:
TObject* dup() const { return new TCodice_numerazione(codice()); }
public:
const TString& codice() const { return get("CODTAB"); }
const TString& prefisso() const { return get("S6"); }
const TString& postfisso() const { return get("S7"); }
const bool manual_num() const { return get_bool("B0"); }
const bool auto_num() const { return get_bool("B1"); }
const TString& tipo_doc1() { return get("S2").mid(0,4);}
const TString& tipo_doc2() { return get("S2").mid(4,4);}
const TString& tipo_doc3() { return get("S2").mid(8,4);}
const TString& tipo_doc4() { return get("S2").mid(12,4);}
const TString& tipo_doc5() { return get("S2").mid(16,4);}
const TString& complete_num (long num);
int status() { return _status; }
TCodice_numerazione(const char* codnum = NULL);
TCodice_numerazione(const TRectype& rec);
virtual ~TCodice_numerazione();
};
//////////////////////////////////////////////////////////////////////////////////////////////
// classe TDocumentoEsteso: oggetto che ha come finalita' il calcolo dei riepiloghi IVA
//////////////////////////////////////////////////////////////////////////////////////////////
class Riepilogo_Iva : public TObject
class TRiepilogo_Iva : public TObject
{
real _imp;
real _iva;
@ -40,10 +67,10 @@ public:
TString& des() { return _des;} // Descrizione
byte& tipo(){ return _tipo;}// Tipo (Vedi opzioni per la selzione di filtro nella validate())
void zero(){ _imp = 0.0; _iva = 0.0; _ali = 0.0; _tipo = 0; _cod = ""; _des = ""; }
virtual TObject* dup() const { return new Riepilogo_Iva(*this); }
Riepilogo_Iva& operator = (Riepilogo_Iva& a);
Riepilogo_Iva() {_imp = 0.0; _iva = 0.0; _ali = 0.0; _tipo = 0;}
~Riepilogo_Iva() {};
virtual TObject* dup() const { return new TRiepilogo_Iva(*this); }
TRiepilogo_Iva& operator = (TRiepilogo_Iva& a);
TRiepilogo_Iva() {_imp = 0.0; _iva = 0.0; _ali = 0.0; _tipo = 0;}
~TRiepilogo_Iva() {};
};
class TDocumentoEsteso : public TDocumento
@ -58,10 +85,10 @@ class TDocumentoEsteso : public TDocumento
// membri per il calcolo del riepilogo IVA
bool _sum_selected; // TRUE se ha selezionato una riga del riepilogo, funge da semaforo per leggere la prossima
int _sum_filter; // Filtro corrente della riga Riepilogo_Iva in corso di stampa (-1 se non ha ancora calcolato la tabella)
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
Riepilogo_Iva _sum_current; // Riga corrente del riepilogo
TRiepilogo_Iva _sum_current; // Riga corrente del riepilogo
// membri per il calcolo del riepilogo scadenze
TString_array _scadenze_array;// Array che contiene le scadenze ("<data>|<importo>")
@ -75,7 +102,7 @@ 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
Riepilogo_Iva& sum_current() { return _sum_current; } // ritorna la riga corrente del filtro corrente
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; }
@ -110,6 +137,7 @@ public:
void set_condv(TCliFor * cli); // Cambia le condizioni di vendita
TDocumentoEsteso (const TRectype & rec, dec_parm & parm, TCliFor * cli = NULL) ;
TDocumentoEsteso (const TRectype & rec, TCliFor * cli = NULL) ;
TDocumentoEsteso () ;
~TDocumentoEsteso();
};