#include "tp0900a.h" #include #include #include #include #include #include #include /////////////////////////////////////////////////////////// // MASCHERA /////////////////////////////////////////////////////////// class TDichiarazione_CONAI_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TDichiarazione_CONAI_mask(); virtual ~TDichiarazione_CONAI_mask() {} }; TDichiarazione_CONAI_mask::TDichiarazione_CONAI_mask() : TAutomask("tp0900a") { } bool TDichiarazione_CONAI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_PERIODO: break; default: break; } return true; } /////////////////////////////////////////////////////////// // APPLICAZIONE /////////////////////////////////////////////////////////// class TDichiarazione_CONAI : public TSkeleton_application { protected: void crea_csv(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 TDichiarazione_CONAI::crea_csv(const TMask& mask) const { //Tanto per cominciare stabilisce il range di date... const int anno = mask.get_int(F_ANNO); TDate dataini(1, 1, anno); TDate datafin(31, 12, anno); const int tipo_periodo = mask.get_int(F_PERIODO); //se il periodo scelto non e' un anno intero... switch (tipo_periodo) { case 2: { const int mese = mask.get_int(F_TRIMESTRE); dataini.set_month(mese); datafin = dataini; datafin.addmonth(2); datafin.set_end_month(); } break; case 3: { const int mese = mask.get_int(F_MESE); dataini.set_month(mese); datafin = dataini; datafin.set_end_month(); } break; default: break; } //Adesso tocca al codice articolo in base alla specie CONAI const int specie_conai = mask.get_int(F_SPECIECONAI); TConfig ditta_ini(CONFIG_DITTA, "ve"); TVariant codart; switch (specie_conai) { case 1: codart = ditta_ini.get("CODACC"); //acciaio break; case 2: codart = ditta_ini.get("CODALL"); //alluminio break; case 3: codart = ditta_ini.get("CODCAR"); //carta break; case 4: codart = ditta_ini.get("CODPLA"); //plastica break; case 5: codart = ditta_ini.get("CODLEG"); //legno break; case 6: codart = ditta_ini.get("CODVET"); //vetro break; default: break; } //Adesso prende le numerazioni e i tipi documento TSheet_field& sf = mask.sfield(F_TIPI); //la query e' sulle righe documento TString query; query << "USE RDOC KEY 5\n"; query << "SELECT ((NUM(ANSI(33.DATADOC))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(33.DATADOC))<=NUM(ANSI(#ADATA))))&&(33.TIPODOC=#TIPODOC)&&(GENERATA=\"X\")\n"; query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n"; query << "FROM CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n"; query << "TO CODART=#CODART ANNO=#ANNO CODNUM=#CODNUM PROVV=\"D\"\n"; //crea il recordset ed assegna subito i valori delle variabili che restano costanti al cambio.. //..numerazione/tipo: sono le date ed il codice articolo TISAM_recordset rdoc(query); rdoc.set_var("#ANNO", TVariant((long)anno)); rdoc.set_var("#DADATA", dataini); rdoc.set_var("#ADATA", datafin); rdoc.set_var("#CODART", codart); //Visto che e' possibile avere una secchiata di numerazioni, gli tocca fare un giro per ogni numerazione FOR_EACH_SHEET_ROW(sf, r, row) { //estrazione della numerazione e del tipo del record corrente dello sheet rdoc.set_var("#CODNUM", TVariant(row->get(0))); rdoc.set_var("#TIPODOC", TVariant(row->get(2))); const long items = rdoc.items(); warning_box("Hai trovato %ld righe bello!", items); } } void TDichiarazione_CONAI::main_loop() { TDichiarazione_CONAI_mask mask; while (mask.run() == K_ENTER) { crea_csv(mask); } } bool TDichiarazione_CONAI::create() { if (!has_module(DCAUT)) return error_box(TR("Modulo non autorizzato")); return TSkeleton_application::create(); } int tp0900(int argc, char* argv[]) { TDichiarazione_CONAI dc; dc.run(argc, argv, TR("Dichiarazione CONAI")); return 0; }