Aggiunta selezione per partita IVA in stampa e visualizzazione mastrini

Migliorata stampa liquidazione IVA differita

git-svn-id: svn://10.65.10.50/branches/R_10_00@22719 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-09-04 12:40:50 +00:00
parent 6b39ab9e24
commit f498fdfba2
17 changed files with 639 additions and 376 deletions

View File

@ -1021,8 +1021,7 @@ void TPrimanota_application::write_scadenze(const TMask& m)
for (int i = 0; i < new_rate; i++) for (int i = 0; i < new_rate; i++)
{ {
real * r = new real; real* r = new real;
ant.add(r); ant.add(r);
if (i < nrate) if (i < nrate)
*r = partita.rata(i + 1).get_real(SCAD_IMPORTOANT); *r = partita.rata(i + 1).get_real(SCAD_IMPORTOANT);

View File

@ -155,7 +155,7 @@ public:
int ricerca_clifo(int riga); int ricerca_clifo(int riga);
int ricerca_gruppo(int riga); int ricerca_gruppo(int riga);
void calcola_progressivi(bool finali = FALSE); void calcola_progressivi(bool finali = false);
void calcola_progressivi_al(const TDate& data); void calcola_progressivi_al(const TDate& data);
int stampa_progressivi(int start_riga); int stampa_progressivi(int start_riga);
int stampa_progre_riporto(int start_riga); int stampa_progre_riporto(int start_riga);
@ -554,7 +554,7 @@ int TMastrini_application::date2esc(const TDate& d)
bool TMastrini_application::almeno_un_record() bool TMastrini_application::almeno_un_record()
{ {
bool trovato=FALSE; bool trovato = false;
if (current_cursor()->is_first_match(LF_RMOV)) if (current_cursor()->is_first_match(LF_RMOV))
{ {
@ -564,6 +564,7 @@ bool TMastrini_application::almeno_un_record()
TRelation rel(LF_RMOV); TRelation rel(LF_RMOV);
rel.add(LF_MOV, "NUMREG==NUMREG"); rel.add(LF_MOV, "NUMREG==NUMREG");
TRectype& rmov = rel.curr(); TRectype& rmov = rel.curr();
const TRectype& mov = rel.curr(LF_MOV);
rmov.zero(); rmov.zero();
rmov.put(RMV_GRUPPO, _gruppo); rmov.put(RMV_GRUPPO, _gruppo);
@ -575,28 +576,17 @@ bool TMastrini_application::almeno_un_record()
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
{ {
const int annoes = rmov.get_int (RMV_ANNOES); const int annoes = rmov.get_int (RMV_ANNOES);
const long numreg = rmov.get_long(RMV_NUMREG); const TString4 provvis (mov.get(MOV_PROVVIS));
const TDate datareg = _annomsk ? mov.get_date(MOV_DATACOMP) : rmov.get_date(RMV_DATAREG);
const TRectype & mov = cache().get(LF_MOV, numreg);
const TDate datacomp = (mov.get_date(MOV_DATACOMP));
const TString16 provvis (mov.get(MOV_PROVVIS));
TDate datareg;
if (_annomsk == 0)
datareg = rmov.get_date(RMV_DATAREG);
else
datareg = datacomp;
if ( ((annoes==_annomsk) || (_annomsk==0)) && ((datareg>=_data_ini) && (datareg<=_data_fine)) && (_stampa_mov_prov || provvis.blank())) if ( ((annoes==_annomsk) || (_annomsk==0)) && ((datareg>=_data_ini) && (datareg<=_data_fine)) && (_stampa_mov_prov || provvis.blank()))
{ {
trovato = TRUE; trovato = true;
break; break;
} }
} }
rmov_file.readat(record); rmov_file.readat(record);
} }
return trovato; return trovato;
} }
@ -2186,24 +2176,28 @@ void TMastrini_application::descrizione_causale()
void TMastrini_application::documenti_iva() void TMastrini_application::documenti_iva()
{ {
TString dep; _tabtpd->zero();
if (_tipodoc.full())
_tabtpd->curr().zero(); {
dep << format ("%2s",(const char*) _tipodoc); TString4 dep;
_tabtpd->curr().put("CODTAB", (const char*) dep); dep.format("%2s",(const char*) _tipodoc);
_tabtpd->put("CODTAB", dep);
_tabtpd->read(); _tabtpd->read();
_descrdociva = _tabtpd->curr().get("S0"); }
_natdoc = atoi(_tabtpd->curr().get("I0")); _descrdociva = _tabtpd->get("S0");
_natdoc = atoi(_tabtpd->get("I0"));
} }
void TMastrini_application::ricerca_regiva() void TMastrini_application::ricerca_regiva()
{ {
TString16 dep; _tabreg->zero();
_tabreg->curr().zero(); if (_annoiva > 0 && _regiva.full())
dep << format("%04d", _annoiva); {
dep << format("%3s" , (const char*) _regiva); TString8 dep;
_tabreg->curr().put("CODTAB", (const char*) dep); dep.format("%04d%3s", _annoiva, (const char*)_regiva);
_tabreg->put("CODTAB", dep);
_tabreg->read(); _tabreg->read();
}
_tipo = _tabreg->get_int("I0"); _tipo = _tabreg->get_int("I0");
} }
@ -2501,11 +2495,9 @@ void TMastrini_application::conto(int gruppo, int conto, bool no_contropartita)
void TMastrini_application::ricerca_dati_ditta() void TMastrini_application::ricerca_dati_ditta()
{ {
long app;
const TRectype & nditte = cache().get(LF_NDITTE, _codice_ditta); const TRectype & nditte = cache().get(LF_NDITTE, _codice_ditta);
app = nditte.get_long(NDT_CODDITTA); const long app = nditte.get_long(NDT_CODDITTA);
_ragsoc = nditte.get(NDT_RAGSOC); _ragsoc = nditte.get(NDT_RAGSOC);
TString16 key; TString16 key;
@ -2924,18 +2916,33 @@ int TMastrini_application::stampa_progre_riporto(int start_riga)
return r; return r;
} }
void TMastrini_application::calcola_progressivi_al(const TDate& data_fin) void TMastrini_application::calcola_progressivi_al(const TDate& data_fin)
{ {
static TBill _last_bill;
static TDate _last_date, _last_inizio;
static int _last_year;
static bool _last_provv;
static real _last_dare, _last_avere;
const TDate data_inizio = _annomsk ? _data_inizioese : _inizioes;
if (_annomsk == _last_year && data_inizio == _last_inizio && data_fin == _last_date &&
_last_provv == _stampa_mov_prov && _last_bill == TBill(_gruppo, _conto, _sottoc))
{
_totale_prima_dare = _last_dare;
_totale_prima_avere = _last_avere;
return;
}
TLocalisamfile& rmov_file = current_cursor()->file(LF_RMOV); TLocalisamfile& rmov_file = current_cursor()->file(LF_RMOV);
const TRecnotype record = rmov_file.recno(); const TRecnotype record = rmov_file.recno();
_totale_prima_dare = ZERO;
_totale_prima_avere = ZERO;
TRelation rel(LF_RMOV); TRelation rel(LF_RMOV);
rel.add(LF_MOV, "NUMREG==NUMREG"); rel.add(LF_MOV, "NUMREG==NUMREG");
const TRectype& mov = rel.curr(LF_MOV);
TRectype& rmov = rel.curr(); TRectype& rmov = rel.curr();
// const TRectype& mov = rel.curr(LF_MOV);
rmov.zero(); rmov.zero();
rmov.put(RMV_GRUPPO, _gruppo); rmov.put(RMV_GRUPPO, _gruppo);
@ -2944,52 +2951,40 @@ void TMastrini_application::calcola_progressivi_al(const TDate& data_fin)
TCursor cur(&rel, "", 2, &rmov, &rmov); TCursor cur(&rel, "", 2, &rmov, &rmov);
const long items = cur.items(); const long items = cur.items();
cur.freeze(); cur.freeze();
_totale_prima_dare = ZERO;
_totale_prima_avere = ZERO;
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
{
if (_stampa_mov_prov || mov.get(MOV_PROVVIS).blank())
{ {
const int annoes = rmov.get_int (RMV_ANNOES); const int annoes = rmov.get_int (RMV_ANNOES);
TDate datareg = rmov.get_date(RMV_DATAREG); const TDate datareg = mov.get_date(_annomsk ? MOV_DATACOMP : RMV_DATAREG);
//Legge movimenti con data > inizio esercizio e < data_fin
if (((annoes==_annomsk)||(_annomsk == 0))&&(datareg >= data_inizio)&&(datareg <= data_fin))
{
const char sezione = rmov.get_char(RMV_SEZIONE); const char sezione = rmov.get_char(RMV_SEZIONE);
const real importo = rmov.get_real(RMV_IMPORTO); const real importo = rmov.get_real(RMV_IMPORTO);
long numreg = rmov.get_long(RMV_NUMREG);
const TRectype & mov = cache().get(LF_MOV, numreg);
const TDate datacomp = (mov.get_date(MOV_DATACOMP));
TDate data;
const TString16 provvis (mov.get(MOV_PROVVIS));
if (_stampa_mov_prov || (!_stampa_mov_prov && provvis.blank()))
{
if (_annomsk == 0)
{
datareg = rmov.get_date(RMV_DATAREG);
data = _inizioes;
}
else
{
datareg = datacomp;
data = _data_inizioese;
}
const int gruppo = rmov.get_int(RMV_GRUPPO);
const int conto = rmov.get_int(RMV_CONTO);
const long sottoc = rmov.get_long(RMV_SOTTOCONTO);
if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc))
break;
else
{
//Legge movimenti con data > inizio esercizio e < data_fin
if (((annoes==_annomsk)||(_annomsk == 0))&&(datareg >= data)&&(datareg <= data_fin))
if (sezione == 'D') if (sezione == 'D')
_totale_prima_dare += importo; _totale_prima_dare += importo;
else else
_totale_prima_avere += importo; _totale_prima_avere += importo;
} }
} // if ((_stampa_mov_prov) || ((!_stampa_mov_prov) && (provvis.trim().empty()))) }
} }
// Riposiziona rmov // Riposiziona rmov
rmov_file.readat(record); rmov_file.readat(record);
_last_year = _annomsk;
_last_date = data_fin;
_last_inizio = data_inizio;
_last_bill.set(_gruppo, _conto, _sottoc);
_last_provv = _stampa_mov_prov;
_last_dare = _totale_prima_dare;
_last_avere = _totale_prima_avere;
} }
void TMastrini_application::calcola_progressivi(bool finali) void TMastrini_application::calcola_progressivi(bool finali)
@ -3022,7 +3017,7 @@ void TMastrini_application::calcola_progressivi(bool finali)
{ {
const int annoes_saldi = saldi.curr().get_int(SLD_ANNOES); const int annoes_saldi = saldi.curr().get_int(SLD_ANNOES);
//Calcola i progressivi dell'esercizio attuale //Calcola i progressivi dell'esercizio attuale
if (annoes_saldi == _anno_corrente) if (annoes_saldi == _anno_corrente)
{ {
progdare_attuale = saldi.get_real(SLD_PDARE); progdare_attuale = saldi.get_real(SLD_PDARE);

View File

@ -15,6 +15,9 @@
#define F_SOTTOCINI_CONTO 105 #define F_SOTTOCINI_CONTO 105
#define F_SOTTOCINI_CLIENTE 205 #define F_SOTTOCINI_CLIENTE 205
#define F_SOTTOCINI_FORN 305 #define F_SOTTOCINI_FORN 305
#define F_PAIVINI_CLIENTE 206
#define F_PAIVINI_FORN 306
#define F_TIPOCF_FINE 106 #define F_TIPOCF_FINE 106
#define F_GRUPPOFINE 107 #define F_GRUPPOFINE 107
#define F_CONTOFINE_CONTO 108 #define F_CONTOFINE_CONTO 108
@ -23,6 +26,9 @@
#define F_SOTTOCFINE_CONTO 109 #define F_SOTTOCFINE_CONTO 109
#define F_SOTTOCFINE_CLIENTE 209 #define F_SOTTOCFINE_CLIENTE 209
#define F_SOTTOCFINE_FORN 309 #define F_SOTTOCFINE_FORN 309
#define F_PAIVFINE_CLIENTE 210
#define F_PAIVFINE_FORN 310
#define F_DESCRINI_CONTO 125 #define F_DESCRINI_CONTO 125
#define F_DESCRINI_CLIENTE 135 #define F_DESCRINI_CLIENTE 135
#define F_DESCRINI_FORN 145 #define F_DESCRINI_FORN 145

View File

@ -33,20 +33,9 @@ BEGIN
FLAGS "A" FLAGS "A"
END END
LIST F_TIPOCF_INI 25
BEGIN
PROMPT 1 3 "Ricerca "
ITEM " |Gruppo/conto/sottoconto"
MESSAGE HIDE,2@|HIDE,3@|SHOW,1@
ITEM "C|Clienti"
MESSAGE HIDE,1@|HIDE,3@|SHOW,2@
ITEM "F|Fornitori"
MESSAGE HIDE,1@|HIDE,2@|SHOW,3@
END
NUMBER F_ANNO 4 NUMBER F_ANNO 4
BEGIN BEGIN
PROMPT 55 3 "Esercizio " PROMPT 51 2 "Esercizio "
USE ESC USE ESC
INPUT CODTAB F_ANNO INPUT CODTAB F_ANNO
DISPLAY "Codice Esercizio" CODTAB DISPLAY "Codice Esercizio" CODTAB
@ -60,15 +49,26 @@ BEGIN
ADD NONE ADD NONE
END END
LIST F_TIPOCF_INI 25
BEGIN
PROMPT 1 3 "Ricerca "
ITEM " |Gruppo/conto/sottoconto"
MESSAGE HIDE,2@|HIDE,3@|SHOW,1@
ITEM "C|Clienti"
MESSAGE HIDE,1@|HIDE,3@|SHOW,2@
ITEM "F|Fornitori"
MESSAGE HIDE,1@|HIDE,2@|SHOW,3@
END
NUMBER F_GRUPPOINI 3 NUMBER F_GRUPPOINI 3
BEGIN BEGIN
PROMPT 1 4 "Da Gruppo - Conto - Sottoconto " PROMPT 1 4 "Dal Conto "
GROUP 9 GROUP 9
END END
NUMBER F_CONTOINI_CONTO 3 NUMBER F_CONTOINI_CONTO 3
BEGIN BEGIN
PROMPT 39 4 "" PROMPT 22 4 ""
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="") USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="")
INPUT GRUPPO F_GRUPPOINI INPUT GRUPPO F_GRUPPOINI
INPUT CONTO F_CONTOINI_CONTO INPUT CONTO F_CONTOINI_CONTO
@ -87,7 +87,7 @@ END
NUMBER F_SOTTOCINI_CONTO 6 NUMBER F_SOTTOCINI_CONTO 6
BEGIN BEGIN
PROMPT 48 4 "" PROMPT 29 4 ""
USE LF_PCON SELECT SOTTOCONTO!="" USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GRUPPOINI INPUT GRUPPO F_GRUPPOINI
INPUT CONTO F_CONTOINI_CONTO INPUT CONTO F_CONTOINI_CONTO
@ -120,7 +120,7 @@ END
NUMBER F_SOTTOCINI_CLIENTE 6 NUMBER F_SOTTOCINI_CLIENTE 6
BEGIN BEGIN
PROMPT 48 4 "" PROMPT 29 4 ""
USE LF_CLIFO USE LF_CLIFO
CHECKTYPE NORMAL CHECKTYPE NORMAL
INPUT TIPOCF "C" INPUT TIPOCF "C"
@ -129,12 +129,31 @@ BEGIN
DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
DISPLAY "Partita IVA" PAIV
OUTPUT F_SOTTOCINI_CLIENTE CODCF OUTPUT F_SOTTOCINI_CLIENTE CODCF
OUTPUT F_DESCRINI_CLIENTE RAGSOC OUTPUT F_DESCRINI_CLIENTE RAGSOC
OUTPUT F_PAIVINI_CLIENTE PAIV
MESSAGE COPY,F_SOTTOCINI_CONTO MESSAGE COPY,F_SOTTOCINI_CONTO
GROUP 2 9 GROUP 2 9
END END
STRING F_PAIVINI_CLIENTE 12
BEGIN
PROMPT 43 4 "Partita IVA "
USE LF_CLIFO KEY 5
CHECKTYPE NORMAL
WARNING "Cliente inesistente o mancante"
INPUT TIPOCF "C"
INPUT PAIV F_PAIVINI_CLIENTE
DISPLAY "Partita IVA" PAIV
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT F_SOTTOCINI_CLIENTE
GROUP 2 9
END
STRING F_DESCRINI_CLIENTE 50 STRING F_DESCRINI_CLIENTE 50
BEGIN BEGIN
PROMPT 1 5 "Ragione sociale " PROMPT 1 5 "Ragione sociale "
@ -153,7 +172,7 @@ END
NUMBER F_SOTTOCINI_FORN 6 NUMBER F_SOTTOCINI_FORN 6
BEGIN BEGIN
PROMPT 48 4 "" PROMPT 29 4 ""
USE LF_CLIFO USE LF_CLIFO
CHECKTYPE NORMAL CHECKTYPE NORMAL
INPUT TIPOCF "F" INPUT TIPOCF "F"
@ -162,13 +181,31 @@ BEGIN
DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
DISPLAY "Partita IVA" PAIV
OUTPUT F_SOTTOCINI_FORN CODCF OUTPUT F_SOTTOCINI_FORN CODCF
OUTPUT F_DESCRINI_FORN RAGSOC OUTPUT F_DESCRINI_FORN RAGSOC
FLAGS "R" OUTPUT F_PAIVINI_FORN PAIV
GROUP 3 9 GROUP 3 9
MESSAGE COPY,F_SOTTOCINI_CONTO MESSAGE COPY,F_SOTTOCINI_CONTO
END END
STRING F_PAIVINI_FORN 12
BEGIN
PROMPT 43 4 "Partita IVA "
USE LF_CLIFO KEY 5
CHECKTYPE NORMAL
WARNING "Fornitore inesistente o mancante"
INPUT TIPOCF "F"
INPUT PAIV F_PAIVINI_FORN
DISPLAY "Partita IVA" PAIV
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT F_SOTTOCINI_FORN
GROUP 3 9
END
STRING F_DESCRINI_FORN 50 STRING F_DESCRINI_FORN 50
BEGIN BEGIN
PROMPT 1 5 "Ragione Sociale " PROMPT 1 5 "Ragione Sociale "
@ -197,13 +234,13 @@ END
NUMBER F_GRUPPOFINE 3 NUMBER F_GRUPPOFINE 3
BEGIN BEGIN
PROMPT 1 7 "A Gruppo - Conto - Sottoconto " PROMPT 1 7 "Al Conto "
GROUP 9 GROUP 9
END END
NUMBER F_CONTOFINE_CONTO 3 NUMBER F_CONTOFINE_CONTO 3
BEGIN BEGIN
PROMPT 39 7 "" PROMPT 22 7 ""
USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="") /* &&(TMCF="") */ USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="") /* &&(TMCF="") */
INPUT GRUPPO F_GRUPPOFINE INPUT GRUPPO F_GRUPPOFINE
INPUT CONTO F_CONTOFINE_CONTO INPUT CONTO F_CONTOFINE_CONTO
@ -223,7 +260,7 @@ END
NUMBER F_SOTTOCFINE_CONTO 6 NUMBER F_SOTTOCFINE_CONTO 6
BEGIN BEGIN
PROMPT 48 7 "" PROMPT 29 7 ""
USE LF_PCON SELECT SOTTOCONTO!="" USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GRUPPOFINE INPUT GRUPPO F_GRUPPOFINE
INPUT CONTO F_CONTOFINE_CONTO INPUT CONTO F_CONTOFINE_CONTO
@ -257,7 +294,7 @@ END
NUMBER F_SOTTOCFINE_CLIENTE 6 NUMBER F_SOTTOCFINE_CLIENTE 6
BEGIN BEGIN
PROMPT 48 7 "" PROMPT 29 7 ""
USE LF_CLIFO USE LF_CLIFO
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Cliente inesistente o mancante" WARNING "Cliente inesistente o mancante"
@ -265,14 +302,33 @@ BEGIN
INPUT CODCF F_SOTTOCFINE_CLIENTE INPUT CODCF F_SOTTOCFINE_CLIENTE
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Partita IVA" PAIV
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
OUTPUT F_SOTTOCFINE_CLIENTE CODCF OUTPUT F_SOTTOCFINE_CLIENTE CODCF
OUTPUT F_DESCRFINE_CLIENTE RAGSOC OUTPUT F_DESCRFINE_CLIENTE RAGSOC
OUTPUT F_PAIVFINE_CLIENTE PAIV
MESSAGE COPY,F_SOTTOCFINE_CONTO MESSAGE COPY,F_SOTTOCFINE_CONTO
GROUP 5 9 GROUP 5 9
END END
STRING F_PAIVFINE_CLIENTE 12
BEGIN
PROMPT 43 7 "Partita IVA "
USE LF_CLIFO KEY 5
CHECKTYPE NORMAL
WARNING "Cliente inesistente o mancante"
INPUT TIPOCF "C"
INPUT PAIV F_PAIVFINE_CLIENTE
DISPLAY "Partita IVA" PAIV
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT F_SOTTOCFINE_CLIENTE
GROUP 5 9
END
STRING F_DESCRFINE_CLIENTE 50 STRING F_DESCRFINE_CLIENTE 50
BEGIN BEGIN
PROMPT 1 8 "Ragione sociale " PROMPT 1 8 "Ragione sociale "
@ -292,7 +348,7 @@ END
NUMBER F_SOTTOCFINE_FORN 6 NUMBER F_SOTTOCFINE_FORN 6
BEGIN BEGIN
PROMPT 48 7 "" PROMPT 29 7 ""
USE LF_CLIFO USE LF_CLIFO
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Fornitore inesistente o mancante" WARNING "Fornitore inesistente o mancante"
@ -300,14 +356,33 @@ BEGIN
INPUT CODCF F_SOTTOCFINE_FORN INPUT CODCF F_SOTTOCFINE_FORN
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Partita IVA" PAIV
DISPLAY "Gruppo" GRUPPO DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO DISPLAY "Conto" CONTO
OUTPUT F_SOTTOCFINE_FORN CODCF OUTPUT F_SOTTOCFINE_FORN CODCF
OUTPUT F_DESCRFINE_FORN RAGSOC OUTPUT F_DESCRFINE_FORN RAGSOC
OUTPUT F_PAIVFINE_FORN PAIV
MESSAGE COPY,F_SOTTOCFINE_CONTO MESSAGE COPY,F_SOTTOCFINE_CONTO
GROUP 6 9 GROUP 6 9
END END
STRING F_PAIVFINE_FORN 12
BEGIN
PROMPT 43 7 "Partita IVA "
USE LF_CLIFO KEY 5
CHECKTYPE NORMAL
WARNING "Cliente inesistente o mancante"
INPUT TIPOCF "F"
INPUT PAIV F_PAIVFINE_CLIENTE
DISPLAY "Partita IVA" PAIV
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Codice" CODCF
COPY OUTPUT F_SOTTOCFINE_FORN
GROUP 6 9
END
STRING F_DESCRFINE_FORN 50 STRING F_DESCRFINE_FORN 50
BEGIN BEGIN
PROMPT 1 8 "Ragione Sociale " PROMPT 1 8 "Ragione Sociale "

View File

@ -7,10 +7,17 @@
#define F_DESCONTO 107 #define F_DESCONTO 107
#define F_SOTTOCONTO 108 #define F_SOTTOCONTO 108
#define F_DESSOTTOC 109 #define F_DESSOTTOC 109
#define F_CLIENTE 206 #define F_CLIENTE 206
#define F_RAGSOCCLI 207 #define F_RAGSOCCLI 207
#define F_PAIVCLI 208
#define F_COFICLI 209
#define F_FORNITORE 306 #define F_FORNITORE 306
#define F_RAGSOCFOR 307 #define F_RAGSOCFOR 307
#define F_PAIVFOR 308
#define F_COFIFOR 309
#define F_ESERCIZIO 110 #define F_ESERCIZIO 110
#define F_DADATA 111 #define F_DADATA 111
#define F_ADATA 112 #define F_ADATA 112

View File

@ -46,7 +46,7 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
GROUPBOX DLG_NULL 76 6 GROUPBOX DLG_NULL 76 7
BEGIN BEGIN
PROMPT 1 4 "@bConto del mastrino" PROMPT 1 4 "@bConto del mastrino"
FLAGS "R" FLAGS "R"
@ -122,6 +122,8 @@ BEGIN
DISPLAY "Codice Fiscale" COFI DISPLAY "Codice Fiscale" COFI
OUTPUT F_CLIENTE CODCF OUTPUT F_CLIENTE CODCF
OUTPUT F_RAGSOCCLI RAGSOC OUTPUT F_RAGSOCCLI RAGSOC
OUTPUT F_PAIVCLI PAIV
OUTPUT F_COFICLI COFI
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Cliente assente" WARNING "Cliente assente"
GROUP 2 4 GROUP 2 4
@ -136,6 +138,8 @@ BEGIN
COPY DISPLAY F_CLIENTE COPY DISPLAY F_CLIENTE
OUTPUT F_FORNITORE CODCF OUTPUT F_FORNITORE CODCF
OUTPUT F_RAGSOCFOR RAGSOC OUTPUT F_RAGSOCFOR RAGSOC
OUTPUT F_PAIVFOR PAIV
OUTPUT F_COFIFOR COFI
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Fornitore assente" WARNING "Fornitore assente"
GROUP 3 4 GROUP 3 4
@ -208,15 +212,75 @@ BEGIN
GROUP 3 4 GROUP 3 4
END END
STRING F_COFICLI 16
BEGIN
PROMPT 2 9 "Codice Fiscale "
USE LF_CLIFO KEY 4
INPUT TIPOCF "C"
INPUT COFI F_COFICLI
DISPLAY "Codice Fiscale" COFI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Partita IVA" PAIV
COPY OUTPUT F_CLIENTE
CHECKTYPE NORMAL
GROUP 2 4
END
STRING F_PAIVCLI 12
BEGIN
PROMPT 49 9 "Partita IVA "
USE LF_CLIFO KEY 5
INPUT TIPOCF "C"
INPUT PAIV F_PAIVCLI
DISPLAY "Partita IVA" PAIV
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Codice Fiscale" COFI
COPY OUTPUT F_CLIENTE
CHECKTYPE NORMAL
GROUP 2 4
END
STRING F_COFIFOR 16
BEGIN
PROMPT 2 9 "Codice Fiscale "
USE LF_CLIFO KEY 4
INPUT TIPOCF "F"
INPUT COFI F_COFIFOR
DISPLAY "Codice Fiscale" COFI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Partita IVA" PAIV
COPY OUTPUT F_FORNITORE
CHECKTYPE NORMAL
GROUP 3 4
END
STRING F_PAIVFOR 12
BEGIN
PROMPT 49 9 "Partita IVA "
USE LF_CLIFO KEY 5
INPUT TIPOCF "F"
INPUT PAIV F_PAIVFOR
DISPLAY "Partita IVA" PAIV
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Codice Fiscale" COFI
COPY OUTPUT F_FORNITORE
CHECKTYPE NORMAL
GROUP 3 4
END
GROUPBOX DLG_NULL 76 4 GROUPBOX DLG_NULL 76 4
BEGIN BEGIN
PROMPT 1 10 "@bPeriodo" PROMPT 1 11 "@bPeriodo"
FLAGS "R" FLAGS "R"
END END
NUMBER F_ESERCIZIO 4 NUMBER F_ESERCIZIO 4
BEGIN BEGIN
PROMPT 2 11 "Cod. esercizio " PROMPT 2 12 "Cod. esercizio "
FLAGS "Z" FLAGS "Z"
USE ESC USE ESC
INPUT CODTAB F_ESERCIZIO INPUT CODTAB F_ESERCIZIO
@ -230,35 +294,35 @@ END
DATE F_DADATA DATE F_DADATA
BEGIN BEGIN
PROMPT 26 11 "Dalla data " PROMPT 26 12 "Dalla data "
END END
DATE F_ADATA DATE F_ADATA
BEGIN BEGIN
PROMPT 52 11 "Alla data " PROMPT 52 12 "Alla data "
VALIDATE DATE_CMP_FUNC >= F_DADATA VALIDATE DATE_CMP_FUNC >= F_DADATA
WARNING "La data finale deve essere maggiore di quella iniziale" WARNING "La data finale deve essere maggiore di quella iniziale"
END END
BOOLEAN F_PROVVIS BOOLEAN F_PROVVIS
BEGIN BEGIN
PROMPT 2 12 "Includi movimenti provvisori" PROMPT 2 13 "Includi movimenti provvisori"
END END
BOOLEAN F_END BOOLEAN F_END
BEGIN BEGIN
PROMPT 40 12 "Posizionamento in fondo al mastrino" PROMPT 40 13 "Posizionamento in fondo al mastrino"
END END
GROUPBOX DLG_NULL 76 5 GROUPBOX DLG_NULL 76 5
BEGIN BEGIN
PROMPT 1 14 "@bCausali" PROMPT 1 15 "@bCausali"
FLAGS "R" FLAGS "R"
END END
STRING F_DACAUSALE 3 STRING F_DACAUSALE 3
BEGIN BEGIN
PROMPT 2 15 "Da causale " PROMPT 2 16 "Da causale "
FLAGS "UZ" FLAGS "UZ"
USE LF_CAUSALI USE LF_CAUSALI
INPUT CODCAUS F_DACAUSALE INPUT CODCAUS F_DACAUSALE
@ -274,7 +338,7 @@ END
STRING F_DADESCAUS 50 STRING F_DADESCAUS 50
BEGIN BEGIN
PROMPT 23 15 "" PROMPT 23 16 ""
USE LF_CAUSALI KEY 2 USE LF_CAUSALI KEY 2
INPUT DESCR F_DADESCAUS INPUT DESCR F_DADESCAUS
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
@ -286,7 +350,7 @@ END
STRING F_ACAUSALE 3 STRING F_ACAUSALE 3
BEGIN BEGIN
PROMPT 2 16 "A causale " PROMPT 2 17 "A causale "
FLAGS "UZ" FLAGS "UZ"
COPY USE F_DACAUSALE COPY USE F_DACAUSALE
INPUT CODCAUS F_ACAUSALE INPUT CODCAUS F_ACAUSALE
@ -301,7 +365,7 @@ END
STRING F_ADESCAUS 50 STRING F_ADESCAUS 50
BEGIN BEGIN
PROMPT 23 16 "" PROMPT 23 17 ""
COPY USE F_DADESCAUS COPY USE F_DADESCAUS
INPUT DESCR F_ADESCAUS INPUT DESCR F_ADESCAUS
COPY DISPLAY F_DADESCAUS COPY DISPLAY F_DADESCAUS
@ -312,7 +376,7 @@ END
BOOLEAN F_ST_CONTSEP BOOLEAN F_ST_CONTSEP
BEGIN BEGIN
PROMPT 2 17 "Visualizzare contabilità separata" PROMPT 2 18 "Visualizzare contabilità separata"
MODULE NP MODULE NP
END END

View File

@ -24,7 +24,8 @@
#include "cglib02.h" #include "cglib02.h"
struct therec { struct therec
{
char DATAREG[9]; char DATAREG[9];
char REG[4]; char REG[4];
char DATADOC[9]; char DATADOC[9];
@ -44,9 +45,6 @@ public:
void sort_all(); void sort_all();
bool sort_sal(); bool sort_sal();
CG4100_App() {}
virtual ~CG4100_App() {}
}; };
bool CG4100_App::set_parms() bool CG4100_App::set_parms()
@ -58,10 +56,8 @@ bool CG4100_App::set_parms()
void CG4100_App::main_loop() void CG4100_App::main_loop()
{ {
if (fexist("__sal__.sav")) if (fexist("__sal__.sav"))
warning_box(TR("Un'operazione di riordino saldi si e' conclusa" warning_box(TR("Un'operazione di riordino saldi si e' conclusa impropriamente. Si raccomanda di rieseguirla"));
" impropriamente. Si raccomanda di rieseguirla"));
_msk = new TMask("cg4100b"); _msk = new TMask("cg4100b");

View File

@ -31,7 +31,7 @@ bool _Iva11Array::add(const real& val, const char* fld_name, int num_file)
bool _Iva11Array::sub(const real& val, const char* fld_name, int num_file) bool _Iva11Array::sub(const real& val, const char* fld_name, int num_file)
{ {
const real v1 = val * (-1.0); const real v1 = -val;
return add(v1,fld_name, num_file); return add(v1,fld_name, num_file);
} }
@ -51,21 +51,26 @@ void _Iva11Array::zero(const char* fld_name)
// se la % prorata relativa all'anno indicato non esiste, ritorna 0 // se la % prorata relativa all'anno indicato non esiste, ritorna 0
real _ProrataItem::calc_prorata(const real& acq, const char* year) real _ProrataItem::calc_prorata(const real& acq, const char* year)
{ {
const real* perc = (const real*)_percentuali.objptr(year); real prorata;
if (perc) const real& perc = percentuale(year);
if (perc != INVALID_PRORATA && perc > ZERO)
{ {
real prorata = acq * (*perc) / CENTO; if (perc < CENTO)
{
prorata = acq * perc / CENTO;
prorata.round(TCurrency::get_firm_dec()); prorata.round(TCurrency::get_firm_dec());
return prorata;
} }
return ZERO; else
prorata = acq;
}
return prorata;
} }
// Ritorna la % prorata relativa all'anno indicato. Se non esiste internamente // Ritorna la % prorata relativa all'anno indicato. Se non esiste internamente
// viene ritornato INVALID_PRORATA // viene ritornato INVALID_PRORATA
const real& _ProrataItem::percentuale(const char * year) const const real& _ProrataItem::percentuale(const char* year) const
{ {
const real* p = (real*)_percentuali.objptr(year); const real* p = (const real*)_percentuali.objptr(year);
if (p && !p->is_zero()) if (p && !p->is_zero())
return *p; return *p;
return INVALID_PRORATA; return INVALID_PRORATA;
@ -616,9 +621,10 @@ void TLiquidazione_app::build_nomiditte(TProgind* pnd)
if (!look_lia(dt.get_long("CODDITTA"))) if (!look_lia(dt.get_long("CODDITTA")))
good = FALSE; good = FALSE;
} }
else continue; else
continue;
TToken_string* d = new TToken_string(64); TToken_string* d = new TToken_string(63);
// add record // add record
d->add(dt.get("CODDITTA")); d->add(dt.get("CODDITTA"));
@ -635,7 +641,8 @@ void TLiquidazione_app::build_nomiditte(TProgind* pnd)
} }
_nomiditte.add(d); _nomiditte.add(d);
} }
if (pnd) pnd->addstatus(1); if (pnd)
pnd->addstatus(1);
} }
bool TLiquidazione_app::to_ditt_handler(TMask_field& f, KEY key) bool TLiquidazione_app::to_ditt_handler(TMask_field& f, KEY key)

