diff --git a/ps/indice_programmi.txt b/ps/indice_programmi.txt index 89f459df5..40b91a9a8 100755 --- a/ps/indice_programmi.txt +++ b/ps/indice_programmi.txt @@ -51,6 +51,9 @@ Configurazione campi per utente PN0001 Importazione dati vendite al dettaglio +PS0099 +Statistiche ANIVAL + PS0544 Varauto Trasferimento a SISIPHO Trasferimento a SERVUS diff --git a/ps/ps0099.cpp b/ps/ps0099.cpp new file mode 100755 index 000000000..2b40e4689 --- /dev/null +++ b/ps/ps0099.cpp @@ -0,0 +1,16 @@ +#include + +#include "ps0099.h" + +int main(int argc, char** argv) +{ + int n = argc > 1 ? atoi(argv[1]+1) : 0; + switch(n) + { + case 0: + default: + ps0099100(argc, argv); break; //statistiche ANIVAL + } + exit(0); + return 0; +} diff --git a/ps/ps0099.h b/ps/ps0099.h new file mode 100755 index 000000000..9701cfecc --- /dev/null +++ b/ps/ps0099.h @@ -0,0 +1,2 @@ +int ps0099100(int argc, char* argv[]); + diff --git a/ps/ps0099100.cpp b/ps/ps0099100.cpp new file mode 100755 index 000000000..9628844e7 --- /dev/null +++ b/ps/ps0099100.cpp @@ -0,0 +1,166 @@ +#include "ps0099100a.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../cg/cglib01.h" + +/////////////////////////////////////////////////////////// +// MASCHERA +/////////////////////////////////////////////////////////// +class TStatistiche_ANIVAL_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + TStatistiche_ANIVAL_mask(); + virtual ~TStatistiche_ANIVAL_mask() {} +}; + +TStatistiche_ANIVAL_mask::TStatistiche_ANIVAL_mask() : TAutomask("ps0099100a") +{ +} + +bool TStatistiche_ANIVAL_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_ANNO: + if (e == fe_modify && !o.empty()) + { + TEsercizi_contabili esc; + TDate inies, fines; + if (esc.code2range(atoi(o.get()), inies, fines)) + { + set(F_DADATA, inies); + set(F_ADATA, fines); + } + } + break; + case F_DADATA: + case F_ADATA: + if (e == fe_close) + { + const int anno = get_int(F_ANNO); + + TEsercizi_contabili esc; //..le date devono essere incluse nell'esercizio selezionato! + const TDate data = o.get(); + if (!data.empty() && esc.date2esc(data) != anno) + return error_box(TR("La data deve appartenere all'anno selezionato")); + } + break; + default: + break; + } + + return true; +} + +///////////////////////////////////////////////////////////// +// REPORT +///////////////////////////////////////////////////////////// +class TStatistiche_ANIVAL_report : public TReport +{ +protected: +virtual bool use_mask() { return false; } +public: + TStatistiche_ANIVAL_report() {} +}; + +///////////////////////////////////////////////////////////// +// CSV RECORDSET +///////////////////////////////////////////////////////////// + +class TStatistiche_ANIVAL_csv_recordset : public TCSV_recordset +{ +protected: + //virtual const TVariant& get(const char* field_name) const; +public: + TStatistiche_ANIVAL_csv_recordset(); +}; + +TStatistiche_ANIVAL_csv_recordset::TStatistiche_ANIVAL_csv_recordset() +: TCSV_recordset("CSV(,)\n") +{ +} + + +/////////////////////////////////////////////////////////// +// APPLICAZIONE +/////////////////////////////////////////////////////////// + +class TStatistiche_ANIVAL : public TSkeleton_application +{ + virtual bool check_autorization() const {return false;} + virtual const char * extra_modules() const {return "ve";} + +protected: + void elabora(const TMask& mask) const; + +public: + virtual bool create(); + virtual void main_loop(); + +}; + + +//metodo di base per la ricerca delle righe documento che soddisfano i parametri dell'utonto +void TStatistiche_ANIVAL::elabora(const TMask& mask) const +{ + TString query; + //scatta la query per la costruzione del recordset + query << "USE RDOC KEY 1\n"; + query << "SELECT ((CODARTMAG!=\"\")&&(BETWEEN(33->DATADOC,#DADATA,#ADATA))&&(BETWEEN(CODARTMAG,#DACODART,#ACODART)))\n"; + query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n"; + query << "FROM CODNUM=#CODNUM ANNO=#ANNO PROVV='D'\n"; + query << "TO CODNUM=#CODNUM ANNO=#ANNO PROVV='D'\n"; + + TISAM_recordset righe(query); + righe.set_var("#CODNUM", TVariant(mask.get(F_CODNUM))); + righe.set_var("#DADATA", mask.get_date(F_DADATA)); + righe.set_var("#ADATA", mask.get_date(F_ADATA)); + righe.set_var("#ANNO", TVariant((long)mask.get_int(F_ANNO))); + righe.set_var("#DACODART", TVariant(mask.get(F_DACODART))); + righe.set_var("#ACODART", TVariant(mask.get(F_ACODART))); + + //se trova (si spera!) almeno una rigadoc buona comincia il bello del programma + const long nrighe = righe.items(); + if (nrighe > 0) + { + const int cazzone = 1; + } +} + +void TStatistiche_ANIVAL::main_loop() +{ + TStatistiche_ANIVAL_mask mask; + + while (mask.run() == K_ENTER) + { + elabora(mask); + } +} + +bool TStatistiche_ANIVAL::create() +{ + //se non ha le vendite è impossibile da utilizzare + if (!has_module(VEAUT)) + return error_box(TR("Modulo non autorizzato")); + + return TSkeleton_application::create(); +} + +int ps0099100(int argc, char* argv[]) +{ + TStatistiche_ANIVAL stat_anal; + stat_anal.run(argc, argv, TR("Statistiche ANIVAL")); + return 0; +} \ No newline at end of file diff --git a/ps/ps0099100a.h b/ps/ps0099100a.h new file mode 100755 index 000000000..3d4733dcf --- /dev/null +++ b/ps/ps0099100a.h @@ -0,0 +1,11 @@ +// Defines per maschera ps0099100a.uml (statistiche anival) + +#define F_CODNUM 101 +#define F_DESNUM 102 +#define F_ANNO 103 +#define F_DADATA 104 +#define F_ADATA 105 +#define F_DACODART 106 +#define F_DADESART 107 +#define F_ACODART 108 +#define F_ADESART 109 diff --git a/ps/ps0099100a.uml b/ps/ps0099100a.uml new file mode 100755 index 000000000..fbf253e85 --- /dev/null +++ b/ps/ps0099100a.uml @@ -0,0 +1,116 @@ +#include "ps0099100a.h" + +TOOLBAR "topbar" 0 0 0 2 +#include +ENDPAGE + +PAGE "Statistiche ANIVAL" -1 -1 80 11 + +GROUPBOX -1 78 5 + BEGIN + PROMPT 1 1 "@bParametri documenti di vendita" + FLAGS "" +END + +STRING F_CODNUM 4 +BEGIN + PROMPT 2 2 "Numerazione " + USE %NUM + INPUT CODTAB F_CODNUM + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODNUM CODTAB + OUTPUT F_DESNUM S0 + CHECKTYPE FORCED + FLAGS "UPA" +END + +STRING F_DESNUM 50 +BEGIN + PROMPT 22 2 "" + USE %NUM KEY 2 + INPUT S0 F_DESNUM + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_CODNUM +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 2 3 "Anno " + USE ESC + INPUT CODTAB F_ANNO + DISPLAY "Codice Esercizio" CODTAB + DISPLAY "Data inizio esercizio" D0 + DISPLAY "Data fine esercizio " D1 + CHECKTYPE REQUIRED + OUTPUT F_ANNO CODTAB + OUTPUT F_DADATA D0 + OUTPUT F_ADATA D1 + NUM_EXPR #F_ANNO>0 + FLAG "AP" +END + +DATE F_DADATA +BEGIN + PROMPT 2 4 "Da data " +END + +DATE F_ADATA +BEGIN + PROMPT 30 4 "A data " +END + +STRING F_DACODART 20 +BEGIN + PROMPT 2 7 "Da articolo " + KEY 1 + FLAG "UG" + USE LF_ANAMAG + INPUT CODART F_DACODART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DACODART CODART + OUTPUT F_DADESART DESCR + CHECKTYPE SEARCH +END + +STRING F_DADESART 50 40 +BEGIN + PROMPT 38 7 "" + USE LF_ANAMAG KEY 2 + INPUT DESCR F_DADESART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_DACODART CODART + OUTPUT F_DADESART DESCR +END + +STRING F_ACODART 20 +BEGIN + PROMPT 2 8 "A articolo " + KEY 1 + FLAG "UG" + USE LF_ANAMAG + INPUT CODART F_ACODART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_ACODART CODART + OUTPUT F_ADESART DESCR + CHECKTYPE SEARCH +END + +STRING F_ADESART 50 40 +BEGIN + PROMPT 38 8 "" + USE LF_ANAMAG KEY 2 + INPUT DESCR F_ADESART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_ACODART CODART + OUTPUT F_ADESART DESCR +END + +ENDPAGE + +ENDMASK