Modifiche alla liquidazione per corrispettivi + errori 1211 1212

git-svn-id: svn://10.65.10.50/trunk@352 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1994-10-12 12:01:23 +00:00
parent 35aabacbc8
commit 0b55fb6316
5 changed files with 150 additions and 108 deletions

View File

@ -25,16 +25,14 @@ void CG4300_App::user_create()
for (_nditte->first(); !_nditte->eof(); _nditte->next())
{
TString cod = _nditte_r->get("CODDITTA");
TString vers = _nditte_r->get("FREQVIVA");
_n_ditte++;
TToken_string* d = new TToken_string(64);
// add record
(*d) = cod;
d->add(_nditte_r->get("CODDITTA"));
d->add(_nditte_r->get("RAGSOC"));
d->add(vers);
d->add(_nditte_r->get("FREQVIVA"));
_nomiditte.add(d);
}
@ -261,20 +259,20 @@ bool CG4300_App::set_liquidazione()
if (to.empty()) to = "999999";
for (i = 0; i < _nomiditte.items(); i++)
{
TToken_string d = (const char*)((TToken_string&)_nomiditte[i]);
TString cod = d.get(0);
TString vers = d.get(2);
if ((_what == mnt && vers == "T") ||
(_what == quarter && vers == "M"))
continue;
if (atol(cod) >= atol(from) && atol(cod) <= atol(to))
_selected.set(chk++);
TToken_string& d = (TToken_string&) _nomiditte[i];
TString16 cod = d.get(0);
TString16 vers = d.get(2);
if ((_what == mnt && vers == "T") ||
(_what == quarter && vers == "M"))
continue;
if (atol(cod) >= atol(from) && atol(cod) <= atol(to))
_selected.set(chk++);
}
}
switch(k)
{
case DLG_SELECT:
@ -282,69 +280,69 @@ bool CG4300_App::set_liquidazione()
_ditte->destroy(); chk = 0l;
for (i = 0; i < _nomiditte.items(); i++)
{
if (_selected[i]) continue;
TToken_string d((const TToken_string&)_nomiditte[i]);
TString cod = d.get(0);
TString vers = d.get(2);
if ((_what == mnt && vers == "T") ||
(_what == quarter && vers == "M"))
continue;
if (_selected[i]) continue;
TToken_string& d = (TToken_string&) _nomiditte[i];
TString16 cod = d.get(0);
TString16 vers = d.get(2);
if ((_what == mnt && vers == "T") ||
(_what == quarter && vers == "M"))
continue;
_ditte->add(d);
_ditte->add(d);
// check
if (!from.empty() || !to.empty())
{
if (from.empty()) from = "0";
if (to.empty()) to = "999999";
if (atol(cod) >= atol(from) && atol(cod) <= atol(to))
{
_ditte->check(chk);
_selected.set(chk++);
}
}
// check
if (!from.empty() || !to.empty())
{
if (from.empty()) from = "0";
if (to.empty()) to = "999999";
if (atol(cod) >= atol(from) && atol(cod) <= atol(to))
{
_ditte->check(chk);
_selected.set(chk++);
}
}
}
// seleziona e aggiungi alle gia' selezionate
if (_ditte->run() == K_ENTER)
{
cnt = 0;
for (j = 0l; j < _n_ditte; j++)
{
if (_selected[j]) continue;
if (_ditte->checked(cnt++))
selected.set(j);
}
_selected |= selected;
selected.reset();
}
m.field(CG43_FLD_SELECTED).set(format("%ld",(long)_selected.ones()));
break;
case CG43_BUT_ANN:
_selected.reset();
m.field(CG43_FLD_SELECTED).set("0");
break;
case CG43_BUT_CHK:
// seleziona e aggiungi alle gia' selezionate
if (_ditte->run() == K_ENTER)
{
_ditte->destroy();
for (i = 0; i < _nomiditte.items(); i++)
cnt = 0;
for (j = 0l; j < _n_ditte; j++)
{
TToken_string d = (const char*)((TToken_string&)_nomiditte[i]);
_ditte->add(d);
if (_selected[i]) _ditte->check(i);
if (_selected[j]) continue;
if (_ditte->checked(cnt++))
selected.set(j);
}
_ditte->disable_check();
_ditte->run();
_ditte->enable_check();
_selected |= selected;
selected.reset();
}
break;
m.field(CG43_FLD_SELECTED).set(format("%ld",(long)_selected.ones()));
break;
case CG43_BUT_ANN:
_selected.reset();
m.field(CG43_FLD_SELECTED).set("0");
break;
case CG43_BUT_CHK:
{
_ditte->destroy();
for (i = 0; i < _nomiditte.items(); i++)
{
TToken_string d = (const char*)((TToken_string&)_nomiditte[i]);
_ditte->add(d);
if (_selected[i]) _ditte->check(i);
}
}
while (k != K_ENTER && k != K_ESC);
_ditte->disable_check();
_ditte->run();
_ditte->enable_check();
}
break;
}
}
while (k != K_ENTER && k != K_ESC);
return k == K_ENTER;
return k == K_ENTER;
}
int cg4300(int argc, char* argv[])

View File

@ -97,6 +97,18 @@ public: // vedi sopra per le fisime morali
virtual ~_VendItem() {}
};
class _CorrItem : public TObject
{
public: // vedi sopra per le fisime morali
real _totale; // totale vendite per registro
TString _codreg; // codice registro
int _month; // mese
real _aliquota; // aliquota iva
TString _codiva; // codice iva
_CorrItem() : _codreg(5) {}
virtual ~_CorrItem() {}
};
class _DescrItem : public TObject
// Sembra triste e brutto esattamente come i files tabella
// Ma la verita' e' che non e' affatto inefficiente
@ -298,6 +310,8 @@ public:
// minchia di puro suino
void add_vendite (int month, const char* codreg, real& r);
void add_ventilation (real iva, real sum, const char* codiva);
void add_corrisp (int month, const char* codreg, real& r, real& p,
const char * codiva);
// printappings
virtual void set_page(int file, int counter);

