Patch level : 10.0 patch 518

Files correlati     : lv2
Ricompilazione Demo : [ ]
Commento            :
- La fatturazione del nolo deve essere fatta anche se non ci sono quantità in consegna nel mese: dotazione per prezzo nolo.


git-svn-id: svn://10.65.10.50/trunk@19629 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-11-16 15:15:06 +00:00
parent 3d1c15555c
commit 999789248e

View File

@ -12,6 +12,7 @@
#include "../ve/ve6200.h"
#include "../ve/ve6200a.h"
////////////////////////////////////////
//// TFatturazione_lavanderie ////
////////////////////////////////////////
@ -184,10 +185,10 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out)
const int rigamerce = doc[1].is_descrizione()?2:1;
for (int i=rigamerce; i<=rows; i++)
for (int i=rigamerce; i <= rows; i++)
doc.destroy_row(i);
TRiga_documento& riga=doc.new_row("01");
TRiga_documento& riga = doc.new_row("01");
const TString80 codartcfg = ini_get_string(CONFIG_DITTA, "lv", "Codartcafix");
const TString80 descart = cache().get(LF_ANAMAG, codartcfg, ANAMAG_DESCR);
@ -746,6 +747,7 @@ public:
TFatturazione_msk();
};
TFatturazione_msk::TFatturazione_msk():TAutomask("lv2500a")
{
//imposto il periodo di fatturazione dal primo del mese precedente all'ultimo del mese precedente
@ -775,33 +777,94 @@ TFatturazione_msk::TFatturazione_msk():TAutomask("lv2500a")
//classe TFatturazione_lav_app
class TFatturazione_lav_app: public TSkeleton_application
{
TFatturazione_msk* _msk;
protected:
virtual void main_loop();
void genera_bolle_nolo(TAssoc_array& cliela, TFatturazione_lavanderie& elab);
};
//GENERA_BOLLE_NOLO: metodo che genera le fatture di solo nolo per quei clienti a cui non è stato consegnato niente
void TFatturazione_lav_app::genera_bolle_nolo(TAssoc_array& cliela, TFatturazione_lavanderie& elab)
{
TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN");
char stato = cache().get("%TIP", tipodoc, "S2").left(1)[0];
//preparo la query sui contratti
TString str;
str << "USE LVCONDV";
if (_msk->get_long(F_DACODCF) > 0)
str << "\nFROM CODCF=" << _msk->get_long(F_DACODCF);
if (_msk->get_long(F_ACODCF) > 0)
str << "\nTO CODCF=" << _msk->get_long(F_ACODCF);
TISAM_recordset contr(str);
TLista_documenti doc_in;
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())
{
//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())
continue;
//scarto tutti quelli che non sono in periodo di fatturazione corretto
if (contr.get(LVCONDV_PERFAT).as_int() > _msk->get_int(F_PERFAT))
continue;
//sacrto tutti quelli a cui ho già fatturato
if(!cliela.is_key(contr.get(LVCONDV_CODCF).as_string()))
continue;
doc.put(DOC_CODCF, contr.get(LVCONDV_CODCF).as_int());
doc_in.add(doc);
if (ini_get_bool(CONFIG_DITTA, "lv", "RifTest"))
elab.put("B15", true); //forzo la descrizione abbreviata
elab.elabora(doc_in, doc_out, _msk->get_date(F_DATAFAT));
doc_out.write();
doc_out.destroy(-1);
doc_in.destroy(-1);
}
}
void TFatturazione_lav_app::main_loop()
{
//instanzio la maschera
TFatturazione_msk msk;
_msk = new TFatturazione_msk();
//instanzio i localisamfile che mi servono
TLocalisamfile doc(LF_DOC);
TLocalisamfile rdoc(LF_RIGHEDOC);
while (msk.run()!=K_QUIT)
while (_msk->run()!= K_QUIT)
{
//leggo i dati di primo interesse
const TString4 mskzona = msk.get(F_CODZONA);
const TString4 mskcat = msk.get(F_CODCATC);
const TString4 mskzona = _msk->get(F_CODZONA);
const TString4 mskcat = _msk->get(F_CODCATC);
//preparo le date estremi (dal - al) della query e l'anno dell'esercizio
TDate al = msk.get_date(F_ADATA);
TDate al = _msk->get_date(F_ADATA);
//se la data "al" non è corretta, la pongo uguale alla data fattura
if (!al.ok())
al = msk.get_date(F_DATAFAT);
al = _msk->get_date(F_DATAFAT);
const long year = al.year();
TDate dal = msk.get_date(F_DADATA);
TDate dal = _msk->get_date(F_DADATA);
//se la data "dal" non è corretta, la pongo uguale a 1/1/annoes
if (!dal.ok())
{
@ -811,20 +874,20 @@ void TFatturazione_lav_app::main_loop()
}
//instanzio una TFatturaziome_lavanderie
TFatturazione_lavanderie elab(msk.get(F_COD_ELAB));
TFatturazione_lavanderie elab(_msk->get(F_COD_ELAB));
//preparo le variabili di interesse
TLista_documenti docsin;
TLista_documenti docsout;
long lastcli = 0;
const int period = msk.get_int(F_PERFAT);
const TDate datafat = msk.get_date(F_DATAFAT);
const int period = _msk->get_int(F_PERFAT);
const TDate datafat = _msk->get_date(F_DATAFAT);
long indsped;
//preparo la query
TString query;
//&&(BETWEEN(DATADOC,#DADATA,#ADATA))&&(STATO==\"2\")&&(TIPODOC==\"B01\")
query << "USE DOC KEY 3 SELECT (TIPOCF==\"C\")&&"
<< "(BETWEEN(CODCF," << msk.get_int(F_DACODCF) << ',' << msk.get_int(F_ACODCF) << "))\n"
<< "(BETWEEN(CODCF," << _msk->get_long(F_DACODCF) << ',' << _msk->get_long(F_ACODCF) << "))\n"
<< "BY TIPOCF CODCF DATADOC\n"
<< "FROM " << "DATADOC=" << dal << " PROVV=D ANNO=" << year << "\n"
<< "TO " << "DATADOC=" << al << " PROVV=D ANNO=" << year << "\n";
@ -836,6 +899,9 @@ void TFatturazione_lav_app::main_loop()
TISAM_recordset recset(query);
TProgind pi(recset.items(), "Fatturazione", true, true);
long last_clifo=0;
//TAssoc_array dei clienti per cui ho generato dei documenti
TAssoc_array cliela;
//scorro tutti documenti che la query mi restiuisce
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
@ -867,6 +933,9 @@ void TFatturazione_lav_app::main_loop()
docsin.destroy(-1);
}
lastcli = clifo;
TString tmp;
tmp << lastcli;
cliela.add(tmp, tmp);
}
//preparo la chiave e recupero da CFVEN i dati di quel cliente
@ -917,11 +986,14 @@ void TFatturazione_lav_app::main_loop()
if (ini_get_bool(CONFIG_DITTA, "lv", "RifTest"))
elab.put("B15", true); //forzo la descrizione abbreviata
elab.elabora(docsin, docsout, datafat);
docsout.write();
docsout.destroy(-1);
docsin.rewrite();
docsin.destroy(-1);
}
genera_bolle_nolo(cliela, elab);
}
}