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 class TPrint_rendiconto_ca_recordset : public TISAM_recordset
{ {
TExternisamfile* _tmp; TExternisamfile* _tmp;
bool _riclassificato;
TString _prefix, _da_conto_riclas, _a_conto_riclas;
protected: protected:
int _anno; int _anno;
@ -346,7 +348,7 @@ protected:
public: public:
virtual void set_filter(const TPrint_rendiconto_ca_mask& msk, int cms_row); 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() {} ~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 //filtro sul file esterno (_tmp, cioè 1000) sui conti selezionati sulla maschera
TRectype darec(cur.curr()), arec(cur.curr()); //curr perchè è il file externisamfile TRectype darec(cur.curr()), arec(cur.curr()); //curr perchè è il file externisamfile
darec.put("CONTO", _daconto); if (!_riclassificato)
darec.put("DATA", _dadata); {
arec.put("CONTO", _aconto); 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); arec.put("DATA", _adata);
cur.setregion(darec, arec); cur.setregion(darec, arec);
myself = this; myself = this;
@ -516,45 +528,68 @@ void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, cons
//compila i campi da stampare //compila i campi da stampare
// il conto puo' essere analitico o contabile... // il conto puo' essere analitico o contabile...
//se si usa il piano dei conti contabile ed è compilato l'archivio di collegamento PANAPDC //se è compilato l'archivio di collegamento PANAPDC
//si deve usare come conto il campo codconto del panapdc!!!... //si deve usare come conto il campo codconto del panapdc!!!...
TConfig_anal ini; if (_riclassificato)
const bool use_pdc = ini.get_bool("UsePdcc");
TLocalisamfile panapdc(LF_PANAPDC);
panapdc.setkey(2);
if (use_pdc && panapdc.first() == NOERR)
{ {
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 gruppo = atoi(rmovana.get(RMOVANA_CODCONTO).left(3));
const int conto = atoi(rmovana.get(RMOVANA_CODCONTO).mid(3,3)); const int conto = atoi(rmovana.get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto = atol(rmovana.get(RMOVANA_CODCONTO).mid(6,6)); const long sottoconto = atol(rmovana.get(RMOVANA_CODCONTO).mid(6,6));
rec_panapdc.put(PANAPDC_GRUPPO, gruppo); //relazione e cursore su panapdc alla ricerca del conto riclassificato corrispondente
rec_panapdc.put(PANAPDC_CONTO, conto); //alla triade gr/co/sottoc di rmovana
rec_panapdc.put(PANAPDC_SOTTOCONTO, sottoconto); TRelation rel_panapdc(LF_PANAPDC);
int err = panapdc.read(rec_panapdc, _isgteq); //servono solamente i record con il gruppo = al gruppo di rmovana
//poichè non puo' avere la chiave 2 completa, visto che sta cercando l'ultimo elemento.. TRectype da_panapdc(LF_PANAPDC);
//deve fare il confronto campo a campo dei gr/co/sottoc del record corrente con quelli da_panapdc.put(PANAPDC_GRUPPO, gruppo);
//estratti qualche riga sopra da rmovana
const int curr_gruppo = rec_panapdc.get_int(PANAPDC_GRUPPO); TString filtro;
if (gruppo - curr_gruppo == 0) 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); TRectype& rec_panapdc = cur_panapdc.curr();
if (conto - curr_conto == 0) for (cur_panapdc = 0; cur_panapdc.pos() < panapdc_items; ++cur_panapdc)
{ {
const long curr_sottoconto = rec_panapdc.get_long(PANAPDC_SOTTOCONTO); int current_conto = rec_panapdc.get_int(PANAPDC_CONTO);
if (sottoconto - curr_sottoconto == 0) long current_sottoconto = rec_panapdc.get_long(PANAPDC_SOTTOCONTO);
if (current_conto == 0 && current_sottoconto == 0)
{ {
const TString80 codconto = rec_panapdc.get(PANAPDC_CODCONTO); conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
_tmp->curr().put("CONTO", 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 _tmp->curr().put("CONTO", rmovana.get(RMOVANA_CODCONTO)); //conto
//i movimenti possono essere normali o generati da documento... //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 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 //..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); TRectype da_rmovana(LF_RMOVANA);
da_rmovana.put(RMOVANA_CODCONTO, _daconto);
TRectype a_rmovana(LF_RMOVANA); 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; TString filtro;
@ -721,8 +760,12 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rmovana()
{ {
const TRectype& rmovana = cur_rmovana.curr(); const TRectype& rmovana = cur_rmovana.curr();
const TRectype& movana = rel_rmovana.curr(LF_MOVANA); 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) for (cur_rmovana = 0; cur_rmovana.pos() < rmovana_items; ++cur_rmovana)
{
pi.addstatus(1);
salva_rmovana(rmovana, movana, NULL); 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(); const long doc_items = cur_doc.items();
cur_doc.freeze(); cur_doc.freeze();
//scanning del file dei documenti alla ricerca di quelli che hanno la data ed il CODNUM if (doc_items > 0)
//validi nei filtri impostati dall'utente
for (cur_doc = 0; cur_doc.pos() < doc_items; ++cur_doc)
{ {
TDocumento doc(cur_doc.curr()); TProgind pi(doc_items, "Scansione documenti...");
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);
}
}
//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_da = tc == 'C' ? F_PDC1_INI : F_PAN1_INI;
const short dlg_al = tc == 'C' ? F_PDC1_FIN : F_PAN1_FIN; 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); for (int i = 0; msk.id2pos(dlg_da+i) > 0; i++)
_aconto << msk.get(dlg_al+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); _dadata = msk.get_date(F_DATAINI);
_adata = msk.get_date(F_DATAFIN); _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 //metodo per riempire il file
crea_righe_rmovana(); 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; 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); recset = new TPrint_rendiconto_ca_recordset(query);