Corretta gestione partite in scrittura

git-svn-id: svn://10.65.10.50/trunk@2124 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1995-11-10 13:35:00 +00:00
parent 9d92a6707c
commit ea5ad0992b
8 changed files with 275 additions and 225 deletions

View File

@ -23,7 +23,6 @@ TPrimanota_application::TPrimanota_application()
memset(_msk, 0, sizeof(_msk)); memset(_msk, 0, sizeof(_msk));
} }
TMask* TPrimanota_application::load_mask(int n) TMask* TPrimanota_application::load_mask(int n)
{ {
if (n == 2 && _msk[0] != NULL) if (n == 2 && _msk[0] != NULL)
@ -254,8 +253,10 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
m->enable_page(2, _is_saldaconto && !nota_credito); m->enable_page(2, _is_saldaconto && !nota_credito);
m->show(F_ANNORIF, _is_saldaconto); // Mostra/nasconde anno e riferimento partita m->show(F_ANNORIF, _is_saldaconto); // Mostra/nasconde anno e riferimento partita
m->show(F_NUMRIF, _is_saldaconto); m->show(F_NUMRIF, _is_saldaconto);
m->field(F_NUMRIF).set_justify(iva == iva_acquisti ? _num_for : _num_cli); TEdit_field& numrif = m->efield(F_NUMRIF);
numrif.set_justify(iva == iva_acquisti ? _num_for : _num_cli);
numrif.set_trim(!numrif.right_justified());
const bool av = causale().reg().agenzia_viaggi(); const bool av = causale().reg().agenzia_viaggi();
m->show(F_DATA74TER, av); m->show(F_DATA74TER, av);
@ -557,14 +558,6 @@ void TPrimanota_application::init_insert_mode(TMask& m)
void TPrimanota_application::init_modify_mode(TMask& m) void TPrimanota_application::init_modify_mode(TMask& m)
{ {
init_mask(m); init_mask(m);
partite().destroy();
if (is_saldaconto())
{
const long numreg = m.get_long(F_NUMREG);
partite().add_numreg(numreg);
}
calcola_saldo(); // Verifica eventuali sbilanci contabili calcola_saldo(); // Verifica eventuali sbilanci contabili
} }
@ -674,6 +667,7 @@ int TPrimanota_application::read(TMask& m)
calcola_imp(); // Calcola totale imponibile ed imposte calcola_imp(); // Calcola totale imponibile ed imposte
partite().destroy();
const int tm = causale().tipomov(); const int tm = causale().tipomov();
if (tm != 0 && tm != 2) // Ci sono scadenze if (tm != 0 && tm != 2) // Ci sono scadenze
{ {

View File

@ -161,6 +161,7 @@ END
STRING 102 7 STRING 102 7
BEGIN BEGIN
PROMPT 1 3 "Partita " PROMPT 1 3 "Partita "
FLAGS "_"
END END
DATA 103 DATA 103

View File

@ -38,7 +38,7 @@ END
STRING S_NUM 7 STRING S_NUM 7
BEGIN BEGIN
PROMPT 15 1 "Numero " PROMPT 15 1 "Numero "
FLAGS "DR" FLAGS "D_"
FIELD NUMPART FIELD NUMPART
END END
@ -155,9 +155,10 @@ BEGIN
GROUP 2 GROUP 2
END END
LIST S_SALDOACC 1 12 RADIOBUTTON S_SALDOACC 1 24
BEGIN BEGIN
PROMPT 2 10 "Saldo/Acc." PROMPT 2 9 ""
FLAGS "Z"
ITEM "A|Acconto" ITEM "A|Acconto"
ITEM "S|Saldo" ITEM "S|Saldo"
FIELD ACCSAL FIELD ACCSAL

View File

@ -68,7 +68,7 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k)
mod = m_imp = TRUE; mod = m_imp = TRUE;
} }
if (newt != ts.get(4)) // modificato tipo pagamento if (newt != ts.get(4)) // modificato tipo pagamento
mod = m_tipo = TRUE; mod = m_tipo = m_ulc = TRUE;
if (newu != ts.get(5)) // modificata ulteriore classificazione if (newu != ts.get(5)) // modificata ulteriore classificazione
mod = m_ulc = TRUE; mod = m_ulc = TRUE;
@ -460,9 +460,9 @@ bool TPrimanota_application::read_scadenze(TMask& m)
void TPrimanota_application::write_scadenze(const TMask& m) void TPrimanota_application::write_scadenze(const TMask& m)
{ {
const int anno = m.get_int(F_ANNORIF);
const TString16 numpart(m.get(F_NUMRIF));
const long nreg = m.get_long(F_NUMREG); const long nreg = m.get_long(F_NUMREG);
const int anno = m.get_int(F_ANNORIF);
const TString numpart(m.get(F_NUMRIF));
TPartita* newgame = NULL; TPartita* newgame = NULL;
if (anno > 0 && numpart.not_empty()) if (anno > 0 && numpart.not_empty())

View File

@ -199,8 +199,12 @@ protected:
int nuova_riga(TPartita& partita) const; int nuova_riga(TPartita& partita) const;
int nuovo_pagamento(TPartita& partita, int nriga, int rata) const; int nuovo_pagamento(TPartita& partita, int nriga, int rata) const;
bool edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) const; bool edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) const;
bool same_number(const char* s1, const char* s2) const;
#ifdef __EXTRA__ #ifdef __EXTRA__
bool edit_fattura(TPartita& p, int nriga); bool edit_fattura(TPartita& p, int nriga);
void prima_nota(const long nreg);
#endif #endif
bool cerca_valuta(TValuta& val) const; bool cerca_valuta(TValuta& val) const;
@ -280,12 +284,15 @@ bool TGame_mask::numpart_handler(TMask_field& f, KEY k)
{ {
TToken_string& row = sheet.row(i); TToken_string& row = sheet.row(i);
if (anno == row.get_int(0)) // Se corrisponde l'anno e ... if (anno == row.get_int(0)) // Se corrisponde l'anno e ...
if (num == row.get()) // corrisponde il numero partita ... {
TString16 n = row.get(); n.trim();
if (num == n) // corrisponde il numero partita ...
{ {
sheet.select(i); // ... seleziona la partita sheet.select(i); // ... seleziona la partita
partite_notify(sheet, i, K_TAB); // ed esplodi le sue righe partite_notify(sheet, i, K_TAB); // ed esplodi le sue righe
break; break;
} }
}
} }
if (i >= sheet.items()) if (i >= sheet.items())
f.warning_box("Partita inesistente"); f.warning_box("Partita inesistente");
@ -423,175 +430,180 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
TString_array& scadenze = gm.scadenze().rows_array(); TString_array& scadenze = gm.scadenze().rows_array();
scadenze.destroy(); scadenze.destroy();
const TBill& zio = gm.conto(); // Conto cliente/fornitore
TToken_string& row = partite.row(r); TToken_string& row = partite.row(r);
const int anno = row.get_int(0); // Anno partita const int anno = row.get_int(0); // Anno partita
const TString16 num = row.get(); // Numero partita const TString16 num = row.get(); // Numero partita
gm.set(P_ANNO, anno); // Aggiorna campi di ricerca gm.set(P_ANNO, anno); // Aggiorna campi di ricerca
gm.set(P_NUMERO, num); gm.set(P_NUMERO, num);
TPartita* game = app().partite().exist(zio, anno, num); // Cerca la partita tra quelle editate if (anno > 0)
const bool should_delete_game = (game == NULL); // Ricorda di fare delete
if (should_delete_game) // Se non c'era ...
game = new TPartita(zio, anno, num); // ... creane una temporanea
TImporto tot_lit, tot_val;
TToken_string riga_fattura;
const int lastrow = game->last();
for (int ri = game->first(); ri <= lastrow; ri = game->succ(ri))
{ {
const TRiga_partite& riga = game->riga(ri); const TBill& zio = gm.conto(); // Conto cliente/fornitore
const bool in_valuta = riga.in_valuta();
if (riga.rate() > 0) // Se ci sono rate stampa la riga con la fattura TPartita* game = app().partite().exist(zio, anno, num); // Cerca la partita tra quelle editate
{ const bool should_delete_game = (game == NULL); // Ricorda di fare delete
riga_fattura.add(ri); if (should_delete_game) // Se non c'era ...
riga_fattura.add(""); game = new TPartita(zio, anno, num); // ... creane una temporanea
riga_fattura.add("");
riga_fattura.add(riga.get(PART_DATADOC));
riga_fattura.add(riga.get(PART_DESCR));
add_importo(riga_fattura, TImporto(riga.sezione(), riga.get_real(SCAD_IMPORTO)));
if (in_valuta)
add_importo(riga_fattura, TImporto(riga.sezione(), riga.get_real(SCAD_IMPORTOVAL)), TRUE);
else
riga_fattura.add("");
riga_fattura.add(riga.get(PART_NREG));
riga_fattura.add(riga.get(PART_DATAREG));
riga_fattura.add(riga.get(PART_NUMDOC));
riga_fattura.add(riga.get(PART_PROTIVA));
scadenze.add(riga_fattura);
}
for (int ra = 1; ra <= riga.rate(); ra++) TImporto tot_lit, tot_val;
TToken_string riga_fattura;
const int lastrow = game->last();
for (int ri = game->first(); ri <= lastrow; ri = game->succ(ri))
{ {
const TRiga_scadenze& scad = riga.rata(ra); const TRiga_partite& riga = game->riga(ri);
const bool in_valuta = riga.in_valuta();
TToken_string& row = scadenze.row(scadenze.add(riga_fattura)); if (riga.rate() > 0) // Se ci sono rate stampa la riga con la fattura
row.add(ra, 1);
row.add(scad.get(SCAD_DATASCAD), 2);
add_importo(row, TImporto(riga.sezione(), scad.get_real(SCAD_IMPORTO)), FALSE, 5);
if (in_valuta)
add_importo(row, TImporto(riga.sezione(), scad.get_real(SCAD_IMPORTOVAL)), TRUE, 6);
const int lastp = scad.last();
for (int pa = scad.first(); pa <= lastp; pa = scad.succ(pa))
{ {
const TRectype& pag = scad.row(pa); riga_fattura.add(ri);
riga_fattura.add("");
riga_fattura.add("");
riga_fattura.add(riga.get(PART_DATADOC));
riga_fattura.add(riga.get(PART_DESCR));
add_importo(riga_fattura, TImporto(riga.sezione(), riga.get_real(SCAD_IMPORTO)));
if (in_valuta)
add_importo(riga_fattura, TImporto(riga.sezione(), riga.get_real(SCAD_IMPORTOVAL)), TRUE);
else
riga_fattura.add("");
riga_fattura.add(riga.get(PART_NREG));
riga_fattura.add(riga.get(PART_DATAREG));
riga_fattura.add(riga.get(PART_NUMDOC));
riga_fattura.add(riga.get(PART_PROTIVA));
scadenze.add(riga_fattura);
}
for (int ra = 1; ra <= riga.rate(); ra++)
{
const TRiga_scadenze& scad = riga.rata(ra);
TToken_string& row = scadenze.row(scadenze.add(riga_fattura));
row.add(ra, 1);
row.add(scad.get(SCAD_DATASCAD), 2);
add_importo(row, TImporto(riga.sezione(), scad.get_real(SCAD_IMPORTO)), FALSE, 5);
if (in_valuta)
add_importo(row, TImporto(riga.sezione(), scad.get_real(SCAD_IMPORTOVAL)), TRUE, 6);
const int lastp = scad.last();
for (int pa = scad.first(); pa <= lastp; pa = scad.succ(pa))
{
const TRectype& pag = scad.row(pa);
const TRiga_partite& sum = game->riga(pa);
const char sez = sum.sezione();
TToken_string& row = scadenze.row(scadenze.add(""));
row.add(ri);
row.add(ra);
row.add(scad.get(SCAD_DATASCAD));
row.add(sum.get(PART_DATADOC));
row.add(sum.get(PART_DESCR));
add_importo(row, TImporto(sez, pag.get_real(PAGSCA_IMPORTO)));
if (in_valuta)
add_importo(row, TImporto(sez, pag.get_real(PAGSCA_IMPORTOVAL)), 2);
else
row.add("");
row.add(sum.get(PART_NREG));
row.add(sum.get(PART_DATAREG));
row.add(sum.get(PART_NUMDOC));
row.add("");
row.add(pa);
}
TImporto abb(scad.importo_pagato(TRUE, 0x2));
if (!abb.is_zero())
{
TToken_string& rabb = scadenze.row(scadenze.add(""));
rabb.add("Abbuoni rata ", 4); rabb << ra;
if (in_valuta)
{
add_importo(rabb, scad.importo_pagato(FALSE, 0x2));
add_importo(rabb, abb);
}
else
{
add_importo(rabb, abb, TRUE);
rabb.add("");
}
}
if (in_valuta)
{
TImporto diff(scad.importo_pagato(FALSE, 0x4));
if (!diff.is_zero())
{
TToken_string& rdiff = scadenze.row(scadenze.add(""));
rdiff.add("Differ. cambio rata ", 4); rdiff << ra;
add_importo(rdiff, diff.normalize());
}
}
TToken_string& rsal = scadenze.row(scadenze.add(""));
rsal.add("Saldo rata ", 4); rsal << ra;
if (!scad.chiusa())
{
TImporto sl(scad.residuo(FALSE, 0x7));
sl.normalize();
add_importo(rsal, sl);
tot_lit += sl;
if (in_valuta)
{
sl = scad.residuo(TRUE, 0x3);
sl.normalize();
add_importo(rsal, sl, TRUE);
tot_val += sl;
}
}
}
TRecord_array& unas = game->unassigned();
const int lastp = unas.last_row();
for (int pa = unas.first_row(); pa <= lastp; pa = unas.succ_row(pa))
{
const TRectype& pag = unas.row(pa);
const TRiga_partite& sum = game->riga(pa); const TRiga_partite& sum = game->riga(pa);
const char sez = sum.sezione(); TImporto imp(sum.sezione(), ZERO);
TToken_string& row = scadenze.row(scadenze.add("")); TToken_string& row = scadenze.row(scadenze.add(""));
row.add(ri); row.add(pag.get(PAGSCA_NRIGA));
row.add(ra); row.add(pag.get(PAGSCA_NRATA));
row.add(scad.get(SCAD_DATASCAD)); row.add("");
row.add(sum.get(PART_DATADOC)); row.add(sum.get(PART_DATADOC));
row.add(sum.get(PART_DESCR)); row.add(sum.get(PART_DESCR));
add_importo(row, TImporto(sez, pag.get_real(PAGSCA_IMPORTO))); TImporto i(sum.sezione(), pag.get_real(PAGSCA_IMPORTO));
if (in_valuta) i.normalize();
add_importo(row, TImporto(sez, pag.get_real(PAGSCA_IMPORTOVAL)), 2); tot_lit += i;
add_importo(row, i);
if (in_valuta)
{
i = TImporto(sum.sezione(), pag.get_real(PAGSCA_IMPORTOVAL));
tot_val += i;
i.normalize();
add_importo(row, i, TRUE);
}
else else
row.add(""); row.add("");
row.add(sum.get(PART_NREG)); row.add(sum.get(PART_NREG));
row.add(sum.get(PART_DATAREG)); row.add(sum.get(PART_DATAREG));
row.add(sum.get(PART_NUMDOC)); row.add(sum.get(PART_NUMDOC));
row.add(""); row.add("");
row.add(pa); row.add(pa);
} }
TImporto abb(scad.importo_pagato(TRUE, 0x2));
if (!abb.is_zero())
{
TToken_string& rabb = scadenze.row(scadenze.add(""));
rabb.add("Abbuoni rata ", 4); rabb << ra;
if (in_valuta)
{
add_importo(rabb, scad.importo_pagato(FALSE, 0x2));
add_importo(rabb, abb);
}
else
{
add_importo(rabb, abb, TRUE);
rabb.add("");
}
}
if (in_valuta)
{
TImporto diff(scad.importo_pagato(FALSE, 0x4));
if (!diff.is_zero())
{
TToken_string& rdiff = scadenze.row(scadenze.add(""));
rdiff.add("Differ. cambio rata ", 4); rdiff << ra;
add_importo(rdiff, diff.normalize());
}
}
TToken_string& rsal = scadenze.row(scadenze.add(""));
rsal.add("Saldo rata ", 4); rsal << ra;
if (!scad.chiusa())
{
TImporto sl(scad.residuo(FALSE, 0x7));
sl.normalize();
add_importo(rsal, sl);
tot_lit += sl;
if (in_valuta)
{
sl = scad.residuo(TRUE, 0x3);
sl.normalize();
add_importo(rsal, sl, TRUE);
tot_val += sl;
}
}
} }
TRecord_array& unas = game->unassigned(); if (lastrow > 0)
const int lastp = unas.last_row(); {
for (int pa = unas.first_row(); pa <= lastp; pa = unas.succ_row(pa)) TToken_string& sp = scadenze.row(scadenze.add(""));
{ sp.add("Saldo ", 4); sp << anno << ' ' << num;
const TRectype& pag = unas.row(pa); add_importo(sp, tot_lit.normalize());
const TRiga_partite& sum = game->riga(pa); add_importo(sp, tot_val.normalize(), TRUE);
TImporto imp(sum.sezione(), ZERO);
TToken_string& row = scadenze.row(scadenze.add(""));
row.add(pag.get(PAGSCA_NRIGA));
row.add(pag.get(PAGSCA_NRATA));
row.add("");
row.add(sum.get(PART_DATADOC));
row.add(sum.get(PART_DESCR));
TImporto i(sum.sezione(), pag.get_real(PAGSCA_IMPORTO));
i.normalize();
tot_lit += i;
add_importo(row, i);
if (in_valuta)
{
i = TImporto(sum.sezione(), pag.get_real(PAGSCA_IMPORTOVAL));
tot_val += i;
i.normalize();
add_importo(row, i, TRUE);
}
else
row.add("");
row.add(sum.get(PART_NREG));
row.add(sum.get(PART_DATAREG));
row.add(sum.get(PART_NUMDOC));
row.add("");
row.add(pa);
} }
}
if (lastrow > 0) if (should_delete_game)
{ delete game;
TToken_string& sp = scadenze.row(scadenze.add(""));
sp.add("Saldo ", 4); sp << anno << ' ' << num;
add_importo(sp, tot_lit.normalize());
add_importo(sp, tot_val.normalize(), TRUE);
} }
gm.scadenze().force_update(); gm.scadenze().force_update();
if (should_delete_game)
delete game;
} }
if (k == K_INS) if (k == K_INS)
{ {
@ -615,15 +627,20 @@ bool TGame_mask::scadenze_notify(TSheet_field& scadenze, int r, KEY k)
int TGame_mask::nuova_riga(TPartita& partita) const int TGame_mask::nuova_riga(TPartita& partita) const
{ {
TRiga_partite& part = partita.new_row(); // Creazione nuova riga vuota TRiga_partite& part = partita.new_row(); // Creazione nuova riga vuota
const int nriga = part.get_int(PART_NRIGA); const int nriga = part.get_int(PART_NRIGA);
// Copia dati movimento corrente // Copia dati movimento corrente
part.put(PART_NREG, _numreg); // Numero operazione part.put(PART_NREG, _numreg); // Numero operazione
part.put(PART_NUMRIG, _numrig); // Riga su cui ho cliccato part.put(PART_NUMRIG, _numrig); // Riga su cui ho cliccato
// Forza il gruppo/conto cliente corretto
part.put(PART_GRUPPOCL, conto().gruppo());
part.put(PART_CONTOCL, conto().conto());
// Setta il cambio corrente
const real cambio(get(P_CAMBIO)); const real cambio(get(P_CAMBIO));
part.put(PART_CAMBIO, cambio); part.put(PART_CAMBIO, cambio);
part.put(PART_CODVAL, get(P_VALUTA)); part.put(PART_CODVAL, get(P_VALUTA));
part.put(PART_DATACAM, get(P_DATACAMBIO)); part.put(PART_DATACAM, get(P_DATACAMBIO));
@ -745,7 +762,6 @@ int TGame_mask::nuovo_pagamento(TPartita& partita, int nriga, int rata) const
return nrigp; return nrigp;
} }
bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k) bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
{ {
if (k == K_SPACE) if (k == K_SPACE)
@ -773,6 +789,13 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
if (nrata != 0 && nrigp == 0) if (nrata != 0 && nrigp == 0)
{ {
#ifdef __EXTRA__
gm._tipomov = 3;
gm._descr = "";
gm._numdoc = "";
gm._datadoc = TDate(TODAY);
gm._sezione = game.riga(nriga).sezione() == 'D' ? 'A' : 'D';
#endif
nrigp = gm.nuovo_pagamento(game, nriga, nrata); nrigp = gm.nuovo_pagamento(game, nriga, nrata);
nreg = gm._numreg; nreg = gm._numreg;
} }
@ -793,38 +816,19 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
} }
} }
else else
{
#ifdef __EXTRA__
gm.prima_nota(nreg);
#else
return f.error_box("Modificare il movimento %ld", nreg); return f.error_box("Modificare il movimento %ld", nreg);
#endif
}
} }
else else
{ // Si vogliono editare le rate { // Si vogliono editare le rate
#ifdef __EXTRA__ #ifdef __EXTRA__
if (nreg > 0) if (nreg > 0)
{ gm.prima_nota(nreg);
bool can_run = TRUE;
if (gm._changed)
{
can_run = yesno_box("Salvare le parite modificate?");
if (can_run)
{
app().partite().rewrite();
gm._changed = FALSE; // Resetta flag di cambiato
}
}
if (can_run)
{
const char* pn = "cg2 -0";
TExternal_app prima_nota(pn);
TString16 numreg; numreg << "1|" << nreg;
TMessage msg(pn, MSG_LN, numreg);
msg.send(); // Messaggio di collegamento al movimento nreg
app().partite().destroy(); // Distrugge tutte le partite in memoria
prima_nota.run(); // Lancia la prima nota
const int anno = gm.get_int(P_ANNO);
const TString16 numero = gm.get(P_NUMERO);
gm.fill_partite(anno, numero); // Ripristina partite
}
}
else else
gm.edit_fattura(game, nriga); gm.edit_fattura(game, nriga);
#else #else
@ -988,6 +992,12 @@ int TGame_mask::update_partita(const TPartita& game, int prow)
} }
else else
prow = partite().items()-1; prow = partite().items()-1;
if (prow == 0)
{
const char all = game.allineamento_richiesto();
field(P_NUMERO).set_justify(all == 'R');
}
return prow; return prow;
} }
@ -1029,6 +1039,13 @@ void TGame_mask::update_saldo_clifo()
r << conto().sottoconto(); r << conto().sottoconto();
} }
bool TGame_mask::same_number(const char* s1, const char* s2) const
{
TString t1(s1); t1.trim();
TString t2(s2); t2.trim();
return t1 == t2;
}
void TGame_mask::fill_partite(int annorif, const char* numrif) void TGame_mask::fill_partite(int annorif, const char* numrif)
{ {
const bool all = get(P_SHOWALL).not_empty(); const bool all = get(P_SHOWALL).not_empty();
@ -1043,7 +1060,8 @@ void TGame_mask::fill_partite(int annorif, const char* numrif)
for (TPartita* gioco = app().partite().first(); gioco != NULL; gioco = app().partite().next()) for (TPartita* gioco = app().partite().first(); gioco != NULL; gioco = app().partite().next())
{ {
const int added = update_partita(*gioco, -1); // Memorizza posizione di inserimento const int added = update_partita(*gioco, -1); // Memorizza posizione di inserimento
if (first_game < 0 && gioco->anno() == annorif && gioco->numero() == numrif) if (first_game < 0 && gioco->anno() == annorif &&
same_number(gioco->numero(), numrif))
first_game = added; first_game = added;
} }
@ -1074,7 +1092,8 @@ void TGame_mask::fill_partite(int annorif, const char* numrif)
if (all || !game.chiusa()) if (all || !game.chiusa())
added = update_partita(game, -1); added = update_partita(game, -1);
if (first_game < 0 && added >= 0 && anno == annorif && num == numrif) if (first_game < 0 && added >= 0 &&
anno == annorif && same_number(num, numrif))
first_game = added; first_game = added;
} }
partita.put(PART_NRIGA, 9999); // Forza lettura partita successiva nella prossima read partita.put(PART_NRIGA, 9999); // Forza lettura partita successiva nella prossima read
@ -1092,7 +1111,7 @@ void TGame_mask::fill_partite(int annorif, const char* numrif)
else else
{ {
scadenze().destroy(); scadenze().destroy();
scadenze().force_update(); // scadenze().force_update();
} }
app().end_wait(); app().end_wait();
} }

