Gestione allineamento numero partita

git-svn-id: svn://10.65.10.50/trunk@2115 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1995-11-09 08:05:53 +00:00
parent ce263d99db
commit 4dfa755e87
7 changed files with 242 additions and 103 deletions

View File

@ -410,9 +410,11 @@ void TPrimanota_application::on_config_change()
TConfig cnf(CONFIG_DITTA); TConfig cnf(CONFIG_DITTA);
_ges_val = cnf.get_bool("GesVal"); _ges_val = cnf.get_bool("GesVal");
_ges_sal = cnf.get_bool("GesSal"); _ges_sal = cnf.get_bool("GesSal");
_npart_is_prot = cnf.get_bool("RifPro");
_num_cli = cnf.get_bool("NrCliDx"); _num_cli = cnf.get_bool("NrCliDx");
_num_for = cnf.get_bool("NrForDx"); _num_for = cnf.get_bool("NrForDx");
_npart_is_prot = cnf.get_bool("RifPro"); TPartita::carica_allineamento();
} }
@ -466,7 +468,7 @@ void TPrimanota_application::init_mask(TMask& m)
} }
// Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_DATACAMBIO (GROUP 3) // Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_DATACAMBIO (GROUP 3)
const bool valuta = _ges_val && causale().valuta(); const bool valuta = _ges_val && is_saldaconto() && causale().valuta();
m.show(-3, valuta); m.show(-3, valuta);
} }
@ -1138,6 +1140,16 @@ void TPrimanota_application::genera_incasso(const char* causimm)
} }
} }
bool TPrimanota_application::is_percipient(long forn, char& tipper, long& codper) const
{
TLocalisamfile fornitori(LF_CLIFO);
fornitori.put("TIPOCF", "F");
fornitori.put("CODCF", forn);
fornitori.read();
tipper = fornitori.get_char(CLI_TIPOAPER);
codper = fornitori.get_long(CLI_CODANAGPER);
return codper > 0;
}
long TPrimanota_application::calcola_m770(int tipo_coll, real& spese, real& compenso, long TPrimanota_application::calcola_m770(int tipo_coll, real& spese, real& compenso,
real& iva, real& ritfis) real& iva, real& ritfis)
@ -1176,34 +1188,36 @@ long TPrimanota_application::calcola_m770(int tipo_coll, real& spese, real& comp
} }
} }
if (tipo_coll == 3 || tipo_coll == 6) if (tipo_coll == 3 || tipo_coll == 7)
{ {
TBill zio; causale().bill(1, zio);
TImporto imp; TImporto imp;
TString_array& rcg = cgs().rows_array(); TString_array& rcg = cgs().rows_array();
for (int i = 0; i < rcg.items(); i++) for (int i = 0; i < rcg.items(); i++)
{ {
TToken_string& row = rcg.row(i); TToken_string& row = rcg.row(i);
imp = row; imp = row;
if (tipo_coll == 3)
{ const char cf = row.get_char(2);
const char cf = row.get_char(2); if (cf == 'F') // Evviva, e' un fornitore!
if (cf == 'F') {
const long cod = row.get_long(5);
char tipper;
long codper;
if (!is_percipient(cod, tipper, codper))
continue; // Se non e' percipente ignoralo
if (forn == 0 && tipo_coll == 3)
{ {
if (forn == 0) forn = cod; // E' il primo che trovo!
forn = row.get_long(5);
else
{
forn = 0;
compenso = ZERO;
break;
}
compenso = imp.valore();
} }
} else else // Fine ricerca.
if (tipo_coll == 6) {
compenso += imp.valore(); forn = 0;
compenso = ZERO;
break;
}
compenso = imp.valore();
}
} }
} }
@ -1225,10 +1239,22 @@ long TPrimanota_application::calcola_m770(int tipo_coll, real& spese, real& comp
} }
} }
if (tipo_coll == 6)
{
TString_array& rcg = cgs().rows_array();
TImporto imp;
for (int i = 0; i < rcg.items(); i++)
{
TToken_string& row = rcg.row(i);
imp = row;
compenso += imp.valore();
}
}
return forn; return forn;
} }
bool TPrimanota_application::link_m770() bool TPrimanota_application::link_m770()
{ {
const int m770 = causale().link_m770(); const int m770 = causale().link_m770();
@ -1244,32 +1270,22 @@ bool TPrimanota_application::link_m770()
{ {
if (m770 == 1 || m770 == 5) if (m770 == 1 || m770 == 5)
{ {
TLocalisamfile fornitori(LF_CLIFO); const long forn = curr_mask().get_long(F_FORNITORE);
fornitori.put("TIPOCF", "F"); if (is_percipient(forn, tipper, codper))
fornitori.put("CODCF", curr_mask().get(F_FORNITORE));
fornitori.read();
tipper = fornitori.get_char(CLI_TIPOAPER);
codper = fornitori.get_long(CLI_CODANAGPER);
if (codper > 0)
calcola_m770(tipo_coll = 1, spese, compenso, imposte, ritenute); calcola_m770(tipo_coll = 1, spese, compenso, imposte, ritenute);
} }
} }
else else // Movimento puramente contabile
switch (m770) switch (m770)
{ {
case 1: case 1:
{ {
const long f = calcola_m770(tipo_coll = 3, spese, compenso, imposte, ritenute); tipo_coll = is_saldaconto() ? 7 : 3;
if (f != 0) const long forn = calcola_m770(tipo_coll, spese, compenso, imposte, ritenute);
{ if (forn != 0)
TLocalisamfile fornitori(LF_CLIFO); is_percipient(forn, tipper, codper);
fornitori.put("TIPOCF", "F"); else
fornitori.put("CODCF", f); tipo_coll = 7;
fornitori.read();
tipper = fornitori.get_char(CLI_TIPOAPER);
codper = fornitori.get_long(CLI_CODANAGPER);
}
else tipo_coll = 7;
} }
break; break;
case 2: case 2:

View File

@ -324,7 +324,7 @@ void TPrimanota_application::disable_cgs_cells(int n, char tipo)
} }
break; break;
case 'K': // Riga cliente/fornitore per saldaconto case 'K': // Riga cliente/fornitore per saldaconto
if (n == cg.items()-1) if (curr_mask().is_running() && n == cg.items()-1) // Sono in inserimento di una riga nuova
break; break;
first = 2; first = 2;
case 'I': case 'I':

View File

@ -218,6 +218,7 @@ protected:
bool notify_cgline_deletion(TPartita& partita, long nreg, int numrig); bool notify_cgline_deletion(TPartita& partita, long nreg, int numrig);
bool notify_cgline_deletion(int numrig); bool notify_cgline_deletion(int numrig);
bool is_percipient(long forn, char& tipper, long& codper) const;
long calcola_m770(int tipo_coll, real& spese, real& compenso, real& iva, real& ritfis); long calcola_m770(int tipo_coll, real& spese, real& compenso, real& iva, real& ritfis);
bool link_m770(); bool link_m770();

View File

@ -245,6 +245,7 @@ TGame_mask::TGame_mask(const TBill& bill, long numreg, int riga)
set_handler(P_CAMBIO, cambio_handler); set_handler(P_CAMBIO, cambio_handler);
partite().set_notify(partite_notify); partite().set_notify(partite_notify);
scadenze().set_notify(scadenze_notify); scadenze().set_notify(scadenze_notify);
scadenze().sheet_mask().set_handler(100, edit_scadenza_handler); scadenze().sheet_mask().set_handler(100, edit_scadenza_handler);
} }
@ -319,19 +320,21 @@ bool TGame_mask::cambio_handler(TMask_field& f, KEY k)
// Metodi dei campi e della maschera principale // Metodi dei campi e della maschera principale
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Aggiorna il campo con il residuo da spendere sui pagamenti
real TGame_mask::aggiorna_residuo() real TGame_mask::aggiorna_residuo()
{ {
#ifdef __EXTRA__ #ifdef __EXTRA__
return ZERO; return ZERO;
#else #else
_importo = app().get_cgs_imp(_numrig-1); _importo = app().get_cgs_imp(_numrig-1); // Importo sulla riga contabile
TImporto residuo(_importo); TImporto residuo(_importo);
residuo -= app().partite().importo_speso(_numreg, _numrig); residuo -= app().partite().importo_speso(_numreg, _numrig); // Sottraggo importi spesi
set(P_RESIDUO, residuo.valore().string()); set(P_RESIDUO, residuo.valore());
return residuo.valore(); return residuo.valore();
#endif #endif
} }
// Scandisce tutte le partite per cercare la prima del movimento corrente e la sua valuta
bool TGame_mask::cerca_valuta(TValuta& val) const bool TGame_mask::cerca_valuta(TValuta& val) const
{ {
bool found = FALSE; bool found = FALSE;
@ -441,7 +444,7 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k)
const TRiga_partite& riga = game->riga(ri); const TRiga_partite& riga = game->riga(ri);
const bool in_valuta = riga.in_valuta(); const bool in_valuta = riga.in_valuta();
if (riga.rate() != 0) if (riga.rate() > 0) // Se ci sono rate stampa la riga con la fattura
{ {
riga_fattura.add(ri); riga_fattura.add(ri);
riga_fattura.add(""); riga_fattura.add("");
@ -763,28 +766,37 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k)
const TString16 numero = gm.get(P_NUMERO); const TString16 numero = gm.get(P_NUMERO);
TPartita& game = app().partite().partita(bill, anno, numero); TPartita& game = app().partite().partita(bill, anno, numero);
const int nrata = m.get_int(102); // Rata selezionata (puo' essere 0) long nreg = m.get_long(108); // Numero registrazione
int nrigp = m.get_int(112); // Pagamento selezionato (puo' essere 0) const int nrata = m.get_int(102); // Rata selezionata (puo' essere 0)
int nrigp = m.get_int(112); // Pagamento selezionato (puo' essere 0)
if (nrata != 0 && nrigp == 0) if (nrata != 0 && nrigp == 0)
{
nrigp = gm.nuovo_pagamento(game, nriga, nrata); nrigp = gm.nuovo_pagamento(game, nriga, nrata);
nreg = gm._numreg;
}
if (nrigp > 0) // Si vuole editare un pagamento if (nrigp > 0) // Si vuole editare un pagamento
{ {
const bool dirty = gm.edit_pagamento(game, nriga, nrata, nrigp); if (nreg == gm._numreg)
if (dirty) {
{ const bool dirty = gm.edit_pagamento(game, nriga, nrata, nrigp);
gm.update_partita(game, gm._riga_partite); if (dirty)
partite_notify(gm.partite(), gm._riga_partite, K_TAB); {
gm._changed = TRUE; gm.update_partita(game, gm._riga_partite);
partite_notify(gm.partite(), gm._riga_partite, K_TAB);
if (!game.esiste(nriga, nrata, nrigp)) gm._changed = TRUE;
m.stop_run(K_ESC);
} if (!game.esiste(nriga, nrata, nrigp))
m.stop_run(K_ESC);
}
}
else
return f.error_box("Modificare il movimento %ld", nreg);
} }
else else
{ // Si vogliono editare le rate { // Si vogliono editare le rate
const long nreg = m.get_long(108);
#ifdef __EXTRA__ #ifdef __EXTRA__
if (nreg > 0) if (nreg > 0)
{ {
@ -1030,7 +1042,7 @@ 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); 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 && gioco->numero() == numrif)
first_game = added; first_game = added;
} }
@ -1040,9 +1052,10 @@ void TGame_mask::fill_partite(int annorif, const char* numrif)
if (conto().tipo() > ' ') // Ignora gruppo e conto dei clifo if (conto().tipo() > ' ') // Ignora gruppo e conto dei clifo
{ {
partita.put(PART_TIPOCF, conto().tipo()); partita.put(PART_TIPOCF, conto().tipo());
partita.put(PART_SOTTOCONTO, conto().sottoconto()); partita.put(PART_SOTTOCONTO, conto().codclifo());
} }
else conto().put(partita.curr()); // Scrive completamente i conti normali else
conto().put(partita.curr()); // Scrive completamente i conti normali
const TRectype filter(partita.curr()); // Record campione const TRectype filter(partita.curr()); // Record campione
@ -1117,22 +1130,22 @@ bool TGame_mask::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) co
m.reset(S_IMPORTOVAL); // .. anche in valuta m.reset(S_IMPORTOVAL); // .. anche in valuta
m.reset(S_RITENUTE); // Azzera ritenute m.reset(S_RITENUTE); // Azzera ritenute
} }
else else
{ {
somma.put(PART_DESCR, m.get(S_DESCAGG)); // Aggiorna descrizione (comune ai pagamenti) somma.put(PART_DESCR, m.get(S_DESCAGG)); // Aggiorna descrizione (comune ai pagamenti)
} }
TRectype newpag(oldpag); TRectype newpag(oldpag);
m.get_pag(newpag); m.get_pag(newpag);
const TValuta val; // Non cambiare valuta! const TValuta val; // Non cambiare valuta!
#ifdef __EXTRA__ #ifdef __EXTRA__
p.modifica_pagamento(newpag); p.modifica_pagamento(newpag);
#else #else
app().notify_edit_pagamento(p, newpag, val); app().notify_edit_pagamento(p, newpag, val);
#endif #endif
} }
return key != K_ESC; return key != K_ESC;
} }
#ifndef __EXTRA__ #ifndef __EXTRA__

