Gestitti i tipi riga dei documenti.
git-svn-id: svn://10.65.10.50/trunk@3409 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
cc99762cb4
commit
359df46fdb
121
ve/velib01.cpp
121
ve/velib01.cpp
@ -78,8 +78,7 @@ TTipo_documento::TTipo_documento(const TRectype& rec)
|
||||
{ }
|
||||
|
||||
TTipo_documento::~TTipo_documento()
|
||||
{
|
||||
}
|
||||
{ }
|
||||
|
||||
int TTipo_documento::read(const char* tipodoc)
|
||||
{
|
||||
@ -91,14 +90,94 @@ int TTipo_documento::read(const char* tipodoc)
|
||||
return err;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Tipo riga di un documento
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TTipo_riga_documento::TTipo_riga_documento(const char* tiporig)
|
||||
: TRectype(LF_TABCOM)
|
||||
{
|
||||
settab("TRI");
|
||||
if (tiporig && *tiporig)
|
||||
read(tiporig);
|
||||
}
|
||||
|
||||
TTipo_riga_documento::TTipo_riga_documento(const TRectype& rec)
|
||||
: TRectype(rec)
|
||||
{ }
|
||||
|
||||
TTipo_riga_documento::~TTipo_riga_documento()
|
||||
{ }
|
||||
|
||||
int TTipo_riga_documento::read(const char* tiporig)
|
||||
{
|
||||
TTable t("%TRI");
|
||||
put("CODTAB", tiporig);
|
||||
int err = TRectype::read(t);
|
||||
if (err != NOERR)
|
||||
yesnofatal_box("Tipo riga documento errato: %s", tiporig);
|
||||
return err;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Riga documento per vendite
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
bool TRiga_documento::solo_descrizione() const
|
||||
TAssoc_array TRiga_documento::_tipi;
|
||||
|
||||
const TTipo_riga_documento& TRiga_documento::tipo() const
|
||||
{
|
||||
return get("QTA").empty() && get("PREZZO").empty();
|
||||
const TString16 tiporig(get("TIPORIGA"));
|
||||
TTipo_riga_documento* o = (TTipo_riga_documento*)_tipi.objptr(tiporig);
|
||||
if (o == NULL)
|
||||
{
|
||||
if (_tipi.items() == 0)
|
||||
{
|
||||
TTable tri("%TRI"); // Tabella dei tipi riga
|
||||
for (tri.first(); !tri.eof(); tri.next())
|
||||
{
|
||||
const TString16 codice = tri.get("CODTAB");
|
||||
_tipi.add(codice, new TTipo_riga_documento(tri.curr()));
|
||||
}
|
||||
}
|
||||
o = (TTipo_riga_documento*)_tipi.objptr(tiporig);
|
||||
if (o == NULL)
|
||||
{
|
||||
o = new TTipo_riga_documento(tiporig);
|
||||
_tipi.add(tiporig, o);
|
||||
}
|
||||
}
|
||||
return *o;
|
||||
}
|
||||
|
||||
bool TRiga_documento::sola_descrizione() const
|
||||
{
|
||||
char t = tipo().tipo();
|
||||
if (t <= ' ' && get("QTA").empty() && get("PREZZO").empty())
|
||||
t = 'D';
|
||||
return t == 'D';
|
||||
}
|
||||
|
||||
void TRiga_documento::forza_sola_descrizione()
|
||||
{
|
||||
if (tipo().tipo() != 'D')
|
||||
{
|
||||
_tipi.restart();
|
||||
for (const TObject* o = _tipi.get(); o; o = _tipi.get())
|
||||
{
|
||||
const TTipo_riga_documento* trd = (const TTipo_riga_documento*)o;
|
||||
if (trd->tipo() == 'D')
|
||||
{
|
||||
put("TIPORIGA", trd->codice());
|
||||
break;
|
||||
}
|
||||
}
|
||||
zero("QTA");
|
||||
zero("PREZZO");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Ritorna TRUE se le due righe del documento possono essere sommate
|
||||
bool TRiga_documento::raggruppabile(const TRiga_documento& r, TToken_string& campi) const
|
||||
@ -115,7 +194,7 @@ bool TRiga_documento::raggruppabile(const TRiga_documento& r, TToken_string& cam
|
||||
|
||||
TRiga_documento& TRiga_documento::operator +=(const TRiga_documento& r)
|
||||
{
|
||||
TToken_string campi("QTA|NCOLLI|QTAEVASA|DAEVADERE");
|
||||
TToken_string campi("QTA|NCOLLI|QTAEVASA");
|
||||
for (const char* c = campi.get(0); c && ok; c = campi.get())
|
||||
{
|
||||
real num(r.get_real(c));
|
||||
@ -301,7 +380,7 @@ long TDocumento::get_next_key(char provv, int anno, const char* codnum) const
|
||||
const TTipo_documento& TDocumento::tipo() const
|
||||
{
|
||||
const TString16 tipodoc(get("TIPODOC"));
|
||||
CHECK(*tipodoc, "Tipo documento nullo");
|
||||
CHECK(tipodoc.not_empty(), "Tipo documento nullo");
|
||||
TTipo_documento * o = (TTipo_documento*)_tipi.objptr(tipodoc);
|
||||
if (o == NULL)
|
||||
{
|
||||
@ -334,10 +413,11 @@ TDate TLista_documenti::num2date(char provv, int anno, const char* codnum, long
|
||||
{
|
||||
TLocalisamfile doc(LF_DOC);
|
||||
TDocumento::set_key(doc.curr(), provv, anno, codnum, num);
|
||||
TDate d;
|
||||
if (doc.read() == NOERR)
|
||||
d = doc.get("DATADOC");
|
||||
return d;
|
||||
|
||||
if (doc.read(_isgteq) != NOERR) // In caso d'errore ...
|
||||
doc.last(); // prendi l'ultimo
|
||||
|
||||
return doc.get("DATADOC");
|
||||
}
|
||||
|
||||
int TLista_documenti::read(char tipo, long clifo, int anno,
|
||||
@ -420,8 +500,8 @@ int TLista_documenti::read(char tipo, long clifo, int anno,
|
||||
|
||||
int TLista_documenti::write(bool re) const
|
||||
{
|
||||
int err = NOERR;
|
||||
for (int i = _documenti.items()-1; i >= 0 && err == NOERR; i--)
|
||||
int err = NOERR;
|
||||
for (int i = 0; i < _documenti.items() && err == NOERR; i++)
|
||||
err = doc(i).write(re);
|
||||
return err;
|
||||
}
|
||||
@ -606,6 +686,11 @@ int TElaborazione::read(const char* cod)
|
||||
// TFatturazione bolle
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TFatturazione_bolle::TFatturazione_bolle(const char* cod)
|
||||
: TElaborazione(cod)
|
||||
{
|
||||
}
|
||||
|
||||
bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
{
|
||||
#ifdef DBG
|
||||
@ -618,7 +703,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
}
|
||||
if (i >= 5)
|
||||
{
|
||||
yesnofatal_box("Tipo documento non valido: ", (const char*)tipodoc);
|
||||
NFCHECK("Tipo documento non valido: ", (const char*)tipodoc);
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
@ -637,7 +722,11 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
// Determina ed eventualmente crea la riga di riferimento
|
||||
const int riga_rif = riferimenti_in_testa() ? 1 : doc_out.rows()+1;
|
||||
if (riga_rif > doc_out.rows())
|
||||
doc_out.new_row();
|
||||
{
|
||||
TRiga_documento& rout = doc_out.new_row();
|
||||
rout.forza_sola_descrizione();
|
||||
}
|
||||
|
||||
TRiga_documento& rout = doc_out[riga_rif];
|
||||
|
||||
// Costruisce la stringa di riferimento
|
||||
@ -681,7 +770,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
for (int r = 1; r <= doc_in.rows(); r++)
|
||||
{
|
||||
const TRiga_documento& rin = doc_in[r];
|
||||
const bool rindesc = rin.solo_descrizione(); // La riga di input e' descrittiva
|
||||
const bool rindesc = rin.sola_descrizione(); // La riga di input e' descrittiva
|
||||
if (ignora_desc && rindesc)
|
||||
continue;
|
||||
|
||||
@ -695,7 +784,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
for (int o = 1; o <= last; o++) // ... cerca una riga compatibile
|
||||
{
|
||||
TRiga_documento& rout = doc_out[o];
|
||||
if (rout.solo_descrizione()) // Ignora le righe descrittive
|
||||
if (rout.sola_descrizione()) // Ignora le righe descrittive
|
||||
continue;
|
||||
if (rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ...
|
||||
{
|
||||
|
30
ve/velib01.h
30
ve/velib01.h
@ -31,11 +31,33 @@ public:
|
||||
virtual ~TTipo_documento();
|
||||
};
|
||||
|
||||
class TTipo_riga_documento : public TRectype
|
||||
{
|
||||
protected:
|
||||
int read(const char* tiporig);
|
||||
|
||||
public:
|
||||
TObject* dup() const { return new TTipo_riga_documento(codice()); }
|
||||
|
||||
public:
|
||||
const TString& codice() const { return get("CODTAB");}
|
||||
|
||||
const TString& descrizione() const { return get("S0"); }
|
||||
char tipo() const { return get_char("S7"); }
|
||||
|
||||
TTipo_riga_documento(const char* tiporig = NULL);
|
||||
TTipo_riga_documento(const TRectype& rec);
|
||||
virtual ~TTipo_riga_documento();
|
||||
};
|
||||
|
||||
|
||||
class TRiga_documento : public TRectype
|
||||
{
|
||||
friend class TDocumento;
|
||||
const TDocumento* _doc;
|
||||
|
||||
static TAssoc_array _tipi;
|
||||
|
||||
protected:
|
||||
void set_doc(const TDocumento* doc) { _doc = doc; }
|
||||
|
||||
@ -46,7 +68,9 @@ public:
|
||||
const TDocumento& documento() const
|
||||
{ CHECK(_doc, "Riga documento orfana"); return *_doc; }
|
||||
|
||||
bool solo_descrizione() const;
|
||||
const TTipo_riga_documento& tipo() const;
|
||||
bool sola_descrizione() const;
|
||||
void forza_sola_descrizione();
|
||||
|
||||
TRiga_documento& operator =(const TRiga_documento& r)
|
||||
{ TRectype::operator=(r); _doc = r._doc; return *this; }
|
||||
@ -229,12 +253,14 @@ public:
|
||||
|
||||
class TFatturazione_bolle : public TElaborazione
|
||||
{
|
||||
TToken_string _cod_desc;
|
||||
|
||||
public:
|
||||
virtual bool raggruppa(TDocumento& din, TDocumento& dout);
|
||||
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
||||
const TDate& data_elab);
|
||||
|
||||
TFatturazione_bolle(const char* cod) : TElaborazione(cod) { }
|
||||
TFatturazione_bolle(const char* cod);
|
||||
virtual ~TFatturazione_bolle() { }
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user