ec024943ae
git-svn-id: svn://10.65.10.50/branches/R_10_00@23020 c028cbd2-c16b-5b4b-a496-9718f37d4682
800 lines
22 KiB
C++
Executable File
800 lines
22 KiB
C++
Executable File
// cg4305: liquidazione IVA
|
||
// funzionalita' accessorie (calcolo acconto, estrazione deleghe)
|
||
|
||
#include <currency.h>
|
||
#include <defmask.h>
|
||
#include <recarray.h>
|
||
#include <progind.h>
|
||
#include <prefix.h>
|
||
#include <sheet.h>
|
||
#include <utility.h>
|
||
#include <config.h>
|
||
#include <righef24.h>
|
||
#include <modaut.h>
|
||
|
||
#include "cg4300.h"
|
||
#include "cg4300b.h"
|
||
#include "cg4300c.h"
|
||
#include "cg4800b.h"
|
||
|
||
/*
|
||
|
||
// -------------------------------------------------- estrazione deleghe
|
||
bool TLiquidazione_app::set_deleghe()
|
||
{
|
||
TMask m("cg4300b.msk");
|
||
m.field(FLD_CGB_YEAR).set_handler(ch_year_handler);
|
||
|
||
m.field(FLD_CGB_YEAR).set(_year);
|
||
m.field(CHK_CGB_PRINT).set(_isprint ? "X" : "");
|
||
|
||
int k = 0;
|
||
long j;
|
||
_calcall = FALSE;
|
||
|
||
for (;;)
|
||
{
|
||
if (k == K_ESC || k == K_QUIT || k == K_ENTER)
|
||
break;
|
||
|
||
k = m.run();
|
||
|
||
_isprint = m.get_bool(CHK_CGB_PRINT);
|
||
|
||
switch (k)
|
||
{
|
||
case DLG_SELECT:
|
||
|
||
_ditte->run();
|
||
for (j = 0l; j < _ditte->items(); j++)
|
||
if (_ditte->checked(j)) _selected.set(j);
|
||
break;
|
||
|
||
case BUT_CGB_ALL:
|
||
|
||
_ditte->check(-1);
|
||
for (j = 0l; j < _ditte->items(); j++)
|
||
if (_ditte->checked(j) && !_ditte->row_disabled(j))
|
||
_selected.set(j);
|
||
_calcall = TRUE;
|
||
k = K_ENTER;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (k == K_ENTER)
|
||
{
|
||
_year = m.get(FLD_CGB_YEAR);
|
||
_month = atoi(m.get(FLD_CGB_MONTH));
|
||
}
|
||
|
||
return k == K_ENTER;
|
||
}
|
||
|
||
bool TLiquidazione_app::extract_deleghe()
|
||
{
|
||
TString buf(256); TArray desc;
|
||
_prind = new TProgind(_calcall ? _n_ditte : _selected.ones(),
|
||
TR(" Estrazione deleghe \n"
|
||
" preparazione archivi \n "
|
||
" \n "),
|
||
TRUE,TRUE);
|
||
|
||
if (_ver->read(atoi(_year),(_month > 12) ? 12 : _month) != NOERR)
|
||
warning_box(FR("Errore %d in lettura tabella versamenti ed interessi."),_ver->status());
|
||
for (int l = 0; l < _ditte->items(); l++)
|
||
{
|
||
if (_prind->iscancelled())
|
||
break;
|
||
|
||
if (!(_calcall || _selected[l]) || _ditte->row_disabled(l))
|
||
continue;
|
||
|
||
const long ditta = _ditte->row(l).get_long(1);
|
||
TApplication::set_firm(ditta);
|
||
TIva_round ir; ir.set_default_iva_mode(atoi(_year), _month > 12, ditta);
|
||
|
||
_nditte->curr().zero();
|
||
_nditte->curr().put("CODDITTA", ditta);
|
||
_nditte->read();
|
||
|
||
// must succeed
|
||
look_lia();
|
||
_freqviva = _lia->get("S7");
|
||
|
||
buf.format(FR("Estrazione deleghe (%d):\nditta %s\n "),
|
||
_month, (const char*)_nditte_r->get("RAGSOC"));
|
||
_prind->set_text(buf);
|
||
|
||
if (is_month_ok_strict(_month) || _month == 13)
|
||
{
|
||
const bool mens = _freqviva == "M";
|
||
_isbenzinaro = _nditte->curr(LF_ATTIV).get_bool("ART74_4");
|
||
_isriepilogo = _month == 13;
|
||
_isendliq = _isannual || _isriepilogo;
|
||
if (mens || _isbenzinaro || _month!=12)
|
||
extract_delega(_month, desc);
|
||
}
|
||
_prind->addstatus(1);
|
||
}
|
||
|
||
TApplication::set_firm(__firm);
|
||
delete _prind;
|
||
|
||
if (_isprint)
|
||
{
|
||
_DescrItem* ddeb = NULL;
|
||
_DescrItem* dcrd = NULL;
|
||
|
||
// scorri desc e prepara descritems
|
||
for (int i = 0; i < desc.items(); i++)
|
||
{
|
||
TToken_string& tt = (TToken_string&)desc[i];
|
||
|
||
real tp(tt.get(3));
|
||
if (tp.sign() > 0)
|
||
{
|
||
if (ddeb == NULL)
|
||
{
|
||
ddeb = new _DescrItem(DELDEB);
|
||
ddeb->_f0 = _month;
|
||
}
|
||
ddeb->_arr.add(tt);
|
||
}
|
||
else
|
||
{
|
||
if (dcrd == NULL)
|
||
{
|
||
dcrd = new _DescrItem(DELCRED);
|
||
dcrd->_f0 = _month;
|
||
}
|
||
dcrd->_arr.add(tt);
|
||
}
|
||
}
|
||
if (dcrd != NULL) _descr_arr.add(dcrd);
|
||
if (ddeb != NULL) _descr_arr.add(ddeb);
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
bool TLiquidazione_app::extract_delega(int month, TArray& desc)
|
||
{
|
||
const bool has_f24 = main_app().has_module(GVAUT);
|
||
TToken_string* tt = NULL;
|
||
bool versare = FALSE;
|
||
bool skip_print = FALSE;
|
||
|
||
if (look_lim(month))
|
||
{
|
||
real topay = result_liq(month); // TBC non si puo' fa' accussi'!!!!! pena il casino!
|
||
if (month == 12)
|
||
{
|
||
if (topay > _ver->get(I_ANNUALE))
|
||
versare = TRUE;
|
||
}
|
||
else if (topay > _ver->get(I_PERIODICO))
|
||
versare = TRUE;
|
||
|
||
real intr = _lim->get_real("R14");
|
||
topay += intr; // lo vogliono registrato con interessi
|
||
real nrnd = topay;
|
||
round_imposta(topay); // importo totale del versamento arrotondato
|
||
|
||
bool wasdel = look_del(month, 1);
|
||
|
||
//la stampa deve essere fatta sia se a credito che a debito
|
||
if (!topay.is_zero())
|
||
{
|
||
tt = new TToken_string(80);
|
||
tt->add(_nditte->curr().get("CODDITTA"));
|
||
tt->add(_nditte->curr().get("RAGSOC"));
|
||
tt->add(_freqviva);
|
||
tt->add(topay.string());
|
||
tt->add("");
|
||
}
|
||
|
||
if (versare)
|
||
{
|
||
look_del(month, 1, TRUE); //ci mette abi, cab o con
|
||
//che legge dall'anagrafica!!!
|
||
bool stampato = _del->get_bool("B0");
|
||
if (stampato) //se esiste e stampato si richiede conferma aggiornamento
|
||
{
|
||
if (topay != _del->get_real("R0"))
|
||
skip_print = !video_conferma(topay, intr, nrnd); // se non conferma o annulla, salta il tabulato
|
||
else
|
||
skip_print = true; // Se l'importo e' lo stesso e la delega era gia' stampata, salta il tabulato
|
||
}
|
||
else //aggiorna importo versamento
|
||
{
|
||
_del->put("R0",topay);
|
||
_del->put("R1",intr);
|
||
_del->put("R2",nrnd); // non arrotondato, per calcolo risultato a debito/cr
|
||
_del->rewrite();
|
||
}
|
||
|
||
if (has_f24)
|
||
{
|
||
TLocalisamfile f24(LF_RIGHEF24);
|
||
TTable trib("%TRB");
|
||
long progr = 0L;
|
||
TString descr("IVA annuale");
|
||
const bool mensile = _freqviva == "M";
|
||
const int codtrib = mensile ? 6000 + month : 6031 + (month / 3);
|
||
|
||
TDate scad(16, (mensile ? month : ((month + 2) / 3) * 3), atoi(_year));
|
||
const long codditta = _nditte->lfile().get_long("CODDITTA");
|
||
|
||
if (month < 13)
|
||
scad.addmonth(mensile ? 1 : 2);
|
||
while (scad.wday() > 5)
|
||
++scad;
|
||
|
||
if (month < 13)
|
||
{
|
||
if (mensile)
|
||
descr.format("IVA mese di %s %s", itom(month), (const char *)_year);
|
||
else
|
||
descr.format("IVA %s Trimestre %s", itor(month / 3 + 1), (const char *)_year);
|
||
}
|
||
trib.put("CODTAB", codtrib);
|
||
if (trib.read() != NOERR)
|
||
{
|
||
int g = 0, c = 0;
|
||
long s = 0;
|
||
trib.put("CODTAB", 6001);
|
||
if (trib.read(_isgteq) == NOERR)
|
||
{
|
||
const int cod = trib.get_int("CODTAB");
|
||
if (cod > 6000 && cod < 6036)
|
||
{
|
||
g = trib.get_int("I0");
|
||
c = trib.get_int("I1");
|
||
s = trib.get_long("I2");
|
||
}
|
||
}
|
||
trib.zero();
|
||
trib.put("CODTAB", codtrib);
|
||
TString d(descr);
|
||
trib.put("S0", d.rtrim(5));
|
||
trib.put("S6", "E");
|
||
trib.put("I0", g);
|
||
trib.put("I1", c);
|
||
trib.put("I2", s);
|
||
trib.write();
|
||
}
|
||
f24.setkey(4);
|
||
f24.put(F24_TIPOINTEST, "D");
|
||
f24.put(F24_INTEST, codditta);
|
||
f24.put(F24_ANNO, _year);
|
||
f24.put(F24_TRIBUTO, codtrib);
|
||
if (f24.read() == NOERR)
|
||
{
|
||
if (f24.get(F24_DATAVERS).blank() || skip_print)
|
||
{
|
||
f24.put(F24_IMPORTODEB, topay);
|
||
f24.put(F24_INTIVATRIM, intr);
|
||
f24.put(F24_DATASCAD, scad);
|
||
|
||
const int err = f24.rewrite();
|
||
|
||
if (err != NOERR)
|
||
error_box(FR("Ditta %ld\n%s\nerrore %d"), codditta, (const char *) descr, err);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
f24.setkey(1);
|
||
if (f24.last() == NOERR)
|
||
progr = f24.get_long(F24_PROGR);
|
||
progr++;
|
||
f24.zero();
|
||
f24.put(F24_PROGR, progr);
|
||
|
||
|
||
f24.put(F24_TRIBUTO, codtrib);
|
||
f24.put(F24_TIPOINTEST, "D");
|
||
f24.put(F24_INTEST, codditta);
|
||
f24.put(F24_DESCR, descr);
|
||
f24.put(F24_DATASCAD, scad);
|
||
f24.put(F24_ANNO, _year);
|
||
f24.put(F24_IMPORTODEB, topay);
|
||
f24.put(F24_INTIVATRIM, intr);
|
||
|
||
const int err = f24.write();
|
||
|
||
if (err != NOERR)
|
||
error_box(FR("Ditta %ld\n%s\nerrore %d"), codditta, (const char *) descr, err);
|
||
}
|
||
}
|
||
|
||
tt->add(_del->get("S7"));
|
||
tt->add(_del->get("S8"));
|
||
tt->add(_del->get("S9"));
|
||
tt->add(_nditte->curr().get("PTEL"));
|
||
tt->add(_nditte->curr().get("TEL"));
|
||
TString desc;
|
||
if (_del->get("S9").not_empty())
|
||
{
|
||
const TRectype & ucc = cache().get("%UCC", _del->get("S9"));
|
||
if (!ucc.empty())
|
||
desc = ucc.get("S0");
|
||
}
|
||
if (_del->get("S7").not_empty())
|
||
{
|
||
TString16 cod;
|
||
cod = _del->get("S7");
|
||
if (_del->get("S8").not_empty()) cod << _del->get("S8");
|
||
|
||
const TRectype & ban = cache().get("%BAN", cod);
|
||
|
||
if (!ban.empty())
|
||
desc = ban.get("S0");
|
||
}
|
||
tt->add(desc);
|
||
}
|
||
else if (wasdel) //se esiste e no versare
|
||
{
|
||
bool stampato = _del->get_bool("B0");
|
||
TString buf;
|
||
buf.format(FR("Il versamento relativo alla ditta %ld e' gia' stato stampato. Si desidera eliminare il flag di stampa definitiva?"),_nditte->lfile().get_long("CODDITTA"));
|
||
if (stampato && yesno_box(buf))
|
||
{ // Se la delega e' gia' stampata in definitva, chiede se deve eliminare il flag di stampa
|
||
_del->put("B0",FALSE);
|
||
_del->rewrite();
|
||
}
|
||
// Se non e' stampata invece visualizza la delega presente su file e l'importo a credito che ha calcolato
|
||
// chiedendo cosa fare: Registra elimina fisicamente la delega dal file, Annulla lo fa proseguire
|
||
if (!stampato)
|
||
video_conferma(topay, intr, nrnd, TRUE);
|
||
}
|
||
}
|
||
|
||
if (tt != NULL && !skip_print) // Se il tabulato deve essere stampato per questa delega...
|
||
desc.add(tt);
|
||
|
||
return true;
|
||
}
|
||
|
||
bool TLiquidazione_app::video_conferma(const real& newimp, const real& intr,
|
||
const real& narr, bool to_del)
|
||
{
|
||
TMask m("cg4800b");
|
||
|
||
m.set_caption(to_del ? TR("Conferma eliminazione") : TR("Estrazione versamenti")); // Modifica il titolo...
|
||
m.field(F_CODDITTA).set(_nditte->lfile().get("CODDITTA"));
|
||
m.field(F_RAGSOC).set(_nditte->lfile().get("RAGSOC"));
|
||
m.field(F_DATAVER).set(_del->get_date("D0"));
|
||
m.field(F_ABI).set(_del->get("S7"));
|
||
m.field(F_CAB).set(_del->get("S8"));
|
||
m.field(F_CON).set(_del->get("S9"));
|
||
m.field(F_IMPVER).set(_del->get("R0"));
|
||
if (to_del)
|
||
{
|
||
real xr = abs(newimp);
|
||
m.hide(F_NEWIMP);
|
||
m.show(F_NEWIMPCRED);m.disable(F_NEWIMPCRED);
|
||
m.field(F_NEWIMPCRED).set(xr.string());
|
||
}
|
||
else
|
||
m.field(F_NEWIMP).set(newimp.string());
|
||
|
||
KEY k;
|
||
for (bool stop = FALSE; !stop;)
|
||
{
|
||
k = m.run();
|
||
|
||
switch(k)
|
||
{
|
||
case K_SAVE:
|
||
{
|
||
k = yesnocancel_box(to_del ?
|
||
TR("Si desidera veramente confermare l'eliminazione?")
|
||
:
|
||
TR("Delega gia' stampata. Si desidera ugualmente confermare l'aggiornamento?"));
|
||
if (k == K_YES)
|
||
{
|
||
if (to_del)
|
||
_del->remove();
|
||
else
|
||
{
|
||
_del->put("B0", false);
|
||
_del->put("R0",newimp);
|
||
_del->put("R1",intr);
|
||
_del->put("R2",narr);
|
||
_del->rewrite();
|
||
}
|
||
}
|
||
if (k == K_YES || k == K_NO)
|
||
stop = TRUE;
|
||
}
|
||
break;
|
||
case K_ESC:
|
||
//case K_QUIT:
|
||
stop = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
return k == K_YES;
|
||
}
|
||
|
||
*/
|
||
|
||
|
||
// -------------------------------------------- calcolo acconto dicembre
|
||
bool TLiquidazione_app::set_acconto(real& inf, real& ina)
|
||
{
|
||
TMask m("cg4300c");
|
||
|
||
m.set(CHK_CGC_PRINT,"X");
|
||
m.field(FLD_CGC_YEAR).set_handler(ch_year_handler);
|
||
m.field(FLD_CGC_YEAR).set(_year);
|
||
|
||
int k = 0; long j;
|
||
|
||
_calcall = FALSE;
|
||
|
||
for (;;)
|
||
{
|
||
if (k == K_ESC || k == K_ENTER || k == K_QUIT)
|
||
break;
|
||
k = m.run();
|
||
|
||
_year = m.get(FLD_CGC_YEAR);
|
||
_isprint = m.get_bool(CHK_CGC_PRINT);
|
||
_isbase = m.get_bool(CHK_CGC_BASE);
|
||
_basecalc = (tbc)m.get_long(RDB_CGC_BASE);
|
||
|
||
inf = ina = ZERO;
|
||
|
||
switch (k)
|
||
{
|
||
case DLG_SELECT:
|
||
|
||
// scegli ditte
|
||
_ditte->run();
|
||
|
||
for (j = 0l; j < _ditte->items(); j++)
|
||
if (_ditte->checked(j)) _selected.set(j);
|
||
|
||
break;
|
||
case BUT_CGC_ALL:
|
||
_ditte->check(-1);
|
||
for (j = 0l; j < _ditte->items(); j++)
|
||
if (_ditte->checked(j) && !_ditte->row_disabled(j))
|
||
_selected.set(j);
|
||
_calcall = TRUE;
|
||
k = K_ENTER;
|
||
break;
|
||
}
|
||
}
|
||
return k == K_ENTER;
|
||
}
|
||
|
||
bool TLiquidazione_app::recalc_acconti(real& inf, real& ina)
|
||
{
|
||
TString buf(256);
|
||
|
||
bool onemade = FALSE;
|
||
|
||
const long firm = TApplication::get_firm();
|
||
_prind = new TProgind(_n_ditte,
|
||
TR(" Calcolo acconto "
|
||
"\n Preparazione archivi "
|
||
"\n "),
|
||
TRUE,TRUE);
|
||
|
||
if (_ver->read(atoi(_year),(_month > 12) ? 12 : _month) != NOERR)
|
||
warning_box(FR("Errore %d in lettura tabella versamenti ed interessi."),_ver->status());
|
||
for (int l = 0; l < _ditte->items(); l++)
|
||
{
|
||
if (_prind->iscancelled())
|
||
break;
|
||
if ((_calcall || _selected[l]) && !_ditte->row_disabled(l))
|
||
{
|
||
if (onemade == FALSE && _isprint)
|
||
{
|
||
_DescrItem* d = new _DescrItem(ACCHEAD);
|
||
d->_f0 = _basecalc == incorso;
|
||
d->_f1 = _isbase;
|
||
_descr_arr.add(d);
|
||
}
|
||
|
||
_nditte->curr().zero();
|
||
_nditte->curr().put("CODDITTA",_ditte->row(l).get(1));
|
||
_nditte->read();
|
||
|
||
const long ditta = _nditte->curr().get_long("CODDITTA");
|
||
TApplication::set_firm(ditta);
|
||
|
||
TIva_round ir;
|
||
ir.set_default_iva_mode(atoi(_year), _month > 12, ditta);
|
||
|
||
_isbenzinaro = _nditte->curr(LF_ATTIV).get_bool("ART74_4");
|
||
|
||
look_lia();
|
||
_freqviva = _lia->get("S7");
|
||
inf = _lia->get_real("R13");
|
||
ina = _lia->get_real("R14");
|
||
|
||
buf.format(FR("Calcolo acconto:\nditta %s"),
|
||
(const char*)_nditte_r->get("RAGSOC"));
|
||
_prind->set_text(buf);
|
||
recalc_acconto(inf, ina);
|
||
onemade = TRUE;
|
||
}
|
||
_prind->addstatus(1);
|
||
}
|
||
|
||
TApplication::set_firm(firm);
|
||
delete _prind;
|
||
return TRUE;
|
||
}
|
||
|
||
bool TLiquidazione_app::recalc_acconto(real& inf, real& ina)
|
||
{
|
||
real bc = 0.0;
|
||
real acc = 0.0;
|
||
real cre = 0.0;
|
||
real deb = 0.0;
|
||
real iva_ven = 0.0;
|
||
real iva_acq = 0.0;
|
||
real iva_ret = 0.0;
|
||
real iva_rim = 0.0;
|
||
real ult_det = 0.0;
|
||
real iva_pro = 0.0;
|
||
real cre_pre = 0.0;
|
||
real acq_intr = 0.0;
|
||
const bool isdifferita = is_acconto_differito(); // MI3262...
|
||
int error = FALSE;
|
||
|
||
TString16 tipo_acc;
|
||
|
||
// TBI rewrite from scratch
|
||
// this is absolutely fundamental
|
||
if (_basecalc == precedente)
|
||
{
|
||
// determina casistica
|
||
enum { mm, tt, mt, tm, boh } history = boh;
|
||
real divide_by_three = 1.0;
|
||
const char thh = *_freqviva;
|
||
|
||
const TString4 thyear = _year;
|
||
_year.format("%d", atoi(_year)-1);
|
||
|
||
if (!look_lia())
|
||
error = 3;
|
||
else
|
||
{
|
||
char ohh = _lia->get_char("S7");
|
||
|
||
if (ohh == 'M') history = thh == 'M' ? mm : mt;
|
||
if (ohh == 'T') history = thh == 'M' ? tm : tt;
|
||
if (history == boh)
|
||
{
|
||
_year = thyear;
|
||
return FALSE;
|
||
}
|
||
|
||
// casino benzinari
|
||
TString attprev = _nditte->curr().get("CODATTPREV");
|
||
long codd = _nditte->curr().get_long("CODDITTA");
|
||
TString16 key;
|
||
|
||
key.format("%ld|%s", codd, (const char *) attprev);
|
||
|
||
const TRectype & atts = cache().get(LF_ATTIV, key);
|
||
|
||
if (atts.get_bool("ART74_4")) // e' proprio un gran benzinaro
|
||
history = _lia->get_bool("B4") ? mm : tt; // Was CNF_DITTA->GesT74
|
||
|
||
switch (history)
|
||
{
|
||
case mm:
|
||
// base calcolo: 12a anno preced, Rideterminare a seconda dell'acconto
|
||
// versato; ris = 88% del debito (0 se credito)
|
||
if (!look_lim(12)) error = 2;
|
||
else
|
||
{
|
||
bc += _lim->get_real("R0");
|
||
real av = _lim->get_real("R11");
|
||
bc += av;
|
||
}
|
||
break;
|
||
case tt:
|
||
case tm:
|
||
// base calcolo: 13a anno precedente. Rideterm. per eventuale acconto
|
||
if (!look_lim(13)) error = 2; // TBC sara' 13a davvero? Secondo me e' 12
|
||
else
|
||
{
|
||
bc += _lim->get_real("R0");
|
||
real av = _lim->get_real("R11");
|
||
bc += av;
|
||
}
|
||
if (history == tm)
|
||
// tm come tt ma si divide per 3 la base di calcolo prima di calcolare l'88%
|
||
divide_by_three = 3.0;
|
||
break;
|
||
case mt:
|
||
// basecalcolo: 10, 11, 12 anno prec., 10 e 11 se a debito, 12 vedi acconto;
|
||
// sommare e prendi 88% se a debito
|
||
if (!look_lim(10)) error = 2;
|
||
else
|
||
{
|
||
real app = _lim->get_real("R0");
|
||
if (app.sign() > 0) //a debito
|
||
bc += app;
|
||
}
|
||
if (!look_lim(11)) error = 2;
|
||
else
|
||
{
|
||
real app = _lim->get_real("R0");
|
||
if (app.sign() > 0) //a debito
|
||
bc += app;
|
||
}
|
||
if (!look_lim(12)) error = 2;
|
||
else
|
||
{
|
||
bc += _lim->get_real("R0");
|
||
real av = _lim->get_real("R11");
|
||
bc += av;
|
||
}
|
||
break;
|
||
}
|
||
|
||
round_imposta(bc);
|
||
if (bc.sign() > 0) //debito
|
||
{
|
||
acc = ((bc / divide_by_three) * _ver->get(isdifferita ? B_LIQ_DIFF : B_LIQ_NORM))/CENTO;
|
||
acc.round(TCurrency::get_firm_dec());
|
||
}
|
||
|
||
tipo_acc = "S";
|
||
}
|
||
_year = thyear;
|
||
}
|
||
else
|
||
if (_basecalc == incorso)
|
||
{
|
||
// that's pazzesc but as it turns out there's no better way
|
||
_comp_acconto = TRUE;
|
||
// force recalc of current month
|
||
_recalc = one;
|
||
int need_refresh = FALSE;
|
||
for (int mese = 1; mese < _month; mese++)
|
||
if (is_month_ok_strict(mese) && (!look_lim(mese) || !_lim->get_bool("B0")))
|
||
{
|
||
need_refresh = TRUE;
|
||
break;
|
||
}
|
||
if (need_refresh && yesno_box(FR("Alcuni mesi precedenti non risultano ricalcolati:\n"
|
||
"<EFBFBD> consigliabile il ricalcolo. Si desidera eseguirlo?")))
|
||
_recalc = ever;
|
||
|
||
for (int m = 1; m <= _month; m++)
|
||
if (is_month_plain(m) || _recalc == ever)
|
||
{
|
||
if (_prind->iscancelled())
|
||
break;
|
||
update_firm(m);
|
||
}
|
||
|
||
// calcola l'acconto
|
||
if (look_lim(12)) //posiziona anche la tabella lam
|
||
{
|
||
cre = _lim->get_real("R12");
|
||
cre -= _lim->get_real("R19");
|
||
|
||
deb = _lim->get_real("R13") + inf + ina;
|
||
deb -= _lim->get_real("R18") + _lim->get_real("R1"); // CM600446
|
||
|
||
if (_lim->get_real("R17") > ZERO)
|
||
deb -= _lim->get_real("R17");
|
||
else
|
||
cre += _lim->get_real("R17");
|
||
|
||
bc = deb - cre;
|
||
if (bc.sign() > 0) acc = bc;
|
||
|
||
iva_ven = _lam->get_real("R0"); //iva sulle vendite annotate fino al 20/12
|
||
iva_acq = _lam->get_real("R1"); //iva sugli acquisti annotati fino al 20/12
|
||
cre_pre = _lam->get_real("R2"); //credito precedente
|
||
iva_ret = _lim->get_real("R5"); //rettifica
|
||
iva_rim = _lim->get_real("R1"); //iva chiesta a rimborso
|
||
ult_det = _lim->get_real("R6"); //ulteriori detrazioni
|
||
//iva_pro: //iva relativa alla percentuale di prorata
|
||
TTable plm ("PLM");
|
||
plm.zero();
|
||
plm.put("CODTAB",_year);
|
||
TRectype rec (plm.curr());
|
||
plm.read(_isgteq);
|
||
for (; !plm.eof(); plm.next())
|
||
{
|
||
if (plm.curr() != rec) break;
|
||
iva_pro += plm.get_real("R2");
|
||
}
|
||
//acq_intr
|
||
TTable pom ("POM");
|
||
pom.zero();
|
||
pom.put("CODTAB",_year);
|
||
rec = pom.curr();
|
||
pom.read(_isgteq);
|
||
for (; !pom.eof(); pom.next())
|
||
{
|
||
if (pom.curr() != rec) break;
|
||
acq_intr += pom.get_real("R0");
|
||
}
|
||
tipo_acc = "A"; //flag per dire che si e' utilizzato il metodo analitico
|
||
//stop
|
||
}
|
||
else error = 1;
|
||
|
||
// pulisci il water
|
||
_comp_acconto = FALSE;
|
||
_isprint = FALSE;
|
||
for (int i = 1; i <= _month; i++)
|
||
if (is_month_plain(i))
|
||
update_firm(i);
|
||
|
||
_lim->put("B0","");
|
||
_lim->rewrite();
|
||
if (look_lim(13))
|
||
{
|
||
_lim->put("B0","");
|
||
_lim->rewrite();
|
||
}
|
||
//fine
|
||
_isprint = TRUE;
|
||
}
|
||
|
||
// sbatti l'acconto (e non solo!) in LIA
|
||
if (look_lia())
|
||
{
|
||
if (isdifferita && _basecalc == incorso)
|
||
{
|
||
acc *= real(2.0);
|
||
acc /= real(3.0);
|
||
}
|
||
_lia->put("R4",acc);
|
||
_lia->put("R7",iva_ven);
|
||
_lia->put("R8",iva_acq);
|
||
_lia->put("R9",iva_ret);
|
||
_lia->put("R10",iva_rim);
|
||
_lia->put("R11",ult_det);
|
||
_lia->put("R12",iva_pro);
|
||
TToken_string rr("",'!');
|
||
rr.add(cre_pre.string(),0);
|
||
rr.add(acq_intr.string(),1);
|
||
_lia->put("S1",rr);
|
||
_lia->put("S8",tipo_acc);
|
||
_lia->rewrite();
|
||
}
|
||
|
||
|
||
// per questa volta lasciamo perdere la describe_acconto
|
||
if (_isprint)
|
||
{
|
||
// segnalazioni di errore da gesticolare:
|
||
// error = 0: no error
|
||
// error = 1: manca tabella risultati liquidazione per l'anno indicato
|
||
// error = 2: manca tabella risultati liquidazione per l'anno precedente
|
||
// error = 3: manca tabella dichiarazione annuale per l'anno precedente
|
||
_DescrItem* d = new _DescrItem(ACCONTO);
|
||
d->_r0 = bc;
|
||
d->_r1 = acc;
|
||
d->_r2 = cre;
|
||
d->_r3 = deb;
|
||
d->_f0 = _basecalc == incorso;
|
||
d->_f1 = _isbase;
|
||
d->_f2 = error;
|
||
d->_f3 = isdifferita;
|
||
d->_s0 = _nditte->curr().get("CODDITTA");
|
||
d->_s1 = _nditte->curr().get("RAGSOC");
|
||
|
||
_descr_arr.add(d);
|
||
}
|
||
return TRUE;
|
||
}
|
||
|