Files correlati : cg4.exe Ricompilazione Demo : [ ] Commento Bugs 0001432: per le fatture ad esigibilità differita (fatte ad ente), sul registro iva delle vendite non viene indicato 4 nel campo Tipo Operazione Sui dati cisart ho scritto su un cliente che era un ente pubblico e nel registro mi ha correttamente stampato il Flag4 nella colonna TO (Tipo operazione) Bugs 0001433: il pagamento di una fattura ad esigibilità differita non fa maturare l'iva in liquidazione, il pagamento è stato fatto con il saldaconto. Nei dati cisart un pagamento registrato 15-08 aveva come data di pagamento 31-07 per cui veniva liquidato in luglio, ho cambiato la data di pagamentio in15-08 e mi e' stato liquidato in agosto, la quidazione di settembre era gia' corretta. Bug 0001431: Nella stampa di prova libri iva, l'iva a debito non viene esposta a parte, quella a credito si; il pagamento parziale o totale di una fattura tramite il saldaconto non fa maturare nessuna quota di iva, non viene riportata la data di incasso sulla registrazione della fattura per il pagamento parziale vedi lanota sopra, la data di incasso non viene e non verrà riportata dal saldaconto sulla prima nota anche per il fatto che potrebbero essere piu' di una git-svn-id: svn://10.65.10.50/trunk@19270 c028cbd2-c16b-5b4b-a496-9718f37d4682
3147 lines
97 KiB
C++
Executable File
3147 lines
97 KiB
C++
Executable File
// ------------------------------------------------------------
|
||
// Calcolo liquidazioni
|
||
// Part 5: stampa
|
||
// fv 21-1-94
|
||
// ------------------------------------------------------------
|
||
|
||
#include <currency.h>
|
||
#include <recarray.h>
|
||
#include <utility.h>
|
||
#include "cg4300.h"
|
||
|
||
#include <attiv.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:
|
||
case PIS_ROW_D:
|
||
case PIM_ROW_D:
|
||
case PIS_ROW_DI:
|
||
case PIM_ROW_DI:
|
||
set_pim(d);
|
||
break;
|
||
case PIS_HEAD:
|
||
case PIM_HEAD:
|
||
case PIS_HEAD_D:
|
||
case PIM_HEAD_D:
|
||
case PIS_HEAD_DI:
|
||
case PIM_HEAD_DI:
|
||
set_pim_head(d);
|
||
break;
|
||
case MISC_LIQ:
|
||
set_pumpam(d);
|
||
break;
|
||
case TOT_ROW:
|
||
set_plm(d);
|
||
break;
|
||
case TOT_ROW_D:
|
||
case TOT_ROW_DI:
|
||
set_plm_diff(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;
|
||
default:
|
||
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");
|
||
|
||
if (atoi(_year) > 2007)
|
||
{
|
||
const TString16 codateco = _nditte->curr(LF_ATTIV).get(ATT_CODATECO);
|
||
|
||
d->_s2 = codateco;
|
||
}
|
||
else
|
||
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");
|
||
d->_r29 = _lia->get_real("R29");
|
||
d->_r33 = _lia->get_real("R33");
|
||
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 issosp = false;
|
||
real t0, t1, t2, t3, t4, t5, t26, t27, t28, t29, t30, t31, t32, t33;
|
||
real rt0, rt1, rt2, rt3, rt4, rt5;
|
||
real autodafe, autodafe_iva, art40, art40_iva;
|
||
real diffimp, diffiva, diffincimp, diffinciva;
|
||
real diffimp_acq, diffiva_acq, diffincimp_acq, diffinciva_acq;
|
||
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 = NULL;
|
||
_DescrItem * head = NULL;
|
||
_DescrItem * headi = NULL;
|
||
_DescrItem * tot = NULL;
|
||
_DescrItem * totd = NULL;
|
||
_DescrItem * totdi = NULL;
|
||
int totpos = 0;
|
||
|
||
// 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);
|
||
|
||
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));
|
||
|
||
// 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");
|
||
// }
|
||
|
||
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() &&
|
||
tab->get_real("R26").is_zero() &&
|
||
tab->get_real("R27").is_zero() &&
|
||
tab->get_real("R28").is_zero() &&
|
||
tab->get_real("R29").is_zero() &&
|
||
tab->get_real("R30").is_zero() &&
|
||
tab->get_real("R31").is_zero() &&
|
||
tab->get_real("R32").is_zero() &&
|
||
tab->get_real("R33").is_zero())
|
||
continue;
|
||
|
||
if (activity == att && is_month_plain(mese) && _year == anno)
|
||
{
|
||
// vedi se c'e' gia' un item corrispondente
|
||
int i;
|
||
|
||
for(i = last+1; i < _descr_arr.items(); i++)
|
||
{
|
||
_DescrItem * wd = (_DescrItem*)&_descr_arr[i];
|
||
if (wd->_flags == PIM_PIS &&
|
||
wd->_s0 == ref &&
|
||
wd->_s1 == codiva)
|
||
{
|
||
d = wd;
|
||
break;
|
||
}
|
||
if (wd->_flags == TOT_ROW)
|
||
break;
|
||
if (wd->_flags == PIM_PIS &&
|
||
wd->_s0 == ref &&
|
||
wd->_s1 > codiva)
|
||
break;
|
||
}
|
||
if (d == NULL)
|
||
{
|
||
bool isfirst = (hea == NULL);
|
||
|
||
if (isfirst)
|
||
{
|
||
hea = new _DescrItem(describe_pis ? PIS_HEAD : PIM_HEAD);
|
||
hea->_f0 = skip_acq; // cosi' non compare nemmeno la colonnina! contento?
|
||
hea->_f1 = true;
|
||
_descr_arr.insert(hea, i++);
|
||
tot = new _DescrItem(TOT_ROW);
|
||
totpos = _descr_arr.insert(tot, i);
|
||
}
|
||
else
|
||
totpos++;
|
||
d = new _DescrItem(PIM_PIS);
|
||
d->_f0 = isfirst;
|
||
d->_s0 = ref;
|
||
d->_s1 = codiva;
|
||
_descr_arr.insert(d, i);
|
||
}
|
||
|
||
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 (tipomov == vendita)
|
||
// {
|
||
if (!diffimp.is_zero() || !diffiva.is_zero() ||
|
||
!diffimp_acq.is_zero() || !diffiva_acq.is_zero())
|
||
{
|
||
const word id = describe_pis ? PIS_ROW_D : PIM_ROW_D;
|
||
int j;
|
||
|
||
d = NULL;
|
||
for (j = totpos + 1; j < _descr_arr.items(); j++)
|
||
{
|
||
_DescrItem * wd = (_DescrItem*)&_descr_arr[j];
|
||
const bool found = wd->_flags == id && wd->_s0 == ref;
|
||
|
||
if (found && wd->_s1 == codiva)
|
||
{
|
||
d = wd;
|
||
break;
|
||
}
|
||
if (wd->_flags == TOT_ROW_D)
|
||
break;
|
||
if (found && wd->_s1 > codiva)
|
||
break;
|
||
}
|
||
if (d == NULL)
|
||
{
|
||
const bool isfirst = head == NULL;
|
||
|
||
if (isfirst)
|
||
{
|
||
head = new _DescrItem(describe_pis ? PIS_HEAD_D : PIM_HEAD_D);
|
||
_descr_arr.insert(head, j++);
|
||
head->_f0 = false;
|
||
head->_f1 = true;
|
||
totd = new _DescrItem(TOT_ROW_D);
|
||
_descr_arr.insert(totd, j);
|
||
}
|
||
d = new _DescrItem(id);
|
||
_descr_arr.insert(d, j);
|
||
d->_f0 = isfirst;
|
||
d->_s0 = ref;
|
||
d->_s1 = codiva;
|
||
}
|
||
d->_r26 += diffimp;
|
||
d->_r27 += diffiva;
|
||
t26 += diffimp;
|
||
t27 += diffiva;
|
||
d->_r30 += diffimp_acq;
|
||
d->_r31 += diffiva_acq;
|
||
t30 += diffimp_acq;
|
||
t31 += diffiva_acq;
|
||
}
|
||
if (!diffincimp.is_zero() || !diffinciva.is_zero() ||
|
||
!diffincimp_acq.is_zero() || !diffinciva_acq.is_zero())
|
||
{
|
||
const word id = describe_pis ? PIS_ROW_DI : PIM_ROW_DI;
|
||
int j;
|
||
|
||
d = NULL;
|
||
for (j = totpos + 1; j < _descr_arr.items(); j++)
|
||
{
|
||
_DescrItem * wd = (_DescrItem*)&_descr_arr[j];
|
||
const bool found = wd->_flags == id && wd->_s0 == ref;
|
||
|
||
if (found && wd->_s1 == codiva)
|
||
{
|
||
d = wd;
|
||
break;
|
||
}
|
||
if (wd->_flags == TOT_ROW_DI)
|
||
break;
|
||
if (found && wd->_s1 > codiva)
|
||
break;
|
||
}
|
||
if (d == NULL)
|
||
{
|
||
const bool isfirst = headi == NULL;
|
||
if (isfirst)
|
||
{
|
||
headi = new _DescrItem(describe_pis ? PIS_HEAD_DI : PIM_HEAD_DI);
|
||
_descr_arr.insert(headi, j++);
|
||
headi->_f0 = false;
|
||
headi->_f1 = true;
|
||
totdi = new _DescrItem(TOT_ROW_DI);
|
||
_descr_arr.insert(totdi, j);
|
||
}
|
||
d = new _DescrItem(id);
|
||
_descr_arr.insert(d, j);
|
||
d->_f0 = isfirst;
|
||
d->_s0 = ref;
|
||
d->_s1 = codiva;
|
||
}
|
||
d->_r28 += diffincimp;
|
||
d->_r29 += diffinciva;
|
||
t28 += diffincimp;
|
||
t29 += diffinciva;
|
||
d->_r32 += diffincimp_acq;
|
||
d->_r33 += diffinciva_acq;
|
||
t32 += diffincimp_acq;
|
||
t33 += diffinciva_acq;
|
||
}
|
||
// }
|
||
}
|
||
} // 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;
|
||
iads->_f0 = false;
|
||
}
|
||
} // 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;
|
||
ads->_f0 = false;
|
||
_descr_arr.insert(ads, totpos++);
|
||
}
|
||
|
||
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;
|
||
ads->_f0 = false;
|
||
_descr_arr.insert(ads, totpos++);
|
||
}
|
||
|
||
// ag. viaggio: iva dovuta 74 ter la vogliono in mezzo ai progressivi
|
||
if (iads != NULL)
|
||
_descr_arr.insert(iads, totpos++);
|
||
|
||
|
||
// prepara una bella riga di totali
|
||
if (tot != NULL)
|
||
{
|
||
tot->_r0 = t0; tot->_r1 = t1;
|
||
tot->_r2 = t2; tot->_r3 = t3;
|
||
tot->_r4 = t4; tot->_r5 = t5;
|
||
}
|
||
if (totd != NULL)
|
||
{
|
||
totd->_r26 = t26;
|
||
totd->_r27 = t27;
|
||
totd->_r30 = t30;
|
||
totd->_r31 = t31;
|
||
}
|
||
if (totdi != NULL)
|
||
{
|
||
totdi->_r28 = t28;
|
||
totdi->_r29 = t29;
|
||
totdi->_r32 = t32;
|
||
totdi->_r33 = t33;
|
||
}
|
||
// Totali progressivi da registri, comprensivi dei valori per calcolo vol affari.
|
||
if (tot != NULL && issosp) // Setta i valori (e la conseguente stampa della riga) solo se presenti registri in sospensione
|
||
{
|
||
tot->_r11 = rt0; tot->_r12 = rt1;
|
||
tot->_r13 = rt2; tot->_r14 = rt3;
|
||
tot->_s2 = rt4.string(); tot->_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;
|
||
|
||
if (tot != NULL)
|
||
{
|
||
tot->_r6 += _pom->get_real("R0"); // acq. intracomunitari
|
||
tot->_r7 += _pom->get_real("R1"); // inded. art 19
|
||
tot->_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
|
||
if (tot != NULL)
|
||
{
|
||
tot->_r9 += _pom->get_real("R9"); // acq. inded. su ricavi esenti
|
||
tot->_r10 += _pom->get_real("R10"); // IVA acq. inded. su ricavi esenti
|
||
|
||
// passaggi interni
|
||
real aipip(tot->_s0); // progressivo ...
|
||
real aipivp(tot->_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
|
||
tot->_s0 = aipip.string(); // risbatto ...
|
||
tot->_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 (tot != NULL && issosp)
|
||
{
|
||
rt4 += tot->_r7; rt5 += tot->_r8; // Det 1
|
||
rt4 += tot->_r9; rt5 += tot->_r10; // Det 3
|
||
rt4 += real(tot->_s0); rt5 += real(tot->_s1); // Det 9
|
||
tot->_s2 = rt4.string(); tot->_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(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");
|
||
d->_r29 = _lim->get_real("R29");
|
||
d->_r33 = _lim->get_real("R33");
|
||
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;
|
||
int i;
|
||
|
||
for (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
|
||
int i = 9;
|
||
if (!_isdiffacc)
|
||
{
|
||
set_row(i++,FR("@11gIva esigibile fino al 20/12@81g%r"), &d._r0);
|
||
if (d._r29 > ZERO)
|
||
set_row(i++,FR("@11gIVA a liquidazione differita incassata fino al 20/12@75g%r"), &d._r29);
|
||
if (d._r33 > ZERO)
|
||
set_row(i++,FR("@11gIVA a liquidazione differita pagata fino al 20/12@64g%r"), &d._r33);
|
||
}
|
||
else
|
||
{
|
||
set_row(i++,FR("@11gIva sulle operazioni di vendita@81g%r"), &d._r0);
|
||
if (d._r29 > ZERO)
|
||
set_row(i++,FR("@11gIVA a liquidazione differita incassata@75g%r"), &d._r29);
|
||
if (d._r33 > ZERO)
|
||
set_row(i++,FR("@11gIVA a liquidazione differita pagata@64g%r"), &d._r33);
|
||
}
|
||
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
|
||
{
|
||
set_row(r++,"");
|
||
if (d._flags == PIM_HEAD_D)
|
||
{
|
||
set_row(r++, TR("Fatture a liquidazione differita"));
|
||
set_bookmark(TR("Riepilogo progressivi a liquidazione differita"), _att_bookmark);
|
||
}
|
||
else
|
||
if (d._flags == PIM_HEAD_DI)
|
||
{
|
||
set_row(r++, TR("Fatture a liquidazione differita incassate"));
|
||
set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark);
|
||
}
|
||
else // PIS_HEAD
|
||
{
|
||
if (d._flags == PIS_HEAD)
|
||
{
|
||
set_row(r++,TR(" Di cui da periodo successivo"));
|
||
set_row(r++,"");
|
||
set_bookmark(TR("Riepilogo progressivi successivi"), _att_bookmark);
|
||
}
|
||
else
|
||
if (d._flags == PIS_HEAD_D)
|
||
{
|
||
set_row(r++, TR("Fatture a liquidazione differita"));
|
||
set_bookmark(TR("Riepilogo progressivi successivi a liquidazione differita"), _att_bookmark);
|
||
}
|
||
else
|
||
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_row(r++,"");
|
||
}
|
||
if (d._f0)
|
||
{
|
||
if (d._flags == PIM_HEAD || d._flags == PIS_HEAD)
|
||
{
|
||
set_row(r++,FR(" Cod.@41gVENDITE@71gCORRISPETTIVI"));
|
||
set_row(r++,FR(" IVA Descrizione@30gImponibile@49gImposta@63gImponibile@82gImposta"));
|
||
set_row(r,"");
|
||
}
|
||
/* else
|
||
{
|
||
set_row(r++,FR(" Cod.@41gVENDITE"));
|
||
set_row(r++,FR(" IVA Descrizione@30gImponibile@49gImposta"));
|
||
} */
|
||
}
|
||
else
|
||
{
|
||
if (d._flags == PIM_HEAD || d._flags == PIS_HEAD)
|
||
{
|
||
set_row(r++,FR(" Cod.@41gVENDITE@71gCORRISPETTIVI@106gACQUISTI"));
|
||
set_row(r++,FR(" IVA Descrizione@30gImponibile@49gImposta@63gImponibile"
|
||
"@82gImposta@96gImponibile@115gImposta"));
|
||
set_row(r,"");
|
||
}
|
||
/* else
|
||
{
|
||
set_row(r++,FR(" Cod.@41gVENDITE"));
|
||
set_row(r++,FR(" IVA Descrizione@30gImponibile@49gImposta"));
|
||
} */
|
||
}
|
||
}
|
||
|
||
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;
|
||
const bool e = (d._r26 + d._r27) == ZERO;
|
||
const bool f = (d._r28 + d._r29) == ZERO;
|
||
const bool g = (d._r30 + d._r31) == ZERO;
|
||
const bool h = (d._r32 + d._r33) == ZERO;
|
||
|
||
if (a && b && c && e && f && g && h)
|
||
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._flags == PIM_ROW || d._flags == PIS_ROW)
|
||
{
|
||
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));
|
||
}
|
||
else
|
||
if (d._flags == PIM_ROW_D || d._flags == PIS_ROW_D)
|
||
{
|
||
set_row(rw++,"%4s %s@25g%r@41g%r@91g%r@107g%r",
|
||
(const char*)d._s1, (const char*)d._s2,
|
||
&(d._r26), &(d._r27), &(d._r30), &(d._r31));
|
||
}
|
||
else
|
||
if (d._flags == PIM_ROW_DI || d._flags == PIS_ROW_DI)
|
||
{
|
||
set_row(rw++,"%4s %s@25g%r@41g%r@91g%r@107g%r",
|
||
(const char*)d._s1, (const char*)d._s2,
|
||
&(d._r28), &(d._r29), &(d._r32), &(d._r33));
|
||
}
|
||
}
|
||
|
||
void TLiquidazione_app::set_plm_diff(_DescrItem& d)
|
||
{
|
||
int rw = 1;
|
||
|
||
set_row(rw++,""); set_row(rw++,"");
|
||
if (d._flags == TOT_ROW_D)
|
||
set_row(rw++,FR("Totale@25g%r@41g%r@91g%r@107g%r"), &(d._r26), &(d._r27), &(d._r30), &(d._r31));
|
||
else
|
||
set_row(rw++,FR("Totale@25g%r@41g%r@91g%r@107g%r"), &(d._r28), &(d._r29), &(d._r32), &(d._r33));
|
||
set_row(rw++,"");
|
||
}
|
||
|
||
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("Totale 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;
|
||
const real& diffinc_iva = d._r29;
|
||
const real& diffinc_iva_acq = d._r33;
|
||
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 (diffinc_iva != ZERO)
|
||
set_row(rw++,FR("@11gIVA a liquidazione differita incassata@75g%r"), &diffinc_iva);
|
||
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 (diffinc_iva_acq != ZERO)
|
||
set_row(rw++,FR("@11gIVA a liquidazione differita pagata@58g%r"), &diffinc_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 + diffinc_iva - diffinc_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 int 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;
|
||
int i;
|
||
|
||
for(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);
|
||
}
|