1999-04-06 15:34:39 +00:00
|
|
|
#include <currency.h>
|
1997-08-26 12:38:08 +00:00
|
|
|
#include <prefix.h>
|
1997-06-27 09:21:13 +00:00
|
|
|
#include <tabutil.h>
|
1997-06-03 15:56:27 +00:00
|
|
|
|
1998-05-04 09:54:49 +00:00
|
|
|
#include "velib.h"
|
1999-04-16 12:02:04 +00:00
|
|
|
#include "sconti.h"
|
1998-05-04 09:54:49 +00:00
|
|
|
#include "vepriv.h"
|
|
|
|
#include "verig.h"
|
1999-04-06 15:34:39 +00:00
|
|
|
#include "../mg/mglib.h"
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
|
|
#include "rdoc.h"
|
1999-04-06 15:34:39 +00:00
|
|
|
|
|
|
|
// TArticolo_cache
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TCache_articoli : public TRecord_cache
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
virtual TObject* rec2obj(const TRectype& rec) const;
|
|
|
|
|
|
|
|
public:
|
|
|
|
TArticolo_giacenza& art(const char* key);
|
|
|
|
TCache_articoli();
|
|
|
|
virtual ~TCache_articoli() { }
|
|
|
|
};
|
|
|
|
|
|
|
|
TCache_articoli::TCache_articoli()
|
|
|
|
: TRecord_cache(LF_ANAMAG, 1)
|
1999-10-22 10:00:18 +00:00
|
|
|
{
|
|
|
|
test_file_changes(); // Tieni d'occhio le modifiche sul file
|
|
|
|
set_items_limit(256); // Standard
|
|
|
|
}
|
1999-04-06 15:34:39 +00:00
|
|
|
|
|
|
|
TObject* TCache_articoli::rec2obj(const TRectype& curr) const
|
|
|
|
{
|
|
|
|
return new TArticolo_giacenza(curr);
|
|
|
|
}
|
|
|
|
|
|
|
|
TArticolo_giacenza & TCache_articoli::art(const char* key)
|
|
|
|
{
|
|
|
|
TArticolo_giacenza& art = (TArticolo_giacenza&)query(key);
|
|
|
|
return art;
|
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
// Tipo riga di un documento
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
TAssoc_array TTipo_riga_documento::_formule_riga;
|
|
|
|
|
|
|
|
TTipo_riga_documento::TTipo_riga_documento(const char* tiporig)
|
1998-11-04 18:04:26 +00:00
|
|
|
: TRectype(LF_TABCOM)
|
1996-08-21 10:24:21 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
settab("TRI");
|
|
|
|
_name = "verig";
|
|
|
|
_name << codice();
|
|
|
|
if (tiporig && *tiporig)
|
|
|
|
read(tiporig);
|
1996-08-21 10:24:21 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
TTipo_riga_documento::TTipo_riga_documento(const TRectype& rec)
|
1998-11-04 18:04:26 +00:00
|
|
|
: TRectype(rec)
|
1997-06-03 15:56:27 +00:00
|
|
|
{
|
|
|
|
_name = "verig";
|
|
|
|
_name << codice();
|
|
|
|
read_formule();
|
1996-08-21 10:24:21 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
TTipo_riga_documento::~TTipo_riga_documento()
|
1996-08-21 10:24:21 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
int TTipo_riga_documento::read(const char* tiporig)
|
1996-08-21 10:24:21 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
TTable t("%TRI");
|
|
|
|
put("CODTAB", tiporig);
|
1996-08-21 10:24:21 +00:00
|
|
|
int err = TRectype::read(t);
|
1997-06-03 15:56:27 +00:00
|
|
|
if (err == NOERR)
|
|
|
|
read_formule();
|
|
|
|
else
|
|
|
|
yesnofatal_box("Tipo riga documento errato: %s", tiporig);
|
1996-08-21 10:24:21 +00:00
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TTipo_riga_documento::read_formule()
|
1996-08-19 07:47:53 +00:00
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
{
|
|
|
|
TFilename prof(profile_name());
|
|
|
|
|
|
|
|
prof.ext("ini");
|
1996-08-19 07:47:53 +00:00
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
TConfig profile(prof);
|
|
|
|
|
|
|
|
_formule = profile.get("CAMPICALC", "MAIN");
|
1999-05-24 13:34:11 +00:00
|
|
|
const TString & calcoli = profile.get("CALCOLI", "MAIN");
|
|
|
|
|
|
|
|
if (calcoli == "*")
|
|
|
|
{
|
1999-07-16 14:59:11 +00:00
|
|
|
TTable frd("%FRR");
|
|
|
|
|
|
|
|
for (int err = frd.first(); err == NOERR; err = frd.next())
|
|
|
|
{
|
|
|
|
const TString & formula = frd.get("CODTAB");
|
|
|
|
if (_formule.find(formula) < 0)
|
|
|
|
_formule.add(formula);
|
|
|
|
}
|
1999-05-24 13:34:11 +00:00
|
|
|
}
|
|
|
|
else
|
1999-07-16 14:59:11 +00:00
|
|
|
_formule.add(calcoli);
|
1997-06-03 15:56:27 +00:00
|
|
|
_imponibile = profile.get("IMPONIBILE", "MAIN");
|
|
|
|
if (_imponibile.empty())
|
|
|
|
_imponibile = "IMPONIBILE";
|
1997-08-22 08:39:02 +00:00
|
|
|
|
|
|
|
TTable frr("%FRR");
|
|
|
|
|
|
|
|
frr.put("CODTAB", _imponibile);
|
|
|
|
if (frr.read() != NOERR)
|
|
|
|
_formule_riga.add(_imponibile, new TFormula_documento(_riga, _imponibile, "IMPORTO(1)"), TRUE);
|
1997-08-21 16:47:14 +00:00
|
|
|
if (_formule.find(_imponibile) < 0)
|
|
|
|
_formule.add(_imponibile);
|
1997-10-02 16:57:49 +00:00
|
|
|
|
|
|
|
_provv = profile.get("PROVV", "MAIN");
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
|
|
_qtares = profile.get("QTARES", "MAIN");
|
|
|
|
if (_qtares.empty())
|
|
|
|
_qtares = "QTARES";
|
|
|
|
|
|
|
|
frr.put("CODTAB", _qtares);
|
|
|
|
if (frr.read() != NOERR)
|
|
|
|
_formule_riga.add(_qtares, new TFormula_documento(_riga, _qtares, "QTARES()"), TRUE);
|
|
|
|
if (_formule.find(_qtares) < 0)
|
|
|
|
_formule.add(_qtares);
|
|
|
|
|
|
|
|
_rigavalres = profile.get("RIGAVALRES", "MAIN");
|
|
|
|
if (_rigavalres.empty())
|
|
|
|
_rigavalres = "RIGAVALRES";
|
|
|
|
|
|
|
|
_rigavalore = profile.get("RIGAVALORE", "MAIN");
|
|
|
|
if (_rigavalore.empty())
|
|
|
|
_rigavalore = "RIGAVALORE";
|
|
|
|
|
|
|
|
frr.put("CODTAB", _rigavalres);
|
|
|
|
if (frr.read() != NOERR)
|
|
|
|
_formule_riga.add(_rigavalres, new TFormula_documento(_riga, _rigavalres, "QTARES()*PREZZO(1,0)"), TRUE);
|
|
|
|
if (_formule.find(_rigavalres) < 0)
|
|
|
|
_formule.add(_rigavalres);
|
|
|
|
|
|
|
|
frr.put("CODTAB", _rigavalore);
|
|
|
|
if (frr.read() != NOERR)
|
|
|
|
_formule_riga.add(_rigavalore, new TFormula_documento(_riga, _rigavalore, "QTA*PREZZO(1,0)"), TRUE);
|
|
|
|
if (_formule.find(_rigavalore) < 0)
|
|
|
|
_formule.add(_rigavalore);
|
2001-06-25 10:41:20 +00:00
|
|
|
_incrp = profile.get_int("VARP+", "MAIN");
|
|
|
|
_decrp = profile.get_int("VARP-", "MAIN");
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
TFormula_documento * TTipo_riga_documento::succ_formula(bool restart)
|
|
|
|
{
|
|
|
|
if (restart)
|
|
|
|
_formule.restart();
|
|
|
|
const TString formula(_formule.get());
|
|
|
|
if (formula.not_empty())
|
|
|
|
{
|
|
|
|
char *expr = NULL;
|
|
|
|
const int p = formula.find("=");
|
|
|
|
if (p > 0)
|
|
|
|
{
|
|
|
|
expr = (char *) (const char *) formula + p;
|
|
|
|
*expr = '\0'; expr++;
|
|
|
|
}
|
|
|
|
TFormula_documento * o = (TFormula_documento*)_formule_riga.objptr(formula);
|
|
|
|
if (o == NULL)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
o = new TFormula_documento(_riga, formula, expr);
|
|
|
|
_formule_riga.add(formula, o);
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
return o;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
1996-08-19 07:47:53 +00:00
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
// Riga documento per vendite
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
1997-08-26 12:38:08 +00:00
|
|
|
long TRiga_documento::_firm = -1;
|
1997-06-03 15:56:27 +00:00
|
|
|
TAssoc_array TRiga_documento::_tipi;
|
|
|
|
TAssoc_array TRiga_documento::_spese;
|
|
|
|
TAssoc_array TRiga_documento::_ive;
|
1999-04-06 15:34:39 +00:00
|
|
|
TCache_articoli * TRiga_documento::_articoli = NULL;
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
TRiga_documento::TRiga_documento(TDocumento* doc, const char * tipo)
|
|
|
|
: TAuto_variable_rectype(LF_RIGHEDOC), _doc(doc), _iva_calc(FALSE)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
if (tipo)
|
|
|
|
set_tipo(tipo);
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-08-06 12:31:10 +00:00
|
|
|
TRiga_documento::TRiga_documento(const TRiga_documento & row)
|
|
|
|
: TAuto_variable_rectype(LF_RIGHEDOC), _doc(NULL), _iva_calc(FALSE)
|
|
|
|
|
|
|
|
{
|
|
|
|
copy(row);
|
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
TRiga_documento::TRiga_documento(const TRiga_documento& rec, TDocumento* doc,
|
|
|
|
const char * tipo)
|
|
|
|
: TAuto_variable_rectype(rec), _doc(doc), _iva_calc(FALSE)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
if (tipo)
|
|
|
|
set_tipo(tipo);
|
|
|
|
}
|
|
|
|
|
|
|
|
const TTipo_riga_documento& TRiga_documento::tipo() const
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
const TString16 tiporig(get(RDOC_TIPORIGA));
|
1997-06-03 15:56:27 +00:00
|
|
|
CHECK(tiporig.not_empty(), "Tipo riga documento nullo");
|
|
|
|
TTipo_riga_documento* o = (TTipo_riga_documento*)_tipi.objptr(tiporig);
|
|
|
|
if (o == NULL)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
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);
|
|
|
|
}
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
return *o;
|
|
|
|
}
|
1996-08-19 07:47:53 +00:00
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
const TSpesa_prest & TRiga_documento::spesa() const
|
|
|
|
{
|
|
|
|
const char tipor = tipo().tipo();
|
1996-08-19 07:47:53 +00:00
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
CHECK(tipor == RIGA_SPESEDOC || tipor == RIGA_PRESTAZIONI, "Tipo riga incompatibile con le spese");
|
1997-08-26 12:38:08 +00:00
|
|
|
|
|
|
|
test_firm();
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
const TString16 codice(get("CODART"));
|
|
|
|
TString16 index; index << tipor << codice;
|
|
|
|
|
|
|
|
TSpesa_prest * s = (TSpesa_prest *) _spese.objptr(index);
|
|
|
|
if (s == NULL)
|
|
|
|
{
|
|
|
|
s = new TSpesa_prest(codice, tipor);
|
|
|
|
_spese.add(index, s);
|
|
|
|
}
|
|
|
|
return *s;
|
|
|
|
}
|
1996-08-19 07:47:53 +00:00
|
|
|
|
2000-05-05 15:25:49 +00:00
|
|
|
const TCodiceIVA & TRiga_documento::iva(const char *codice)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
TCodiceIVA * v = (TCodiceIVA *) _ive.objptr(codice);
|
1997-06-03 15:56:27 +00:00
|
|
|
if (v == NULL)
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
v = new TCodiceIVA(codice);
|
1997-06-03 15:56:27 +00:00
|
|
|
_ive.add(codice, v);
|
|
|
|
}
|
|
|
|
return *v;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool TRiga_documento::sola_descrizione() const
|
|
|
|
{
|
|
|
|
char t = tipo().tipo();
|
|
|
|
if (t <= ' ' && get("QTA").empty() && get("PREZZO").empty())
|
|
|
|
t = RIGA_DESCRIZIONI;
|
|
|
|
return t == RIGA_DESCRIZIONI;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TRiga_documento::forza_sola_descrizione()
|
|
|
|
{
|
|
|
|
// In realta' il test serve anche a caricare la lista dei tipi riga!
|
1997-06-27 09:21:13 +00:00
|
|
|
if (!tipo_valido() || !is_descrizione())
|
1999-10-22 10:00:18 +00:00
|
|
|
{
|
|
|
|
TString16 cod;
|
1997-06-03 15:56:27 +00:00
|
|
|
_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() == RIGA_DESCRIZIONI)
|
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
const TString& c = trd->codice();
|
|
|
|
if (cod.empty() || c < cod)
|
|
|
|
cod = c;
|
1997-06-03 15:56:27 +00:00
|
|
|
}
|
|
|
|
}
|
1999-10-22 10:00:18 +00:00
|
|
|
put("TIPORIGA", cod);
|
1997-06-03 15:56:27 +00:00
|
|
|
zero("QTA");
|
|
|
|
zero("PREZZO");
|
|
|
|
}
|
1996-10-12 11:51:24 +00:00
|
|
|
}
|
1997-08-06 12:31:10 +00:00
|
|
|
|
|
|
|
TRiga_documento & TRiga_documento::copy(const TRiga_documento & r)
|
|
|
|
{
|
|
|
|
_doc = r._doc;
|
1999-05-24 13:34:11 +00:00
|
|
|
operator=((TRectype &)r);
|
1997-08-06 12:31:10 +00:00
|
|
|
return *this;
|
|
|
|
}
|
1996-10-12 11:51:24 +00:00
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
void TRiga_documento::set_variables(TExpression * e) const
|
|
|
|
{
|
|
|
|
const int items = e->numvar();
|
|
|
|
for (int i = 0; i < items; i++)
|
|
|
|
{
|
|
|
|
const TFieldref field(e->varname(i), LF_RIGHEDOC);
|
|
|
|
|
|
|
|
switch (field.file())
|
|
|
|
{
|
|
|
|
case LF_ANAMAG :
|
|
|
|
{
|
|
|
|
const TArticolo_giacenza * art = articolo();
|
|
|
|
|
|
|
|
if (art != NULL)
|
|
|
|
e->setvar(i, art->get(field.name()));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case LF_DOC :
|
|
|
|
e->setvar(i, doc().get(field.name()));
|
|
|
|
break;
|
|
|
|
case LF_CLIFO :
|
|
|
|
e->setvar(i, doc().clifor().get(field.name()));
|
|
|
|
break;
|
|
|
|
case LF_CFVEN :
|
|
|
|
e->setvar(i, doc().clifor().vendite().get(field.name()));
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
e->setvar(i, get(field.name()));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1997-08-26 12:38:08 +00:00
|
|
|
void TRiga_documento::test_firm()
|
|
|
|
{
|
|
|
|
const long new_firm = prefix().get_codditta();
|
|
|
|
|
|
|
|
if (_firm != new_firm)
|
|
|
|
{
|
|
|
|
_spese.destroy();
|
|
|
|
_firm = new_firm;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
TRectype & TRiga_documento::operator =(const TRectype & r)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
TRectype::operator=(r);
|
|
|
|
reset_fields(*this);
|
|
|
|
set_fields(*this);
|
|
|
|
return *this;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
TRectype & TRiga_documento::operator =(const char * r)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
TRectype::operator=(r);
|
|
|
|
reset_fields(*this);
|
|
|
|
set_fields(*this);
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Ritorna TRUE se le due righe del documento possono essere sommate
|
|
|
|
bool TRiga_documento::raggruppabile(const TRiga_documento& r, TToken_string& campi) const
|
|
|
|
{
|
|
|
|
bool ok = TRUE;
|
|
|
|
TString campo;
|
|
|
|
for (const char* c = campi.get(0); c && ok; c = campi.get())
|
|
|
|
{
|
|
|
|
campo = get(c); // Separare le due get!
|
|
|
|
ok &= campo == r.get(c);
|
|
|
|
}
|
|
|
|
return ok;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
TRiga_documento& TRiga_documento::operator +=(const TRiga_documento& r)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
TToken_string campi("QTA|NCOLLI|QTAEVASA");
|
1999-04-06 15:34:39 +00:00
|
|
|
for (const char* c = campi.get(0); c; c = campi.get())
|
1997-06-03 15:56:27 +00:00
|
|
|
{
|
1999-04-06 15:34:39 +00:00
|
|
|
real num = r.get_real(c);
|
1997-06-03 15:56:27 +00:00
|
|
|
if (!num.is_zero())
|
|
|
|
{
|
|
|
|
num += get_real(c);
|
|
|
|
put(c, num);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!get_bool("RIGAEVASA"))
|
|
|
|
{
|
|
|
|
const real qta = get_real("QTA");
|
|
|
|
const real qtaeva = get_real("QTAEVASA");
|
|
|
|
if (qtaeva >= qta)
|
|
|
|
put("RIGAEVASA", "X");
|
|
|
|
}
|
|
|
|
|
|
|
|
return *this;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TRiga_documento::set_fields(TAuto_variable_rectype & rec)
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
if (get(RDOC_TIPORIGA).not_empty())
|
1997-06-03 15:56:27 +00:00
|
|
|
{
|
|
|
|
TTipo_riga_documento & tipo_riga = (TTipo_riga_documento &) tipo();
|
|
|
|
|
|
|
|
for (const TFormula_documento * f = tipo_riga.first_formula(); f; f = tipo_riga.succ_formula())
|
|
|
|
{
|
|
|
|
TExpr_documento * exp = f->expr();
|
|
|
|
if (exp)
|
|
|
|
{
|
|
|
|
exp->set_doc(_doc);
|
|
|
|
exp->set_row(this);
|
1997-10-02 16:57:49 +00:00
|
|
|
add_field(new TDocumento_variable_field(f->name(), *exp));
|
1997-06-03 15:56:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
real TRiga_documento::prezzo(bool scontato, bool lordo, int ndec) const
|
1997-08-18 15:24:00 +00:00
|
|
|
{
|
|
|
|
if (ndec == AUTO_DECIMALS)
|
2000-05-05 15:25:49 +00:00
|
|
|
ndec = doc().decimals(TRUE);
|
1997-08-18 15:24:00 +00:00
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
real prezzo = get_real("PREZZO");
|
1999-05-24 13:34:11 +00:00
|
|
|
if (doc().tipo().calcolo_lordo())
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
if (lordo)
|
|
|
|
prezzo = iva().lordo(prezzo, ndec);
|
1999-07-16 14:59:11 +00:00
|
|
|
prezzo.round(ndec);
|
|
|
|
if (scontato)
|
|
|
|
prezzo = prezzo_scontato(prezzo, get("SCONTO"));
|
|
|
|
prezzo.round(ndec);
|
1999-05-24 13:34:11 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
1999-07-16 14:59:11 +00:00
|
|
|
if (scontato)
|
|
|
|
prezzo = prezzo_scontato(prezzo, get("SCONTO"));
|
|
|
|
prezzo.round(ndec);
|
|
|
|
if (lordo)
|
2000-05-05 15:25:49 +00:00
|
|
|
prezzo = iva().lordo(prezzo, ndec);
|
1999-07-16 14:59:11 +00:00
|
|
|
prezzo.round(ndec);
|
1999-05-24 13:34:11 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
return prezzo;
|
|
|
|
}
|
|
|
|
|
|
|
|
real TRiga_documento::importo(bool scontato, bool lordo, int ndec) const
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-08-18 15:24:00 +00:00
|
|
|
if (ndec == AUTO_DECIMALS)
|
2000-05-05 15:25:49 +00:00
|
|
|
ndec = doc().decimals();
|
1997-08-18 15:24:00 +00:00
|
|
|
|
1999-05-24 13:34:11 +00:00
|
|
|
real importo;
|
|
|
|
const bool doc_al_lordo = doc().tipo().calcolo_lordo();
|
1997-06-03 15:56:27 +00:00
|
|
|
TTipo_calcolo c = _nessun_calcolo;
|
|
|
|
const char tipor = tipo().tipo();
|
|
|
|
const real qta = get_real("QTA");
|
1997-08-26 12:38:08 +00:00
|
|
|
real r1;
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
switch (tipor)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
case RIGA_MERCE:
|
|
|
|
c = _qtaprezzo;
|
|
|
|
break;
|
|
|
|
case RIGA_PRESTAZIONI:
|
|
|
|
case RIGA_SPESEDOC:
|
|
|
|
{
|
|
|
|
const TSpesa_prest & s = spesa();
|
2002-02-26 16:20:19 +00:00
|
|
|
const bool to_calc = s.tipo_ritenuta() == '\0';
|
1997-06-03 15:56:27 +00:00
|
|
|
|
2002-02-26 16:20:19 +00:00
|
|
|
if (to_calc)
|
1997-06-03 15:56:27 +00:00
|
|
|
{
|
|
|
|
case 'Q':
|
|
|
|
c = _qtaprezzo;
|
|
|
|
break;
|
|
|
|
case 'V':
|
|
|
|
c = _valore;
|
|
|
|
break;
|
1997-08-26 12:38:08 +00:00
|
|
|
case 'P':
|
|
|
|
{
|
|
|
|
const TString16 field_perc(s.field_perc());
|
|
|
|
c = _percentuale;
|
|
|
|
r1 = doc().get_real(field_perc);
|
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
1997-08-26 12:38:08 +00:00
|
|
|
case RIGA_SCONTI:
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
TCond_vendita cv(NULL, NULL);
|
|
|
|
cv.set_sconto(get("SCONTO"));
|
1997-08-26 12:38:08 +00:00
|
|
|
if (cv.get_sconto().not_empty())
|
|
|
|
c = _scontoperc;
|
|
|
|
else
|
|
|
|
c = _scontoimp;
|
|
|
|
r1 = cv.sconto_val();
|
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
break;
|
|
|
|
case RIGA_OMAGGI:
|
|
|
|
if (_iva_calc && get_bool("ADDIVA"))
|
|
|
|
c = _qtaprezzo;
|
|
|
|
default:
|
|
|
|
break;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
switch (c)
|
|
|
|
{
|
2002-02-26 16:20:19 +00:00
|
|
|
case _qtaprezzo:
|
1999-07-16 14:59:11 +00:00
|
|
|
if (doc_al_lordo)
|
2002-02-26 16:20:19 +00:00
|
|
|
{
|
|
|
|
// Altamente impreciso: moltiplica per qta un prezzo arrotondato a priori!
|
|
|
|
// importo = prezzo(scontato, TRUE, ndec) * qta;
|
|
|
|
|
|
|
|
// Rimanda l'arrotondamento a dopo aver calcolato il totale riga!
|
|
|
|
importo = prezzo(scontato, TRUE, ALL_DECIMALS) * qta;
|
|
|
|
importo.round(ndec); // Riga inutile ma esplicatrice;
|
|
|
|
}
|
1999-07-16 14:59:11 +00:00
|
|
|
else
|
|
|
|
importo = prezzo(scontato, lordo, ALL_DECIMALS) * qta;
|
1997-06-03 15:56:27 +00:00
|
|
|
break;
|
|
|
|
case _valore:
|
1999-05-24 13:34:11 +00:00
|
|
|
importo = prezzo(scontato, doc_al_lordo ? TRUE : lordo, ndec);
|
1997-06-03 15:56:27 +00:00
|
|
|
break;
|
|
|
|
case _percentuale:
|
1997-08-26 12:38:08 +00:00
|
|
|
importo = r1 * get_real(RDOC_QTA) / 100;
|
1997-06-03 15:56:27 +00:00
|
|
|
break;
|
|
|
|
case _scontoimp:
|
1999-05-24 13:34:11 +00:00
|
|
|
importo = -prezzo(FALSE, doc_al_lordo ? TRUE : lordo, ndec);
|
1997-06-03 15:56:27 +00:00
|
|
|
break;
|
|
|
|
case _scontoperc:
|
1997-08-26 12:38:08 +00:00
|
|
|
importo = doc().basesconto() * (r1 - 1.0);
|
1997-06-03 15:56:27 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
1999-05-24 13:34:11 +00:00
|
|
|
importo.round(ndec);
|
|
|
|
|
|
|
|
if (doc_al_lordo && !lordo)
|
2000-05-05 15:25:49 +00:00
|
|
|
iva().scorpora(importo, ndec);
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
return importo;
|
|
|
|
}
|
|
|
|
|
|
|
|
real TRiga_documento::iva(int ndec) const
|
1997-08-18 15:24:00 +00:00
|
|
|
{
|
|
|
|
if (ndec == AUTO_DECIMALS)
|
2000-05-05 15:25:49 +00:00
|
|
|
ndec = doc().decimals();
|
1997-08-18 15:24:00 +00:00
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
((TRiga_documento *) this)->_iva_calc = TRUE;
|
2000-05-05 15:25:49 +00:00
|
|
|
const real zanicchi = is_sconto() ? ZERO : iva().imposta(imponibile(), ndec);
|
1997-06-03 15:56:27 +00:00
|
|
|
((TRiga_documento *) this)->_iva_calc = FALSE;
|
1997-08-18 15:24:00 +00:00
|
|
|
return zanicchi;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1998-11-04 18:04:26 +00:00
|
|
|
real TRiga_documento::imponibile_omaggio() const
|
|
|
|
{
|
|
|
|
((TRiga_documento *) this)->_iva_calc = TRUE;
|
|
|
|
const real imp = imponibile();
|
|
|
|
((TRiga_documento *) this)->_iva_calc = FALSE;
|
|
|
|
return imp;
|
|
|
|
}
|
|
|
|
|
1999-05-24 13:34:11 +00:00
|
|
|
real TRiga_documento::imponibile(bool lordo) const
|
2000-05-05 15:25:49 +00:00
|
|
|
{
|
|
|
|
const TString& field = tipo().imponibile();
|
1997-06-03 15:56:27 +00:00
|
|
|
if (field.not_empty())
|
1999-05-24 13:34:11 +00:00
|
|
|
{
|
|
|
|
real r;
|
1997-06-27 09:21:13 +00:00
|
|
|
if (is_omaggio() && _iva_calc)
|
1997-06-03 15:56:27 +00:00
|
|
|
{
|
|
|
|
TDocumento_variable_field * f = (TDocumento_variable_field *) variable_field(field);
|
|
|
|
CHECKS(f, "Field UNKNOWN : ", field);
|
|
|
|
f->set_dirty(TRUE);
|
1999-10-22 10:00:18 +00:00
|
|
|
r = get_real(field);
|
1997-06-03 15:56:27 +00:00
|
|
|
f->set_dirty(TRUE);
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
else
|
1999-05-24 13:34:11 +00:00
|
|
|
r = get_real(field);
|
1999-07-16 14:59:11 +00:00
|
|
|
if (lordo)
|
2000-05-05 15:25:49 +00:00
|
|
|
r = iva().lordo(r, doc().decimals(TRUE));
|
1999-07-16 14:59:11 +00:00
|
|
|
return r;
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
2000-05-05 15:25:49 +00:00
|
|
|
return importo(TRUE, lordo, doc().decimals());
|
1997-06-03 15:56:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
real TRiga_documento::imposta(bool round) const
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
return iva(round ? doc().decimals() : 20);
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-10-02 16:57:49 +00:00
|
|
|
real TRiga_documento::provvigione(int ndec) const
|
|
|
|
{
|
|
|
|
real val;
|
|
|
|
|
|
|
|
if (ndec == AUTO_DECIMALS)
|
2000-05-05 15:25:49 +00:00
|
|
|
ndec = doc().decimals();
|
1997-10-02 16:57:49 +00:00
|
|
|
const TString & field = tipo().provv();
|
|
|
|
if (field.not_empty())
|
|
|
|
val = get_real(field);
|
1999-05-24 13:34:11 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
const char tipo_riga = tipo().tipo();
|
|
|
|
val = importo(TRUE, FALSE, ndec);
|
|
|
|
|
|
|
|
if (tipo_riga == RIGA_MERCE || tipo_riga == RIGA_SPESEDOC || tipo_riga == RIGA_PRESTAZIONI)
|
|
|
|
{
|
1999-07-16 14:59:11 +00:00
|
|
|
real netto_testa;
|
|
|
|
TString80 s;
|
|
|
|
|
|
|
|
if (scontoexpr2perc(doc().get(DOC_SCONTOPERC), FALSE, s, netto_testa) && netto_testa != ZERO)
|
|
|
|
val *= netto_testa;
|
|
|
|
}
|
1999-05-24 13:34:11 +00:00
|
|
|
|
|
|
|
val *= get_real(RDOC_PERCPROV) / 100.0;
|
|
|
|
}
|
1997-10-02 16:57:49 +00:00
|
|
|
val.round(ndec);
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
real TRiga_documento::qtaresidua() const
|
|
|
|
{
|
|
|
|
real val;
|
|
|
|
|
|
|
|
if (!get_bool(RDOC_RIGAEVASA))
|
|
|
|
{
|
|
|
|
val = get_real(RDOC_QTA) - get_real(RDOC_QTAEVASA);
|
|
|
|
if (val < ZERO)
|
|
|
|
val = ZERO;
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
|
|
|
real TRiga_documento::valore(bool totale, int ndec) const
|
|
|
|
{
|
|
|
|
real val;
|
|
|
|
|
|
|
|
if (ndec == AUTO_DECIMALS)
|
2000-05-05 15:25:49 +00:00
|
|
|
ndec = doc().decimals();
|
1998-08-25 18:07:30 +00:00
|
|
|
|
|
|
|
const TString16 field(totale ? tipo().rigavalore() : tipo().rigavalres());
|
|
|
|
|
|
|
|
if (field.not_empty())
|
|
|
|
val = get_real(field);
|
|
|
|
val.round(ndec);
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TRiga_documento::dirty_fields(bool dirty_document)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
for (TDocumento_variable_field * f = (TDocumento_variable_field *) first_variable_field();
|
1998-11-04 18:04:26 +00:00
|
|
|
f != NULL; f = (TDocumento_variable_field *) succ_variable_field())
|
1997-06-03 15:56:27 +00:00
|
|
|
f->set_dirty();
|
|
|
|
if (dirty_document)
|
|
|
|
((TDocumento &)doc()).dirty_fields();
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
bool TRiga_documento::doc_dependent() const
|
|
|
|
|
|
|
|
{
|
|
|
|
if (tipo_valido())
|
|
|
|
{
|
|
|
|
const char tipor = tipo().tipo();
|
|
|
|
|
|
|
|
if (tipor == RIGA_SPESEDOC)
|
|
|
|
return spesa().tipo() == 'P';
|
|
|
|
else
|
|
|
|
if (tipor == RIGA_SCONTI)
|
|
|
|
return get("SCONTO").not_empty();
|
|
|
|
}
|
|
|
|
return FALSE;
|
1996-08-21 10:24:21 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TRiga_documento::put_str(const char* fieldname, const char* val)
|
|
|
|
{
|
1998-01-09 09:57:01 +00:00
|
|
|
if (strcmp(fieldname, RDOC_TIPORIGA) == 0)
|
1997-06-03 15:56:27 +00:00
|
|
|
{
|
1998-01-09 09:57:01 +00:00
|
|
|
const TString16 v(val);
|
|
|
|
if (TRectype::get(RDOC_TIPORIGA) != v)
|
1997-08-26 12:38:08 +00:00
|
|
|
{
|
|
|
|
TAuto_variable_rectype::put_str(fieldname, v);
|
|
|
|
reset_fields(*this);
|
|
|
|
set_fields(*this);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
dirty_fields();
|
1997-06-03 15:56:27 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
1997-08-26 12:38:08 +00:00
|
|
|
TAuto_variable_rectype::put_str(fieldname, val);
|
1997-06-03 15:56:27 +00:00
|
|
|
dirty_fields();
|
|
|
|
}
|
1998-08-25 18:07:30 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
bool TRiga_documento::is_articolo() const
|
|
|
|
{
|
|
|
|
const char t = tipo().tipo();
|
|
|
|
return (t == RIGA_MERCE || t == RIGA_OMAGGI) && get("CODARTMAG").not_empty();
|
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TRiga_documento::zero(const char * fieldname)
|
1996-08-21 10:24:21 +00:00
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
if (strcmp(fieldname, RDOC_TIPORIGA) == 0)
|
1997-06-03 15:56:27 +00:00
|
|
|
reset_fields(*this);
|
|
|
|
TAuto_variable_rectype::zero(fieldname);
|
|
|
|
dirty_fields();
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TRiga_documento::zero(char c)
|
1996-08-19 07:47:53 +00:00
|
|
|
{
|
1997-06-03 15:56:27 +00:00
|
|
|
reset_fields(*this);
|
|
|
|
TAuto_variable_rectype::zero(c);
|
1996-08-19 07:47:53 +00:00
|
|
|
}
|
|
|
|
|
1997-06-03 15:56:27 +00:00
|
|
|
void TRiga_documento::autosave(TSheet_field & f)
|
|
|
|
{
|
|
|
|
const int num = numero() - 1;
|
|
|
|
|
|
|
|
if (num >= 0 && num < f.items())
|
|
|
|
{
|
|
|
|
TToken_string & row = f.row(num);
|
|
|
|
|
1999-07-16 14:59:11 +00:00
|
|
|
const int lordo_id = f.cid2index(FR_LORDO);
|
1999-06-18 15:35:05 +00:00
|
|
|
const bool lordo = strcmp(row.get(lordo_id), "X") == 0;
|
|
|
|
if (lordo)
|
|
|
|
{
|
1999-07-16 14:59:11 +00:00
|
|
|
row.add(" ", lordo_id);
|
|
|
|
f.sheet_mask().reset(FR_LORDO);
|
1999-06-18 15:35:05 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
put( "TIPORIGA", row.get( f.cid2index(FR_TIPORIGA )) );
|
|
|
|
TString16 codmag(row.get(f.cid2index(FR_CODMAG)));
|
|
|
|
|
|
|
|
codmag.left_just(3);
|
|
|
|
codmag << row.get( f.cid2index(FR_CODDEP ));
|
|
|
|
put( "CODMAG", codmag);
|
|
|
|
put( "CODART", row.get( f.cid2index(FR_CODART )) );
|
1999-07-16 14:59:11 +00:00
|
|
|
TString liv;
|
|
|
|
for (int l = 0; l<4 ; l++)
|
|
|
|
doc().livelli().pack_grpcode(liv,row.get(f.cid2index(FR_LIV1+l)),l+1);
|
1997-06-13 14:01:20 +00:00
|
|
|
put( "LIVELLO", liv); // da modificare
|
1997-06-03 15:56:27 +00:00
|
|
|
TString s(row.get(f.cid2index(FR_DESCR)));
|
|
|
|
int split_pos = s.find('\n');
|
|
|
|
|
|
|
|
const int descr_len = length("DESCR");
|
|
|
|
if (split_pos < 0 && s.len() > descr_len)
|
|
|
|
split_pos = descr_len;
|
2000-05-05 15:25:49 +00:00
|
|
|
if (split_pos > descr_len)
|
|
|
|
split_pos = descr_len;
|
1997-06-03 15:56:27 +00:00
|
|
|
if (split_pos > 0)
|
|
|
|
{
|
|
|
|
put( "DESCR", s.left(split_pos));
|
|
|
|
put("DESCLUNGA", "X");
|
|
|
|
put("DESCEST", s.mid(split_pos));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
put("DESCR", s);
|
|
|
|
put("DESCLUNGA", "");
|
|
|
|
zero("DESCEST");
|
|
|
|
}
|
|
|
|
|
1999-06-18 15:35:05 +00:00
|
|
|
const int prezzo_id = f.cid2index(FR_PREZZO);
|
|
|
|
real prezzo(row.get(prezzo_id));
|
|
|
|
const TString16 codiva(row.get(f.cid2index(FR_CODIVA)));
|
|
|
|
if (lordo)
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
iva(codiva).scorpora(prezzo, doc().decimals(TRUE));
|
1999-06-18 15:35:05 +00:00
|
|
|
|
|
|
|
const TString prezzo_str(prezzo.string());
|
|
|
|
|
|
|
|
row.add(prezzo_str, prezzo_id);
|
|
|
|
f.sheet_mask().set(FR_PREZZO, prezzo_str);
|
|
|
|
}
|
|
|
|
put( "PREZZO", prezzo);
|
1997-06-03 15:56:27 +00:00
|
|
|
put( "UMQTA", row.get( f.cid2index(FR_UMQTA )) );
|
1997-08-06 15:31:15 +00:00
|
|
|
put( "QTA", row.get( f.cid2index(FR_QTA )) );
|
1997-06-03 15:56:27 +00:00
|
|
|
put( "QTAEVASA", row.get( f.cid2index(FR_QTAEVASA )) );
|
|
|
|
put( "RIGAEVASA", row.get( f.cid2index(FR_RIGAEVASA )) );
|
|
|
|
put( "TARA", row.get( f.cid2index(FR_TARA )) );
|
|
|
|
put( "PNETTO", row.get( f.cid2index(FR_PNETTO )) );
|
|
|
|
put( "NCOLLI", row.get( f.cid2index(FR_NCOLLI )) );
|
|
|
|
put( "DAEVADERE", row.get( f.cid2index(FR_DAEVADERE )) );
|
|
|
|
put( "SCONTO", row.get( f.cid2index(FR_SCONTO )) );
|
|
|
|
put( "PERCPROV", row.get( f.cid2index(FR_PERCPROV )) );
|
1999-06-18 15:35:05 +00:00
|
|
|
put( "IMPFISUN", row.get( f.cid2index(FR_IMPFISUN )) );
|
1997-06-03 15:56:27 +00:00
|
|
|
put( "IMPFISSO", row.get( f.cid2index(FR_IMPFISSO )) );
|
1999-06-18 15:35:05 +00:00
|
|
|
put( "CODIVA", codiva);
|
1997-06-03 15:56:27 +00:00
|
|
|
put( "ADDIVA", row.get( f.cid2index(FR_ADDIVA )) );
|
|
|
|
put( "ASPBENI", row.get( f.cid2index(FR_ASPBENI )) );
|
1997-06-27 09:21:13 +00:00
|
|
|
put( "CAUSMAG", row.get( f.cid2index(FR_CAUS )) );
|
|
|
|
TString16 codmagc(row.get(f.cid2index(FR_CODMAGC)));
|
|
|
|
|
|
|
|
codmagc.left_just(3);
|
|
|
|
codmagc << row.get( f.cid2index(FR_CODDEPC ));
|
|
|
|
put( "CODMAGC", codmagc);
|
1999-04-06 15:34:39 +00:00
|
|
|
put( "DATACONS", row.get( f.cid2index(FR_DATACONS )) );
|
1997-06-27 09:21:13 +00:00
|
|
|
put( "CODARTMAG", row.get( f.cid2index(FR_CODARTMAG )) );
|
|
|
|
put( "CHECKED", row.get( f.cid2index(FR_CHECKED )) );
|
1998-08-25 18:07:30 +00:00
|
|
|
put( RDOC_QTAGG1, row.get( f.cid2index(FR_QTAGG1 )) );
|
|
|
|
put( RDOC_QTAGG2, row.get( f.cid2index(FR_QTAGG2 )) );
|
|
|
|
put( RDOC_QTAGG3, row.get( f.cid2index(FR_QTAGG3 )) );
|
|
|
|
put( RDOC_QTAGG4, row.get( f.cid2index(FR_QTAGG4 )) );
|
|
|
|
put( RDOC_QTAGG5, row.get( f.cid2index(FR_QTAGG5 )) );
|
1998-11-04 18:04:26 +00:00
|
|
|
put( RDOC_IMPIANTO, row.get( f.cid2index(FR_IMPIANTO )) );
|
|
|
|
put( RDOC_LINEA, row.get( f.cid2index(FR_LINEA )) );
|
2002-02-26 16:20:19 +00:00
|
|
|
put( RDOC_CODCMS, row.get( f.cid2index(FR_CODCMS)) );
|
|
|
|
put( RDOC_FASCMS, row.get( f.cid2index(FR_FASCMS)) );
|
1997-06-03 15:56:27 +00:00
|
|
|
}
|
1999-07-16 14:59:11 +00:00
|
|
|
}
|
1997-06-03 15:56:27 +00:00
|
|
|
|
|
|
|
void TRiga_documento::autoload(TSheet_field & f)
|
|
|
|
{
|
|
|
|
const int num = numero() - 1;
|
|
|
|
|
|
|
|
TToken_string & row = f.row(num);
|
|
|
|
row.cut(0);
|
|
|
|
|
|
|
|
row.add( get( "TIPORIGA" ), f.cid2index(FR_TIPORIGA ));
|
1998-11-04 18:04:26 +00:00
|
|
|
const TString16 codmag(get("CODMAG"));
|
1997-06-03 15:56:27 +00:00
|
|
|
row.add( codmag.left(3), f.cid2index(FR_CODMAG ));
|
|
|
|
row.add( codmag.mid(3), f.cid2index(FR_CODDEP ));
|
|
|
|
row.add( get( "CODART" ), f.cid2index(FR_CODART ));
|
1998-11-04 18:04:26 +00:00
|
|
|
TString16 liv(get("LIVELLO"));
|
1999-07-16 14:59:11 +00:00
|
|
|
|
|
|
|
for (int l = 0; l<4 ; l++)
|
|
|
|
row.add(doc().livelli().unpack_grpcode(liv,l+1), f.cid2index(FR_LIV1+l ));
|
1998-11-04 18:04:26 +00:00
|
|
|
TString s(1024); s = get("DESCR");
|
1997-06-03 15:56:27 +00:00
|
|
|
if (get_bool("DESCLUNGA"))
|
|
|
|
s << get("DESCEST");
|
|
|
|
row.add(s, f.cid2index(FR_DESCR ));
|
|
|
|
row.add( get( "UMQTA" ), f.cid2index(FR_UMQTA ));
|
|
|
|
row.add( get( "PREZZO" ), f.cid2index(FR_PREZZO ));
|
1997-08-06 15:31:15 +00:00
|
|
|
row.add( get( "QTA" ), f.cid2index(FR_QTA ));
|
1997-06-03 15:56:27 +00:00
|
|
|
row.add( get( "QTAEVASA" ), f.cid2index(FR_QTAEVASA ));
|
|
|
|
row.add( get( "RIGAEVASA" ), f.cid2index(FR_RIGAEVASA ));
|
|
|
|
row.add( get( "TARA" ), f.cid2index(FR_TARA ));
|
|
|
|
row.add( get( "PNETTO" ), f.cid2index(FR_PNETTO ));
|
|
|
|
row.add( get( "NCOLLI" ), f.cid2index(FR_NCOLLI ));
|
|
|
|
row.add( get( "DAEVADERE" ), f.cid2index(FR_DAEVADERE ));
|
|
|
|
row.add( get( "SCONTO" ), f.cid2index(FR_SCONTO ));
|
|
|
|
row.add( get( "PERCPROV" ), f.cid2index(FR_PERCPROV ));
|
1999-07-16 14:59:11 +00:00
|
|
|
row.add( get( "IMPFISUN" ), f.cid2index(FR_IMPFISUN ));
|
1997-06-03 15:56:27 +00:00
|
|
|
row.add( get( "IMPFISSO" ), f.cid2index(FR_IMPFISSO ));
|
|
|
|
row.add( get( "CODIVA" ), f.cid2index(FR_CODIVA ));
|
|
|
|
row.add( get( "ADDIVA" ), f.cid2index(FR_ADDIVA ));
|
|
|
|
row.add( get( "ASPBENI" ), f.cid2index(FR_ASPBENI ));
|
1997-06-27 09:21:13 +00:00
|
|
|
row.add( get( "CAUSMAG" ), f.cid2index(FR_CAUS ));
|
1998-11-04 18:04:26 +00:00
|
|
|
const TString16 codmagc(get("CODMAGC"));
|
1997-06-27 09:21:13 +00:00
|
|
|
row.add( codmagc.left(3), f.cid2index(FR_CODMAGC ));
|
|
|
|
row.add( codmagc.mid(3), f.cid2index(FR_CODDEPC ));
|
1999-04-06 15:34:39 +00:00
|
|
|
row.add( get("DATACONS"), f.cid2index(FR_DATACONS ));
|
1997-06-27 09:21:13 +00:00
|
|
|
row.add( get( "CODARTMAG" ), f.cid2index(FR_CODARTMAG));
|
|
|
|
row.add( get( "CHECKED" ), f.cid2index(FR_CHECKED));
|
1998-08-25 18:07:30 +00:00
|
|
|
row.add( get( RDOC_QTAGG1), f.cid2index(FR_QTAGG1));
|
|
|
|
row.add( get( RDOC_QTAGG2), f.cid2index(FR_QTAGG2));
|
|
|
|
row.add( get( RDOC_QTAGG3), f.cid2index(FR_QTAGG3));
|
|
|
|
row.add( get( RDOC_QTAGG4) , f.cid2index(FR_QTAGG4));
|
|
|
|
row.add( get( RDOC_QTAGG5) , f.cid2index(FR_QTAGG5));
|
1998-11-04 18:04:26 +00:00
|
|
|
row.add( get( RDOC_IMPIANTO) , f.cid2index(FR_IMPIANTO));
|
|
|
|
row.add( get( RDOC_LINEA) , f.cid2index(FR_LINEA));
|
2002-02-26 16:20:19 +00:00
|
|
|
row.add( get( RDOC_CODCMS) , f.cid2index(FR_CODCMS));
|
|
|
|
row.add( get( RDOC_FASCMS) , f.cid2index(FR_FASCMS));
|
1997-06-03 15:56:27 +00:00
|
|
|
}
|
1996-08-19 07:47:53 +00:00
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
TArticolo_giacenza * TRiga_documento::articolo() const
|
|
|
|
{
|
|
|
|
if (_articoli == NULL)
|
|
|
|
_articoli = new TCache_articoli();
|
|
|
|
|
|
|
|
const TString & codart = get(RDOC_CODARTMAG);
|
|
|
|
if (codart.empty())
|
|
|
|
return NULL;
|
|
|
|
return &(_articoli->art(codart));
|
|
|
|
}
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
void TRiga_documento::set_original_rdoc_key(const TRiga_documento& orig)
|
1999-04-06 15:34:39 +00:00
|
|
|
{
|
1999-10-22 10:00:18 +00:00
|
|
|
put(RDOC_DACODNUM, orig.get(RDOC_CODNUM));
|
|
|
|
put(RDOC_DAANNO, orig.get(RDOC_ANNO));
|
|
|
|
put(RDOC_DAPROVV, orig.get(RDOC_PROVV));
|
|
|
|
put(RDOC_DANDOC, orig.get(RDOC_NDOC));
|
|
|
|
put(RDOC_DAIDRIGA, orig.get(RDOC_IDRIGA));
|
1999-04-06 15:34:39 +00:00
|
|
|
}
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
void TRiga_documento::reset_original_rdoc_key()
|
1999-04-06 15:34:39 +00:00
|
|
|
{
|
|
|
|
zero(RDOC_DACODNUM);
|
|
|
|
zero(RDOC_DAANNO);
|
|
|
|
zero(RDOC_DAPROVV);
|
|
|
|
zero(RDOC_DANDOC);
|
1999-10-22 10:00:18 +00:00
|
|
|
zero(RDOC_DAIDRIGA);
|
1999-04-06 15:34:39 +00:00
|
|
|
}
|
|
|
|
|
1999-10-22 10:00:18 +00:00
|
|
|
const TRectype* TRiga_documento::find_original_rdoc() const
|
|
|
|
{
|
|
|
|
const long id = get_long(RDOC_DAIDRIGA);
|
|
|
|
if (id > 0L)
|
|
|
|
{
|
|
|
|
TToken_string key;
|
|
|
|
key.add(get(RDOC_DACODNUM));
|
|
|
|
key.add(get(RDOC_DAANNO));
|
|
|
|
key.add(get(RDOC_DAPROVV));
|
|
|
|
key.add(get(RDOC_DANDOC));
|
|
|
|
for (int r = 1; ; r++)
|
|
|
|
{
|
|
|
|
key.add(r, 4);
|
|
|
|
const TRectype& rec = cache().get(LF_RIGHEDOC, key);
|
|
|
|
if (rec.empty()) break;
|
|
|
|
if (rec.get_long(RDOC_IDRIGA) == id)
|
|
|
|
return &rec;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|