View File

@ -688,6 +688,8 @@ word TPagamento::recalc_rate(int row, bool is_perc_modified,
TToken_string& ss = (TToken_string&)srate[k]; TToken_string& ss = (TToken_string&)srate[k];
tt.add(typ,2); tt.add(typ,2);
ss.add(typ,2); ss.add(typ,2);
tt.add(ulc,5);
ss.add(ulc,5);
need_recalc = TRUE; need_recalc = TRUE;
// no error is possible // no error is possible
} }
@ -1384,9 +1386,8 @@ void TPagamento::set_sheet(TSheet_field& sf, int sscad)
ts.add(paid ? "X" : "", 11); // 11 - Pagaya ts.add(paid ? "X" : "", 11); // 11 - Pagaya
} }
// destroy remaining and don't avoid screen update forever and ever
for (int d = sf.items()-1; d >= i; d--) for (int d = sf.items()-1; d >= i; d--)
sf.destroy(d); sf.destroy(d);
sf.enable_column(2, in_valuta); sf.enable_column(2, in_valuta);
} }

View File

@ -527,10 +527,16 @@ int TRiga_partite::ultima_ratapagata() const
return r; return r;
} }
bool TRiga_partite::is_fattura() const
{
return get_int(PART_TIPOMOV) == 1;
}
int TRiga_partite::read(TBaseisamfile& f, word op) int TRiga_partite::read(TBaseisamfile& f, word op)
{ {
int err = TRectype::read(f, op); int err = TRectype::read(f, op);
if (err == NOERR && get_int(PART_TIPOMOV) == 1) if (err == NOERR && is_fattura())
{ {
TRiga_scadenze* s = new TRiga_scadenze(this); TRiga_scadenze* s = new TRiga_scadenze(this);
err = rows_array().read(s); // Deve esistere almento una scadenza err = rows_array().read(s); // Deve esistere almento una scadenza
@ -541,8 +547,26 @@ int TRiga_partite::read(TBaseisamfile& f, word op)
return err; return err;
} }
int TRiga_partite::ultimo_pagamento(int r) const int TRiga_partite::write(TBaseisamfile& f) const
{ {
const int err = is_fattura() ? TTree_rectype::write(f) : TRectype::write(f);
return err;
}
int TRiga_partite::rewrite(TBaseisamfile& f) const
{
const int err = is_fattura() ? TTree_rectype::rewrite(f) : TRectype::rewrite(f);
return err;
}
int TRiga_partite::remove(TBaseisamfile& f) const
{
const int err = is_fattura() ? TTree_rectype::remove(f) : TRectype::remove(f);
return err;
}
int TRiga_partite::ultimo_pagamento(int r) const
{
const TRiga_scadenze& s = rata(r); const TRiga_scadenze& s = rata(r);
return s.last(); return s.last();
} }
@ -657,7 +681,14 @@ char TPartita::allineamento_richiesto() const
{ {
char all; char all;
if (_cli_align <= ' ' || _for_align <= ' ') if (_cli_align <= ' ' || _for_align <= ' ')
{
#ifdef DBG
warning_box("Questa applicazione usa le partite ma ignora i "
"parametri ditta relativi al loro allineamento: "
"continuiamo pure cosi', facciamoci del male!");
#endif
carica_allineamento(); carica_allineamento();
}
switch (conto().tipo()) switch (conto().tipo())
{ {
case 'C': all = _cli_align; break; case 'C': all = _cli_align; break;
@ -685,19 +716,16 @@ void TPartita::allinea(char all)
if (all <= ' ') if (all <= ' ')
all = allineamento_richiesto(); all = allineamento_richiesto();
if (_num.len() < NUMLEN) if (all == 'R')
{ _num.right_just(NUMLEN);
if (all == 'R') else
_num.right_just(NUMLEN); _num.trim();
else
_num.trim();
if (ok()) if (ok())
{ {
_part.renum_key(PART_NUMPART, _num); _part.renum_key(PART_NUMPART, _num);
_unassigned.renum_key(PAGSCA_NUMPART, _num); _unassigned.renum_key(PAGSCA_NUMPART, _num);
} }
}
} }
@ -719,12 +747,10 @@ bool TPartita::read(const TBill& clifo, int year, const char* num)
part.put(PART_NUMPART, _num); part.put(PART_NUMPART, _num);
TRectype filter(part.curr()); TRectype filter(part.curr());
// Cerca la partita usando l'allineamento richiesto dall'utente
// Cerca la partita usando l'allineamento richiesto dai parametri ditta
if (part.read(_isgteq) == NOERR && part.curr() == filter) if (part.read(_isgteq) == NOERR && part.curr() == filter)
{ {
// Memorizza l'allineamento utilizzato per la lettura // Trovata!
_align = allineamento_corrente();
} }
else else
{ {
@ -737,13 +763,18 @@ bool TPartita::read(const TBill& clifo, int year, const char* num)
// Riprova a cercarla col nuovo allineamento // Riprova a cercarla col nuovo allineamento
filter.put(PART_NUMPART, _num); filter.put(PART_NUMPART, _num);
if (part.read(_isgteq) == NOERR && part.curr() == filter) if (part.read(_isgteq) == NOERR && part.curr() == filter)
_align = allineamento_corrente(); // Esiste: memorizzo l'allineamento {
// Esiste: memorizzo l'allineamento
}
else else
{
allinea(); // Non esite: e' una nuova partita! allinea(); // Non esite: e' una nuova partita!
}
} }
} }
else else
_num.trim(); _num.trim();
_align = allineamento_corrente();
TRiga_partite* partita = new TRiga_partite(this); // Record campione della partita TRiga_partite* partita = new TRiga_partite(this); // Record campione della partita
TString16 str; TString16 str;
@ -1110,6 +1141,13 @@ bool TPartita::modifica_pagamento(const TRectype& new_pag)
bool TPartita::chiusa(bool update) bool TPartita::chiusa(bool update)
{ {
bool chiusa = FALSE; bool chiusa = FALSE;
const int ultima = last();
if (ultima > 0)
{
const TRiga_partite& row = riga(ultima);
chiusa = row.get_bool(PART_CHIUSA);
}
if (update) if (update)
{ {
@ -1141,15 +1179,6 @@ bool TPartita::chiusa(bool update)
} }
} }
} }
else
{
const int ultima = last();
if (ultima > 0)
{
const TRiga_partite& row = riga(ultima);
chiusa = row.get_bool(PART_CHIUSA);
}
}
return chiusa; return chiusa;
} }

