#include #include #include #include #include #include "../ve/velib.h" #include "comuni.h" #include "../mg/anamag.h" #include "lvcondv.h" #include "lvrcondv.h" #include "lv3800a.h" //////////////////////////////////// //// TINVIA_CLIENTI_SKEMA //// //////////////////////////////////// //Classe TInvia_clienti_skema class TInvia_clienti_skema: public TAS400_recordset { public: void aggiungi_riga(const long codcf); TInvia_clienti_skema(); }; void TInvia_clienti_skema::aggiungi_riga(const long codcf) { //preparo la cache su clifo TToken_string clifokey; clifokey.add('C'); clifokey.add(codcf); const TRectype& clifo = cache().get(LF_CLIFO, clifokey); const TString80 ragsoc = clifo.get(CLI_RAGSOC); TString80 localita = clifo.get(CLI_LOCCF); if(localita.empty()) { TToken_string comunikey; comunikey.add(""); comunikey.add(cap2comune(clifo.get(CLI_CAPCF), localita)); localita = cache().get(LF_COMUNI, comunikey, COM_DENCOM); } new_rec(""); set("CODCF", TVariant(codcf)); set("RAGSOC", ragsoc); set("CITTA", localita); } TInvia_clienti_skema::TInvia_clienti_skema() : TAS400_recordset("AS400(122)") { create_field("CODCF", -1, 20, _longzerofld, true); //codice cliente create_field("RAGSOC", -1, 50, _alfafld, true); //ragione sociale create_field("CITTA", -1, 50, _alfafld, true); //cittą } ///////////////////////////////////// //// TINVIA_ARTICOLI_SKEMA //// ///////////////////////////////////// //Classe TInvia_articoli_skema class TInvia_articoli_skema: public TAS400_recordset { public: void aggiungi_riga(const TString& codart); TInvia_articoli_skema(); }; void TInvia_articoli_skema::aggiungi_riga(const TString& codart) { //preparo la cache su anamag const TRectype& anamag = cache().get(LF_ANAMAG, codart); const TString80 desart = anamag.get(ANAMAG_DESCR); const TString80 tpart = anamag.get(ANAMAG_TIPOPARTE); TString8 codlav; codlav.format("%05d", anamag.get(ANAMAG_CODLAV1)); TString16 peso; peso.format("%010d", anamag.get(ANAMAG_PESO)); const real lunghezza = anamag.get_real(ANAMAG_USER9); const real larghezza = anamag.get_real(ANAMAG_USER10); new_rec(""); set("CODART", codart); set("DESART", desart); set("CODLAV", codlav); set("TPART", tpart); set("PESO", peso); set("LUNGHEZZA", lunghezza); set("LARGHEZZA", larghezza); } TInvia_articoli_skema::TInvia_articoli_skema() : TAS400_recordset("AS400(127)") { create_field("CODART", -1, 20, _alfafld, true); //codice articolo create_field("DESART", -1, 50, _alfafld, true); //descrizione create_field("CODALV", -1, 5, _intzerofld, true); //codice lavaggio create_field("TPART", -1, 20, _alfafld, true); //tipo articolo create_field("PESO", -1, 20, _alfafld, true); //peso create_field("LUNGHEZZA", -1, 5, _realfld, true); //lunghezza create_field("LARGHEZZA", -1, 5, _realfld, true); //larghezza } ////////////////////////////////////// //// TINVIA_DOTAZIONI_SKEMA //// ////////////////////////////////////// //Classe TInvia_dotazioni_skema class TInvia_dotazioni_skema: public TAS400_recordset { public: void aggiungi_riga(const long codcf, const long codcont); TInvia_dotazioni_skema(); }; void TInvia_dotazioni_skema::aggiungi_riga(const long codcf, const long codcont) { //preparo il recodset delle righe contratto TString query; query << "USE LVRCONDV\n" << "FROM CODCF=" << codcf << " CODCONT=" << codcont << "\n" << "TO CODCF=" << codcf << " CODCONT=" << codcont; TISAM_recordset rcont(query); for(bool ok = rcont.move_first(); ok; ok = rcont.move_next()) { const TString80 codart = rcont.get(LVRCONDV_CODART).as_string(); new_rec(""); set("CODCF", TVariant(codcf)); set("CODART", codart); } } TInvia_dotazioni_skema::TInvia_dotazioni_skema() : TAS400_recordset("AS400(122)") { create_field("CODCF", -1, 20, _longzerofld, true); //codice cliente create_field("RAGSOC", -1, 50, _alfafld, true); //ragione sociale create_field("CITTA", -1, 50, _alfafld, true); //cittą } /////////////////////////// //// TInvcon_skema_msk //// /////////////////////////// //classe TInvcon_skema_msk class TInvcon_skema_msk: public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: void esporta() const; TInvcon_skema_msk(); }; //ESPORTA: metodo che crea il file di output nel percorso desiderato void TInvcon_skema_msk::esporta() const { //recupero i dati di interesse dalla maschera const TDate datasc = get_date(F_SCAD); //prendo il path dalla maschera const TString& path = get(F_PATH); TFilename file_cli = path; file_cli.add("clienti.txt"); TFilename file_art = path; file_art.add("articoli.txt"); TFilename file_dot = path; file_dot.add("dotazione.txt"); //preparo il recodset che contiene tutti i contratti validi TString query; query << "USE LVCONDV\n" << "SELECT (BETWEEN(DATAIN,\"\",#DATA))&&((NUM(ANSI(DATASC))>=" << datasc.date2ansi() << ")||(DATASC=\"\"))&&(CONTSPOR>0)\n" << "BY CODCF"; TISAM_recordset contratti(query); contratti.set_var("#DATA", datasc); if(contratti.items() > 0) { TInvia_clienti_skema* recset_clienti = new TInvia_clienti_skema(); TInvia_articoli_skema* recset_articoli = new TInvia_articoli_skema(); TInvia_dotazioni_skema* recset_dotazioni = new TInvia_dotazioni_skema(); TAssoc_array presenti; contratti.move_first(); long oldcodcf = contratti.get(LVCONDV_CODCF).as_int(); TProgind pi(contratti.items(), "Esportazione in corso...", true, true); for(bool ok = contratti.move_first(); ok; ok = contratti.move_next()) { if (!pi.addstatus(1)) break; const long codcf = contratti.get(LVCONDV_CODCF).as_int(); const long codcon = contratti.get(LVCONDV_CODCONT).as_int(); if(oldcodcf != codcf) { presenti.destroy(); oldcodcf = codcf; } recset_clienti->aggiungi_riga(codcf); recset_dotazioni->aggiungi_riga(codcf, codcon); } recset_clienti->save_as(file_cli); recset_dotazioni->save_as(file_dot); TISAM_recordset anamag(TR("USE ANAMAG")); for(bool ok1 = anamag.move_first(); ok1; ok1 = anamag.move_next()) { const TString80 codart = anamag.get(ANAMAG_CODART).as_string(); recset_articoli->aggiungi_riga(codart); } recset_articoli->save_as(file_art); message_box(TR("Esportazione terminata")); } else warning_box(TR("Non ci sono contratti in essere rispetto alla data specificata")); } //ON_FIELD_EVENT: metodo che gestisce gli eventi sui campi della maschera bool TInvcon_skema_msk::on_field_event(TOperable_field& f, TField_event e, long jolly) { return true; } //metodo costruttore che precarica i campi di interesse sulla maschera TInvcon_skema_msk::TInvcon_skema_msk() : TAutomask("lv3800a") {} /////////////////////////// //// TInvcon_skema_app //// /////////////////////////// //classe TInvcon_skema_app class TInvcon_skema_app : public TSkeleton_application { public: virtual void main_loop(); }; void TInvcon_skema_app::main_loop() { TInvcon_skema_msk msk; while (msk.run() != K_QUIT) msk.esporta(); } int lv3800(int argc, char *argv[]) { TInvcon_skema_app a; a.run (argc, argv, TR("Invio a contapezzi")); return TRUE; }