Patch level :2.2 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :stampa rendiconto in progress


git-svn-id: svn://10.65.10.50/trunk@13286 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-07-21 17:37:47 +00:00
parent bb62d58a1d
commit b5c039183c

View File

@ -320,6 +320,8 @@ TPrint_rendiconto_ca_mask::TPrint_rendiconto_ca_mask()
class TPrint_rendiconto_ca_recordset : public TISAM_recordset
{
TExternisamfile* _tmp;
bool _riclassificato;
TString _prefix, _da_conto_riclas, _a_conto_riclas;
protected:
int _anno;
@ -346,7 +348,7 @@ protected:
public:
virtual void set_filter(const TPrint_rendiconto_ca_mask& msk, int cms_row);
TPrint_rendiconto_ca_recordset(const TString& sql) : TISAM_recordset(sql) { _tmp = NULL;}
TPrint_rendiconto_ca_recordset(const TString& sql) : TISAM_recordset(sql), _riclassificato(false) { _tmp = NULL;}
~TPrint_rendiconto_ca_recordset() {}
};
@ -411,10 +413,20 @@ void TPrint_rendiconto_ca_recordset::set_custom_filter(TCursor& cur) const
//filtro sul file esterno (_tmp, cioè 1000) sui conti selezionati sulla maschera
TRectype darec(cur.curr()), arec(cur.curr()); //curr perchè è il file externisamfile
darec.put("CONTO", _daconto);
darec.put("DATA", _dadata);
arec.put("CONTO", _aconto);
if (!_riclassificato)
{
darec.put("CONTO", _daconto);
arec.put("CONTO", _aconto);
}
else
{
darec.put("CONTO", _da_conto_riclas);
arec.put("CONTO", _a_conto_riclas);
}
darec.put("DATA", _dadata);
arec.put("DATA", _adata);
cur.setregion(darec, arec);
myself = this;
@ -516,45 +528,68 @@ void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, cons
//compila i campi da stampare
// il conto puo' essere analitico o contabile...
//se si usa il piano dei conti contabile ed è compilato l'archivio di collegamento PANAPDC
//si deve usare come conto il campo codconto del panapdc!!!...
TConfig_anal ini;
const bool use_pdc = ini.get_bool("UsePdcc");
TLocalisamfile panapdc(LF_PANAPDC);
panapdc.setkey(2);
if (use_pdc && panapdc.first() == NOERR)
//se è compilato l'archivio di collegamento PANAPDC
//si deve usare come conto il campo codconto del panapdc!!!...
if (_riclassificato)
{
TRectype& rec_panapdc = panapdc.curr();
TString conto_riclassificato; //stringa che conterrà il conto riclassificato (se sara' trovato)
//prende il gruppo dalla riga rmovana in esame
const int gruppo = atoi(rmovana.get(RMOVANA_CODCONTO).left(3));
const int conto = atoi(rmovana.get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto = atol(rmovana.get(RMOVANA_CODCONTO).mid(6,6));
rec_panapdc.put(PANAPDC_GRUPPO, gruppo);
rec_panapdc.put(PANAPDC_CONTO, conto);
rec_panapdc.put(PANAPDC_SOTTOCONTO, sottoconto);
int err = panapdc.read(rec_panapdc, _isgteq);
//poichè non puo' avere la chiave 2 completa, visto che sta cercando l'ultimo elemento..
//deve fare il confronto campo a campo dei gr/co/sottoc del record corrente con quelli
//estratti qualche riga sopra da rmovana
const int curr_gruppo = rec_panapdc.get_int(PANAPDC_GRUPPO);
if (gruppo - curr_gruppo == 0)
//relazione e cursore su panapdc alla ricerca del conto riclassificato corrispondente
//alla triade gr/co/sottoc di rmovana
TRelation rel_panapdc(LF_PANAPDC);
//servono solamente i record con il gruppo = al gruppo di rmovana
TRectype da_panapdc(LF_PANAPDC);
da_panapdc.put(PANAPDC_GRUPPO, gruppo);
TString filtro;
if (_prefix.not_empty())
filtro << "(CODCONTO[1," << _prefix.len() << "]=='" << _prefix << "')";
TCursor cur_panapdc(&rel_panapdc, filtro, 2, &da_panapdc, &da_panapdc);
const long panapdc_items = cur_panapdc.items();
cur_panapdc.freeze();
if (panapdc_items > 0) //se non ci sono record con il gruppo=rmovana.gruppo ed il prefisso voluto->salta l'rmovana
{
const int curr_conto = rec_panapdc.get_int(PANAPDC_CONTO);
if (conto - curr_conto == 0)
{
const long curr_sottoconto = rec_panapdc.get_long(PANAPDC_SOTTOCONTO);
if (sottoconto - curr_sottoconto == 0)
TRectype& rec_panapdc = cur_panapdc.curr();
for (cur_panapdc = 0; cur_panapdc.pos() < panapdc_items; ++cur_panapdc)
{
int current_conto = rec_panapdc.get_int(PANAPDC_CONTO);
long current_sottoconto = rec_panapdc.get_long(PANAPDC_SOTTOCONTO);
if (current_conto == 0 && current_sottoconto == 0)
{
const TString80 codconto = rec_panapdc.get(PANAPDC_CODCONTO);
_tmp->curr().put("CONTO", codconto);
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
_tmp->curr().put("CONTO", conto_riclassificato);
break; //esce dal casino e passa ai campi successivi
}
else if (conto == current_conto && current_sottoconto == 0)
{
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
_tmp->curr().put("CONTO", conto_riclassificato);
break; //esce dal casino e passa ai campi successivi
}
}
}
else if (conto == current_conto && sottoconto == current_sottoconto)
{
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
_tmp->curr().put("CONTO", conto_riclassificato);
break; //esce dal casino e passa ai campi successivi
}
} //for sugli elementi del cursore
} //if panapdc_items > 0
//ATTENZIONE! Se era stata operata una selezione sui conti riclassificati nella maschera
//ed il conto riclassificato attuale non ricade nell'intervallo selezionato il programma
//non deve aggiungere il record al file!!
if (conto_riclassificato < _da_conto_riclas || conto_riclassificato > _a_conto_riclas)
return;
}
else //...sennò si usa il normale piano dei conti analitico
else //...sennò si usa il normale piano dei conti analitico (cioè tutti tranne che il CRPA)
_tmp->curr().put("CONTO", rmovana.get(RMOVANA_CODCONTO)); //conto
//i movimenti possono essere normali o generati da documento...
@ -674,11 +709,15 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rmovana()
rel_rmovana.add(LF_MOVANA, "NUMREG==NUMREG"); //aggiunge le testate x avere tipi mov e descr
//..crea un cursore su rmovana per vedere se i conti selezionati hanno veri movimenti che soddisfano
//i parametri del filtro sulla maschera
//i parametri del filtro sulla maschera. ACHTUNG! Questo filtro ha senso solo se non esiste la
//riclassificazione!!!
TRectype da_rmovana(LF_RMOVANA);
da_rmovana.put(RMOVANA_CODCONTO, _daconto);
TRectype a_rmovana(LF_RMOVANA);
a_rmovana.put(RMOVANA_CODCONTO, _aconto);
if (!_riclassificato)
{
da_rmovana.put(RMOVANA_CODCONTO, _daconto);
a_rmovana.put(RMOVANA_CODCONTO, _aconto);
}
TString filtro;
@ -721,8 +760,12 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rmovana()
{
const TRectype& rmovana = cur_rmovana.curr();
const TRectype& movana = rel_rmovana.curr(LF_MOVANA);
TProgind pi(rmovana_items, "Scansione righe movimenti...");
for (cur_rmovana = 0; cur_rmovana.pos() < rmovana_items; ++cur_rmovana)
{
pi.addstatus(1);
salva_rmovana(rmovana, movana, NULL);
}
}
}
@ -785,19 +828,24 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_
const long doc_items = cur_doc.items();
cur_doc.freeze();
//scanning del file dei documenti alla ricerca di quelli che hanno la data ed il CODNUM
//validi nei filtri impostati dall'utente
for (cur_doc = 0; cur_doc.pos() < doc_items; ++cur_doc)
if (doc_items > 0)
{
TDocumento doc(cur_doc.curr());
TAnal_mov mov;
cont_anal.elabora(doc, 0, NULL, false, mov);
for (int j = 1; j <= mov.rows(); j++)
{
salva_rmovana(mov.body()[j], mov, &doc);
}
}
TProgind pi(doc_items, "Scansione documenti...");
//scanning del file dei documenti alla ricerca di quelli che hanno la data ed il CODNUM
//validi nei filtri impostati dall'utente
for (cur_doc = 0; cur_doc.pos() < doc_items; ++cur_doc)
{
pi.addstatus(1);
TDocumento doc(cur_doc.curr());
TAnal_mov mov;
cont_anal.elabora(doc, 0, NULL, false, mov);
for (int j = 1; j <= mov.rows(); j++)
{
salva_rmovana(mov.body()[j], mov, &doc);
} //for int j...
} //for cur_doc..
} //if doc_items
}
}
@ -863,19 +911,51 @@ void TPrint_rendiconto_ca_recordset::set_filter(const TPrint_rendiconto_ca_mask&
const short dlg_da = tc == 'C' ? F_PDC1_INI : F_PAN1_INI;
const short dlg_al = tc == 'C' ? F_PDC1_FIN : F_PAN1_FIN;
for (int i = 0; msk.id2pos(dlg_da+i) > 0; i++)
//si utilizza la riclassificazione dei conti?
if (msk.get(F_PIANO) == "A")
_riclassificato = true;
else
_riclassificato = false;
//conti non riclassificati
if (!_riclassificato)
{
_daconto << msk.get(dlg_da+i);
_aconto << msk.get(dlg_al+i);
for (int i = 0; msk.id2pos(dlg_da+i) > 0; i++)
{
_daconto << msk.get(dlg_da+i);
_aconto << msk.get(dlg_al+i);
}
}
else //conti riclassificati
{
for (int i = 0; msk.id2pos(dlg_da+i) < 43; i++) //***43 andrebbe sostituito con una condizione + seria
{
_da_conto_riclas << msk.get(dlg_da+i);
_a_conto_riclas << msk.get(dlg_al+i);
}
}
_dadata = msk.get_date(F_DATAINI);
_adata = msk.get_date(F_DATAFIN);
_dadata = msk.get_date(F_DATAINI);
_adata = msk.get_date(F_DATAFIN);
if (_riclassificato)
{
//esiste un prefisso a più livelli?
if (msk.get(F_PRE1).not_empty())
{
_prefix << msk.get(F_PRE1);
if (msk.get(F_PRE2).not_empty())
{
_prefix << msk.get(F_PRE1);
if (msk.get(F_PRE3).not_empty())
_prefix << msk.get(F_PRE3);
}
}
}
//metodo per riempire il file
crea_righe_rmovana();
//crea_righe_rdoc(msk);
crea_righe_rdoc(msk);
}
@ -908,7 +988,7 @@ void TPrint_rendiconto_ca_rep::set_filter(const TPrint_rendiconto_ca_mask& msk,
{
TPrint_rendiconto_ca_recordset* recset = NULL;
const char* query ="USE 1000\nJOIN MOVANA INTO NUMREG==NUMRD\nJOIN RMOVANA INTO NUMREG==NUMRD NUMRIG==NRIGA"; //\nJOIN DOC INTO PROVV=='D' ANNO==ANNO CODNUM==CODNUM";
const char* query ="USE 1000\nJOIN MOVANA INTO NUMREG==NUMRD\nJOIN RMOVANA INTO NUMREG==NUMRD NUMRIG==NRIGA";
recset = new TPrint_rendiconto_ca_recordset(query);