Patch level : 10.0 patch 421

Files correlati     : lv2
Ricompilazione Demo : [ ]
Commento            :
Corretta la generazione delle fatrture di solo nolo


git-svn-id: svn://10.65.10.50/trunk@19643 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-11-17 17:40:01 +00:00
parent 801514f96b
commit 2c6da54e05

View File

@ -134,7 +134,7 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
bool rifbol = contr.get_bool(LVCONDV_RIFBOL); bool rifbol = contr.get_bool(LVCONDV_RIFBOL);
bool riftest = ini_get_bool(CONFIG_DITTA, "lv", "RifTest"); bool riftest = ini_get_bool(CONFIG_DITTA, "lv", "RifTest");
if (doc.physical_rows()>0 && doc[1].is_descrizione()) if (doc.physical_rows() > 0 && doc[1].is_descrizione())
{ {
if (elcons) if (elcons)
{ {
@ -146,7 +146,7 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
else else
if (!rifbol) if (!rifbol)
doc.destroy_row(1, true); doc.destroy_row(1, true);
} }
//se devo mettere i riferimenti della bolla in testata, prendo la descrizione della prima riga //se devo mettere i riferimenti della bolla in testata, prendo la descrizione della prima riga
//e la metto sulla testata del documento, poi cancello la prima riga del documento //e la metto sulla testata del documento, poi cancello la prima riga del documento
@ -174,9 +174,9 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
if (ragart) if (ragart)
{ {
real totmerc; real totmerc;
const int rows=doc.physical_rows(); const int rows = doc.physical_rows();
for (int i=1; i<=rows; i++) //calcolo totale merce for (int i=1; i <= rows; i++) //calcolo totale merce
{ {
const TRiga_documento& riga = doc[i]; const TRiga_documento& riga = doc[i];
if (riga.is_merce()) if (riga.is_merce())
@ -269,35 +269,26 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
switch (tipocanfix) switch (tipocanfix)
{ {
case 0: case 0:
{ for (int k = rigamerce+1; k <= rows; k++)
for (int k = rigamerce+1; k <= rows; k++) doc.destroy_row(k);
{ break;
doc.destroy_row(k); case 1:
} for (int k = rigamerce+1; k <= rows; k++)
} {
break; TRiga_documento& rout = doc[k];
case 1: rout.zero(RDOC_PREZZO);
{ }
for (int k = rigamerce+1; k <= rows; k++) break;
{ case 2:
TRiga_documento& rout = doc[k]; for (int k = rigamerce+1; k <= rows; k++)
rout.zero(RDOC_PREZZO); {
} TRiga_documento& rout = doc[k];
} rout.zero(RDOC_PREZZO);
break; rout.zero(RDOC_QTA);
case 2: }
{ break;
for (int k = rigamerce+1; k <= rows; k++) default: break;
{
TRiga_documento& rout = doc[k];
rout.zero(RDOC_PREZZO);
rout.zero(RDOC_QTA);
}
}
break;
default:
break;
} }
break; break;
} }
@ -325,219 +316,215 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
//dalle giacenze articolo per cliente, altrimenti leggo la dotazione odierna //dalle giacenze articolo per cliente, altrimenti leggo la dotazione odierna
if (index >=0) if (index >=0)
{ {
if (tipodot=="I") if (tipodot == "I")
dot=artlav.clifomag(annoes)[index].get_real("DOTIN"); dot = artlav.clifomag(annoes)[index].get_real("DOTIN");
else else
dot=artlav.clifomag(annoes)[index].get_real("DOTOD"); dot = artlav.clifomag(annoes)[index].get_real("DOTOD");
} }
//leggo dalla riga contratto il tipo forfait //leggo dalla riga contratto il tipo forfait
const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF); const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF);
switch (tipoforf) switch (tipoforf)
{ {
case 0: //forfait = NESSUNO case 0: break;//forfait = NESSUNO
break;
case 1: //forfait = A VALORE FISSO
{
rout.put(RDOC_QTA, UNO); //qta fissa a UNO
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); //prezzo letto dalla riga contratto
// gestione in base codice per valore fisso ??? tolta la scelta dell'articolo o del cliente
}
break;
case 2: //forfait = NOLO
{
//aggiungo una riga tipo merce, che contiene tutti i dati della riga del documento
//di partenza, poi costruisco la descrizione in base alla periodicità di fatturazione,
//metto la qta uguale alla dotazione che ho appena letto
//e prendo il prezzo nolo dalla riga contratto
TRiga_documento& nolorow = doc.insert_row(++i, "01");
doc.copy_data(nolorow, rout);
TString80 descr("Nolo");
const int contrper = contr.get_int(LVCONDV_PERFAT);
switch (contrper) case 1: //forfait = A VALORE FISSO
{ {
case 0: rout.put(RDOC_QTA, UNO); //qta fissa a UNO
descr << " per il giorno"; rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); //prezzo letto dalla riga contratto
break; // gestione in base codice per valore fisso ??? tolta la scelta dell'articolo o del cliente
case 1: }
descr << " per la settimana"; break;
break; case 2: //forfait = NOLO
case 2: {
descr << " per la quindicina"; //aggiungo una riga tipo merce, che contiene tutti i dati della riga del documento
break; //di partenza, poi costruisco la descrizione in base alla periodicità di fatturazione,
case 3: //metto la qta uguale alla dotazione che ho appena letto
descr << " per il mese"; //e prendo il prezzo nolo dalla riga contratto
break; TRiga_documento& nolorow = doc.insert_row(++i, "01");
default: doc.copy_data(nolorow, rout);
break; TString80 descr("Nolo");
} const int contrper = contr.get_int(LVCONDV_PERFAT);
nolorow.put(RDOC_DESCR,descr);
nolorow.put(RDOC_QTA, dot); switch (contrper)
nolorow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZNOL)); {
} case 0: descr << " per il giorno"; break;
break; case 1: descr << " per la settimana"; break;
case 3: //forfait = CICLAGGIO case 2: descr << " per la quindicina"; break;
{ case 3: descr << " per il mese"; break;
//leggo la quantità consegnata e calcolo consumo e ciclaggio secondo le formule default: break;
//CONSUMO = QTA * PREZZO(dalla riga documento) }
//CLICLAGGIO = DOT * PREZZO(dalla riga contratto) * MINIMO CICLAGGIO nolorow.put(RDOC_DESCR,descr);
const real qta = rout.get_real(RDOC_QTA);
const real consumo = qta * rout.get_real(RDOC_PREZZO); nolorow.put(RDOC_QTA, dot);
const real ciclaggio = dot * rcont.get_real(LVRCONDV_PREZZO) * rcont.get_real(LVRCONDV_MINCIC); nolorow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZNOL));
//se il consumo è minore del ciclaggio, allora rout.put(RDOC_QTA, 0);
if (consumo < ciclaggio) }
break;
case 3: //forfait = CICLAGGIO
{
//leggo la quantità consegnata e calcolo consumo e ciclaggio secondo le formule
//CONSUMO = QTA * PREZZO(dalla riga documento)
//CLICLAGGIO = DOT * PREZZO(dalla riga contratto) * MINIMO CICLAGGIO
const real qta = rout.get_real(RDOC_QTA);
const real consumo = qta * rout.get_real(RDOC_PREZZO);
const real ciclaggio = dot * rcont.get_real(LVRCONDV_PREZZO) * rcont.get_real(LVRCONDV_MINCIC);
//se il consumo è minore del ciclaggio, allora
if (consumo < ciclaggio)
{
//leggo il flag del tipo ciclaggio
const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO);
//calcolo il valore cicl secondo la formula CICL = MINIMO CICLAGGIO * DOT
const real cicl = rcont.get_real(LVRCONDV_MINCIC) * dot;
//se il ciclaggio è su due linee, allora aggiungo una riga merce, per pareggiare il minimo ciclaggio
//che ha come quantità la differenza tra la quantità di minimo cilcaggio
//e la quantità effettivamente consegnata e come prezzo il prezzo preso dalla riga contratto;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
if (cicl2rig)
{
TRiga_documento& congrow = doc.insert_row(++i, "01");
doc.copy_data(congrow,rout);
congrow.put(RDOC_DESCR,"Pareggio minimo ciclaggio");
congrow.put(RDOC_QTA, cicl - qta);
congrow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
}
else
{
rout.put(RDOC_QTA, cicl);
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
}
}
}
break;
case 4: //forfait = % SUL VALORE CONVENZIONALE
{
//leggo dalla riga contratto la % sul val.conv su articolo <A> o cliente <C>
const char tipovalconv = rcont.get_char(LVRCONDV_VCARTCLI);
//se la percentuale sul valore convenzionale è sull'articolo, allora:
if (tipovalconv == 'A')
{
//leggo la quantità consegnata e calcolo consumo e importo convenzionale secondo le formule
//CONSUMO = QTA * PREZZO(dalla riga documento)
//IMPCONV = DOT * PREZZO(dalla riga contratto) * PERCENTUALE DI FORFAIT CLIENTE
const real qta = rout.get_real(RDOC_QTA);
const real consumo = qta * rout.get_real(RDOC_PREZZO);
const real impconv = dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL) / 100;
//se il consumo è minore del ciclaggio, allora
if (consumo < impconv)
{
const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO);
//se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene
//il conguaglio al valore convenzionale, che ha come quantità la costante UNO
//e come prezzo la differenza tra l'importo convenzionale e il consumo;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
if (cicl2rig)
{ {
//leggo il flag del tipo ciclaggio TRiga_documento& congrow = doc.insert_row(++i, "01");
const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO); doc.copy_data(congrow, rout);
//calcolo il valore cicl secondo la formula congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale");
//CICL = MINIMO CICLAGGIO * DOT congrow.put(RDOC_QTA, UNO);
const real cicl = rcont.get_real(LVRCONDV_MINCIC) * dot; congrow.put(RDOC_PREZZO, impconv - consumo);
//se il ciclaggio è su due linee, allora aggiungo una riga merce, per pareggiare il minimo ciclaggio
//che ha come quantità la differenza tra la quantità di minimo cilcaggio
//e la quantità effettivamente consegnata e come prezzo il prezzo preso dalla riga contratto;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
if (cicl2rig)
{
TRiga_documento& congrow = doc.insert_row(++i, "01");
doc.copy_data(congrow,rout);
congrow.put(RDOC_DESCR,"Pareggio minimo ciclaggio");
congrow.put(RDOC_QTA, cicl - qta);
congrow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
}
else
{
rout.put(RDOC_QTA, cicl);
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO));
}
}
}
break;
case 4: //forfait = % SUL VALORE CONVENZIONALE
{
//leggo dalla riga contratto la % sul val.conv su articolo <A> o cliente <C>
const char tipovalconv = rcont.get_char(LVRCONDV_VCARTCLI);
//se la percentuale sul valore convenzionale è sull'articolo, allora:
if (tipovalconv == 'A')
{
//leggo la quantità consegnata e calcolo consumo e importo convenzionale secondo le formule
//CONSUMO = QTA * PREZZO(dalla riga documento)
//IMPCONV = DOT * PREZZO(dalla riga contratto) * PERCENTUALE DI FORFAIT CLIENTE
const real qta = rout.get_real(RDOC_QTA);
const real consumo = qta * rout.get_real(RDOC_PREZZO);
const real impconv = dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL) / 100;
//se il consumo è minore del ciclaggio, allora
if (consumo < impconv)
{
const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO);
//se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene
//il conguaglio al valore convenzionale, che ha come quantità la costante UNO
//e come prezzo la differenza tra l'importo convenzionale e il consumo;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
if (cicl2rig)
{
TRiga_documento& congrow = doc.insert_row(++i, "01");
doc.copy_data(congrow, rout);
congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale");
congrow.put(RDOC_QTA, UNO);
congrow.put(RDOC_PREZZO, impconv - consumo);
}
else
{
rout.put(RDOC_QTA, UNO);
rout.put(RDOC_PREZZO, impconv);
}
}
} }
else else
{ {
//se la percentuale sul valore convenzionale è sul cliente, allora se il flag valconvcli è false rout.put(RDOC_QTA, UNO);
if (!valconvcli) rout.put(RDOC_PREZZO, impconv);
{ }
//pongo valconvcli a true in modo da non tornare più in questo if }
valconvcli = true; }
//instanzio i due real che andranno a contenere l'importo covenzionale totale e il consumo totale else
real impconvtot; {
real consumotot; //se la percentuale sul valore convenzionale è sul cliente, allora se il flag valconvcli è false
if (!valconvcli)
{
//pongo valconvcli a true in modo da non tornare più in questo if
valconvcli = true;
//instanzio i due real che andranno a contenere l'importo covenzionale totale e il consumo totale
real impconvtot;
real consumotot;
//scorro tutte le righe documento dalla riga in esame fino alla fine //scorro tutte le righe documento dalla riga in esame fino alla fine
for (int j = i; j < doc.physical_rows(); j++) for (int j = i; j < doc.physical_rows(); j++)
{
//instanzio la riga documento e sommo ai totali gli importi solo se
//la percentuale sul valore convenzionale è sul cliente
TRiga_documento& riga = doc[j];
const TString80 codart = riga.get(RDOC_CODART);
const TRectype & rcont = contr.row(codart);
const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI);
if (tipvalconvcli == 'C')
{
impconvtot += dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL);
consumotot += riga.get_real(RDOC_QTA) * riga.get_real(RDOC_PREZZO);
}
}
//se il consumo è minore del ciclaggio, allora
if (consumotot < impconvtot)
{
const bool cicl2rig=contr.get_bool(LVCONDV_CICLAGGIO);
//se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene
//il conguaglio al valore convenzionale, che ha come quantità la costante UNO
//e come prezzo la differenza tra l'importo convenzionale totale e il consumo totale;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
//e elimino tutte le righe che vanno a comporre il totale in modo che rimanga una riga sola
//per mostrare l'importo del conguaglio al valore convenzionale
if (cicl2rig)
{
TRiga_documento& congrow=doc.insert_row(++i, "01");
doc.copy_data(congrow, rout);
congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale");
congrow.put(RDOC_QTA, UNO);
congrow.put(RDOC_PREZZO, impconvtot - consumotot);
}
else
{
rout.put(RDOC_QTA, UNO);
rout.put(RDOC_PREZZO, impconvtot);
for (int k = doc.physical_rows(); k > i; k--)
{ {
//instanzio la riga documento e sommo ai totali gli importi solo se TRiga_documento& delrow = doc[k];
//la percentuale sul valore convenzionale è sul cliente const TString80 codart = delrow.get(RDOC_CODART);
TRiga_documento& riga = doc[j]; const TRectype& rcont = contr.row(codart);
const TString80 codart = riga.get(RDOC_CODART);
const TRectype & rcont = contr.row(codart);
const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI); const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI);
if (tipvalconvcli == 'C') if (tipvalconvcli == 'C')
{ doc.destroy_row(k, true);
impconvtot += dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL);
consumotot += riga.get_real(RDOC_QTA) * riga.get_real(RDOC_PREZZO);
}
}
//se il consumo è minore del ciclaggio, allora
if (consumotot < impconvtot)
{
const bool cicl2rig=contr.get_bool(LVCONDV_CICLAGGIO);
//se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene
//il conguaglio al valore convenzionale, che ha come quantità la costante UNO
//e come prezzo la differenza tra l'importo convenzionale totale e il consumo totale;
//altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando
//e elimino tutte le righe che vanno a comporre il totale in modo che rimanga una riga sola
//per mostrare l'importo del conguaglio al valore convenzionale
if (cicl2rig)
{
TRiga_documento& congrow=doc.insert_row(++i, "01");
doc.copy_data(congrow, rout);
congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale");
congrow.put(RDOC_QTA, UNO);
congrow.put(RDOC_PREZZO, impconvtot - consumotot);
}
else
{
rout.put(RDOC_QTA, UNO);
rout.put(RDOC_PREZZO, impconvtot);
for (int k = doc.physical_rows(); k > i; k--)
{
TRiga_documento& delrow = doc[k];
const TString80 codart = delrow.get(RDOC_CODART);
const TRectype& rcont = contr.row(codart);
const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI);
if (tipvalconvcli == 'C')
doc.destroy_row(k, true);
}
}
} }
} }
} }
}
break;
case 5: //forfait = FISSO SU DOTAZIONE INIZIALE
{
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART));
rout.put(RDOC_QTA, artlav.clifomag(annoes)[index].get_real("DOTIN"));
const TString80 codartorig=rout.get(RDOC_CODART);
for (int h = doc.physical_rows(); h > i; h--)
{
TRiga_documento& delrow = doc[h];
const TString80 codart=delrow.get(RDOC_CODART);
if ( codartorig == codart)
doc.destroy_row(h,true);
}
} }
break; }
default: }
break; break;
} case 5: //forfait = FISSO SU DOTAZIONE INIZIALE
} {
rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART));
rout.put(RDOC_QTA, artlav.clifomag(annoes)[index].get_real("DOTIN"));
const TString80 codartorig=rout.get(RDOC_CODART);
for (int h = doc.physical_rows(); h > i; h--)
{
TRiga_documento& delrow = doc[h];
const TString80 codart=delrow.get(RDOC_CODART);
if ( codartorig == codart)
doc.destroy_row(h, true);
}
}
break;
default: break;
}
} }
} }
} for(int h = doc.physical_rows(); h > 0; h--)
{
TRiga_documento& rdoc = doc[h];
if (rdoc.get(RDOC_DESCR).empty())
doc.destroy_row(h, true);
}
}
}
//ADD_ROWS: per adesso un segnaposto //ADD_ROWS: per adesso un segnaposto
void TFatturazione_lavanderie::add_rows(TRiga_documento & rout, TRiga_documento & rin) void TFatturazione_lavanderie::add_rows(TRiga_documento & rout, TRiga_documento & rin)
@ -789,7 +776,7 @@ void TFatturazione_lav_app::genera_bolle_nolo(TAssoc_array& cliela, TFatturazion
{ {
TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN"); TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN"); TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
char stato = cache().get("%TIP", tipodoc, "S2").left(1)[0]; char stato = cache().get("%TIP", tipodoc, "S2").mid(1,1)[0];
//preparo la query sui contratti //preparo la query sui contratti
TString str; TString str;
@ -806,35 +793,82 @@ void TFatturazione_lav_app::genera_bolle_nolo(TAssoc_array& cliela, TFatturazion
TLista_documenti doc_in; TLista_documenti doc_in;
TLista_documenti doc_out; TLista_documenti doc_out;
TDocumento doc('D', _msk->get_date(F_DATAFAT).year(), codnum, 0);
doc.put(DOC_TIPODOC, tipodoc);
doc.put(DOC_STATO, stato);
doc.put(DOC_TIPOCF, 'C');
for(bool ok = contr.move_first(); ok; ok = contr.move_next()) for(bool ok = contr.move_first(); ok; ok = contr.move_next())
{ {
//scarto i contratti scaduti //scarto i contratti scaduti
if (_msk->get_date(F_DADATA) <= contr.get(LVCONDV_DATAIN).as_date() || _msk->get_date(F_ADATA) >= contr.get(LVCONDV_DATASC).as_date()) if (contr.get(LVCONDV_DATASC).as_date().ok())
continue; if (_msk->get_date(F_DADATA) <= contr.get(LVCONDV_DATAIN).as_date() || _msk->get_date(F_ADATA) >= contr.get(LVCONDV_DATASC).as_date())
continue;
//scarto tutti quelli che non sono in periodo di fatturazione corretto //scarto tutti quelli che non sono in periodo di fatturazione corretto
if (contr.get(LVCONDV_PERFAT).as_int() > _msk->get_int(F_PERFAT)) if (contr.get(LVCONDV_PERFAT).as_int() > _msk->get_int(F_PERFAT))
continue; continue;
//sacrto tutti quelli a cui ho già fatturato //sacrto tutti quelli a cui ho già fatturato
if(!cliela.is_key(contr.get(LVCONDV_CODCF).as_string())) if(cliela.is_key(contr.get(LVCONDV_CODCF).as_string()))
continue; continue;
TDocumento *pdoc= new TDocumento('D', _msk->get_date(F_DATAFAT).year(), codnum, 0);
doc_in.add(pdoc);
TDocumento& doc = *pdoc;
doc.put(DOC_TIPODOC, tipodoc);
doc.put(DOC_STATO, stato);
doc.put(DOC_TIPOCF, 'C');
doc.put(DOC_CODCF, contr.get(LVCONDV_CODCF).as_int()); doc.put(DOC_CODCF, contr.get(LVCONDV_CODCF).as_int());
doc_in.add(doc); TLaundry_contract contratto(contr.cursor()->curr());
const long codcf = contratto.get_long(LVCONDV_CODCF);
const int codcont = contratto.get_int(LVCONDV_CODCONT);
TString str;
str << "USE LVRCONDV\n"
<< "FROM CODCF=" << codcf << " CODCONT=" << codcont << "\n"
<< "TO CODCF=" << codcf << " CODCONT=" << codcont;
TISAM_recordset rcont(str);
for(bool ok = rcont.move_first(); ok; ok = rcont.move_next())
{
TRectype& riga = rcont.cursor()->curr();
if (riga.get_int(LVRCONDV_TIPOFORF) == 2)
{
TRiga_documento& rdoc = doc.new_row("21");
rdoc.put(RDOC_CODART, riga.get(LVRCONDV_CODART));
rdoc.put(RDOC_CODARTMAG, riga.get(LVRCONDV_CODART));
rdoc.put(RDOC_QTA, 1);
rdoc.put(RDOC_QTAGG1, 1);
rdoc.put(RDOC_PREZZO, riga.get_real(LVRCONDV_PREZNOL));
rdoc.put(RDOC_CHECKED, true);
rdoc.put(RDOC_UMQTA, riga.get(LVRCONDV_UM));
TToken_string key;
key.add('C');
key.add(codcf);
TString8 codiva = cache().get(LF_CFVEN, key, CFV_ASSFIS);
if (codiva.blank())
codiva = cache().get(LF_ANAMAG, riga.get(LVRCONDV_CODART), ANAMAG_CODIVA);
rdoc.put(RDOC_CODIVA, codiva);
rdoc.put(RDOC_CODAGG1, riga.get(LVRCONDV_CAUSLAV));
}
}
if (ini_get_bool(CONFIG_DITTA, "lv", "RifTest")) if (ini_get_bool(CONFIG_DITTA, "lv", "RifTest"))
elab.put("B15", true); //forzo la descrizione abbreviata elab.put("B15", true); //forzo la descrizione abbreviata
elab.elabora(doc_in, doc_out, _msk->get_date(F_DATAFAT));
doc_out.write(); if (doc.rows() > 0)
{
elab.elabora(doc_in, doc_out, _msk->get_date(F_DATAFAT));
doc_out.write();
}
doc_out.destroy(-1); doc_out.destroy(-1);
doc_in.destroy(-1); doc_in.destroy(-1);
@ -933,6 +967,7 @@ void TFatturazione_lav_app::main_loop()
docsin.destroy(-1); docsin.destroy(-1);
} }
lastcli = clifo; lastcli = clifo;
TString tmp; TString tmp;
tmp << lastcli; tmp << lastcli;
cliela.add(tmp, tmp); cliela.add(tmp, tmp);