Patch level :2.2 210

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :programma proforma versione 2.2 funzionante con contabilita' analitica;da verificare al crpa


git-svn-id: svn://10.65.10.50/trunk@13474 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-11-07 16:39:17 +00:00
parent 422257ddfe
commit a8e21f2c31
2 changed files with 69 additions and 25 deletions

View File

@ -226,6 +226,8 @@ bool TInvioP::i_proforma_movimenti()
TRelation rel(LF_MOVANA);
rel.add(LF_MOV, "NUMREG==NUMREGCG");
rel.add(LF_CAUSALI, "CODCAUS==CODCAUS");
rel.add(LF_RMOVANA, "NUMREG==NUMREG");
rel.add(LF_RMOVIVA, "NUMREG==NUMREGCG");
TCursor cur(&rel, "NUMREGCG!=0", 2, &da, &a);
const long cur_items = cur.items();
@ -257,6 +259,10 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
//necessita del numreg del corrente movimento analitico per poterlo istanziare e prenderne le righe
const long numreg = cur.curr().get_long(MOVANA_NUMREG);
TAnal_mov analmov(numreg); //..istanzia il movimento analitico cercato..
TRecord_text recrighe; //istanzia il tipo record corretto da scrivere sul trasfilerighe
recrighe.set_type("R");
int i;
for (i = 1; i <= analmov.body().rows(); i++)
{
@ -265,15 +271,13 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
//inganno il cursore passandogli la riga analitica in esame
cur.curr(LF_RMOVANA) = riga;
TRecord_text recrighe;
recrighe.set_type("R");
trasfilerighe->autoload(recrighe, cur);
trasfilerighe->write(recrighe);
}
//---- righe iva ----
//adesso tocca alle righe iva...e sara' un casino indicibile!
const char* numregcg = analmov.get(MOVANA_NUMREGCG);
const TString8 numregcg = analmov.get(MOVANA_NUMREGCG);
//record_array con le righe iva aventi il numreg = numregcg analitico
TRecord_array righeiva(numregcg, LF_RMOVIVA);
//assoc array contenente tutti i diversi conti che incontrera' nello scanning delle righe iva
@ -300,7 +304,7 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
}
TString16 codiva = righeiva[j].get(RMI_CODIVA); //prende il codice iva dalla riga iva
//aggiungere qui eventuale numero di indetraibile
//aggiungere qui eventuale codice intero di indetraibilita'
//ad ogni codiva presente in codivae lega un importo che risultera' la somma di tutti gli..
//..importi con lo stesso conto e codice iva
@ -317,6 +321,10 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
//aggiungere qui eventuale imposta
}
TRecord_text recrigheiva; //istanzia il tipo record corretto da scrivere sul trasfilerighe
recrigheiva.set_type("I");
int nrighe = 0;
for (i = 1; i <= analmov.body().rows(); i++)
{
//scanning delle righe analitiche per estrarne i conti e controllare se compaiono nell'assoc_array..
@ -325,13 +333,46 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
const TString& codconto = riga.get(RMOVANA_CODCONTO);
TAssoc_array* codivae = (TAssoc_array*) conti.objptr(codconto); //assoc_array codivae del codconto
//se ho almeno un codice iva assocoato a questo conto nell'assoc_array dei conti
//se ha almeno un codice iva associato a questo conto nell'assoc_array dei conti..
if (codivae != NULL)
{
//..prende l'importo della riga analitica..
real importo_riga = riga.get_real(RMOVANA_IMPORTO);
//..lo ridistribuisce secondo le percentuali iva
TGeneric_distrib distributore(importo_riga, TCurrency::get_firm_dec());
{
FOR_EACH_ASSOC_OBJECT((*codivae), h, k, imp)
{
const real& imp_iva = *(real*)imp;
distributore.add(imp_iva);
}
//crea una riga iva dal cursore, con numreg = numregcg della testata analitica originale
TRectype& rigaiva = cur.curr(LF_RMOVIVA);
rigaiva.put(RMI_NUMREG, numregcg);
//scan dell'assoc_array ridistribuito e inserimento dei valori nella riga iva appena creata
FOR_EACH_ASSOC_OBJECT((*codivae), hi, ki, impi)
{
rigaiva.put(RMI_NUMRIG, ++nrighe);
rigaiva.put(RMI_GRUPPO, codconto.mid(0,3));
rigaiva.put(RMI_CONTO, codconto.mid(3,3));
rigaiva.put(RMI_SOTTOCONTO, codconto.mid(6,6));
TBill zio(rigaiva);
rigaiva.put(RMI_TIPOC, zio.tipo());
rigaiva.put(RMI_IMPONIBILE, distributore.get());
rigaiva.put(RMI_CODIVA, ki);
//scrittura delle righe di tipo I; notare che il cur passato alla autoload altri non e'..
//..che la rigaiva appena completata
trasfilerighe->autoload(recrigheiva, cur);
trasfilerighe->write(recrigheiva);
}
}
}
}
return true;
}
@ -438,9 +479,9 @@ bool TInvioP::i_proforma_clifor(char tipocf)
{
TInvioP_file* trasfile = NULL;
if (tipocf == 'C')
TInvioP_file* trasfile = apri_file("clienti");
trasfile = apri_file("clienti");
else
TInvioP_file* trasfile = apri_file("fornit");
trasfile = apri_file("fornit");
TString80 filtro = "";
filtro.format("TIPOCF == \"%c\"", tipocf);
@ -455,7 +496,6 @@ bool TInvioP::i_proforma_clifor(char tipocf)
for (cur = 0; cur.pos() < cur_items; ++(cur))
{
TRecord_text rec;
rec.set_type("C");
trasfile->autoload(rec, cur);
trasfile->write(rec);
@ -498,11 +538,14 @@ bool TInvioP::destroy()
void TInvioP::main_loop()
{
//il programma si puo' usare SOLO se in contabilita' analitica si usa il pianodeiconti contabile
//il programma si puo' usare SOLO se in contabilita' analitica si usa il piano dei conti contabile
TConfig& cfg = ca_config();
const bool use_pdcc = cfg.get_bool("UsePdcc");
if (!use_pdcc)
{
error_box(TR("Programma funzionante SOLO se in contabilita' analitica si usa il piano dei conti contabile"));
return;
}
TFilename configname = "cg7200a.ini"; //file configurazione della maschera
configname.custom_path();

View File

@ -45,19 +45,19 @@ NAME(0) = ID REGISTRAZIONE
TYPE(0) = NUMERO
POSITION(0) = 0
LENGTH(0) = 10
FIELD(0) = 23->NUMREG
FIELD(0) = 107->NUMREG
NAME(1) = DATA REGISTRAZIONE
TYPE(1) = DATA
POSITION(1) = 10
LENGTH(1) = 8
FIELD(1) = 23->DATAREG
FIELD(1) = 107->DATAREG
NAME(2) = CODICE CAUSALE
TYPE(2) = STRINGA
POSITION(2) = 18
LENGTH(2) = 3
FIELD(2) = 23->CODCAUS
FIELD(2) = 107->CODCAUS
NAME(3) = DESCRIZIONE CAUSALE
TYPE(3) = STRINGA
@ -69,19 +69,19 @@ NAME(4) = DESCRIZIONE TESTATA
TYPE(4) = STRINGA
POSITION(4) = 61
LENGTH(4) = 40
FIELD(4) = 23->DESCR[1,40]
FIELD(4) = 107->DESCR[1,40]
NAME(5) = DATA DOCUMENTO
TYPE(5) = DATA
POSITION(5) = 101
LENGTH(5) = 8
FIELD(5) = 23->DATADOC
FIELD(5) = 107->DATADOC
NAME(6) = NUMERO DOCUMENTO
TYPE(6) = STRINGA
POSITION(6) = 109
LENGTH(6) = 6
FIELD(6) = 23->NUMDOC
FIELD(6) = 107->NUMDOC
NAME(7) = TIPO DOCUMENTO
TYPE(7) = STRINGA
@ -105,7 +105,7 @@ POSITION(10) = 169
NAME(11) = TOTALE DOCUMENTO
TYPE(11) = IMPORTO
POSITION(11) = 183
FIELD(11) = 23->TOTDOC
FIELD(11) = 107->TOTDOC
NAME(12) = DATA PAGAMENTO
TYPE(12) = DATA
@ -122,7 +122,7 @@ NAME(14) = DATA COMPETENZA
TYPE(14) = DATA
POSITION(14) = 225
LENGTH(14) = 8
FIELD(14) = 23->DATACOMP
FIELD(14) = 107->DATACOMP
NAME(15) = NUMERO PROTOCOLLO
TYPE(15) = STRINGA
@ -178,13 +178,13 @@ NAME(6) = FLAG CLIFOR
TYPE(6) = STRINGA
POSITION(6) = 27
LENGTH(6) = 1
FIELD(6) = 24->TIPOC
//MESSAGE(6) = _TIPOCF
NAME(7) = CODICE CLIFOR
TYPE(7) = STRINGA
POSITION(7) = 28
LENGTH(7) = 10
FIELD(7) = 24->SOTTOCONTO
FIELD(7) = 108->CODCONTO[7,12]
NAME(8) = DESCRIZIONE RIGA
TYPE(8) = STRINGA
@ -221,8 +221,8 @@ NAME(14) = VOCE DI SPESA
TYPE(14) = STRINGA
POSITION(14) = 145
LENGTH(14) = 10
MESSAGE(14) = _CODCBL
FIELD(14) = 300@->DESCRIZ
//MESSAGE(14) = _CODCBL
//FIELD(14) = 300@->DESCRIZ
[RECORD I]
@ -297,14 +297,14 @@ NAME(13) = COMMESSA
TYPE(13) = STRINGA
POSITION(13) = 125
LENGTH(13) = 20
FIELD(13) = 25->CODCMS
FIELD(13) = 108->CODCMS
NAME(14) = VOCE DI SPESA
TYPE(14) = STRINGA
POSITION(14) = 145
LENGTH(14) = 10
MESSAGE(14) = _CODCBL
FIELD(14) = 400@->DESCRIZ
//MESSAGE(14) = _CODCBL
//FIELD(14) = 400@->DESCRIZ
[RECORD C]
@ -391,6 +391,7 @@ LENGTH(3) = 80
FIELD(3)=19->DESCR
[RECORD G]
NAME(0) = ID REGISTRAZIONE PAGAMENTO
TYPE(0) = NUMERO
POSITION(0) = 0