From 46d0d59f8d189242d2044a6f7ba9ecd37ab74040 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 11 Mar 2009 01:17:10 +0000 Subject: [PATCH] Patch level : 10.0 256 Files correlati : Ricompilazione Demo : [ ] Commento : Pirmo commit della fatturazione lavanderie git-svn-id: svn://10.65.10.50/trunk@18491 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv2500.cpp | 306 +++++++++++++++++++++++++----------------------- lv/lv2500a.uml | 2 +- lv/lvcondv.h | 2 +- ve/velib04.h | 5 +- ve/velib04a.cpp | 6 +- 5 files changed, 170 insertions(+), 151 deletions(-) diff --git a/lv/lv2500.cpp b/lv/lv2500.cpp index 761b27a7d..9c8702cc9 100755 --- a/lv/lv2500.cpp +++ b/lv/lv2500.cpp @@ -22,169 +22,181 @@ class TFatturazione_lavanderie:public TFatturazione_bolle protected: virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin); virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); - real fat_lav_pre(TRiga_documento & rin, const real& qta); - virtual void post_process(TDocumento & doc); - + virtual void pre_process_input(TLista_documenti& doc_in) {} + virtual void post_process_input(TLista_documenti& doc_out) {} + virtual void post_process_output(TLista_documenti& doc_out); + virtual bool da_raggruppare(const TRiga_documento & rin); + virtual bool doc_raggruppabile(const TDocumento & doc) const { return true; } + public: - TFatturazione_lavanderie(const char* cod); virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, const TDate& data_elab, bool interattivo = false); + TFatturazione_lavanderie(const char* cod); + ~TFatturazione_lavanderie() {} }; TFatturazione_lavanderie::TFatturazione_lavanderie(const char* cod) : TFatturazione_bolle(cod) + { } - - real TFatturazione_lavanderie::fat_lav_pre(TRiga_documento & rin, const real& qta) +bool TFatturazione_lavanderie::da_raggruppare(const TRiga_documento & rin) { - const TString80 codart=rin.get(RDOC_CODART); - const long clifo=rin.doc().get_long(DOC_CODCF); - const int indsped=rin.doc().get_int(DOC_CODINDSP); - const TString8 causale=rin.get(RDOC_CODAGG1); - - real new_qta; - - const TRectype& cau = cache().get("&CAU", causale); - //movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale - - /* if (cau.get_bool("B0")) - { - const TCausale_magazzino& rit = cached_causale_magazzino(cau.get("S1")); - int sgn_rit = rit.sgn(s_consmese); - - }*/ - - if (cau.get_bool("B1")) - { - const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2")); - int sgn_con = con.sgn(s_consmese); - new_qta=sgn_con*qta; - } - - TLaundry_contract contr(clifo,indsped,_data_elab); - const TRectype & rcont=contr.row(codart); - - const TString4 tipodot=rcont.get(LVRCONDV_NOLCIC); - const TString4 artcli=rcont.get(LVRCONDV_VCARTCLI); - const real dot; - - TArticolo_lavanderie artlav(codart,'C',clifo,indsped); - -return new_qta; + const long clifo = rin.doc().get_long(DOC_CODCF); + const int indsped = rin.doc().get_int(DOC_CODINDSP); + TLaundry_contract contr(clifo, indsped, _data_elab); + const TString80 codart = rin.get(RDOC_CODART); + const TRectype & rcont = contr.row(codart); + const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF); + return tipoforf > 1; } -void TFatturazione_lavanderie::post_process(TDocumento & doc) + +void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out) { - const int rows = doc.physical_rows(); - for (int i = 1; i <= rows; i++) - { - TRiga_documento& rout = doc[i]; - const TString80 codart=rout.get(RDOC_CODART); - const long clifo=rout.doc().get_long(DOC_CODCF); - const int indsped=rout.doc().get_int(DOC_CODINDSP); - - TLaundry_contract contr(clifo,indsped,_data_elab); - const TRectype & rcont=contr.row(codart); + for (int id = 0; id < doc_out.items(); id++) + { + TDocumento& doc = doc_out[id]; + const int rows = doc.physical_rows(); + const long clifo = doc.get_long(DOC_CODCF); + const int indsped = doc.get_int(DOC_CODINDSP); + TLaundry_contract contr(clifo,indsped,_data_elab); + + for (int i = 1; i <= rows; i++) + { + TRiga_documento& rout = doc[i]; + const TString80 codart=rout.get(RDOC_CODART); + const TRectype & rcont=contr.row(codart); + const TString4 tipodot = rcont.get(LVRCONDV_NOLCIC); + const TString4 artcli = rcont.get(LVRCONDV_VCARTCLI); + real dot; + TArticolo_lavanderie artlav(codart, 'C', clifo, indsped); - const TString4 tipodot=rcont.get(LVRCONDV_NOLCIC); - const TString4 artcli=rcont.get(LVRCONDV_VCARTCLI); - real dot; - TArticolo_lavanderie artlav(codart,'C',clifo,indsped); + if (tipodot=="I") + dot=artlav.get_real("DOTIN"); + else + dot=artlav.get_real("DOTOD"); + + const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF); + + switch (tipoforf) + { + case 0: + break; + case 1: + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); + break; + case 2: + { + rout.put(RDOC_QTA, UNO); + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); + // gestione in base codice per valore fisso ??? tolta la scelta dell'articolo o del cliente + } + break; + case 3: + { + int tipolist=contr.get_int(LVCONDV_TIPOLIS); - if (tipodot=="I") - dot=artlav.get_real("DOTIN"); - else - dot=artlav.get_real("DOTOD"); - - int tipoforf=rcont.get_int(LVRCONDV_TIPOFORF); - - switch (tipoforf) - { - case 0: - break; - case 1: - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); - break; - case 2: - { - rout.put(RDOC_QTA, UNO); - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); - // gestione in base codice per valore fisso ??? tolta la scelta dell'articolo o del cliente - } - break; - case 3: - { - int tipolist=contr.get_int(LVCONDV_TIPOLIS); + if (tipolist==0) + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); + else + { + TString query; + query << "USE UMART KEY 2 \n" + << "FROM " << "CODART=#CODART UM=#UM \n" + << "TO " << "TCODART=#CODART UM=#UM \n"; + + TISAM_recordset recset(query); + recset.set_var("#CODART",clifo); + recset.set_var("#UM",rcont.get(LVRCONDV_UM)); - if (tipolist==0) - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); - else - { - TString query; - query << "USE UMART KEY 2 \n" - << "FROM " << "CODART=#CODART UM=#UM \n" - << "TO " << "TCODART=#CODART UM=#UM \n"; - - TISAM_recordset recset(query); - recset.set_var("#CODART",clifo); - recset.set_var("#UM",rcont.get(LVRCONDV_UM)); + rout.put(RDOC_PREZZO,recset.get(UMART_PREZZO).as_real()); + } - rout.put(RDOC_PREZZO,recset.get(UMART_PREZZO).as_real()); - } + rout.put(RDOC_QTA, dot); + } + break; + case 4: + { + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); + const real cicl=rcont.get_real(LVRCONDV_MINCIC)*dot; + const real qta=rout.get(RDOC_QTA); + rout.put(RDOC_QTA, cicl > qta ? cicl : qta); + } + break; + case 5: + { + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_VALCONV)); + rout.put(RDOC_QTA, dot*rcont.get_real(LVRCONDV_FORFPERCL)); + } + break; + case 6: + { + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); - rout.put(RDOC_QTA, dot); - } - break; - case 4: - { - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); - const real cicl=rcont.get_real(LVRCONDV_MINCIC)*dot; - const real qta=rout.get(RDOC_QTA); - rout.put(RDOC_QTA, cicl > qta ? cicl : qta); - } - break; - case 5: - { - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_VALCONV)); - rout.put(RDOC_QTA, dot*rcont.get_real(LVRCONDV_FORFPERCL)); - } - break; - case 6: - { - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); - - rout.put(RDOC_QTA, dot); - } - break; - default: - break; - } - } + rout.put(RDOC_QTA, dot); + } + break; + default: + break; + } + } + } } void TFatturazione_lavanderie::add_rows(TRiga_documento & rout, TRiga_documento & rin) { - const real qta=rin.get_real(RDOC_QTA); + const TString8 causale = rin.get(RDOC_CODAGG1); + const TRectype& cau = cache().get("&CAU", causale); + //movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale - rout.add(RDOC_QTA, fat_lav_pre(rin,qta) ); + if (cau.get_bool("B0")) + { + const TCausale_magazzino& rit = cached_causale_magazzino(cau.get("S1")); + const real qta = rit.sgn(s_consmese) * rin.get_real(RDOC_QTA); + + rout.add(RDOC_QTA, qta); + + } + if (cau.get_bool("B1")) + { + const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2")); + const real qta = con.sgn(s_consmese) * rin.get_real(RDOC_QTA); + + rout.add(RDOC_QTA, qta); + } } void TFatturazione_lavanderie::create_row(TDocumento& doc_out, const TRiga_documento & rin) { - TFatturazione_bolle::create_row(doc_out, rin); + real qta; + const TString8 causale = rin.get(RDOC_CODAGG1); + const TRectype& cau = cache().get("&CAU", causale); + //movimento o meno la dotazione temporanea/odierna a seconda di cosa prevede la causale + + if (cau.get_bool("B0")) + { + const TCausale_magazzino& rit = cached_causale_magazzino(cau.get("S1")); + qta += rit.sgn(s_consmese) * rin.get_real(RDOC_QTA); + } + if (cau.get_bool("B1")) + { + const TCausale_magazzino& con = cached_causale_magazzino(cau.get("S2")); + qta += con.sgn(s_consmese) * rin.get_real(RDOC_QTA); + } + if (qta != ZERO) + TFatturazione_bolle::create_row(doc_out, rin); } bool TFatturazione_lavanderie::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, const TDate& data_elab, bool interattivo) { - _data_elab=data_elab; - bool ok=TFatturazione_bolle::elabora(doc_in, doc_out, data_elab, interattivo); - return ok; + _data_elab = data_elab; + return TFatturazione_bolle::elabora(doc_in, doc_out, data_elab, interattivo); } /////////////////////////////////////////////////////////// @@ -217,65 +229,67 @@ protected: void TFatturazione_lav_app::main_loop() { TFatturazione_msk msk; + TLocalisamfile doc(LF_DOC); + TLocalisamfile rdoc(LF_RIGHEDOC); + while (msk.run()!=K_QUIT) { TString query; - query << "USE DOC KEY 2 SELECT BETWEEN(DATADOC,#DADATA,#ADATA)\n" - << "FROM " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#DADATA \n" - << "TO " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#ADATA \n"; + query << "USE DOC KEY 3 SELECT (TIPOCF==\"C\")&&(BETWEEN(DATADOC,#DADATA,#ADATA))\n" + << "BY TIPOCF CODCF DATADOC\n" + << "FROM " << "DATADOC=#DADATA PROVV=D ANNO=#ANNO\n" + << "TO " << " DATADOC=#ADATA PROVV=D ANNO=#ANNO\n"; +// query << "USE DOC KEY 2 SELECT BETWEEN(DATADOC,#DADATA,#ADATA)\n" +// << "FROM " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#DADATA \n" +// << "TO " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#ADATA \n"; TISAM_recordset recset(query); recset.set_var("#DADATA",msk.get_date(F_DADATA)); recset.set_var("#ADATA",msk.get_date(F_ADATA)); recset.set_var("#ANNO",long(msk.get_date(F_ADATA).year())); - TFatturazione_lavanderie elab(msk.get(F_CODICE_ELAB)); + TFatturazione_lavanderie elab(msk.get(F_COD_ELAB)); 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); long indsped; - - for (bool ok=recset.move_first(); ok; ok=recset.move_next()) + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) { - const long clifo=recset.get(DOC_CODCF).as_int(); + const long clifo = recset.get(DOC_CODCF).as_int(); - if (clifo!=lastcli) + if (clifo != lastcli) { if (docsin.items()!=0) { - elab.elabora(docsin,docsout,datafat); + elab.elabora(docsin, docsout, datafat); docsout.write(); docsout.destroy(-1) ; docsin.rewrite(); docsin.destroy(-1); - // gestire qui salvataggio fatture } - lastcli=clifo; + lastcli = clifo; } if (elab.is_document_ok(recset.cursor()->curr())) { - indsped=recset.get(DOC_CODINDSP).as_int(); - TLaundry_contract contr(clifo,indsped,datafat); - int contrper=contr.get_int(LVCONDV_PERFATT); + indsped = recset.get(DOC_CODINDSP).as_int(); + TLaundry_contract contr(clifo, indsped, datafat); + const int contrper = contr.get_int(LVCONDV_PERFAT); - if (contrper<=period) - { + if (contrper <= period) docsin.add(new TDocumento(recset.cursor()->curr())); - } } } if (docsin.items()!=0) { - elab.elabora(docsin,docsout,datafat); + elab.elabora(docsin, docsout, datafat); docsout.write(); docsout.destroy(-1); docsin.rewrite(); docsin.destroy(-1); - // gestire qui salvataggio fatture } } diff --git a/lv/lv2500a.uml b/lv/lv2500a.uml index 6ab1417a4..2f0c18dac 100755 --- a/lv/lv2500a.uml +++ b/lv/lv2500a.uml @@ -1,4 +1,4 @@ -#include "lv2600a.h" +#include "lv2500a.h" TOOLBAR "" 0 0 0 2 #include diff --git a/lv/lvcondv.h b/lv/lvcondv.h index 928e6c97b..820efee3e 100755 --- a/lv/lvcondv.h +++ b/lv/lvcondv.h @@ -16,7 +16,7 @@ #define LVCONDV_STPRZBOL "STPRZBOL" #define LVCONDV_CONTSPOR "CONTSPOR" #define LVCONDV_DOCCP "DOCCP" -#define LVCONDV_PERFATT "PERFATT" +#define LVCONDV_PERFAT "PERFAT" #define LVCONDV_INPERFAT "INPERFAT" #define LVCONDV_FATTPARZ "FATTPARZ" #define LVCONDV_DOTTMPPRZD "DOTTMPPRZD" diff --git a/ve/velib04.h b/ve/velib04.h index 75220abaa..76e3ac09e 100755 --- a/ve/velib04.h +++ b/ve/velib04.h @@ -249,7 +249,10 @@ protected: virtual void add_rows(TRiga_documento & rout, TRiga_documento & rin) { rout += rin; } virtual void create_row(TDocumento& doc_out, const TRiga_documento & rin); virtual const TString & get_tipo_out(const TDocumento & doc_out) { return get("S8"); } - virtual void post_process(TDocumento & doc) {} + virtual void pre_process_input(TLista_documenti& doc_in) {} + virtual void post_process_input(TLista_documenti& doc_out) {} + virtual void post_process_output(TLista_documenti& doc_out) {} + virtual bool da_raggruppare(const TRiga_documento & rin) { return false; } public: virtual bool raggruppa(TDocumento& din, TDocumento& dout); diff --git a/ve/velib04a.cpp b/ve/velib04a.cpp index b02ce95a7..570ec8168 100755 --- a/ve/velib04a.cpp +++ b/ve/velib04a.cpp @@ -245,7 +245,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out) if (rout.sola_descrizione()) // Ignora le righe descrittive continue; - if (rin.raggruppabile(rout, campi_riga)) // Se esiste una riga compatibile ... + 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 @@ -298,6 +298,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do campi_raggruppamento(campi_doc); + pre_process_input(doc_in); for (int id = 0; id < doc_in.items(); id++) { TDocumento& campione = doc_in[id]; @@ -364,6 +365,7 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do campione.flush_rows(); } + post_process_input(doc_in); const int tot = doc_out.items(); const TString4 codnum(codice_numerazione_finale()); @@ -381,8 +383,8 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do td = tipo_cli.empty() ? tipo_out : tipo_cli; const TString& sconto = d.get(DOC_SCONTOPERC); d.put(DOC_SCONTOPERC, sconto); - post_process(d); } + post_process_output(doc_out); return tot > 0; }