View File

@ -154,13 +154,17 @@ protected:
public: // TTree_rectype public: // TTree_rectype
virtual TObject* dup() const { return new TRiga_partite(*this); } virtual TObject* dup() const { return new TRiga_partite(*this); }
virtual int read(TBaseisamfile& f, word op); virtual int read(TBaseisamfile& f, word op);
virtual int write(TBaseisamfile& f) const;
virtual int rewrite(TBaseisamfile& f) const;
virtual int remove(TBaseisamfile& f) const;
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(); void elimina_rate();
TRiga_scadenze& new_row(int r = 0); TRiga_scadenze& new_row(int r = 0);
bool is_fattura() const;
int ultima_ratapagata() const; int ultima_ratapagata() const;
int ultimo_pagamento(int rata) const; int ultimo_pagamento(int rata) const;
int rata_con_abbuoni_diffcam() const; int rata_con_abbuoni_diffcam() const;
@ -192,11 +196,15 @@ class TPartita : public TSortable
protected: protected:
const char* build_key(TString& key) const; const char* build_key(TString& key) const;
char allineamento_iniziale() const { return _align; }
char allineamento_corrente() const;
void allinea(char all = ' ');
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; virtual int compare(const TSortable& s) const;
public: public:
enum { NUMLEN = 7, UNASSIGNED = 9999 }; enum { NUMLEN = 7, UNASSIGNED = 9999 };
@ -251,10 +259,7 @@ public:
bool modifica_pagamento(const TRectype& new_pag); bool modifica_pagamento(const TRectype& new_pag);
static void carica_allineamento(); static void carica_allineamento();
char allineamento_iniziale() const { return _align; }
char allineamento_corrente() const;
char allineamento_richiesto() const; char allineamento_richiesto() const;
void allinea(char all = ' ');
TPartita(const TBill& clifo, int anno, const char* num); TPartita(const TBill& clifo, int anno, const char* num);
TPartita(const TRectype& part); TPartita(const TRectype& part);