Patch level :10.0 4.0 882
Files correlati : Ricompilazione Demo : [ ] Commento :aggiunta trattazione dei movimenti con conti non riclassificati (FDE/FDR). Heil Magnavakken! git-svn-id: svn://10.65.10.50/trunk@16158 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
43109efeaf
commit
dd9c23801a
130
ca/ca3700.cpp
130
ca/ca3700.cpp
@ -69,6 +69,7 @@ bool TPrint_rendiconto_ca_mask::on_field_event(TOperable_field& o, TField_event
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
#ifndef DBG
|
||||
case F_RIGHE:
|
||||
if (e == fe_init) //azzera le righe dello sheet con le commesse ad inizio programma
|
||||
{ //esplicita e bizzarra richiesta del CRPA
|
||||
@ -77,6 +78,7 @@ bool TPrint_rendiconto_ca_mask::on_field_event(TOperable_field& o, TField_event
|
||||
s.force_update();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case F_DATAINI:
|
||||
case F_DATAFIN:
|
||||
if (e == fe_close)
|
||||
@ -260,7 +262,8 @@ protected:
|
||||
void scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc);
|
||||
void scrive_riga_speciale(const TDocumento* doc, const TString_array& special_docs);
|
||||
int sort_indbil(int indbil) const;
|
||||
TString riclassifica(const int gruppo, const int conto, const long sottoconto, TRectype& tmpcurr);
|
||||
const TString& riclassifica(const TBill& zio, TRectype& tmpcurr) const;
|
||||
const TString& riclassifica(const TString& contone, TRectype& tmpcurr) const;
|
||||
real get_budget(const TString& conto, char tipo) const;
|
||||
bool is_causale_rateo_risconto(const char* codcaus);
|
||||
|
||||
@ -467,8 +470,7 @@ int TPrint_rendiconto_ca_recordset::sort_indbil(int indbil) const
|
||||
}
|
||||
|
||||
|
||||
TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int conto,
|
||||
const long sottoconto, TRectype& tmpcurr)
|
||||
const TString& TPrint_rendiconto_ca_recordset::riclassifica(const TBill& zio, TRectype& tmpcurr) const
|
||||
{
|
||||
TString conto_riclassificato;
|
||||
//relazione e cursore su panapdc alla ricerca del conto riclassificato corrispondente
|
||||
@ -476,7 +478,7 @@ TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int
|
||||
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);
|
||||
da_panapdc.put(PANAPDC_GRUPPO, zio.gruppo());
|
||||
|
||||
TString filtro;
|
||||
if (_prefix.not_empty())
|
||||
@ -499,13 +501,13 @@ TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int
|
||||
tmpcurr.put("CONTO", conto_riclassificato);
|
||||
break; //esce dal casino e passa ai campi successivi
|
||||
}
|
||||
else if (conto == current_conto && current_sottoconto == 0)
|
||||
else if (zio.conto() == current_conto && current_sottoconto == 0)
|
||||
{
|
||||
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
||||
tmpcurr.put("CONTO", conto_riclassificato);
|
||||
break; //esce dal casino e passa ai campi successivi
|
||||
}
|
||||
else if (conto == current_conto && sottoconto == current_sottoconto)
|
||||
else if (zio.conto() == current_conto && zio.sottoconto() == current_sottoconto)
|
||||
{
|
||||
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
||||
tmpcurr.put("CONTO", conto_riclassificato);
|
||||
@ -522,7 +524,18 @@ TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int
|
||||
(_aconto.not_empty() && conto_riclassificato.compare(_aconto, _aconto.len()) > 0))
|
||||
return EMPTY_STRING;
|
||||
|
||||
return conto_riclassificato;
|
||||
return get_tmp_string() = conto_riclassificato;
|
||||
}
|
||||
|
||||
const TString& TPrint_rendiconto_ca_recordset::riclassifica(const TString& contone, TRectype& tmpcurr) const
|
||||
{
|
||||
CHECK(contone.len() == 12, "Conto di lunghezza assurda");
|
||||
const int gruppo = atoi(contone.left(3));
|
||||
const int conto = atoi(contone.mid(3,3));
|
||||
const long sottoconto = atol(contone.mid(6,6));
|
||||
const TBill zio(gruppo, conto, sottoconto);
|
||||
|
||||
return riclassifica(zio, tmpcurr);
|
||||
}
|
||||
|
||||
static int bill2indbil(const TString& codconto, bool is_anal)
|
||||
@ -563,49 +576,44 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
||||
TString codconto = rmovana.get(RMOVANA_CODCONTO);
|
||||
TString codcontocg;
|
||||
int indbil = 0;
|
||||
bool conto_non_riclass = false; //indicatore che serve per tener conto di specialissimi conti del CRPA...
|
||||
//E' una lampante dimostrazione di quanto sia generico questo programma...
|
||||
|
||||
// il conto puo' essere analitico o contabile...
|
||||
//se è compilato l'archivio di collegamento PANAPDC..
|
||||
//..si deve usare come conto il campo codconto del panapdc!!!...
|
||||
//Ricordare ch SOLO se si ha un conto contabile e' possibile riclassificare in analitico!!!
|
||||
//Ricordare che SOLO se si ha un conto contabile e' possibile riclassificare in analitico!!!
|
||||
if (_riclassificato) //traduzione:sei il CRPA/CSA
|
||||
{
|
||||
//prende il gr/co/so dalla riga rmovana in esame
|
||||
const int gruppo = atoi(codconto.left(3));
|
||||
const int conto = atoi(codconto.mid(3,3));
|
||||
const long sottoconto = atol(codconto.mid(6,6));
|
||||
|
||||
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||
const TString conto_riclassificato = riclassifica(gruppo, conto, sottoconto, tmpcurr);
|
||||
const TString conto_riclassificato = riclassifica(codconto, tmpcurr);
|
||||
//se il conto viene ritornato vuoto significa che non ricade nell'intervallo dei conti..
|
||||
//..riclassificati selezionato dall'utente..
|
||||
if (conto_riclassificato.empty())
|
||||
return;
|
||||
//..senno' lo scrive come conto riclassificato
|
||||
codcontocg = codconto;
|
||||
codconto = conto_riclassificato;
|
||||
indbil = bill2indbil(codcontocg, false);
|
||||
//..riclassificati selezionato dall'utente...non puo' essere scartato a priori perche' puo'..
|
||||
//..essere un conto speciale del CRPA
|
||||
codcontocg = codconto;
|
||||
indbil = bill2indbil(codcontocg, false);
|
||||
|
||||
} //if(_riclassificato)
|
||||
if (conto_riclassificato.empty())
|
||||
{
|
||||
conto_non_riclass = true;
|
||||
codconto.cut(0);
|
||||
}
|
||||
else //..senno' lo scrive come conto riclassificato
|
||||
codconto = conto_riclassificato;
|
||||
|
||||
} //if(_riclassificato) Se non e' un conto riclassificato -> analitico puro o contabile puro
|
||||
else //...sennò si usano..
|
||||
{
|
||||
if (_piano == "A") //..il normale piano dei conti analitico..
|
||||
if (_piano == "A") //..il normale piano dei conti analitico.. Conto analitico puro
|
||||
indbil = bill2indbil(codconto, true);
|
||||
else //..o il normale piano dei conti contabile
|
||||
else //..o il normale piano dei conti contabile Conto contabile puro
|
||||
{
|
||||
codcontocg = codconto;
|
||||
indbil = bill2indbil(codcontocg, false);
|
||||
}
|
||||
}
|
||||
|
||||
//mette i conti nel file (se piano dei conti puramente contabile i valori coincidono)
|
||||
tmpcurr.put("CONTO", codconto); //conto
|
||||
tmpcurr.put("CONTOCG", codcontocg); //conto_cg
|
||||
|
||||
//fa il sort l'indicatore di bilancio del conto e lo utilizza per ordinare i record nel file..
|
||||
//..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
|
||||
const int ordcont = sort_indbil(indbil);
|
||||
tmpcurr.put("ORDCONT", ordcont);
|
||||
//La scrittura dei conti su tmpcurr e' rinviata in fondo al metodo...
|
||||
//---- FINE CONTI ----//
|
||||
|
||||
//---- DOC D'ORIGINE DELL' ANALMOV ----//
|
||||
@ -700,6 +708,46 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
||||
const long ndoc = babbo->get_long(RDOC_NDOC);
|
||||
rif.cut(0) << babbo_codnum << '-' << anno << '-' << ndoc;
|
||||
|
||||
//caso particolare dei conti del CRPA. Se il conto non e' riclassificato (ma siamo in presenza..
|
||||
//.di un piano dei conti riclassificato)...
|
||||
if (conto_non_riclass)
|
||||
{
|
||||
//Controlla se il documento di origine (padre del documento da cui deriva l'attuale riga..
|
||||
//..di analitica) era una FDR/FDE...
|
||||
const TCodice_numerazione& kodice_num = TDocumento::codice_numerazione(babbo_codnum);
|
||||
//Se lo era...
|
||||
if (kodice_num.fattura_emettere_ricevere())
|
||||
{
|
||||
//Ricrea il documento origine
|
||||
TDocumento doc_babbo('D', anno, babbo_codnum, ndoc);
|
||||
//elaborazione analitica del documento originale
|
||||
TContabilizzazione_analitica cont_anal;
|
||||
TAnal_mov mov_babbo;
|
||||
//se riesce a contabilizzare il documento origine (si spera, senno' so' cazzi!)..
|
||||
cont_anal.elabora(doc_babbo, 0, NULL, false, mov_babbo);
|
||||
if (mov_babbo.rows() > 0)
|
||||
{
|
||||
const int anal_rows = mov_babbo.rows();
|
||||
for (int k = 1; k <= anal_rows; k++)
|
||||
{
|
||||
//cerca la riga con il conto che gli serve e lo assegna a codconto, attualmente vuoto..
|
||||
//..in quanto non e' stato riclassificato
|
||||
const TRectype& mov_babbo_riga = mov_babbo.body()[k];
|
||||
const TString& conto_babbo = mov_babbo_riga.get(RMOVANA_CODCONTO);
|
||||
if (conto_babbo != codcontocg)
|
||||
{
|
||||
//ovviamente deve riclassificare il conto_babbo!
|
||||
codconto = riclassifica(conto_babbo, tmpcurr);
|
||||
indbil = bill2indbil(codconto, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} //if (mov_babbo.rows() > 0)
|
||||
}
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
if (riferimento.get_pos(rif) < 0) //il doc originale va aggiunto solo se non esiste gia'!
|
||||
{
|
||||
riferimento.add(rif);
|
||||
@ -707,11 +755,21 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
||||
tipo_babbo = doc_babbo.tipo_riclassificato(); //..il tipo documento..
|
||||
}
|
||||
} //if (babbo != NULL)..
|
||||
}
|
||||
} //if (codcms_rigadoc == codcms_rmovana..
|
||||
} //for (int i..
|
||||
|
||||
tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale)
|
||||
|
||||
//Scrittura dei conti (i valori delle variabili sono stati settati nella parte iniziale del metodo)
|
||||
//mette i conti nel file (se piano dei conti puramente contabile i valori coincidono)
|
||||
tmpcurr.put("CONTO", codconto); //conto
|
||||
tmpcurr.put("CONTOCG", codcontocg); //conto_cg
|
||||
|
||||
//fa il sort l'indicatore di bilancio del conto e lo utilizza per ordinare i record nel file..
|
||||
//..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
|
||||
const int ordcont = sort_indbil(indbil);
|
||||
tmpcurr.put("ORDCONT", ordcont);
|
||||
|
||||
//---- FINE DOC ORIG DELL'ANALMOV ----//
|
||||
/*[Tipo documento] //schema divino per destinare gli importi nei campi corretti
|
||||
O=I**
|
||||
@ -893,7 +951,7 @@ void TPrint_rendiconto_ca_recordset::scrive_riga_speciale(const TDocumento* doc,
|
||||
if (contab.search_costo_ricavo(rigadoc, conto))
|
||||
{
|
||||
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||
codconto = riclassifica(conto.gruppo(), conto.conto(), conto.sottoconto(), tmpcurr);
|
||||
codconto = riclassifica(conto, tmpcurr);
|
||||
codcontocg = conto.string(0x8);
|
||||
}
|
||||
} //if(_riclassificato)
|
||||
@ -1299,9 +1357,11 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
|
||||
scrive_riga(rmov, mov, &doc); //documenti "normali"
|
||||
} //for int j...
|
||||
}
|
||||
else
|
||||
{
|
||||
//righe di documento configurate come da emettere/ricevere (documenti speciali)
|
||||
if (is_special_doc)
|
||||
scrive_riga_speciale(&doc, num_fdr);
|
||||
}
|
||||
} //if (numregca==0...
|
||||
|
||||
} //if !curr_doc.empty()
|
||||
|
Loading…
x
Reference in New Issue
Block a user