#include #include #include #include #include #include #include #include #include #include "..\ve\rcondv.h" #include "..\mg\codcorr.h" #include "..\mg\anamag.h" #include "ps0830.h" #include "ps0830100.h" ///////////////////////////////////////////////////////////// // Recordset esporta_listino ///////////////////////////////////////////////////////////// class TEsporta_listino_recordset : public TCSV_recordset { protected: virtual const TToken_string& sheet_head() const; public: virtual bool set(unsigned int fld, const TVariant& var); TEsporta_listino_recordset(); }; const TToken_string& TEsporta_listino_recordset::sheet_head() const { TToken_string& head = get_tmp_string(); head = "COD_EAN@20|PREZZO@10|CASSA@5|DESCRIZIONE@13|SCPERC@5|SCMON@5|CODOFF@5"; return head; } bool TEsporta_listino_recordset::set(unsigned int column, const TVariant& var) { TString str; if (var.is_date()) { if (!var.is_empty()) { const TDate data = var.as_date(); str.format("%04d-%02d-%02d", data.year(), data.month(), data.day()); } } else str << var; str.replace('|', '/'); return TCSV_recordset::set(column, TVariant(str)); } TEsporta_listino_recordset::TEsporta_listino_recordset() : TCSV_recordset("CSV(\":\")") { } ///////////////////////////////////////////////////////////// // Mask esporta_listino ///////////////////////////////////////////////////////////// class TEsporta_listino_mask : public TAutomask { private: void serialize(bool bSave); protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: void esporta_listino(const bool anteprima); TEsporta_listino_mask(); ~TEsporta_listino_mask(); }; void TEsporta_listino_mask::serialize(bool bSave) { const char* defpar = "ps"; TConfig ini(CONFIG_DITTA, defpar); for (int i = fields()-1; i >= 0; i--) { TMask_field& f = fld(i); const TFieldref* fr = f.field(); if (fr != NULL) { if (bSave) fr->write(ini, defpar, f.get()); else f.set(fr->read(ini, defpar)); } } } TEsporta_listino_mask::TEsporta_listino_mask() : TAutomask("ps0830100") { serialize(false); } TEsporta_listino_mask::~TEsporta_listino_mask() { serialize(true); } bool TEsporta_listino_mask::on_field_event(TOperable_field& f, TField_event e, long jolly) { switch (f.dlg()) { case DLG_ELABORA: if (e == fe_button) { esporta_listino(false); } break; case DLG_PRINT: if (e == fe_button) { esporta_listino(true); } break; case DLG_QUIT: if (e == fe_button) { } break; default: break; } return TRUE; } void TEsporta_listino_mask::esporta_listino(const bool anteprima) { // query su listino TString query; query << "USE RCONDV\n"; query << "SELECT (CATVEN=\"DE\") && (RCONDV.PREZZO>\"0\") && (CODCORR.CODARTALT!=\"\")\n"; query << "JOIN CODCORR INTO CODART==CODRIGA NRIGA=1\n"; query << "JOIN ANAMAG INTO CODART==CODRIGA\n"; query << "ORDER BY CODCORR.CODARTALT, ANAMAG.REPARTO[2,3], RCONDV.CODRIGA"; TISAM_recordset listino(query); TEsporta_listino_recordset csv; const int items = listino.items(); TProgind pi(items, "Estrazione listino...", true, true); for (bool ok = listino.move_first(); ok; ok = listino.move_next()) { if (!pi.addstatus(1)) break; csv.new_rec(""); csv.set(0, listino.get("CODCORR.CODARTALT")); real prezzo = listino.get(RCONDV_PREZZO).as_real(); prezzo.round(2); prezzo = prezzo*100; csv.set(1, TVariant(prezzo)); csv.set(2, listino.get("ANAMAG.REPARTO[2,3]")); csv.set(3, listino.get("ANAMAG.DESCR[1,12]")); csv.set(4, "0"); csv.set(5, "0"); csv.set(6, "0"); } //for(move_first().. if (anteprima) { //TRecordset_sheet sheet(csv, TR("Elenco di controllo")); //sheet.run(); csv.save_as("ps0830100.xls", fmt_silk); xvt_sys_goto_url("ps0830100.xls", "open"); } else { TFilename file = get(F_PATH); file.add(get(F_NAME)); csv.save_as(file, fmt_text); if (yesno_box("Generazione listino terminata. Procedo con l'invio?")) { TFilename appname = "aggiorna.bat"; if (appname.exist()) { TExternal_app a("aggiorna.bat"); a.run(false,false); } else message_box("Impossibile procedere con l'invio, non esiste l'applicazione aggiorna.bat"); } } } /////////////////////////////////////////////////////////// // TEsporta_listino applicazione /////////////////////////////////////////////////////////// class TEsporta_listino_app : public TSkeleton_application { protected: virtual bool check_autorization() const {return false;} virtual const char * extra_modules() const {return "ve";} virtual void main_loop(); }; void TEsporta_listino_app::main_loop() { open_files(LF_RCONDV, LF_ANAMAG, LF_CODCORR, 0); TEsporta_listino_mask m; m.run(); } int ps0830100(int argc, char* argv[]) { TEsporta_listino_app app; app.run(argc, argv, TR("Esporta listino")); return 0; }