#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; }