#include "../lv/lvlib.h" #include "pl0002lib.h" #include "pl0002100a.h" #include #include #include #include #include #include #include #include #include <..\lv\lvcondv.h> #include <..\lv\lvrcondv.h> #include <..\mg\clifogiac.h> #include <..\ve\condv.h> #include <..\ve\rcondv.h> const char* const APPNAME = TR("Conversione anagrafiche"); /////////////////////////////////////////////////////////// // Trasferimenti veri e propri /////////////////////////////////////////////////////////// class TLif_clifo_co_clifor : public TLif_transfer { public: virtual bool trasferisci(); }; class TLif_clifo_ca_anagrafiche : public TLif_transfer { public: virtual bool trasferisci(); }; class TLif_contratti : public TLif_transfer { public: virtual bool trasferisci(); }; class TLif_articoli : public TLif_transfer { public: virtual bool trasferisci(); }; /////////////////////////////////////////////////////////// // TLif_clienti /////////////////////////////////////////////////////////// // trasferisce la prima parte dei clienti bool TLif_clifo_co_clifor::trasferisci() { TString query = "SELECT * " "FROM dbo.CO_CLIFOR"; TRecordset& recset = create_recordset(query); TConfig& ini = config(); TString_array lista_campi; ini.list_variables(lista_campi, true, "CO_CLIFOR", true); TSystemisamfile clienti(LF_CLIFO); clienti.open(_lock); TRectype& rec = clienti.curr(); TSystemisamfile cfven(LF_CFVEN); cfven.open(_lock); TRectype& cfv_rec = cfven.curr(); TLif_iterator hi(this); while (++hi) { const char tipocf = get_str("ind_clifor")[0]; const long codcf = get_long("cod_clifor"); const TString4 condpag = get_str("cod_pag"); const real fido = get_real("val_fido"); const char sospeso = get_str("ind_bloccato")[0]; TString16 codabi = get_str("cod_banca1"); codabi.lpad(5,'0'); TString16 codcab = get_str("cod_agenzia1"); codcab.lpad(5,'0'); TString80 iban = get_str("sig_iban1"); iban << get_str("sig_bban1"); rec.zero(); rec.put(CLI_TIPOCF, tipocf); rec.put(CLI_CODCF, codcf); rec.put(CLI_CODPAG, condpag); rec.put(CLI_FIDO, fido); rec.put(CLI_SOSPESO, sospeso == '0' ? false : true); rec.put(CLI_CODABI, codabi); rec.put(CLI_CODCAB, codcab); rec.put(CLI_IBAN, iban); aggiorna_record(rec, lista_campi); if (test_write(clienti)) { TString msg; msg << TR("Inserito cliente ") << " '" << tipocf << "\' -> " << codcf << " - " << rec.get(CLI_RAGSOC); log(msg); } } cfven.close(); clienti.close(); return write_enabled(); return true; } // trasferisce la seconda parte dei clienti bool TLif_clifo_ca_anagrafiche::trasferisci() { TString query = "SELECT * " "FROM dbo.CA_ANAGRAFICHE"; TRecordset& recset = create_recordset(query); TConfig& ini = config(); TString_array lista_campi; ini.list_variables(lista_campi, true, "CA_ANAGRAFICHE", true); TSystemisamfile clienti(LF_CLIFO); clienti.open(_lock); TRectype& rec = clienti.curr(); TSystemisamfile cfven(LF_CFVEN); cfven.open(_lock); TRectype& cfv_rec = cfven.curr(); TLif_iterator hi(this); while (++hi) { const long codcf = get_long("cod_anagra"); char tipocf = 'C'; rec.zero(); rec.put(CLI_TIPOCF, tipocf); rec.put(CLI_CODCF, codcf); int err = rec.read(clienti); if(err != NOERR) { tipocf = 'F'; rec.zero(); rec.put(CLI_TIPOCF, tipocf); rec.put(CLI_CODCF, codcf); err = rec.read(clienti); } if(err == NOERR) { const TString4 stato = get_str("cod_naz"); const TString80 ragsoc = get_str("des_ragsoc"); const TString16 cofi = get_str("cod_cfisc"); const TString16 paiv = get_str("cod_piva"); const long tpper = get_long("flg_per_fis"); const TString80 mail = get_str("des_email1"); const TString80 tel = get_str("sig_tel_fis"); const TString80 fax = get_str("sig_fax_fis"); const TString80 indirizzo = get_str("des_indir_res"); const TString localita = get_str("des_localita_fis"); const long cap = get_long("cod_cap_fis"); rec.put(CLI_TIPOCF, tipocf); rec.put(CLI_CODCF, codcf); rec.put(CLI_STATOCF, stato); rec.put(CLI_RAGSOC, ragsoc); rec.put(CLI_TIPOPERS, tpper == 0L ? 'G' : 'F'); rec.put(CLI_COFI, cofi); rec.put(CLI_PAIV, paiv); rec.put(CLI_MAIL, mail); rec.put(CLI_TEL, tel); rec.put(CLI_FAX, fax); rec.put(CLI_INDCF, indirizzo); rec.put(CLI_LOCCF, localita); rec.put(CLI_CAPCF, cap); aggiorna_record(rec, lista_campi); if (test_write(clienti)) { TString msg; msg << TR("Inserito cliente ") << " '" << tipocf << "\' -> " << codcf << " - " << rec.get(CLI_RAGSOC); log(msg); } } } cfven.close(); clienti.close(); return write_enabled(); } /////////////////////////////////////////////////////////// // TLif_contratti /////////////////////////////////////////////////////////// bool TLif_contratti::trasferisci() { TString query = "SELECT * " "FROM dbo.LIF_Contratti"; TRecordset& recset = create_recordset(query); TConfig& ini = config(); TString_array lista_campi; ini.list_variables(lista_campi, true, "CONTRATTI", true); TSystemisamfile condv(LF_LVCONDV); TSystemisamfile rcondv(LF_LVRCONDV); TSystemisamfile clifogiac(LF_CLIFOGIAC); condv.open(_lock); rcondv.open(_lock); clifogiac.open(_lock); TRectype& trec = condv.curr(); TRectype& rrec = rcondv.curr(); TRectype& grec = clifogiac.curr(); const int anno = TDate(TODAY).year(); TLif_iterator hi(this); TAssoc_array contratti; while (++hi) { const long codcf = get_long("cod_clifor"); TString8 tmp; tmp << codcf; if(!contratti.is_key(tmp)) { TDate dadata(get_str("dat_inizio")); bool inbolla = get_str("flg_nonriportaddt")[0] == 'N' ? false : true; trec.zero(); trec.put(LVCONDV_CODCF, codcf); trec.put(LVCONDV_CODCONT, 1); trec.put(LVCONDV_DATAIN, dadata); trec.put(LVCONDV_STPRZBOL, inbolla); test_write(condv); contratti.add(tmp, tmp); } rrec.zero(); grec.zero(); rrec.put(LVRCONDV_CODCF, codcf); rrec.put(LVRCONDV_CODCONT, 1); real dotin(get_str("qta_iniziale")); real dotod(get_str("qta_attuale")); TString80 codart = get_str("cod_art"); grec.put(CLIFOGIAC_ANNOES, anno); grec.put(CLIFOGIAC_TIPOCF, 'C'); grec.put(CLIFOGIAC_CODCF, codcf); grec.put(CLIFOGIAC_INDSPED, 0); grec.put(CLIFOGIAC_CODART, codart); grec.put(CLIFOGIAC_NRIGA, 1); grec.put(CLIFOGIAC_DOTIN, dotin); grec.put(CLIFOGIAC_DOTOD, dotod); test_write(clifogiac); real prezzo(get_str("prezzo_inuso")); real mincic(get_str("qta_minimociclaggio")); real valcon(get_str("valore_convenzionale")); real percfo(get_str("perc_forfait")); real przfis(get_str("prezzo_fisso_articolo")); bool bloccato = get_str("flg_disabilitato")[0] == '0' ? false : true; rrec.put(LVRCONDV_CODART, codart); rrec.put(LVRCONDV_PREZZO, prezzo); rrec.put(LVRCONDV_MINCIC, mincic); rrec.put(LVRCONDV_VALCONV, valcon); rrec.put(LVRCONDV_FORFPERCL, percfo); rrec.put(LVRCONDV_ARTBLOC, bloccato); rrec.put(LVRCONDV_IMPFISART, przfis); test_write(rcondv); } condv.close(); rcondv.close(); return write_enabled(); } bool TLif_articoli::trasferisci() { TString query = "SELECT * " "FROM dbo.MG_ARTICOLI"; TRecordset& recset = create_recordset(query); TConfig& ini = config(); TString_array lista_campi; ini.list_variables(lista_campi, true, "MG_ARTICOLI", true); TSystemisamfile anamag(LF_ANAMAG); anamag.open(_lock); TRectype& rec = anamag.curr(); TLif_iterator hi(this); while (++hi) { const TString80 codart = get_str("cod_art"); const TString80 descr = get_str("des_articolo"); const TString descragg = get_str("des_articolo_ex"); const real plordo(get_str("qta_pes_lordo_kg")); const real pnetto(get_str("qta_pes_netto_kg")); const long ppconf = get_long("num_colli"); rec.put(ANAMAG_CODART, codart); rec.put(ANAMAG_DESCR, descr); rec.put(ANAMAG_DESCRAGG, descragg); rec.put(ANAMAG_PESO, plordo); rec.put(ANAMAG_TARA, plordo - pnetto); rec.put(ANAMAG_PPCONF, ppconf); aggiorna_record(rec, lista_campi); if (test_write(anamag)) { TString msg; msg << TR("Inserito articolo ") << " '" << codart << "\' -> " << descr; log(msg); } } anamag.close(); return write_enabled(); return true; } /////////////////////////////////////////////////////////// // TImportazione_lif_msk /////////////////////////////////////////////////////////// class TImportazione_lif_msk : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); void serialize(bool bSave); public: void trasferisci(); TImportazione_lif_msk(); virtual ~TImportazione_lif_msk(); }; // Funzione di trasferimento dati da/verso file .ini con lo stesso nome della maschera // Andrebbe messo in libreria void TImportazione_lif_msk::serialize(bool bSave) { TFilename n = source_file(); n.ext("ini"); // Construisce il nome del .ini in base al .msk TConfig cfg(n, "Main"); // Crea il file di configurazione TString4 id; for (int i = fields()-1; i >= 0; i--) // Scandisce tutti i campi della maschera ... { TMask_field& f = fld(i); if (f.active() && f.is_loadable()) // ... selezionando solo quelli editabili { id.format("%d", f.dlg()); if (bSave) // A seconda del flag di scrittura ... cfg.set(id, f.get()); // ... o scrive sul .ini else f.set(cfg.get(id)); // ... o legge dal .ini } } } void TImportazione_lif_msk::trasferisci() { TString query_header1; TString query_header2; query_header1 << "ODBC(" << get(F_DSN1) << ',' << get(F_USR) << ',' << get(F_PWD) << ")\n"; query_header2 << "ODBC(" << get(F_DSN2) << ',' << get(F_USR) << ',' << get(F_PWD) << ")\n"; TReport_book book; TLif_log log; bool rep_to_print = false; bool go_on = true; if (go_on && get_bool(F_ANAGRAFICHE)) { TLif_clifo_co_clifor pc; pc.init(TR("Clienti / Fornitori"), query_header1, log); go_on = pc.trasferisci(); TLif_clifo_ca_anagrafiche pc1; pc1.init(TR("Clienti / Fornitori"), query_header2, log); go_on = pc1.trasferisci(); book.add(log); rep_to_print = true; } if (go_on && get_bool(F_CONTRATTI)) { TLif_contratti pc; pc.init(TR("Contratti"), query_header1, log); go_on = pc.trasferisci(); book.add(log); rep_to_print = true; } if (go_on && get_bool(F_ARTICOLI)) { TLif_articoli pc; pc.init(TR("Articoli"), query_header1, log); go_on = pc.trasferisci(); book.add(log); rep_to_print = true; } if (rep_to_print && book.pages() > 0) book.preview(); } bool TImportazione_lif_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case DLG_OK: if (e == fe_button) serialize(true); break; default: break; } return true; } TImportazione_lif_msk::TImportazione_lif_msk() : TAutomask("pl0002100a") { serialize(false); } TImportazione_lif_msk::~TImportazione_lif_msk() { } ///////////////////////////////////// //// TIMPORTAZIONE_LIF_APP //// ///////////////////////////////////// class TImportazione_lif_app : public TSkeleton_application { protected: virtual const char * extra_modules() const {return "ba";} virtual void main_loop(); }; void TImportazione_lif_app::main_loop() { TImportazione_lif_msk mask; while (mask.run() == K_ENTER) mask.trasferisci(); } int pl0002100(int argc, char* argv[]) { TImportazione_lif_app ih; ih.run(argc, argv, APPNAME); return 0; }