diff --git a/lv/lv1.cpp b/lv/lv1.cpp index 9eb04e269..c0d27ed3d 100755 --- a/lv/lv1.cpp +++ b/lv/lv1.cpp @@ -7,7 +7,8 @@ int main(int argc, char** argv) const int r = (argc > 1) ? argv[1][1] - '0' : 0; switch (r) { - case 0: lv1100(argc, argv); break; // stampa buoni lv1100 + case 0: lv1100(argc, argv); break; // stampa buoni lv1100 + case 1: lv1200(argc, argv); break; // stampa buoni lv1100 default: lv1100(argc, argv); break; // stampa buoni lv1100 } return 0; diff --git a/lv/lv1.h b/lv/lv1.h index fb840688e..fbfc25283 100755 --- a/lv/lv1.h +++ b/lv/lv1.h @@ -2,5 +2,6 @@ #define __LV1_H int lv1100(int argc, char* argv[]); +int lv1200(int argc, char* argv[]); #endif // __LV1_H diff --git a/lv/lv1200.cpp b/lv/lv1200.cpp new file mode 100755 index 000000000..ef97cd7ac --- /dev/null +++ b/lv/lv1200.cpp @@ -0,0 +1,193 @@ +#include +#include +#include +#include +#include + +#include "lv1200a.h" +#include "../ve/velib.h" + +/////////////////////////////////////////////////////////// +// TStampa_a_kg_msk +/////////////////////////////////////////////////////////// + +class TStampa_a_kg_msk: public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + TStampa_a_kg_msk(); +}; + +TStampa_a_kg_msk::TStampa_a_kg_msk() : TAutomask("lv1200a") {} + +bool TStampa_a_kg_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + return true; +} + +/* +/////////////////////////////////////////////////////////// +// TStampa_a_kg_set +/////////////////////////////////////////////////////////// + +class TStampa_a_kg_set : public TISAM_recordset +{ +protected: + static bool status_filter(const TRelation* rel); + virtual void set_custom_filter(TCursor& cursor) const; + +public: + TStampa_a_kg_set(const TMask& mask); +}; + +// Accetta solo i documenti stampabili in definitivo +bool TStampa_a_kg_set::status_filter(const TRelation* rel) +{ + const TRectype& doc = rel->curr(); + const char stato_attuale = doc.get_char(DOC_STATO); + if (stato_attuale <= ' ') + return true; + + const TTipo_documento& tipo = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (stato_attuale == tipo.stato_finale_stampa()) + return false; + + const TString& stati_stampa = tipo.stati_iniziali_stampa(); + return stati_stampa.blank() || stati_stampa.find(stato_attuale) >= 0; +} + +void TStampa_a_kg_set::set_custom_filter(TCursor& cursor) const +{ + cursor.set_filterfunction(status_filter); +} + +TStampa_a_kg_set::TStampa_a_kg_set(const TMask& mask) : TISAM_recordset("USE DOC") +{ + const TDate data_from = mask.get_date(F_DATA_FROM); + TString query = "USE DOC \n" + "SELECT (BETWEEN(DATADOC,#DATA_FROM,#DATA_TO))" + "&&(BETWEEN(CODCF,#CODCF_FROM,#CODCF_TO))" + "&&(BETWEEN(G1:CODITI,#CODITI_FROM,#CODITI_TO))\n" + "JOIN CLIFO INTO TIPOCF=='C' CODCF==CODCF\n" + "JOIN %STD INTO CODTAB==STATO\n" + ; + query << "FROM PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n" + << "TO PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n"; + set(query); + //inserire parametri filtri + set_var("#DATA_FROM", data_from); + set_var("#DATA_TO", mask.get_date(F_DATA_TO)); + set_var("#CODCF_FROM", TVariant(mask.get(F_CODCF_FROM))); + set_var("#CODCF_TO", TVariant(mask.get(F_CODCF_TO))); + set_var("#CODITI_FROM", TVariant(mask.get(F_CODITI_FROM))); + set_var("#CODITI_TO", TVariant(mask.get(F_CODITI_TO))); +} +*/ +/////////////////////////////////////////////////////////// +// TStampa_a_kg_app +/////////////////////////////////////////////////////////// + +class TStampa_a_kg_app: public TSkeleton_application +{ + TStampa_a_kg_msk* _msk; + +protected: + virtual bool create(); + virtual bool destroy(); + + TISAM_recordset prepara_recordset() const; + +public: + bool transfer(); + virtual void main_loop(); +}; + +//CREATE: metodo costruttore +bool TStampa_a_kg_app::create() +{ + _msk = new TStampa_a_kg_msk; + return TSkeleton_application::create(); +} + +//DESTROY: metodo distruttore +bool TStampa_a_kg_app::destroy() +{ + delete _msk; + return TApplication::destroy(); +} + +//PREPARA_RECORDSET: metodo che estre tutte le righe documento in base ai criteri selezionati +TISAM_recordset TStampa_a_kg_app::prepara_recordset() const +{ + const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN"); + + const int raggruppa = _msk->get_int(F_RAGX); + const bool datadog = _msk->get_int(F_DATADOG) == 0 ? true : false; + + const TDate dadata = _msk->get_date(F_DADATA); + const TDate adata = _msk->get_date(F_ADATA); + + const int daanno = dadata.year(); + const int aanno = adata.year(); + + TString query; + query << "USE RDOC\n"; + if(datadog) + query << "SELECT (BETWEEN(DATADOC,#DADATA,#ADATA))"; + else + query << "SELECT (BETWEEN(33.G1:DATAGEN,#DADATA,#ADATA))"; + query << "&&(33.TIPOCF=\"C\")"; + switch(raggruppa) + { + case 1: query << "&&(BETWEEN(33.CODCF,#DACODCF,#ACODCF))\nBY 33.CODCF CODART\n"; break; + case 2: query << "&&(BETWEEN(33.G1:CODITI,#DAITI,#AITI)\nBY 33.G1:CODITI CODART\n"; break; + case 3: query << "&&(BETWEEN(33.CODAG,#DAAUT,#AAUT)\nBY 33.CODAG CODART\n"; break; + default: query << "\nBY CODART\n"; break; + } + query << "JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n" + << "FROM CODNUM=" << codnum << " ANNO=" << daanno << " PROVV=D\n" + << "TO CODNUM=" << codnum << " ANNO=" << aanno << " PROVV=D\n"; + + TISAM_recordset righedoc(query); + righedoc.set_var("#DADATA", dadata); + righedoc.set_var("#ADATA", adata); + switch(raggruppa) + { + case 1: + righedoc.set_var("#DACODCF", _msk->get_long(F_DACODCF)); + righedoc.set_var("#ACODCF", _msk->get_long(F_ACODCF)); + break; + case 2: + righedoc.set_var("#DAITI", _msk->get_long(F_DACODITI)); + righedoc.set_var("#AITI", _msk->get_long(F_ACODITI)); + break; + case 3: + righedoc.set_var("#DAAUT", _msk->get_long(F_DACODAUT)); + righedoc.set_var("#AAUT", _msk->get_long(F_ACODAUT)); + break; + default: break; + } + return righedoc; +} + +//TRANSFER: metodo principale dell'elaborazione, che non deve fare niente +//perchè viene tutto gestito nella maschera +bool TStampa_a_kg_app::transfer() +{ + TISAM_recordset righedoc = prepara_recordset(); + return true; +} + +void TStampa_a_kg_app::main_loop() +{ + while (_msk->run() == K_ENTER) + transfer(); + } + +int lv1200(int argc, char *argv[]) +{ + TStampa_a_kg_app a; + a.run (argc, argv, "Stampa a Kg"); + return TRUE; +} diff --git a/lv/lv1200a.h b/lv/lv1200a.h new file mode 100755 index 000000000..255b279c6 --- /dev/null +++ b/lv/lv1200a.h @@ -0,0 +1,19 @@ +//Definizione campi per maschera lv1200a +//Stampa Kg + +#define F_DADATA 201 +#define F_ADATA 202 +#define F_DATADOG 203 +#define F_RAGX 204 +#define F_DACODCF 205 +#define F_DARAGSOC 206 +#define F_ACODCF 207 +#define F_ARAGSOC 208 +#define F_DACODITI 209 +#define F_DADESITI 210 +#define F_ACODITI 211 +#define F_ADESITI 212 +#define F_DACODAUT 213 +#define F_DADESAUT 214 +#define F_ACODAUT 215 +#define F_ADESAUT 216 \ No newline at end of file diff --git a/lv/lv1200a.uml b/lv/lv1200a.uml new file mode 100755 index 000000000..80d9b3287 --- /dev/null +++ b/lv/lv1200a.uml @@ -0,0 +1,273 @@ +#include "lv1200a.h" + +TOOLBAR "" 0 0 0 2 +BUTTON DLG_PRINT 10 2 +BEGIN + PROMPT 1 1 "~Stampa" + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_SETPRINT 10 2 +BEGIN + PROMPT 2 1 "~Imposta" +END + +BUTTON DLG_PREVIEW 10 2 +BEGIN + PROMPT 3 1 "~Anteprima" + PICTURE TOOL_PREVIEW + MESSAGE EXIT,65 +END +#include + +ENDPAGE + +PAGE "Stampa a Kg" -1 -1 80 10 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 1 "@bIntervallo date" +END + +DATE F_DADATA +BEGIN + PROMPT 2 2 "Da data " + CHECKTYPE REQUIRED +END + +DATE F_ADATA +BEGIN + PROMPT 25 2 "a data " + FLAGS "A" + CHECKTYPE REQUIRED +END + +RADIOBUTTON F_DATADOG 1 78 +BEGIN + PROMPT 1 4 "@bConsidera data..." + ITEM "0|Documento" + ITEM "1|Generazione" + FLAGS "Z" +END + +RADIOBUTTON F_RAGX 1 78 +BEGIN + PROMPT 1 7 "@bRaggruppa per..." + ITEM "0|Non raggruppare" + MESSAGE HIDE,1@|HIDE,2@|HIDE,3@ + ITEM "1|Cliente" + MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ + ITEM "2|Itinerario" + MESSAGE HIDE,1@|SHOW,2@|HIDE,3@ + ITEM "3|Autista" + MESSAGE HIDE,1@|HIDE,2@|SHOW,3@ + FLAGS "Z" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROPMT 1 11 "@bFiltro Cliente" + GROUP 1 +END + +NUMBER F_DACODCF 6 +BEGIN + PROMPT 2 12 "Da Cliente " + FLAGS "U" + USE LF_CLIFO + INPUT TIPOCF "C" + INPUT CODCF F_DACODCF + DISPLAY "Codice " CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_DACODCF CODCF + OUTPUT F_DARAGSOC RAGSOC + CHECKTYPE NORMAL + GROUP 1 +END + +STRING F_DARAGSOC 50 +BEGIN + PROMPT 23 12 "" + USE LF_CLIFO KEY 2 + INPUT TIPOCF "C" + INPUT RAGSOC F_DARAGSOC + DISPLAY "Ragione sociale@50" RAGSOC + DISPLAY "Codice" CODCF + COPY OUTPUT F_DACODCF + CHECKTYPE NORMAL + GROUP 1 +END + +NUMBER F_ACODCF 6 +BEGIN + PROMPT 2 13 "a Cliente " + FLAGS "U" + USE LF_CLIFO + INPUT TIPOCF "C" + INPUT CODCF F_ACODCF + DISPLAY "Codice " CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_ACODCF CODCF + OUTPUT F_ARAGSOC RAGSOC + CHECKTYPE NORMAL + GROUP 1 +END + +STRING F_ARAGSOC 50 +BEGIN + PROMPT 23 13 "" + USE LF_CLIFO KEY 2 + INPUT TIPOCF "C" + INPUT RAGSOC F_ARAGSOC + DISPLAY "Ragione sociale@50" RAGSOC + DISPLAY "Codice" CODCF + COPY OUTPUT F_ACODCF + CHECKTYPE NORMAL + GROUP 1 +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROPMT 1 11 "@bFiltro Itinerario" + GROUP 2 +END + +STRING F_DACODITI 3 +BEGIN + PROMPT 2 12 "Da iti. " + FLAGS "UZ" + USE &ITI + JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1 + JOIN &MEZ TO &ITI ALIAS 2000 INTO CODTAB==S2 + INPUT CODTAB F_DACODITI + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Autista" S1 + DISPLAY "Descrizione Autista@50" 1000@->S0 + DISPLAY "Targa@8" S2 + DISPLAY "Descrizione Mezzo@50" 2000@->S0 + OUTPUT F_DACODITI CODTAB + OUTPUT F_DADESITI S0 + CHECKTYPE NORMAL + GROUP 2 +END + +STRING F_DADESITI 50 +BEGIN + PROMPT 23 12 "" + USE &ITI KEY 2 + INPUT S0 F_DADESITI + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_DACODITI + CHECKTYPE NORMAL + GROUP 2 +END + +STRING F_ACODITI 3 +BEGIN + PROMPT 2 13 "A iti. " + FLAGS "UZ" + USE &ITI + JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1 + JOIN &MEZ TO &ITI ALIAS 2000 INTO CODTAB==S2 + INPUT CODTAB F_ACODITI + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Autista" S1 + DISPLAY "Descrizione Autista@50" 1000@->S0 + DISPLAY "Targa@8" S2 + DISPLAY "Descrizione Mezzo@50" 2000@->S0 + OUTPUT F_ACODITI CODTAB + OUTPUT F_ADESITI S0 + CHECKTYPE NORMAL + GROUP 2 +END + +STRING F_ADESITI 50 +BEGIN + PROMPT 23 13 "" + USE &ITI KEY 2 + INPUT S0 F_ADESITI + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_ACODITI + CHECKTYPE NORMAL + GROUP 2 +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROPMT 1 11 "@bFiltro Autista" + GROUP 3 +END + +STRING F_DACODAUT 6 +BEGIN + PROMPT 2 12 "Da autista " + FLAGS "UZ" + USE &ITI + JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1 + JOIN &MEZ TO &ITI ALIAS 2000 INTO CODTAB==S2 + INPUT CODTAB F_DACODAUT + DISPLAY "Autista" S1 + DISPLAY "Descrizione Autista@50" 1000@->S0 + DISPLAY "Itinerario" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Targa@8" S2 + DISPLAY "Descrizione Mezzo@50" 2000@->S0 + OUTPUT F_DACODAUT S1 + OUTPUT F_DADESAUT 1000@->S0 + CHECKTYPE NORMAL + GROUP 3 +END + +STRING F_DADESAUT 50 +BEGIN + PROMPT 23 12 "" + USE &AUT KEY 2 + INPUT S0 F_DADESAUT + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + OUTPUT F_DACODAUT CODTAB + OUTPUT F_DADESAUT S0 + CHECKTYPE NORMAL + GROUP 3 +END + +STRING F_ACODAUT 6 +BEGIN + PROMPT 2 13 "A autista " + FLAGS "UZ" + USE &ITI + JOIN &AUT TO &ITI ALIAS 1000 INTO CODTAB==S1 + JOIN &MEZ TO &ITI ALIAS 2000 INTO CODTAB==S2 + INPUT CODTAB F_ACODAUT + DISPLAY "Autista" S1 + DISPLAY "Descrizione Autista@50" 1000@->S0 + DISPLAY "Itinerario" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Targa@8" S2 + DISPLAY "Descrizione Mezzo@50" 2000@->S0 + OUTPUT F_ACODAUT S1 + OUTPUT F_ADESAUT 1000@->S0 + CHECKTYPE NORMAL + GROUP 3 +END + +STRING F_ADESAUT 50 +BEGIN + PROMPT 23 13 "" + USE &AUT KEY 2 + INPUT S0 F_DADESAUT + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + OUTPUT F_ACODAUT CODTAB + OUTPUT F_ADESAUT S0 + CHECKTYPE NORMAL + GROUP 3 +END + +ENDPAGE + +ENDMASK