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()
|
TTipo_documento::~TTipo_documento()
|
||||||
{
|
{ }
|
||||||
}
|
|
||||||
|
|
||||||
int TTipo_documento::read(const char* tipodoc)
|
int TTipo_documento::read(const char* tipodoc)
|
||||||
{
|
{
|
||||||
@ -91,14 +90,94 @@ int TTipo_documento::read(const char* tipodoc)
|
|||||||
return err;
|
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
|
// 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
|
// Ritorna TRUE se le due righe del documento possono essere sommate
|
||||||
bool TRiga_documento::raggruppabile(const TRiga_documento& r, TToken_string& campi) const
|
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)
|
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())
|
for (const char* c = campi.get(0); c && ok; c = campi.get())
|
||||||
{
|
{
|
||||||
real num(r.get_real(c));
|
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 TTipo_documento& TDocumento::tipo() const
|
||||||
{
|
{
|
||||||
const TString16 tipodoc(get("TIPODOC"));
|
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);
|
TTipo_documento * o = (TTipo_documento*)_tipi.objptr(tipodoc);
|
||||||
if (o == NULL)
|
if (o == NULL)
|
||||||
{
|
{
|
||||||
@ -334,10 +413,11 @@ TDate TLista_documenti::num2date(char provv, int anno, const char* codnum, long
|
|||||||
{
|
{
|
||||||
TLocalisamfile doc(LF_DOC);
|
TLocalisamfile doc(LF_DOC);
|
||||||
TDocumento::set_key(doc.curr(), provv, anno, codnum, num);
|
TDocumento::set_key(doc.curr(), provv, anno, codnum, num);
|
||||||
TDate d;
|
|
||||||
if (doc.read() == NOERR)
|
if (doc.read(_isgteq) != NOERR) // In caso d'errore ...
|
||||||
d = doc.get("DATADOC");
|
doc.last(); // prendi l'ultimo
|
||||||
return d;
|
|
||||||
|
return doc.get("DATADOC");
|
||||||
}
|
}
|
||||||
|
|
||||||
int TLista_documenti::read(char tipo, long clifo, int anno,
|
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 TLista_documenti::write(bool re) const
|
||||||
{
|
{
|
||||||
int err = NOERR;
|
int err = NOERR;
|
||||||
for (int i = _documenti.items()-1; i >= 0 && err == NOERR; i--)
|
for (int i = 0; i < _documenti.items() && err == NOERR; i++)
|
||||||
err = doc(i).write(re);
|
err = doc(i).write(re);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -606,6 +686,11 @@ int TElaborazione::read(const char* cod)
|
|||||||
// TFatturazione bolle
|
// TFatturazione bolle
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TFatturazione_bolle::TFatturazione_bolle(const char* cod)
|
||||||
|
: TElaborazione(cod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||||
{
|
{
|
||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
@ -618,7 +703,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
|||||||
}
|
}
|
||||||
if (i >= 5)
|
if (i >= 5)
|
||||||
{
|
{
|
||||||
yesnofatal_box("Tipo documento non valido: ", (const char*)tipodoc);
|
NFCHECK("Tipo documento non valido: ", (const char*)tipodoc);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -637,7 +722,11 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
|||||||
// Determina ed eventualmente crea la riga di riferimento
|
// Determina ed eventualmente crea la riga di riferimento
|
||||||
const int riga_rif = riferimenti_in_testa() ? 1 : doc_out.rows()+1;
|
const int riga_rif = riferimenti_in_testa() ? 1 : doc_out.rows()+1;
|
||||||
if (riga_rif > doc_out.rows())
|
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];
|
TRiga_documento& rout = doc_out[riga_rif];
|
||||||
|
|
||||||
// Costruisce la stringa di riferimento
|
// 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++)
|
for (int r = 1; r <= doc_in.rows(); r++)
|
||||||
{
|
{
|
||||||
const TRiga_documento& rin = doc_in[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)
|
if (ignora_desc && rindesc)
|
||||||
continue;
|
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
|
for (int o = 1; o <= last; o++) // ... cerca una riga compatibile
|
||||||
{
|
{
|
||||||
TRiga_documento& rout = doc_out[o];
|
TRiga_documento& rout = doc_out[o];
|
||||||
if (rout.solo_descrizione()) // Ignora le righe descrittive
|
if (rout.sola_descrizione()) // Ignora le righe descrittive
|
||||||
continue;
|
continue;
|
||||||
if (rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ...
|
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();
|
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
|
class TRiga_documento : public TRectype
|
||||||
{
|
{
|
||||||
friend class TDocumento;
|
friend class TDocumento;
|
||||||
const TDocumento* _doc;
|
const TDocumento* _doc;
|
||||||
|
|
||||||
|
static TAssoc_array _tipi;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void set_doc(const TDocumento* doc) { _doc = doc; }
|
void set_doc(const TDocumento* doc) { _doc = doc; }
|
||||||
|
|
||||||
@ -46,7 +68,9 @@ public:
|
|||||||
const TDocumento& documento() const
|
const TDocumento& documento() const
|
||||||
{ CHECK(_doc, "Riga documento orfana"); return *_doc; }
|
{ 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)
|
TRiga_documento& operator =(const TRiga_documento& r)
|
||||||
{ TRectype::operator=(r); _doc = r._doc; return *this; }
|
{ TRectype::operator=(r); _doc = r._doc; return *this; }
|
||||||
@ -229,12 +253,14 @@ public:
|
|||||||
|
|
||||||
class TFatturazione_bolle : public TElaborazione
|
class TFatturazione_bolle : public TElaborazione
|
||||||
{
|
{
|
||||||
|
TToken_string _cod_desc;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual bool raggruppa(TDocumento& din, TDocumento& dout);
|
virtual bool raggruppa(TDocumento& din, TDocumento& dout);
|
||||||
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
||||||
const TDate& data_elab);
|
const TDate& data_elab);
|
||||||
|
|
||||||
TFatturazione_bolle(const char* cod) : TElaborazione(cod) { }
|
TFatturazione_bolle(const char* cod);
|
||||||
virtual ~TFatturazione_bolle() { }
|
virtual ~TFatturazione_bolle() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user