diff --git a/tc/tc0700.cpp b/tc/tc0700.cpp index 7a7854108..49f097a57 100755 --- a/tc/tc0700.cpp +++ b/tc/tc0700.cpp @@ -378,7 +378,7 @@ TTS_textset::TTS_textset(const char* query) add_field("0", "TRF-TOT-FATT", 12, n, 723); // totale fattura // conti di ricavo/costo - for (i=0; i<8; i++) + for (int i = 0; i < 8; i++) { field.format("TRF-CONTORIC_%d", i); add_field("0", field, 7, n, 735+(19*i)); // codice conto di ricavo/costo @@ -393,7 +393,7 @@ TTS_textset::TTS_textset(const char* query) add_field("0", "TRF-CAU-AGG-2-PAGAM", 34, an, 939); // ulteriore descrizione aggiuntiva // altri movimenti - for (i=0; i<80; i++) + for (int i = 0; i < 80; i++) { field.format("TRF-CONTO_%d", i); add_field("0", field, 7, n, 973+(64*i)); // codice conto @@ -412,7 +412,7 @@ TTS_textset::TTS_textset(const char* query) } // ratei e risconti - for (i=0; i<10; i++) + for (int i = 0; i < 10; i++) { field.format("TRF-RIFER-TAB_%d", i); add_field("0", field, 1, an, 6093+(19*i)); // tabella di riferimento @@ -432,7 +432,7 @@ TTS_textset::TTS_textset(const char* query) add_field("0", "TRF-AN-TIPO-SOGG", 1, n, 6290); // tipo soggetto ritenuta di acconto // ulteriori dati ev. pagamento o movimenti diversi - for (i=0; i<80; i++) + for (int i = 0; i < 80; i++) { field.format("TRF-EC-PARTITA-SEZ-PAG_%d", i); add_field("0", field, 2, n, 6291+(2*i)); // numero sezionale partita estratto conto @@ -448,13 +448,13 @@ TTS_textset::TTS_textset(const char* query) add_field("0", "TRF-RIT-4", 12, n, 6526); // 4 // ulteriori dati per unita' produttive ricavi - for (i=0; i<8; i++) + for (int i = 0; i < 8; i++) { field.format("TRF-UNITA-RICAVI_%d", i); add_field("0", field, 2, n, 6538+(2*i)); // } // ulteriori dati per unita' produttive pagamenti - for (i=0; i<80; i++) + for (int i = 0; i < 80; i++) { field.format("TRF-UNITA-PAGAM_%d", i); add_field("0", field, 2, n, 6554+(2*i)); // diff --git a/tc/tc9100.cpp b/tc/tc9100.cpp index ad07ecc3a..4846ae79d 100755 --- a/tc/tc9100.cpp +++ b/tc/tc9100.cpp @@ -18,6 +18,7 @@ #include "../ca/calib01.h" #include "../ca/movana.h" #include "../ca/rmovana.h" +#include "../ve/velib.h" #include #include @@ -1198,7 +1199,7 @@ long TInvioP::calcola_fattura_originale(long nreg) const struct TPay_info : public TObject { real _somma; - char _accsal; + char _as; }; bool TInvioP::i_proforma_pagamenti() @@ -1283,7 +1284,7 @@ bool TInvioP::i_proforma_pagamenti() if (pi == NULL) { pi = new TPay_info; - pi->_accsal = 'A'; + pi->_as = 'A'; pagame.add(indice, pi); } @@ -1291,7 +1292,7 @@ bool TInvioP::i_proforma_pagamenti() const real importo_pagato = calcola_pagamento(curpag_rec, iva_indet); pi->_somma += importo_pagato; if (curpag_rec.get_char(PAGSCA_ACCSAL) == 'S') - pi->_accsal = 'S'; + pi->_as = 'S'; } // scrive i record risultanti @@ -1309,7 +1310,108 @@ bool TInvioP::i_proforma_pagamenti() const long nregfatt = fattura.get_long(PART_NREG); _nregcosto = calcola_fattura_originale(nregfatt); _importo = pi->_somma; - _accsal = pi->_accsal; + //acconto/saldo in modo standard + _accsal = pi->_as; + //Casino plutonico dell'acconto-saldo in ottica CSA + //Se il doc in esame discende da una FDR (fattura da ricevere) e' necessario.. + //..cercare tutte le righe dei documenti che pagano tale FDR e sommare gli importi di tali.. + //..rdocs con quello corrente; solo se tale somma risulatsse >= del totale delle righe.. + //..della FDR originale il flag _accsal deve essere messo a saldo 'S' + if (_nregcosto != nregfatt) + { + //deve risalire al documento FDR del movimento _nregcosto + const TRectype& mov_fdr = cache().get(LF_MOV, _nregcosto); + + const TString8 fdr_codnum = mov_fdr.get(MOV_DCODNUM); + const int fdr_anno = mov_fdr.get_int(MOV_DANNO); + const char fdr_provv = mov_fdr.get_char(MOV_DPROVV); + const long fdr_ndoc = mov_fdr.get_long(MOV_DNDOC); + + //adesso che ha la chiave del documento padre FDR, deve crearsi la query.. + //..su RDOC alla ricerca di tutte le righe doc che discendono dall'FDR.. + //..In pratica cerca le "sorelle" dell'attuale fattura nregfatt + TString query; + query << "USE RDOC KEY 4"; + query << "\nFROM DACODNUM=" << fdr_codnum << " DAANNO=" << fdr_anno << " DAPROVV=" << fdr_provv << " DANDOC=" << fdr_ndoc; + query << "\nTO DACODNUM=" << fdr_codnum << " DAANNO=" << fdr_anno << " DAPROVV=" << fdr_provv << " DANDOC=" << fdr_ndoc; + + TISAM_recordset recset(query); + const int righe_delle_sorelle = recset.items(); + TAssoc_array sorelle; + TToken_string key; + //cerco la mia data di fattura; + const TDate datadoc_fattura = cache().get(LF_MOV, nregfatt, MOV_DATAREG); + //dalle righe risale ai documenti di tali righe (che posssono essere meno) + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + key = recset.get(RDOC_PROVV).as_string(); + key.add(recset.get(RDOC_ANNO).as_string()); + key.add(recset.get(RDOC_CODNUM).as_string()); + key.add(recset.get(RDOC_NDOC).as_string()); + + const TDate datadoc = cache().get(LF_DOC, key, DOC_DATADOC); + //se non sono l'ultima fattura (sorella piu' giovane) allora e'.. + //..sicuramente Acconto! Quindi esce dai cicli for e if + if (datadoc > datadoc_fattura) + { + sorelle.destroy(); + _accsal = 'A'; + break; + } + //accresce l'array delle sorelle + sorelle.add(key, key); + } + //tutto il casino s'ha da fare solo in caso ci sia piu' di una fattura.. + //.."sorella" di quella in esame + if (sorelle.items() > 1) + { + real importo_totale_sorelle; + //giro su tutti i documenti delle sorelle + FOR_EACH_ASSOC_OBJECT(sorelle, obj, chiave, itm) + { + TToken_string& ts = *(TToken_string*)itm; + TDocumento sorella(ts.get_char(0), ts.get_int(1), ts.get(2), ts.get_long(3)); + //per ogni documento deve cercare le righe discendenti dall'FDR + for (int r = 1; r <= sorella.rows(); r++) + { + const TRiga_documento nipotina = sorella[r]; + //servono solo le righe discendenti dall'FDR madre! + if (nipotina.get(RDOC_DACODNUM) == fdr_codnum && nipotina.get_int(RDOC_DAANNO) == fdr_anno && + nipotina.get_char(RDOC_DAPROVV) == fdr_provv && nipotina.get_long(RDOC_DANDOC) == fdr_ndoc) + { + const real importo_da_aggiungere = nipotina.importo(true, false); //importo scontato netto + importo_totale_sorelle += importo_da_aggiungere; + } + } + } //FOR_EACH_ASSOC.. + + //Se arriva fin qui la fattura in esame e' la sorella piu' giovane; adesso.. + //..deve controllare se gli importi di tutte le sorelle sommati saldano.. + //..o meno l'importo dell'originale mamma FDR... + + //intanto ha bisogno del totale documento FDR originale a partire dal movimento FDR... + real totale_fdr = ZERO; + TMovimentoPN movimento_fdr; + movimento_fdr.curr().put(MOV_NUMREG, _nregcosto); + if (movimento_fdr.read() == NOERR) + totale_fdr = totale_documento(movimento_fdr, false); //non include ritenute + + real rimanenza = totale_fdr - importo_totale_sorelle; + //arrotonda + rimanenza.round(); + + //Se l'importo e' inferiore la FDR non e' ancora stata saldata (nasceranno.. + //..una o piu' sorelle per saldare mamma FDR in futuro) + if (rimanenza > ZERO) + _accsal = 'A'; + //Se l'importo e' >= -> la mamma e' saldata e non sono previste ulteriori.. + //..sorelle (per la felicita' del papa'!) + else + _accsal = 'S'; + + } //if(sorelle.items()>1.. + + } //if(_nregcosto!=nregfatt.. //..e finalmente scrive 'sta minchia di riga TRecord_text recpag; recpag.set_type("G"); @@ -1327,7 +1429,7 @@ bool TInvioP::i_proforma_pagamenti() trasfilepag->autoload(recpag, curpag); trasfilepag->write(recpag); } - } + } //for( }//if curpag_items.. }//for curpart =.. diff --git a/tc/tc9100a.uml b/tc/tc9100a.uml index 331dba48a..4e0113027 100755 --- a/tc/tc9100a.uml +++ b/tc/tc9100a.uml @@ -1,4 +1,4 @@ -#include "cg7200a.h" +#include "tc9100a.h" TOOLBAR "" 0 -2 0 2 diff --git a/tc/tc9200a.uml b/tc/tc9200a.uml index b397f0fbf..42f318f17 100755 --- a/tc/tc9200a.uml +++ b/tc/tc9200a.uml @@ -1,4 +1,4 @@ -#include "cg7100a.h" +#include "tc9200a.h" PAGE "Invio dati contabilita'" -1 -1 78 20