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++)
{
real * r = new real;
real* r = new real;
ant.add(r);
if (i < nrate)
*r = partita.rata(i + 1).get_real(SCAD_IMPORTOANT);

View File

@ -155,7 +155,7 @@ public:
int ricerca_clifo(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);
int stampa_progressivi(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 trovato=FALSE;
bool trovato = false;
if (current_cursor()->is_first_match(LF_RMOV))
{
@ -564,6 +564,7 @@ bool TMastrini_application::almeno_un_record()
TRelation rel(LF_RMOV);
rel.add(LF_MOV, "NUMREG==NUMREG");
TRectype& rmov = rel.curr();
const TRectype& mov = rel.curr(LF_MOV);
rmov.zero();
rmov.put(RMV_GRUPPO, _gruppo);
@ -575,28 +576,17 @@ bool TMastrini_application::almeno_un_record()
for (cur = 0L; cur.pos() < items; ++cur)
{
const int annoes = rmov.get_int (RMV_ANNOES);
const long numreg = rmov.get_long(RMV_NUMREG);
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;
const TString4 provvis (mov.get(MOV_PROVVIS));
const TDate datareg = _annomsk ? mov.get_date(MOV_DATACOMP) : rmov.get_date(RMV_DATAREG);
if ( ((annoes==_annomsk) || (_annomsk==0)) && ((datareg>=_data_ini) && (datareg<=_data_fine)) && (_stampa_mov_prov || provvis.blank()))
{
trovato = TRUE;
trovato = true;
break;
}
}
rmov_file.readat(record);
}
return trovato;
}
@ -2186,24 +2176,28 @@ void TMastrini_application::descrizione_causale()
void TMastrini_application::documenti_iva()
{
TString dep;
_tabtpd->curr().zero();
dep << format ("%2s",(const char*) _tipodoc);
_tabtpd->curr().put("CODTAB", (const char*) dep);
_tabtpd->read();
_descrdociva = _tabtpd->curr().get("S0");
_natdoc = atoi(_tabtpd->curr().get("I0"));
_tabtpd->zero();
if (_tipodoc.full())
{
TString4 dep;
dep.format("%2s",(const char*) _tipodoc);
_tabtpd->put("CODTAB", dep);
_tabtpd->read();
}
_descrdociva = _tabtpd->get("S0");
_natdoc = atoi(_tabtpd->get("I0"));
}
void TMastrini_application::ricerca_regiva()
{
TString16 dep;
_tabreg->curr().zero();
dep << format("%04d", _annoiva);
dep << format("%3s" , (const char*) _regiva);
_tabreg->curr().put("CODTAB", (const char*) dep);
_tabreg->read();
_tabreg->zero();
if (_annoiva > 0 && _regiva.full())
{
TString8 dep;
dep.format("%04d%3s", _annoiva, (const char*)_regiva);
_tabreg->put("CODTAB", dep);
_tabreg->read();
}
_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()
{
long app;
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);
TString16 key;
@ -2923,20 +2915,35 @@ int TMastrini_application::stampa_progre_riporto(int start_riga)
}
return r;
}
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);
const TRecnotype record = rmov_file.recno();
_totale_prima_dare = ZERO;
_totale_prima_avere = ZERO;
TRelation rel(LF_RMOV);
rel.add(LF_MOV, "NUMREG==NUMREG");
TRectype& rmov = rel.curr();
// const TRectype& mov = rel.curr(LF_MOV);
const TRectype& mov = rel.curr(LF_MOV);
TRectype& rmov = rel.curr();
rmov.zero();
rmov.put(RMV_GRUPPO, _gruppo);
rmov.put(RMV_CONTO, _conto);
@ -2944,52 +2951,40 @@ void TMastrini_application::calcola_progressivi_al(const TDate& data_fin)
TCursor cur(&rel, "", 2, &rmov, &rmov);
const long items = cur.items();
cur.freeze();
_totale_prima_dare = ZERO;
_totale_prima_avere = ZERO;
for (cur = 0L; cur.pos() < items; ++cur)
{
const int annoes = rmov.get_int (RMV_ANNOES);
TDate datareg = rmov.get_date(RMV_DATAREG);
const char sezione = rmov.get_char(RMV_SEZIONE);
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 (_stampa_mov_prov || mov.get(MOV_PROVVIS).blank())
{
if (_annomsk == 0)
const int annoes = rmov.get_int (RMV_ANNOES);
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))
{
datareg = rmov.get_date(RMV_DATAREG);
data = _inizioes;
const char sezione = rmov.get_char(RMV_SEZIONE);
const real importo = rmov.get_real(RMV_IMPORTO);
if (sezione == 'D')
_totale_prima_dare += importo;
else
_totale_prima_avere += importo;
}
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')
_totale_prima_dare += importo;
else
_totale_prima_avere += importo;
}
} // if ((_stampa_mov_prov) || ((!_stampa_mov_prov) && (provvis.trim().empty())))
}
}
// Riposiziona rmov
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)
@ -3022,7 +3017,7 @@ void TMastrini_application::calcola_progressivi(bool finali)
{
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)
{
progdare_attuale = saldi.get_real(SLD_PDARE);

View File

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

View File

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

View File

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

View File

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

View File

@ -24,7 +24,8 @@
#include "cglib02.h"
struct therec {
struct therec
{
char DATAREG[9];
char REG[4];
char DATADOC[9];
@ -44,9 +45,6 @@ public:
void sort_all();
bool sort_sal();
CG4100_App() {}
virtual ~CG4100_App() {}
};
bool CG4100_App::set_parms()
@ -58,10 +56,8 @@ bool CG4100_App::set_parms()
void CG4100_App::main_loop()
{
if (fexist("__sal__.sav"))
warning_box(TR("Un'operazione di riordino saldi si e' conclusa"
" impropriamente. Si raccomanda di rieseguirla"));
warning_box(TR("Un'operazione di riordino saldi si e' conclusa impropriamente. Si raccomanda di rieseguirla"));
_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)
{
const real v1 = val * (-1.0);
const real v1 = -val;
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
real _ProrataItem::calc_prorata(const real& acq, const char* year)
{
const real* perc = (const real*)_percentuali.objptr(year);
if (perc)
real prorata;
const real& perc = percentuale(year);
if (perc != INVALID_PRORATA && perc > ZERO)
{
real prorata = acq * (*perc) / CENTO;
prorata.round(TCurrency::get_firm_dec());
return prorata;
if (perc < CENTO)
{
prorata = acq * perc / CENTO;
prorata.round(TCurrency::get_firm_dec());
}
else
prorata = acq;
}
return ZERO;
return prorata;
}
// Ritorna la % prorata relativa all'anno indicato. Se non esiste internamente
// 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())
return *p;
return INVALID_PRORATA;
@ -616,9 +621,10 @@ void TLiquidazione_app::build_nomiditte(TProgind* pnd)
if (!look_lia(dt.get_long("CODDITTA")))
good = FALSE;
}
else continue;
else
continue;
TToken_string* d = new TToken_string(64);
TToken_string* d = new TToken_string(63);
// add record
d->add(dt.get("CODDITTA"));
@ -635,7 +641,8 @@ void TLiquidazione_app::build_nomiditte(TProgind* pnd)
}
_nomiditte.add(d);
}
if (pnd) pnd->addstatus(1);
if (pnd)
pnd->addstatus(1);
}
bool TLiquidazione_app::to_ditt_handler(TMask_field& f, KEY key)

