Fantastica gestione del saldaconto
git-svn-id: svn://10.65.10.50/trunk@1850 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
25ee972811
commit
d28f09cc52
@ -66,7 +66,7 @@ TMask* TPrimanota_application::load_mask(int n)
|
|||||||
{
|
{
|
||||||
m->set_handler(F_DATADOC, doc_handler);
|
m->set_handler(F_DATADOC, doc_handler);
|
||||||
m->set_handler(F_NUMDOC, doc_handler);
|
m->set_handler(F_NUMDOC, doc_handler);
|
||||||
m->set_handler(F_NUMRIF, numrif_handler);
|
// m->set_handler(F_NUMRIF, numrif_handler);
|
||||||
m->set_handler(F_DATA74TER, data74ter_handler);
|
m->set_handler(F_DATA74TER, data74ter_handler);
|
||||||
m->set_handler(F_PROTIVA, protiva_handler);
|
m->set_handler(F_PROTIVA, protiva_handler);
|
||||||
m->set_handler(F_CLIENTE, clifo_handler);
|
m->set_handler(F_CLIENTE, clifo_handler);
|
||||||
@ -166,7 +166,6 @@ bool TPrimanota_application::user_create()
|
|||||||
_pag = NULL;
|
_pag = NULL;
|
||||||
_pag_rows = NULL;
|
_pag_rows = NULL;
|
||||||
_is_saldaconto = FALSE;
|
_is_saldaconto = FALSE;
|
||||||
_skip_write_scadenze = FALSE;
|
|
||||||
|
|
||||||
load_mask(0);
|
load_mask(0);
|
||||||
|
|
||||||
@ -544,13 +543,6 @@ void TPrimanota_application::init_modify_mode(TMask& m)
|
|||||||
{
|
{
|
||||||
init_mask(m);
|
init_mask(m);
|
||||||
calcola_saldo(); // Verifica eventuali sbilanci contabili
|
calcola_saldo(); // Verifica eventuali sbilanci contabili
|
||||||
|
|
||||||
partite().destroy();
|
|
||||||
if (iva() == nessuna_iva && is_saldaconto())
|
|
||||||
{
|
|
||||||
const long numreg = m.get_long(F_NUMREG);
|
|
||||||
partite().add_numreg(numreg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE)
|
// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE)
|
||||||
@ -567,6 +559,8 @@ int TPrimanota_application::read(TMask& m)
|
|||||||
{
|
{
|
||||||
m.autoload(_rel);
|
m.autoload(_rel);
|
||||||
|
|
||||||
|
const long numreg = _rel->curr().get_long(MOV_NUMREG);
|
||||||
|
|
||||||
cgs().reset();
|
cgs().reset();
|
||||||
|
|
||||||
if (iva() != nessuna_iva)
|
if (iva() != nessuna_iva)
|
||||||
@ -587,7 +581,7 @@ int TPrimanota_application::read(TMask& m)
|
|||||||
_saldi.set_movprovv(_rel->lfile().get_char("PROVVIS") > ' ');
|
_saldi.set_movprovv(_rel->lfile().get_char("PROVVIS") > ' ');
|
||||||
_saldi.set_movap(causale().apertura());
|
_saldi.set_movap(causale().apertura());
|
||||||
_saldi.set_anno_es(m.get_int(F_ANNOES));
|
_saldi.set_anno_es(m.get_int(F_ANNOES));
|
||||||
_saldi.set_num_ulmov(m.get_long(F_NUMREG));
|
_saldi.set_num_ulmov(numreg);
|
||||||
_saldi.set_data_ulmov((TDate)m.get(F_DATAREG));
|
_saldi.set_data_ulmov((TDate)m.get(F_DATAREG));
|
||||||
|
|
||||||
for (int i = 0; i < _rel->cg_items(); i++)
|
for (int i = 0; i < _rel->cg_items(); i++)
|
||||||
@ -615,6 +609,10 @@ int TPrimanota_application::read(TMask& m)
|
|||||||
disable_cgs_cells(i, tipo);
|
disable_cgs_cells(i, tipo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
partite().destroy();
|
||||||
|
if (is_pagamento())
|
||||||
|
partite().add_numreg(numreg);
|
||||||
|
|
||||||
if (_iva == nessuna_iva)
|
if (_iva == nessuna_iva)
|
||||||
return _rel->status();
|
return _rel->status();
|
||||||
|
|
||||||
@ -657,10 +655,10 @@ int TPrimanota_application::read(TMask& m)
|
|||||||
|
|
||||||
calcola_imp(); // Calcola totale imponibile ed imposte
|
calcola_imp(); // Calcola totale imponibile ed imposte
|
||||||
|
|
||||||
if (is_saldaconto() && causale().tipomov() != 2) // Ci sono scadenze
|
const int tm = causale().tipomov();
|
||||||
|
if (tm != 0 && tm != 2) // Ci sono scadenze
|
||||||
{
|
{
|
||||||
const TString16 dt(m.get(F_DATAREG));
|
const TString16 dt(m.get(F_DATAREG));
|
||||||
set_numrif(m.get(F_NUMRIF));
|
|
||||||
set_pagamento(m.get(F_CODPAG), dt);
|
set_pagamento(m.get(F_CODPAG), dt);
|
||||||
if (!read_scadenze(m))
|
if (!read_scadenze(m))
|
||||||
set_scadenze(m);
|
set_scadenze(m);
|
||||||
@ -930,10 +928,20 @@ bool TPrimanota_application::remove()
|
|||||||
_saldi.registra();
|
_saldi.registra();
|
||||||
check_saldi();
|
check_saldi();
|
||||||
|
|
||||||
if (_is_saldaconto && iva() == nessuna_iva)
|
if (_is_saldaconto)
|
||||||
{
|
{
|
||||||
notify_cgline_deletion(0); // Notify deletion of all cg lines
|
if (iva() == nessuna_iva)
|
||||||
_partite.rewrite();
|
{
|
||||||
|
notify_cgline_deletion(0); // Notify deletion of all cg lines
|
||||||
|
partite().rewrite();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TMask& m = curr_mask();
|
||||||
|
m.reset(F_ANNORIF);
|
||||||
|
m.reset(F_NUMRIF);
|
||||||
|
write_scadenze(m);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
|
@ -192,8 +192,8 @@ BEGIN
|
|||||||
DISPLAY "Nome@50" S0
|
DISPLAY "Nome@50" S0
|
||||||
OUTPUT S_VALUTA CODTAB
|
OUTPUT S_VALUTA CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
MESSAGE EMPTY CLEAR,S_CAMBIO
|
MESSAGE EMPTY CLEAR,S_CAMBIO|CLEAR,S_TOTDOCVAL
|
||||||
MESSAGE ENABLE,S_CAMBIO
|
MESSAGE ENABLE,S_CAMBIO|ENABLE,S_TOTDOCVAL
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE S_DATACAMBIO
|
DATE S_DATACAMBIO
|
||||||
@ -231,7 +231,7 @@ BEGIN
|
|||||||
PICTURE "."
|
PICTURE "."
|
||||||
GROUP 5
|
GROUP 5
|
||||||
FIELD TOTDOC
|
FIELD TOTDOC
|
||||||
VALIDATE REQIF_FUNC 1 F_TOTDOCVAL
|
VALIDATE REQIF_FUNC 1 S_TOTDOCVAL
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER S_TOTDOCVAL 15 2
|
NUMBER S_TOTDOCVAL 15 2
|
||||||
|
@ -427,8 +427,8 @@ BEGIN
|
|||||||
OUTPUT S_VALUTA CODTAB
|
OUTPUT S_VALUTA CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
WARNING "Codice valuta assente"
|
WARNING "Codice valuta assente"
|
||||||
MESSAGE EMPTY CLEAR,S_CAMBIO
|
MESSAGE EMPTY CLEAR,S_CAMBIO|CLEAR,S_TOTDOCVAL
|
||||||
MESSAGE ENABLE,S_CAMBIO
|
MESSAGE ENABLE,S_CAMBIO|ENABLE,S_TOTDOCVAL
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE S_DATACAMBIO
|
DATE S_DATACAMBIO
|
||||||
@ -449,9 +449,9 @@ BEGIN
|
|||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER S_CAMBIO 12 5
|
NUMBER S_CAMBIO 15 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 58 12 "Cambio "
|
PROMPT 55 12 "Cambio "
|
||||||
HELP "Cambio della valuta per operazione con l'estero"
|
HELP "Cambio della valuta per operazione con l'estero"
|
||||||
FIELD CAMBIO
|
FIELD CAMBIO
|
||||||
FLAGS "RU"
|
FLAGS "RU"
|
||||||
|
@ -253,13 +253,13 @@ END
|
|||||||
STRING S_CODDESC 5
|
STRING S_CODDESC 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 14 "Descriz. agg. "
|
PROMPT 2 14 "Descriz. agg. "
|
||||||
|
FLAGS "U"
|
||||||
USE %DPN
|
USE %DPN
|
||||||
INPUT CODTAB S_CODDESC
|
INPUT CODTAB S_CODDESC
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT S_CODDESC CODTAB
|
OUTPUT S_CODDESC CODTAB
|
||||||
OUTPUT S_DESCAGG S0
|
OUTPUT S_DESCAGG S0
|
||||||
CHECKTYPE NORMAL
|
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING S_DESCAGG 50
|
STRING S_DESCAGG 50
|
||||||
|
@ -160,14 +160,13 @@ bool TMovimentoPN::controlla_liquidazione(const TDate& data, bool reset) const
|
|||||||
|
|
||||||
int TMovimentoPN::registra(bool re, bool force)
|
int TMovimentoPN::registra(bool re, bool force)
|
||||||
{
|
{
|
||||||
const TRectype& m = lfile().curr();
|
|
||||||
const long numreg = m.get_long("NUMREG");
|
|
||||||
|
|
||||||
int err = re ? TRelation::rewrite(force) : TRelation::write(force);
|
int err = re ? TRelation::rewrite(force) : TRelation::write(force);
|
||||||
|
|
||||||
if (err != NOERR)
|
if (err != NOERR)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
const TRectype& m = curr();
|
||||||
|
const long numreg = m.get_long("NUMREG");
|
||||||
|
|
||||||
if (!re)
|
if (!re)
|
||||||
_cg.renum_key("NUMREG", numreg);
|
_cg.renum_key("NUMREG", numreg);
|
||||||
err = _cg.write(re);
|
err = _cg.write(re);
|
||||||
|
@ -1543,10 +1543,7 @@ bool TPrimanota_application::doc_handler(TMask_field& f, KEY key)
|
|||||||
else if (!app().npart_is_prot())
|
else if (!app().npart_is_prot())
|
||||||
{
|
{
|
||||||
if (m.get(F_NUMRIF).empty())
|
if (m.get(F_NUMRIF).empty())
|
||||||
{
|
|
||||||
m.set(F_NUMRIF, val); // copia numero documento
|
m.set(F_NUMRIF, val); // copia numero documento
|
||||||
app().set_numrif(val);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1835,7 +1832,8 @@ bool TPrimanota_application::totdocval_handler(TMask_field& f, KEY key)
|
|||||||
|
|
||||||
void TPrimanota_application::add_cgs_rit(bool fiscali)
|
void TPrimanota_application::add_cgs_rit(bool fiscali)
|
||||||
{
|
{
|
||||||
const real imp(curr_mask().get(fiscali ? F_RITFIS : F_RITSOC));
|
TMask& m = curr_mask();
|
||||||
|
const real imp(m.get(fiscali ? F_RITFIS : F_RITSOC));
|
||||||
|
|
||||||
const char tipo = fiscali ? 'F' : 'S';
|
const char tipo = fiscali ? 'F' : 'S';
|
||||||
const int pos = type2pos(tipo);
|
const int pos = type2pos(tipo);
|
||||||
@ -1853,13 +1851,13 @@ void TPrimanota_application::add_cgs_rit(bool fiscali)
|
|||||||
else
|
else
|
||||||
set_cgs_imp(pos, real2imp(imp, tipo));
|
set_cgs_imp(pos, real2imp(imp, tipo));
|
||||||
}
|
}
|
||||||
|
m.field(F_CODIVA).on_hit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handler of the F_PROTIVA
|
// Handler of the F_PROTIVA
|
||||||
bool TPrimanota_application::protiva_handler(TMask_field& f, KEY key)
|
bool TPrimanota_application::protiva_handler(TMask_field& f, KEY key)
|
||||||
{
|
{
|
||||||
bool ok = TRUE;
|
bool ok = TRUE;
|
||||||
const TString16 piva(f.get());
|
|
||||||
if (key == K_ENTER && f.dirty() && f.mask().mode() == MODE_INS)
|
if (key == K_ENTER && f.dirty() && f.mask().mode() == MODE_INS)
|
||||||
{
|
{
|
||||||
const long protiva = atol(f.get());
|
const long protiva = atol(f.get());
|
||||||
@ -1873,10 +1871,11 @@ bool TPrimanota_application::protiva_handler(TMask_field& f, KEY key)
|
|||||||
{
|
{
|
||||||
if (app().npart_is_prot() && f.mask().is_running())
|
if (app().npart_is_prot() && f.mask().is_running())
|
||||||
{
|
{
|
||||||
|
const TString16 piva(f.get());
|
||||||
f.mask().set(F_NUMRIF, piva);
|
f.mask().set(F_NUMRIF, piva);
|
||||||
app().set_numrif(piva);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
cg/cg2102.h
12
cg/cg2102.h
@ -53,25 +53,24 @@ class TPrimanota_application : public TRelation_application
|
|||||||
|
|
||||||
bool _skip_giornale_check; // Ignora controllo data stampa libro giornale
|
bool _skip_giornale_check; // Ignora controllo data stampa libro giornale
|
||||||
bool _skip_bollato_check; // Ignora controllo data stampa bollato
|
bool _skip_bollato_check; // Ignora controllo data stampa bollato
|
||||||
bool _skip_write_scadenze; // Cancellato saldaconto, non riscrivere
|
|
||||||
|
|
||||||
bool _savenew; // Registra e nuovo
|
bool _savenew; // Registra e nuovo
|
||||||
short _firstfocus; // Primo campo della maschera a prendere il focus
|
short _firstfocus; // Primo campo della maschera a prendere il focus
|
||||||
|
|
||||||
bool _sheet_shown; // Lo sheet IVA e' gia' stato visualizzato una volta?
|
bool _sheet_shown; // Lo sheet e' gia' stato visualizzato una volta?
|
||||||
|
|
||||||
bool _is_saldaconto; // saldaconto si/no (vede parametri e causale)
|
bool _is_saldaconto; // saldaconto si/no (vede parametri e causale)
|
||||||
|
|
||||||
TSaldo_agg _saldi; // Saldi da aggiornare
|
TSaldo_agg _saldi; // Saldi da aggiornare
|
||||||
TPartite_array _partite; // Partite coinvolte
|
TPartite_array _partite; // Partite coinvolte
|
||||||
|
|
||||||
TMask* _msk[4]; // Maschere di query, cg, iva
|
TMask* _msk[4]; // Maschere di query, cg, iva, occasionali
|
||||||
long _lastreg; // Numero ultima registrazione
|
long _lastreg; // Numero ultima registrazione
|
||||||
int _mode; // Modo maschera corrente
|
int _mode; // Modo maschera corrente
|
||||||
|
|
||||||
TBill _conto_ricavo; // Conto di ricavo del clifo
|
TBill _conto_ricavo; // Conto di ricavo del clifo
|
||||||
|
|
||||||
TString_array _pag_rows;
|
TString_array _pag_rows;
|
||||||
TString16 _numrif; // memorizza numrif per undo
|
|
||||||
|
|
||||||
static bool showpartite_handler(TMask_field& f, KEY k);
|
static bool showpartite_handler(TMask_field& f, KEY k);
|
||||||
static bool speserimb_handler(TMask_field& f, KEY k);
|
static bool speserimb_handler(TMask_field& f, KEY k);
|
||||||
@ -88,7 +87,7 @@ class TPrimanota_application : public TRelation_application
|
|||||||
static bool datacomp_handler(TMask_field& f, KEY key);
|
static bool datacomp_handler(TMask_field& f, KEY key);
|
||||||
static bool data74ter_handler(TMask_field& f, KEY key);
|
static bool data74ter_handler(TMask_field& f, KEY key);
|
||||||
static bool doc_handler(TMask_field& f, KEY key);
|
static bool doc_handler(TMask_field& f, KEY key);
|
||||||
static bool numrif_handler(TMask_field& f, KEY key);
|
// static bool numrif_handler(TMask_field& f, KEY key);
|
||||||
static bool protiva_handler(TMask_field& f, KEY key);
|
static bool protiva_handler(TMask_field& f, KEY key);
|
||||||
static bool clifo_handler(TMask_field& f, KEY key);
|
static bool clifo_handler(TMask_field& f, KEY key);
|
||||||
static bool totdoc_handler(TMask_field& f, KEY key);
|
static bool totdoc_handler(TMask_field& f, KEY key);
|
||||||
@ -123,9 +122,6 @@ class TPrimanota_application : public TRelation_application
|
|||||||
|
|
||||||
void reset_sheet_row(TSheet_field& s, int n);
|
void reset_sheet_row(TSheet_field& s, int n);
|
||||||
|
|
||||||
void set_numrif(const char* s) { _numrif = s; }
|
|
||||||
const char* get_numrif() { return _numrif; }
|
|
||||||
|
|
||||||
protected: // TApplication
|
protected: // TApplication
|
||||||
virtual void on_firm_change();
|
virtual void on_firm_change();
|
||||||
virtual void on_config_change();
|
virtual void on_config_change();
|
||||||
|
362
cg/cg2104.cpp
362
cg/cg2104.cpp
@ -178,7 +178,7 @@ bool TPrimanota_application::nrate_handler(TMask_field& f, KEY key)
|
|||||||
if (app().pagamento() != NULL)
|
if (app().pagamento() != NULL)
|
||||||
{
|
{
|
||||||
app().pagamento()->set_numero_rate(atoi(f.get()), /*TBI*/-1);
|
app().pagamento()->set_numero_rate(atoi(f.get()), /*TBI*/-1);
|
||||||
if (app().pagamento()->dirty())
|
if (app().pagamento()->dirty())
|
||||||
app().pagamento()->set_sheet(ps);
|
app().pagamento()->set_sheet(ps);
|
||||||
}
|
}
|
||||||
else f.set("");
|
else f.set("");
|
||||||
@ -187,89 +187,6 @@ bool TPrimanota_application::nrate_handler(TMask_field& f, KEY key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TPrimanota_application::numrif_handler(TMask_field& f, KEY key)
|
|
||||||
{
|
|
||||||
if (key == K_TAB && f.mask().is_running() && f.focusdirty())
|
|
||||||
{
|
|
||||||
TMask& m = f.mask();
|
|
||||||
const TString& val = f.get();
|
|
||||||
|
|
||||||
// questo evita due handlerate visto che e' in fondo alla pagina
|
|
||||||
if (val == app().get_numrif()) return TRUE;
|
|
||||||
|
|
||||||
// se cambiato chiedo conferma:
|
|
||||||
// se svuotato, azzero il cazzoconto
|
|
||||||
if (val.empty())
|
|
||||||
{
|
|
||||||
if (yesno_box("Si desidera l'azzeramento delle scadenze?"))
|
|
||||||
{
|
|
||||||
// sbraga giu' il saldaconto: andra' tutto kancellato
|
|
||||||
// se c'era
|
|
||||||
app().remove_scadenze(f.mask(), app().get_numrif());
|
|
||||||
f.set(""); // non dovrebbe servire, ma...
|
|
||||||
f.mask().disable_page(2);
|
|
||||||
}
|
|
||||||
else { f.set(app().get_numrif()); }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TString16 oldnr = app().get_numrif();
|
|
||||||
|
|
||||||
if (oldnr.empty())
|
|
||||||
{
|
|
||||||
// se numrif era vuoto, mi limito a costruire il nuovo saldaminchia
|
|
||||||
// con questo numrif
|
|
||||||
if (yesno_box("Si desidera la ridefinizione delle scadenze?"))
|
|
||||||
{
|
|
||||||
// deve esserci la data rif.
|
|
||||||
if (f.mask().get(F_ANNORIF).empty())
|
|
||||||
{
|
|
||||||
error_box("Non e' indicato l'anno riferimento partita");
|
|
||||||
f.set("");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
// lo ridefinisco da capo
|
|
||||||
// con il nuovo porcodio, riabilitando se
|
|
||||||
// non c'era
|
|
||||||
// deve essere indicato il pagamento, se no guai
|
|
||||||
if (app().pagamento() == NULL)
|
|
||||||
{
|
|
||||||
TString16 codpag = f.mask().get(F_CODPAG);
|
|
||||||
if (codpag.empty())
|
|
||||||
{
|
|
||||||
error_box("Deve essere specificato il codice pagamento");
|
|
||||||
f.set("");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
f.mask().enable_page(2);
|
|
||||||
app().set_pagamento(codpag, f.mask().get(F_DATADOC));
|
|
||||||
app().set_scadenze(f.mask());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
app().reset_pagamento();
|
|
||||||
app().set_scadenze(m);
|
|
||||||
f.mask().enable_page(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else { f.set(""); }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// trattasi di variazione: devo chiedere se vuole spostare i
|
|
||||||
// pagamenti, e se non vuole li lascio con codice 9999 (??? TBC)
|
|
||||||
if (yesno_box("Confermare la modifica numero riferimento partita"))
|
|
||||||
app().renumber_partita(f.mask(), oldnr, f.get());
|
|
||||||
else f.set(app().get_numrif());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
app().set_numrif(f.get());
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TPrimanota_application::reset_pagamento()
|
void TPrimanota_application::reset_pagamento()
|
||||||
{
|
{
|
||||||
if (_pag != NULL)
|
if (_pag != NULL)
|
||||||
@ -279,49 +196,6 @@ void TPrimanota_application::reset_pagamento()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::renumber_partita(TMask& m, const char* oldp, const char* newp)
|
|
||||||
{
|
|
||||||
const TRectype& testa = _rel->lfile().curr();
|
|
||||||
const long nreg = testa.get_long("NUMREG");
|
|
||||||
const TString16 ndoc(testa.get("NUMDOC"));
|
|
||||||
const int tmov = testa.get_int("TIPOMOV");
|
|
||||||
const TDate ddoc(testa.get_date("DATADOC"));
|
|
||||||
const TDate dreg(testa.get_date("DATAREG"));
|
|
||||||
const TString16 reg (testa.get("REG"));
|
|
||||||
const long protiva = testa.get_long("PROTIVA");
|
|
||||||
const TString16 codcaus(testa.get("CODCAUS"));
|
|
||||||
const TString16 codval (testa.get("CODVAL"));
|
|
||||||
const real cambio(testa.get("CAMBIO"));
|
|
||||||
|
|
||||||
const TString16 numpart(m.get(F_NUMRIF));
|
|
||||||
const int anno = m.get_int(F_ANNORIF);
|
|
||||||
|
|
||||||
const TRectype& prima = _rel->cg(0);
|
|
||||||
const char sezione = prima.get_char("SEZIONE"); // Dare/Avere
|
|
||||||
const char tipocf = prima.get_char("TIPOC"); // Cliente || Fornitore || Uncazzo
|
|
||||||
const int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 : prima.get_int("GRUPPO");
|
|
||||||
const int conto = (tipocf == 'C' || tipocf == 'F') ? 0 : prima.get_int("CONTO");
|
|
||||||
const long sottoconto = prima.get_long("SOTTOCONTO");
|
|
||||||
const int nriga = 1;
|
|
||||||
const int numrig = 1;
|
|
||||||
|
|
||||||
TBill clifo(gruppo, conto, sottoconto, tipocf);
|
|
||||||
TPartita oldpart(clifo, anno, oldp);
|
|
||||||
TPartita newpart(clifo, anno, newp);
|
|
||||||
|
|
||||||
int npart = oldpart.prima_fattura(nreg);
|
|
||||||
|
|
||||||
if (oldpart.primo_pagamento() != -1)
|
|
||||||
{
|
|
||||||
if (!yesno_box("Si desidera spostare i pagamenti sulla nuova partita?"))
|
|
||||||
oldpart.scollega_pagamenti(npart);
|
|
||||||
}
|
|
||||||
oldpart.riassegna_riga(npart, newpart, TRUE);
|
|
||||||
|
|
||||||
oldpart.rewrite();
|
|
||||||
newpart.rewrite();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TPrimanota_application::set_pagamento(const char* c, const char* d)
|
void TPrimanota_application::set_pagamento(const char* c, const char* d)
|
||||||
{
|
{
|
||||||
@ -336,12 +210,6 @@ void TPrimanota_application::set_scadenze(TMask& m)
|
|||||||
const real spese(0.0);
|
const real spese(0.0);
|
||||||
|
|
||||||
TPagamento& pag = *pagamento();
|
TPagamento& pag = *pagamento();
|
||||||
if (pag.is_new())
|
|
||||||
{
|
|
||||||
// m.disable_page(2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else m.enable_page(2);
|
|
||||||
|
|
||||||
m.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
|
m.set(FS_RDIFFER, pag.rate_differenziate() ? "1" : "2");
|
||||||
m.set(FS_NAMEPAG, pag.name());
|
m.set(FS_NAMEPAG, pag.name());
|
||||||
@ -399,20 +267,17 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
const TString16 codval (testa.get("CODVAL"));
|
const TString16 codval (testa.get("CODVAL"));
|
||||||
const real cambio(testa.get("CAMBIO"));
|
const real cambio(testa.get("CAMBIO"));
|
||||||
|
|
||||||
const TString16 numpart(m.get(F_NUMRIF));
|
|
||||||
const int anno = m.get_int(F_ANNORIF);
|
|
||||||
|
|
||||||
const TRectype& prima = _rel->cg(0);
|
const TRectype& prima = _rel->cg(0);
|
||||||
const char sezione = prima.get_char("SEZIONE"); // Dare/Avere
|
const char sezione = prima.get_char("SEZIONE"); // Dare/Avere
|
||||||
const char tipocf = prima.get_char("TIPOC"); // Cliente || Fornitore || Uncazzo
|
|
||||||
const int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 : prima.get_int("GRUPPO");
|
|
||||||
const int conto = (tipocf == 'C' || tipocf == 'F') ? 0 : prima.get_int("CONTO");
|
|
||||||
const long sottoconto = prima.get_long("SOTTOCONTO");
|
|
||||||
const int nriga = 1;
|
const int nriga = 1;
|
||||||
const int numrig = 1;
|
const int numrig = 1;
|
||||||
|
|
||||||
TBill clifo(gruppo, conto, sottoconto, tipocf);
|
TBill clifo; clifo.get(prima);
|
||||||
TPartita part(clifo, anno, numpart);
|
const int anno = m.get_int(F_ANNORIF);
|
||||||
|
const TString16 numpart(m.get(F_NUMRIF));
|
||||||
|
partite().destroy();
|
||||||
|
const TPartita& part = partite().partita(clifo, anno, numpart);
|
||||||
|
|
||||||
int npart = part.prima_fattura(nreg);
|
int npart = part.prima_fattura(nreg);
|
||||||
bool fromscratch = FALSE;
|
bool fromscratch = FALSE;
|
||||||
@ -420,8 +285,8 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
if (npart != -1) // la gh'e'
|
if (npart != -1) // la gh'e'
|
||||||
{
|
{
|
||||||
|
|
||||||
TRiga_partite& partita = part.riga(npart);
|
const TRiga_partite& partita = part.riga(npart);
|
||||||
TRiga_scadenze& primarata = partita.rata(1);
|
const TRiga_scadenze& primarata = partita.rata(1);
|
||||||
|
|
||||||
// se si e' specificato un codice pagamento diverso si rifa' da capo
|
// se si e' specificato un codice pagamento diverso si rifa' da capo
|
||||||
// la follia e' che e' sulle SCADENZE, non sulle partite, naturalmente
|
// la follia e' che e' sulle SCADENZE, non sulle partite, naturalmente
|
||||||
@ -447,17 +312,14 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
pag.zap_rate();
|
pag.zap_rate();
|
||||||
|
|
||||||
for (int i = 1; i <= partita.rate(); i++)
|
for (int i = 1; i <= partita.rate(); i++)
|
||||||
{
|
{
|
||||||
TRiga_scadenze& scadenza = partita.rata(i);
|
const TRiga_scadenze& scadenza = partita.rata(i);
|
||||||
|
real importo = scadenza.get(SCAD_IMPORTO);
|
||||||
real importo = scadenza.get(SCAD_IMPORTO);
|
|
||||||
const TDate scad = scadenza.get(SCAD_DATASCAD);
|
const TDate scad = scadenza.get(SCAD_DATASCAD);
|
||||||
const int tipop = scadenza.get_int(SCAD_TIPOPAG);
|
const int tipop = scadenza.get_int(SCAD_TIPOPAG);
|
||||||
const bool paid = scadenza.get_bool(SCAD_PAGATA);
|
const bool paid = scadenza.get_bool(SCAD_PAGATA);
|
||||||
const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
|
const TString16 ulc = scadenza.get(SCAD_ULTCLASS);
|
||||||
|
|
||||||
pag.set_rata(i-1, importo, scad, tipop, ulc, paid);
|
pag.set_rata(i-1, importo, scad, tipop, ulc, paid);
|
||||||
}
|
}
|
||||||
} //else
|
} //else
|
||||||
@ -475,133 +337,103 @@ bool TPrimanota_application::read_scadenze(TMask& m)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrimanota_application::remove_scadenze(const TMask& m, const char* nr)
|
|
||||||
{
|
|
||||||
TString numrif(nr);
|
|
||||||
if (numrif.empty()) return;
|
|
||||||
|
|
||||||
TRectype& r = _rel->lfile().curr();
|
|
||||||
|
|
||||||
const long nreg = r.get_long("NUMREG");
|
|
||||||
|
|
||||||
// rimuovi se ci sono
|
|
||||||
const char tipocf = _rel->cg(0).get_char("TIPOC"); // Cliente || Fornitore || Uncazzo
|
|
||||||
const int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("GRUPPO");
|
|
||||||
const int conto = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("CONTO");
|
|
||||||
const long sottoconto = _rel->cg(0).get_long("SOTTOCONTO");
|
|
||||||
const int anno = m.get_int(F_ANNORIF);
|
|
||||||
|
|
||||||
TBill clifo(gruppo, conto, sottoconto, tipocf);
|
|
||||||
TPartita part(clifo, anno, numrif);
|
|
||||||
|
|
||||||
if (part.ok())
|
|
||||||
{
|
|
||||||
// check pagamenti effettuati
|
|
||||||
bool nopag = part.primo_pagamento(nreg) == -1;
|
|
||||||
|
|
||||||
if (nopag)
|
|
||||||
{
|
|
||||||
int npart = part.prima_fattura(nreg);
|
|
||||||
part.rimuovi_riga(npart);
|
|
||||||
part.rewrite();
|
|
||||||
_skip_write_scadenze = TRUE;
|
|
||||||
}
|
|
||||||
else warning_box("Esistono pagamenti gia' effettuati: rimozione impossibile");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TPrimanota_application::write_scadenze(const TMask& m)
|
void TPrimanota_application::write_scadenze(const TMask& m)
|
||||||
{
|
{
|
||||||
real imponibile(0.0);
|
|
||||||
real imposta(0.0);
|
|
||||||
real spese(0.0);
|
|
||||||
|
|
||||||
if (_skip_write_scadenze)
|
|
||||||
{
|
|
||||||
_skip_write_scadenze = FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// should never happen but it doesn't hurt
|
|
||||||
CHECK(!_rel->cg(0).empty(), "Missing first line");
|
|
||||||
|
|
||||||
TRectype& r = _rel->lfile().curr();
|
|
||||||
|
|
||||||
const long nreg = r.get_long("NUMREG");
|
|
||||||
const TString16 ndoc(r.get("NUMDOC"));
|
|
||||||
const int tmov = r.get_int("TIPOMOV");
|
|
||||||
const TDate ddoc(r.get_date("DATADOC"));
|
|
||||||
const TDate dreg(r.get_date("DATAREG"));
|
|
||||||
const TString16 reg (r.get("REG"));
|
|
||||||
const TString80 desc(r.get("DESCR"));
|
|
||||||
const long protiva = r.get_long("PROTIVA");
|
|
||||||
const TString16 codcaus(r.get("CODCAUS"));
|
|
||||||
const TString16 codval (r.get("CODVAL"));
|
|
||||||
const real cambio (r.get("CAMBIO"));
|
|
||||||
|
|
||||||
const TString16 numpart = m.get(F_NUMRIF);
|
|
||||||
const int anno = m.get_int(F_ANNORIF);
|
const int anno = m.get_int(F_ANNORIF);
|
||||||
|
const TString16 numpart(m.get(F_NUMRIF));
|
||||||
|
const long nreg = m.get_long(F_NUMREG);
|
||||||
|
|
||||||
CHECK(anno > 1900, "Anno partita non valido");
|
TPartita* newgame = NULL;
|
||||||
|
if (anno > 0 && numpart.not_empty())
|
||||||
char sezione = _rel->cg(0).get_char("SEZIONE"); // Dare/Avere
|
|
||||||
char tipocf = _rel->cg(0).get_char("TIPOC"); // Cliente || Fornitore || Uncazzo
|
|
||||||
int gruppo = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("GRUPPO");
|
|
||||||
int conto = (tipocf == 'C' || tipocf == 'F') ? 0 : _rel->cg(0).get_char("CONTO");
|
|
||||||
long sottoconto = _rel->cg(0).get_long("SOTTOCONTO");
|
|
||||||
|
|
||||||
TBill clifo(gruppo, conto, sottoconto, tipocf);
|
|
||||||
TPartita part(clifo, anno, numpart);
|
|
||||||
|
|
||||||
int numrig = 1; // TBC
|
|
||||||
|
|
||||||
int row = part.prima_fattura(nreg);
|
|
||||||
// TBC controllo aggiunta su partita se ridefinita a culo
|
|
||||||
TRiga_partite& partita = row == -1 ? part.nuova_riga() : part.riga(row);
|
|
||||||
|
|
||||||
TPagamento& pag = *pagamento();
|
|
||||||
|
|
||||||
// put data on partita
|
|
||||||
partita.put(PART_TIPOMOV, tmov);
|
|
||||||
partita.put(PART_NREG, nreg);
|
|
||||||
partita.put(PART_DATAREG, dreg);
|
|
||||||
partita.put(PART_DATADOC, ddoc);
|
|
||||||
partita.put(PART_NUMDOC, ndoc);
|
|
||||||
partita.put(PART_REG, reg);
|
|
||||||
partita.put(PART_DESCR, desc);
|
|
||||||
partita.put(PART_PROTIVA, protiva);
|
|
||||||
partita.put(PART_CODCAUS, codcaus);
|
|
||||||
partita.put(PART_SEZ, sezione);
|
|
||||||
// partita.put(PART_CODPAG, pag.code());
|
|
||||||
partita.put(PART_CODVAL, codval);
|
|
||||||
partita.put(PART_CAMBIO, cambio);
|
|
||||||
partita.put(PART_IMPORTO, pag.imponibile()+pag.imposta()); // TBC sommare le spese?
|
|
||||||
partita.put(PART_IMPOSTA, pag.imposta());
|
|
||||||
partita.put(PART_SPESE, pag.spese());
|
|
||||||
partita.put(PART_NUMRIG, numrig);
|
|
||||||
|
|
||||||
// TBC se devono cominciare da n != 1, si riveda questo
|
|
||||||
// appropriatamente
|
|
||||||
partita.elimina_rate();
|
|
||||||
|
|
||||||
TString16 np = partita.get(PART_NUMPART);
|
|
||||||
TString16 nr = partita.get(PART_NRIGA);
|
|
||||||
|
|
||||||
for (int i = 0; i < pag.n_rate(); i++)
|
|
||||||
{
|
{
|
||||||
TRiga_scadenze& scadenza = (TRiga_scadenze&)partita.new_row();
|
real imponibile(0.0);
|
||||||
|
real imposta(0.0);
|
||||||
|
real spese(0.0);
|
||||||
|
|
||||||
scadenza.put(SCAD_CODPAG, pag.code());
|
const TString16 ndoc(m.get(F_NUMDOC));
|
||||||
scadenza.put(SCAD_TIPOPAG, pag.tipo_rata(i));
|
const int tmov = causale().tipomov();
|
||||||
scadenza.put(SCAD_ULTCLASS, pag.ulc_rata(i));
|
const TDate ddoc(m.get(F_DATADOC));
|
||||||
scadenza.put(SCAD_IMPORTO, pag.tpay_rata(i));
|
const TDate dreg(m.get(F_DATAREG));
|
||||||
scadenza.put(SCAD_DATASCAD, pag.data_rata(i));
|
const TString16 reg (causale().reg().name());
|
||||||
scadenza.put(SCAD_PAGATA, pag.ratapagata(i));
|
const TString80 desc(m.get(F_DESCR));
|
||||||
|
const long protiva = m.get_long(F_PROTIVA);
|
||||||
|
const TString16 codcaus(causale().codice());
|
||||||
|
const TString16 codval (m.get(S_VALUTA));
|
||||||
|
const real cambio (m.get(S_CAMBIO));
|
||||||
|
const char sezione = get_cgs_imp(0).sezione(); // Dare/Avere
|
||||||
|
CHECK(sezione > ' ', "Invalid section in row 0");
|
||||||
|
|
||||||
|
const TBill clifo(cgs().row(0), 2, 0x3);
|
||||||
|
newgame = new TPartita(clifo, anno, numpart);
|
||||||
|
|
||||||
|
const int row = newgame->prima_fattura(nreg);
|
||||||
|
TRiga_partite& partita = row <= 0 ? newgame->new_row() : newgame->riga(row);
|
||||||
|
TPagamento& pag = *pagamento();
|
||||||
|
|
||||||
|
// put data on partita
|
||||||
|
partita.put(PART_TIPOMOV, tmov);
|
||||||
|
partita.put(PART_NREG, nreg);
|
||||||
|
partita.put(PART_NUMRIG, 1);
|
||||||
|
partita.put(PART_DATAREG, dreg);
|
||||||
|
partita.put(PART_DATADOC, ddoc);
|
||||||
|
partita.put(PART_NUMDOC, ndoc);
|
||||||
|
partita.put(PART_REG, reg);
|
||||||
|
partita.put(PART_DESCR, desc);
|
||||||
|
partita.put(PART_PROTIVA, protiva);
|
||||||
|
partita.put(PART_CODCAUS, codcaus);
|
||||||
|
partita.put(PART_SEZ, sezione);
|
||||||
|
partita.put(PART_CODVAL, codval);
|
||||||
|
partita.put(PART_CAMBIO, cambio);
|
||||||
|
partita.put(PART_IMPORTO, pag.imponibile()+pag.imposta());
|
||||||
|
partita.put(PART_IMPOSTA, pag.imposta());
|
||||||
|
partita.put(PART_SPESE, pag.spese());
|
||||||
|
|
||||||
|
partita.elimina_rate();
|
||||||
|
for (int i = 0; i < pag.n_rate(); i++)
|
||||||
|
{
|
||||||
|
TRiga_scadenze& scadenza = partita.new_row();
|
||||||
|
|
||||||
|
scadenza.put(SCAD_CODPAG, pag.code());
|
||||||
|
scadenza.put(SCAD_TIPOPAG, pag.tipo_rata(i));
|
||||||
|
scadenza.put(SCAD_ULTCLASS, pag.ulc_rata(i));
|
||||||
|
scadenza.put(SCAD_IMPORTO, pag.tpay_rata(i));
|
||||||
|
scadenza.put(SCAD_DATASCAD, pag.data_rata(i));
|
||||||
|
scadenza.put(SCAD_PAGATA, pag.ratapagata(i));
|
||||||
// scadenza.put(SCAD_CODABIPR, pag.codabipr(i)); // TBI
|
// scadenza.put(SCAD_CODABIPR, pag.codabipr(i)); // TBI
|
||||||
// scadenza.put(SCAD_CODCABPR, pag.codcabpr(i)); // TBI
|
// scadenza.put(SCAD_CODCABPR, pag.codcabpr(i)); // TBI
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
part.write();
|
TPartita* oldgame = partite().first();
|
||||||
|
if (oldgame != NULL)
|
||||||
|
{
|
||||||
|
const int primafatt = oldgame->prima_fattura(nreg);
|
||||||
|
if (primafatt > 0)
|
||||||
|
{
|
||||||
|
if (*oldgame != *newgame)
|
||||||
|
{
|
||||||
|
bool sposta = newgame != NULL;
|
||||||
|
if (sposta)
|
||||||
|
{
|
||||||
|
sposta = (oldgame->conto() == newgame->conto());
|
||||||
|
if (sposta)
|
||||||
|
sposta = yesno_box("Spostare le righe nella nuova partita?");
|
||||||
|
}
|
||||||
|
if (sposta)
|
||||||
|
oldgame->sposta_riga(primafatt, *newgame);
|
||||||
|
else
|
||||||
|
oldgame->scollega_pagamenti(primafatt);
|
||||||
|
oldgame->rewrite();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oldgame->sposta_riga(primafatt, *newgame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newgame != NULL)
|
||||||
|
newgame->write();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -877,14 +877,13 @@ bool TPrimanota_application::edit_partite(int riga)
|
|||||||
|
|
||||||
int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int rata, int numrig)
|
int TPrimanota_application::nuovo_pagamento(TPartita& partita, int nriga, int rata, int numrig)
|
||||||
{
|
{
|
||||||
TBill conto; partita.conto(conto); // Legge conto principale
|
const TBill& conto = partita.conto(); // Legge conto principale
|
||||||
|
|
||||||
const long numreg = curr_mask().get_long(F_NUMREG);
|
const long numreg = curr_mask().get_long(F_NUMREG);
|
||||||
int nrigp = partita.mov2rig(numreg, numrig); // Cerca riga partita relativa alla riga rmov
|
int nrigp = partita.mov2rig(numreg, numrig); // Cerca riga partita relativa alla riga rmov
|
||||||
|
|
||||||
if (nrigp <= 0) // Devo creare una nuova riga di partita
|
if (nrigp <= 0) // Devo creare una nuova riga di partita
|
||||||
{
|
{
|
||||||
TRiga_partite& part = partita.nuova_riga(); // Creazione nuova riga vuota
|
TRiga_partite& part = partita.new_row(); // Creazione nuova riga vuota
|
||||||
nrigp = part.get_int(PART_NRIGA);
|
nrigp = part.get_int(PART_NRIGA);
|
||||||
|
|
||||||
// Copia dati movimento corrente
|
// Copia dati movimento corrente
|
||||||
|
323
cg/saldacon.cpp
323
cg/saldacon.cpp
@ -32,23 +32,38 @@ TObject* TTree_rectype::dup() const
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TTree_rectype::renum_key(const char* field, const char* val)
|
||||||
|
{
|
||||||
|
TRectype::renum_key(field, val);
|
||||||
|
_recarr.renum_key(field, val);
|
||||||
|
}
|
||||||
|
|
||||||
void TTree_rectype::copy_key_to_row(TRectype& row) const
|
void TTree_rectype::copy_key_to_row(TRectype& row) const
|
||||||
{
|
{
|
||||||
const int numkey = 0; // Memento! Gli indici delle chiavi partono da zero!
|
|
||||||
RecDes* recd = rec_des(); // Descrizione del record della testata
|
RecDes* recd = rec_des(); // Descrizione del record della testata
|
||||||
|
|
||||||
row.zero();
|
row.zero();
|
||||||
const KeyDes& kd = recd->Ky[numkey];
|
const KeyDes& kd = recd->Ky[0]; // Memento! Gli indici delle chiavi partono da zero!
|
||||||
for (int i = recd->Ky[numkey].NkFields-1; i >= 0; i--)
|
for (int i = kd.NkFields-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
const int nf = kd.FieldSeq[i] % MaxFields;
|
const int nf = kd.FieldSeq[i] % MaxFields;
|
||||||
const RecFieldDes& rf = recd->Fd[nf];
|
const RecFieldDes& rf = recd->Fd[nf];
|
||||||
const char* name = rf.Name;
|
const char* name = rf.Name;
|
||||||
const TString& val = get(name);
|
const TString& val = get(name);
|
||||||
row.put(name, val);
|
row.renum_key(name, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TRectype& TTree_rectype::new_row(int r)
|
||||||
|
{
|
||||||
|
if (r <= 0)
|
||||||
|
r = last()+1;
|
||||||
|
CHECKD(!exist(r), "Ue' pirla!, esiste gia' la riga ", r);
|
||||||
|
TRectype& row = rows_array().row(r, TRUE);
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int TTree_rectype::fill_array()
|
int TTree_rectype::fill_array()
|
||||||
{
|
{
|
||||||
TRectype* row = (TRectype*)_recarr.key().dup();
|
TRectype* row = (TRectype*)_recarr.key().dup();
|
||||||
@ -94,7 +109,7 @@ int TTree_rectype::rewrite(TBaseisamfile& f) const
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TTree_rectype::remove(TBaseisamfile& f)
|
int TTree_rectype::remove(TBaseisamfile& f) const
|
||||||
{
|
{
|
||||||
int err = TRectype::remove(f);
|
int err = TRectype::remove(f);
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
@ -195,14 +210,12 @@ TRiga_scadenze::TRiga_scadenze(TRiga_partite* r)
|
|||||||
: TTree_rectype(LF_SCADENZE, LF_PAGSCA, "NRIGP"), _riga(r)
|
: TTree_rectype(LF_SCADENZE, LF_PAGSCA, "NRIGP"), _riga(r)
|
||||||
{
|
{
|
||||||
CHECK(_riga, "Riga nulla");
|
CHECK(_riga, "Riga nulla");
|
||||||
|
r->copy_key_to_row(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRiga_scadenze::TRiga_scadenze(const TRiga_scadenze& s)
|
TRiga_scadenze::TRiga_scadenze(const TRiga_scadenze& s)
|
||||||
: TTree_rectype(s), _riga(s._riga)
|
: TTree_rectype(s), _riga(s._riga)
|
||||||
|
{}
|
||||||
{
|
|
||||||
CHECK(_riga, "Riga nulla");
|
|
||||||
}
|
|
||||||
|
|
||||||
TPartita& TRiga_scadenze::partita() const
|
TPartita& TRiga_scadenze::partita() const
|
||||||
{
|
{
|
||||||
@ -411,14 +424,13 @@ bool TRiga_scadenze::modifica_pagamento(const TRectype& new_pag, const TValuta&
|
|||||||
return empty;
|
return empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPartita::modifica_pagamento(const TRectype& new_pag)
|
bool TRiga_scadenze::elimina_pagamento(int p)
|
||||||
{
|
{
|
||||||
char old_ap, new_ap;
|
TRectype old_pag(row(p));
|
||||||
TImporto old_abbuono, new_abbuono, old_diffcam, new_diffcam;
|
old_pag.put(PAGSCA_ACCSAL, "A");
|
||||||
TValuta valuta;
|
old_pag.zero(PAGSCA_IMPORTO);
|
||||||
return modifica_pagamento(new_pag, valuta,
|
old_pag.zero(PAGSCA_IMPORTOVAL);
|
||||||
old_ap, old_abbuono, old_diffcam,
|
return partita().modifica_pagamento(old_pag);
|
||||||
new_ap, new_abbuono, new_diffcam);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -429,26 +441,31 @@ TRiga_partite::TRiga_partite(TPartita* game)
|
|||||||
: TTree_rectype(LF_PARTITE, LF_SCADENZE, SCAD_NRATA), _partita(game)
|
: TTree_rectype(LF_PARTITE, LF_SCADENZE, SCAD_NRATA), _partita(game)
|
||||||
{
|
{
|
||||||
CHECK(_partita, "Partita nulla");
|
CHECK(_partita, "Partita nulla");
|
||||||
|
TRiga_scadenze* scad = new TRiga_scadenze(this);
|
||||||
|
copy_key_to_row(*this);
|
||||||
|
rows_array().set_key(scad); // Altrimenti le righe sarebbero dei TRectype!
|
||||||
}
|
}
|
||||||
|
|
||||||
TRiga_partite::TRiga_partite(const TRiga_partite& r)
|
TRiga_partite::TRiga_partite(const TRiga_partite& r)
|
||||||
: TTree_rectype(r), _partita(r._partita)
|
: TTree_rectype(r), _partita(r._partita)
|
||||||
{
|
{}
|
||||||
CHECK(_partita, "Partita nulla");
|
|
||||||
}
|
|
||||||
|
|
||||||
TRiga_scadenze& TRiga_partite::new_row(int r)
|
TRiga_scadenze& TRiga_partite::new_row(int r)
|
||||||
{
|
{
|
||||||
if (r <= 0) r = last()+1;
|
TRiga_scadenze& scad = (TRiga_scadenze&)TTree_rectype::new_row(r);
|
||||||
|
scad._riga = this;
|
||||||
|
return scad;
|
||||||
|
}
|
||||||
|
|
||||||
if (_recarr.rows() == 0)
|
void TRiga_partite::elimina_rate()
|
||||||
|
{
|
||||||
|
for (int r = rate(); r > 0; r--)
|
||||||
{
|
{
|
||||||
TRiga_scadenze* scad = new TRiga_scadenze(this);
|
TRiga_scadenze& scad = rata(r);
|
||||||
copy_key_to_row(*scad);
|
for (int p = scad.last(); p > 0; p = scad.pred(p))
|
||||||
_recarr.set_key(scad); // Altrimenti le righe sarebbero dei TRectype!
|
scad.elimina_pagamento(p);
|
||||||
|
rows_array().destroy_row(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (TRiga_scadenze&)_recarr.row(r, TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int TRiga_partite::read(TBaseisamfile& f, word op)
|
int TRiga_partite::read(TBaseisamfile& f, word op)
|
||||||
@ -457,11 +474,10 @@ int TRiga_partite::read(TBaseisamfile& f, word op)
|
|||||||
if (err == NOERR && get_int(PART_TIPOMOV) == 1)
|
if (err == NOERR && get_int(PART_TIPOMOV) == 1)
|
||||||
{
|
{
|
||||||
TRiga_scadenze* s = new TRiga_scadenze(this);
|
TRiga_scadenze* s = new TRiga_scadenze(this);
|
||||||
copy_key_to_row(*s);
|
err = rows_array().read(s); // Deve esistere almento una scadenza
|
||||||
err = _recarr.read(s); // Deve esistere almento una scadenza
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_recarr.destroy_rows();
|
rows_array().destroy_rows();
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -513,35 +529,44 @@ TPartita::TPartita(const TBill& clifo, int anno, const char* num)
|
|||||||
read(clifo, anno, num);
|
read(clifo, anno, num);
|
||||||
}
|
}
|
||||||
|
|
||||||
TPartita::TPartita()
|
int TPartita::compare(const TSortable& s) const
|
||||||
: _part(LF_PARTITE, PART_NRIGA), _unassigned(LF_PAGSCA, "NRIGP")
|
{
|
||||||
{}
|
TString80 key; key.format("%c%6ld%4d%s", conto().tipo(), conto().sottoconto(),
|
||||||
|
anno(), (const char*)numero());
|
||||||
|
const TPartita& p = (const TPartita&)s;
|
||||||
|
TString80 par; par.format("%c%6ld%4d%s", p.conto().tipo(), p.conto().sottoconto(),
|
||||||
|
p.anno(), (const char*)p.numero());
|
||||||
|
return strcmp(key, par);
|
||||||
|
}
|
||||||
|
|
||||||
// Costruisce le righe della partita
|
// Costruisce le righe della partita
|
||||||
bool TPartita::read(const TBill& clifo, int anno, const char* num)
|
bool TPartita::read(const TBill& clifo, int year, const char* num)
|
||||||
{
|
{
|
||||||
TRiga_partite* partita = new TRiga_partite(this); // Record campione della partita
|
_conto = clifo;
|
||||||
partita->put(PART_TIPOCF, clifo.tipo()); // Tipo clifo
|
_anno = year;
|
||||||
|
_num = num;
|
||||||
|
TRiga_partite* partita = new TRiga_partite(this); // Record campione della partita
|
||||||
|
TString16 str;
|
||||||
|
str << clifo.tipo();
|
||||||
|
partita->renum_key(PART_TIPOCF, str); // Tipo clifo
|
||||||
if (clifo.tipo() <= ' ')
|
if (clifo.tipo() <= ' ')
|
||||||
{
|
{
|
||||||
partita->put(PART_GRUPPO, clifo.gruppo()); // Scrivi gruppo e conto solamente
|
str.cut(0); str << clifo.gruppo();
|
||||||
partita->put(PART_CONTO, clifo.conto()); // nei conti normali (no clifo)
|
partita->renum_key(PART_GRUPPO, str); // Scrivi gruppo e conto solamente
|
||||||
|
str.cut(0); str << clifo.conto(); // nei conti normali (no clifo)
|
||||||
|
partita->renum_key(PART_CONTO, str);
|
||||||
}
|
}
|
||||||
partita->put(PART_SOTTOCONTO, clifo.sottoconto()); // Sottoconto o codice clifo
|
str.cut(0); str << clifo.sottoconto();
|
||||||
partita->put(PART_ANNO, anno); // Anno partita
|
partita->renum_key(PART_SOTTOCONTO, str); // Sottoconto o codice clifo
|
||||||
partita->put(PART_NUMPART, num); // Numero partita
|
str.cut(0); str << anno();
|
||||||
|
partita->renum_key(PART_ANNO, str); // Anno partita
|
||||||
|
partita->renum_key(PART_NUMPART, num); // Numero partita
|
||||||
_part.read(partita);
|
_part.read(partita);
|
||||||
|
|
||||||
TRectype unas(LF_PAGSCA); // Record campione pagamenti non assegnati
|
TRectype* unas = new TRectype(LF_PAGSCA); // Record pagamenti non assegnati
|
||||||
unas.zero();
|
partita->copy_key_to_row(*unas);
|
||||||
unas.put(PART_TIPOCF, partita->get(PART_TIPOCF)); // Copia chiave partite
|
unas->put(PART_NRIGA, (int)UNASSIGNED);
|
||||||
unas.put(PART_GRUPPO, partita->get(PART_GRUPPO));
|
unas->put(SCAD_NRATA, (int)UNASSIGNED);
|
||||||
unas.put(PART_CONTO, partita->get(PART_CONTO));
|
|
||||||
unas.put(PART_SOTTOCONTO, partita->get(PART_SOTTOCONTO));
|
|
||||||
unas.put(PART_ANNO, partita->get(PART_ANNO));
|
|
||||||
unas.put(PART_NUMPART, partita->get(PART_NUMPART));
|
|
||||||
unas.put(PART_NRIGA, (int)UNASSIGNED);
|
|
||||||
unas.put(SCAD_NRATA, (int)UNASSIGNED);
|
|
||||||
_unassigned.read(unas);
|
_unassigned.read(unas);
|
||||||
|
|
||||||
return ok();
|
return ok();
|
||||||
@ -549,15 +574,20 @@ bool TPartita::read(const TBill& clifo, int anno, const char* num)
|
|||||||
|
|
||||||
bool TPartita::reread()
|
bool TPartita::reread()
|
||||||
{
|
{
|
||||||
TBill zio;
|
return read(conto(), anno(), numero());
|
||||||
conto(zio);
|
|
||||||
const int year = anno();
|
|
||||||
const TString16 num = numero();
|
|
||||||
return read(zio, year, num);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPartita::write(bool re) const
|
bool TPartita::write(bool re) const
|
||||||
{
|
{
|
||||||
|
if (conto().tipo() > ' ')
|
||||||
|
{
|
||||||
|
for (int r = last(); r > 0; r = pred(r))
|
||||||
|
{
|
||||||
|
TRiga_partite& row = riga(r);
|
||||||
|
row.put(PART_GRUPPOCL, conto().gruppo());
|
||||||
|
row.put(PART_GRUPPOCL, conto().conto());
|
||||||
|
}
|
||||||
|
}
|
||||||
int err = _part.write(re);
|
int err = _part.write(re);
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
err = _unassigned.write(re);
|
err = _unassigned.write(re);
|
||||||
@ -572,13 +602,13 @@ bool TPartita::remove()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Crea un nuova riga partite e gli copia la chiave principale e il conto cliente/fornitore
|
// Crea un nuova riga partite
|
||||||
TRiga_partite& TPartita::nuova_riga()
|
TRiga_partite& TPartita::new_row(int r)
|
||||||
{
|
{
|
||||||
TRiga_partite& nuova = (TRiga_partite&)_part.row(last()+1, TRUE);
|
if (r <= 0)
|
||||||
const TRiga_partite& prima = riga(first());
|
for (r = 1; esiste(r); r++);
|
||||||
nuova.put(PART_GRUPPOCL, prima.get(PART_GRUPPOCL));
|
CHECKD(!esiste(r), "Ue' pirla!, esiste gia' la riga ", r);
|
||||||
nuova.put(PART_CONTOCL, prima.get(PART_CONTOCL));
|
TRiga_partite& nuova = (TRiga_partite&)_part.row(r, TRUE);
|
||||||
return nuova;
|
return nuova;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,11 +649,11 @@ bool TPartita::esiste(int nriga, int nrata, int nrigp) const
|
|||||||
if (nrigp <= 0)
|
if (nrigp <= 0)
|
||||||
{
|
{
|
||||||
const TRiga_partite& r = riga(nriga);
|
const TRiga_partite& r = riga(nriga);
|
||||||
return r.rows_array().exist(nrata);
|
return r.exist(nrata);
|
||||||
}
|
}
|
||||||
|
|
||||||
const TRiga_scadenze& r = rata(nriga, nrata);
|
const TRiga_scadenze& r = rata(nriga, nrata);
|
||||||
return r.rows_array().exist(nrigp);
|
return r.exist(nrigp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ritorna l'importo in lire speso su di una riga contabile
|
// Ritorna l'importo in lire speso su di una riga contabile
|
||||||
@ -762,21 +792,17 @@ void TPartita::calcola_saldo(TImporto& saldo, TImporto& doc, TImporto& pag, TImp
|
|||||||
saldo += imp;
|
saldo += imp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Controlla se esistono pagamenti riferiti alla riga nrigp
|
||||||
bool TPartita::utilizzata(int nrigp) const
|
bool TPartita::utilizzata(int nrigp) const
|
||||||
{
|
{
|
||||||
for (int p = last(); p > 0; p = pred(p))
|
for (int p = last(); p > 0; p = pred(p))
|
||||||
{
|
{
|
||||||
const TRiga_partite& fatt = riga(p);
|
const TRiga_partite& fatt = riga(p);
|
||||||
const int tipomov = fatt.get_int(PART_TIPOMOV);
|
for (int r = fatt.rate(); r > 0; r--)
|
||||||
if (tipomov == 1)
|
|
||||||
{
|
{
|
||||||
for (int r = fatt.rate(); r > 0; r--)
|
const TRiga_scadenze& scad = fatt.rata(r);
|
||||||
{
|
if (scad.rows_array().exist(nrigp))
|
||||||
const TRiga_scadenze& scad = fatt.rata(r);
|
return TRUE;
|
||||||
if (scad.rows_array().exist(nrigp))
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _unassigned.exist(nrigp);
|
return _unassigned.exist(nrigp);
|
||||||
@ -813,15 +839,29 @@ bool TPartita::modifica_pagamento(const TRectype& new_pag, const TValuta& valuta
|
|||||||
else
|
else
|
||||||
_unassigned.row(nrigp, FALSE) = new_pag;
|
_unassigned.row(nrigp, FALSE) = new_pag;
|
||||||
|
|
||||||
old_ap = new_ap = ' '; // Non ci possono essere abbuoni di sorta!
|
// Non ci possono essere abbuoni o differenze cambio di sorta!
|
||||||
|
old_ap = new_ap = ' ';
|
||||||
|
old_abb = new_abb = old_diffcam = new_diffcam = TImporto('D', ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty && !utilizzata(nrigp))
|
if (empty && !utilizzata(nrigp))
|
||||||
_part.destroy_row(nrigp);
|
rimuovi_riga(nrigp);
|
||||||
|
|
||||||
return empty;
|
return empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TPartita::modifica_pagamento(const TRectype& new_pag)
|
||||||
|
{
|
||||||
|
char old_ap, new_ap;
|
||||||
|
TImporto old_abbuono, new_abbuono, old_diffcam, new_diffcam;
|
||||||
|
TValuta valuta;
|
||||||
|
return modifica_pagamento(new_pag, valuta,
|
||||||
|
old_ap, old_abbuono, old_diffcam,
|
||||||
|
new_ap, new_abbuono, new_diffcam);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TPartita::chiusa(bool update)
|
bool TPartita::chiusa(bool update)
|
||||||
{
|
{
|
||||||
bool chiusa = FALSE;
|
bool chiusa = FALSE;
|
||||||
@ -869,73 +909,124 @@ bool TPartita::chiusa(bool update)
|
|||||||
return chiusa;
|
return chiusa;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPartita::riassegna_riga(int r, TPartita& part, bool remove)
|
void TPartita::rimuovi_riga(int r)
|
||||||
{
|
{
|
||||||
TRiga_partite& row = riga(r);
|
TRiga_partite& row = riga(r);
|
||||||
TRiga_partite& nrw = part.nuova_riga();
|
if (row.rate() > 0)
|
||||||
|
{
|
||||||
|
row.elimina_rate();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CHECKD(!utilizzata(r), "Can't remove still referenced row ", r);
|
||||||
|
}
|
||||||
|
_part.destroy_row(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void somma(const TRectype& vec, TRectype& nuo, const char* field)
|
||||||
|
{
|
||||||
|
real totale(vec.get(field));
|
||||||
|
totale += nuo.get_real(field);
|
||||||
|
nuo.put(field, totale);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TPartita::sposta_riga(int r, TPartita& part)
|
||||||
|
{
|
||||||
|
const TRiga_partite& row = riga(r);
|
||||||
|
const long nreg = row.get_long(PART_NREG);
|
||||||
|
const int prima = part.prima_fattura(nreg);
|
||||||
|
TRiga_partite& nrw = part.riga(prima);
|
||||||
|
|
||||||
|
const int address_size = last()+1;
|
||||||
|
int* address = new int[address_size];
|
||||||
|
memset(address, 0, address_size*sizeof(int));
|
||||||
|
|
||||||
TToken_string knames(256);
|
TToken_string knames(256);
|
||||||
// copy all non-key fields
|
knames.add(PART_TIPOCF);
|
||||||
|
knames.add(PART_GRUPPO);
|
||||||
|
knames.add(PART_CONTO);
|
||||||
|
knames.add(PART_SOTTOCONTO);
|
||||||
knames.add(PART_ANNO);
|
knames.add(PART_ANNO);
|
||||||
knames.add(PART_NUMPART);
|
knames.add(PART_NUMPART);
|
||||||
knames.add(PART_NRIGA);
|
knames.add(PART_NRIGA);
|
||||||
|
knames.add(SCAD_NRATA);
|
||||||
for (int f = 0; f < row.items(); f++)
|
knames.add(PAGSCA_NRIGP);
|
||||||
{
|
|
||||||
const char* fnam = row.fieldname(f);
|
|
||||||
if (knames.get_pos(fnam) == -1)
|
|
||||||
nrw.put(fnam, row.get(fnam));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 1; i <= row.rate(); i++)
|
for (int i = 1; i <= row.rate(); i++)
|
||||||
{
|
{
|
||||||
TRiga_scadenze& scd = row.rata(i);
|
TRiga_scadenze& scd = row.rata(i);
|
||||||
TRiga_scadenze& nsc = nrw.new_row();
|
|
||||||
|
|
||||||
// copy all non-key fields
|
|
||||||
knames = "";
|
|
||||||
knames.add(SCAD_ANNO);
|
|
||||||
knames.add(SCAD_NUMPART);
|
|
||||||
knames.add(SCAD_NRIGA);
|
|
||||||
knames.add(SCAD_NRATA);
|
|
||||||
for (int f = 0; f < scd.items(); f++)
|
|
||||||
{
|
|
||||||
const char* fnam = scd.fieldname(f);
|
|
||||||
if (knames.get_pos(fnam) == -1)
|
|
||||||
nsc.put(fnam, scd.get(fnam));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int j = scd.last(); j > 0; j = scd.pred(j))
|
for (int j = scd.last(); j > 0; j = scd.pred(j))
|
||||||
{
|
{
|
||||||
TRectype& pag = scd.row(j);
|
const TRectype& pag = scd.row(j);
|
||||||
TRectype& npg = nsc.new_row();
|
|
||||||
knames = "";
|
CHECK(j < address_size, "Bad nrigp address");
|
||||||
knames.add(PAGSCA_NUMPART);
|
if (address[j] == 0)
|
||||||
knames.add(PAGSCA_NRIGA);
|
|
||||||
knames.add(PAGSCA_NRATA);
|
|
||||||
knames.add(PAGSCA_NRIGP);
|
|
||||||
for (int f = 0; f < pag.items(); f++)
|
|
||||||
{
|
{
|
||||||
const char* fnam = pag.fieldname(f);
|
const TRiga_partite& vecchia = riga(j);
|
||||||
if (knames.get_pos(fnam) == -1)
|
TRiga_partite& nuova = part.new_row(part.esiste(j) ? 0 :j);
|
||||||
npg.put(fnam, pag.get(fnam));
|
for (int f = 0; f < vecchia.items(); f++)
|
||||||
|
{
|
||||||
|
const char* fnam = vecchia.fieldname(f);
|
||||||
|
if (knames.get_pos(fnam) < 0)
|
||||||
|
nuova.put(fnam, vecchia.get(fnam));
|
||||||
|
}
|
||||||
|
nuova.zero(PART_IMPORTO);
|
||||||
|
nuova.zero(PART_IMPORTOVAL);
|
||||||
|
nuova.zero(PART_ABBUONI);
|
||||||
|
nuova.zero(PART_DIFFCAM);
|
||||||
|
address[j] = nuova.get_int(PART_NRIGA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int nrigp = address[j];
|
||||||
|
TRectype npg(LF_PAGSCA);
|
||||||
|
if (part.esiste(r, i, nrigp))
|
||||||
|
{
|
||||||
|
npg = part.pagamento(r, i, nrigp);
|
||||||
|
somma(pag, npg, PART_IMPORTO);
|
||||||
|
somma(pag, npg, PART_IMPORTOVAL);
|
||||||
|
somma(pag, npg, PART_ABBUONI);
|
||||||
|
somma(pag, npg, PART_DIFFCAM);
|
||||||
|
npg.put(PAGSCA_ACCSAL, 'A');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (nrw.exist(i))
|
||||||
|
npg = nrw.rata(i).new_row(nrigp);
|
||||||
|
else
|
||||||
|
npg = part.unassigned().row(nrigp, TRUE);
|
||||||
|
for (int f = 0; f < pag.items(); f++)
|
||||||
|
{
|
||||||
|
const char* fnam = pag.fieldname(f);
|
||||||
|
if (knames.get_pos(fnam) < 0)
|
||||||
|
npg.put(fnam, pag.get(fnam));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part.modifica_pagamento(npg);
|
||||||
|
scd.elimina_pagamento(j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remove) rimuovi_riga(r);
|
delete address;
|
||||||
|
rimuovi_riga(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPartita::scollega_pagamenti(int r)
|
// Sposta i pagamenti della riga r, dalla rata s compresa in poi, sui non assegnati
|
||||||
|
void TPartita::scollega_pagamenti(int r, int s)
|
||||||
{
|
{
|
||||||
TRiga_partite& row = riga(r);
|
CHECKD(s >= 0, "Impossibile scollegare la rata ", s);
|
||||||
|
|
||||||
for (int i = 0; i < row.rate(); i++)
|
const TRiga_partite& row = riga(r);
|
||||||
|
for (int i = row.rate(); i >= s; i--)
|
||||||
{
|
{
|
||||||
TRiga_scadenze& sc = row.rata(i+1);
|
TRiga_scadenze& sc = row.rata(i);
|
||||||
for (int j = sc.last(); j > 0; j = sc.pred(j))
|
for (int j = sc.last(); j > 0; j = sc.pred(j))
|
||||||
{
|
{
|
||||||
TRectype& pag = sc.row(j);
|
TRectype& pag = sc.row(j);
|
||||||
|
CHECK(pag.get_real(PAGSCA_ABBUONI).is_zero(), "Can't remove payment with ABBUONI");
|
||||||
|
CHECK(pag.get_real(PAGSCA_DIFFCAM).is_zero(), "Can't remove payment with DIFFCAM");
|
||||||
|
pag.put(PAGSCA_ACCSAL, 'A');
|
||||||
pag.put(PAGSCA_NRIGA, (int)TPartita::UNASSIGNED);
|
pag.put(PAGSCA_NRIGA, (int)TPartita::UNASSIGNED);
|
||||||
pag.put(PAGSCA_NRATA, (int)TPartita::UNASSIGNED);
|
pag.put(PAGSCA_NRATA, (int)TPartita::UNASSIGNED);
|
||||||
_unassigned.add_row(pag);
|
_unassigned.add_row(pag);
|
||||||
|
@ -25,8 +25,6 @@ class TTree_rectype : public TRectype
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
TRecord_array _recarr;
|
TRecord_array _recarr;
|
||||||
|
|
||||||
void copy_key_to_row(TRectype& row) const;
|
|
||||||
int fill_array();
|
int fill_array();
|
||||||
|
|
||||||
protected: // TRectype
|
protected: // TRectype
|
||||||
@ -36,7 +34,8 @@ protected: // TRectype
|
|||||||
virtual int next(TBaseisamfile& f);
|
virtual int next(TBaseisamfile& f);
|
||||||
virtual int write(TBaseisamfile& f) const;
|
virtual int write(TBaseisamfile& f) const;
|
||||||
virtual int rewrite(TBaseisamfile& f) const;
|
virtual int rewrite(TBaseisamfile& f) const;
|
||||||
virtual int remove(TBaseisamfile& f);
|
virtual int remove(TBaseisamfile& f) const;
|
||||||
|
virtual void renum_key(const char* field, const char* val);
|
||||||
|
|
||||||
const TRecord_array& rows_array() const { return _recarr; }
|
const TRecord_array& rows_array() const { return _recarr; }
|
||||||
TRecord_array& rows_array() { return _recarr; }
|
TRecord_array& rows_array() { return _recarr; }
|
||||||
@ -44,13 +43,15 @@ protected: // TRectype
|
|||||||
public:
|
public:
|
||||||
const TRectype& row(int r) const { return _recarr.row(r); }
|
const TRectype& row(int r) const { return _recarr.row(r); }
|
||||||
TRectype& row(int r) { return _recarr.row(r, TRUE); }
|
TRectype& row(int r) { return _recarr.row(r, TRUE); }
|
||||||
TRectype& new_row(int r = -1) { return _recarr.row(r > 0 ? r : last()+1, TRUE); }
|
TRectype& new_row(int r = 0);
|
||||||
void destroy_rows() { _recarr.destroy_rows(); }
|
void destroy_rows() { _recarr.destroy_rows(); }
|
||||||
|
void copy_key_to_row(TRectype& row) const;
|
||||||
|
|
||||||
int first() const { return _recarr.first_row(); }
|
int first() const { return _recarr.first_row(); }
|
||||||
int last() const { return _recarr.last_row(); }
|
int last() const { return _recarr.last_row(); }
|
||||||
int pred(int r) const { return _recarr.pred_row(r); }
|
int pred(int r) const { return _recarr.pred_row(r); }
|
||||||
int succ(int r) const { return _recarr.succ_row(r); }
|
int succ(int r) const { return _recarr.succ_row(r); }
|
||||||
|
bool exist(int r) const { return _recarr.exist(r); }
|
||||||
|
|
||||||
TTree_rectype(const TRectype& testata, const TRectype& riga, const char* num);
|
TTree_rectype(const TRectype& testata, const TRectype& riga, const char* num);
|
||||||
TTree_rectype(int testata, int riga, const char* num);
|
TTree_rectype(int testata, int riga, const char* num);
|
||||||
@ -118,6 +119,7 @@ protected:
|
|||||||
bool modifica_pagamento(const TRectype& new_pag, const TValuta& valuta,
|
bool modifica_pagamento(const TRectype& new_pag, const TValuta& valuta,
|
||||||
char& old_ap, TImporto& old_abb, TImporto& old_diffcam,
|
char& old_ap, TImporto& old_abb, TImporto& old_diffcam,
|
||||||
char& new_ap, TImporto& new_abb, TImporto& new_diffcam);
|
char& new_ap, TImporto& new_abb, TImporto& new_diffcam);
|
||||||
|
bool elimina_pagamento(int p);
|
||||||
|
|
||||||
protected: // TRecord_tree
|
protected: // TRecord_tree
|
||||||
virtual TObject* dup() const { return new TRiga_scadenze(*this); }
|
virtual TObject* dup() const { return new TRiga_scadenze(*this); }
|
||||||
@ -152,8 +154,8 @@ public: // TTree_rectype
|
|||||||
public:
|
public:
|
||||||
int rate() const { return _recarr.rows(); }
|
int rate() const { return _recarr.rows(); }
|
||||||
TRiga_scadenze& rata(int r) const { return (TRiga_scadenze&)_recarr.row(r); }
|
TRiga_scadenze& rata(int r) const { return (TRiga_scadenze&)_recarr.row(r); }
|
||||||
void elimina_rate() { _recarr.destroy_rows(); }
|
void elimina_rate();
|
||||||
TRiga_scadenze& new_row(int r = -1);
|
TRiga_scadenze& new_row(int r = 0);
|
||||||
|
|
||||||
int ultimo_pagamento(int rata) const;
|
int ultimo_pagamento(int rata) const;
|
||||||
char sezione() const { return get_char(PART_SEZ); }
|
char sezione() const { return get_char(PART_SEZ); }
|
||||||
@ -169,29 +171,34 @@ public:
|
|||||||
virtual ~TRiga_partite() {}
|
virtual ~TRiga_partite() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class TPartita : public TObject
|
class TPartita : public TSortable
|
||||||
{
|
{
|
||||||
|
TBill _conto;
|
||||||
|
int _anno;
|
||||||
|
TString16 _num;
|
||||||
|
|
||||||
TRecord_array _part;
|
TRecord_array _part;
|
||||||
TRecord_array _unassigned;
|
TRecord_array _unassigned;
|
||||||
|
|
||||||
public: // TObject
|
public: // TObject
|
||||||
virtual bool ok() const { return _part.rows() > 0; }
|
virtual bool ok() const { return _part.rows() > 0; }
|
||||||
|
virtual int compare(const TSortable& s) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum { UNASSIGNED = 9999 };
|
enum { UNASSIGNED = 9999 };
|
||||||
|
|
||||||
TRiga_partite& riga(int r) const { return (TRiga_partite&)_part.row(r); }
|
TRiga_partite& riga(int r) const { return (TRiga_partite&)_part.row(r); }
|
||||||
TRiga_partite& nuova_riga();
|
TRiga_partite& new_row(int r = 0);
|
||||||
void rimuovi_riga(int r) { _part.destroy_row(r); }
|
void rimuovi_riga(int r);
|
||||||
TRiga_scadenze& rata(int nriga, int nrata) const;
|
TRiga_scadenze& rata(int nriga, int nrata) const;
|
||||||
TRectype& pagamento(int nriga, int nrata, int nrigp);
|
TRectype& pagamento(int nriga, int nrata, int nrigp);
|
||||||
bool rata_chiusa(int nriga, int nrata) const;
|
bool rata_chiusa(int nriga, int nrata) const;
|
||||||
bool esiste(int nriga, int nrata = 0, int nrigp = 0) const;
|
bool esiste(int nriga, int nrata = 0, int nrigp = 0) const;
|
||||||
|
|
||||||
// assegna riga e figli a altra partita, distruggendola se remove e' TRUE
|
// assegna riga e figli ad altra partita
|
||||||
void riassegna_riga(int r, TPartita& part, bool remove = TRUE);
|
void sposta_riga(int r, TPartita& part);
|
||||||
// de-assegna tutti i pagamenti di una riga e li distrugge
|
// de-assegna tutti i pagamenti di una riga e li distrugge
|
||||||
void scollega_pagamenti(int r);
|
void scollega_pagamenti(int riga, int rata = 0);
|
||||||
|
|
||||||
int succ(int r) const { return _part.succ_row(r); }
|
int succ(int r) const { return _part.succ_row(r); }
|
||||||
int pred(int r) const { return _part.pred_row(r); }
|
int pred(int r) const { return _part.pred_row(r); }
|
||||||
@ -214,10 +221,10 @@ public:
|
|||||||
|
|
||||||
bool chiusa(bool update = FALSE);
|
bool chiusa(bool update = FALSE);
|
||||||
|
|
||||||
void conto(TBill& c) const { c.get(_part.key()); }
|
const TBill& conto() const { return _conto; }
|
||||||
int anno() const { return _part.key().get_int(PART_ANNO); }
|
int anno() const { return _anno; }
|
||||||
const TString& numero() const { return _part.key().get(PART_NUMPART); }
|
const TString& numero() const { return _num; }
|
||||||
const TString& descrizione() const { return _part.key().get(PART_DESCR); }
|
const TString& descrizione() const;
|
||||||
|
|
||||||
TImporto importo_speso(long numreg, int numrig) const;
|
TImporto importo_speso(long numreg, int numrig) const;
|
||||||
void update_reg(long nreg, const TRectype& mov);
|
void update_reg(long nreg, const TRectype& mov);
|
||||||
@ -229,7 +236,6 @@ public:
|
|||||||
bool modifica_pagamento(const TRectype& new_pag);
|
bool modifica_pagamento(const TRectype& new_pag);
|
||||||
|
|
||||||
TPartita(const TBill& clifo, int anno, const char* num);
|
TPartita(const TBill& clifo, int anno, const char* num);
|
||||||
TPartita();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user