#include #include #include #include #include #include #include #include #include "../cg/cgsaldac.h" #include "ps0713.h" #include "ps0713100a.h" /////////////////////////////////////////////////////////// // TEsporta_ps0713 maschera /////////////////////////////////////////////////////////// class TEsporta_ps0713_mask : public TAutomask { public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); TEsporta_ps0713_mask(); ~TEsporta_ps0713_mask(); }; bool TEsporta_ps0713_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { //giochetto per avere la lista dei files validi nella directory di trasferimento! case F_ADATA: if (e == fe_modify || e == fe_close) { TDate adata = o.get(); TString str_adata; str_adata << adata.date2ansi() << ".txt"; set(F_NAME, str_adata); } break; default: break; } return true; } TEsporta_ps0713_mask::TEsporta_ps0713_mask() : TAutomask("ps0713100a") { //carica i parametri del file di configurazione TConfig configfile("ps0713conf.ini", "MAIN"); for (int i = 0; i < fields() ; i++) { TMask_field& f = fld(i); const TFieldref* fr = f.field(); if (fr != NULL) f.set(configfile.get(fr->name())); } } TEsporta_ps0713_mask::~TEsporta_ps0713_mask() { //carica i parametri del file di configurazione TConfig configfile("ps0713conf.ini", "MAIN"); for (int i = 0; i < fields() ; i++) { TMask_field& f = fld(i); const TFieldref* fr = f.field(); if (fr != NULL) configfile.set(fr->name(), f.get()); } } ///////////////////////////////////////////////////////////// // TEsporta_ps0713 recordset (righe movimenti iva) ///////////////////////////////////////////////////////////// class TEsporta_ps0713_recordset : public TCSV_recordset { public: TEsporta_ps0713_recordset(); }; TEsporta_ps0713_recordset::TEsporta_ps0713_recordset() : TCSV_recordset("CSV(\"\t\")") { } /////////////////////////////////////////////////////////// // TEsporta_ps0713 applicazione /////////////////////////////////////////////////////////// class TEsporta_ps0713_app : public TSkeleton_application { protected: virtual bool check_autorization() const {return false;} virtual const char * extra_modules() const {return "cg";} virtual void main_loop(); bool test_partita(const long numreg, TDate& last_data_pag) const; public: void esporta_righe_iva(const TMask& msk) const; void set_inviva(TISAM_recordset& rmoviva) const; }; void TEsporta_ps0713_app::set_inviva(TISAM_recordset& rmoviva) const { long last_numreg = 0L; const long items = rmoviva.items(); TProgind pi(items, TR("Impostazione flag Inviata parte IVA..."), true, true); TLocalisamfile mov(LF_MOV); for (bool ok = rmoviva.move_first(); ok; ok = rmoviva.move_next()) { if (!pi.addstatus(1)) break; const long curr_numreg = rmoviva.get(RMI_NUMREG).as_int(); if (curr_numreg != last_numreg) { TDate last_data_pag; bool partita_chiusa = test_partita(curr_numreg, last_data_pag); if (partita_chiusa) { mov.put(MOV_NUMREG, curr_numreg); int err = mov.read(); if (err == NOERR) { mov.put(MOV_INVIVA, 'X'); err = mov.rewrite(); } if (err != NOERR) { TString cazzone; cazzone << TR("Impossibile aggiornare il movimento "); cazzone << curr_numreg; error_box(cazzone); break; } } last_numreg = curr_numreg; } } } bool TEsporta_ps0713_app::test_partita(const long numreg, TDate& last_data_pag) const { bool finito = false; TPartite_array torneo; torneo.add_numreg(numreg); TPartita* partita = torneo.first(); if (partita != NULL && partita->chiusa()) { for (int r = partita->last(); r > 0; r = partita->pred(r)) { const TRiga_partite& row = partita->riga(r); const tipo_movimento tipo = row.tipo(); if (tipo == tm_pagamento || tipo == tm_pagamento_insoluto) { const TDate datadoc = row.get_date(PART_DATAPAG); if (datadoc > last_data_pag) last_data_pag = datadoc; } } finito = true; } return finito; } void TEsporta_ps0713_app::esporta_righe_iva(const TMask& m) const { TFilename path = m.get(F_PATH); path.add(m.get(F_NAME)); if (path.exist()) if (!yesno_box(TR("ATTENZIONE! File gia' presente! Se si procede sara' azzerato il file esistente!\nContinuare?"))) return; // query su righe iva joinati ai mov TString query; query << "USE RMOVIVA "; query << "SELECT ((NUM(ANSI(23.DATAREG))>=NUM(ANSI(#DADATA)))&&(NUM(ANSI(23.DATAREG))<=NUM(ANSI(#ADATA))))&&(23.INVIVA!=\"X\")&&(23.TIPO=\"F\")"; if (m.get_int(F_JOB) == 1) query << "&&(CODCMS!=\"\")"; else query << "&&(CODCMS=\"\")"; query << "\nJOIN MOV INTO NUMREG==NUMREG"; query << "\nJOIN %IVA ALIAS 101 INTO CODTAB==CODIVA"; query << "\nJOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF"; TISAM_recordset rmoviva(query); const TDate& adata = m.get_date(F_ADATA); const TDate dadata(1,1, adata.year() - 1); rmoviva.set_var("#DADATA", dadata); rmoviva.set_var("#ADATA", adata); TEsporta_ps0713_recordset csv; const long items = rmoviva.items(); TProgind pi(items, TR("Estrazione dati..."), true, true); TString ws; for (bool ok = rmoviva.move_first(); ok; ok = rmoviva.move_next()) { if (!pi.addstatus(1)) break; TDate last_data_pag; bool partita_chiusa = test_partita(rmoviva.get(RMI_NUMREG).as_int(), last_data_pag); if (partita_chiusa) { //creazione di un nuovo record da esportare csv.new_rec(""); //..e successivo riempimento csv.set(0, rmoviva.get(RMI_CODCMS)); csv.set(1, rmoviva.get("23.CODCF")); csv.set(2, rmoviva.get("20.RAGSOC")); const real imponibile = rmoviva.get(RMI_IMPONIBILE).as_real(); // const real imposta = rmoviva.get(RMI_IMPOSTA).as_real(); // const real lordo = imponibile + imposta; // csv.set(3, lordo); csv.set(3, imponibile); //csv.set(2, rmoviva.get("101@.R0")); //aliquota non ci vuole piu' // csv.set(5, imposta); csv.set(6, rmoviva.get("23.DATADOC")); csv.set(7, rmoviva.get("23.NUMDOC")); csv.set(8, last_data_pag); // csv.set(9, rmoviva.get(RMI_GRUPPO)); // csv.set(10, rmoviva.get(RMI_CONTO)); // csv.set(11, rmoviva.get(RMI_SOTTOCONTO)); // csv.set(12, rmoviva.get(RMI_NUMREG)); } } //for(move_first().. csv.save_as(path, fmt_text); #ifdef DBG xvt_sys_goto_url(path, "open"); #endif TString msg; msg << TR("Si conferma l'esportazione definitiva dei movimenti IVA fino al "); msg << m.get(F_ADATA); if (yesno_box(msg)) set_inviva(rmoviva); //mette il flag di "INVIVA" alla testata movimento } void TEsporta_ps0713_app::main_loop() { TEsporta_ps0713_mask m; while (m.run() == K_ENTER) esporta_righe_iva(m); } int ps0713100(int argc, char* argv[]) { TEsporta_ps0713_app app; app.run(argc, argv, TR("Trasferimento dati IVA")); return 0; }