From 999789248e2c384395c2999de9418ed2fdbd6839 Mon Sep 17 00:00:00 2001 From: luca83 Date: Mon, 16 Nov 2009 15:15:06 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2010.?= =?UTF-8?q?0=20patch=20518=20Files=20correlati=20=20=20=20=20:=20lv2=20Ric?= =?UTF-8?q?ompilazione=20Demo=20:=20[=20]=20Commento=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20:=20-=20La=20fatturazione=20del=20nolo=20deve=20?= =?UTF-8?q?essere=20fatta=20anche=20se=20non=20ci=20sono=20quantit=C3=A0?= =?UTF-8?q?=20in=20consegna=20nel=20mese:=20dotazione=20per=20prezzo=20nol?= =?UTF-8?q?o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/trunk@19629 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv2500.cpp | 98 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 85 insertions(+), 13 deletions(-) diff --git a/lv/lv2500.cpp b/lv/lv2500.cpp index 67a76cc6f..c06c8a32f 100755 --- a/lv/lv2500.cpp +++ b/lv/lv2500.cpp @@ -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); } }