View File

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

View File

@ -160,6 +160,12 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
TConfig c(CONFIG_DITTA);
_isdiff = c.get_bool("GesLiqDiff");
if (_isdiff)
{
TFilename tmp; tmp.tempdir();
tmp.add("liqdiff.txt");
ofstream log(tmp);
}
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())
{
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))
{
_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)
// il codatt passato e' codice att + tipo att ( IN {1|2} )
// occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati
// saranno solo quelli di dicembre per data <= 20/12;
// il codatt passato e' codice att + tipo att ( IN {1|2} )
// occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati
// saranno solo quelli di dicembre per data <= 20/12;
{
const bool has_sc = has_module(SCAUT, CHK_DONGLE);
real totintra = ZERO;
@ -709,8 +715,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TString8 fromreg("~"), toreg("0");
{
TRelation * regrel = new TRelation("REG");
TCursor reg(regrel);
TRelation regrel("REG");
TCursor reg(&regrel);
TString4 codreg;
const int items = reg.items();
@ -723,8 +729,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (codreg > toreg)
toreg = codreg;
}
delete regrel;
}
//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 cau_intra = rcs.get_bool("INTRACOM");
const bool cau_valintra = rcs.get_bool("VALINTRA");
// Inizio gestione IVA differita
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);
if (movdiff && !datainc.ok())
{
const long codcf = _mov->get_long(MOV_CODCF);
TString8 key(_mov->get(MOV_TIPO)); key << "|" << codcf;
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);
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);
const bool diffpayed = movdiff && datainc_ok;
const bool difftopay = movdiff && !diffpayed;
// Se ho fatto un pagamento differito porto la data di registrazione alla data incasso
if (diffpayed)
date = datainc;
real pagatt;
real ncatt;
real totfat;
TImporto pagprec;
TImporto pag;
TImporto ncprec;
TImporto nc;
real totfat, pagatt, ncatt;
bool dok = is_date_ok(date, month, liqmonth, year_int);
TPartite_array arrpart;
const long numreg = _mov->get_long(MOV_NUMREG);
TPartite_array arrpart; // Partite interessate
TPointer_array pagscatt; // Righe di pagsca interessate
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))
{
arrpart.add_numreg(numreg);
if (arrpart.utilizzata(numreg, 1))
//arrpart.add_numreg(numreg);
//if (arrpart.utilizzata(numreg, 1))
if (arrpart.add_numreg(numreg)) // Ovviamente più efficiente di quanto sopra
{
const int items = arrpart.items();
const char sez = (tipomov == vendita ? 'A' : 'D');
// Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'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())
{
int row = p->mov2rig(numreg, 1);
if (row >= 0)
const int row = p->mov2rig(numreg, 0);
if (row > 0)
{
const TRiga_partite& rp = p->riga(row);
TImporto importo(rp.get_char(PART_SEZ), rp.get_real(PART_IMPORTO)); importo.normalize(); importo.swap_section();
totfat += importo.valore();
pagprec += rp.calcola_pagato_al(false, inizio, inizio, inizio); pagprec.normalize(sez);
pag += rp.calcola_pagato_al(false, fine, fine, fine); pag.normalize(sez);
// Inizio aggiunte di Bonazzi del 16/02/2012
ncprec += rp.calcola_pagato_al(false, inizio, inizio, inizio, 0x1F); ncprec.normalize(sez);
nc += rp.calcola_pagato_al(false, fine, fine, fine, 0x1F); nc.normalize(sez);
// Fine aggiunte di Bonazzi del 16/02/2012
TImporto pg, nc;
TDate lastpg, lastnc;
const int flag = rp.calcola_pagato_periodo(inizio+1L, fine, pg, nc, &pagscatt);
if (flag)
{
TImporto importo = rp.importo(false, 0x1);
importo.normalize(sezfat);
totfat = importo.valore();
CHECK(totfat >= ZERO, "Fattura negativa inattesa qui");
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();
// 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 ((diffpayed && dok) || (pagatt > totfat))
pagatt = totfat;
if (pagatt > ZERO)
dok = true;
}
}
}
/*
* 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 rs8 = _reg->get("S8") != trueatt;
const bool cmt = !_cur->is_first_match(LF_RMOVIVA);
// const bool dok1 = dok || diffpayed;
if (!dok || sreg || rs8 || cmt)
continue;
const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna;
@ -964,20 +966,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real nin_iva = ZERO; // imposta non incassati
look_iva(_rmoviva->get(RMI_CODIVA));
TString4 codiva = _iva->get("CODTAB");
TString4 tipoiva = _iva->get("S1");
TString8 tipoes_v = _iva->get("S2");
TString8 tipoes_a = _iva->get("S9");
const int tipoagr = _iva->get_int("S4");
const int tipoag = _iva->get_int("S5");
const int tipopla = _iva->get_int("S3");
int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI
const real perciva = _iva->get_real("R0") / CENTO;
int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media
const TString4 codiva = _iva->get("CODTAB");
const TString4 tipoiva = _iva->get("S1");
const TString8 tipoes_v = _iva->get("S2");
const TString8 tipoes_a = _iva->get("S9");
const int tipoagr = _iva->get_int("S4");
const int tipoag = _iva->get_int("S5");
const int tipopla = _iva->get_int("S3");
int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI
const real perciva = _iva->get_real("R0") / CENTO;
int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media
const TString8 tipocr_s = _rmoviva->get(RMI_TIPOCR);
const int tipocr = atoi(tipocr_s);
const bool intra = _rmoviva->get_bool(RMI_INTRA);
const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR);
const int tipocr = atoi(tipocr_s);
const bool intra = _rmoviva->get_bool(RMI_INTRA);
// autofatture art. 17 per non residenti, con trattamento
// speciale in liquidazione annuale
@ -991,11 +993,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const bool was_riv = (tipoiva != "NS") && (tipocr == 1 || tipocr ==5);
real percind;
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 imposta_orig = _rmoviva->get_real(RMI_IMPOSTA);
const int decimals = TCurrency::get_firm_dec();
const real imposta_orig = _rmoviva->get_real(RMI_IMPOSTA);
real diff_imp; // Liquidazione differita imponibile
real diff_iva; // Liquidazione differita imposta
@ -1007,15 +1008,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real impos_det; // Imposta detraibile
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));
real impprec;
real ivaprec;
real ncprec;
real val;
real impprec, ivaprec, ncprec;
if (month < 13)
{
TDate to(inizio);
@ -1040,32 +1038,22 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TImporto nctmp;
// 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);
if (row >= 0)
const int row = p->mov2rig(numreg, 1);
if (row > 0)
{
TRiga_partite rp = p->riga(row);
pagtmp += rp.calcola_pagato_al(false, endp, endp, endp, 9);
pagtmp -= rp.calcola_pagato_al(false, from, from, from, 9);
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
const TRiga_partite& rp = p->riga(row);
rp.calcola_pagato_periodo(from+1L, endp, pagtmp, nctmp);
}
}
pagtmp.normalize(sez);
if (!pagtmp.is_zero())
{
const real perc = pagtmp.valore() / totfat;
val = imponibile_orig * perc;
real val = imponibile_orig * perc;
val.round(TCurrency::get_firm_dec());
impprec += val;
val = imposta_orig * perc;
@ -1089,22 +1077,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TDate to(31,12, from.year());
const int items = arrpart.items();
const char sez = (tipomov == vendita ? 'A' : 'D');
TImporto pagtmp;
TImporto nctmp;
TImporto pagtmp, nctmp;
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)
{
TRiga_partite rp = p->riga(row);
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;
const TRiga_partite& rp = p->riga(row);
rp.calcola_pagato_periodo(botime, to, pagtmp, nctmp);
}
}
if (!pagtmp.is_zero())
@ -1112,10 +1092,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const real perc = pagtmp.valore() / totfat;
real val = imponibile_orig * perc;
val.round(TCurrency::get_firm_dec());
val.round(decimals);
impprec = val;
val = imposta_orig * perc;
val.round(TCurrency::get_firm_dec());
val.round(decimals);
ivaprec = val;
}
if (!nctmp.is_zero())
@ -1129,30 +1109,33 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
const real ncperc = ncatt / totfat;
val = imponibile_orig * ncperc;
val.round(TCurrency::get_firm_dec());
real val = imponibile_orig * ncperc;
val.round(decimals);
diff_imp = -val;
incdiff_imp -= val;
val = imposta_orig * ncperc;
val.round(TCurrency::get_firm_dec());
val.round(decimals);
diff_iva = -val;
incdiff_iva -= val;
}
else
{
real perc = pagatt / totfat;
{ // La fattura è ancora aperta
// Calcolo rapporto tra pagamento e totale fattura
const real perc = pagatt / totfat;
incdiff_imp = imponibile_orig * perc;
incdiff_imp.round(TCurrency::get_firm_dec());
incdiff_imp.round(decimals);
incdiff_iva = imposta_orig * perc;
incdiff_iva.round(TCurrency::get_firm_dec());
incdiff_iva.round(decimals);
if (month == 13)
{
diff_imp = imponibile_orig - incdiff_imp;
diff_iva = imposta_orig - incdiff_iva;
}
/* 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;
val.round(TCurrency::get_firm_dec());
diff_imp = -val;
@ -1161,16 +1144,34 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
val.round(TCurrency::get_firm_dec());
diff_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
{
if (difftopay)
{
diff_imp = imponibile_orig;
diff_iva = imposta_orig;
}
else
{
if (diffpayed)
{
incdiff_imp = imponibile_orig;
@ -1179,9 +1180,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
else
analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva,
impon_det, impos_det, impon_ind, impos_ind);
}
}
// qui
// qui
for (int is_detraibile = 0; is_detraibile < 2; is_detraibile++)
{
const int tipodet = is_detraibile ? 0 : tipoind;
@ -2025,10 +2027,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (tipomov == vendita)
{
// fatture a liquidazione differita
tab->put("R26", tab->get_real("R26") + diff_imp);
tab->put("R27", tab->get_real("R27") + diff_iva);
tab->put("R28", tab->get_real("R28") + incdiff_imp);
tab->put("R29", tab->get_real("R29") + incdiff_iva);
tab->curr().add("R26", diff_imp);
tab->curr().add("R27", diff_iva);
tab->curr().add("R28", incdiff_imp);
tab->curr().add("R29", incdiff_iva);
fdiff_imp += diff_imp;
fdiff_iva += diff_iva;
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;
const TString80 s = _pim_r->get("CODTAB");
bool ok = _pim->read() == NOERR;
const bool ok = _pim->read() == NOERR;
if (!ok && create)
{
_pim_r->zero();

View File

@ -141,7 +141,7 @@ void TLiquidazione_app::describe_att(int month, const char* codatt,
if (atts.items() == 1 && _isviaggio)
describe_viaggio(month, codatt);
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);
if (atts.items() == 1)
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)
{
TToken_string atts(codatt);
TString ref(atts.items() == 1 ? codatt : "ALL");
const char* tmpatt;
const TString8 ref(atts.items() == 1 ? codatt : "ALL");
int last = _descr_arr.last();
bool issosp = false;
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;
// 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;
// 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;
// Never mind the bollox
TString codtab, codreg, codiva, activity, anno;
TString80 codtab;
TString8 activity;
TString4 codreg, codiva, anno;
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())
{
@ -569,17 +570,15 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
real rit_imp(s1.get(0));
real rit_iva(s1.get(1));
// if (tipomov == vendita)
// {
diffimp = _pim->get_real("R26");
diffiva = _pim->get_real("R27");
diffincimp = _pim->get_real("R28");
diffinciva = _pim->get_real("R29");
diffimp_acq = _pim->get_real("R30");
diffiva_acq = _pim->get_real("R31");
diffincimp_acq = _pim->get_real("R32");
diffinciva_acq = _pim->get_real("R33");
// }
diffimp = _pim->get_real("R26");
diffiva = _pim->get_real("R27");
diffincimp = _pim->get_real("R28");
diffinciva = _pim->get_real("R29");
diffimp_acq = _pim->get_real("R30");
diffiva_acq = _pim->get_real("R31");
diffincimp_acq = _pim->get_real("R32");
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 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
// 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
// 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
// gia' calcolati altrove
@ -1005,12 +1006,12 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool
int m = annual ? month : 1;
for (; m <= limit; m++)
{
if (!is_month_ok(m,month)) continue;
if (!is_month_ok(m,month))
continue;
atts.restart();
while ((tmpatt = atts.get()) != NULL)
FOR_EACH_TOKEN (atts, tmpatt)
{
TString att(tmpatt);
const TString8 att(tmpatt);
look_plm(m, att);
real ad1, ad2;
@ -1479,12 +1480,12 @@ void TLiquidazione_app::set_att(_DescrItem& d)
if (d._s3.empty())
{
att_title = flags == 'M' ? TR("Riepilogo attivita' mista") :
att_title = flags == 'M' ? TR("Riepilogo attività mista") :
TR("Riepilogo quater");
// att_title << d._s2;
}
else
att_title = format(FR("Attivita' %s %s %s"),
att_title = format(FR("Attività %s %s %s"),
(const char*)(d._s2),
(const char*)(d._s3),
(const char*)tipatt);
@ -1696,6 +1697,46 @@ void TLiquidazione_app::set_liqacc_2000(_DescrItem& d)
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)
{
@ -1716,6 +1757,7 @@ void TLiquidazione_app::set_pim_head(_DescrItem& d)
{
set_row(r++, TR("Fatture a liquidazione differita incassate"));
set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark);
print_diff_log(r);
}
else // PIS_HEAD
{
@ -1735,7 +1777,8 @@ void TLiquidazione_app::set_pim_head(_DescrItem& d)
if (d._flags == PIS_HEAD_DI)
{
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++,"");

View File

@ -1,27 +1,8 @@
#include <applicat.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[])
{
TBruceWayne_app app;
app.run(argc, argv, TR("Stampa Report Contabilita'"));
TKlarkKent_app app;
app.run(argc, argv, TR("Stampa Report Contabilità"));
return 0;
}

View File

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

View File

@ -43,7 +43,7 @@ int TEsercizio::compare(const TSortable& s) const
int c = 0;
if (_inizio != e._inizio)
c = _inizio > e._inizio ? +1 : -1;
return c;
return c;
}
const TDate& TEsercizio::chiusura() const
@ -83,7 +83,7 @@ const TDate& TEsercizio::chiusura() const
((TDate&)_chiusura) = datacomp; // Forzatura
TTable esc("ESC");
esc.put("CODTAB", codice());
if (esc.read(_lock) == NOERR)
if (esc.read(_isequal, _lock) == NOERR)
{
esc.put("D3", datacomp);
esc.rewrite();

View File

@ -297,8 +297,63 @@ bool TRiga_scadenze::chiusa(bool update) const
return chiusa;
}
static TImporto extract_importo(const TRectype& pag, const TRiga_partite& sum, bool val, int mode)
{
TImporto totale;
// Inizio aggiunte di Bonazzi del 16/02/2012
if (mode & 0x10) // solo le note di credito
{
const tipo_movimento tm = sum.tipo();
if (tm != tm_nota_credito)
return totale; // = ZERO
}
// 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();
if (mode & 0x1)
{
totale += TImporto(sez, pag.get_real(imp_field));
}
if (!in_val && (mode & 0x8)) // Le ritenute non esistono nei pagamenti in valuta
{
totale += TImporto(sez, pag.get_real(PAGSCA_RITENUTE));
totale += TImporto(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC));
}
if (mode & 0x2) // Voglio anche gli abbuoni
{
real abb = pag.get_real(PAGSCA_ABBUONI);
if (!abb.is_zero())
{
if (in_val && !val) // Gli abbuoni sono sempre in valuta e quindi
{ // devono essere convertiti opportunamente
const TExchange cmb(sum);
TCurrency cur(abb, cmb);
cur.change_to_firm_val();
abb = cur.get_num();
}
totale += TImporto(sez, abb);
}
}
if (in_val && !val && (mode & 0x4)) // Voglio anche le differenze cambio
{ // Esse esistono solo nei pagamenti in valuta
const TImporto diffcam(sez, pag.get_real(PAGSCA_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
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();
@ -310,58 +365,16 @@ TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate & al, int mode)
{
const TRectype& pag = row(p); // Riga pagamento
const TRiga_partite& sum = game.riga(p); // Riga partite
const TDate & datapag = sum.get_date(PART_DATAPAG);
const TDate datapag = sum.get_date(PART_DATAPAG);
if (datapag <= al)
{
// Inizio aggiunte di Bonazzi del 16/02/2012
if (mode & 0x10) // solo le note di credito
{
const tipo_movimento tm = (tipo_movimento)sum.get_int(PART_TIPOMOV);
if (tm != tm_nota_credito)
continue;
}
// Fine aggiunte di Bonazzi del 16/02/2012
const char sez = sum.sezione();
if (mode & 0x1)
{
totale += TImporto(sez, pag.get_real(imp_field));
}
if (!in_val && (mode & 0x8)) // Le ritenute non esistono nei pagamenti in valuta
{
totale += TImporto(sez, pag.get_real(PAGSCA_RITENUTE));
totale += TImporto(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC));
}
if (mode & 0x2) // Voglio anche gli abbuoni
{
real abb = pag.get_real(PAGSCA_ABBUONI);
if (!abb.is_zero())
{
if (in_val && !val) // Gli abbuoni sono sempre in valuta e quindi
{ // devono essere convertiti opportunamente
const TExchange cmb(sum);
TCurrency cur(abb, cmb);
cur.change_to_firm_val();
abb = cur.get_num();
}
totale += TImporto(sez, abb);
}
}
if (in_val && !val && (mode & 0x4)) // Voglio anche le differenze cambio
{ // Esse esistono solo nei pagamenti in valuta
const TImporto diffcam(sez, pag.get_real(PAGSCA_DIFFCAM));
totale += diffcam;
}
}
totale += extract_importo(pag, sum, val, mode);
}
return totale.normalize();
}
*/
// Calcola il totale dei pagamenti (eventualmente in valuta)
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;
}
/*
TImporto TRiga_partite::calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode) const
{
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 TImporto pag = scad.importo_pagato_al(valuta, al, mode);
pagato += pag;
if (!pag.is_zero() && rischio)
if (rischio && !pag.is_zero())
{
bool sbf = false;
pagato -= scad.esposto_al(valuta, al, data_scaduto, data_rischio, sbf);
}
}
}
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
@ -1750,6 +1834,9 @@ TImporto TPartita::calcola_saldo(bool valuta) const
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 pagato;
@ -1757,15 +1844,13 @@ TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate &
for (int r = last(); r > 0; r = pred(r))
{
const TRiga_partite& row = riga(r);
const TDate data(row.get(PART_DATAREG));
if (data <= al)
const TDate data(row.get(PART_DATAREG));
if (data <= al)
{
pagato += row.importo(valuta);
if (!row.is_fattura())
{
const tipo_pagamento tipopag = row.tipo_pag();
if (tipopag >= tp_tratta && tipopag <= tp_rid)
{
bool sbf = false;
@ -1776,6 +1861,7 @@ TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate &
}
return pagato;
}
*/
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
virtual TObject* dup() const;
// TImporto importo_pagato_al(bool val, const TDate & al, int mode = 0xF) const;
public:
bool chiusa(bool update = false) const;
@ -145,7 +146,6 @@ public:
TPartita& partita() const;
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(bool val) const;
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 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;
bool in_valuta() const;
@ -300,7 +301,7 @@ public:
void update_reg(long nreg, const TRectype& mov, TPartite_array& pa);
void calcola_saldo(TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp) 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;
real calcola_scaduto_al(bool valuta, const TDate& al = botime) const;
TImporto importo_pagato_unassigned(bool val, int mode = 0xF) const;