diff --git a/src/fp/fp0700.cpp b/src/fp/fp0700.cpp index 4faddf95e..35a2f6bf4 100644 --- a/src/fp/fp0700.cpp +++ b/src/fp/fp0700.cpp @@ -33,7 +33,6 @@ protected: bool on_key(KEY key) override; bool check_not_empty(); bool check_full_fields() const; - bool check_doc_filter(const TDocumentoEsteso& td) const; void set_err_paf(); void fill(); void init(); @@ -123,9 +122,25 @@ void TPAR_mask::fill() enable(DLG_FINDREC, filter_selected == "D"); enable(DLG_PRINT, _enable_chiave_fixer && filter_selected.empty()); - query << "USE " << LF_MOV << " KEY 3 SELECT (BETWEEN(" << MOV_DATAREG << "," - << dal.date2ansi() << ',' << al.date2ansi() << "))&&(REG!=\"\")" - << "\nFROM " << MOV_TIPO << "=C\nTO " << MOV_TIPO "=C"; + + /* + VECCHIA QUERY + + query << "USE " << LF_MOV << " KEY 3 SELECT (BETWEEN(" << MOV_DATAREG << "," + << dal.date2ansi() << ',' << al.date2ansi() << "))&&(REG!=\"\")" + << "\nFROM " << MOV_TIPO << "=C\nTO " << MOV_TIPO "=C"; + */ + + //MY QUERY + + query << "USE " << LF_MOV << " KEY 2\n"; + if (dal.ok()) + query << "FROM " << MOV_DATAREG << "=" << dal << "\n"; + if (al.ok()) + query << "TO " << MOV_DATAREG << "=" << al << "\n"; + + + //query << "USE " << LF_MOV << " WHERE CODCAUS IN ('A01') AND DATADOC BETWEEN " << dal.date2ansi() << " AND " << al.date2ansi(); TISAM_recordset rec(query); @@ -169,6 +184,7 @@ void TPAR_mask::fill() regs.set_row_cell(S_DATAREG, rec.get(MOV_DATAREG).as_date(), r); regs.set_row_cell(S_CLIENTE, rec.get_long(MOV_CODCF), r); regs.set_row_cell(S_RAGSOC, cli.get(CLI_RAGSOC), r); + regs.set_row_cell(S_TIPODOC, rec.get_string(MOV_TIPODOC), r); // non c'è ? TString cod_ind_sped = rec.get(DOC_CODINDSP).as_string(); TString rif = get_dest_sdi(rec.get_string(CFV_TIPOCF)[0], rec.get_long(CFV_CODCF), EMPTY_STRING); @@ -370,50 +386,50 @@ void TPAR_mask::connect_keys() void TPAR_mask::export_paf() { int ndocs = 0; - TLocalisamfile doc(LF_DOC); - TString_array& sht = sfield(F_REGS).rows_array(); - TDoc_fp elab; + TSheet_field& sht = sfield(F_REGS); + TReg_fp elab(get(F_TIPO_SDI)); //elab.set_cache_insert(true); if (!sht.empty()) { - TProgress_monitor pi(sht.items(), "Esportazione Fatture"); - FOR_EACH_ARRAY_ROW(sht, r, riga) + TProgress_monitor pi(sht.items(), "Esportazione Regolarizzazioni"); + + FOR_EACH_SHEET_ROW_LOOP(sht, r) { if (!pi.add_status()) break; - if (riga->starts_with("X")) + if (sht.get_bool_row_cell(r, S_SELECTED)) { - const int anno = riga->get_int(sfield(F_REGS).cid2index(S_ANNO)); - const long nreg = riga->get_long(sfield(F_REGS).cid2index(S_NUMREG)); - const TDoc_key key(anno, EMPTY_STRING, nreg); //da fare + const long nreg = sht.get_long_row_cell(r, S_NUMREG); // Verifico che il codice sdi nello sheet sia lo stesso sulla testata del documento in caso contrario lo aggiorno - TRectype rec_doc = elab.key_to_doc(key); - if (rec_doc.read(doc) == NOERR) + TMovimento_contabile mov(nreg); + + if (elab.reg_to_paf(mov)) + ndocs++; + else { - /* - if (rec_doc.get(DOC_TIPODOCSDI).compare(riga->get(col_cod_sdi)) != 0) - { - rec_doc.put(DOC_TIPODOCSDI, riga->get(col_cod_sdi)); - rec_doc.rewrite(doc); - } - */ - if (elab.doc_to_paf(key)) - ndocs++; - else - { - if (!yesno_box("L'ultima fattura non è stata esportata, continuare?")) - break; - } + TString msg; + + msg.format("La registrazione numero %ld non è stata esportata, continuare?", nreg); + elab.log().log(2, msg); + if (!yesno_box(msg)) + break; } } } + + if (elab.force_commit() <= 0) + { + TString msg; + + msg.format("Errore durante il cambiamento di stato finale, potrebbero esser rimaste delle fatture in Pronto"); + elab.log().log(2, msg); + error_box(msg); + } + elab.show_log(); } - if (elab.force_commit() <= 0) - error_box("Errore durante il cambiamento di stato finale, potrebbero esser rimaste delle fatture in Pronto"); - elab.show_log(); } bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) @@ -446,9 +462,10 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { TSheet_field& regs = sfield(F_REGS); TToken_string& row = regs.row(regs.selected()); - // Salvo subito su file le impostazioni di esportazione, in fplib accedo ai file - save_all_fields(); - fill(); + TMovimento_contabile mov(regs.get_long_row_cell(regs.selected(), S_NUMREG)); + + if (mov.edit()) // Perchè prima andava senza dovergli mettere nulla? + fill(); } break; case DLG_ALL: @@ -557,27 +574,6 @@ bool TPAR_mask::check_full_fields() const return true; } -bool TPAR_mask::check_doc_filter(const TDocumentoEsteso& d) const -{ - const TString& codnum = d.get(DOC_CODNUM); - const TString& tipodoc = d.get(DOC_TIPODOC); - const char stato = d.stato(); - const TTipo_documento& td = cached_tipodoc(d.get(DOC_TIPODOC)); - TSheet_field & scaus = sfield(F_CAUSALI_TIPO); - - // Mi precarico la tabella dei documenti scelti - FOR_EACH_SHEET_ROW(scaus, nr, row) - { - if (codnum.compare(row->get(_codnum)) == 0 && // Codice numerazione - tipodoc.compare(row->get(_tipodoc)) == 0 && // Tipo documento - td.reg_fisc().full() && // Regime fiscale - row->get_char(_dastato) <= stato && // Da stato - row->get_char(_astato) >= stato) // A stato - return true; - } - return false; -} - void TPAR_mask::set_err_paf() { // Vado a riportare sui paf l'errore diff --git a/src/fp/fp0700a.h b/src/fp/fp0700a.h index f8790865c..d90170604 100644 --- a/src/fp/fp0700a.h +++ b/src/fp/fp0700a.h @@ -26,3 +26,4 @@ #define S_SPLITPAY 110 #define S_ATTACH 111 #define S_ONLYGEN 112 +#define S_TIPODOC 113 diff --git a/src/fp/fplib.h b/src/fp/fplib.h index 4a6f66631..b0e147c4d 100644 --- a/src/fp/fplib.h +++ b/src/fp/fplib.h @@ -642,6 +642,7 @@ private: bool _nascondi_sconti_righe_fatt; TFP_nota_piede_f _riga_npf; bool _has_cust; + TString _tipo_doc_sdi; bool insert(TPaf_record& p); bool remove(TPaf_record& p); @@ -688,12 +689,14 @@ public: bool reg_to_paf(const TMovimento_contabile& mov); bool reg_to_paf(long n_mov); // Mostra il log a fine esecuzione + TLog_report& log() { return _log; } bool show_log(); int commit(); int force_commit(); void set_cache_insert(const bool v) { _cache_insert = v; } - TReg_fp(); + + TReg_fp(const char* tipo_doc_sdi ); ~TReg_fp(); }; #endif // __FPLIB_H diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 7ea2afe4a..a8353e16d 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -88,13 +88,17 @@ bool check_tables() tabmod.put("MOD", "FP"); tabmod.put("COD", "SQL"); tabmod.put("CODTAB", "VERSION"); - TString version; + int version; if (tabmod.read() == NOERR) - version = tabmod.get("S0"); + version = tabmod.get_int("S0"); for (SLIST_ELT file = xvt_slist_get_first(files); file; file = xvt_slist_get_next(files, file)) { - TString file_version = TFilename(file->str).name_only(); - file_version = file_version.mid(2, 4); + TFilename fn(file->str); + + fn = fn.name_only(); + + int file_version = atoi(fn.mid(2, 4)); + if (file_version <= version) continue; @@ -117,7 +121,7 @@ bool check_tables() s.erase(0, limiter); if (!fp_db().sq_set_exec(query, false) || !fp_db().sq_commit()) { - fatal_box("Impossibile eseguire/salvare la query:\n%s\n%s", query.c_str(), fp_db().sq_get_text_error(false)); + error_box("Impossibile eseguire/salvare la query:\n%s\n%s", query.c_str(), fp_db().sq_get_text_error(false)); } } } @@ -3076,7 +3080,7 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov) // // TPaf_record& paf0700f = _paf_container.get_paf("PAF0700F"); - paf0700f.set("P7_TIPODOC", tipo_doc_sdi(mov)); + paf0700f.set("P7_TIPODOC", _tipo_doc_sdi); paf0700f.set("P7_DIVISA", "EUR"); // Fisso su euro in quanto effettuiamo il cambio paf0700f.set("P7_DATA", mov.get_date(MOV_DATADOC)); paf0700f.set("P7_NUMERO", ""); //da chiedere ad ilaria @@ -3097,112 +3101,25 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov) TPaf_record& paf1800f = _paf_container.get_paf("PAF1800F"); TPaf_record& paf2000f = _paf_container.get_paf("PAF2000F"); TPaf_record& paf2100f = _paf_container.get_paf("PAF2100F"); - TPaf_record& paf1900f = _paf_container.get_paf("PAF1900F"); TPaf_record& paf3000f = _paf_container.get_paf("PAF3000F"); int n_righe_iva = mov.iva().rows(); - for (int i = 0; i < n_righe_iva; i++) + for (int i = 1; i <= n_righe_iva; i++) { reset(paf1800f); paf1800f.set("PI_NUMEROLINEA", (long)i); + add_riepilogo_iva(mov, i); + ok &= insert(paf1800f); reset(paf3000f); paf3000f.set("PT_RIFNUMLINEA", (long)i); paf3000f.set("PT_COMMENTO", "");//TODO COSA DOBBIAMO METTERE NELLA DESCRIZIONE IVA CHE NON C'è // - reset(paf2100f); - paf2100f.set("PK_KEYNLINEA", (long)i); //TODO va bene??? - paf2100f.set("PK_KEYNLINAR", (long)i);// qui???? CHE DIFF C'è TRA KEYLINEA E KEYLINEAR - - - add_riepilogo_iva(mov, i); - - - /* Se ho una fattura che deriva dalla fatturazione differita delle lavanderie prendo - * dalla relativa riga descrizione tutti i riferimenti alle bolle che mancano */ - - ok &= insert(paf1800f); if (ok) ok &= insert(paf3000f); if (ok) ok &= insert(paf0700f); - // - // - /* - if (_gestioneallegati) - { - TPaf_record& paf2600f = _paf_container.get_paf("PAF2600F"); - long nprogr = 0; // Numero di file allegati - // Se abilitato stampo il documento e lo allego - TFilename rep; - - if (_allegafattura) - { - if (!dongle().active(RSAUT)) - { - _log.log(1, "Impossibile generare la fattura, il modulo RS non abilitato!"); - } - else if (!doc.tipo().main_print_profile(rep, 2)) - { - _log.log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!"); - } - else - { - //ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} {NUM_COPIE} {ARCHIVIAZIONE} - // Costruisco la chiamata - static TString commandline; - commandline.cut(0) << "ve1 -2 " << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_ANNO) - << ' ' << doc.get(DOC_PROVV) << ' ' << doc.get(DOC_NDOC) << " X P 1 D"; // X: stampa su disco, P: provvisorio, 1: 1 copia, D: disabilita archiviazione - TExternal_app interattivo(commandline); - if (interattivo.run() != NOERR) - { - TString msgerr = "Fallita generazione PDF documento "; - msgerr << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_ANNO) - << ' ' << doc.get(DOC_PROVV) << ' ' << doc.get(DOC_NDOC); - error_box(msgerr); - } - else - { - TFilename pdf; pdf.tempdir(); - pdf << SLASH << doc.get(DOC_ANNO) << '_' << doc.get(DOC_CODNUM) << '_' << doc.get(DOC_NDOC) << ".pdf"; - if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?")) - { - return false; - } - if (!add_row_alleg(pdf, nprogr, paf2600f)) - return false; - } - } - TToken_string allegati(doc.get("COLL_GOLEM"), '\n'); - bool load_allegati = true; - if (allegati.full()) - { - if (_def_fld.empty()) - { - TString msgerr; msgerr << "Errore: il documento " << _bfatt << " ha degli allegati ma nella configurazione non stato impostato come trametterli\nCaricare il documento senza allegati?"; - load_allegati = false; - if (!yesno_box(msgerr)) - return false; - } - else - { - TFilename fname; - FOR_EACH_TOKEN(allegati, row) - { - const TToken_string entry(row); - if (entry.get(0, fname) && fname.exist()) - { - if (!add_row_alleg(fname, nprogr, paf2600f)) - return false; - } - } - } - } - } - } - */ - // Tabella di non invio XML TPaf_record& pafw300f = _paf_container.get_paf("PAFW300F"); pafw300f.set("PW_TIPODOC", ""); //TODO PASSARE IL TIPO DOCUMENTO DELLA MASK NEL COSTRUTTORE @@ -3242,7 +3159,7 @@ bool TReg_fp::reg_to_paf(long n_mov) //NON LE CAPISCO -TReg_fp::TReg_fp() : _cache_insert(false) +TReg_fp::TReg_fp(const char* tipo_doc_sdi) : _cache_insert(false) , _tipo_doc_sdi(tipo_doc_sdi) { _ditta.init(LF_NDITTE, prefix().get_codditta()); _cofi = get_cofi_tras(); @@ -3271,3 +3188,13 @@ TReg_fp::~TReg_fp() { commit(); } + +bool TReg_fp::show_log() +{ + TReport_book b; + TFilename name = "fp_err.log"; + + b.add(_log); + b.export_text(name, false, 132); + return _log.preview(); +}