View File

@ -450,6 +450,7 @@ protected:
static bool chk_final_handler(TMask_field& f, KEY key); static bool chk_final_handler(TMask_field& f, KEY key);
static TLiquidazione_app& app() { return (TLiquidazione_app&)main_app(); } static TLiquidazione_app& app() { return (TLiquidazione_app&)main_app(); }
bool print_diff_log(int& rw);
public: public:

View File

@ -160,6 +160,12 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
TConfig c(CONFIG_DITTA); TConfig c(CONFIG_DITTA);
_isdiff = c.get_bool("GesLiqDiff"); _isdiff = c.get_bool("GesLiqDiff");
if (_isdiff)
{
TFilename tmp; tmp.tempdir();
tmp.add("liqdiff.txt");
ofstream log(tmp);
}
if (month == 13 && recalc) if (month == 13 && recalc)
{ {
@ -546,7 +552,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
for (_pia->first(); !_pia->eof(); _pia->next()) for (_pia->first(); !_pia->eof(); _pia->next())
{ {
const int m = atoi(*_pia_mese); const int m = atoi(*_pia_mese);
const TString16 att = (const char*)*_pia_codatt; const TString8 att = (const char*)*_pia_codatt;
if (m == month && att == codatt && (_year == *_pia_anno)) if (m == month && att == codatt && (_year == *_pia_anno))
{ {
_pia->put("R0",""); // Imponibile _pia->put("R0",""); // Imponibile
@ -561,9 +567,9 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
} }
void TLiquidazione_app::recalc_att(int month, const char* codatt) void TLiquidazione_app::recalc_att(int month, const char* codatt)
// il codatt passato e' codice att + tipo att ( IN {1|2} ) // il codatt passato e' codice att + tipo att ( IN {1|2} )
// occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati // occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati
// saranno solo quelli di dicembre per data <= 20/12; // saranno solo quelli di dicembre per data <= 20/12;
{ {
const bool has_sc = has_module(SCAUT, CHK_DONGLE); const bool has_sc = has_module(SCAUT, CHK_DONGLE);
real totintra = ZERO; real totintra = ZERO;
@ -709,8 +715,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TString8 fromreg("~"), toreg("0"); TString8 fromreg("~"), toreg("0");
{ {
TRelation * regrel = new TRelation("REG"); TRelation regrel("REG");
TCursor reg(regrel); TCursor reg(&regrel);
TString4 codreg; TString4 codreg;
const int items = reg.items(); const int items = reg.items();
@ -723,8 +729,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (codreg > toreg) if (codreg > toreg)
toreg = codreg; toreg = codreg;
} }
delete regrel;
} }
//TDate f(1, month == 13 ? 1 : month, year_int); //TDate f(1, month == 13 ? 1 : month, year_int);
@ -813,17 +817,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const bool fattrit = rcs.get_bool("RITFATT"); const bool fattrit = rcs.get_bool("RITFATT");
const bool cau_intra = rcs.get_bool("INTRACOM"); const bool cau_intra = rcs.get_bool("INTRACOM");
const bool cau_valintra = rcs.get_bool("VALINTRA"); const bool cau_valintra = rcs.get_bool("VALINTRA");
// Inizio gestione IVA differita
const bool movdiff = _isdiff && _mov->get_bool(MOV_LIQDIFF); const bool movdiff = _isdiff && _mov->get_bool(MOV_LIQDIFF);
// Se c'è data incasso, normalmente vuol dire che: NO saldaconto e pagamento completo
TDate datainc = _mov->get_date(MOV_DATAINC); TDate datainc = _mov->get_date(MOV_DATAINC);
if (movdiff && !datainc.ok()) if (movdiff && !datainc.ok())
{ {
const long codcf = _mov->get_long(MOV_CODCF); const long codcf = _mov->get_long(MOV_CODCF);
TString8 key(_mov->get(MOV_TIPO)); key << "|" << codcf; TString8 key(_mov->get(MOV_TIPO)); key << "|" << codcf;
const TRectype & clifo = cache().get(LF_CLIFO, key); const TRectype & clifo = cache().get(LF_CLIFO, key);
if (clifo.get_int(CLI_ALLEG) < 7) // non e' un ente pubblico // se non e' un ente pubblico forzo data incasso un anno dopo il documento
if (clifo.get_int(CLI_ALLEG) < 7)
{ {
datainc = _mov->get_date(MOV_DATADOC); datainc = _mov->get_date(MOV_DATADOC);
if (datainc.ok()) if (datainc.ok())
@ -831,70 +838,67 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
} }
} }
// datainc_ok significa che la data incasso è compresa nel periodo di liquidazione in corso di calcolo
bool datainc_ok = is_date_ok(datainc, month, liqmonth, year_int); bool datainc_ok = is_date_ok(datainc, month, liqmonth, year_int);
const bool diffpayed = movdiff && datainc_ok; const bool diffpayed = movdiff && datainc_ok;
const bool difftopay = movdiff && !diffpayed; const bool difftopay = movdiff && !diffpayed;
// Se ho fatto un pagamento differito porto la data di registrazione alla data incasso
if (diffpayed) if (diffpayed)
date = datainc; date = datainc;
real pagatt; real totfat, pagatt, ncatt;
real ncatt;
real totfat;
TImporto pagprec;
TImporto pag;
TImporto ncprec;
TImporto nc;
bool dok = is_date_ok(date, month, liqmonth, year_int); bool dok = is_date_ok(date, month, liqmonth, year_int);
TPartite_array arrpart;
TPartite_array arrpart; // Partite interessate
TPointer_array pagscatt; // Righe di pagsca interessate
const long numreg = _mov->get_long(MOV_NUMREG); const long numreg = _mov->get_long(MOV_NUMREG);
// In presenza di saldaconto determino meglio la data incasso in base alle righe di pagamento
if (has_sc && movdiff && (!datainc.ok() || datainc > inizio)) if (has_sc && movdiff && (!datainc.ok() || datainc > inizio))
{ {
arrpart.add_numreg(numreg); //arrpart.add_numreg(numreg);
if (arrpart.utilizzata(numreg, 1)) //if (arrpart.utilizzata(numreg, 1))
if (arrpart.add_numreg(numreg)) // Ovviamente più efficiente di quanto sopra
{ {
const int items = arrpart.items(); // Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'D'
const char sez = (tipomov == vendita ? 'A' : 'D'); const char sezfat = tipomov == vendita ? 'D' : 'A';
const char sezpag = tipomov == vendita ? 'A' : 'D';
for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next()) for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next())
{ {
int row = p->mov2rig(numreg, 1); const int row = p->mov2rig(numreg, 0);
if (row > 0)
if (row >= 0)
{ {
const TRiga_partite& rp = p->riga(row); const TRiga_partite& rp = p->riga(row);
TImporto importo(rp.get_char(PART_SEZ), rp.get_real(PART_IMPORTO)); importo.normalize(); importo.swap_section(); TImporto pg, nc;
TDate lastpg, lastnc;
totfat += importo.valore(); const int flag = rp.calcola_pagato_periodo(inizio+1L, fine, pg, nc, &pagscatt);
pagprec += rp.calcola_pagato_al(false, inizio, inizio, inizio); pagprec.normalize(sez); if (flag)
pag += rp.calcola_pagato_al(false, fine, fine, fine); pag.normalize(sez); {
TImporto importo = rp.importo(false, 0x1);
// Inizio aggiunte di Bonazzi del 16/02/2012 importo.normalize(sezfat);
ncprec += rp.calcola_pagato_al(false, inizio, inizio, inizio, 0x1F); ncprec.normalize(sez); totfat = importo.valore();
nc += rp.calcola_pagato_al(false, fine, fine, fine, 0x1F); nc.normalize(sez); CHECK(totfat >= ZERO, "Fattura negativa inattesa qui");
// Fine aggiunte di Bonazzi del 16/02/2012 if (flag & 1)
{
pg.normalize(sezpag);
pagatt += pg.valore();
}
if (flag & 2)
{
nc.normalize(sezpag);
ncatt += nc.valore();
} }
} }
if ((diffpayed && dok) || (pag.valore() > totfat)) }
pag.set(sez, totfat); }
pagatt = pag.valore() - pagprec.valore(); if ((diffpayed && dok) || (pagatt > totfat))
pagatt = totfat;
// Spostato sotto 26/03/2012
//if (pagatt > ZERO)
// dok = true;
// Inizio aggiunte di Bonazzi del 16/02/2012
ncatt = nc.valore() - ncprec.valore();
pagatt -= ncatt;
// Fine aggiunte di Bonazzi del 16/02/2012
if (pagatt > ZERO) if (pagatt > ZERO)
dok = true; dok = true;
} }
} }
/* /*
* check register present, rmoviva present and date OK * check register present, rmoviva present and date OK
* *
@ -907,10 +911,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const bool sreg = !isreg; const bool sreg = !isreg;
const bool rs8 = _reg->get("S8") != trueatt; const bool rs8 = _reg->get("S8") != trueatt;
const bool cmt = !_cur->is_first_match(LF_RMOVIVA); const bool cmt = !_cur->is_first_match(LF_RMOVIVA);
// const bool dok1 = dok || diffpayed;
if (!dok || sreg || rs8 || cmt) if (!dok || sreg || rs8 || cmt)
continue; continue;
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna; const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
@ -964,10 +966,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real nin_iva = ZERO; // imposta non incassati real nin_iva = ZERO; // imposta non incassati
look_iva(_rmoviva->get(RMI_CODIVA)); look_iva(_rmoviva->get(RMI_CODIVA));
TString4 codiva = _iva->get("CODTAB"); const TString4 codiva = _iva->get("CODTAB");
TString4 tipoiva = _iva->get("S1"); const TString4 tipoiva = _iva->get("S1");
TString8 tipoes_v = _iva->get("S2"); const TString8 tipoes_v = _iva->get("S2");
TString8 tipoes_a = _iva->get("S9"); const TString8 tipoes_a = _iva->get("S9");
const int tipoagr = _iva->get_int("S4"); const int tipoagr = _iva->get_int("S4");
const int tipoag = _iva->get_int("S5"); const int tipoag = _iva->get_int("S5");
const int tipopla = _iva->get_int("S3"); const int tipopla = _iva->get_int("S3");
@ -975,7 +977,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const real perciva = _iva->get_real("R0") / CENTO; const real perciva = _iva->get_real("R0") / CENTO;
int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media
const TString8 tipocr_s = _rmoviva->get(RMI_TIPOCR); const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR);
const int tipocr = atoi(tipocr_s); const int tipocr = atoi(tipocr_s);
const bool intra = _rmoviva->get_bool(RMI_INTRA); const bool intra = _rmoviva->get_bool(RMI_INTRA);
@ -991,12 +993,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const bool was_riv = (tipoiva != "NS") && (tipocr == 1 || tipocr ==5); const bool was_riv = (tipoiva != "NS") && (tipocr == 1 || tipocr ==5);
real percind; real percind;
const int tipoind = get_tipodet_from_rmi(_rmoviva->curr(), _mov->curr(), percind, true); const int tipoind = get_tipodet_from_rmi(_rmoviva->curr(), _mov->curr(), percind, true);
const int decimals = TCurrency::get_firm_dec();
const real imponibile_orig = _rmoviva->get_real(RMI_IMPONIBILE); const real imponibile_orig = _rmoviva->get_real(RMI_IMPONIBILE);
const real imposta_orig = _rmoviva->get_real(RMI_IMPOSTA); const real imposta_orig = _rmoviva->get_real(RMI_IMPOSTA);
const int decimals = TCurrency::get_firm_dec();
real diff_imp; // Liquidazione differita imponibile real diff_imp; // Liquidazione differita imponibile
real diff_iva; // Liquidazione differita imposta real diff_iva; // Liquidazione differita imposta
real incdiff_imp; // Liquidazione differita incassate imponibile real incdiff_imp; // Liquidazione differita incassate imponibile
@ -1008,14 +1009,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (pagatt > ZERO || ncatt > ZERO) if (pagatt > ZERO || ncatt > ZERO)
{ {
if (pag.valore() >= totfat) // Il totale dei pagamenti chiude la fattura?
if (pagatt >= totfat) // Calcolo del cavolo: dovrebbe guardare il saldo fattura, no?
{ {
TDate from(_mov->get(MOV_DATAREG)); TDate from(_mov->get(MOV_DATAREG));
real impprec; real impprec, ivaprec, ncprec;
real ivaprec;
real ncprec;
real val;
if (month < 13) if (month < 13)
{ {
TDate to(inizio); TDate to(inizio);
@ -1040,32 +1038,22 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TImporto nctmp; TImporto nctmp;
// Fine aggiunte di Bonazzi del 16/02/2012 // Fine aggiunte di Bonazzi del 16/02/2012
for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next()) for (TPartita* p = arrpart.first(); p != NULL; p = arrpart.next())
{ {
int row = p->mov2rig(numreg, 1); const int row = p->mov2rig(numreg, 1);
if (row > 0)
if (row >= 0)
{ {
TRiga_partite rp = p->riga(row); const TRiga_partite& rp = p->riga(row);
rp.calcola_pagato_periodo(from+1L, endp, pagtmp, nctmp);
pagtmp += rp.calcola_pagato_al(false, endp, endp, endp, 9); }
pagtmp -= rp.calcola_pagato_al(false, from, from, from, 9); }
pagtmp.normalize(sez); pagtmp.normalize(sez);
// Inizio aggiunte di Bonazzi del 16/02/2012
nctmp += rp.calcola_pagato_al(false, endp, endp, endp, 0x19);
nctmp -= rp.calcola_pagato_al(false, from, from, from, 0x19);
nctmp.normalize(sez);
pagtmp -= nctmp;
// Fine aggiunte di Bonazzi del 16/02/2012
}
}
if (!pagtmp.is_zero()) if (!pagtmp.is_zero())
{ {
const real perc = pagtmp.valore() / totfat; const real perc = pagtmp.valore() / totfat;
val = imponibile_orig * perc; real val = imponibile_orig * perc;
val.round(TCurrency::get_firm_dec()); val.round(TCurrency::get_firm_dec());
impprec += val; impprec += val;
val = imposta_orig * perc; val = imposta_orig * perc;
@ -1089,22 +1077,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TDate to(31,12, from.year()); TDate to(31,12, from.year());
const int items = arrpart.items(); const int items = arrpart.items();
const char sez = (tipomov == vendita ? 'A' : 'D'); const char sez = (tipomov == vendita ? 'A' : 'D');
TImporto pagtmp; TImporto pagtmp, nctmp;
TImporto nctmp;
for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next()) for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next())
{ {
int row = p->mov2rig(numreg, 1); const int row = p->mov2rig(numreg, 1);
if (row >= 0) if (row >= 0)
{ {
TRiga_partite rp = p->riga(row); const TRiga_partite& rp = p->riga(row);
rp.calcola_pagato_periodo(botime, to, pagtmp, nctmp);
pagtmp += rp.calcola_pagato_al(false, to, to, to, 9);
pagtmp.normalize(sez);
nctmp += rp.calcola_pagato_al(false, to, to, to, 0x19);
nctmp.normalize(sez);
pagtmp -= nctmp;
} }
} }
if (!pagtmp.is_zero()) if (!pagtmp.is_zero())
@ -1112,10 +1092,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const real perc = pagtmp.valore() / totfat; const real perc = pagtmp.valore() / totfat;
real val = imponibile_orig * perc; real val = imponibile_orig * perc;
val.round(TCurrency::get_firm_dec()); val.round(decimals);
impprec = val; impprec = val;
val = imposta_orig * perc; val = imposta_orig * perc;
val.round(TCurrency::get_firm_dec()); val.round(decimals);
ivaprec = val; ivaprec = val;
} }
if (!nctmp.is_zero()) if (!nctmp.is_zero())
@ -1129,30 +1109,33 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const real ncperc = ncatt / totfat; const real ncperc = ncatt / totfat;
val = imponibile_orig * ncperc; real val = imponibile_orig * ncperc;
val.round(TCurrency::get_firm_dec()); val.round(decimals);
diff_imp = -val; diff_imp = -val;
incdiff_imp -= val; incdiff_imp -= val;
val = imposta_orig * ncperc; val = imposta_orig * ncperc;
val.round(TCurrency::get_firm_dec()); val.round(decimals);
diff_iva = -val; diff_iva = -val;
incdiff_iva -= val; incdiff_iva -= val;
} }
else else
{ { // La fattura è ancora aperta
real perc = pagatt / totfat; // Calcolo rapporto tra pagamento e totale fattura
const real perc = pagatt / totfat;
incdiff_imp = imponibile_orig * perc; incdiff_imp = imponibile_orig * perc;
incdiff_imp.round(TCurrency::get_firm_dec()); incdiff_imp.round(decimals);
incdiff_iva = imposta_orig * perc; incdiff_iva = imposta_orig * perc;
incdiff_iva.round(TCurrency::get_firm_dec()); incdiff_iva.round(decimals);
if (month == 13) if (month == 13)
{ {
diff_imp = imponibile_orig - incdiff_imp; diff_imp = imponibile_orig - incdiff_imp;
diff_iva = imposta_orig - incdiff_iva; diff_iva = imposta_orig - incdiff_iva;
} }
const real ncperc = ncatt / totfat;
/* Guy 08-08-2012: Mi pare una cosa inutile
// Calcolo rapporto tra nota credito e totale fattura
const real ncperc = ncatt / totfat;
real val = imponibile_orig * ncperc; real val = imponibile_orig * ncperc;
val.round(TCurrency::get_firm_dec()); val.round(TCurrency::get_firm_dec());
diff_imp = -val; diff_imp = -val;
@ -1161,16 +1144,34 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
val.round(TCurrency::get_firm_dec()); val.round(TCurrency::get_firm_dec());
diff_iva = -val; diff_iva = -val;
incdiff_iva -= val; incdiff_iva -= val;
} */
if (pagatt > ZERO && !pagscatt.empty())
{
TFilename tmp; tmp.tempdir();
tmp.add("liqdiff.txt");
ofstream log(tmp, ios_base::app);
const TRectype& rec = (TRectype&)pagscatt[pagscatt.last()];
const TPartita& par = arrpart.partita(rec);
const TRiga_partite& sum = par.riga(rec.get_int(PAGSCA_NRIGP));
log << codiva << '\t' << pagatt.string() << '\t'
<< incdiff_imp.string() << '\t' << incdiff_iva.string() << '\t'
<< sum.get(PART_NREG) << '\t' << sum.get_date(PART_DATAPAG) << '\t'
<< numreg << '\t' << date.string() << endl;
}
}
} }
else else
{
if (difftopay) if (difftopay)
{ {
diff_imp = imponibile_orig; diff_imp = imponibile_orig;
diff_iva = imposta_orig; diff_iva = imposta_orig;
} }
else else
{
if (diffpayed) if (diffpayed)
{ {
incdiff_imp = imponibile_orig; incdiff_imp = imponibile_orig;
@ -1179,9 +1180,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
else else
analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva, analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva,
impon_det, impos_det, impon_ind, impos_ind); impon_det, impos_det, impon_ind, impos_ind);
}
}
// qui
// qui
for (int is_detraibile = 0; is_detraibile < 2; is_detraibile++) for (int is_detraibile = 0; is_detraibile < 2; is_detraibile++)
{ {
const int tipodet = is_detraibile ? 0 : tipoind; const int tipodet = is_detraibile ? 0 : tipoind;
@ -2025,10 +2027,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (tipomov == vendita) if (tipomov == vendita)
{ {
// fatture a liquidazione differita // fatture a liquidazione differita
tab->put("R26", tab->get_real("R26") + diff_imp); tab->curr().add("R26", diff_imp);
tab->put("R27", tab->get_real("R27") + diff_iva); tab->curr().add("R27", diff_iva);
tab->put("R28", tab->get_real("R28") + incdiff_imp); tab->curr().add("R28", incdiff_imp);
tab->put("R29", tab->get_real("R29") + incdiff_iva); tab->curr().add("R29", incdiff_iva);
fdiff_imp += diff_imp; fdiff_imp += diff_imp;
fdiff_iva += diff_iva; fdiff_iva += diff_iva;
fdiffinc_imp += incdiff_imp; fdiffinc_imp += incdiff_imp;

View File

@ -259,7 +259,7 @@ bool TLiquidazione_app::look_pim(int month, const char* codatt, const char* codr
(*_pim_tipodet) = tipodet; (*_pim_tipodet) = tipodet;
const TString80 s = _pim_r->get("CODTAB"); const TString80 s = _pim_r->get("CODTAB");
bool ok = _pim->read() == NOERR; const bool ok = _pim->read() == NOERR;
if (!ok && create) if (!ok && create)
{ {
_pim_r->zero(); _pim_r->zero();

View File

@ -141,7 +141,7 @@ void TLiquidazione_app::describe_att(int month, const char* codatt,
if (atts.items() == 1 && _isviaggio) if (atts.items() == 1 && _isviaggio)
describe_viaggio(month, codatt); describe_viaggio(month, codatt);
describe_pims(month,codatt,FALSE); describe_pims(month,codatt,FALSE);
if (atoi(_year) > 1997) // Descrive anche i PIS se esistono // if (atoi(_year) > 1997) // Descrive anche i PIS se esistono
describe_pims(month,codatt,TRUE); describe_pims(month,codatt,TRUE);
if (atts.items() == 1) if (atts.items() == 1)
describe_consistence(codatt); describe_consistence(codatt);
@ -499,8 +499,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
// L'ultimo parametro serve per calcolare i PIS (progressivi del periodo successivo) // L'ultimo parametro serve per calcolare i PIS (progressivi del periodo successivo)
{ {
TToken_string atts(codatt); TToken_string atts(codatt);
TString ref(atts.items() == 1 ? codatt : "ALL"); const TString8 ref(atts.items() == 1 ? codatt : "ALL");
const char* tmpatt;
int last = _descr_arr.last(); int last = _descr_arr.last();
bool issosp = false; bool issosp = false;
real t0, t1, t2, t3, t4, t5, t26, t27, t28, t29, t30, t31, t32, t33; real t0, t1, t2, t3, t4, t5, t26, t27, t28, t29, t30, t31, t32, t33;
@ -516,7 +515,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
_DescrItem* iads = NULL; _DescrItem* iads = NULL;
// Seleziona la tabella corretta: PIM o PIS e l'identificatore // Seleziona la tabella corretta: PIM o PIS e l'identificatore
TTable * tab = describe_pis ? _pis : _pim; TTable* tab = describe_pis ? _pis : _pim;
const word PIM_PIS = describe_pis ? PIS_ROW : PIM_ROW; const word PIM_PIS = describe_pis ? PIS_ROW : PIM_ROW;
// questa cazzata serve per far apparire l'intestazione delle colonne // questa cazzata serve per far apparire l'intestazione delle colonne
@ -538,12 +537,14 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
bool is_key; bool is_key;
// Never mind the bollox // Never mind the bollox
TString codtab, codreg, codiva, activity, anno; TString80 codtab;
TString8 activity;
TString4 codreg, codiva, anno;
int mese; int mese;
while ((tmpatt = atts.get()) != NULL) FOR_EACH_TOKEN(atts, tmpatt)
{ {
TString att(tmpatt); const TString8 att(tmpatt);
for (tab->first(); !tab->eof(); tab->next()) for (tab->first(); !tab->eof(); tab->next())
{ {
@ -569,17 +570,15 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
real rit_imp(s1.get(0)); real rit_imp(s1.get(0));
real rit_iva(s1.get(1)); real rit_iva(s1.get(1));
// if (tipomov == vendita)
// {
diffimp = _pim->get_real("R26"); diffimp = _pim->get_real("R26");
diffiva = _pim->get_real("R27"); diffiva = _pim->get_real("R27");
diffincimp = _pim->get_real("R28"); diffincimp = _pim->get_real("R28");
diffinciva = _pim->get_real("R29"); diffinciva = _pim->get_real("R29");
diffimp_acq = _pim->get_real("R30"); diffimp_acq = _pim->get_real("R30");
diffiva_acq = _pim->get_real("R31"); diffiva_acq = _pim->get_real("R31");
diffincimp_acq = _pim->get_real("R32"); diffincimp_acq = _pim->get_real("R32");
diffinciva_acq = _pim->get_real("R33"); diffinciva_acq = _pim->get_real("R33");
// }
const bool is_rit= tipodet != 0 && month == 13 && rit_imp != 0.0; //Se fattura in ritardo con tipo detr. != 0 e si sta calcolando l'annuale const bool is_rit= tipodet != 0 && month == 13 && rit_imp != 0.0; //Se fattura in ritardo con tipo detr. != 0 e si sta calcolando l'annuale
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna; const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
@ -594,11 +593,13 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
} }
// se e' corrispettivo da ventilare non // se e' corrispettivo da ventilare non
// scrivo un cannolo ripieno visto che e' stato ventilato // scrivo un cannolo ripieno visto che e' stato ventilato
if (tipomov == vendita && tipoiva == "VE" && !describe_pis) continue; if (tipomov == vendita && tipoiva == "VE" && !describe_pis)
continue;
// se e' il dettaglio di una attivita' mista non stampa // se e' il dettaglio di una attivita' mista non stampa
// gli acquisti, il perche' losalamadonna // gli acquisti, il perche' losalamadonna
if (tipomov == acquisto && skip_acq) continue; if (tipomov == acquisto && skip_acq)
continue;
// questi non vanno in liquidazione, i totali sono // questi non vanno in liquidazione, i totali sono
// gia' calcolati altrove // gia' calcolati altrove
@ -1005,12 +1006,12 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
int m = annual ? month : 1; int m = annual ? month : 1;
for (; m <= limit; m++) for (; m <= limit; m++)
{ {
if (!is_month_ok(m,month)) continue; if (!is_month_ok(m,month))
continue;
atts.restart(); FOR_EACH_TOKEN (atts, tmpatt)
while ((tmpatt = atts.get()) != NULL)
{ {
TString att(tmpatt); const TString8 att(tmpatt);
look_plm(m, att); look_plm(m, att);
real ad1, ad2; real ad1, ad2;
@ -1479,12 +1480,12 @@ void TLiquidazione_app::set_att(_DescrItem& d)
if (d._s3.empty()) if (d._s3.empty())
{ {
att_title = flags == 'M' ? TR("Riepilogo attivita' mista") : att_title = flags == 'M' ? TR("Riepilogo attività mista") :
TR("Riepilogo quater"); TR("Riepilogo quater");
// att_title << d._s2; // att_title << d._s2;
} }
else else
att_title = format(FR("Attivita' %s %s %s"), att_title = format(FR("Attività %s %s %s"),
(const char*)(d._s2), (const char*)(d._s2),
(const char*)(d._s3), (const char*)(d._s3),
(const char*)tipatt); (const char*)tipatt);
@ -1696,6 +1697,46 @@ void TLiquidazione_app::set_liqacc_2000(_DescrItem& d)
set_auto_ff(); set_auto_ff();
} }
bool TLiquidazione_app::print_diff_log(int& rw)
{
if (_isregis || _isfinal)
return false;
TFilename tmp; tmp.tempdir();
tmp.add("liqdiff.txt");
ifstream f(tmp);
TToken_string str(256, '\t');
bool header = false;
while (f.good())
{
f.getline(str.get_buffer(), str.size()); str.trim();
if (str.full())
{
if (!header)
{
header = true;
set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@64gPagamento@96gFattura");
}
const TString4 codiva = str.get(0);
const real importo = str.get();
const real imponibile = str.get();
const real imposta = str.get();
const TString16 numpag = str.get();
const TString16 datapag = str.get();
const TString16 numfat = str.get();
const TString16 datafat = str.get();
set_row(rw++, "%s@9g%r@25g%r@41g%r@64g%s@80g%s@96g%s@112g%s",
(const char*)codiva, &importo, &imponibile, &imposta,
(const char*)numpag, (const char*)datapag, (const char*)numfat, (const char*)datafat);
str.cut(0);
}
}
return header;
}
void TLiquidazione_app::set_pim_head(_DescrItem& d) void TLiquidazione_app::set_pim_head(_DescrItem& d)
{ {
@ -1716,6 +1757,7 @@ void TLiquidazione_app::set_pim_head(_DescrItem& d)
{ {
set_row(r++, TR("Fatture a liquidazione differita incassate")); set_row(r++, TR("Fatture a liquidazione differita incassate"));
set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark); set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark);
print_diff_log(r);
} }
else // PIS_HEAD else // PIS_HEAD
{ {
@ -1736,6 +1778,7 @@ void TLiquidazione_app::set_pim_head(_DescrItem& d)
{ {
set_row(r++, TR("Fatture a liquidazione differita incassate")); set_row(r++, TR("Fatture a liquidazione differita incassate"));
set_bookmark(TR("Riepilogo progressivi successivi a liquidazione differita incassati"), _att_bookmark); set_bookmark(TR("Riepilogo progressivi successivi a liquidazione differita incassati"), _att_bookmark);
print_diff_log(r);
} }
} }
set_row(r++,""); set_row(r++,"");

View File

@ -1,27 +1,8 @@
#include <applicat.h>
#include "../ba/ba8500.h" #include "../ba/ba8500.h"
///////////////////////////////////////////////////////////
// TBruceWayne_app
///////////////////////////////////////////////////////////
class TBruceWayne_app : public TKlarkKent_app
{
protected:
virtual TReport* create_report(const char* name) const;
};
TReport* TBruceWayne_app::create_report(const char* name) const
{
TReport* rep = new TReport;
rep->load(name);
return rep;
}
int cg7100(int argc, char* argv[]) int cg7100(int argc, char* argv[])
{ {
TBruceWayne_app app; TKlarkKent_app app;
app.run(argc, argv, TR("Stampa Report Contabilita'")); app.run(argc, argv, TR("Stampa Report Contabilità"));
return 0; return 0;
} }

View File

@ -29,7 +29,7 @@ BEGIN
FIELD #DATASTAMPA FIELD #DATASTAMPA
END END
LIST F_TIPOELENCO 9 LIST F_P_TIPOELENCO 9
BEGIN BEGIN
PROMPT 1 3 "Tipo elenco " PROMPT 1 3 "Tipo elenco "
HELP "Indicare cosa includere nella stampa" HELP "Indicare cosa includere nella stampa"

View File

@ -83,7 +83,7 @@ const TDate& TEsercizio::chiusura() const
((TDate&)_chiusura) = datacomp; // Forzatura ((TDate&)_chiusura) = datacomp; // Forzatura
TTable esc("ESC"); TTable esc("ESC");
esc.put("CODTAB", codice()); esc.put("CODTAB", codice());
if (esc.read(_lock) == NOERR) if (esc.read(_isequal, _lock) == NOERR)
{ {
esc.put("D3", datacomp); esc.put("D3", datacomp);
esc.rewrite(); esc.rewrite();

View File

@ -297,32 +297,22 @@ bool TRiga_scadenze::chiusa(bool update) const
return chiusa; return chiusa;
} }
// Calcola il totale dei pagamenti alla data (eventualmente in valuta) static TImporto extract_importo(const TRectype& pag, const TRiga_partite& sum, bool val, int mode)
TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate & al, int mode) const
{ {
CHECKD(mode > 0x0 && mode <= 0xFF, "Bad importo_pagato mode ", mode);
const TPartita& game = partita();
const bool in_val = in_valuta();
const char* imp_field = (val && in_val) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
TImporto totale; TImporto totale;
for (int p = last(); p > 0; p = pred(p))
{
const TRectype& pag = row(p); // Riga pagamento
const TRiga_partite& sum = game.riga(p); // Riga partite
const TDate & datapag = sum.get_date(PART_DATAPAG);
if (datapag <= al)
{
// Inizio aggiunte di Bonazzi del 16/02/2012 // Inizio aggiunte di Bonazzi del 16/02/2012
if (mode & 0x10) // solo le note di credito if (mode & 0x10) // solo le note di credito
{ {
const tipo_movimento tm = (tipo_movimento)sum.get_int(PART_TIPOMOV); const tipo_movimento tm = sum.tipo();
if (tm != tm_nota_credito) if (tm != tm_nota_credito)
continue; return totale; // = ZERO
} }
// Fine aggiunte di Bonazzi del 16/02/2012 // Fine aggiunte di Bonazzi del 16/02/2012
const bool in_val = sum.in_valuta();
const char* imp_field = (val && in_val) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
const char sez = sum.sezione(); const char sez = sum.sezione();
if (mode & 0x1) if (mode & 0x1)
{ {
@ -356,12 +346,35 @@ TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate & al, int mode)
const TImporto diffcam(sez, pag.get_real(PAGSCA_DIFFCAM)); const TImporto diffcam(sez, pag.get_real(PAGSCA_DIFFCAM));
totale += diffcam; totale += diffcam;
} }
}
return totale;
}
/* Funzione chiamata esclusivamente da altra funzione commentata
// Calcola il totale dei pagamenti alla data (eventualmente in valuta)
TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate& al, int mode) const
{
CHECKD(mode > 0x0 && mode <= 0xFF, "Bad importo_pagato mode ", mode);
const TPartita& game = partita();
const bool in_val = in_valuta();
const char* imp_field = (val && in_val) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
TImporto totale;
for (int p = last(); p > 0; p = pred(p))
{
const TRectype& pag = row(p); // Riga pagamento
const TRiga_partite& sum = game.riga(p); // Riga partite
const TDate datapag = sum.get_date(PART_DATAPAG);
if (datapag <= al)
totale += extract_importo(pag, sum, val, mode);
} }
return totale.normalize(); return totale.normalize();
} }
*/
// Calcola il totale dei pagamenti (eventualmente in valuta) // Calcola il totale dei pagamenti (eventualmente in valuta)
TImporto TRiga_scadenze::importo_pagato(bool val, int mode) const TImporto TRiga_scadenze::importo_pagato(bool val, int mode) const
{ {
@ -1052,6 +1065,7 @@ TImporto TRiga_partite::esposto(bool valuta, const TDate & data_scad, const TDat
return esposto; return esposto;
} }
/*
TImporto TRiga_partite::calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode) const TImporto TRiga_partite::calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode) const
{ {
TImporto pagato; TImporto pagato;
@ -1067,15 +1081,85 @@ TImporto TRiga_partite::calcola_pagato_al(bool valuta,const TDate& al, const TDa
const TRiga_scadenze& scad = rata(r); const TRiga_scadenze& scad = rata(r);
const TImporto pag = scad.importo_pagato_al(valuta, al, mode); const TImporto pag = scad.importo_pagato_al(valuta, al, mode);
pagato += pag; pagato += pag;
if (!pag.is_zero() && rischio) if (rischio && !pag.is_zero())
{ {
bool sbf = false; bool sbf = false;
pagato -= scad.esposto_al(valuta, al, data_scaduto, data_rischio, sbf); pagato -= scad.esposto_al(valuta, al, data_scaduto, data_rischio, sbf);
} }
} }
} }
return pagato; return pagato;
} }
*/
int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TImporto& pg, TImporto& nc, TPointer_array* pagsca) const
{
int flag = 0;
if (!is_fattura())
return flag;
TPointer_array pags;
const int lastr = rate();
for (int r = lastr; r > 0; r--)
{
const TRiga_scadenze& scad = rata(r);
for (int p = scad.last(); p > 0; p = scad.pred(p))
{
const TRectype& pag = scad.row(p); // Riga pagamento
const TRiga_partite& sum = partita().riga(p); // Riga partite
const TDate datapag = sum.get_date(PART_DATAPAG);
if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al))
pags.add((TRectype*)&pag);
}
}
// Cerco di gestire anche i non assegnati sulla unica fattura di una partita
const TRecord_array& unas = partita().unassigned();
if (unas.rows() > 0)
{
int fatture = 0;
for (int r = partita().last(); r > 0 && fatture < 2; r = partita().pred(r))
{
if (partita().riga(r).tipo() == tm_fattura)
fatture++;
}
if (fatture == 1)
{
for(int r = unas.last_row(); r > 0; r = unas.pred_row(r))
{
const TRectype& pag = unas.row(r);
const TRiga_partite& sum = partita().riga(r);
const TDate datapag = sum.get_date(PART_DATAPAG);
if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al))
pags.add((TRectype*)&pag);
}
}
}
FOR_EACH_ARRAY_ITEM(pags, p, obj)
{
const TRectype& pag = *(TRectype*)obj;
const TRiga_partite& sum = partita().riga(pag.get_int(PAGSCA_NRIGP));
const tipo_movimento tm = sum.tipo();
const TImporto imp = extract_importo(pag, sum, false, 0xF);
if (tm == tm_nota_credito)
{
nc += imp;
flag |= 2;
}
else
{
pg += imp;
flag |= 1;
if (pagsca != NULL && tm == tm_pagamento || tm == tm_pagamento_insoluto)
pagsca->add(obj);
}
}
return flag;
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TRiga_partite_array // TRiga_partite_array
@ -1750,6 +1834,9 @@ TImporto TPartita::calcola_saldo(bool valuta) const
return saldo; return saldo;
} }
/*
Funzione completamente inutile e certamente NON utilizzata nei moduli cg, sc e ve
TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const
{ {
TImporto pagato; TImporto pagato;
@ -1758,14 +1845,12 @@ TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate &
{ {
const TRiga_partite& row = riga(r); const TRiga_partite& row = riga(r);
const TDate data(row.get(PART_DATAREG)); const TDate data(row.get(PART_DATAREG));
if (data <= al) if (data <= al)
{ {
pagato += row.importo(valuta); pagato += row.importo(valuta);
if (!row.is_fattura()) if (!row.is_fattura())
{ {
const tipo_pagamento tipopag = row.tipo_pag(); const tipo_pagamento tipopag = row.tipo_pag();
if (tipopag >= tp_tratta && tipopag <= tp_rid) if (tipopag >= tp_tratta && tipopag <= tp_rid)
{ {
bool sbf = false; bool sbf = false;
@ -1776,6 +1861,7 @@ TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate &
} }
return pagato; return pagato;
} }
*/
TImporto TPartita::calcola_saldo_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const TImporto TPartita::calcola_saldo_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const
{ {

View File

@ -135,6 +135,7 @@ protected:
protected: // TRecord_tree protected: // TRecord_tree
virtual TObject* dup() const; virtual TObject* dup() const;
// TImporto importo_pagato_al(bool val, const TDate & al, int mode = 0xF) const;
public: public:
bool chiusa(bool update = false) const; bool chiusa(bool update = false) const;
@ -145,7 +146,6 @@ public:
TPartita& partita() const; TPartita& partita() const;
TRiga_partite& riga() const { return *_riga; } // Riga partite TRiga_partite& riga() const { return *_riga; } // Riga partite
TImporto importo_pagato_al(bool val, const TDate & al, int mode = 0xF) const;
TImporto importo_pagato(bool val, int mode = 0xF) const; TImporto importo_pagato(bool val, int mode = 0xF) const;
TImporto importo(bool val) const; TImporto importo(bool val) const;
TImporto residuo(bool val, int mode = 0xF) const; // Differenza delle due funzioni precedenti TImporto residuo(bool val, int mode = 0xF) const; // Differenza delle due funzioni precedenti
@ -194,7 +194,8 @@ public:
TImporto importo(bool valuta, int mode = 0xF) const; TImporto importo(bool valuta, int mode = 0xF) const;
TImporto esposto(bool valuta, const TDate & data_scad, const TDate & data_rischio, bool & sbf) const; TImporto esposto(bool valuta, const TDate & data_scad, const TDate & data_rischio, bool & sbf) const;
TImporto calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode = 0xF) const; //TImporto calcola_pagato_al(bool valuta, const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode = 0xF) const;
int calcola_pagato_periodo(const TDate& dal, const TDate& al, TImporto& pag, TImporto& nc, TPointer_array* pagsca = NULL) const;
const TString& codice_valuta() const; const TString& codice_valuta() const;
bool in_valuta() const; bool in_valuta() const;
@ -300,7 +301,7 @@ public:
void update_reg(long nreg, const TRectype& mov, TPartite_array& pa); void update_reg(long nreg, const TRectype& mov, TPartite_array& pa);
void calcola_saldo(TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp) const; void calcola_saldo(TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp) const;
TImporto calcola_saldo(bool valuta) const; TImporto calcola_saldo(bool valuta) const;
TImporto calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const; //TImporto calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const;
TImporto calcola_saldo_al(bool valuta, const TDate& al, const TDate& data_scaduto, const TDate& data_rischio) const; TImporto calcola_saldo_al(bool valuta, const TDate& al, const TDate& data_scaduto, const TDate& data_rischio) const;
real calcola_scaduto_al(bool valuta, const TDate& al = botime) const; real calcola_scaduto_al(bool valuta, const TDate& al = botime) const;
TImporto importo_pagato_unassigned(bool val, int mode = 0xF) const; TImporto importo_pagato_unassigned(bool val, int mode = 0xF) const;