Corretto agiiornamento PLM

git-svn-id: svn://10.65.10.50/trunk@1090 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1995-03-09 12:00:59 +00:00
parent ac7e657bb1
commit e42e6b0018
3 changed files with 47 additions and 75 deletions

@ -553,7 +553,7 @@ int TPrimanota_application::read(TMask& m)
cgs().reset();
if (_iva != nessuna_iva)
if (iva() != nessuna_iva)
{
ivas().reset();
@ -593,7 +593,7 @@ int TPrimanota_application::read(TMask& m)
TImporto import(sezione, im);
import.add_to(riga); // Dare/Avere 101-102
TConto conto; get_conto(r, conto);
TBill conto; get_conto(r, conto);
riga.add(conto.string(0x3)); // Conto 103-107
_saldi.aggiorna(conto, im, sezione, FALSE);
@ -606,6 +606,9 @@ int TPrimanota_application::read(TMask& m)
riga.add(r.get("NUMGIO"));
const char tipo = r.get_char("ROWTYPE");
riga.add(tipo); // Tipo di riga 115
if (iva() == nessuna_iva && tipo > ' ')
error_box("Riga %d con tipo incompatibile con un movimento puramente contabile", i+1);
cgs().row(i) = riga;
disable_cgs_cells(i, tipo);
@ -691,9 +694,9 @@ void TPrimanota_application::mask2rel(const TMask& m)
TToken_string& row = (TToken_string&)rows[i];
TImporto n; n = row;
const TConto conto(row, 2, 0x3);
const TBill conto(row, 2, 0x3);
_saldi.aggiorna(conto, n.valore(), n.sezione(), TRUE);
TRectype &r = _rel->cg(i);
r.zero();
@ -718,6 +721,7 @@ void TPrimanota_application::mask2rel(const TMask& m)
r.put("ROWTYPE", row.get()); // Tipo riga
}
}
if (_iva == nessuna_iva) return;
if (causale().corrispettivi())
@ -766,9 +770,9 @@ void TPrimanota_application::mask2rel(const TMask& m)
TRectype &r = _rel->iva(i);
r.zero();
r.put("ANNOES", annoes);
r.put("ANNOES", annoes); // Anno d'esercizio della testata (che ca$$ata!)
r.put("NUMREG", numreg);
r.put("INTRA", intra); // Causale intra
r.put("INTRA", intra); // Causale intra (che ca$$ata!)
r.put("NUMRIG", i+1);
real imponibile(row.get(0));
@ -792,6 +796,29 @@ void TPrimanota_application::mask2rel(const TMask& m)
}
void TPrimanota_application::check_saldi()
{
TString_array& rows = cgs().rows_array();
const int anno = _rel->lfile().get_int("ANNOES");
for (int i = 0; i < rows.items(); i++)
{
TToken_string& row = (TToken_string&)rows[i];
TBill conto(row, 2, 0x3);
conto.find();
const char sez = conto.sezione();
if (sez > ' ')
{
const TConto* c = _saldi.find(conto, anno);
if (c && !c->saldo_finale().is_zero() && c->saldo_finale().sezione() != sez)
warning_box("Il conto della riga %i ha un saldo finale in %s, "
"contrariamente a quanto indicato sul piano dei conti",
i+1, sez == 'A' ? "dare" : "avere");
}
}
}
int TPrimanota_application::write(const TMask& m)
{
const long numreg = m.get_long(F_NUMREG);
@ -802,6 +829,7 @@ int TPrimanota_application::write(const TMask& m)
if (err == NOERR)
{
_saldi.registra();
check_saldi();
if (iva() != nessuna_iva)
{
@ -826,7 +854,10 @@ int TPrimanota_application::rewrite(const TMask& m)
mask2rel(m);
const int err = _rel->rewrite(TRUE);
if (err == NOERR)
{
_saldi.registra();
check_saldi();
}
if (gestione_saldaconto() && causale().saldaconto())
write_scadenze(m);
return err;
@ -837,7 +868,10 @@ bool TPrimanota_application::remove()
{
const bool ok = TRelation_application::remove();
if (ok)
{
_saldi.registra();
check_saldi();
}
// TBI eliminazione partita
return ok;
}
@ -994,12 +1028,13 @@ void TPrimanota_application::genera_incasso(const char* causimm)
for (int r = 0; r < i; r++)
{
const TRectype& rec = inc.cg(r);
TConto c; get_conto(rec, c);
TBill c; get_conto(rec, c);
const real im(rec.get("IMPORTO"));
const char sezione = rec.get_char("SEZIONE");
_saldi.aggiorna(c, im, sezione, TRUE);
}
_saldi.registra();
check_saldi();
}
}
}

@ -280,9 +280,9 @@ int TMovimentoPN::registra(bool re, bool force)
plm.setkey(1);
for (int a = 1; a <= att; a++)
{
TString16 chiave;
chiave << annoiva << registro.attivita() << a
<< format("%02d", date2liq(datareg));
TString16 chiave;
TString16 attivita(registro.attivita()); attivita.right_just(5, '0');
chiave << annoiva << attivita << a << format("%02d", date2liq(datareg));
plm.put("CODTAB", chiave);
if (plm.read() == NOERR)
{

@ -167,21 +167,19 @@ bool TRegistro::read_att()
bool TRegistro::agenzia_viaggi()
{
bool av = FALSE;
if (iva() == iva_vendite && read_att())
if (iva() == iva_vendite)
av = _att.get_bool("REG74TER");
return av;
}
const TString& TRegistro::tipo_attivita()
{
read_att();
return _att.get("TIPOATT");
}
const real& TRegistro::prorata()
{
read_att();
return _prorata;
}
@ -396,6 +394,7 @@ bool TCausale::ok() const
return TRUE;
}
char TCausale::sezione(int riga) const
{
const TRectype& r = row(riga);
@ -494,65 +493,3 @@ bool TCodiceIVA::read(const char* cod)
}
///////////////////////////////////////////////////////////
// Importo
///////////////////////////////////////////////////////////
const TImporto& TImporto::add_to(TToken_string& s) const
{
const bool dare = sezione() == 'D';
const char* v = valore().string();
s.add(dare ? v : "", 0);
s.add(dare ? "" : v, 1);
return *this;
}
// Cerified 99%
// Ambigous section for ZERO
const TImporto& TImporto::operator =(TToken_string& sv)
{
_valore = real(sv.get(0));
if (_valore == ZERO)
{
_valore = real(sv.get());
_sezione = 'A';
}
else
_sezione = 'D';
return *this;
}
const TImporto& TImporto::set(char s, const real& v)
{
CHECKD(s == 'D' || s == 'A', "Sezione errata per importo: codice ", (int)s);
_sezione = s; _valore = v;
return *this;
}
const TImporto& TImporto::operator += (const TImporto& i)
{
if (_sezione == i._sezione)
_valore += i._valore;
else
_valore -= i._valore;
return *this;
}
const TImporto& TImporto::operator -= (const TImporto& i)
{
if (_sezione == i._sezione)
_valore -= i._valore;
else
_valore += i._valore;
return *this;
}
const TImporto& TImporto::swap_section()
{
_sezione = (_sezione == 'D') ? 'A' : 'D';
return *this;
}