Patch level : 10.0 322

Files correlati     : VE0.exe ve6.exe
Ricompilazione Demo : [ ]
Commento

Fatturazione risorse e attrezzature come prestazioni quando e' indicato un codice prestazione


git-svn-id: svn://10.65.10.50/trunk@18969 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-05-29 16:25:58 +00:00
parent 920bf7f880
commit 3ad340e435
3 changed files with 70 additions and 46 deletions

@ -219,7 +219,8 @@ const TSpesa_prest & TRiga_documento::spesa() const
{
const char tipor = tipo().tipo();
CHECK(tipor == RIGA_SPESEDOC || tipor == RIGA_PRESTAZIONI, "Tipo riga incompatibile con le spese");
CHECK(tipor == RIGA_SPESEDOC || tipor == RIGA_PRESTAZIONI ||
tipor == RIGA_RISORSE || tipor == RIGA_ATTREZZATURE, "Tipo riga incompatibile con le spese");
test_firm();

@ -257,6 +257,8 @@ protected:
virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); }
bool change_clifo() { return get_bool("B14"); }
virtual bool da_raggruppare(const TRiga_documento & rin) { return true; }
virtual void elabora_riga(TRiga_documento& r, TDocumento& doc_out, bool usa_dcons, bool ragg_rig, bool ignora_desc,
TToken_string & campi_riga, const TDate & dcons, const TDate & ddoc);
public:
virtual bool raggruppa(TDocumento& din, TDocumento& dout);

@ -117,6 +117,71 @@ void TFatturazione_bolle::create_row(TDocumento& doc_out, const TRiga_documento&
}
}
void TFatturazione_bolle::elabora_riga(TRiga_documento& r, TDocumento& doc_out, bool usa_dcons, bool ragg_rig, bool ignora_desc,
TToken_string & campi_riga, const TDate & dcons, const TDate & ddoc)
{
TRiga_documento rin(r);
const bool rindesc = rin.sola_descrizione(); // La riga di input e' descrittiva
if (ignora_desc && rindesc)
return;
if (rin.is_attrezzatura() || rin.is_risorsa())
{
const TSpesa_prest & risatt = rin.spesa();
const TString codprest(risatt.revenue());
if ( codprest.full())
{
const TSpesa_prest prest(codprest, RIGA_PRESTAZIONI);
rin.put(RDOC_TIPORIGA, "06");
rin.put(RDOC_CODART, prest.codice());
rin.put(RDOC_DESCR, prest.descrizione());
rin.put(RDOC_UMQTA, prest.um());
rin.put(RDOC_PREZZO, prest.prezzo());
rin.put(RDOC_CODIVA, prest.cod_iva());
}
}
if (usa_dcons)
{
TDate data_cons = rin.get(RDOC_DATACONS);
if (!data_cons.ok())
data_cons = dcons;
if (ddoc < data_cons || rin.get_bool(RDOC_RIGAEVASA))
return;
const real q = rin.get(RDOC_QTA);
r.put(RDOC_QTAEVASA, q);
r.put(RDOC_RIGAEVASA, true);
}
bool elaborata = false;
// Raggruppo le righe se e' settato il flag di raggruppamento e
// se la riga non contiene solo una descrizione
if (ragg_rig && !rindesc) // Se devo raggruppare le righe ...
{
const int last = doc_out.physical_rows();
for (int o = 1; o <= last; o++) // ... cerca una riga compatibile
{
TRiga_documento& rout = doc_out[o];
if (rout.sola_descrizione()) // Ignora le righe descrittive
continue;
if (da_raggruppare(rin) && rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ...
{
add_rows(rout, rin);
elaborata = true; // Ricorda di averla gia' elaborata
break;
}
}
}
if (!elaborata) // Se la riga non e' stata gia' sommata ...
create_row(doc_out, rin);
}
bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
{
#ifdef DBG
@ -273,51 +338,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
const bool ragg_rig = campi_riga.full();
for (int r = 1; r <= doc_in.physical_rows(); r++)
{
TRiga_documento & rin = doc_in[r];
const bool rindesc = rin.sola_descrizione(); // La riga di input e' descrittiva
if (ignora_desc && rindesc)
continue;
if (usa_dcons)
{
TDate data_cons = rin.get(RDOC_DATACONS);
if (!data_cons.ok())
data_cons = dcons;
if (ddoc < data_cons || rin.get_bool(RDOC_RIGAEVASA))
continue;
const real q = rin.get(RDOC_QTA);
rin.put(RDOC_QTAEVASA, q);
rin.put(RDOC_RIGAEVASA, true);
}
bool elaborata = false;
// Raggruppo le righe se e' settato il flag di raggruppamento e
// se la riga non contiene solo una descrizione
if (ragg_rig && !rindesc) // Se devo raggruppare le righe ...
{
const int last = doc_out.physical_rows();
for (int o = 1; o <= last; o++) // ... cerca una riga compatibile
{
TRiga_documento& rout = doc_out[o];
if (rout.sola_descrizione()) // Ignora le righe descrittive
continue;
if (da_raggruppare(rin) && rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ...
{
add_rows(rout, rin);
elaborata = true; // Ricorda di averla gia' elaborata
break;
}
}
}
if (!elaborata) // Se la riga non e' stata gia' sommata ...
create_row(doc_out, rin);
}
elabora_riga(doc_in[r], doc_out, usa_dcons, ragg_rig, ignora_desc, campi_riga, dcons, ddoc);
//cambio stato documento
bool cambia_stato_doc_in = true;