View File

@ -87,6 +87,7 @@ bool CG4300_App::update_firm(int month, bool recalc)
(const char*)desatt);
_prind->set_text(buf);
_vend_arr.destroy();
_corr_arr.destroy();
cattivs = "";
@ -261,30 +262,19 @@ void CG4300_App::recalc_att(int month, const char* codatt)
for (; _cur->pos() < items; ++(*_cur))
{
TDate date(_mov_r->get("DATAREG"));
TString reg = _mov_r->get("REG");
TString16 reg = _mov_r->get("REG");
bool isreg = look_reg(_mov_r->get("REG"));
/*
* check register present, rmoviva present and date OK
*/
#ifndef DBG
if (!is_date_ok(date, month) ||
!isreg ||
_reg_r->get("S8") != trueatt ||
!_cur->is_first_match(LF_RMOVIVA))
continue;
#else
bool dok = !is_date_ok(date, month);
bool sreg = !isreg;
bool rs8 = _reg_r->get("S8") != trueatt;
bool cmt = !_cur->is_first_match(LF_RMOVIVA);
const bool dok = !is_date_ok(date, month);
const bool sreg = !isreg;
const bool rs8 = _reg_r->get("S8") != trueatt;
const bool cmt = !_cur->is_first_match(LF_RMOVIVA);
if (dok || sreg || rs8 || cmt) continue;
#endif
/*
* check date se si calcola l'acconto
*/
@ -466,10 +456,12 @@ void CG4300_App::recalc_att(int month, const char* codatt)
else
if (corrisp)
{
real perc = _iva->get_real("R0")/100.00;
lor += imponibile;
lor += imposta;
_pim_r->put("I0",LORDO);
add_corrisp(month, reg, imponibile);
add_corrisp(month, reg, imponibile, perc, codiva);
}
else
{
@ -834,7 +826,3 @@ _DescrItem* CG4300_App::recalc_rimborso(int month, const char* codatts)
return d;
}

View File

@ -95,23 +95,28 @@ void CG4300_App::add_vendite(int month, const char* codreg, real& r)
vi->_totale += r;
}
void CG4300_App::add_corrisp(int month, const char* codreg, real& r)
void CG4300_App::add_corrisp(int month, const char* codreg, real& r,
real& p, const char * codiva)
{
_VendItem* vi = NULL;
_CorrItem* ci = NULL;
const int nitems = _corr_arr.items();
for (int i = 0; i < _vend_arr.items(); i++)
{
vi = (_VendItem*)&_corr_arr[i];
if (vi->_codreg == codreg && vi->_month == month)
break;
}
if (i == _vend_arr.items())
{
_corr_arr.add(vi = new _VendItem);
vi->_codreg = codreg;
vi->_month = month;
}
vi->_totale += r;
for (int i = 0; i < nitems; i++)
{
ci = (_CorrItem*)&_corr_arr[i];
if (ci->_codreg == codreg && ci->_month == month &&
ci->_codiva == codiva)
break;
}
if (i == nitems)
{
_corr_arr.add(ci = new _CorrItem);
ci->_codreg = codreg;
ci->_month = month;
ci->_codiva = codiva;
ci->_aliquota = p;
}
ci->_totale += r;
}
@ -335,13 +340,19 @@ real CG4300_App::credito_prec(int month)
real c(0.0);
// se c'e' un credito nei parametri ditta, si usa quello e vaffanculo
TConfig cnf(CONFIG_DITTA);
// TConfig cnf(CONFIG_DITTA);
c = (const char*)cnf.get("CrIvAp");
if (!c.is_zero()) return c;
// c = (const char*)cnf.get("CrIvAp");
// if (!c.is_zero()) return c;
if (is_first_month(month))
{
{
look_lia();
if (_lia->status() == NOERR)
{
c = _lia->get_real("R0");
if (!c.iszero()) return c;
}
int yr = atoi(_year) - 1;
_lim->zero();
*_lim_anno = yr;

View File

@ -99,6 +99,37 @@ void CG4300_App::describe_plafond(int month, const char* codatt)
// ricalcolo dei corrispettivi
void CG4300_App::recalc_corrispettivi(int month, const char* codatt)
{
if (_corr_arr.items() == 0) return;
// ricalcola (solo per il mese in corso!) operando sull'array
for (int i = 0; i < _corr_arr.items(); i++)
{
_CorrItem* ci = (_CorrItem*)&_corr_arr[i];
if (ci->_month != month)
continue;
real imposta = ci->_totale/(1.00 + ci->_aliquota);
imposta.ceil(ROUND_LIRA);
real imponibile = ci->_totale - imposta;
// aggiusto l'IVA vendite nei plm
look_plm(month, codatt);
real ive = _plm->get_real("R0");
ive += imposta;
_plm->put("R0",ive);
_plm->rewrite();
// Aggiorno i luridi pim
look_pim(month, codatt, ci->_codreg, "0", ci->_codiva, TRUE);
imponibile += _pim->get_real("R0");
imposta += _pim->get_real("R1");
_pim->put("R0", imponibile);
_pim->put("R1", imposta);
_pim->zero("R2"); // e' giusto ???? TBI
// segnale per comodita'
_pim->put("B1","X");
_pim->rewrite();
}
}
// ricalcolo della malefica ventilazione