campo-sirio/cg/cg4304.cpp

2901 lines
90 KiB
C++
Raw Normal View History

// ------------------------------------------------------------
// Calcolo liquidazioni
// Part 5: stampa
// fv 21-1-94
// ------------------------------------------------------------
#include <currency.h>
#include <utility.h>
#include "cg4300.h"
// flags per annuale
#define IS_PRORATA 0x0001
// minchietta per prospetto ventilazione
class _vDesc : public TObject
{
public:
TString4 _codiva;
real _acq;
real _vnd;
real _viv;
_vDesc() {}
virtual ~_vDesc() {}
};
const char* const sep =
"------------------------------------------------------------------"
"------------------------------------------------------------------";
void TLiquidazione_app::set_page(int file, int cnt)
{
_DescrItem& d = (_DescrItem&)_descr_arr[cnt];
set_auto_ff(FALSE);
reset_print();
switch(d._flags)
{
case CHG_PARMS:
set_att(d);
break;
case SET_FIRM:
set_firm(d);
break;
case PIS_ROW:
case PIM_ROW:
set_pim(d);
break;
case PIS_HEAD:
case PIM_HEAD:
set_pim_head(d);
break;
case MISC_LIQ:
set_pumpam(d);
break;
case TOT_ROW:
set_plm(d);
break;
case PLAFOND:
set_plafond(d);
break;
case VENTILA:
set_ventila(d);
break;
case REGAGR:
set_regagr(d);
break;
case REGVIA:
set_viaggio(d);
break;
case THE_END:
set_grand(d);
break;
case LIQACC:
if (atoi(_year) >= 2000)
set_liqacc_2000(d);
else
set_liqacc_1999(d);
break;
case ACCONTO:
set_acconto_p(d);
break;
case ACCHEAD:
set_acchead_p(d);
break;
case DELDEB:
set_deltab(d, FALSE);
break;
case DELCRED:
set_deltab(d, TRUE);
break;
}
}
print_action TLiquidazione_app::postprocess_page(int file, int cnt)
{
if (_descr_arr.items() == 0 || cnt == _descr_arr.items()-1)
return NEXT_PAGE;
return REPEAT_PAGE;
}
bool TLiquidazione_app::preprocess_page(int file, int cnt)
{
return _descr_arr.items() != 0;
}
// ----------------------------------------------------------------
// Print description
// ----------------------------------------------------------------
void TLiquidazione_app::describe_att(int month, const char* codatt,
bool isresult, char flags)
{
TToken_string atts(codatt);
if (_isprint && _canprint)
{
describe_name(month, atts, flags);
if (atts.items() == 1 && _isplafond)
describe_plafond(month, codatt);
if (atts.items() == 1 && _isvent)
describe_ventilation(month, codatt);
if (atts.items() == 1 && _isagricolo)
describe_agricolo(month, 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
describe_pims(month,codatt,TRUE);
if (atts.items() == 1)
describe_consistence(codatt);
}
}
void TLiquidazione_app::describe_name(int month, TToken_string& codatts, char flags)
{
_DescrItem* d = new _DescrItem(CHG_PARMS);
d->_s0 = _nditte->curr().get("CODDITTA");
d->_s1 = _nditte->curr().get("RAGSOC");
d->_s2 = _nditte->curr(LF_ATTIV).get("CODATT");
d->_s3 = codatts.items() == 1 ? (const char*)_nditte->curr(LF_ATTIV).get("DESCR") : "";
d->_s4 = _freqviva;
d->_f1 = month;
d->_f2 = _isbenzinaro;
d->_f3 = (word)flags;
if (_mixed && codatts.items() == 1)
d->_f0 = atoi(codatts.mid(5));
else d->_f0 = 0;
_descr_arr.add(d);
}
void TLiquidazione_app::describe_firm(int month)
{
if (!_isprint || !_canprint) return;
_DescrItem* d = new _DescrItem(SET_FIRM);
d->_s0 = _nditte->curr().get("CODDITTA");
d->_s1 = _nditte->curr().get("RAGSOC");
d->_s2 = _freqviva;
d->_f1 = month;
_descr_arr.add(d);
}
void TLiquidazione_app::describe_liqacc()
{
if (!_isprint || !_canprint) return;
if (!look_lia()) return;
if (_lia->get("S8") != "A") return;
_DescrItem* d = new _DescrItem(LIQACC);
d->_r0 = _lia->get_real("R7");
d->_r1 = _lia->get_real("R13");
d->_r2 = _lia->get_real("R14");
d->_r3 = _lia->get_real("R9");
d->_r4 = _lia->get_real("R10");
d->_r5 = _lia->get_real("R8");
d->_r6 = _lia->get_real("R12");
d->_r7 = _lia->get_real("R11");
d->_r8 = _lia->get_real("R4");
TToken_string ff(_lia->get("S1"),'!');
real cre_pre (ff.get(0));
real acq_intr (ff.get(1));
d->_r9 = cre_pre;
d->_r10 = acq_intr;
_descr_arr.add(d);
}
void TLiquidazione_app::describe_plafond(int month, const char* codatt)
{
TString att(codatt);
// prepara la descrizione del riepilogo da stampare e lo accoda
real t1, t2, t3;
_DescrItem* d = new _DescrItem(PLAFOND);
if (month == 13)
look_pla(codatt);
for (int jj = 1; jj <= 3; jj++) // three types of plafond
{
t1 = 0.0; t2 = 0.0; t3 = 0.0;
if (month < 13)
{
look_ppa(_freqviva == "M" ? month : next_trim(month) -2, codatt,jj);
t3 = _ppa->get_real("R2");
}
for (int m = 1; m <= month && m < 13; m++)
{
if (is_month_ok(m,month) && look_ppa(m,codatt,jj))
{
t1 += _ppa->get_real("R0");
t2 += _ppa->get_real("R1");
}
}
switch (jj)
{
case 1:
d->_r0 = t1; d->_r1 = t2;
d->_r2 = month < 13 ? t3 : _pla->get_real("R5");
break;
case 2:
d->_r3 = t1; d->_r4 = t2;
d->_r5 = month < 13 ? t3 : _pla->get_real("R6");
break;
case 3:
d->_r6 = t1; d->_r7 = t2;
d->_r8 = month < 13 ? t3 : _pla->get_real("R7");
break;
}
} // for tipo esenzione plafond
_descr_arr.add(d);
// bookmark
}
void TLiquidazione_app::describe_ventilation(int month, const char* codatt)
{
if (!_isvent || _isagricolo || _isviaggio) return;
_DescrItem* d = new _DescrItem(VENTILA);
TString att(codatt);
look_plm(month, att);
for (_pim->first(); !_pim->eof(); _pim->next())
{
if (strcmp(*_pim_codatt,att) != 0)
continue;
look_reg(*_pim_codreg);
look_iva(*_pim_codiva);
int tipocr = atoi(*_pim_tipocr);
int tipodet = atoi(*_pim_tipodet);
int mese = atoi(*_pim_mese);
bool corrisp = _reg->get_bool("B0");
real imponibile = _pim->get_real("R0");
real imposta = _pim->get_real("R1");
tiporeg tipomov = (tiporeg)_reg->get_long("I0");
TString tipoiva = _iva->get("S1");
if (_year != *_pim_anno || (month == 13 && mese < 13))
continue;
if (imponibile.is_zero() && imposta.is_zero()) continue;
// questi non vanno in liquidazione, i totali sono
// gia' calcolati altrove
if (tipodet == 1 || (tipodet == 3 && tipocr == 5) || tipodet == 9)
continue;
// questi non si devono vedere perche' so' bbrutti
if (tipoiva == "NS" || tipoiva == "ES" || tipoiva == "NI")
continue;
if (mese <= month)
{
if (tipocr == 1 && tipomov == acquisto)
{
// somma agli acquisti
_vDesc* vd = NULL;
for (int i = 0; i < d->_arr.items(); i++)
{
_vDesc* vv = (_vDesc*)&(d->_arr[i]);
if (strcmp(vv->_codiva,*_pim_codiva) == 0)
{ vd = vv; break; }
}
if (vd == NULL) { vd = new _vDesc; }
vd->_acq += (imponibile+imposta);
d->_r0 += (imponibile+imposta);
if (vd->_codiva.empty())
{
vd->_codiva = *_pim_codiva;
d->_arr.add(vd);
}
}
else if ((is_month_ok(mese,month) || month == 13) && corrisp
&& _pim->get_bool("B1") &&
tipocr == 0 && tipomov == vendita)
// non sono sicurissimo della above condition
{
// somma alle vendite
_vDesc* vd = NULL;
for (int i = 0; i < d->_arr.items(); i++)
{
_vDesc* vv = (_vDesc*)&(d->_arr[i]);
if (strcmp(vv->_codiva,*_pim_codiva) == 0)
{ vd = vv; break; }
}
if (vd == NULL) { vd = new _vDesc; }
vd->_vnd += imponibile;
vd->_viv += imposta;
d->_r1 += imponibile+imposta;
if (vd->_codiva.empty())
{
vd->_codiva = *_pim_codiva;
d->_arr.add(vd);
}
}
}
}
d->_r0 = _pam->get_real("R2"); // Totale acquisti
d->_r1 = _pam->get_real("R3"); // Totale vendite
if (d->_r1.is_zero() || d->_r0.is_zero())
delete d;
else
{
// Questo e' il fantastico moltiplicatore
d->_r2 = d->_r1 / d->_r0;
_descr_arr.add(d);
}
}
void TLiquidazione_app::describe_agricolo(int month, const char* codatt)
{
_DescrItem* d = new _DescrItem(REGAGR);
if (_isagr98) // Setta l'array interno con tutti gli items relativi alla tabella PIA
{
TArray& agr_array = d->_arr;
for (_pia->first(); !_pia->eof(); _pia->next()) // Scorre i progressivi agricoli
{
if (strcmp((const char*)*_pia_codatt, codatt) == 0 &&
is_month_plain(atoi(*_pia_mese)) && _year == *_pia_anno) // E sono gia' in ordine di codice...
{
_DescrItem* p = new _DescrItem(PROGAGR);
p->_r0 = _pia->get_real("R0"); // Imponibile
p->_r1 = _pia->get_real("R1"); // Imposta
p->_s0 = *_pia_codord; // Codice iva ordinario
p->_s1 = *_pia_codcom; // Codice iva compensazione
if (p->_r0 != ZERO || p->_r1 != ZERO)
agr_array.add(p); // Aggiunge il fottuto item agricolo
}
}
}
for (int mese = month == 13 ? 13 : 1; mese <= month; mese++)
{
if (!is_month_ok(mese,month))
continue;
if (!look_plm(mese, codatt))
continue;
d->_r0 += _plm->get_real("R5");
d->_r1 += _plm->get_real("R6");
d->_r2 += _plm->get_real("R7");
d->_r3 += _plm->get_real("R8");
d->_r4 += _plm->get_real("R9");
d->_r5 += _plm->get_real("R10");
d->_r6 += _plm->get_real("R11");
d->_r7 += _pum->get_real("R10");
d->_r8 += _pum->get_real("R11");
d->_r11 += _plm->get_real("R13");
}
// Aggiungo anche questi per comodita' futura.
// in caso di ditta a regime agricolo
// alias:
// _r9 mantiene la percentuale (gia' arrotondata!)
// _r10 mantiene l'iva detraibile calcolata!
d->_r9 = d->_r8 / (d->_r7 + d->_r8);
d->_r9.round(2);
d->_r10 = d->_r6 * d->_r9;
d->_r9 *= CENTO;
round_alla_lira(d->_r10, TRUE);
_descr_arr.add(d);
}
void TLiquidazione_app::describe_viaggio(int month, const char* codatt)
{
if (!look_lim(month)) return;
_DescrItem* d = new _DescrItem(REGVIA);
for (int mese = month == 13 ? 13 : 1; mese <= month; mese++)
{
if (!is_month_ok(mese,month) || !look_plm(mese, codatt))
continue;
d->_r0 += _plm->get_real("R5"); // corrispettivi CEE
d->_r1 += _plm->get_real("R9"); // corrispettivi misti CEE
d->_r2 += _plm->get_real("R6"); // corrispettivi fuori CE
d->_r3 += _plm->get_real("R7"); // acquisti CEE
d->_r4 += _plm->get_real("R10"); // acquisti misti parte CEE
d->_r5 += _plm->get_real("R8"); // acquisti fuori CEE
d->_r6 += _plm->get_real("R11"); // acquisti misti parte fuori CEE
}
// credito di costo precedente (CHECK annuale)
d->_r8 = credito_costo_prec(month);
// Solita minchiatina dell'arrotondamento alle 1000 lirette se siamo in annuale
if (month == 13 || atoi(_year) >= 2000) // CM500314 e CM500315
{
round_imposta(d->_r0);
round_imposta(d->_r1);
round_imposta(d->_r2);
round_imposta(d->_r3);
round_imposta(d->_r4);
round_imposta(d->_r5);
round_imposta(d->_r6);
round_imposta(d->_r8);
}
d->_r7 = d->_r4.is_zero() ? ZERO : (d->_r4 * CENTO)/(d->_r4 + d->_r6); d->_r7.round(2); // percentuale
d->_r9 = (d->_r1 * d->_r7)/CENTO;
if (month == 13)
round_imposta(d->_r9);
else
round_alla_lira(d->_r9);
// Calcola l'iva a debito, visto che servira' anche nel calcolo liquidazione (solo annuale)
const real aliva = aliquota_agvia();
const real alcnt = aliva + CENTO;
d->_r10 = (d->_r0 + d->_r9) - (d->_r3 + d->_r4 + d->_r8); // base imponibile lorda
if (d->_r10.sign() > 0)
{
// d->_r11 = (d->_r10/(alcnt/CENTO)) * (aliva/CENTO); // iva dovuta
d->_r11 = d->_r10 * aliva / alcnt; // iva dovuta
if (month == 13)
round_imposta(d->_r11);
else
round_alla_lira(d->_r11, TRUE);
}
_descr_arr.add(d);
}
void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool describe_pis)
// le si passa una tokenstring (o un codatt) e lei, da brava, calcola
// cumulando per tutte le attivita' nominatele
// ogni riga riguarda un codiva ma tutti i registri
// se il mese e' 13 si guarda tutto l'anno
// se si tratta di una sola attivita' in att. mista evidenziata o servizievole,
// stampa solo vendite e corrispettivi
// 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;
int last = _descr_arr.last();
bool isfirst = TRUE, issosp = FALSE;
real t0, t1, t2, t3, t4, t5;
real rt0, rt1, rt2, rt3, rt4, rt5;
real autodafe, autodafe_iva, art40, art40_iva;
bool skip_acq = atts.items() == 1 && _mixed;
// descrittore riga autodafe'
_DescrItem* ads = NULL;
// descrittore riga iva dovuta ag. viaggio'
_DescrItem* iads = NULL;
// Seleziona la tabella corretta: PIM o PIS e l'identificatore
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
// anche se le colonne non ci sono; in tal modo si ottiene una peggior
// chiarezza, una peggiore efficienza, una gran rottura di coglioni,
// ma risulta identico al dio Sistema.
_DescrItem* hea = new _DescrItem(describe_pis ? PIS_HEAD : PIM_HEAD);
hea->_f0 = skip_acq; // cosi' non compare nemmeno la colonnina! contento?
hea->_f1 = FALSE;
_descr_arr.add(hea);
// Assoc array per memorizzare i corrispettivi da scorporare. Tali corrispettivi verranno
// aggiunti alla fine del ciclo, scorrendo tutte le righe generate.
TAssoc_array corr_ann;
_CorrItem cx;
bool is_key;
// Never mind the bollox
TString codtab, codreg, codiva, activity, anno;
int mese;
while ((tmpatt = atts.get()) != NULL)
{
TString att(tmpatt);
for (tab->first(); !tab->eof(); tab->next())
{
_DescrItem* d = NULL;
// compute
codtab = tab->get("CODTAB");
anno = codtab.mid(0,4);
activity= codtab.mid(4,6);
codreg = codtab.mid(10,3);
mese = atoi(codtab.mid(13,2));
codiva = codtab.mid(16,4);
bool ok = look_reg(codreg);
ok |= look_iva(codiva);
bool isnew = FALSE;
if (!ok) continue;
tiporeg tipomov = (tiporeg)_reg->get_long("I0");
bool corrisp = _reg->get_bool("B0");
TString tipoiva = _iva->get("S1");
int tipodet = atoi(codtab.mid(20,1));
TString other = tab->get("S4");
TToken_string s1(tab->get("S1"),'!'); // Imponibile/iva fatture in ritardo
real rit_imp(s1.get(0));
real rit_iva(s1.get(1));
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;
issosp |= (sosp_imp != nessuna); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: normale, vol_affari, liquidazione)
// ACHTUNG! Corrispettivi da ventileer possono ventilare
// ad un altro codiva; in tal caso si scrive quello
if (corrisp && !other.empty())
{
look_iva(other);
codiva = other;
}
// se e' corrispettivo da ventilare non
// scrivo un cannolo ripieno visto che e' stato ventilato
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;
// questi non vanno in liquidazione, i totali sono
// gia' calcolati altrove
if ((tipodet == 1 || tipodet == 3 || tipodet == 9) && !is_rit)
continue;
// se ha tutti gli importi nulli viene da un annullamento di
// progressivi esistenti (achtung fatture con scontrino)
if (tab->get_real("R0").is_zero() &&
tab->get_real("R1").is_zero() &&
tab->get_real("R2").is_zero() &&
tab->get_real("R5").is_zero() &&
tab->get_real("R6").is_zero())
continue;
if (activity == att && is_month_plain(mese) && _year == anno)
{
// vedi se c'e' gia' un item corrispondente
for(int i = last+1; i < _descr_arr.items(); i++)
{
d = (_DescrItem*)&_descr_arr[i];
if (d->_flags == PIM_PIS &&
d->_s0 == ref &&
d->_s1 == codiva)
break;
if (d->_s1 > codiva)
{
isnew = TRUE;
_DescrItem* dd = new _DescrItem(PIM_PIS);
// CicciaPrassi li vuole in ordine crescente
_descr_arr.insert(dd,i);
// che due maron stereofonic: se quello dopo
// era il primo, quello prima va dopo
if (d->_f0)
{
dd->_f0 = TRUE;
d->_f0 = FALSE;
}
else if (isfirst)
{
d->_f0 = TRUE;
isfirst = FALSE;
}
d = dd;
break;
}
}
if (!isnew && i == _descr_arr.items())
{
isnew = TRUE;
d = new _DescrItem(PIM_PIS);
if (isfirst) { d->_f0 = TRUE; isfirst = FALSE; }
_descr_arr.add(d);
}
if (tipomov == acquisto)
{
// Ci sono anche le fatture in ritardo (solo in annuale)! Con tipo detraibilita' 1,3,9
if (sosp_imp != vol_affari)
{
d->_r4 += is_rit ? rit_imp : tab->get_real("R0");
d->_r5 += is_rit ? rit_iva : tab->get_real("R1");
t4 += is_rit ? rit_imp : tab->get_real("R0");
t5 += is_rit ? rit_iva : tab->get_real("R1");
}
// Totalizza anche quelli valevoli per vol. affari.
if (sosp_imp != liquidazione)
{
rt4 += is_rit ? rit_imp : tab->get_real("R0");
rt5 += is_rit ? rit_iva : tab->get_real("R1");
}
}
else // vendita
{
is_key = corr_ann.is_key(codiva);
cx._totale = 0;
_CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx;
if (sosp_imp != vol_affari)
ca._totale += tab->get_real(tipoiva == "VE" ? "R2" : "R3"); // Se e' codice IVA da Vent. stiamo scorrendo i PIS: va stampato il lordo dei progressivi successivi
if (sosp_imp != liquidazione)
ca._totale_vf += tab->get_real(tipoiva == "VE" ? "R2" : "R3");
if (!is_key) // se non c'e' lo aggiunge
{
ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota
corr_ann.add(codiva,ca);
}
// vedi corrispettivi veri e falsi
real cvi = tab->get_real("R0"); // imp. totale
real cvv = tab->get_real("R1"); // iva totale
real cfi = tab->get_real("R13"); // imp. falsi corrispettivi
real cfv = tab->get_real("R14"); // iva falsi corrispettivi
// MI3404...
// Giochiamo sopra la particolarita' che se non e' un registro di corrispettivi
// allora se R5 o R6 sono <> 0 significa che trattasi di documento FS,
// che pertanto va stornato dal totale corrispettivi. (Cosi' volle Vladimiro)
const real ifs(tab->get_real("R5")); // imp. fatture con scontrino
const real vfs(tab->get_real("R6")); // iva fatture con scontrino
if (!corrisp)
{
if (sosp_imp != vol_affari)
{
d->_r2 -= ifs; // tolgo FS dai corrispettivi
d->_r3 -= vfs;
t2 -= ifs; // idem per i totali
t3 -= vfs;
}
if (sosp_imp != liquidazione)
{
rt2 -= ifs;
rt3 -= vfs;
}
}
if (corrisp)
{
cvi -= cfi;
cvv -= cfv;
}
if (corrisp)
{
// usa R0 e R1 visto che la ventilazione e' gia'
// stata calcolata
if (sosp_imp != vol_affari)
{
d->_r2 += (cvi /* - ifs */); // tolgo FS dai corrispettivi
d->_r3 += (cvv /* - vfs */);
d->_r0 += ifs; // aggiungo FS alle vendite
d->_r1 += vfs;
t2 += (cvi /* - ifs */); // idem per i totali
t3 += (cvv /* - vfs */); // non sono molto convinto ma vogliono cio'
t0 += ifs; // ...avevo ragione e infatti l'ho cambiato
t1 += vfs;
}
if (sosp_imp != liquidazione)
{
rt2 += cvi;
rt3 += cvv;
rt0 += ifs;
rt1 += vfs;
}
}
if (!corrisp || (!cfv.is_zero() || !cfi.is_zero()))
{
real adf, adi; // autofatture non residenti art. 17
real va7i, va7v; // ammontare art 40 c. 5/6/8
real vendi = corrisp ? cfi : tab->get_real("R0");
real vendv = corrisp ? cfv : tab->get_real("R1");
// si scorporano solo per l'annuale, altrimenti
// vengono normalmente considerati nelle vendite
if (month == 13)
{
TToken_string kr(tab->get("S0"),'!');
va7i = kr.get(0);
va7v = kr.get(1);
adf = tab->get_real("R7");
adi = tab->get_real("R8");
}
if (sosp_imp != vol_affari)
{
d->_r0 += vendi - adf - va7i;
d->_r1 += vendv - adi - va7v;
t0 += vendi /* - adf */;
t1 += vendv /* - adi */;
}
if (sosp_imp != liquidazione)
{
rt0 += vendi;
rt1 += vendv;
}
autodafe += adf;
autodafe_iva += adi;
art40 += va7i;
art40_iva += va7v;
}
}
if (isnew)
{
d->_s0 = ref;
d->_s1 = codiva;
// flag per stampare l'intestazione colonne
}
}
} // End of _pim cycle
real impc,ivac; // Aggiunge lo scorporo dei corrispettivi
const int ditems = _descr_arr.items();
for (int i=last+1;i<ditems;i++) // scorre le righe memorizzate
{
_DescrItem& dd = (_DescrItem&) _descr_arr[i];
if (corr_ann.is_key(dd._s1) && dd._flags == PIM_PIS && dd._s0 == ref) // Se esiste il codice iva corrispondente sull'array corrispettivi
{
_CorrItem& cc = (_CorrItem &) corr_ann[dd._s1];
lordo2netto(cc._totale,impc,ivac,cc._aliquota);
dd._r2 += impc; // allora effettua lo scorporo e aggiorna i totali
dd._r3 += ivac;
t2 += impc;
t3 += ivac;
// Calcola lo scorporo per quelli comprensivi/validi per Vol.affari
lordo2netto(cc._totale_vf,impc,ivac,cc._aliquota);
rt2 += impc;
rt3 += ivac;
}
}
corr_ann.destroy();
look_plm(month,att);
const real iva74t = _pom->get_real("R13");
if (!describe_pis && iva74t > ZERO)
{
if(iads == NULL) iads = new _DescrItem(PIM_ROW);
iads->_s0 = "74TER"; // cosi' vollero
iads->_s1 = "IVA "; // cosi' vollero
iads->_s2 = " dovuta - 74 ter"; // cosi' vollero
iads->_r1 += iva74t;
t1 += iva74t;
rt1 += iva74t;
if (isfirst)
{
isfirst = FALSE;
iads->_f0 = TRUE;
}
}
} // fine while (codatt)
if (!describe_pis && (art40.sign() > 0 || art40_iva.sign() > 0))
{
_DescrItem* ads = new _DescrItem(PIM_ROW);
ads->_s0 = ref;
ads->_s1 = "VA7";
ads->_r0 = art40;
ads->_r1 = art40_iva;
if (isfirst)
{
isfirst = FALSE;
ads->_f0 = TRUE;
}
_descr_arr.add(ads);
}
if (!describe_pis && (autodafe.sign() > 0 || autodafe_iva.sign() > 0))
{
_DescrItem* ads = new _DescrItem(PIM_ROW);
ads->_s0 = ref;
ads->_s1 = "AF"; // cosi' vollero, inoltre non e' piu' A35 ma AF, come sul dio sistema
ads->_r0 = autodafe;
ads->_r1 = autodafe_iva;
if (isfirst)
{
isfirst = FALSE;
ads->_f0 = TRUE;
}
_descr_arr.add(ads);
}
// ag. viaggio: iva dovuta 74 ter la vogliono in mezzo ai progressivi
if (iads != NULL) _descr_arr.add(iads);
if (describe_pis)
{
_DescrItem& d = (_DescrItem&)_descr_arr[_descr_arr.last()];
if (d._flags == PIS_HEAD) // Nessun PIS_ROW presente
d._f1 = TRUE; // Evita la stampa dell'intestazione
}
// prepara una bella riga di totali
_DescrItem* d = new _DescrItem(TOT_ROW);
d->_r0 = t0; d->_r1 = t1;
d->_r2 = t2; d->_r3 = t3;
d->_r4 = t4; d->_r5 = t5;
// Totali progressivi da registri, comprensivi dei valori per calcolo vol affari.
if (issosp) // Setta i valori (e la conseguente stampa della riga) solo se presenti registri in sospensione
{
d->_r11 = rt0; d->_r12 = rt1;
d->_r13 = rt2; d->_r14 = rt3;
d->_s2 = rt4.string(); d->_s3 = rt5.string();
}
// aggiunge dati ptm
_DescrItem* t = new _DescrItem(MISC_LIQ);
t->_f2 = atoi(_year) > 1997 ? describe_pis : TRUE; //isfirst; // per il form feed o meno alla fine
if (!describe_pis)
{
TToken_string ttm("0|0|0");
const bool annual = month == 13;
const int limit = annual ? 13 : month;
int m = annual ? month : 1;
for (; m <= limit; m++)
{
if (!is_month_ok(m,month)) continue;
atts.restart();
while ((tmpatt = atts.get()) != NULL)
{
TString att(tmpatt);
look_plm(m, att);
real ad1, ad2;
d->_r6 += _pom->get_real("R0"); // acq. intracomunitari
d->_r7 += _pom->get_real("R1"); // inded. art 19
d->_r8 += _pom->get_real("R2"); // IVA su inded. art. 19
t->_r0 += _pom->get_real("R3"); // acq. ammortizz. detr
t->_r1 += _pom->get_real("R4"); // IVA acq. ammort. detr
t->_r2 += _pum->get_real("R2"); // ammort. detr. 6%
t->_r3 += _pum->get_real("R3"); // IVA ammort detr. 6%
t->_r4 += _pom->get_real("R5"); // acq. beni rivendita
t->_r5 += _pom->get_real("R6"); // IVA acq. beni rivendita
t->_r6 += _pom->get_real("R7"); // acq. leasing
t->_r7 += _pom->get_real("R8"); // IVA acq. leasing
t->_r8 += _pum->get_real("R0"); // cessioni beni ammort.
t->_r9 += _pum->get_real("R1"); // IVA su cessioni ammort.
t->_r10 += _pum->get_real("R4"); // tot. esenti IVA
if (!annual) // Se non siamo in annuale prende il prorata su doc. acq. anno precedente
{
t->_r12 += _plm->get_real("R14");
t->_r13 = _plm->get_real("R4"); // percentuale prorata anno precedente
t->_r14 += _plm->get_real("R15");
t->_r15 = _plm->get_real("R16"); // percentuale prorata 2 anni addietro
}
t->_r11 += _plm->get_real("R2") - _plm->get_real("R14") - _plm->get_real("R15"); // pro-rata indetraibile sui doc. acq. anno attuale
// in caso di liq. annuale prende il totale (tutto R2)
ad1 = real(ttm.get(1));
ad2 = real(ttm.get(2));
ad1 += _pom->get_real("R11");
ad2 += _pom->get_real("R12");
ttm.add(_plm->get("R12"), 0); // % pro-rata anno corrente
ttm.add(ad1.string(),1); // imp. acq. amm. indetr.
ttm.add(ad2.string(),2); // IVA acq. amm. indetr
t->_s0 = ttm;
t->_f0 = _prorata.percentuale(_year)!=INVALID_PRORATA && (month != 13); // flag per segnalare l'esistenza
d->_r9 += _pom->get_real("R9"); // acq. inded. su ricavi esenti
d->_r10 += _pom->get_real("R10"); // IVA acq. inded. su ricavi esenti
// passaggi interni
real aipip(d->_s0); // progressivo ...
real aipivp(d->_s1); // ... (che mazzata sulle palle...)
aipip += _pum->get_real("R8"); // acq. inded. per pass. int
aipivp += _pum->get_real("R9"); // IVA acq. inded. per pass. int
d->_s0 = aipip.string(); // risbatto ...
d->_s1 = aipivp.string(); // ..
// spese generali.
real spgnp(t->_s2); // progressivo ...
real spgnvp(t->_s3); // ... (che doppia mazzata sulle palle...)
spgnp += _pam->get_real("R10"); // spese generali.
spgnvp += _pam->get_real("R11"); // IVA spese generali.
t->_s2 = spgnp.string(); // risbatto ...
t->_s3 = spgnvp.string(); // ..
// sospensione imposta: non piu' due palle, ma QUATTRO...
// caro Ferdinando... ora son divenute ben OTTO...
// grazie all'iva ad esigibilita' differita da pagare/de"TRARRE"
TToken_string tt(t->_s4);
real aqsi(tt.get(0));
real aqsv(tt.get(1));
real vnsi(tt.get(2));
real vnsv(tt.get(3));
real aqli(tt.get(4));
real aqlv(tt.get(5));
real vnli(tt.get(6));
real vnlv(tt.get(7));
aqsi += _pam->get_real("R6");
aqsv += _pam->get_real("R7");
vnsi += _pam->get_real("R8");
vnsv += _pam->get_real("R9");
aqli += _pam->get_real("R12");
aqlv += _pam->get_real("R13");
vnli += _pam->get_real("R14");
vnlv += _pam->get_real("R15");
tt = "";
tt.add(aqsi.string());
tt.add(aqsv.string());
tt.add(vnsi.string());
tt.add(vnsv.string());
tt.add(aqli.string());
tt.add(aqlv.string());
tt.add(vnli.string());
tt.add(vnlv.string());
t->_s4 = tt;
} // while (attivita')
} // for (mese ok)
// Cazzata orrenda ma necessaria CM500308
if (issosp)
{
rt4 += d->_r7; rt5 += d->_r8; // Det 1
rt4 += d->_r9; rt5 += d->_r10; // Det 3
rt4 += real(d->_s0); rt5 += real(d->_s1); // Det 9
d->_s2 = rt4.string(); d->_s3 = rt5.string();
}
// annual follows in _arr
if (month == 13 && ref != "ALL")
{
// tutte quelle cose che vanno alla liquidazione annuale, come il
// calcolo del prorata o del nuovo plafond o ....
if (look_pla(codatt))
{
real v1 = _pla->get_real("R14"); // Totale imponibile vendite
real v2 = _pla->get_real("S1"); // Volume d'affari II attivit<69>
real ris = v1 + v2;
real e1 = _pla->get_real("R1"); // Totale vendite esenti C1
real e2 = _pla->get_real("R2"); // Totale vendite esenti C2
real e3 = _pla->get_real("R3"); // Totale vendite esenti C3
real e4 = _pla->get_real("R15"); // Totale vendite esenti C1A
real e5 = _pla->get_real("R16"); // Totale vendite beni ammortizzabili esenti C3
real e6 = _pla->get_real("R17"); // Totale vendite beni ammortizzabili esenti C1A
real bam = _pla->get_real("R4"); // Cessione beni ammortizzabili
real iaq = _pla->get_real("R11"); // IVA acquisti
real ppg = _pla->get_real("R12"); // pro-rata pagato
// calcola nuovo prorata per ogni attivita' (miste: 1+2)
real pr;
if (atoi(_year) > 1997) // Calcolo dal 1998 in poi
{
const real rsa = ris - (e3-e5) - (e4-e6);
const real rsn = rsa - e1;
if (!rsa.is_zero())
pr = CENTO - ((rsn/rsa) * CENTO); // Percentuale di indetraibilita: reciproco della percentuale di detraibilita'
}
else
{
if (!ris.is_zero())
pr = (e1/ris) * CENTO;
}
pr.round(0);
real co = 0.0;
real topay = 0.0;
//if (pr != _prorata.current())
{
// calcolo conguaglio -- se positivo e' a debito
if (pr > ZERO)
{
topay = (iaq + ppg) * (pr / CENTO);
round_imposta(topay);
}
co = topay - ppg;
round_imposta(co);
}
_DescrItem* dd = new _DescrItem(ANNUAL);
// MonsterFish: arrotonda alle 1000 LIRE C1,C2,C3,C1A
round_imposta(e1);
round_imposta(e2);
round_imposta(e3);
round_imposta(e4);
round_imposta(e5);
round_imposta(e6);
round_imposta(bam);
round_imposta(ris);
// segna flag prorata
if ((e1+e2+e3+e4) > ZERO)
dd->_f0 |= IS_PRORATA;
dd->_r0 = ris;
dd->_r1 = e1;
dd->_r2 = pr > ZERO ? pr : ZERO;
dd->_r3 = co;
dd->_r4 = e2;
dd->_r5 = e3;
dd->_r6 = topay;
dd->_r7 = e4;
dd->_r8 = e5;
dd->_r9 = e6;
t->_arr.add(dd);
}
}
}
_descr_arr.add(d);
_descr_arr.add(t);
}
void TLiquidazione_app::describe_liq(int month, const char* codatts, _DescrItem* di)
{
if (!_isprint || !_canprint)
return;
if (!look_lim(month))
return;
_DescrItem* d = new _DescrItem(THE_END);
// gli diamo la stessa struttura di LIM
d->_r0 = _lim->get_real("R0"); // Risultato
d->_r1 = _lim->get_real("R1"); // Rimborso
d->_r2 = _lim->get_real("R2");
d->_r3 = _lim->get_real("R3");
d->_r4 = _lim->get_real("R4");
d->_r5 = _lim->get_real("R5"); // rettifiche
d->_r6 = _lim->get_real("R6");
d->_r7 = _lim->get_real("R14");
d->_r9 = _lim->get_real("R9");
if (atoi(_year) <= 1997) // Dal 1998 in poi il conguaglio prorata non va stampato, ma conglobato nell'iva acquisti
d->_r10 = _lim->get_real("R7"); // totale conguaglio prorata
TToken_string tt(80);
tt.add(_lam->get_real("R0").string()); // IVA Vendite
tt.add(_lam->get_real("R1").string()); // IVA Acquisti
tt.add(_lam->get_real("R2").string()); // Credito precedente
tt.add(_lam->get_real("R3").string()); // Debito precedente
tt.add(_lam->get_real("R4").string());
d->_s0 = tt;
d->_s1 = _lim->get_real("R11").string(); // Acc. dec.
d->_s2 = _lim->get_real("R12").string();
d->_s3 = _lim->get_real("R13").string();
// descrizione rettifiche
if (month < 13)
{
d->_s4 = _lim->get("S0");
d->_s5 = _lim->get("S1");
d->_s6 = _lim->get("S2");
}
d->_r11 = _lim->get_real("R10"); // tasso di interesse (Non arrotondare!)
d->_r15 = _lim->get_real("R15"); // Credito utilizzato IVA
d->_r16 = _lim->get_real("R16"); // Credito utilizzato F24
d->_r17 = _lim->get_real("R17"); // Variazioni d'imposta
d->_r18 = _lim->get_real("R18"); // Imposta non versata
d->_r19 = _lim->get_real("R19"); // Crediti speciali
d->_f1 = is_first_month(month);
// rispettiamo tutte le casistiche per i versamenti se non siamo in visualizzazione
// analogamente in Visualizzazione ma solo nel caso dell'annuale.
// In tutti gli altri casi va a cercare la delega
d->_r8 = (_month == 13 || !_is_visliq) ? _lim->get_real("R8") : versamenti_IVA(_month, "1");
if (_month == 13)
{
const int anno_prossimo = atoi(_year)+1;
if (look_lia(0l, FALSE, anno_prossimo))
d->_r20 = _lia->get_real("R0"); // Credito da riportare all'anno prossimo
}
// aggiunge eventuale satellite per rimborso infraannuale
if (di != NULL)
{
if (d->_r0.sign() < 0)
d->_arr.add(di);
else
delete di;
}
if (!_is_visliq)
{
_DescrItem* dv = describe_deleghe(month);
if (dv != NULL) d->_arr.add(dv);
}
_descr_arr.add(d);
}
_DescrItem* TLiquidazione_app::describe_deleghe(int month)
{
_stampa_vers = _stampa_acc = FALSE;
if (_lim->get_real("R0") > ZERO)
{
real iva = _lim->get_real("R0") + _lim->get_real("R14");
if (month == 13)
round_imposta(iva);
if (iva >= iva_da_riportare(_month))
_stampa_vers = TRUE;
}
_stampa_acc = (month == 12 && (_freqviva == "M" || (_isbenzinaro && _gest4)))
||(month == 13 && _freqviva == "T" && !(_isbenzinaro && _gest4));
if (!_stampa_vers && !(_stampa_acc && look_del(12,7))) return NULL;
_DescrItem* d = new _DescrItem(DELEGA);
d->_f0 = 0;
//prospettino versamento
if (_stampa_vers) //solo se sono a debito
if (look_del(month,month == 13 ? 2 : 1))
{
if (_del->get_bool("B0"))
{
//_del->S2 descr. ufficio iva/concessione
//_del->S1 descrizione banca
d->_s0 = _del->get("S9"); // Cod Ufficio concessione
d->_s1 = _del->get("S7"); // Cod ABI
d->_s2 = _del->get("S8"); // Cod CAB
d->_r0 = _del->get_real("R0");
d->_d0 = _del->get_date("D0");
} // altrimenti lascia tutto in bianco e ci scriveranno i dati a mano
}
//prospettino acconto
if ( (month == 12 && (_freqviva == "M" || (_isbenzinaro && _gest4)))
|| (month == 13 && _freqviva == "T" && !(_isbenzinaro && _gest4)) )
if (look_del(12,7)) //sia che sia a debito che a credito
{
d->_s4 = "ACC";
TToken_string t;
if (_del->get_bool("B0"))
{
//_del->S2 descr. ufficio iva/concessione
//_del->S1 descrizione banca
t.add(_del->get("S9")); // Cod Conc
t.add(_del->get("S7")); // Cod ABI
t.add(_del->get("S8")); // Cod CAB
t.add(_del->get_real("R0").string());
t.add(_del->get("D0"));
}
d->_s5 = t;
}
return d;
}
void TLiquidazione_app::describe_consistence(const char* codatt)
{
// controlla eventuali condizioni di conflitto con le normative
// per la ditta e crea i messaggi appropriati
// tutte le condizioni sono valutate sull'esercizio precedente
int pryear = atoi(_year) - 1;
TString att = codatt;
_pla->zero();
*_pla_ditta = get_firm();
*_pla_anno = pryear;
*_pla_codatt = att;
if (_pla->read() == NOERR)
{
real va = _pla->get_real("R0");
// 1) consistenza volume d'affari <-> frequenza versamenti
// deve essere: trimestrale ammesso solo se < 360.000.000
// per servizi, < 1.000.000.000 per altre imprese
// a meno che non sia benzinaro che ha diritto comunque
if (_freqviva == "T" && !_isbenzinaro)
{
bool err = FALSE;
if (_isservizio) err = va > SOGLIA_TRIM_SERVIZI;
else err = va > SOGLIA_TRIM_ALTRE;
if (err)
describe_error(TR("Incoerenza volume affari/frequenza versamenti"),
att);
}
}
}
void TLiquidazione_app::describe_error(const char* err, const char* codatt)
{
if (!_isprint || !_canprint || (_isregis && _isfinal)) return;
_errors.add(new _ErrItem(err,codatt,_nditte->curr().get("CODDITTA")));
}
// ----------------------------------------------------------------
// Setrows
// ----------------------------------------------------------------
void TLiquidazione_app::set_firm(_DescrItem& d)
{
TString tim_title(80);
tim_title << TR("Liquidazione IVA");
if (d._f1 == 13)
tim_title << format(FR(": Riepilogo Annuale %s"),(const char*)_year);
else
{
if (d._s2 == "T")
tim_title << format(FR(" del %d<> Trimestre %s"), d._f1/3, (const char *) _year);
else
tim_title << format(FR(" del mese di %s %s"), itom(d._f1),
(const char*)_year);
}
reset_header();
int soh = 1;
if (!_isregis)
{
set_header(soh++,FR("Ditta %s %s@107gData @>@125gPag. @#"),
(const char*)(d._s0), (const char*)(d._s1));
set_header(soh++,"");
}
set_header(soh++,sep);
set_header(soh++,FR("%s@102gFrequenza %s"),
(const char*)tim_title,
d._s2 == "T" ? TR("Trimestrale") : TR("Mensile"));
set_header(soh++,sep);
set_header(soh++,"");
// notify errors if any
int j = 0;
for (int i = 0; i < _errors.items(); i++)
{
_ErrItem& s = (_ErrItem&)_errors[i];
if (s._att == "ALL" && s._firm == d._s0)
{ j++; set_row(i+3, "@5g@b*** %s ***@r", (const char*)s._err); }
}
if (j) set_row(i+3,"");
}
void TLiquidazione_app::set_att(_DescrItem& d)
{
// set header
TString tim_title(78);
TString att_title(48);
// Bookmark
TString book_name(d._s3);
char flags = (char)d._f3;
if (flags == '1') book_name << TR(" (servizi)");
else if (flags == '2') book_name << TR(" (altre)");
else if (flags == 'M') book_name = TR("Riepilogo att. mista");
else if (flags == 'Q') book_name = TR("Riepilogo quater");
if (_firm_bookmark == -1)
_firm_bookmark = set_bookmark(d._s1);
_att_bookmark = set_bookmark(book_name, _firm_bookmark);
tim_title << TR("Liquidazione IVA");
if (d._f1 == 13)
{
if (d._s4 == "T" && !(d._f2)) // trimestrale e non benzinaro
tim_title << format(FR(": Riepilogo Annuale %s"),(const char*)_year);
else
tim_title << format(FR(": Dichiarazione Annuale %s"),(const char*)_year);
}
else
{
if (d._s4 == "T")
tim_title << format(FR(" del %d<> Trimestre %s"), d._f1/3, (const char *) _year);
else
tim_title << format(FR(" del mese di %s %s"), itom(d._f1),
(const char*)_year);
}
TString tipatt;
if (d._f0 > 0)
tipatt.format(d._f0 == 1 ? TR("SERVIZI") : TR("ALTRE ATTIVITA'"));
if (d._s3.empty())
{
att_title = flags == 'M' ? TR("Riepilogo attivita' mista") :
TR("Riepilogo quater");
// att_title << d._s2;
}
else
att_title = format(FR("Attivita' %s %s %s"),
(const char*)(d._s2),
(const char*)(d._s3),
(const char*)tipatt);
reset_header();
int soh = 1;
if (!_isregis)
{
set_header(soh++,FR("Ditta %s %s@107gData @>@125gPag. @#"),
(const char*)(d._s0), (const char*)(d._s1));
set_header(soh++,"");
}
set_header(soh++,sep);
set_header(soh++,"%s@55g%s", (const char*)tim_title, (const char*)att_title);
set_header(soh++,sep);
set_header(soh++,"");
// notify errors if any
int j = 0;
for (int i = 0; i < _errors.items(); i++)
{
_ErrItem& s = (_ErrItem&)_errors[i];
if (d._s2 == s._att && s._firm == d._s0)
{ j++; set_row(i+10, "@5g@b*** %s ***@r", (const char*)s._err); }
}
if (j) set_auto_ff(TRUE);
}
void TLiquidazione_app::set_plafond(_DescrItem& d)
{
// In caso di stampa liquidazione da stampa registri, il prospetto plafond
// complessivo va evidenziato in testa; solo nel caso di trimestrali.
if (_isregis && _freqviva == "M") return;
set_bookmark(TR("Quadro plafond"), _att_bookmark);
real r1 = d._r1 + d._r0;
real r2 = d._r4 + d._r3;
real r3 = d._r7 + d._r6;
real disponibile = d._r2 + d._r5 + d._r8;
real riporto = disponibile - r1 - r2 -r3;
set_print_zero(TRUE);
set_row(1,TR("QUADRO RELATIVO ALLA DISPONIBILITA' ED ALL'UTILIZZO "
"MENSILE DEI PLAFONDS"));
set_row(2,"");
set_row(3,FR("@31gDisponibile@48g%r"), &(disponibile));
set_row(4,TR("Art. 8 1<> comma lettere a-b"));
set_row(5,FR("Utilizzato all'interno@48g%r"), &(d._r0));
set_row(6,FR("Utilizzato per l'importazione@48g%r"),&(d._r1));
set_row(7,"");
set_row(8,TR("Art. 8bis 1<> comma"));
set_row(9,FR("Utilizzato all'interno@48g%r"), &(d._r3));
set_row(10,FR("Utilizzato per l'importazione@48g%r"), &(d._r4));
set_row(11,"");
set_row(12,TR("Art. 9 1<> comma"));
set_row(13,FR("Utilizzato all'interno@48g%r"), &(d._r6));
set_row(14,FR("Utilizzato per l'importazione@48g%r"), &(d._r7) );
set_row(15,FR("@31gRiporto@48g%r"), &(riporto));
set_print_zero(FALSE);
set_auto_ff();
}
void TLiquidazione_app::set_liqacc_1999(_DescrItem& d)
{
real r1 = d._r0 + d._r1 + d._r2 + d._r4;
//real r2 = d._r5 + d._r10;
real r2 = d._r5; //MI2258 (A me sembra una cagata, ma con certa gente non si riesce a parlare)
real r3 = r2 + d._r9 + d._r7;
if ((d._r3).sign() > 0) r1 += d._r3;
else r3 += abs(d._r3);
set_row(1,""); set_row(2,""); set_row(3,""); set_row(4,"");
set_row(5,FR("@11gCALCOLO ACCONTO SU OPERAZIONI EFFETTUATE"));
set_row(6,"");
set_row(7,FR("@72gCredito@90gDebito")); set_row(8,"");
if (!_isdiffacc)
set_row(9,FR("@11gIva sulle operazioni annotate fino al 20 Dicembre@81g%r"), &(d._r0));
else
set_row(9,FR("@11gIva sulle operazioni di vendita@81g%r"), &(d._r0));
int i = 10;
if (!_isdiffacc)
{
set_row(i++,FR("@11gIva su operazioni fino al 20 Dic., ma non fatturate@81g%r"), &(d._r1));
set_row(i++,FR("@11gIva su operazioni fino al 20 Dic., ma non annotate@81g%r"), &(d._r2));
}
set_row(i,FR("@11gRettifiche iva a debito"));
if (d._r3.sign() > 0)
set_row(i,"@81g%r", &(d._r3));
i++;
set_row(i++,FR("@11gIva chiesta a rimborso@81g%r"), &(d._r4));
set_row(i++,FR("@11gRISULTATO@81g%r"), &r1);
if (!_isdiffacc)
set_row(i++,FR("@11gIva sugli acquisti annotati fino al 20 Dicembre@64g%r"), &r2);
else
set_row(i++,FR("@11gIva sulle operazioni di acquisto@64g%r"), &r2);
if (d._r6 != ZERO)
set_row(i++,FR("@11gmeno perc. di prorata pari a lire %r"), &(d._r6));
set_row(i++, FR("@11gCredito precedente@64g%r"), &(d._r9));
set_row(i, FR("@11gRettifiche iva a credito"));
if ((d._r3).sign() <= 0)
{
real ab = abs(d._r3);
set_row(i,"@64g%r", &ab);
}
i++;
set_row(i++,FR("@11gRISULTATO@64g%r"), &r3);
if ((d._r8).sign() < 0)
{
real ab = abs(d._r8);
set_row(i++,FR("@23gCREDITO DA EVIDENZIARE@64g%r"), &ab);
}
else if ((d._r8).sign() > 0 && d._r8 > _ver->get(I_ACCONTOIVA))
set_row(i++,FR("@23gACCONTO DA VERSARE@81g%r"), &(d._r8));
else if ((d._r8).sign() > 0 && d._r8 <= _ver->get(I_ACCONTOIVA))
set_row(i++,FR("@23gACCONTO DA NON VERSARE@64g%r"), &(d._r8));
set_auto_ff();
}
void TLiquidazione_app::set_liqacc_2000(_DescrItem& d)
{
set_row(1,""); set_row(2,""); set_row(3,""); set_row(4,"");
set_row(5,FR("@11gCALCOLO ACCONTO SU OPERAZIONI EFFETTUATE"));
if (!_isdiffacc)
set_row(5,TR(" FINO AL 20 DICEMBRE"));
set_row(6,"");
set_row(7,FR("@72gCredito@90gDebito")); set_row(8,"");
if (d._r3 > ZERO)
d._r0 += d._r3; // Aggiungi rettifiche a debito
if (!_isdiffacc)
set_row(9,FR("@11gIva esigibile fino al 20/12@81g%r"), &d._r0);
else
set_row(9,FR("@11gIva sulle operazioni di vendita@81g%r"), &d._r0);
int i = 10;
if (!_isdiffacc)
{
set_row(i++,FR("@11gIva esigibile fino al 20/12 di cui non fatturata@81g%r"), &d._r1);
set_row(i++,FR("@11gIva esigibile fino al 20/12 di cui non annotata@81g%r"), &d._r2);
}
if (d._r3 < ZERO)
d._r5 -= d._r3; // Aggiungi rettifiche a credito
if (!_isdiffacc)
set_row(i++,FR("@11gIva che si detrae fino al 20/12@64g%r"), &d._r5);
else
set_row(i++,FR("@11gIva sulle operazioni di acquisto@64g%r"), &d._r5);
set_row(i,FR("@11gIVA a debito/credito per il periodo"));
real iva_dov_cre = d._r0 + d._r1 + d._r2 - d._r5;
if (iva_dov_cre >= ZERO)
set_row(i++,"@81g%r", &iva_dov_cre);
else
{
const real tmp = -iva_dov_cre;
set_row(i++,"@64g%r", &tmp);
}
set_row(i++, FR("@11gDebito/Credito da periodo precedente@64g%r"), &d._r9);
set_row(i,FR("@11gIVA Dovuta o a Credito"));
const real risultato = iva_dov_cre - d._r9;
if (risultato >= ZERO)
set_row(i++,"@81g%r", &risultato);
else
{
const real tmp = -risultato;
set_row(i++,"@64g%r", &tmp);
}
// Acconto
if (d._r8 < ZERO)
{
const real ab = abs(d._r8);
set_row(i++,FR("@23gCREDITO DA EVIDENZIARE@64g%r"), &ab);
}
else if (d._r8 > ZERO)
{
const real acconto_minimo = _ver->get(I_ACCONTOIVA);
if (d._r8 > acconto_minimo)
set_row(i++,FR("@23gACCONTO DA VERSARE@81g%r"), &d._r8);
else
set_row(i++,FR("@23gACCONTO DA NON VERSARE@81g%r"), &d._r8);
}
set_auto_ff();
}
void TLiquidazione_app::set_pim_head(_DescrItem& d)
{
int r = 1;
if (d._flags == PIM_HEAD)
set_bookmark(TR("Riepilogo progressivi"), _att_bookmark);
else // PIS_HEAD
{
if (d._f1)
return; // No header please
set_bookmark(TR("Riepilogo progressivi successivi"), _att_bookmark);
set_row(r++,TR(" Di cui da periodo successivo"));
set_row(r++,"");
}
if (d._f0)
{
set_row(r++,FR(" Cod.@41gVENDITE@71gCORRISPETTIVI"));
set_row(r++,FR(" IVA Descrizione@30gImponibile@49gImposta@63gImponibile@82gImposta"));
}
else
{
set_row(r++,FR(" Cod.@41gVENDITE@71gCORRISPETTIVI@106gACQUISTI"));
set_row(r++,FR(" IVA Descrizione@30gImponibile@49gImposta@63gImponibile"
"@82gImposta@96gImponibile@115gImposta"));
}
set_row(r,"");
}
void TLiquidazione_app::set_pim(_DescrItem& d)
{
// succede con le autocazzate non residenti non movimentate eccetera
const bool a = (d._r0 + d._r1) == ZERO;
const bool b = (d._r2 + d._r3) == ZERO;
const bool c = (d._r4 + d._r5) == ZERO;
if (a && b && c)
return;
int rw = 1;
if (d._s1 == "AF") //Il dio sistema colpisce ancora, non va bene A35, ma AF...
d._s2 = TR("Artt.17c3/74c1"); // La descrizione non la metto uguale perche' cosi e' piu' fika
else if (d._s1 == "VA7") // Sempre per merito del dio sistema ho dovuto aggiungere VA7.
d._s2 = TR("Art.40c5/6/8 a.i.");
else if (d._s0 == "74TER")
rw++;
else
{
look_iva(d._s1);
d._s2 = _iva->get("S0");
if (d._s2.len() > 19) d._s2.cut(19);
}
if (d._f0) // e' il primo: non fa piu' nulla perche' l'intestazione
// viene fatta comunque da set_pim_head
{}
set_row(rw++,"%4s %s@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r",
(const char*)d._s1,
(const char*)d._s2,
&(d._r0),
&(d._r1),
&(d._r2),
&(d._r3),
&(d._r4),
&(d._r5));
}
void TLiquidazione_app::set_plm(_DescrItem& d)
{
int rw = 1;
if (!(d._r0.is_zero() &&
d._r1.is_zero() &&
d._r2.is_zero() &&
d._r3.is_zero() &&
d._r4.is_zero() &&
d._r5.is_zero()))
{
set_row(rw++,""); set_row(rw++,"");
set_row(rw++,FR("Totale@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r"),
&(d._r0),
&(d._r1),
&(d._r2),
&(d._r3),
&(d._r4),
&(d._r5));
set_row(rw++,"");
}
if (!(d._r7.is_zero() && d._r8.is_zero()))
{
set_row(rw++,FR("Totali acquisti indeducibili per art.19@91g%r@107g%r"),
&(d._r7), &(d._r8));
}
if (! (d._r9.is_zero() && d._r10.is_zero()))
{
set_row(rw++, FR("Totale acquisti indeducibili su ricavi esenti@91g%r@107g%r"),
&(d._r9),
&(d._r10));
}
real acq_pint(d._s0);
real acq_pint_iva(d._s1);
if (! (acq_pint.is_zero() && acq_pint_iva.is_zero()))
{
set_row(rw++, FR("Totale acquisti indeducibili per passaggi interni@91g%r@107g%r"),
&acq_pint,
&acq_pint_iva);
}
real tot1 = d._r7 + d._r4 + d._r9 + acq_pint;
real tot2 = d._r8 + d._r5 + d._r10 + acq_pint_iva;
if (tot1 != d._r4 || tot2 != d._r5)
{
// i corrispettivi finiscono nelle vendite
d._r0 += d._r2;
d._r1 += d._r3;
d._r2 = ZERO;
d._r3 = ZERO;
// per ora lascio r2 e r3 anche se sono sempre 0
set_row(rw++, "");
set_row(rw++,FR("Totale Generale IVA@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r"),
&(d._r0),
&(d._r1),
&(d._r2),
&(d._r3),
&tot1,
&tot2);
}
// Stampa il totale progressivo da registri, comprensivo dei movimenti valevoli per il calcolo vol. affari.
real pr_imp(d._s2);
real pr_iva(d._s3);
if (!(d._r11.is_zero() &&
d._r12.is_zero() &&
d._r13.is_zero() &&
d._r14.is_zero() &&
pr_imp.is_zero() &&
pr_iva.is_zero()))
{
set_row(rw++,""); set_row(rw++,"");
set_row(rw++,FR("Totale Prog. da registri@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r"),
&(d._r11),
&(d._r12),
&(d._r13),
&(d._r14),
&(pr_imp),
&(pr_iva));
set_row(rw++,"");
}
}
void TLiquidazione_app::set_pumpam(_DescrItem& d)
{
bool printed = FALSE;
// d._f1 dice se c'era qualcosa sopra nella stessa pagina
real spgn(d._s2);
real spgn_iva(d._s3);
TToken_string tt(d._s4); // Token String
TToken_string dp(d._s0); // Due Palle
real aqsi(tt.get(0));
real aqsv(tt.get(1));
real vnsi(tt.get(2));
real vnsv(tt.get(3));
real aqli(tt.get(4));
real aqlv(tt.get(5));
real vnli(tt.get(6));
real vnlv(tt.get(7));
real ammindi(dp.get(1));
real ammindv(dp.get(2));
int row = 5;
if (!(aqsi.is_zero() && aqsv.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Acquisti in sospensione di imposta@50g%r@69g%r"),
&aqsi,
&aqsv);
}
if (!(vnsi.is_zero() && vnsv.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Vendite in sospensione di imposta@50g%r@69g%r"),
&vnsi,
&vnsv);
}
if (!(aqli.is_zero() && aqlv.is_zero()))
{
printed = TRUE;
set_row(row++, FR("IVA ad esigibilit<69> differ. da detrarre nel periodo@50g%r@69g%r"),
&aqli,
&aqlv);
}
if (!(vnli.is_zero() && vnlv.is_zero()))
{
printed = TRUE;
set_row(row++, FR("IVA ad esigibilit<69> differ. da pagare nel periodo@50g%r@69g%r"),
&vnli,
&vnlv);
}
if (!(d._r8.is_zero() && d._r9.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Cessione beni ammortizzabili@50g%r@69g%r"),
&(d._r8),
&(d._r9));
}
if (! (d._r4.is_zero() && d._r5.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Acquisto beni destinati alla rivendita@50g%r@69g%r"),
&(d._r4),
&(d._r5));
}
if (! (ammindi.is_zero() && ammindv.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Acquisto beni ammortizzabili IVA indetraibile@50g%r@69g%r"),
&ammindi,
&ammindv);
}
if (! (d._r0.is_zero() && d._r1.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Acquisto beni ammortizzabili IVA detraibile@50g%r@69g%r"),
&(d._r0),
&(d._r1));
}
if (!(d._r6.is_zero() && d._r7.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Altri beni strumentali acquisiti in leasing@50g%r@69g%r"),
&(d._r6),
&(d._r7));
}
if (!(d._r2.is_zero() && d._r3.is_zero()))
{
printed = TRUE;
// real rn = d._r2 * real(DETRAZIONE_6PERCENTO); // Detrazione obsoleta CM500344
set_row(row++, FR("Acquisto beni soggetti a detrazione (6%%)"
"@50g%r@69g%r"), &(d._r2), &(d._r3));
}
if (!(spgn.is_zero() && spgn_iva.is_zero()))
{
printed = TRUE;
set_row(row++, FR("Spese generali@50g%r@69g%r"),
&spgn,
&spgn_iva);
}
// Prorata...
int yy = atoi(_year);
if (d._f0)
{
printed = TRUE;
if (yy > 1997) // prorata 1998
{
real prc(dp.get(0));
real rprc = CENTO - prc;
TString ss(rprc.string());
set_row(row++, FR("%% PRO-RATA (%s%%) ed IVA non detraibile (%s%%)@69g%r"),
(const char*) ss, (const char*)prc.string(), &(d._r11));
yy-=2;
if (d._r13 != INVALID_PRORATA && d._r12 != ZERO)
{
rprc = CENTO - d._r13;
ss = rprc.string();
set_row(row++, FR("%% PRO-RATA %d (%s%%) ed IVA non detraibile (%s%%)@69g%r"),
yy, (const char*) ss, (const char*)d._r13.string(), &(d._r12));
}
else
if (!_isfinal && d._r13 == INVALID_PRORATA_ASSERT)
set_row(row++, FR("Impossibile reperire la %% PRO-RATA relativa all'anno %d."), yy);
yy--;
if (d._r15 != INVALID_PRORATA && d._r14 != ZERO)
{
rprc = CENTO - d._r15;
ss = rprc.string();
set_row(row++, FR("%% PRO-RATA %d (%s%%) ed IVA non detraibile (%s%%)@69g%r"),
yy, (const char*) ss, (const char*)d._r15.string(), &(d._r14));
}
else
if (!_isfinal && d._r15 == INVALID_PRORATA_ASSERT)
set_row(row++, FR("Impossibile reperire la %% PRO-RATA relativa all'anno %d."), yy);
}
else
{
real prc(dp.get(0));
set_row(row++, FR("%% PRO-RATA ed IVA non detraibile (%s%%)@69g%r"),
(const char*)prc.string(), &(d._r11));
}
}
// items vari per dichiarazione annuale
for (int i = 0; i < d._arr.items(); i++)
{
_DescrItem& dd = (_DescrItem&)d._arr[i];
printed |= set_annual(dd);
}
if (printed)
{
set_bookmark(TR("Altri dati"), _att_bookmark);
set_row(1,"");
set_row(2,"");
set_row(3,FR("ALTRI DATI RELATIVI ALLA DICHIARAZIONE@55gimponibile"
"@77gimposta@91gdetrazione"));
set_row(4,"");
set_row(row++,"");
set_row(row,"");
}
else
set_row(1,"");
// form feed
if (d._f2)
set_auto_ff(TRUE);
}
void TLiquidazione_app::set_grand_1999(_DescrItem& d, int& rw)
{
real& risultato = d._r0;
real& rimborso = d._r1;
real& cred_cost = d._r2;
real& deb_mens = d._r3;
real& rettifiche = d._r5;
real& detrazioni = d._r6;
real& interessi = d._r7;
real& versamenti = d._r8;
real& vers_int = d._r9;
real& conguaglio = d._r10;
TToken_string tt(d._s0);
real iva_vend(tt.get(0));
real iva_acq(tt.get(1));
real cred_prec(tt.get(2));
real debt_prec(tt.get(3));
real cred_trasf(tt.get(4)); cred_trasf = -cred_trasf;
real acc_dec(d._s1);
real res_cred(d._s2);
real res_debt(d._s3);
real rett_debt(0.0);
real rett_cred(0.0);
real& interesse = d._r11;
if (rettifiche.sign() > 0) rett_debt = rettifiche;
if (rettifiche.sign() < 0) rett_cred = -rettifiche;
set_row(rw++,FR(" @66gCredito@84gDebito")); set_row(rw++,"");
set_row(rw++,FR("@11gIva sulle operazioni di vendita@75g%r"), &iva_vend);
set_row(rw++,FR("%s@11gRettifiche IVA a debito%s@75g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rett_debt);
set_row(rw++,FR("%s@11gIva chiesta a rimborso%s@75g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rimborso);
// conguaglio prorata
if (conguaglio.sign() > 0)
set_row(rw++,FR("@11gConguaglio pro-rata@75g%r"), &conguaglio);
// debito liq. precedente < 50000
if (debt_prec > ZERO)
set_row(rw++,FR("@11gDebito da liquidazione precedente@75g%r"), &debt_prec);
set_row(rw++,FR("@11gRISULTATO@75g%r"), &res_debt);
set_row(rw++,FR("@11gIva ammessa in detrazione@58g%r"), &iva_acq);
if (_isannual || d._f1)
{
set_row(rw++,FR("@11gCredito inizio anno@58g%r"), &cred_prec);
if (cred_trasf != ZERO)
set_row(rw++,FR("@11gCredito trasferito @58g%r"), &cred_trasf);
}
else
set_row(rw++,FR("@11gCredito precedente@58g%r"), &cred_prec);
if (!acc_dec.is_zero())
set_row(rw++,FR("%s@11gVersamento acconto dicembre%s@58g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &acc_dec);
if (!detrazioni.is_zero())
set_row(rw++,FR("@11gUlteriori detrazioni@58g%r"), &detrazioni);
set_row(rw++,FR("%s@11gRettifiche IVA a credito%s@58g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rett_cred);
// versamenti effettuati
if (!versamenti.is_zero() && (_month==13 || !_is_visliq))
{
set_row(rw++,FR("@11gVersamenti effettuati@58g%r"), &versamenti);
}
// versamenti integrativi
if (!vers_int.is_zero() && !_is_visliq)
{
set_row(rw++,FR("@11gVersamenti integrativi@58g%r"), &vers_int);
}
if (conguaglio.sign() < 0)
{
real cg = conguaglio;
cg = -cg;
set_row(rw++,FR("@11gConguaglio pro-rata@58g%r"), &cg);
}
set_row(rw++,FR("@11gRISULTATO@58g%r"), &res_cred);
// se non c'e' nulla da versare stampa solo una riga vuota
// Serve, non toglierla, stronzo.
if (risultato.is_zero())
set_row(rw++,"");
else
{
if (risultato.sign() < 0)
{
real iva = abs(risultato);
if (_isannual || _isriepilogo)
round_imposta(iva);
set_row(rw++,FR("@23gCREDITO ATTUALE@58g%r"),&iva);
if (_is_visliq)
{ // se chiamata dalla visualizzazione mette 2 righe vuote se non vi sono interessi
// poiche' con le rettifiche a credito/debito posso volerle visualizzare
set_row(rw++,"");
set_row(rw++,"");
}
}
else
{
if (_month == 13)
round_imposta(interessi);
real iva = risultato + interessi;
if (_isannual || _isriepilogo)
round_imposta(iva);
if (!iva.is_zero())
{
if (!interessi.is_zero())
{
set_row(rw++,FR("@23gIVA DOVUTA@75g%r"),&risultato);
set_row(rw++,FR("@23gInteresse @33g%6.2r @41g%%@75g%r"),&interesse, &interessi);
}
else
if (_is_visliq)
{ // vedi sopra...
set_row(rw++,"");
set_row(rw++,"");
}
if (iva >= iva_da_riportare(_month))
set_row(rw++,FR("@23gIVA DA VERSARE@75g%r"),&iva);
else
set_row(rw++,FR("@23gIVA A DEBITO DA NON VERSARE@75g%r"),&iva);
}
}
}
if (_is_visliq && _month != 13)
{
// stampa versamenti (anche 0) ad uso visualizzazione liquidazione IVA
rw++;
set_row(rw++,FR("@11g$[r]Versamenti effettuati$[n]@58g%r"), &versamenti);
set_row(rw++, "");
set_row(rw++, "");
}
if (!_is_visliq)
{
// descrizione rettifiche
if (d._s4.not_empty() || d._s5.not_empty())
{
rw++;
set_row(rw++, FR("@11g@bDESCRIZIONE RETTIFICHE@r"));
rw++;
if (d._s4.not_empty()) { set_row(rw++, "@11g%t", &(d._s4)); }
if (d._s5.not_empty()) { set_row(rw++, "@11g%t", &(d._s5)); }
}
}
}
void TLiquidazione_app::print_importo(int rw, const char* prompt, real imp, bool red)
{
int tab = 75;
if (imp < ZERO)
{ imp = -imp; tab = 58; }
TString256 str;
str << "@11g";
if (red) str << "$[r]";
str << prompt;
if (red) str << "$[n]";
str << '@' << tab << "g%r";
set_row(rw, str, &imp);
}
void TLiquidazione_app::set_grand_2000(_DescrItem& d, int &rw)
{
const real& risultato = d._r0;
const real& rimborso = d._r1;
const real& cred_cost = d._r2;
const real& deb_mens = d._r3;
const real& rettifiche = d._r5;
const real& detrazioni = d._r6;
const real& interessi = d._r7;
const real& versamenti = d._r8;
const real& vers_int = d._r9;
TToken_string tt(d._s0);
real iva_vend(tt.get(0));
real iva_acq(tt.get(1));
real cred_prec(tt.get(2));
real debt_prec(tt.get(3));
real cred_trasf(tt.get(4)); cred_trasf = -cred_trasf;
real acc_dec(d._s1);
real res_cred(d._s2);
real res_debt(d._s3);
real rett_debt(0.0);
real rett_cred(0.0);
real& interesse = d._r11;
real& credito_utilizzato_iva = d._r15;
real& credito_utilizzato_f24 = d._r16;
real& variazioni_imposta = d._r17;
real& imposta_non_versata = d._r18;
real& crediti_speciali = d._r19;
if (rettifiche.sign() > 0) rett_debt = rettifiche;
if (rettifiche.sign() < 0) rett_cred = -rettifiche;
set_row(rw++,FR(" @66gCredito@84gDebito")); set_row(rw++,"");
// Se sono in visualizzazione stampo i due importi separati, altrimenti li sommo
if (!_is_visliq)
iva_vend += rett_debt;
set_row(rw++,FR("@11gIVA esigibile per il periodo@75g%r"), &iva_vend);
if (_is_visliq)
set_row(rw++,FR("@11g$[r]Rettifiche IVA a debito$[n]@75g%r"), &rett_debt); // Rettifiche modificabili
// Se sono in visualizzazione stampo i due importi separati, altrimenti li sommo
if (!_is_visliq)
iva_acq += rett_cred;
set_row(rw++,FR("@11gIva che si detrae per il periodo@58g%r"), &iva_acq);
if (_is_visliq)
set_row(rw++,FR("@11g$[r]Rettifiche IVA a credito$[n]@58g%r"), &rett_cred);
real iva_deb_cred = iva_vend - iva_acq;
if (_is_visliq)
iva_deb_cred += rett_debt - rett_cred;
print_importo(rw++, TR("IVA a debito o a credito per il periodo"), iva_deb_cred);
rw++;
print_importo(rw++, TR("Variazioni d'imposta"), variazioni_imposta, _is_visliq);
print_importo(rw++, TR("Imposta non versata"), imposta_non_versata, _is_visliq);
// debito liq. precedente < 50000
if (debt_prec > ZERO)
set_row(rw++,FR("@11gDebito o credito da liquidazione precedente@75g%r"), &debt_prec);
else
{
cred_prec -= rimborso;
if (cred_prec > ZERO)
set_row(rw++,FR("@11gDebito o credito da liquidazione precedente@58g%r"), &cred_prec);
}
set_row(rw++,FR("%s@11gRimborsi%s@75g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rimborso);
set_row(rw++,FR("@11gCredito IVA compensabile detratto@58g%r"), &credito_utilizzato_iva);
real cre_deb_per = risultato + crediti_speciali + acc_dec + vers_int;
if (_month == 13) cre_deb_per += versamenti;
print_importo(rw++, TR("IVA dovuta o a credito per il periodo"), cre_deb_per);
if (crediti_speciali != ZERO || _is_visliq)
set_row(rw++,FR("%s@11gCrediti speciali%s@58g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &crediti_speciali);
if (_freqviva == "T" && interessi != ZERO)
set_row(rw++,FR("@11gInteressi dovuti per liquidazioni trimestrali %6.2r%%@75g%r"),&interesse, &interessi);
else
{
if (_is_visliq)
rw++;
}
if (!acc_dec.is_zero())
set_row(rw++,FR("%s@11gAcconto versato%s@58g%r"),
_is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &acc_dec);
else
{
if (_is_visliq)
rw++;
}
// versamenti effettuati
if (!versamenti.is_zero() && (_month==13 || !_is_visliq))
{
set_row(rw++,FR("@11gVersamenti effettuati@58g%r"), &versamenti);
}
else
{
if (_is_visliq)
rw++;
}
// versamenti integrativi
if (!vers_int.is_zero() && !_is_visliq)
{
set_row(rw++,FR("@11gVersamenti integrativi@58g%r"), &vers_int);
}
else
{
if (_is_visliq)
rw++;
}
const real iva = risultato + interessi;
if (iva > ZERO)
{
if (iva >= iva_da_riportare(_month))
set_row(rw++,FR("@23gIMPORTO DA VERSARE@75g%r"),&iva);
else
set_row(rw++,FR("@23gIMPORTO DA NON VERSARE@75g%r"),&iva);
}
else
{
if (_isannual)
{
const real& credito = d._r20;
if (credito > ZERO)
set_row(rw++,FR("@11gCREDITO RIPORTATO NELL'ANNO SUCCESSIVO@58g%r"), &credito);
}
if (_is_visliq)
rw++;
}
if (_is_visliq && _month != 13)
{
rw++;
set_row(rw++,FR("@11g$[r]Descrizione$[n]"));
// stampa versamenti (anche 0) ad uso visualizzazione liquidazione IVA
rw++;
set_row(rw++,FR("@11g$[r]Versamenti effettuati$[n]@58g%r"), &versamenti);
set_row(rw++, "");
set_row(rw++, "");
}
if (!_is_visliq)
{
// descrizione rettifiche
if (d._s6.not_empty())
{
rw++;
set_row(rw++, FR("@11g@bDESCRIZIONE RETTIFICHE@r"));
rw++;
if (d._s6.not_empty()) { set_row(rw++, "@11g%t", &(d._s6)); }
}
}
}
static void imp2string(const real& n, TString& str)
{
if (!n.is_zero())
{
const TCurrency c(n);
str = c.string(TRUE);
str.right_just(15);
}
else
str.spaces(15);
}
void TLiquidazione_app::set_grand(_DescrItem& d)
{
set_bookmark(TR("Riepilogativo liquidazione"), _firm_bookmark);
set_row(1,""); set_row(2,""); set_row(3,""); set_row(4,"");
set_row(5,FR("@11g@bCALCOLO LIQUIDAZIONE D'IMPOSTA@r"));
set_row(6,"");
int rw = 7;
const bool new_print = atoi(_year) >= 2000;
if (new_print)
set_grand_2000(d, rw);
else
set_grand_1999(d, rw);
// rapportini per rimborso infraannuale
// non si stampano se la stampa serve per la visualizz.
// solo in st.di prova in coda ai registri deve scendere
// il prospetto di rimborso
// sempre (cioe' in bollato e in prova) deve scendere
// il prospettino versamento
if (d._arr.items() > 0 && !_is_visliq)
{
for (int i = 0; i < d._arr.items(); i++)
{
_DescrItem& di = (_DescrItem&)d._arr[i];
if (di._flags == RIMBORSO)
{
if (!_isregis || (_isregis && !_isfinal))
{
set_print_zero(TRUE);
set_row(rw++,"");
set_row(rw++,"");
set_bookmark(TR("Prospetto di rimborso"), _firm_bookmark);
set_row(rw++, TR(" PROSPETTO DI RIMBORSO"));
if (di._f0)
{
// esenti e non imponibili
set_row(rw++,"");
set_row(rw++,TR("1) Soggetto con quota di operazioni esenti e non"
" imponibili superiore al 25%%"));
real perc = di._r0 * CENTO / di._r1; perc.round(0);
TString sep(strlen(REAL_PICTURE)+2); sep.fill('-');
set_row(rw++,"");
set_row(rw++,FR("@26gTotale operazioni esenti e non imp.@66g%r"),
&(di._r0));
set_row(rw++,FR("@66g%t x 100 = %3r%%"), &sep, &perc);
set_row(rw++,FR("@26gVolume di affari lordo@66g%r"), &(di._r1));
set_row(rw++,"");
}
if (di._f1)
{
set_row(rw++,"");
set_row(rw++,TR("2) Soggetto con acquisti ad aliquota media "
"superiore a quella delle vendite"));
TString sep(strlen(REAL_PICTURE)+2); sep.fill('-');
set_row(rw++,"");
set_row(rw++,FR("@26gTotale imposte sugli acquisti@66g%r"), &(di._r5));
set_row(rw++,"@66g%t x 100 = %5.2r%%", &sep, &(di._r7));
set_row(rw++,FR("@26gTotale imponibili sugli acquisti@66g%r"),
&(di._r3));
set_row(rw++,"");
set_row(rw++,FR("@26gTotale imposte sulle vendite@66g%r"), &(di._r4));
set_row(rw++,"@66g%t x 100 = %5.2r%%", &sep, &(di._r6));
set_row(rw++,FR("@26gTotale imponibili sulle vendite@66g%r"), &(di._r2));
}
set_print_zero(FALSE);
}
}
// prospettino versamento
else if (di._flags == DELEGA)
{
int rr = rw;
int cont = 10;
if (di._s4 == "ACC")
{
TToken_string ac(di._s5);
if (!ac.empty_items() && _stampa_vers)
cont = 14;
}
if (rw < (printer().formlen() - cont))
rw = printer().formlen() - cont;
for (int i = rr; i < rw; i++)
set_row(i,"");
set_bookmark(TR("Riepilogo versamenti"), _firm_bookmark);
TString dt = di._d0.string();
TString vr; imp2string(di._r0, vr);
if (di._s4 == "ACC") // Acconto
{
TToken_string ac(di._s5);
if (!ac.empty_items())
{
TString dt (ac.get(4));
real app (ac.get(3));
TString vr; imp2string(app, vr);
TString con (ac.get(0));
TString abi (ac.get(1));
TString cab (ac.get(2));
set_row(rw++, TR("- ACCONTO DICEMBRE -"));
set_row(rw, FR(" Versamento di %s effettuato il %s"),
(const char*)vr,
(const char*)dt);
set_row(rw++, FR("@68gCod Conc.: %3s"),(const char*)con);
set_row(rw++, FR("@68gCod. ABI: %5s Cod. CAB o Cod. Dipendenza: %5s"),(const char*)abi,(const char*)cab);
}
}
if (_stampa_acc && _stampa_vers)
set_row(rw++, "- SALDO -");
if (_stampa_vers)
{
set_row(rw, FR(" Versamento di %s effettuato il %s"),
(const char*)vr,
(const char*)dt);
set_row(rw++, FR("@68gCod Conc.: %3s"),(const char*)di._s0);
set_row(rw++, FR("@68gCod. ABI: %5s Cod. CAB o Cod. Dipendenza: %5s"),(const char*)di._s1,(const char*)di._s2);
}
}
}
}
if (!_is_visliq) set_auto_ff(TRUE);
else set_auto_ff(FALSE);
_firm_bookmark = -1;
}
bool TLiquidazione_app::set_annual(_DescrItem& d)
{
// chiamata internamente a set_pims
bool ret = FALSE;
int row = get_maxrow()+1;
if (row == 1) row = 4;
if (d._f0 & IS_PRORATA)
{
// non lo ha stampato prima se annuale, perche' vladimiro il nefido
// pretende l'assurdo aggiornamento della perc. a quella nuova
const year_int = atoi(_year);
row++;
set_row(++row, year_int > 1997 ? TR("CALCOLO DELLA PERCENTUALE DI DETRAIBILITA'") : TR("CALCOLO DELLA PERCENTUALE DI INDETRAIBILITA'"));
row++;
set_bookmark(TR("Calcolo pro-rata"), _att_bookmark);
ret = TRUE;
set_print_zero(TRUE);
set_row(row++,"");
if (year_int > 1997)
{
const real perc_det = CENTO - d._r2;
const TString16 s1 = perc_det.string();
const TString16 s2 = d._r2.string();
set_row(row++, FR("%% PRO-RATA (%s%%) ed IVA non detraibile (%s%%)@69g%r"),
(const char*)s1, (const char*)s2, &(d._r6));
set_row(row++,FR("C1 - Operazioni esenti escluse da nr. 1 a 9 e 11 art. 10 @69g%r"), &(d._r1));
set_row(row++,FR("C2 - Operazioni esenti di cui nr. 11 art. 10 @69g%r"), &(d._r4));
set_row(row++,FR("C3 - Operazioni esenti da nr. 1 a 9 art. 10 @69g%r"), &(d._r5));
set_row(row++,FR("@6gdi cui cessione beni ammortizzabili @69g%r"), &(d._r8));
set_row(row++,FR("C1A - Operazioni esenti di cui all'art.10 n. 27 quinquies @69g%r"), &(d._r7));
set_row(row++,FR("@6gdi cui cessione beni ammortizzabili @69g%r"), &(d._r9));
set_row(row++,FR("Volume d'affari @69g%r"), &(d._r0));
set_row(row++,FR("Detraibilita' @69g%r%%"), &perc_det);
}
else
{
set_row(row++, FR("%% PRO-RATA ed IVA non detraibile (%s%%)@69g%r"),
(const char*)(d._r2.string()), &(d._r6));
set_row(row++,FR("B1 - Operazioni esenti, escluse da nr. 1 a 9 e 11 art. 10 @69g%r"), &(d._r1));
set_row(row++,FR("B2 - Operazioni esenti, di cui nr. 11 art. 10 @69g%r"), &(d._r4));
set_row(row++,FR("B3 - Operazioni esenti da nr. 1 a 9 art. 10 @69g%r"), &(d._r5));
set_row(row++,FR("Volume d'affari - B3 @69g%r"), &(d._r0));
set_row(row++,FR("Indetraibilita'@69g%r%%"), &(d._r2));
}
set_print_zero(FALSE);
}
return ret;
}
void TLiquidazione_app::set_ventila(_DescrItem& d)
{
if (d._arr.items() == 0 || d._r0.is_zero())
return;
set_bookmark(TR("Prospetto ventilazione"), _att_bookmark);
set_row(1,FR("@54gPROSPETTO VENTILAZIONE"));
set_row(2,"");
set_row(3,"");
set_row(4,FR("@10gTotale acquisti destinati alla rivendita@55g%r"),
&(d._r0));
set_row(5,FR("@10gTotale dei corrispettivi da ventilare@55g%r"),
&(d._r1));
set_row(6,FR("@10gMoltiplicatore@59g%3.9r"),&(d._r2));
set_row(7,"");
set_row(8,FR("@10gCod."));
set_row(9,FR("@10gIVA@17gDescrizione@48gAcquisti"
"@65gImponibile vendite@89gImposta vendite"));
set_row(10,"");
int row = 11;
real t1, t2, t3;
TString80 s0;
for(int i = 0; i < d._arr.items(); i++)
{
_vDesc& vd = (_vDesc&)d._arr[i];
look_iva(vd._codiva);
s0 = _iva->get("S0"); s0.cut(23);
set_row(row+i,"@8g%5s@17g%-23s@41g%r@68g%r@89g%r",
(const char*)vd._codiva,
(const char*)s0,
&(vd._acq),
&(vd._vnd),
&(vd._viv));
t1 += vd._acq;
t2 += vd._vnd;
t3 += vd._viv;
}
set_row(row+i+1,"");
set_row(row+i+2,FR("@10gTotale@41g%r@68g%r@89g%r"),
&t1, &t2, &t3);
set_auto_ff(TRUE);
}
static void real2string(const real& r, TString& str)
{
TCurrency cur(r);
str = cur.string(TRUE);
}
void TLiquidazione_app::set_regagr(_DescrItem& d)
{
set_print_zero(TRUE);
const bool is1998 = atoi(_year) >= 1998;
CHECK(is1998 == _isagr98, "Mucca pazza!");
real& agr_1 = d._r0;
real& agr_2 = d._r1;
real& agr_3 = d._r2;
real& agr_4 = d._r3;
real& agr_5 = d._r4;
real& agr_6 = d._r5;
real& agr_7 = d._r6;
real& agr_1i = d._r7;
real& agr_2i = d._r8;
real& pdetr = d._r9;
real& ivadt = d._r10;
real& iva_detIA = d._r11;
real ara = agr_5 + agr_6;
real arn = agr_3 + agr_4;
real agr_ven = agr_1 + agr_2;
real ivadt_amm = agr_3 + ivadt + (is1998 ? iva_detIA : agr_1);
set_bookmark(TR("Prospetto regime agricolo"), _att_bookmark);
int r = 1;
set_row(r++,FR("@50gPROSPETTO REGIME AGRICOLO"));
set_row(r++,"");
// percentuale detraibilita'
set_row(r++, FR("Iva vendite beni I parte Tabella A @56g%r"),&agr_1);
set_row(r++, "");
set_row(r++, FR("Iva vendite beni diversi da I parte Tabella A @56g%r"),&agr_2);
set_row(r++, "");
set_row(r++, FR("Totale iva sulle operazioni di vendita @56g%r"), &agr_ven);
set_row(r++, "");
set_row(r++, FR("Iva acquisti in regime agricolo@56g%r"),&ara);
set_row(r++, "");
set_row(r++, FR("Iva acquisti per operazioni diverse I parte Tabella A@56g%r"),&arn);
set_row(r++, FR("... di cui beni ammortizzabili@56g%r"),&agr_4);
set_row(r++, "");
set_row(r++, FR("Iva acquisti ad uso promiscuo@56g%r"),&agr_7);
TString dn,riga;
if (agr_1i != ZERO)
{
real2string(agr_1i, riga);
dn << riga << " + ";
}
real2string(agr_2i, riga);
dn << riga;
int ln = max(riga.len(),dn.len()) + 2;
int corr = ln % 2 == 0 ? 0 : 1;
TString middle(ln); middle.fill('-');
int xl = 71 - riga.len()/2;
int times_sign = xl + ln/2 + 3; // per allineare i segni moltiplicativi
middle << "@" << times_sign << "gx 100 = " << pdetr.string(".") << " %";
set_row(r++, "");
set_row(r++, "@56g%r",&agr_2i);
riga.format(FR("Percentuale delle operazioni diverse@%dg%%s"),xl - corr - ln/2);
set_row(r++, riga, (const char*)middle);
corr = dn.len() % 2 == 0 ? 0 : 1;
riga.format("@%dg%%s",xl - corr - dn.len()/2);
set_row(r++, riga, (const char*)dn);
real2string(agr_7, riga);
dn = "100";
ln = max(riga.len(),dn.len()) + 2;
xl = 71 - riga.len()/2;
corr = ln % 2 == 0 ? 0 : 1;
middle.fill('-',ln);
middle << "@" << times_sign << "gx " << pdetr.string(".");
middle << " = " << TCurrency(ivadt).string(TRUE);
set_row(r++, "");
set_row(r++, "@56g%r", &agr_7);
riga.format(FR("Iva ammessa in detrazione sugli acquisti promiscui@%dg%%s"),xl - corr - ln/2);
set_row(r++, riga, (const char*)middle);
corr = dn.len() % 2 == 0 ? 0 : 1;
riga.format("@%dg%%s",xl - corr - dn.len()/2);
set_row(r++, riga, (const char*)dn);
set_row(r++, "");
if (is1998)
{
set_row(r++, FR("Iva ammessa in detrazione I parte tabella A@56g%r"),&iva_detIA);
set_row(r++, "");
}
set_row(r++, FR("Totale iva ammessa in detrazione@56g%r"),&ivadt_amm);
// Last pain...
TArray& agr_array = d._arr;
const int pia_items = agr_array.items();
if (pia_items) // Se non siamo ancora nel 1998 questo vale 0, ossia non vi sono items.
{
real t1,t2; // Totale imponibile/imposta
TString des; // Descrizione codice iva ordinario
real al; // Aliquota IVA
r+=2;
// Stampa l' intestazione...
set_row(r++,FR(" Codice IVA@45gAliquota IVA@73gCodice IVA@88gAliquota IVA"));
set_row(r++,FR(" Ordinario@45gOrdinaria@61gImponibile@73gCompensazione@88gCompensazione@108gImposta"));
set_row(r++,"");
for (int i=0; i<pia_items; i++)
{
_DescrItem& di = (_DescrItem&) agr_array[i];
if (di._flags != PROGAGR)
continue;
look_iva(di._s0);
des = _iva->get("S0"); des.cut(25);
al = _iva->get_real("R0");
set_row(r,"%4s %-25s@48g%s %%", (const char*) di._s0, (const char*) des, al.string("#@,@@"));
set_row(r,"@56g%r@75g%4s",&di._r0, (const char*)di._s1);
look_iva(di._s1);
al = _iva->get_real("R0");
set_row(r++,"@92g%s %%@100g%r", al.string("#@,@@"), &di._r1);
t1 += di._r0;
t2 += di._r1;
}
// ... ed il totale minchiativo
r++;
set_row(r++,FR("Totale@56g%r@100g%r"),&t1,&t2);
}
set_auto_ff(TRUE);
set_print_zero(FALSE);
}
void TLiquidazione_app::set_viaggio(_DescrItem& d)
{
// the longest & stronzest
// Nel corso della scrittura di questa funzione
// Berlusconi + Fini + Bossi hanno vinto le elezioni
// ... lungo commento cancellato
real& corr_CEE = d._r0;
real& corr_misCEE = d._r1;
real& corr_noCEE = d._r2;
real& acq_CEE = d._r3;
real& acq_misCEE = d._r4;
real& acq_noCEE = d._r5;
real& acq_misnoCEE = d._r6;
real& perc_r = d._r7;
real& cred_cos = d._r8;
real& ivm = d._r9;
real tc = (corr_CEE + ivm);
real ta = (acq_CEE + acq_misCEE);
real& bi = d._r10;
real& dovuta = d._r11;
real tcc = corr_CEE + corr_noCEE + corr_misCEE;
real tco = acq_CEE + acq_noCEE + acq_misCEE + acq_misnoCEE;
real tma = acq_CEE + acq_misCEE;
set_print_zero(TRUE);
set_bookmark(FR("Prospetto 74 ter"), _att_bookmark);
set_row(1,"");
set_row(2,FR("@54gRIEPILOGO 74 TER"));
set_row(3,"");
set_row(4,FR("Ammontare dei corrispettivi relativi a viaggi eseguiti"
" interamente nella CEE .....................@100g%r"), &(corr_CEE));
set_row(5,FR("Ammontare dei corrispettivi relativi a viaggi misti (dentro"
" e fuori CEE) ......................... @100g%r"), &(corr_misCEE));
set_row(6,FR("Ammontare dei corrispettivi relativi a viaggi eseguiti"
" interamente fuori CEE ..................... @100g%r"), &(corr_noCEE));
set_row(7,"");
set_row(8,FR("@56gTotale corrispettivi@100g%r"), &tcc);
set_row(9,"");
set_row(10,FR("Ammontare dei costi relativi a viaggi interamente"
" svolti nella CEE ............................... @100g%r"),
&(acq_CEE));
set_row(11,FR("Ammontare dei costi relativi a viaggi misti (per la"
" parte CEE) ................................... @100g%r"),
&(acq_misCEE));
set_row(12,FR("Ammontare dei costi relativi a viaggi interamente"
" svolti fuori CEE ............................... @100g%r"),
&(acq_noCEE));
set_row(13,FR("Ammontare dei costi relativi a viaggi misti (per la"
" parte fuori CEE) .............................@100g%r"),
&(acq_misnoCEE));
set_row(14,"");
set_row(15,FR("@64gTotale costi@100g%r"), &tco);
set_row(16,"");
set_row(17,TR("DETERMINAZIONE CORRISPETTIVI IMPONIBILI "
"RELATIVI A VIAGGI MISTI"));
set_row(18,"");
// la bella frazioncina della percentuale di ripartizione
TString tmp; real2string(acq_misCEE, tmp);
TString up = tmp;
up << " x 100";
TString dn = tmp;
real2string(acq_misnoCEE, tmp);
dn << " + " << tmp;
int ln = max(up.len(), dn.len()) + 2;
TString den(ln); den.fill('-');
up.center_just(ln); dn.center_just(ln);
// la bella frazioncina degli imponibili viaggi misti
TString tmp2; real2string(corr_misCEE, tmp2);
TString up2 = tmp2;
const TString16 perc_r_str = perc_r.string("###,@@");
up2 << " x" << perc_r_str;
TString dn2 = "100";
int ln2 = max(up2.len(), 3) + 2;
TString den2(ln2); den2.fill('-');
up2.center_just(ln2); dn2.center_just(ln2);
// la gran frazionazza centrata e stupenda
int tot = 35 + ln + ln2;
int rem1 = (100 - tot)/2; if (rem1 < 0) rem1 = 0;
int pos1 = rem1 + 13;
int rem2 = pos1+ den.len() + 11;
int pos2 = rem2 + 20;
set_row(19,format("@%dg%%t@%dg%%t", pos1, pos2),
&up, &up2);
set_row(20,format(FR("@%dgPerc. rip. = %%t = %%t; @%dg"
"Imp. viaggi misti = %%t = @100g%%r"),
rem1, rem2),
&den, &perc_r_str, &den2, &ivm);
set_row(21,format("@%dg%%t@%dg%%t", pos1, pos2),
&dn, &dn2);
real tmr = corr_CEE + ivm;
// whew, come dicono su Topolino
real2string(corr_CEE, tmp);
up = "("; up << tmp << " + ";
real2string(ivm, tmp);
up << tmp << ")";
den.fill('.',59-up.len());
set_row(23,FR("Ammontare dei corrispettivi imponibili@40g%t %t@100g%r"),
&up, &den, &tmr);
// se e' l'annuale non ha senso altro
if (d._f1) return;
real2string(acq_CEE, tmp);
up = "("; up << tmp << " + ";
real2string(acq_misCEE, tmp);
up << tmp << ")";
den.fill('.',59-up.len());
set_row(24,FR("Ammontare dei costi deducibili@40g%t %t@100g%r"),
&up, &den, &tma);
den.fill('.',60);
set_row(25,FR("Credito di costo precedente @40g%t@100g%r"), &den, &(cred_cos));
real2string(tmr, tmp);
up = "["; up << tmp << " - (";
real2string(tma, tmp);
up << tmp << " + ";
real2string(d._r8, tmp);
up << tmp << ")]";
den.fill('.',59-up.len());
set_row(26,FR("Base imponibile lorda@40g%t %t@100g%r"), &up, &den, &bi);
set_row(27,"");
if (bi > ZERO)
{
const real aliva = aliquota_agvia();
const real alcnt = aliva + CENTO;
real2string(bi, tmp);
up = tmp;
up << " x" << aliva.string("###,@@");
dn = alcnt.string("###,@@");
ln = max(up.len(), 3) + 2;
den.fill('-',ln);
up.center_just(ln); dn.center_just(ln);
tmp.fill('.', 59 - den.len());
set_row(28,"@40g%t",&up);
set_row(29,FR("IVA A DEBITO@40g%t %t@100g%r"), &den, &tmp, &dovuta);
set_row(30,"@40g%t", &dn);
}
else if (bi.sign() < 0)
{
bi = abs(bi);
set_row(28,"");
set_row(29,FR("CREDITO DI COSTO DA RIPORTARE@100g%r"), &bi);
}
set_print_zero(FALSE);
set_auto_ff(TRUE);
}
void TLiquidazione_app::set_acconto_p(_DescrItem& d)
{
const char* errmsg[3] = {
{TR("manca la tabella risultati liquidazione per l'anno corrente")},
{TR("manca la tabella risultati liquidazione per l'anno precedente")},
{TR("manca la tabella dichiarazione annuale per l'anno precedente")}};
set_row(1,"%t@7g%t",&(d._s0), &(d._s1));
if (d._f2)
set_row(1,"@50g@b*** %s ***@r", errmsg[d._f2 -1]);
else
{
if (d._f0) // base anno in corso
{
if (d._f1) // stampa base di calcolo
{
set_row(1,"@58g%r@74g%r@96g%r@122g%s", &(d._r3),
&(d._r2), &(d._r1), d._f3 ? "Si" : "No");
}
else
set_row(1,"@62g%r@91g%s", &(d._r1), d._f3 ? "Si" : "No");
}
else //metodo storico
{
if (d._f1 && (d._r0).sign()>0) // stampa base di calcolo
set_row(1,"@58g%r@88g%r", &(d._r0), &(d._r1));
else
set_row(1,"@87g%r",&(d._r1));
}
}
}
void TLiquidazione_app::set_acchead_p(_DescrItem& d)
{
reset_header();
set_header(1,FR("Gestione IVA@107gData @>@125gPag. @#"));
set_header(3,sep);
if (d._f0) // base anno in corso
{
set_header(2,FR("@40gCALCOLO ACCONTI IVA DICEMBRE %s "
"(base anno in corso)"), (const char*) _year);
if (d._f1) // stampa base calcolo
{
set_header(4,FR("@58g------- Base di calcolo -------"));
set_header(5,FR("Ditta@7gDenominazione@62gDebito@78gCredito"
"@94gACCONTO calcolato@115gLiq. differita"));
set_header(6,sep);
set_header(7,"");
}
else
{
set_header(4,FR("Ditta@7gDenominazione@60gACCONTO calcolato"
"@84gLiq. differita"));
set_header(5,sep);
set_header(6,"");
}
}
else
{
set_header(2,FR("@40gCALCOLO ACCONTI IVA DICEMBRE %s"), (const char*) _year);
set_header(5,sep);
set_header(6,"");
if (d._f1)
set_header(4,FR("Ditta@7gDenominazione@58gBase di calcolo"
"@86gACCONTO calcolato"));
else
set_header(4,FR("Ditta@7gDenominazione@85gACCONTO calcolato"));
}
}
// ---------------------------------------------------------------------
// Tabulato deleghe
// ---------------------------------------------------------------------
void TLiquidazione_app::set_deltab(_DescrItem& d, bool iscred)
{
reset_header();
int rw = 1;
static bool credpr;
if (iscred)
{
// set header
set_header(1,FR("ELENCO DITTE A CREDITO@30g%s %s@107gData @>@125gPag. @#"),
d._f0 == 13 ? TR("Annuale ") : itom(d._f0), (const char*)_year);
set_header(2,sep);
set_header(3,FR("@40gF@60gImporto a"));
set_header(4,FR("Cod.@8gDenominazione@40gR@62gcredito"));
set_header(5,sep);
set_header(6,"");
// set rows
for (int i = 0; i < d._arr.items(); i++)
{
TToken_string& tt = (TToken_string&)(d._arr)[i];
TString cod(tt.get(0));
TParagraph_string rgs(tt.get(1), 30);
TString diocantaro(rgs.get(0));
TString frq(tt.get(2));
real tp (tt.get(3));
real in (tt.get(4));
tp -= in;
tp = -tp;
set_row(rw++, "%-5s@8g%-30s@40g%1s@54g%r",
(const char*)cod, (const char*)diocantaro,
(const char*)frq, &tp);
for (int i = 1; i < rgs.items(); i++)
set_row(rw++, "@8g%-30s", (const char*)rgs.get(i));
}
}
else
{
// set header
set_header(1,FR("ELENCO DITTE A DEBITO@30g%s %s@107gData @>@125gPag. @#"),
d._f0 == 13 ? TR("Annuale ") : itom(d._f0), (const char*)_year);
set_header(2,sep);
set_header(3,FR("@40gF@60gImporto da@73gCodice@83gCod."));
set_header(4,FR("Cod.@8gDenominazione@40gR Numero telefonico@63gversare Banca Dip. Con."));
set_header(5,sep);
set_header(6,"");
// set rows
for (int i = 0; i < d._arr.items(); i++)
{
TToken_string& tt = (TToken_string&)(d._arr)[i];
TString cod(tt.get(0));
TParagraph_string rgs(tt.get(1), 30);
TString diocantaro(rgs.get(0));
TString frq(tt.get(2));
real tp (tt.get(3));
real in (tt.get(4));
TString abi(tt.get(5));
TString cab(tt.get(6));
TString con(tt.get(7));
TString tel(tt.get(8));
if (!tel.blank())
tel << '/';
tel << tt.get(9);
TString desc(tt.get(10));
set_row(rw++, "%-5s@8g%-30s@40g%1s %s @55g%r %5s %5s %3s %-.45s",
(const char*)cod, (const char*)diocantaro, (const char*)frq,
(const char*)tel, &tp, (const char*)abi,
(const char*)cab, (const char*)con, (const char*)desc);
for (int i = 1; i < rgs.items(); i++)
set_row(rw++, "@8g%-30s", (const char*)rgs.get(i));
}
}
set_auto_ff(TRUE);
}