View File

@ -62,6 +62,7 @@ BEGIN
DISPLAY "Classificazione" CODTAB[2,2] DISPLAY "Classificazione" CODTAB[2,2]
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT 106 CODTAB[2,2] OUTPUT 106 CODTAB[2,2]
OUTPUT 107 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END

View File

@ -1,3 +1,4 @@
#include <config.h>
#include <mask.h> #include <mask.h>
#include "saldacon.h" #include "saldacon.h"
@ -143,7 +144,6 @@ int TValuta::compare(const TSortable& s) const
return c.sign(); return c.sign();
} }
void TValuta::get(const TRectype& rec) void TValuta::get(const TRectype& rec)
{ {
_cod = rec.get("CODVAL"); _cod = rec.get("CODVAL");
@ -600,17 +600,19 @@ int TRiga_partite::rata_con_abbuoni_diffcam() const
// TPartita // TPartita
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
char TPartita::_cli_align = 'L'; char TPartita::_cli_align = ' ';
char TPartita::_for_align = 'L'; char TPartita::_for_align = ' ';
TPartita::TPartita(const TBill& clifo, int anno, const char* num) TPartita::TPartita(const TBill& clifo, int anno, const char* num)
: _part(LF_PARTITE, PART_NRIGA), _unassigned(LF_PAGSCA, "NRIGP") : _part(LF_PARTITE, PART_NRIGA), _unassigned(LF_PAGSCA, "NRIGP"),
_align(' ')
{ {
read(clifo, anno, num); read(clifo, anno, num);
} }
TPartita::TPartita(const TRectype& r) TPartita::TPartita(const TRectype& r)
: _part(LF_PARTITE, PART_NRIGA), _unassigned(LF_PAGSCA, "NRIGP") : _part(LF_PARTITE, PART_NRIGA), _unassigned(LF_PAGSCA, "NRIGP"),
_align(' ')
{ {
TBill clifo; clifo.get(r); TBill clifo; clifo.get(r);
if (clifo.gruppo() == 0) if (clifo.gruppo() == 0)
@ -627,12 +629,12 @@ TPartita::TPartita(const TRectype& r)
const char* TPartita::build_key(TString& key) const const char* TPartita::build_key(TString& key) const
{ {
if (_conto.tipo() > ' ') if (_conto.tipo() > ' ')
key.format("%c%3d%3d%6ld%4d%s", _conto.tipo(), 0, 0, _conto.sottoconto(), key.format("%c%3d%3d%6ld%4d%*s", _conto.tipo(), 0, 0, _conto.sottoconto(),
_anno, (const char*)_num); _anno, NUMLEN, (const char*)_num);
else else
key.format("%c%3d%3d%6ld%4d%s", key.format("%c%3d%3d%6ld%4d%*s",
_conto.tipo(), _conto.gruppo(), _conto.conto(), _conto.sottoconto(), _conto.tipo(), _conto.gruppo(), _conto.conto(), _conto.sottoconto(),
_anno, (const char*)_num); _anno, NUMLEN, (const char*)_num);
return key; return key;
} }
@ -644,30 +646,105 @@ int TPartita::compare(const TSortable& s) const
return strcmp(key, par); return strcmp(key, par);
} }
void TPartita::modifica_allineamento(char ac, char af) void TPartita::carica_allineamento()
{ {
CHECK(ac == 'L' || ac == 'R', "Allineamento clienti errato"); TConfig cd(CONFIG_DITTA, "cg");
_cli_align = ac; _cli_align = cd.get_bool("NrCliDx") ? 'R' : 'L';
CHECK(af == 'L' || af == 'R', "Allineamento fornitori errato"); _for_align = cd.get_bool("NrForDx") ? 'R' : 'L';
_for_align = af;
} }
char TPartita::allineamento_richiesto() const
{
char all;
if (_cli_align <= ' ' || _for_align <= ' ')
carica_allineamento();
switch (conto().tipo())
{
case 'C': all = _cli_align; break;
case 'F': all = _for_align; break;
default : all = ' '; break;
}
return all;
}
// Ritorna l'allineamento corrente del numero partita // Ritorna l'allineamento corrente del numero partita
// L = Sinistra, R = Destra, ' ' = indeterminato // L = Sinistra, R = Destra, ' ' = indeterminato
char TPartita::allineamento_corrente() const char TPartita::allineamento_corrente() const
{ {
char all = numero()[0] == ' ' ? 'R' : 'L'; const TString& n = numero();
if (all == 'L' && numero()[6] != ' ')
char all = n[0] == ' ' ? 'R' : 'L';
if (all == 'L' && n.len() == NUMLEN && n[6] != ' ')
all = ' '; all = ' ';
return all; return all;
} }
void TPartita::allinea(char all)
{
if (all <= ' ')
all = allineamento_richiesto();
if (_num.len() < NUMLEN)
{
if (all == 'R')
_num.right_just(NUMLEN);
else
_num.trim();
if (ok())
{
_part.renum_key(PART_NUMPART, _num);
_unassigned.renum_key(PAGSCA_NUMPART, _num);
}
}
}
// Costruisce le righe della partita // Costruisce le righe della partita
bool TPartita::read(const TBill& clifo, int year, const char* num) bool TPartita::read(const TBill& clifo, int year, const char* num)
{ {
_conto = clifo; _conto = clifo;
_anno = year; _anno = year;
_num = num; _num = num;
if (_conto.tipo() > ' ' && allineamento_corrente() > ' ')
{
// Prepara la chiave per verificare l'esistenza della partita specificata
TLocalisamfile part(LF_PARTITE);
part.zero();
part.put(PART_TIPOCF, _conto.tipo());
part.put(PART_SOTTOCONTO, _conto.codclifo());
part.put(PART_ANNO, _anno);
part.put(PART_NUMPART, _num);
TRectype filter(part.curr());
// Cerca la partita usando l'allineamento richiesto dai parametri ditta
if (part.read(_isgteq) == NOERR && part.curr() == filter)
{
// Memorizza l'allineamento utilizzato per la lettura
_align = allineamento_corrente();
}
else
{
// Se non la trova inverte l'allineamento
if (allineamento_corrente() == 'R')
_num.trim();
else
_num.right_just(NUMLEN);
// Riprova a cercarla col nuovo allineamento
filter.put(PART_NUMPART, _num);
if (part.read(_isgteq) == NOERR && part.curr() == filter)
_align = allineamento_corrente(); // Esiste: memorizzo l'allineamento
else
allinea(); // Non esite: e' una nuova partita!
}
}
else
_num.trim();
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;
str << clifo.tipo(); str << clifo.tipo();
@ -702,21 +779,52 @@ bool TPartita::reread()
bool TPartita::write(bool re) const bool TPartita::write(bool re) const
{ {
if (conto().tipo() > ' ') if (ok() && conto().tipo() > ' ')
{ {
for (int r = last(); r > 0; r = pred(r)) for (int r = last(); r > 0; r = pred(r))
{ {
TRiga_partite& row = riga(r); TRiga_partite& row = riga(r);
row.put(PART_GRUPPOCL, conto().gruppo()); row.put(PART_GRUPPOCL, conto().gruppo());
row.put(PART_CONTOCL, conto().conto()); row.put(PART_CONTOCL, conto().conto());
}
const char cur_align = allineamento_corrente();
const char req_align = allineamento_richiesto();
if (cur_align > ' ' && cur_align != req_align)
{
if (yesno_box("La partita %d '%s' non rispetta l'allineamento "
"specificato nei parametri ditta: si desidera correggerlo?",
anno(), (const char*)numero()))
{
// Riallinea tutti i numeri partita nelle righe. rate e pagamenti
((TPartita*)this)->allinea(req_align);
}
} }
} }
int err = _part.write(re); int err = _part.write(re);
if (err == NOERR) if (err == NOERR)
err = _unassigned.write(re); err = _unassigned.write(re);
// Se l'allineamento e' cambiato cancello la vecchia partita
if (err == NOERR && allineamento_corrente() != allineamento_iniziale())
{
// Costruisce il vecchio numero partita
TString16 num = numero();
if (allineamento_iniziale() == 'R')
num.right_just(NUMLEN);
else
num.trim();
// Cancella vecchia partita
TPartita canc(conto(), anno(), num);
canc.remove();
}
return err == NOERR; return err == NOERR;
} }
// Cancella tutta una partita
bool TPartita::remove() bool TPartita::remove()
{ {
_part.destroy_rows(); _part.destroy_rows();
@ -1182,10 +1290,12 @@ void TPartita::scollega_pagamenti(int r, int s)
const TString& TPartite_array::key(const TBill& clifo, int anno, const char* num) const TString& TPartite_array::key(const TBill& clifo, int anno, const char* num)
{ {
if (clifo.tipo() > ' ') if (clifo.tipo() > ' ')
_key.format("%c%3d%3d%6ld%4d%s", clifo.tipo(), 0, 0, clifo.sottoconto(), anno, num); _key.format("%c%3d%3d%6ld%4d%*s", clifo.tipo(), 0, 0, clifo.sottoconto(),
anno, TPartita::NUMLEN, num);
else else
_key.format("%c%3d%3d%6ld%4d%s", _key.format("%c%3d%3d%6ld%4d%*s",
clifo.tipo(), clifo.gruppo(), clifo.conto(), clifo.sottoconto(), anno, num); clifo.tipo(), clifo.gruppo(), clifo.conto(), clifo.sottoconto(),
anno, TPartita::NUMLEN, num);
return _key; return _key;
} }
@ -1208,7 +1318,7 @@ TPartita* TPartite_array::find(const TRectype& r, bool create)
if (zio.gruppo() == 0) if (zio.gruppo() == 0)
{ {
zio.set(r.get_int(PART_GRUPPOCL), r.get_int(PART_CONTOCL), zio.set(r.get_int(PART_GRUPPOCL), r.get_int(PART_CONTOCL),
zio.sottoconto(), zio.tipo()); zio.codclifo(), zio.tipo());
} }
const int anno = r.get_int(PART_ANNO); const int anno = r.get_int(PART_ANNO);
const char* num = r.get_str(PART_NUMPART); const char* num = r.get_str(PART_NUMPART);

View File

@ -198,7 +198,7 @@ public: // TObject
virtual int compare(const TSortable& s) const; virtual int compare(const TSortable& s) const;
public: public:
enum { UNASSIGNED = 9999 }; enum { NUMLEN = 7, 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& new_row(int r = 0); TRiga_partite& new_row(int r = 0);
@ -250,13 +250,11 @@ public:
bool update); bool update);
bool modifica_pagamento(const TRectype& new_pag); bool modifica_pagamento(const TRectype& new_pag);
static void modifica_allineamento(char a_cli, char a_for); static void carica_allineamento();
static char allineamento_clienti() { return _cli_align; }
static char allineamento_fornitori() { return _for_align; }
bool allinea();
char allineamento_iniziale() const { return _align; } char allineamento_iniziale() const { return _align; }
char allineamento_corrente() const; char allineamento_corrente() 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);